- ChipWits, l’un des premiers jeux du Macintosh en 1984, célèbre ses 40 ans avec la publication en open source de son code source FORTH d’origine pour Mac et Commodore 64
- L’objectif de cette publication est de préserver l’héritage du jeu et de montrer comment le développement cross-platform se faisait en 1984 sur des micro-ordinateurs 8 bits
- Les données ont été récupérées à partir de disques vieux de 40 ans conservés par Doug Sharp ; malgré quelques secteurs défectueux, la plupart des disques ont pu être lus normalement
- Le code complet de la version Mac représente environ 3 000 lignes de FORTH, alors que le port modernisé atteint 35 000 lignes de C#, ce qui met en évidence la compacité du code de l’époque et ses contraintes
- Le projet a publié sur GitHub les images de disques d’origine et le code extrait, et souhaite avancer avec la communauté sur l’identification des sources les plus récentes, la documentation de la compilation et l’extraction des sprites
Publication du code source original de ChipWits
- À l’occasion des 40 ans de ChipWits, le code source FORTH d’origine pour Mac et Commodore 64 est publié en open source
- Le code restauré et les images de disques d’origine sont regroupés dans chipwits/chipwits-forth
- Cette publication vise à préserver l’héritage de ChipWits et à partager l’expérience du développement cross-platform pour micro-ordinateurs 8 bits en 1984
- Les personnes familières de ces systèmes d’origine peuvent participer à l’exploration et à l’organisation des sources ; le projet invite à collaborer via le serveur Discord de ChipWits
Pourquoi avoir choisi FORTH en 1984
- ChipWits faisait partie des premiers jeux sortis sur Macintosh en 1984
- Ses co-créateurs Doug Sharp et Mike Johnston, après avoir porté des jeux éducatifs entre différents micro-ordinateurs 8 bits, ont conçu ChipWits comme leur premier jeu original
- Le jeu est un jeu de programmation de robot influencé par des titres de l’époque comme Rocky’s Boots et Logo
- En 1984, l’environnement de développement Mac était limité, et la principale méthode de développement consistait à acheter un Apple Lisa
- Le prix d’origine de l’Apple Lisa était de 9 995 $, soit environ 30 373 $ actuels
- Ce coût étant difficile à assumer pour un studio indé, Doug et Mike ont développé le jeu avec MacForth Plus, directement sur Mac
- Comme il existait à l’époque plusieurs variantes de FORTH sur différents micro-ordinateurs 8 bits, le langage se prêtait bien à un choix pensé en vue de futurs portages
- Le développement a commencé en avril 1984, et il a fallu environ 7 mois pour achever la première version et la publier à temps pour la période de Noël
Portages sur Commodore 64 et Apple II
- Epyx devait être l’éditeur de ChipWits, et le Commodore 64 représentait alors le plus gros marché
- Epyx n’avait pas de jeux Mac, et comme Brainworks visait le marché éducatif où Apple était alors très fort, Epyx n’a publié que la version Commodore 64
- Le portage C64 a été terminé en 1985 et écrit avec Super Forth 64
- Le portage sur Commodore 64 était délicat, car il fallait conserver la conception générale de l’interface de la version Mac
- Il a fallu développer un système de menus déroulants commandé au joystick au lieu de la souris
- Des graphismes en couleur et le son de la puce SID ont été ajoutés
- Il fallait tout faire tenir sur une disquette de 165 Ko au lieu des 400 Ko de la disquette Mac
- Il fallait aussi travailler avec 64 Ko de RAM au lieu des 128 Ko du Mac, et avec un processeur plus lent
- Après le succès de la version Commodore 64, une version Apple II a également été produite, elle aussi écrite dans une variante de FORTH
Réception après la sortie et exécution de la version d’origine
- Après sa sortie, ChipWits a reçu de nombreuses critiques et récompenses
- Le MacUser Editor’s Choice 1986 Award a qualifié ChipWits de « l’introduction la plus plaisante aux concepts de programmation », saluant son langage basé sur des icônes et sa conception éducative
- Macazine estimait que ChipWits deviendrait un titre culte auprès des utilisateurs de Macintosh et des enfants
- MacWorld jugeait que toute personne aimant la programmation aimerait ChipWits
- Creative Computing a laissé une critique décrivant une scène où l’auteur insultait un robot de dessin animé à 4 h 30 du matin
- En 2008, Maclife.com a classé ChipWits parmi les Top 10 Apple II / Mac Games of All Time
- Les versions d’origine doivent pouvoir être lancées dans le navigateur via les émulateurs open source Emularity et Apple2js
Récupération de disques vieux de 40 ans
- En travaillant sur une nouvelle version de ChipWits, Doug Sharp a retrouvé les disques d’origine qu’il conservait
- Les disquettes 3,5 pouces et les floppy disks 5,25 pouces avaient été stockés à domicile pendant 40 ans, mais la plupart ont pu être lus sans secteurs défectueux
- Pour la récupération des disques Commodore 64, un lecteur de disquettes Commodore 64 1541 acheté sur eBay a été utilisé
- Les données ont été lues sur un PC moderne via un adaptateur USB XoomFloppy
- Les disquettes Mac 3,5 pouces ne pouvaient pas être lues avec la méthode standard des lecteurs modernes en raison de l’organisation propriétaire des secteurs sur Mac
- Le Mac utilisait une disposition propriétaire des secteurs pour porter la capacité des disques jusqu’à 800 Ko
- Un PowerMac G3 WallStreet, équipé d’un lecteur 3,5 pouces et d’une pile réseau, a servi de système relais, mais les versions récentes de MacOS avaient désactivé la prise en charge des disquettes de 400 Ko, ce qui ne permettait de lire que les disques de 800 Ko
- Sur suggestion d’un fan, l’équipe a ensuite utilisé GreaseWeazle, un contrôleur matériel personnalisé pour piloter des lecteurs de disquettes USB, et cette méthode a fonctionné
- Tous les disques ont ensuite été copiés sous forme d’images bloc par bloc puis organisés dans le dépôt GitHub
- Les noms de fichiers reprennent les étiquettes des disques
- En cas de détection de secteurs défectueux, le préfixe
badest ajouté au nom du fichier - Pour faciliter la lecture sur les ordinateurs modernes, les blocs ont été extraits avec des scripts Python puis reformatés en fichiers ASCII UTF-8
- Le PETSCII, encodage de caractères propre au Commodore 64, a été converti en ASCII
Ce que révèle la manière de développer dans le code source FORTH
- Les images complètes des disques d’origine et le code sont disponibles dans chipwits/chipwits-forth
- L’ensemble du code source de ChipWits pour Mac représente environ 3 000 lignes de FORTH
- Le port modernisé atteint déjà 35 000 lignes de C#, ce qui souligne la compacité remarquable du code FORTH d’origine
- Un article séparé, Forth Code for Electrocrabs in 1984 ChipWits Deciphered, analyse un « screen » de code FORTH contrôlant les electrocrabs
- FORTH est un langage à pile, comparable à la notation polonaise inverse
- Au lieu de
1 + 1, on écrit1 1 + - Au lieu de
if random(3) == 1, on utilise3 irnd 1 = if
- Au lieu de
Un aperçu de l’implémentation d’un jeu en 1984 à travers le code
- Dans la version Mac, le code de déplacement du robot ne sépare pas la boucle de rendu image par image comme dans le développement moderne
- La logique de jeu et le rendu graphique sont mélangés dans un code impératif unique
- Les animations sont réalisées en rendant directement les pixels à l’intérieur des boucles
- Le code gère en quelques mots le déplacement sur une dalle vide, la collision avec un mur ou le contact avec une bombe
- La définition
?boomdécide même si la partie doit se terminer lors du contact avec une bombe - Le code ajoute 0 au score selon la position du robot, forçant ainsi le réaffichage du score qui a pu être effacé au passage du personnage
- Dans la version Commodore 64, la définition des sprites montre une époque où le code et les données d’assets étaient étroitement mêlés
- Le code source FORTH n’est pas stocké sous forme de fichiers mais sous forme de screens numérotés, chargés dans l’ordre nécessaire
- Les sprites monochromes du C64 mesurent 24 × 21 pixels, et seuls 8 sprites peuvent être affichés à l’écran
- En choisissant des sprites à 4 couleurs, la résolution tombe à 12 × 21 et les pixels deviennent deux fois plus larges
- Le personnage ChipWit est rendu en superposant plusieurs sprites, d’une manière proche de l’animation sur celluloïd des dessins animés vintage
- Ce choix consomme davantage de sprites pour ChipWit, mais permet une image plus nette et une animation partielle par élément
- Dans la version Mac, la table des scores des objets est compressée pour tenir sur un seul screen
- Une notation comme
( 110584 dws)correspond à l’horodatage du screen ;110584signifie 5 novembre 1984, etdwsdésigne Douglass Walter Sharp - Ce screen semble être l’un des derniers modifiés avant la release finale, la dernière modification connue datant du 8 novembre
d,est défini pour stocker une valeur multipliée par 10, ce qui permet d’écrire 150 points sous la forme15 d- Cette approche aidait à conserver l’alignement du tableau tout en tenant sur un screen, et pouvait aussi faciliter l’ajustement global des scores juste avant la sortie
- Une notation comme
Reboot et travail communautaire
- L’équipe travaille aussi sur une version modernisée de ChipWits, distincte de la publication de la version FORTH d’origine
- Cette version reboot cherche à conserver le plaisir de l’original et sa rigueur en informatique, tout en améliorant plusieurs aspects, de la courbe d’apprentissage jusqu’au leaderboard mondial compétitif
- Ajouter ChipWits à sa wishlist sur Steam permettra de recevoir une notification lors de la sortie de la version finale
- Les objectifs immédiats des issues GitHub actuelles autour du code FORTH d’origine sont les suivants
- vérifier que tout le code source pertinent a bien été extrait des images disque brutes
- corriger des problèmes d’alignement dans certains fichiers source
- certains sont sur 40 colonnes, d’autres sur 64 colonnes
- déterminer quels disques contiennent le code source le plus récent
- documenter la manière de construire le projet à partir des sources sur Mac et C64
- extraire les sprites et images bruts des disques pour les convertir en fichiers
.png
- L’objectif final est une version de ChipWits en FORTH maintenue par la communauté pour PC modernes
1 commentaires
Avis sur Hacker News
Il existe un article expliquant pourquoi ChipWits a été créé en FORTH en 1984
https://chipwits.com/2023/04/08/forth-programming-language-g...
Merci d’avoir créé un jeu que j’aimais ; j’ai aussi essayé la nouvelle démo et je l’ai ajouté à ma liste de souhaits Steam
Forth est un langage que j’ai envie d’apprendre depuis des années
Sur les vieux ordinateurs, on avait le choix entre l’assembleur si l’on voulait des programmes rapides, et BASIC si la lenteur ne posait pas problème ; je trouve fascinant que Forth donne une impression assez haut niveau tout en restant un langage à « vitesse intermédiaire »
C’est un langage basé sur la pile
https://www.forth.com/starting-forth/
Il suffit de brancher un câble USB à l’ordinateur et de lancer un programme de terminal pour commencer immédiatement, ce qui est idéal pour s’immerger complètement dans le langage
Cela dit, les produits venant d’Australie peuvent mettre plusieurs mois à arriver ; mieux vaut donc d’abord chercher un fournisseur plus proche
Une autre bonne méthode consiste à apprendre comme en 1984 : lancer un émulateur de Commodore 64 ou d’Apple ][ sur un ordinateur moderne, puis y installer un environnement de développement Forth
La documentation de l’époque était écrite pour de vrais débutants, elle est donc très facile à suivre, et on trouve beaucoup de scans PDF gratuits sur Internet
C’était facile et amusant, mais jusqu’à un certain point c’est tellement ridiculement simple que cela peut sembler trop élémentaire pour certains, ou donner une forte envie de dépasser la simple implémentation jouet
Il faut gérer la pile soi-même, ce qui est assez fastidieux, et créer son propre FORTH est amusant. Il n’est pas indispensable de le faire en assembleur ; j’ai déjà créé autrefois un langage de script proche de Forth en C++
BASIC, pour « Beginner's All-purpose Symbolic Instruction Code », convenait bien
L’Amstrad CPC 6128 proposait aussi, sur une disquette séparée, une implémentation de Logo, un dialecte de Lisp destiné à l’éducation, et enfant, ces listes chaînées m’avaient vraiment marqué
À l’époque, l’« open source » n’était pas un concept courant, et les compilateurs et interpréteurs de divers langages étaient des outils commerciaux professionnels
[1] https://en.wikipedia.org/wiki/Amstrad_CPC#Other_languages
[2] https://en.wikipedia.org/wiki/An_Open_Letter_to_Hobbyists
Ça a l’air vraiment chouette
Dans le même genre, il y a aussi http://tumbleforth.hardcoded.net/, que je trouve assez agréable à lire. Si quelqu’un est allé jusqu’au bout, je serais curieux de savoir comment ça s’est passé
Ça m’a fait penser l’informatique autrement
Je suis encore jeune et j’ai beaucoup à apprendre, mais avec le recul, on dirait qu’autrefois certaines abstractions ont été choisies à cause des contraintes matérielles, et que dans les « branches d’évolution » des langages de programmation actuels se sont accumulées beaucoup d’abstractions qui ont mal vieilli, formant des couches de bric-à-brac qui supportent toute la charge. Un peu comme dans d’autres projets d’ingénierie
Collapse OS n’est peut-être pas pratique aujourd’hui, mais il y a quelque chose de libérateur à s’affranchir de plusieurs couches d’abstraction. Ça ressemble à une manière de profiter de l’informatique façon années 1960 sans une expérience développeur atroce
Mon projet un peu chimérique du moment consiste à suivre tout ça, à compiler Dusk OS dans une machine virtuelle, puis à le transférer sur une machine physique, à écrire en C un interpréteur Scheme pour Dusk OS, puis à l’étendre à loisir
Il y a encore quelques obstacles à franchir avant d’en arriver là. J’ai implémenté un interpréteur Scheme en Python en quelques heures, puis passé quelques heures de plus à améliorer le scanner/tokenizer. Pour l’instant, je lis Crafting Interpreters pour voir comment m’y prendre afin d’implémenter un interpréteur Scheme en C. Une fois l’interpréteur en C terminé, je compte revenir à ce guide et me lancer franchement dans DuskOS
J’aime déjà le ton de l’auteur
Par exemple :
Sa production régulière et énorme est impressionnante. Je ne suis pas totalement d’accord avec la philosophie Collapse, mais la liste de diffusion de DuskOS a juste le bon niveau de trafic pour la suivre en sous-marin
Le travail de Virgil m’a donné envie d’essayer un peu Forth, et l’an dernier j’ai passé du temps à désassembler SmithForth[1] à la main
C’est étonnant de voir à quel point il faut peu d’assembleur pour amorcer un langage. Je comprends parfaitement que Forth puisse fournir un REPL dans un environnement embarqué, et ça a l’air bien plus amusant que le cycle de développement habituel dont on entend souvent parler
[0]:https://duskos.org/
[1]:https://dacvs.neocities.org/SF/
Depuis, j’ai lu la page Wikipédia de ChipWits et l’article de blog, et le jeu original a vraiment l’air génial. Le logo dans le manuel sur Wikipédia est très réussi aussi
Ces derniers temps, je faisais une liste d’anciens et de nouveaux jeux avec des éléments de puzzle et de programmation, et je compte l’y ajouter. Je pourrais même m’y mettre juste après avoir terminé le « jeu » d’assembleur ketman. En fait, c’est discutable de l’appeler un jeu
J’espère que le nouveau ChipWits marchera très bien
ValForth de Valpar était l’une des premières implémentations FORTH multiplateformes dans l’écosystème Atari ST, et elle disposait aussi d’extensions astucieuses pour les jeux
https://www.atarimagazines.com/rom/issue1/jumping_forth.php
Comme le dit l’article, il existait aussi le FORTH d’Elcomp sur 8 bits, ainsi que des livres comme https://www.atarimania.com/documents/FORTH-on-the-Atari-Lear.... « Starting FORTH » de Leo Brodie reste aujourd’hui encore une excellente introduction
Nous avons tous appris BASIC, mais ces langages alternatifs nous ont montré qu’il existait réellement des métaphores complètement différentes pour programmer des machines
Pour un gamin des années 80, c’était quelque chose qui ouvrait énormément les horizons
Forth semble être l’un de ces langages difficiles à relire une fois qu’on l’a écrit, un peu comme Perl
Il est facile d’écrire et de construire des choses avec, mais si l’on revient au code un an plus tard, on risque de ne plus comprendre ce qu’il fait
Cela dit, il est vraiment rapide et efficace
Je viens d’ouvrir au hasard un programme Perl assez conséquent que je n’avais pas touché depuis plus de trois ans, et en parcourant le source, je n’ai eu aucun problème à comprendre ce qu’il faisait
Je ne pense pas que le code Perl soit plus difficile à relire que celui de la plupart des autres langages de programmation. La difficulté dépend surtout du niveau de maîtrise du développeur dans ce langage, et du temps écoulé depuis la dernière fois qu’il a écrit du code avec
Si l’on est très rouillé dans un langage, ou si l’on n’a jamais été très à l’aise avec, n’importe quel vieux code devient difficile à reprendre
Bien sûr, c’est encore plus difficile quand ce n’est pas son propre code, et la qualité d’écriture du code joue énormément. Il y a du code poubelle dans tous les langages, et s’il était mauvais dès le départ, il ne s’améliorera pas avec le temps
Je trouve que Forth est difficile à écrire, mais facile à lire
J’y ai beaucoup joué enfant sur Commodore 64
C’était un jeu unique, intéressant et amusant
Je ne veux pas spammer Hacker News, mais si vous avez joué à l’original, j’aimerais vraiment connaître votre réaction au reboot : https://chipwits.com
Enfant, je voulais vraiment avoir ce jeu
Ça me fait sentir sacrément vieux
Je me demande avec quoi la version moderne de ChipWits a été écrite
J’adorais vraiment ce jeu. J’avais aussi un package Forth pour C64, mais je n’avais pas fait le lien avec le fait que ce jeu avait été créé avec
J’ai acheté Human Resource Machine et je l’ai trouvé surtout amusant, jusqu’à ce que ça devienne trop difficile
Ça semble être le même concept que ChipWits, c’est-à-dire de la programmation basée sur une pile transformée en jeu
Je serais curieux de savoir comment les deux se comparent, si quelqu’un a joué aux deux