Le langage Red Code permet de programmer les adversaires qui vont s'affronter dans la mémoire de l'ordinateur. Il est très simple et proche d'un langage d'assemblage (il ressemble beaucoup à l'assembleur des microprocesseurs de la famille x86 d'Intel).
La mémoire de l'ordinateur est constituée de 4096 cases (8000 dans la version originale de Dewdney, ce nombre a été diminué pour une raison expliquée par la suite). La mémoire est "bouclée" : la case après la dernière (d'adresse 4095) est la première case (d'adresse 0). Ainsi, l'adresse 4100 est équivalente à l'adresse 4 (4100 - 4096 = 4) et -3 est équivalente à 4093.
Trois méthodes d'adressage de la mémoire sont possibles dans une instruction :
Un programme est constitué d'une suite d'instructions contigues en mémoire. Chaque instruction occupant une case mémoire. Après l'exécution d'une instruction, la suiavnte dans la mémoire est exécutée (sauf si l'instruction est une instruction de saut). Les instructions sont au nombre de 9 :
Voici un tableau récapitulatif des instructions de Red Code :
| Instruction | argument A | argument B | description |
| DAT | ? | - | Donnée |
| MOV | relatif, indirect, immédiat | relatif, indirect | Recopie le contenu de A vers B |
| ADD | relatif, indirect, immédiat | relatif, indirect | Ajoute le contenu de A dans B |
| SUB | relatif, indirect, immédiat | relatif, indirect | Soustrait le contenu de A à B |
| JMP | relatif, indirect | - | Saute à l'adresse A |
| JMZ | relatif, indirect | relatif, indirect | Saute vers A si B est nul |
| JMG | relatif, indirect | relatif, indirect | Saute vers A si B est supérieur à 0 |
| DJZ | relatif, indirect | relatif, indirect | Décrémente B et saute vers A si le résultat est nul |
| CMP | relatif, indirect, immédiat | relatif, indirect, immédiat | Décrémente B et saute vers A si le résultat est nul |
Exemples de programmes :
Un exemple vallant mieux qu'un long discours, voici quelques programmes simples permettant de se faire une idée plus claire du langage Red Code :
IMP
IMP est un programme très simple, il ne comporte qu'une seule instruction !
MOV 0 1
Il se recopie à la case mémoire suivante qui est exécutée après cette instruction. On obtient donc un programme autorépliquant très simple qui se comporte comme un rouleau compresseur et qui écrase toutes les cases mémoire de la mémoire. Cependant ce programme est très primaire et ne peut pour ainsi dire pas planter son adversaire dans la mesure où si son adversaire est amené à exécuter une de ses instructions, il se transforme lui meme en IMP !
DWARF
Ce programme (comme le précédent d'ailleurs) a été proposé par Dewdney dans son premier article sur Core War (il est donc en quelque sorte d'intéret historique). Il est aussi très simple, mais toutefois plus efficace que le précédent, dans la mesure ou il peut effectivement planter l'adversaire.
JMP 2 DAT -1 ADD #5 -1 MOV #0 @-2 JMP -2
Ce programme est une sorte de bombardier : il boucle indéfiniment et bombarde une case de la mémoire avec un DAT 0 (pour planter un programme qui serait amené à exécuter cette instruction) à chaque itération. L'adresse est incrémentée à chaque boucle de 5 cases (ADD #5 -1) de manière à balayer la mémoire. DAT -1 est le compteur de l'adresse de la case visée par le projectile, l'instruction MOV #0 @-2 y fait référence comme adresse de destination.
GEMINI
Ce programme est aussi un exemple tiré du premier article de Dewdney. Son intéret est qu'il se reproduit (de manière plus efficace que IMP). Il doit etre vu comme une partie de code d'un programme plus vaste (qui comporterait entre autre une fonction vraiment offensive) ayant la possibilité de se reproduire en mémoire.
jmp 3 dat 0 dat 99 mov @-2 @-1 cmp -3 #9 jmp 4 add #1 -5 add #1 -5 jmp -5 mov #99 93 jmp 93
Dans un premier temps, il se reproduit par copie des cases mémoire de son propre code, puis il saute à sa copie.
Le plus simple pour étudier ces programmes est de les charger dans le moteur de Core Warrior et de les exécuter pas à pas pour voir l'effet de chaque instruction.
Vous en savez maintenant assez pour créer vos premiers guerriers ! Pour ce faire, je ne saurait que vous recommander d'installer et lancer l'éditeur de Core Warrior (lancé par le script moteur ou moteur.bat).