Available nodes

 Émulation de programmes ennemis

Le jeu Core War est un jeu inventé dans les années 80, dans lequel deux programmes s'exécutent dans une mémoire, chacun ayant pour objectif d'empêcher l'autre de fonctionner. A l'intérieur de cette matrice, les programmes sont spécifiés à l'aide d'instructions dans un style assembleur, et un contrôleur global se charge de les faire fonctionner en parallèle. Le fonctionnement spécifique est expliqué dans le document suivant : guidelines 1984, et la page wiki donne quelques idées sur la forme que peuvent prendre les programmes en question. Le but de ce projet est de pouvoir simuler le fonctionnement de la matrice, puis à terme d'expérimenter avec des instructions supplémentaires.
A shameless plug.

Le sujet consiste à remplir successivement les 5 phases suivantes :
  • Afficher le contenu de la mémoire dans un terminal

    Il s'agira de pouvoir déterminer à l'écran quelles sont les zones de la mémoire contenant des données écrites par un programme, puis éventuellement le programme qui les a écrit. La figure ci-contre donne une idée possible de la façon dont les données peuvent être présentées.
  • Charger un programme de robot et simuler son exécution dans la mémoire

    Il est nécessaire de définir un format dans lequel les programmes seront écrits, format autant que possible discuté avec tous les groupes réalisant le projet afin de pouvoir confronter les différents exemples. Il peut être intéressant de s'inspirer du format original, éventuellement simplifié.
    La part la plus importante est la simulation par le contrôleur. Il est recommandé de créer quelques programmes simples servant de test pour vérifier le bon fonctionnement dudit contrôleur.
  • Charger deux programmes de robots et les faire s'affronter en calculant leurs scores

    Les adresses de départ des deux programmes étant aléatoires, il s'agira de lancer plusieurs rounds avec des emplacements de départ différents et en échangeant le programme partant le premier.
  • Générer des programmes de robots efficaces

    A partir de là, le but sera de générer des programmes assez efficaces pour pouvoir s'opposer à d'autres. On peut imaginer créer ou récupérer des programmes existants des différents types vus sur la page de wiki.
  • Implémenter l'instruction SPL

    La version plus récente de ce jeu inclut la possibilité d'avoir une instruction appelée SPL qui permet de dupliquer le fil d'exécution du programme. En pratique, cela donne la possibilité aux programmes d'avoir un semblant de multi-threading. Le jeu n'oppose plus alors seulement deux programmes, mais une liste potentiellement importantes de programmes, qu'il faudra ordonnancer de manière équitable entre les deux programmes initiaux.
Avertissement : le sujet ne porte pas sur la réalisation du meilleur programme, puisque de nombreux exemples de programmes sont accessibles sur la toile. Il est recommandé de construire ses propres exemples en même temps que de faire fonctionner des exemples venus du monde extérieur (comme par exemple ici).

 Bibliothèque nCurses

Afin d'afficher des informations dans un terminal avec un peu de style, il est possible passer à travers la bibliothèque ncurses. La plupart des questions quant à cette bibliothèque peut être répondue dans le howto accessible en ligne, ainsi que sur sa version PDF. Les exemples de programme donnés dans le howto sont disponibles à l'adresse suivante sous la forme d'une archive .tar.gz. A titre d'exemple et pour simple référence, voici le code du "Hello World" donné dans le HOWTO, très légèrement modifié :
#include <ncurses.h>
#include <stdlib.h>

int main(void)
{	
	initscr();			/* Start curses mode 		  */
	mvprintw(LINES/2,COLS/2,
		 "Hello World !!!");	/* Print Hello World		  */
	refresh();			/* Print it on to the real screen */
	getch();			/* Wait for user input */
	endwin();			/* End curses mode		  */

	return(EXIT_SUCCESS);
}

 Contact

Pour toute information complémentaire, contacter : David Renault.