[WIP 100%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
- Bouz
- Référent Technique
- Messages : 1253
- Enregistré le : mer. 22 déc. 2021 18:52
- Localisation : Hérault
- Contact :
[WIP 100%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Bonjour à tous (ceux qui trainent par là).
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)
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)
Modifié en dernier par Bouz le sam. 27 avr. 2024 11:13, modifié 12 fois.
- Xrider
- Administrateur
- Messages : 4146
- Enregistré le : sam. 14 sept. 2019 10:47
- Localisation : MaskRom
- Contact :
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Excellent développement !!! Félicitations pour toute la réflexion qui porte ce projet !
C’est du jamais vu !
Merci pour l’affiliation Delta de PCB
Je vais mettre un place une redirection beaucoup plus sympa pour que l’URL soit plus courte, delta-island.com/briconeo te conviendrait ?
Encore félicitations Aurélien
EDIT :
La redirection est active :
https://www.delta-island.com/briconeo
On fera une page spécifique sur le site web quand le projet sera bien avancé
C’est du jamais vu !
Merci pour l’affiliation Delta de PCB
Je vais mettre un place une redirection beaucoup plus sympa pour que l’URL soit plus courte, delta-island.com/briconeo te conviendrait ?
Encore félicitations Aurélien
EDIT :
La redirection est active :
https://www.delta-island.com/briconeo
On fera une page spécifique sur le site web quand le projet sera bien avancé
Delta Store - Modchip - Mods - Tools - Modification pour vos consoles de jeux video
Delta island - Jeux Vidéo - Retro-Ingénierie - Développement Hardware & Software
Delta island - Jeux Vidéo - Retro-Ingénierie - Développement Hardware & Software
- Bouz
- Référent Technique
- Messages : 1253
- Enregistré le : mer. 22 déc. 2021 18:52
- Localisation : Hérault
- Contact :
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Merci, j'espère que ça va aller au bout!
Avant de m'emballer, je voudrais vérifier une boucle complète d'injection de code, test des ports en I/O, ...
Pour le nom, j'hésite entre BricoNeo (je suis dans un trip bricolage, et ce projet est clairement dans ce cadre) et... BricoGeo .
Si le système fonctionne, il peut en fait s'utiliser sur pas mal d'autres plateformes (pas seulement de la NeoGeo). Et il faudra trouver un autre nom .
Avant de m'emballer, je voudrais vérifier une boucle complète d'injection de code, test des ports en I/O, ...
Pour le nom, j'hésite entre BricoNeo (je suis dans un trip bricolage, et ce projet est clairement dans ce cadre) et... BricoGeo .
Si le système fonctionne, il peut en fait s'utiliser sur pas mal d'autres plateformes (pas seulement de la NeoGeo). Et il faudra trouver un autre nom .
- Garfield56
- Delta User Lv4
- Messages : 507
- Enregistré le : ven. 19 août 2022 03:14
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Projet très intéressant
Merci beaucoup pour ton partage
Merci beaucoup pour ton partage
- Bouz
- Référent Technique
- Messages : 1253
- Enregistré le : mer. 22 déc. 2021 18:52
- Localisation : Hérault
- Contact :
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Merci beaucoup de me suivre .Garfield56 a écrit : ↑mar. 4 juil. 2023 08:47 Projet très intéressant
Merci beaucoup pour ton partage
Bon, vu que j'étais chaud comme la braise et que j'avais vraiment envie d'avancer sur le projet et de faire le "proof of concept", je me suis mis en tête de faire une première réalisation sur plaque à trous..
On voit l'emplacement de tous les composants traversants, avec quasiment tous les supports qu'il me restait en rayon . La nappe permet d'aller se brancher sur le support de la ROM système. J'ai fait un adaptateur pour ça, ça m'a pris 3h de petites soudures!
Au bout d'un paquet d'heures, j'en étais "déjà" à 5% des soudures faites et un gros paquet de fils...
Et c'est donc là que je me suis dit que j'allais prendre l'option PCB. Ca m'a pris un paquet d'heures aussi. Je dois être un peu couillon parce que je prends toujours des PCB qui font la plus petite taille possible. Résultat, c'est l'enfer de passer les pistes, et l'autorouteur n'y arrive pas.
Ca donne à peu près ça en cours de route. Les lignes en travers sont celles qu'il faut encore router... J'en ai profité pour passer aux composants CMS, qui prennent moins de place et coûtent moins cher!
Et hier soir, je suis enfin arrivé à quelque chose qui ressemble à un vrai PCB.
- cazeysan
- Contributeur Lv1
- Messages : 295
- Enregistré le : mer. 22 déc. 2021 15:45
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Vraiment super ! Un paquet de slot MVS vont bientôt te dire merci !
- Garfield56
- Delta User Lv4
- Messages : 507
- Enregistré le : ven. 19 août 2022 03:14
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Pour AES cela serait top également
- Bouz
- Référent Technique
- Messages : 1253
- Enregistré le : mer. 22 déc. 2021 18:52
- Localisation : Hérault
- Contact :
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Bientôt, je ne sais pas, mais ça devrait bien m'aider, en effet. Sans compter qu'une cartouche de diag audio dans le connecteur, ça ne facilite pas l'accès au reste du slot pour le sonder.
Aucune raison que ça ne fonctionne pas sur AES. Ca permettrait en plus de ne pas avoir à insérer une cartouche pour avoir de l'affichage (puis qu'on n'utilise pas l'écran). L'AES n'a pas de ROM de fix layer et utilise celle des cartouches.
Bref, ça devrait marcher sur AES comme sur MVS. Tout pareil.
Aucune raison que ça ne fonctionne pas sur AES. Ca permettrait en plus de ne pas avoir à insérer une cartouche pour avoir de l'affichage (puis qu'on n'utilise pas l'écran). L'AES n'a pas de ROM de fix layer et utilise celle des cartouches.
Bref, ça devrait marcher sur AES comme sur MVS. Tout pareil.
- Garfield56
- Delta User Lv4
- Messages : 507
- Enregistré le : ven. 19 août 2022 03:14
- Bouz
- Référent Technique
- Messages : 1253
- Enregistré le : mer. 22 déc. 2021 18:52
- Localisation : Hérault
- Contact :
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Et voilà la tête du connecteur ROM sur lequel la nappe IDE viendra se brancher:
Il me tarde de commander tout ça, mais je vais quand même respecter une dernière étape...
J'ai déjà réalisé et testé la programmation des 3 GAL du circuit. Et j'ai bien fait, parce que ça m'a amené à modifier leur brochage.
Il serait fort dommage que le projet soit frustrant à manipuler juste à cause de performances décevantes. La prochaine étape, avant de commander quoi que ce soit, est donc de réaliser un bout du code du microcontrôleur, pour simuler un envoi de mots de 16 bits sur le bus. Je veux avoir une vague idée du temps que ça peut prendre et si c'est trop long, il me faudra un plus gros microcontrôleur, avec plus d'entrées-sorties (et donc probablement en 3.3V avec de la conversion de niveaux de tension).
Il me tarde de commander tout ça, mais je vais quand même respecter une dernière étape...
J'ai déjà réalisé et testé la programmation des 3 GAL du circuit. Et j'ai bien fait, parce que ça m'a amené à modifier leur brochage.
Il serait fort dommage que le projet soit frustrant à manipuler juste à cause de performances décevantes. La prochaine étape, avant de commander quoi que ce soit, est donc de réaliser un bout du code du microcontrôleur, pour simuler un envoi de mots de 16 bits sur le bus. Je veux avoir une vague idée du temps que ça peut prendre et si c'est trop long, il me faudra un plus gros microcontrôleur, avec plus d'entrées-sorties (et donc probablement en 3.3V avec de la conversion de niveaux de tension).
- Bouz
- Référent Technique
- Messages : 1253
- Enregistré le : mer. 22 déc. 2021 18:52
- Localisation : Hérault
- Contact :
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
OK, je viens de faire un test...
Petit programme sur Arduino NANO. Je prends un tampon de 1ko (il n'y a que 2ko de RAM ), et je l'envoie sur le bus SPI pour simuler ce qui va se passer quand j'écrirai sur le bus de la ROM.
Le tampon en question sera rempli par la connexion série avec l'ordinateur. L'arduino ayant un tampon d'environ 8 octets sur le port série, mieux vaut éviter de tenter d'envoyer les données sur le SPI pendant qu'on les reçoit sur la ligne série (mauvais expérience). On va donc faire ça par paquets de 1ko.
Un coup d'oscillo pour observer le signal d'horloge sur le bus SPI, ce qui m'indique le début et la fin du transfert.
Et voilà ce que ça donne:
On tourne à moins de 2ms.
Le transfert de l'intégralité du contenu d'une ROM (qui n'arrivera absolument jamais) prendra donc 256ms (sans compter le temps de transfert sur le port série). On dirait que le fait d'utiliser des registres à décalage et un microcontrôleur lent ne va pas poser de problème majeur.
Dommage, j'aurais bien fait des essais avec un Raspberry 2040 .
Je vais faire la tournée de mes tiroirs et des marchands de composants et mettre en place le projet de fabrication, parce que c'est le prochaine étape!
Petit programme sur Arduino NANO. Je prends un tampon de 1ko (il n'y a que 2ko de RAM ), et je l'envoie sur le bus SPI pour simuler ce qui va se passer quand j'écrirai sur le bus de la ROM.
Le tampon en question sera rempli par la connexion série avec l'ordinateur. L'arduino ayant un tampon d'environ 8 octets sur le port série, mieux vaut éviter de tenter d'envoyer les données sur le SPI pendant qu'on les reçoit sur la ligne série (mauvais expérience). On va donc faire ça par paquets de 1ko.
Un coup d'oscillo pour observer le signal d'horloge sur le bus SPI, ce qui m'indique le début et la fin du transfert.
Et voilà ce que ça donne:
On tourne à moins de 2ms.
Le transfert de l'intégralité du contenu d'une ROM (qui n'arrivera absolument jamais) prendra donc 256ms (sans compter le temps de transfert sur le port série). On dirait que le fait d'utiliser des registres à décalage et un microcontrôleur lent ne va pas poser de problème majeur.
Dommage, j'aurais bien fait des essais avec un Raspberry 2040 .
Je vais faire la tournée de mes tiroirs et des marchands de composants et mettre en place le projet de fabrication, parce que c'est le prochaine étape!
Modifié en dernier par Bouz le mer. 5 juil. 2023 10:15, modifié 1 fois.
- Kr4ken
- Modérateur
- Messages : 971
- Enregistré le : mar. 19 avr. 2022 06:20
- Localisation : Istres (13)
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Aurélien, mon cher Aurélien je me prosterne tellement je suis transi d'envie et d'excitation à la vue de votre projet et auquel je crois dur comme fer sachant l'investissement et la dévotion que vous mettez dans vos projets !
De tout cœur merci pour tous et toutes et tous les slots / consoles réparées grâce a ce système ! <3
De tout cœur merci pour tous et toutes et tous les slots / consoles réparées grâce a ce système ! <3
Kr4ken