Jeu de programmation Corewar : machine virtuelle en C exécutant des champions écrits dans un langage assembleur maison.
Telecharger & tester
- WebAssembly: Testable directement dans le navigateur ci-dessus.
make && ./corewar champion1.cor champion2.cor (machine virtuelle qui execute des champions Corewar en memoire circulaire)
Corewar est le grand projet de fin de Tek1 chez Epitech (groupe), ecrit en C, qui consiste a developper la machine virtuelle du jeu Corewar/Redcode : plusieurs programmes assembleur, appeles champions, s'affrontent en se partageant une meme zone memoire jusqu'a ce qu'un seul reste en vie.
Le projet est decoupe en trois parties articulees : les champions eux-memes (fournis, ecrits dans un langage assembleur propre a la machine), l'assembleur qui traduit ces fichiers .s en bytecode (developpe dans un projet anterieur, Robot Factory), et la machine virtuelle, seule partie a developper ici, qui doit executer ce bytecode en respectant la semantique de chaque instruction.
Le jeu de dizaine d'instructions (live, ld, st, add, sub, and, or, xor, zjmp, ldi, sti, fork, lld, lldi, lfork, aff) manipule des registres, des index et des valeurs directes avec des tailles et des modulos (REG_SIZE, IDX_MOD) definis dans les fichiers fournis op.c et op.h, que le rendu doit integrer et qui sont eux-memes soumis a la norme de codage.
L'ordonnancement simule un fonctionnement parallele mais avec une execution sequentielle par cycle : les instructions demarrant au meme cycle s'executent dans l'ordre croissant du numero de champion, et chaque champion doit invoquer l'instruction live regulierement, sous peine de voir son delai de survie (cycle_to_die) reduit progressivement jusqu'a l'elimination des processus inactifs.
Seules les fonctions (f)open, (f)read, (f)write, (f)close, (l)stat, lseek, fseek, getline, malloc, realloc et free sont autorisees ; le binaire s'utilise avec des options -n (numero de programme) et -a (adresse de chargement) par champion, ainsi qu'un flag -dump obligatoire pour la correction qui affiche l'etat de la memoire en hexadecimal, et les messages de victoire/survie doivent respecter un format exact attendu par le correcteur automatique. En bonus, une interface graphique de visualisation des mouvements et de la memoire des champions est suggeree.
Projet suivant
