Nostalgie: Amstrad CPC 6128+

Mon premier ordinateur a été un Amstrad CPC 6128+. C’est avec lui que j’ai découvert les joies de la programmation en m’initiant au Basic, en plus de passer d’innombrables heures à jouer à des jeux auxquels je ne trouverais plus aucun intérêt aujourd’hui si je ne les regardais pas d’un œil nostalgique.

Faisons les présentations

La puissance de cet ordinateur 8 bits à 4MHz, doté de ses 128 kB de RAM fait doucement rigoler les raspberry-pi et est plutôt à comparer avec les calculatrices graphiques bas de gamme ou les micro-controleurs. C’est pourtant largement suffisant pour faire des merveilles, et certains jeux magnifiques sont sortis sur le 6128+ (et ses amis 464+ et GX-4000 qui étaient comparables mis à part pour les périphériques et le boitier).

6128+

Le 6128+: un ordinateur complet intégré dans un clavier !

L’histoire de cet ordinateur est fascinante et permet de se replonger dans le contexte de l’époque où des bidouilles incroyables étaient nécessaires pour tirer le meilleur parti du matériel disponible. La concurrence était telle qu’il n’était pas question d’attendre que le matériel s’améliore pour avoir de plus beau graphiques ou un jeu plus fluide: il fallait se battre à tous les niveaux. Les jeux étaient développés en assembleur et tiraient parti des spécificités du matériel, quitte à réécrire le même jeux sur plusieurs plate-formes. Et oui, c’était avant les « compatibles PC » et chaque constructeur avait ses particularités.

Sorcery, un des jeux légendaires du CPC

Sorcery, un des jeux légendaires du CPC

La gamme « plus » (464+, 6128+ et GX 4000) sort au début des années 90, à un moment où tous les autres constructeurs misent sur les processeurs 16 bits. Amstrad fait le pari de rester sur une plate-forme 8 bits, de conserver la compatibilité avec les modèles précédents et de proposer des ordinateurs à des prix faibles. Un pari qui échouera d’un point de vue commercial mais qui produira un beau résultat technique, même si peu de jeux et de programmes utiliseront les nouvelles capacités (il faut dire que pour un éditeur, les utiliser revenait à réduire les acheteurs potentiels en excluant les possesseurs de 464 ou 6128 « non plus »).

La majeure partie des améliorations se concentrent sur le contrôleur graphique qui supporte 4096 couleurs. Du point de vue du développeur, il ne peut pas les utiliser toutes en même temps en raison de la taille de la mémoire vidéo et doit donc choisir entre différentes résolutions: 160x200x16, 320x200x4, 640x200x2. Cela semble peu mais le contrôleur gère aussi matériellement jusqu’à 15 sprites permettant d’afficher jusqu’à 31 couleurs à l’écran, le tout avec des animations fluides. Les sprites peuvent utiliser une résolution différente de celle de l’écran, on peut donc avoir un fond en 16 couleurs en résolution de 160×200 et y placer des sprites ayant une meilleur résolution. Le scrolling est aussi supporté par le contrôleur ce qui permet des animations fluides.

Burnin' Rubber: LE jeu de démonstration du 6128+. Fournit par défaut avec, c'est un des rares jeux à exploiter pleinement les capacités graphiques

Burnin’ Rubber: LE jeu de démonstration du 6128+. Fournit par défaut avec, c’est un des rares jeux à exploiter pleinement les capacités graphiques (en particulier dans l’écran d’accueil ou lors des accidents !)

Autre nouveauté: l’emplacement pour cartouche. Par rapport aux disquettes, la cartouche permet d’inclure de l’électronique, qui sert généralement à fournir une extension de RAM. C’est aussi une option permettant de dépasser les limites de stockage des disquettes qui ne pouvait contenir que 178 kB par face !

Repenser à tout ça donne envie de s’y replonger, de rejouer à tous ces vieux jeux, de ressortir le manuel et de programmer en basic. Mais voilà, mon CPC a rendu l’âme il y’a déjà pas mal d’années … Heureusement, la sur-puissance de nos ordinateurs actuels permet de facilement émuler les ordinosaures !

Emulateurs

Il existe de nombreux émulateurs pour CPC. Pour ma part, je m’intéresse seulement à ceux tournant sous Linux, ce qui restreint significativement le choix. J’en ai testé plusieurs, et le meilleur est sans aucun doute caprice32. Voici un comparatif rapide:

  • Arnold est rapide mais quelques jeux fonctionnent mal dessus. Il a l’avantage d’émuler le 6128+ et de supporter les cartouches (pour les quelques jeux spécifiques au « plus »)
  • XCPC est rapide et fonctionne relativement bien, mais ici encore quelques jeux ne fonctionnent pas correctement
  • MESS (paquet sdlmame sous Arch Linux) émule plutôt bien mais est beaucoup plus lent (ce qui s’explique par sa généricité: il supporte l’émulation d’un grand nombre de plateformes), au point d’être inutilisable sur mon PC
  • JavaCPC est aussi très lent. L’interface est assez lourde: à mon avis, il y a beaucoup de fonctionnalités mais aussi beaucoup de « pollution ».
  • Caprice32 (paquet caprice32-git sous Arch Linux) est rapide et fonctionne bien avec tous les jeux et programmes que j’ai pu tester. Les fonctionnalités les plus importantes sont présentes, à de rares exceptions. J’ai décidé de reprendre le code et de combler ces quelques lacunes (support des joysticks, finalisation de l’interface, édition de la mémoire …)

À savoir avec Arnold et Caprice32: les touches F1 à F10 sont réservées par l’émulateur. Pour simuler l’utilisation d’une de ces touches (indispensable sur Arnold en mode 6128+ pour choisir entre Amstrad Basic et Burnin’ Rubber) il faut utiliser le pavé numérique.

Du côté de MESS, l’utilisation est plus compliquée car c’est un émulateur générique qui se base sur des dumps des ROMs des machines qu’il émule en plus des images des disquettes. Avant de pouvoir l’utiliser pour le cpc6128 ou cpc6128p, il faut donc récupérer les ROMs correspondantes, par exemple sur CPCRULEZ et les placer au bon endroit (dans des sous-repertoires du nom de la ROM dans ~/.mame/roms/, par exemple ~/.mame/roms/cpc6128f/cpc6128f.rom pour la ROM française du 6128). Pour le 6128p, il faut aussi télécharger une cartouche (cartridge). Ensuite, pour lancer un jeu sur disquette:

sdlmame cpc6128f -flop1 ~/CPC/FruityFrank.dsk -window

et pour lancer un jeu sur cartridge avec le 6128 +:

sdlmame cpc6128p -cart ~/CPC/BurninRubber.cpr -window

Vous pourrez trouver une liste d’émulateurs pour Linux et plus d’informations sur le site PlanetEmu ainsi que dans la documentation Ubuntu.

Cette dernière nous apprend que de nouveaux jeux apparaissent encore chaque année !

Si contrairement à moi, vous n’avez pas possédé d’Amstrad dans votre jeunesse, vous aurez sans doute besoin d’un peu d’aide pour commencer, lorsque vous vous retrouverez face à l’invite de commande. Vous trouverez un tutoriel sympathique sur GameTronik.

Parmi les jeux auxquels j’ai joué durant mon enfance, celui qui arrive en première place est très clairement Fruity Frank ! La suite du classement serait plus compliquée à faire, et je vais sans doute en oublier, mais il y avait au moins parmi les meilleurs: Rick Dangerous (bien placé dans le classement), Kane (un jeu court mais divertissant, qu’il fallait faire 3 fois de suite avec une difficulté croissante pour gagner: Diablo II n’a rien inventé !), Crazy Car II, Burnin’ Rubber (où le meilleur moyen de gagner était d’attendre la fin du chrono sans démarrer !), Sorcery, Sorcery Plus, Operation Wolf (mais avec les vies infinies seulement), 1942, Arkanoid, Bomb Jack, Double Dragon 2, Robocop (avec une super voix de synthèse en intro), Street Machine, Galaxia, Shufflepuck Café, Desert Fox …

Si vous cherchez un vieux jeu dont vous avez oublié le nom où si vous voulez juste réveiller quelques souvenirs, voici une liste assez complète de jeux sur Amstrad CPC (en anglais, une fois n’est pas coutume).

iDSK, un outil bien pratique

Vous devriez pouvoir trouver dans votre distribution GNU/Linux un utilitaire appelé iDSK. Il est très utile pour manipuler les images de disquettes de CPC. Il permet de créer de nouvelles images vides, d’importer ou exporter des fichiers en texte ou en binaire, de supprimer des fichiers et quelques autres fonctionnalités plus avancées. La syntaxe est un peu déroutante, le premier paramètre devant absolument être le nom du fichier DSK et les options venant après.

Ainsi pour créer une image vide:

iDSK vide.dsk -n

Et pour placer un fichier test.bas que vous avez sous la main dans cette image vide:

iDSK vide.dsk -i test.bas -t 0

L’option -t 0 est à utiliser pour un fichier texte. Il est possible d’importer des fichiers binaires avec -t 1.

Bien sûr, une aide en ligne est disponible:

$ iDSK -h
(...)
Usage : 
 iDSK <fichier DSK> [OPTION] [fichiers a traiter]
OPTIONS :
-l : list le contenu du catalogue ex: -l mon_dsk.dsk
-i : importe un fichier (-t type 0 pour un fichier ASCII et 1 pour un BINAIRE) ex: -i mon_fichier.bin -t 1 -s mon_fichier.dsk
-e : donne l'adresse d'execution du fichier (en hexadecimal) a inserer ex: -i mon_fichier.bin -e C000 -t 1 -s mon_fichier.dsk
-c : donne l'adresse de chargement du fichier(en hexadecimal) a inserer ex: -i mon_fichier.bin -e C000 -c 4000 -t 1 -s mon_fichier.dsk
-g : exporte un fichier ex: -g mon-fichier.bas -s mon_fichie.dsk
-r : enlève un fichier
-n : cree une nouvelle image dsk ex: -n mon_fichier.dsk
-z : desassemble un binaire ex: -z mon-fichier.bin -s mon_fichier.dsk
-b : liste un fichier Basic ex: -b mon-fichier.bas -s mon_fichier.dsk
-d : liste un fichier Dams ex: -d mon-fichier.dms -s mon_fichier.dsk
-h : liste un fichier en Hexadecimale ex: -h mon-fichier.bin -s mon_fichier.dsk
-f : force l'écrasement lorsqu'un fichier existe déjà
(...)

Avoir un outil en ligne de commande est toujours pratique, cela permet de facilement l’utiliser de manière massive ou d’automatiser son utilisation. Par exemple pour extraire tous les programmes Basic de toutes les disquettes situées dans un répertoire:

for d in *.dsk; do 
f=`iDSK "$d" -l | grep .BAS | sed 's/.BAS/ /' | awk '{ print $1 }' | tr "[:upper:]" "[:lower:]"`; 
iDSK "$d" -b ${f}.bas > ${f}.bas; 
dos2unix ${f}.bas; 
done

Le résultat n’est cependant pas parfait, certaines lignes nécessitant d’être retouchées: les lignes sont tronquées à 80 caractères et certaines lignes (apparemment celles contenant un point d’exclamation (!) en dehors d’une chaîne mais aussi quelques autres) sont corrompues … Après avoir creusé un peu, ce n’était pas très compliqué à corriger et j’ai soumis un patch qui a été intégré dans cpcsdk !

Quelques programmes en Basic

Bien sûr, la première chose que l’on a envie de faire après avoir installé l’émulateur, c’est de retrouver les jeux d’antan. Mais rapidement, le désir de retoucher à la programmation de l’époque se fait sentir.

Et c’est là qu’on prend un sacré coup de vieux ! On ne s’en rendait pas forcément compte à l’époque, mais l’environnement de développement n’était vraiment pas pratique. À commencer par les outils: pas d’éditeur de texte, on travaille sur un programme en mémoire que l’on édite ligne par ligne. Pour remplacer une ligne, il suffit de taper son numéro, un espace puis le nouveau contenu. On peut éditer une ligne avec edit <numéro de ligne>. Pour voir le programme, on utilise la commande liste. Le copier-coller est disponible: une touche copy permet de « dupliquer » le curseur. On déplace ce nouveau curseur à l’emplacement de l’écran à partir du quel on désire copier, puis l’on appuie sur la touche coller qui copie-colle le caractère et fait avancer les deux curseurs.

Du côté du langage lui-même, ce n’est pas mieux ! Pas de véritable fonction, pas de label, tous les sauts se font avec des numéros de ligne. Il y a bien une distinction entre GOTO et GOSUB (le second s’attendant à un retour, comme lors d’un appel de fonction) mais en l’absence de nom et de paramètres, impossible de faire du code vraiment lisible …

J’ai quand même recopié avec patience les quelques exemples du manuel qui était fourni avec le 6128+. Il y a Amthello, un clône d’Othello qui est, pour ceux qui ne connaîtraient pas, un jeu ressemblant à Reversi. Arsène Lupin est un jeu original, mais qui n’est pas amusant très longtemps … Bombardier est une version simple mais divertissante d’un grand classique: détruire les immeubles en larguant des bombes. Il y a aussi Bustout, un casse-brique qui est loin d’égaler la version plus connue sur CPC: Arkanoid. Escrime électrique est un jeu de rapidité qui ne se joue qu’à deux: le but est de placer son curseur en face de celui de l’adversaire et d’être le premier à tirer une fois que c’est le cas. Montagnes n’est pas un jeu mais une simple démo que j’avais à cœur de tester pour comparer le résultat à mes souvenirs. Enfin, Ping Pong est un clône du plus célèbre des jeux de raquette sur ordinateur, mais la « physique » est plus que déroutante !

Vous vous amuserez autant en cherchant à savoir quelles tailles de zone de jeux permettent

Bustout: Vous vous amuserez sans doute plus en cherchant à savoir pour quelles tailles de zone de jeux la partie peut être finie qu’en y jouant

La seule alternative au Basic à l’époque était, à ma connaissance, l’assembleur (après recherche, en fait non ! il y avait aussi des compilateurs C, Pascal, Fortran …) mais aucun outil n’était disponible de base et il n’était pas facile de trouver une copie (officielle ou pirate) de DAMS ou autre assembleur, ni de se procurer de bons bouquins sur le sujet (et oui, on ne pouvait pas compter sur Internet !).

Quelques considérations métaphysiques

En regardant ainsi en arrière, on ne peut s’empêcher de se demander si les enfants d’aujourd’hui regarderont avec la même nostalgie leurs ordinateurs ! Il faut dire que ce 6128+ a duré de très nombreuses années, et que ce sont toujours les mêmes jeux auxquels nous avons joué, mes frères et moi, inlassablement. De nos jours, aussi bien le matériel que les logiciels sont renouvelés beaucoup plus vite. Nous autres linuxiens sommes finalement chanceux en ce qui concerne les jeux: leur faible nombre fait que l’on se souviendra encore dans 20 ans de frozen bubble, x-bill, pingus …

Autre différence, le partage (comprendre la copie illégale) de jeux était monnaie courante. Copier les jeux n’était pas une sinécure et nécessitait un logiciel spécial mais ceux qui savaient faire en faisaient profiter leurs amis. Les meilleurs jeux étaient copiés et distribués largement (et les auteurs n’étaient donc pas forcément rémunérés à la hauteur du succès du jeu).

A l’inverse, l’accès aux outils moins populaires était difficile dans la mesure ou peu de gens les avaient et les obtenir en magasin n’était pas facile non plus car seuls les best-sellers étaient largement disponibles. Je n’ai personnellement jamais eu accès à un compilateur C ou à un assembleur, alors que cela m’aurait bien plu !

Du point de vue de l’accès au savoir, les ordinateurs de l’époque étaient une formidable opportunité pour découvrir l’informatique. La première chose que l’on voyait en allumant l’ordinateur était un prompt et lancer un jeu se faisait à travers une commande. D’un autre côté, la majeure partie des utilisateurs se contentaient de savoir faire cela et n’allaient pas chercher plus loin, alors était-ce une incitation ou pas ? Toujours est-il que tous les utilisateurs avaient à leur porté un interpréteur Basic et un livre décrivant le langage et fournissant des listings. D’ailleurs, même parmi les utilisateurs ne désirant pas apprendre la programmation, beaucoup on tout de même recopié de long listings de code en espérant obtenir un nouveau jeu (et ont souvent été déçu du résultat …).

Mais comparé à aujourd’hui, approfondir ses connaissances était problématique. On l’a vu, l’accès à un compilateur C ou à un assembleur n’était pas facile. Il fallait aussi des livres qui n’étaient pas non plus facile à trouver. Les exemples de code étaient rares, la distribution des jeux aussi bien que des démos ne se faisant que sous forme binaire (d’un autre côté, entre l’assembleur et le binaire désassemblé la différence n’est pas énorme: on ne perd que les labels et les commentaires).

De nos jours, Internet et le logiciel libre ou open-source fournissent une mine d’information pour quiconque désire découvrir l’informatique. L’accès au matériel est lui aussi facilité par des prix très faible. Le Raspberry-Pi permet d’offrir pour quelques dizaines d’euros une plate-forme bien plus riche qu’un CPC pour découvrir l’informatique. Quasiment tous les langages de programmation dont on pourrait rêver sont à portée de main et la documentation est abondante sur Internet (il faudra peut être apprendre l’anglais pour des informations vraiment complètes: encore un apprentissage utile !)

Bref, si vous avez des enfants, achetez leur un Raspberry-Pi, c’est sans doute le plus beau cadeau que vous pouvez leur faire, à défaut de pouvoir les ramener en 1990 et leur offrir un Amstrad 6128+.

Pour aller plus loin

Informations génériques:

https://fr.wikipedia.org/wiki/Amstrad_CPC

https://fr.wikipedia.org/wiki/Locomotive_BASIC

https://fr.wikipedia.org/wiki/Zilog_Z80

https://fr.wikipedia.org/wiki/MESS

Emulateurs sous Linux:

https://github.com/ColinPitrat/caprice32

https://doc.ubuntu-fr.org/amstrad

http://www.planetemu.net/emulateurs/amstrad-cpc/Linux

Des sites très riches sur les Amstrad CPC (la communauté est très active !):

http://cpcrulez.fr/

http://amstrad.eu/

http://www.cpcwiki.eu/

http://www.amstradabandonware.com/fr/home

Des outils pour développer sur Amstrad CPC sous Linux:

https://github.com/cpcsdk

Cette entrée a été publiée dans Informatique. Vous pouvez la mettre en favoris avec ce permalien.

2 réponses à Nostalgie: Amstrad CPC 6128+

  1. Phenix dit :

    Bravo pour cet article !! L’Amstrad 6128 Plus est sans doute l’une des meilleurs machines 8 Bits jamais sortie ;).

    Petit rectification, on dit Amstrad 6128 Plus et non pas CPC. La société Amstrad avait du retirer cette appellation sur sa nouvelle gamme de micro-ordinateur car le therme « CPC » avait été déposé par une autre entreprise…

    • Colin Pitrat dit :

      Effectivement. On me l’a déjà rappelé par le passé (pas pour cet article, au cours de discussions) et pourtant j’ai tellement l’habitude de l’appeler comme ça depuis mon enfance que j’ai du mal à changer. Et maintenant j’hésite à changer le titre parce que je me dis que c’est mieux pour le référencement 😛

Laisser un commentaire

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

one + one =