Core War
  homepage imaginarium core war


    Em 1949, surgiam as raízes dos modernos virus de computadores, ao ser publicado o artigo "Theory and Organization of Complicated Automata", por John von Neumann, mostrando como um programa de computador poderia se reproduzir. "Core War" é um tipo de programação com esta característica, onde os programas são "organismos" que rodam simultaneamente em um computador, como predadores, com o objetivo de destruir outros programas da memória e evitar serem destruidos. Neste sentido, o propósito do Core War é mais alto do que as outras linguagens: é o propósito da sobrevivência.

    Core War se tornou popular e evoluiu em sofisticados jogos com estratégias e contra-estratégias. Os programas podem se multiplicar, sofrer mutação, criar mini-programas auxiliares, se auto-reparar quando atingidos por um inimigo, observar o comportamento dos outros programas, saber como fugir de ataques, etc.

    Para realizar suas funções, os programas habitam um ambiente ("arena") que é na verdade uma área da memória do computador.

    Quando os programas são lançados na arena e começam a ser executados, a tela do computador pode mostrar o estado da memória do computador, com cores diferentes para cada um dos programas. A cada ciclo de processamento, o computador executa uma instrução de cada programa. Assim, é possível ver a evolução dos programas (onde eles estão se posicionando, se duplicando, atacando etc.) através do tempo. Para rodar um programa escrito em Redcode, é preciso utilizar um programa simulador chamado MARS (Memory Array Redcode Simulator).

    Os programas Core War trocados pela Internet ou, antigamente, através das BBS's e são utilizados em torneios. O criador de um programa não costuma conhecer previamente o comportamento do programa inimigo.

    Vírus de computadores possuem semelhanças com programas Core War, porém utilizam não uma região reservada na memória e sim a região usual de trabalho. Além disso os virus costumam ser muito mais complexos em funções que não são apenas de replicação e ataque a outros programas.

    A linguagem para criar um programa Core War é chamada de "Redcode" e é um tipo de dialeto da linguagem assembler. Alguns exemplos de programas bem pequenos escritos em Redcode estão abaixo, mostrando seu código (genótipo) e o comportamento (fenótipo):

Nome: Imp
Comportamento: Cria uma cópia de si mesmo na próxima posição de memória e move para a próxima instrução.
Código:
    imp: MOV imp, imp+1
Explicação: O primeiro "imp" é a posição de memória onde se encontra o comando "MOV imp, imp+1". Este comando serve para copiar o que tiver na posição "imp" para a próxima posição (imp+1). Ou seja, o programa vai se auto-criando à medida que cada linha vai sendo executada, pois uma linha cria a próxima com o mesmo conteudo.

Nome: "DWARF" (pigmeu)
Comportamento: Coloca uma bomba "0" em cada 5 posições de memória, para tentar "zerar" os dados e instruções dos programas inimigos. Como este programa é composto de apenas 4 instruções, ele fica em um intervalo, sem ser bombardeado pelo "0".
Código:
    1001: DAT -1
    1002: ADD #5 -1
    1003: MOV #0 @-2
    1004: JMP -2
Explicação: Cada linha do programa ocupa uma posição na "arena" (ex: O Dwarf ocupa as posições 1001, 1002, 1003 e 1004).
"DAT -1" armazena o número -1 no endereço atual (1001).
"ADD #5 -1" adiciona 5 ao valor armazenado no endereço anterior (o valor era -1 e passa a ser 4).
"MOV #0 @-2" coloca o número "0" na posição de memória referenciada pelo valor duas posições acima. Ou seja, coloca "0" na posição 4.
"JMP -2" retorna a execução do programa duas linhas para cima, ou seja, o comando ADD e MOV serão repetidos continuamente (programa em loop).
Quando a próxima repetição acontece e o comando ADD é executado novamente, este ira adicionar mais 5 ao valor armazenado no endereço anterior (era 4 e passa a ser 9). O MOV vai colocar agora uma bomba "0" na nesta nova posição (posição 9 na memória). E assim por diante, "matando" as posições 14, 19, 24, etc.

Rodrigo A. Siqueira