Haunted house in C available for vintage 6502 computers

J’avais publié il y a quelques temps deux articles concernant le jeu d’aventure Haunted House. Ce dernier date de 1983 et avait été publié sous la forme d’un livre « Write your own adventure programs for your microcomputer« . Le jeu d’origine était codé en BASIC pour les principaux micro-ordinateurs de l’époque.

Le premier article, Write your own adventure programs for your microcomputer, concerne le jeu original en anglais. Le deuxième, Aventure dans le château hanté, traite de la version française, le livre ayant été traduit et édité à l’époque par Hachette.

J’avais également mentionné l’existence d’un port en langage C du jeu d’origine en version anglaise. Ce port a été effectué par John Elliot en ANSI C89 ; vous pouvez télécharger le code source directement sur son site, depuis cette page.

Dans ce nouvel article, nous allons voir comment compiler ce code C sur de vieux ordinateurs disposant d’un processeur 6502 ou apparentés. Nous allons bien sûr utiliser le cross-compilateur cc65, pour que vous puissiez jouer sur un des ordinateurs suivants : Ordinateur actuel (Linux ou Windows), Commodore 64, Atari 800 XL, Apple II et Apple //e Enhanced.

Le code C d’origine est très standard et il est facilement compilable avec gcc ou cc65. Voici l’archive à télécharger (au format tar) pour pouvoir compiler sur l’ensemble des plateformes précitées.

Après avoir extrait les fichiers de l’archive, il suffit d’utiliser le makefile, qui est fait pour faciliter les choses.

make         # Compilateur natif (gcc) sous Linux / Windows 
make a2 # pour Apple II de base, fabrique l'exe haunted_a2
make a2e # pour Apple //e Enhanced, fabrique l'exe haunted_a2e
make atari # pour Atari 800XL, fabrique l'exe haunted.xex
make c64 # pour Commodore 64, fabrique l'exe haunted_c64
make pet # pour Commodore PET fabrique l'exe haunted_pet

Pour les utilisateurs d’Apple II ou //e, une image de disquette haunted.dsk est présente dans l’archive. Pour installer l’exécutable généré par la compilation sur la « disquette », utiliser la commande make disk_a2. Il suffit ensuite de lancer la commande BRUN HAUNTED depuis un émulateur (AppleWin ou autres) ou un véritable Apple II…

La page d’intro pour Apple II en 40 colonnes
Pages d’intro pour Apple //e Enhanced, en 80 colonnes

J’ai effectué quelques adaptations pour améliorer la présentation :

  • Ajout d’une belle page d’intro en ASCII ART, qui s’adapte au format d’affichage ; 80 colonnes pour Linux et pour Apple //e Enhanced, 40 colonnes pour les autres.
  • Utilisation de la bibliothèque conio.h pour les ordinateurs vintages
  • Pour la première fois, je distingue la cible Apple II de la cible Apple //e Enhanced, ce dernier ayant des possibilités d’affichage étendues, notamment la gestion des 80 colonnes et les lettres minuscules.

Pour pouvoir compiler le même code source pour différentes cibles, j’utilise la compilation conditionnelle du préprocesseur. il suffit d’utiliser les directives #if ... #elif ... #else ... #endif pour tester la définition ou la valeur de constantes afin d’inclure ou d’exclure des portions de code. Le compilateur cc65 positionne automatiquement certaines constantes. La constante __C65__ est définie systématiquement, d’autres le sont en fonction de la cible ; __ATARI__ pour une cible Atari 800 par exemple.

Dans l’exemple ci-dessous (extrait du code source haunted2.c), le compilateur cc65 positionne la constante __65__ ce qui permet d’utiliser la librairie conio.h uniquement pour les ordinateur avec une CPU 6502. Les constantes __ATARI__, __C64__, __APPLE2__ et __APPLE2ENH__ sont définies par le compilateur cc65 en fonction de la cible choisie (option de compilation -t cible) et permette de définir le format d’affichage, 40 ou 80 colonnes suivant les possibilités du micro-ordinateur.

#if defined(__CC65__)
#define CONIO
#include <conio.h>
#endif

#if defined(__ATARI__) || defined(__C64__ )
#define SCR_WIDTH 40

#elif defined(__APPLE2__) && ! defined (__APPLE2ENH__)
#define SCR_WIDTH 40

#elif defined(__MSDOS__)
#include <dos.h>
#include <conio.h>
#define SCR_WIDTH 80

#else
#define SCR_WIDTH 80
#endif

J’ai inclus un nouvel ordinateur vintage, le Commodore PET, qui est ancêtre des Commodore VIC-20 et Commodore 64, les premiers modèles ayant été publiés en 1977. Le jeu haunted house fonctionne très bien sur le PET modèle 8032 avec un affichage en 80 colonnes. Il suffit de compiler avec la commande make pet, puis de lancer l’émulateur VICE (utiliser xpet.exe).

Page d’intro pour PET 8032

La version programmée en C n’est pas différente de la version d’origine en BASIC. Pour vous aider, voici la carte extraite du livre :

Voilà qui devrait vous aider à terminer cette aventure passionnante…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *