Bonjour.
Le WIP de réparation de cette borne continue petit à petit.
J'ai dumpé toutes les PROMs de 32 × 8 bits :
Contenu des PROM 32 × 8 bits
Je n'ai scanné que le recto de mon document. Il y a un 5
e dump au verso.
Je me suis rendu compte qu'un des bits d'une EPROM n'avait pas les valeurs attendues dans 16 cas sur 32 possibles.
Ma PROM sort un "0" logique (état bas) alors que d'après le dump trouvé sur le net, je devrais avoir pour ces 16 cas un "1" logique (état haut).
Les valeurs louches dans mon document ont un coin noirci.
J'ai d'abors crû à un problème de l'EPROM.
Mais depuis
hier soir cette nuit, je ne suis plus aussi sûr.
Peut-être s'agit-il plutot d'une spécificité propre à mon PB SEGA, car cette différence de contenu de PROM est indirectement liée à un écart de conception électronique par rapport au schéma "de référence" qui est le schéma Cinematronic.
Voir plus bas dans ce même message quel est cet écart.
Le dump "manuel" des PROMs s'arrête là.
Pour toutes les autres, il me faudra un système "semi-automatique" où c'est un compteur TTL qui génère le bus d'adresse.
J'incrémenterai le compteur avec un simple montage flip-flop.
Je suis toujours en attente de mon programmateur d'EPROM acheté en Chine via un site d'enchères mondialement connu.
C'est le moment de placer une de mes contrepétries favorites : "il arrive à pied par la Chine".
La suite du WIP, c'est un débuggage pas à pas de l'électronique du CCPU.
L'idée est la suivante :
- tout le PCB est cadencé par un unique oscillateur à environ 20 MHz
- je désactive cet oscillateur le plus proprement possible
- je mets en place un bouton poussoir qui va permettre de manuellement générer le signal de CLOCK à la place de l'oscillateur
- pour des raisons de rebond, le signal électronique du bouton poussoir serait moche et génererait plusieurs CLOCK pour un unique appui
- j'installe un système anti-rebond (flip-flop) entre le bouton poussoir et l'entrée CLOCK du PCB
C'est un peu comme un film qui serait en mode pause.
Mon bouton, c'est la télécommande qui me permet d'avancer image par image au rythme où je veux.
J'ai ainsi le temps de faire toutes les investigations que je veux avant de passer à l'étape d'après.
La réalisation de l'anti-rebond est identique à
ce schéma (voir "Bascule à CD4011") sauf que je dois utiliser un 74LS00 (techno TTL) qui est l'équivallent du CD4011 (techno CMOS).
Voici le 1er étage de l'oscillateur du PCB :
1er étage de l'oscillateur
Il est constitué d'un quartz, d'un condensateur, de 2 résistances et d'un boîtier 74LS04 (6 portes inverseuses).
Je pensais, tel un bourrin de base, dessouder le 74LS04, mais ce n'est pas nécessaire. Il suffit de dessouder le quartz et une résistance :
Quartz et résistance retirés
Ensuite je prépare mon 74LS00 pour une installation par-dessus un circuit déjà soudé.
C'est ce qu'on appelle dans le jargon électronique une "verrue".
J'ai mis à l'horizontale toutes les broches sauf la 7 (GND) et la 14 (VCC).
En le placant au-dessus d'un boîtier TTL à 14 broches pas trop exotique, les broches 7 et 14 vont tomber pile en face de ce que je veux.
Ensuite, il me reste à cabler le bouton poussoir et le flip-flop.
J'ai maintenant un PCB qui ne peut fonctionner qu'en pas à pas.
Dès la mise sous tension, il... ne fait rien.
Il est simplement figé, faute de signal d'horloge.
C'est mon doigt qui va remplacer les
vibrations d'un cristal de quartz.
Maintenant que mon PCB ne sait faire que du pas à pas, l'idée est la suivante :
- alimenter le PCB
- regarder la 1ère instruction qui est lue dans la ROM du jeu
- regarder dans le guide de référence du CCPU que fait cette instruction
- fliquer son exécution par le PCB
- si c'est par exemple le chargement de la constante 0xF4B dans l'accumulateur A, je dois voir cette valeur s'écrire dans les 3 boîtiers latch qui correspondent à l'accumulateur (M4/IC37, P4/IC39 et S4/IC41 en l'occurence)
C'est donc là que j'ai regardé en détail l'agencement des 8 PROMs qui contiennent le code du jeu.
C'est là l'une des principales différences avec le schéma de référence :
- Cinematronics utilise 4 boîtiers EPROM 2616, chaque boîtier fait 1024 × 8 bits
- SEGA utilise 8 boîtiers PROM MB7054 ou 7643, chaque boîtier fait 1024 × 4 bits
Correspondance EPROMs Cinematronics / PROMs SEGA
SEGA a associé les boitiers 4 bits deux par deux pour faire l'équivallent d'un boîtier 8 bits.
Le bit A11 (à gauche sur le schéma) passe bien par une porte spéciale (boîtier TI SN74265) qui assure 2 sorties complémentaires et parfaitement synchrones. Ces 2 sorties sélectionnent les boîtiers PROMs quatre par quatre comme sur mon schéma.
Attention : cette entrée de sélection est active à l'état bas :
- A11=0 va sélectionner PR-07, PR-08, PR-03 et PR-04
- A11=1 va sélectionner PR-09, PR-10, PR-05 et PR-06
Par contrel la bascule JK (en bas à droite) est absente du PCB SEGA, les 2
e entrées /CS des 8 boîtiers PROMs sont en permanance à l'état bas.
Ce qui est bizarre, c'est que d'après le schéma original Cinematronic, si la bascule JK ne sélectionne pas la bonne paire de boîtiers EPROM (U7+R7 ou bien T7+P7), alors selon la valeur du bit A11, on risque de lire "dans le vide" (aucun boîtier sélectionné) :
- hypothèse : la sélection de page (bascule JK) sélectionne les boîtiers U7+R7
- une adresse 0xxxxxxxxxxx (A11=0) est lue : A11 va sélectionner T7+P7
- in fine, aucun boîtier n'est sélectionné et la lecture se fait dans le vide...
Bizarre...
La conception du CCPU permet d'avoir plusieurs "pages" de code en ROM. Peut-être que mon schéma est incomplet ?
Pour en revenir à mon PCB SEGA, là je n'ai pas de doute : la sélection de page de ROM n'existe pas, et c'est seul le bit A11 qui choisit la quadrette de boîtiers PROM.
Grâce à nicolas-le-jardinier qui m'a scanné son document Cinematronic, j'ai le contenu du code du jeu (sous forme hexadécimale) facilement accessible :
Le jeu commence par le code machine "49 E7".
Un petit tour par le "Programmer's Reference Guide" du CCPU (voir
ce message de gc339), et je sais que :
- 49 E7 = "LDJ #7E9", soit charger la constance 0x7E9 dans le registre "J"
(je n'ai pas réussi à trouvé où était stocké ce registre J sur le PCB...)
Par contre, dès la 1ère instruction, ça chie déja...
Au lieu de lire "49 E7", mon CCPU lit "09 E7".
En effet, j'ai découvert que le bit D2 de la PROM PR-08 semble malade.
Quand il veut passer à l'état haut, il se positionne à peine à 0,5 V...
Je dois investiguer si la PROM est en cause, ou si le signal est bouffé par un autre composant.
Du coup, le CCPU exécute :
- 09 E7 = "LDA #900" suivi de "ADD [ i]"
Je flique les boîtiers U11 et T11...
C'est bon, leur entrée SELECT est à l'état bas, ils laissent passer les boîtiers "pairs". Tout va bien.
Je flique le boîtier S13...
C'est bon, "on" l'active bien (/LDR passe à 0).
Je regarde sur le front montant de la CLOCK (j'appuie sur mon bouton)...
Et paf ! Sur le front montant de la clock, les sorties du latch changent, mais pas avec les données qu'on lui a présentées :
- les 4 bit de poid faible de S13 auraient dus être chargés avec "1001", soir "9" en hexa
- j'ai pas "1001" en sortie du latch...
Ben ça commence fort, ce mode pas à pas...
Ce n'est pas la bonne instruction qui est lue.
L'instruction exécutée à la place ne l'est même pas correctement...
A suivre :
- diagnostic pour PR-08 : malade ou signal bouffé par un autre composant ?
- diagnostic pour S13 : vraiment malade ?
Merci à gc339 pour ses conseils : j'aurais inutilement dessoudé le composant I2, inutilement utilisé 2 boutons poussoirs alors qu'un seul suffisait.