Bonjour.
Suite du WIP de dépannage du PCB.
Mon PCB a un problème de briques indestructibles (pas pratique pour scorer), et de parties qui ne s'arrêtent jamais (mauvais pour l'exploitant).
Dans un 1er temps, je vais regarder pourquoi la partie ne se termine pas.
La fin de partie est générée par un signal "EGL" (End of Game Level).
Voici comment ce signal fonctionne :
En (1), c'est le signal qui m'intéresse.
Le condo de 330 pF sert probablement à retarder la montée du signal, pour assurer une synchronisation avec d'autres signaux.
Ce signal est un "ET" logique à partir de 2 signaux internes notés (2) et (3).
C'est à dire qu'il faut à la fois que (2)
et (3) soient actifs pour que EGL soit actif lui-même.
(2) est la sortie "B" (2e sortie sur 4) d'un compteur 4 bits synchrone (flèche n°4).
(3) est soit la sortie "C" (interrupteur inverseur placé en position "3 BALLS"), soit la sortie "D" (position "5 BALLS") de ce même compteur.
On constate que la sortie "A" du compteur (bit de poids faible) génère le signal "PLAYER 2".
Je trouve ça d'une simplicité et d'une efficacité de conception terrible !
Quand une partie démarre, le compteur est reseté, toutes ses sorties sont à 0.
À chaque balle de lancée, le compteur est incrémenté (signal (6) "PLAY CP".
Le compteur compte simplement en binaire. Le
bit de poids faible est le joueur en cours, les
3 bits de poids fort sont le numéro de la balle :
- DCBA = 0000 = balle 0, joueur 0
- DCBA = 0001 = balle 0, joueur 1
- DCBA = 0010 = balle 1, joueur 0
- DCBA = 0011 = balle 1, joueur 1
- ...
C'est simplement la fin du jeu pour un joueur quand le compteur atteint l'une de ces 2 valeurs :
- DCB = 011 = 4e balle (3 balles de jouées)
- DCB = 101 = 6e balle (5 balles de jouées)
Ici la panne est toute simple. C'est la porte logique "ET" (référence A4 08 sur le schéma, c'est à dire emplacement A4 sur le PCB, composant 7408) qui est morte.
Je la change :
Maintenant c'est bon. Les parties se terminent bien comme prévu.
Passons au problème de briques indestructibles.
Là, ça se complique un peu...
La présence de chaque brique est stockée dans une petite RAM de 256 × 1 bit (composant "L3").
Cette RAM a la particularité d'avoir son bit d'entrée séparé de son bit de sortie.
Cette particularité a probablement simplifié un peu la conception du jeu.
En (1), nous avons le bus d'adresse de la RAM.
Il y a 7 des 8 bits qui sont des signaux liés à la position du spot à l'écran. Logique, car ca permet d'aller chercher le bon bit selon la brique à afficher.
Le 8e bit est un signal qui change en fonction du joueur en cours. Ainsi chaque joueur a son propre mur de briques, bien séparé.
En (2), nous avons le mécanisme de sélection du composant. Grosso modo, ça correspond à la position du mur de briques au sein de l'image. La RAM n'est sélectionnée que lorsque le spot balaye la surface concernée.
En (3), c'est la génération du bit d'entrée. Rien de particulier. On injecte des briques dans tout le composant à la demande (signal "/SET BRICKS") ou lorsque le mur est détecté comme 100% vide.
En (4), c'est la génération du playfield vidéo à partir du bit relu dans la RAM, "coupé" par une combinaison des signaux "1H" et "2H" (permet d'avoir un joli quadrillage visuellement), puis combiné avec les 3 signaux qui génèrent les murs verticaux et du haut.
En (5), c'est ce qui nous intéresse : la détection de collision entre la balle et les briques.
Ca génère le signal "BRICK HIT" et son complémentaire "/BRICK HIT".
Ce signal "/BRICK HIT" est utilisé en (6) pour générer le signal "R/W" de la RAM, de sorte à effacer la brique touchée.
Revenons au bloc (5)...
L'affichage de la balle est comparé à l'affichage de la brique courante. Si la balle et une brique sont affichées en même temps, alors il y a collision.
Ceci n'est vrai qu'une seule fois, car il est nécessaire de réarmer le circuit de collision.
C'est pour ça que les signaux "/BP HIT" (paddle touché), et "/BTB HIT" (mur du haut touché) interviennent.
Il faut que la balle re-touche soit le paddle, soit le mur du haut pour que le circuit de détection de collision refonctionne.
Avec l'oscillo, j'ai un peu galéré à trouver ce qui n'allait pas.
J'avais constaté que le signal "/BRICK HIT" n'était jamais actif, donc la RAM jamais écrite.
Déjà, la bascule D à la con référence F7 sur le schéma était morte. Elle restait dans un état intermédiaire foireux.
Je change le composant :
Et là, à ma grande déception, les briques restent encore indestructibles...
Pourtant mon testeur de composants TTL a bien confirmé que le 74279 en F7 était esquinté...
Étrange...
En fait, je me suis rendu compte que le signal "BRICK HIT" est un signal que j'appelle "suicidant" dans mon jargon personnel.
Dès qu'il passe actif, il provoque lui-même sa propre désactivation.
Je faisais une erreur dans l'utilisation de mon oscillo.
Le signal étant extrêmement fugitif, le mécanisme interne de synchro de mon oscillo faisait que je ne voyais rien.
Après avoir changé la synchro de l'oscillo en "SINGLE TRACE" + "WAIT for TRIGGER" (mono trace + attente déclenchement), j'ai enfin quelque chose :
Pfiouuuu, enfin trouvé quelque chose...
Là, le diagnostic est immédiat. C'est le composant F2 (bloc (6)) qui est mort.
Sa sortie est en permanence à l'état haut, il ne laisse pas passer la commande d'écriture...
Après changement du composant (j'ai oublié de prendre une photo), tadaaaaaaa :
À suivre :
- ré-intégration du PCB dans la borne
- test / dépannage de la partie audio
- fin du WIP