Je crée ce petit topic pour vous raconter mes avancées dans un projet qui est né par surprise dans mon esprit torturé.
Le constat de base est assez simple: faire le diagnostic d'un slot MVS (et probablement d'une AES, mais je n'en ai jamais croisé), c'est la galère:
- L'Universe BIOS (ou UNIBIOS) fournit des infos de base concernant les soucis de mémoire RAM
- Le NeoDiag BIOS, même s'il couvre pas mal de choses, ne m'a jamais vraiment servi, malgré tous les espoirs que j'ai pu placer en lui. Il permet de cibler une zone à problème, mais n'aide pas forcément à pousser le diagnostic.
Et malgré toute la bonne volonté du monde, ces ROMs système (c'est comme ça que ça s'appelle) ne peuvent plus faire grand chose quand le circuit vidéo a décidé de ne pas afficher d'image. Le NeoDiag permet certes de faire des échanges avec le Z80 pour signaler les problèmes sous forme de bips sonnores, mais tout cela reste bien limité (et il faut bricoler une cartouche).

Du coup, je me suis demandé s'il ne serait pas pratique d'ajouter un moyen de communication à cette chère NeoGeo. Après quelques étapes de réflexion, passant notamment par le raccordement d'un écran LCD, j'ai fini par arriver à une solution que j'ai sur le coup qualifiée de "plutôt cool":
- Je raccorde un PCB maison sur le connecteur de la ROM système
- A la place de la ROM, je place de la RAM. Ca me permet d'injecter facilement du code dans le système sans avoir à brûler une EPROM.
- Pour programmer cette RAM, j'utilise un microcontrôleur, qui injecte le code dedans. Le système ira ensuire lire la RAM comme si c'était de la ROM
Avec cette première étape, je serais en mesure de compiler des bouts de code qui ciblent des tests bien particuliers, et de les envoyer dans la machine.
Reste que j'aimerais bien que la machine soit en mesure d'échanger avec moi. Et un connecteur de ROM, autant la NeoGeo peut lire dessus, autant elle n'est pas faire pour y écrire. Il n'y a d'ailleurs pas de broche d'écriture câblée. J'ai alors utilisé une mécanique que j'ai déjà repérée sur quelques machines que j'ai eu l'occasion de réparer... un "port", ou "registre mappé", bref, une zone mémoire particulière qui n'est pas reliée à la ROM (à la RAM, en l'occurrence), mais qui se trouve dans le même espace d'adressage.
Voilà ce que j'ai imaginé:
- Quand on lit le dernier word (16 bits) de la ROM, on lit en fait le contenu de 2 registres 8 bits alimentés par le microcontrôleur. Ca permet au microcontrôleur de piloter le programme qui tourne sur le système.
- Quand on lit l'avant-dernier word (16 bits) de la ROM, on lit effectivement ce word en mémoire, mais lors de la prochaine opération de lecture en ROM, on prendra la valeur des 16 bits du bus d'adresse, et on les copie dans 2 registres 8 bits, lus par le microcontroleur. Ainsi, en 2 opérations de lecture, on fait finalement une écriture.
Cette dernière mécanique permet au programme qui tourne sur le système (stocké dans la RAM) de remonter des infos au microcontrôleur: état des registres du CPU, état de la mémoire sur une zone, ...
L'idée sera ensuite de développer du code sur PC et sur le microcontrôleur pour pouvoir compiler du code assembleur 68000 et injecter le différentiel dans la RAM. Puis de gérer les échanges avec la NeoGeo, coder les différents tests matériels au fur et à mesure que j'en aurai besoin, ...
Pour ça, je me suis mis à l'assembleur 68000. J'en ai fait un peu au collège, mais j'ai fait énormément de Saturn 4 bits (rien à voir avec la console), et un peu d'assembleur x86 au lycée. Ca devrait donc le faire.
J'utilise les vidéos et cours en ligne de Chibiakumas, que je vous recommande chaudement pour tout ce qui touche aux vieilles machines...
https://www.youtube.com/@ChibiAkumas
Je me suis installé un VASM et je me suis une partie du code source et la décompilation de la ROM NeopenBIOS. Elle ne permet pas de faire fonctionner tous les jeux, mais elle a le mérite d'être gratuite et opensource!

Si on extrapole un peu, on se retrouve avec la possibilité de développer des petits jeux qui tiennent dans une ROM de 128Ko et qui utilisent les ressources graphiques et sonores de cartouches commerciales
Bref, en plus des leçons d'assembleur, j'ai commencé la conception du circuit électronique avec les puces que j'avais dans mes tiroirs...

Pour la partie contrôle de bus, il me fallait de la logique câblée. Hors de question de laisser faire le microcontrôleur avec son rythme (et ses bugs). Je suis donc parti sur des GAL Atmel ATF22V10, qui offrent énormément de possibilités une fois qu'on a dompté leur logiciel immonde.
Pour la RAM, je suis parti sur 2, puis 4 puces mémoire de 32ko que j'avais en mémoire cache sur une vieille carte mère de PC...

Mais j'ai fini par commander 2 puces de 128ko (c'est trop gros, mais la taille en-dessous n'existe pas, et qui peut le plus peut le moins). J'en ai d'ailleurs commandé une dizaine. Si vous ne connaissez pas, je vous conseille d'aller faire un tour chez https://www.rs-particuliers.com/
Leur site est immonde, mais on trouve la plupart des pièces de rs-online (avec les mêmes références, il vaut mieux chercher sur le site pro) et on ne paie pas le port si on commande le week-end (sans minimum de prix de commande). J'adore.
La suite plus tard parce qu'il faut que j'aille dormir! N'hésitez pas à vous manigester si le projet vous intéresse et si vous avez des suggestions avant que je n'aille trop loin!
(spoiler alert: je suis peut-être déjà allé un peu loin)











