Está en la página 1de 10

MUNDO VIEJUNO

HOY...
2 programas entran,
uno sale (o no)
Pero, ¿qué invento es este?
● Orígenes legendarios.

● El origen de verdad: 1984 --> D.G. Jones y A.K. Dewdney.

● Warriors: Programas guerreros para su uso en la “arena”.

● Redcode: Versión reducida y abstracta de Ensamblador. NO ES ESTO


La arena
● Es una matriz de memoria, en principio variable pero
estandarizado entorno a las 8000 “celdas”.

● Los programas son colocados en una posición aleatoria


desde donde se comienzan a ejecutar.

● La memoria es circular, es decir la celda siguiente a la


última celda es la primera.

ESTO SI
MARS y los luchadores
MARS (Memory Array Redcode Simulator) antes de comenzar
● Es el responsable de cargar los programas en la
memoria “virtual”.

● Ejecuta una instrucción de cada programa por


turno, adelantando el puntero a la siguiente
instrucción.

● Cuando la instrucción de alguno de los programas


no es válida, este se considera perdedor.

● Existe un límite de tiempo definido. Se suelen


realizar varias rondas
DATA Dato DJN Resta y salta si
no cero
Redcode MOV Mueve / copia SPL Partir

ADD Suma CMP Compara


● Sería una versión de ensamblador muy
simplificada. SUB Resta SEQ Ignora si igual

MUL Multiplica SNE Ignora si no


● ICWS-88: 10 instrucciones y 4 modos de igual
direccionamiento.
DIV Divide SLT Ignora si valor
más bajo
● ICWS-94: 19 instrucciones y 8 modos de
MOD Módulo LDP Leer de zona
direccionamiento. privada

JMP Salto STP Guardar en


zona privada

JMZ Salto si cero NOP No operación

JMN Salto si no cero


¿Pero y esto como funciona?
Una vez compilados y cargados en la memoria los luchadores
Los luchadores comienzan a ejecutarse.

Existen distintas estrategias:

● Papel (Replicador): Se replica continuamente


minimizando así el riesgo de ser destruido.

● Piedra (Bombardero): Ataca la memoria escribiendo


instrucciones que no pueden ser ejecutadas, con una
estrategia más o menos definida.

● Tijera (Escáner): Intenta identificar los programas


enemigos buscando a través de la memoria para a
continuación destruirlos.
“Sin duda, Mr Marlow, mi programa
está mejor diseñado que el suyo”.
Es posible también cualquier combinación de las anteriores
estrategias.
Ejemplos

;redcode ;redcode-94b
;name Midget ;assert 1
;author Chip Wendell ;name scanner1
;strategy stone (bomber) ;version 1
;history Third place atthe 1986 ICWS tournament loop sub.ab #8,
Bomb dat #0, #-980 +1
Spacer equ 28 ptr jmz.f loop,
Start mov Bomb, @Bomb -MINDISTANCE
sub #Spacer,Bomb attack add #33,
jmp Start, #0 ptr
end Start mov little,
>ptr
mov little+1,
@ptr
spl @ptr,
<loop-1
sub #33,
ptr
jmp loop,
}loop
little mov -1,
Referencias
- Comunidad y emuladores: http://corewar.co.uk/
- Artículos: https://blog.codinghorror.com/core-war-two-programs-enter-one-
program-leaves/
- Twitter: https://twitter.com/xcorewar
- Core War Chanpionship 2017:
https://www.youtube.com/watch?v=A8DPfQL3uO0

- Autor: pactorre@gmail.com

También podría gustarte