Core War

Core War est un jeu où plusieurs programmes (virus) tournent simultanément sur une machine virtuelle. Le but est de faire se terminer tous les autres programmes. Cf. FAQ, Beginner's guide et autres références.

Dans les règles standardisées de Core War, il y a un scheduler qui exécute successivement une instruction de chaque programme. On va programmer ici une version modifiée de la machine virtuelle MARS, où chaque programme utilise un processus Unix et où la concurrence entre ces programmes est gérée par le scheduler Unix. La mémoire de la machine virtuelle est donc de la mémoire partagée entre ces processus.

  1. Dans un premier temps, faire un court programme C ou perl fonctionnant avec un arguments, un noms de fichiers qui contient le code assembleur Redcode d'un n programme CoreWar. Il s'agit d'allouer la mémoire de la machine MARS (taille 8000 par exemple) d'y placer le code du programme CoreWar, de mettre le pointeur d'instruction au début de ce programme, et d'exécuter le programme.

    On n'utilisera pas les 18 ou 19 instructions de l'assembleur Redcode, mais seulement les 6 ci-dessous et les modes d'adressage immédiat, direct et B-indirect : MOV, ADD, JMP, CMP, SLT, DAT

  2. On modifie le programme pour qu'il fonctionne avec n arguments (des noms de fichiers, contienant chacun le code assembleur Redcode d'un programme CoreWar). Le programme principal alloue de la mémoire partagée, y place les codes des programmes CoreWar, forke un processus par programme CoreWar. Chaque processus exécute ses instructions.

  3. On veut rajouter un affichage graphique de l'évolution du jeu : la mémoire est représentée par un rectangle, initialement noir. Chaque programme a une couleur, lorsqu'un programme modifie la valeur d'une case mémoire, celle-ci change de couleur.