Site logo

Triceraprog
La programmation depuis le Crétacé

Un jeu en Forth pour Hector HRX : Picthorix ()

À nouvelle édition de Retro Programmers United for Obscure Systems, nouvelle machine et une nouvelle participation.

La gamme de machine couverte par cette édition est la gamme Hector HR et suivants : 2HR, 2HR+, HRX, MX40 et MX80. Pour des informations sur cette gamme de machines, je vous invite à consulter cette page.

Hector HRX

Ces machines forment une gamme de machines vaguement compatibles les unes avec les autres. Des petites différences de matériel, et surtout de ROM, font que les programmes ne sont pas forcément compatibles entre les différentes machines. D'après ce que j'ai compris, pour rien n'arranger, c'était une machine ouverte à la bidouille et aux modifications hardware. Le parc de machines devait donc être assez hétérogène.

De la gamme, j'ai donc choisi une machine : le HRX. Pour deux raisons. La première est parce que j'en avais une sous la main (mais en demande de réparation), et j'aime bien pouvoir voir la machine pour imaginer le jeu qui va avec (et pour tester... quand la machine fonctionne). La seconde car c'est une machine qui a un Forth résident. Et si je connais un peu le Forth pour avoir joué avec et lu à son propos, je n'avais jamais développé un programme complet en Forth. Or, c'est dans ces situations que l'on découvre vraiment un langage.

La découverte

La première étape, comment toujours, est de découvrir la machine. Il y a pas mal de documentation disponible sur les différentes machines, surtout sous forme de magazines spécialisés à petits tirages (j'imagine), un peu de document de reverse engineering, des plans des certaines des machines (dont le HRX) et le code source de MAME. Il existe même un manuel Forth, sous forme de didacticiel, pour le HRX. Ce manuel m'a été très utile pour me remettre dans l'esprit Forth et faire le tour des capacités de la machine.

Une fois lu le manuel et fait quelques exercices et tests, j'ai démarré... non pas le jeu, mais une relecture du manual, en notant tous les mots Forth et leur fonctionnement, afin de les classer par catégorie, les expliquer et les rendre accessible sous forme de référence en ligne, indexé. Cela m'a pris pas mal de temps, mais j'étais certain d'avoir parcouru tous les mots, de les avoir presque tous compris, et surtout, de pouvoir les retrouver rapidement.

Le résultat est disponible sur cette page.

Ce n'est pas tout à fait complet et j'y trouve encore quelques petites erreurs en m'y référant, mais c'est déjà très utilisable. Le code source de la page est disponible si vous voulez le compléter.

L'environnement de développement

Le Forth du HRX est fourni avec un système de « screen », qui est classique pour le Forth. Les « screens » permettent d'éditer et d'enregistrer des données, généralement des commandes et des mots, pour les réutiliser à volonté. Le système offre du paging automatique mais avec un système sur cassette, c'est pratiquement inutilisable.

De plus, l'éditeur est un éditeur de ligne, pas très agréable, même si ça dépanne. Il existe un éditeur pleine page que l'on peut charger depuis une disquette. Ça peut être intéressant pour retrouver les sensations sur la machine, mais pour un développement, je trouvais ça un peu lourd.

J'ai donc, comme souvent, créé mon petit environnement en utilisant MAME et un script d'automatisation. Je ferai un article à ce sujet par la suite. Sans détail, cela m'a permis de programmer depuis Visual Code et de lancer une compilation en me servant de la machine émulée.

Le jeu

Lorsque je n'ai pas une machine fonctionnelle sous la main, je préfère chercher des idées de jeux qui ne vont pas pousser les performances ou les exotismes de la machine. Particulièrement dans le cas de ces machines avec peu d'activité, où les émulateurs ne sont pas toujours très fidèles.

Mon fils m'a proposé alors l'idée d'un Picross, aussi connu sous le nom de Nonogram ou encore Logimage... et plein d'autres noms. L'idée est de remplir une grille en suivant des indications sur les groupes de « pixels » par lignes et par colonnes. Bonne idée, je suis parti là-dessus.

Du à ma méconnaissance du Forth, ça a été assez laborieux. J'ai pas mal appris au passage et j'écrirais certaines choses probablement différemment si je devais recommencer. Je n'ai pas utilisé les capacités de la machines au niveau graphique, qui peut aller bien plus loin que ça, avec de l'adressage au pixel sans color clash.

Au passage, j'ai aussi appris à créer des grilles de Picross. Pour cela, j'ai utilisé un programme un ligne qui permet de savoir si la grille est résolvable ou pas. C'est pratique, car il ne suffit pas de faire une grille avec un dessin sympa. Il faut à cette grille une solution unique, ce qui n'est pas toujours le cas sur une grille quelconque.

Au final, j'ai créé 9 grilles, dont deux vraiment comme une initiation et cinq comme références aux cinq jeux précédents avec lesquels j'ai participé aux précédentes éditions de RPUfOS.

Pour télécharger le jeu, c'est ici.

Picthorix