Le langage C a été conçu pour rendre les programmes portables. Grâce aux compilateurs, le même code source peut fonctionner aussi bien sur un PC moderne que sur un vieil ordinateur des années 80s.
Dans cet article, j’ai adapté le jeu d’aventure Sorcellerie (voir l’article dédié sur le portage de Sorcellerie en langage C) afin qu’il fonctionne non seulement sur un PC moderne sous Linux (grâce au compilateur gcc), mais également sur les Apple II, Atari 8bits et Commodore 64 (grâce au compilateur cc65).
L’adaptation a été très légère, le plus gros du travail étant la reprise du makefile.
Télécharger le programme
Voici le code source de Sorcellerie en version multiplateforme :
LA COMPILATION CONDITIONNELLE
Le code source a été légèrement modifié pour prendre en compte les spécificités de l’ordinateur cible. Par exemple, pour les vieux ordinateurs avec un microprocesseur 6502, l’affichage est amélioré grâce à la librairie conio.h. Mais celle-ci n’est pas utilisée dans l’environnement Linux, alors que le code source est le même.
Mais comment cela est-il possible ? Grâce à la compilation conditionnelle que permet le pré-processeur du compilateur C. Les directives #ifdef ou #if defined du pré-processeur vont tester si des macros sont définies et inclure du code spécifique. Par exemple, dans le module princ.c, la fonction draw_hline() est appelée uniquement lorsque CONIO est définie :
#ifdef CONIO
draw_hline(SCREEN_WIDTH);
#endif
la macro CONIO est définie dans le fichier sorcellerie.h, en fonction des macros __APPLE2__, __ATARI__ ou __C64__. Ces dernières sont automatiquement définies suivant le choix de l’ordinateur cible (option -t). Par exemple, si la cible choisie est atari, la macro __ATARI__ sera définie. Voici l’extrait de code de sorcellerie.h permettant de positionner la macro CONIO en fonction de la cible :
#if defined __APPLE2ENH__ || defined __APPLE2__ | defined __ATARI__ || defined __C64__
#define CONIO
#include <conio.h>
#define SCREEN_WIDTH 40
#else
#define SCREEN_WIDTH 80
#endif
La macro CONIO est ensuite utilisée pour appeler des fonctions d’affichage de la librairie conio.h.
Il est ainsi possible d’inclure du code spécifique à chaque plateforme cible. Exemple de code spécifique aux cibles atari et c64, extrait du fichier source util.c :
#if defined __ATARI__
_setcolor(2,COLOR_LIGHTGREEN,0);
#elif defined __C64__
bordercolor(COLOR_BLACK);
bgcolor(COLOR_BLACK);
textcolor(COLOR_GREEN);
#endif
JOUER A Sorcellerie sous LinuX
La première étape est d’extraire les fichiers de l’archive et de se positionner dans le répertoire sorcellerie :
tar xvf sorcellerie_20260130.tar
cd sorcellerie
Pour compiler, saisir la commande suivante depuis un terminal :
make native
Puis lancer le programme :
./sorcellerie
Vous devriez visualiser la fenêtre suivante :

JOUER A Sorcellerie sous Apple II
Pour compiler puis transférer l’exécutable sur l’image de disquette sorcellerie.dsk :
make a2
make disk_a2
Le transfert sur l’image disque nécessite d’installer l’utilitaire AppleCommander. Pour que l’installation fonctionne, il est nécessaire d’installer le shell ac dans le répertoire $HOME/bin.
Vous pouvez ensuite jour grâce à l’émulateur AppleWin. Ce dernier fonctionne très bien sous Linux avec Wine. Il suffit d’ouvrir l’image de la disquette bootable sorcellerie.dsk puis de démarrer le jeu en saisissant la commande suivante dans l’émulateur :
]BRUN SORCELLERIE
Le jeu démarre :

JOUER A Sorcellerie sous Atari 800XL
Pour générer l’exécutable sorcellerie.xex :
make atari
Il est ensuite possible de lancer le programme avec l’émulateur Altirra. Après avoir lancé l’émulateur, sélectionner le menu File / Boot Image... Sélectionner ensuite le fichier sorcellerie.xex. Le programme démarre instantanément :

JOUER A Sorcellerie sous Commodore 64
Pour compiler et fabriquer l’exécutable sorcellerie_c64 :
make c64
Vous pouvez alors jouer avec l’émulateur Vice, qui fonctionne sous Windows et, grâce à Wine, sous Linux.
Lancer l’émulateur puis appuyer sur la touche F12. Sélectionner alors l’option Autostart image qui vous permettra de charger le fichier sorcellerie_c64. Le programme démarre au bout de quelques dizaines de secondes (c’est un peu long).

Jouer A Sorcellerie sous Windows
Le programme fonctionne également sur un PC Windows, à condition que le compilateur gcc soit y installé. La procédure d’installation est détaillée dans cet article.
La procédure de compilation est la même que sous Linux. Depuis l’invite de commande :
make native
Ou tout simplement :
make
Cross-compilation sous Windows
Il est également possible d’installer cc65 dans l’environnement Windows et de lancer la cross-compilation pour Atari, Apple II et Commodore 64. Les commandes sont les mêmes.
Pour que l’installation de l’exécutable pour Apple II sur l’image de la disquette fonctionne, il est nécessaire d’installer AppleCommander. Le fichier java AppleCommander-ac-x.y.z.jar (x.y.z correspondant à la version utilisée) est à placer dans le répertoire $BIN. Cette variable d’environnement est à créer si elle n’existe pas. Pour copier l’exécutable pour Apple II sur le fichier image sorcellerie.dsk, la commande est la même que sous Linux : make disk_a2. Cependant, sous Windows, le makefile exécute le fichier install_a2.bat qui se charge de la copie.
Pour aller plus loin
Il est également possible d’exécuter sorcellerie sur d’autre ordinateurs :
Soit avec cc65 pour des ordinateurs à processeur de 6502, en choisissant d’autres cibles (option -t).
Soit avec d’autres compilateurs C pour d’autre plates-formes, et le choix est immense… A vous de jouer !
