Salut,
Ouf ! Merci Spectro d'avoir confirmé mon diagnostique
, et me revoilà en deuxième semaine à « Qui veut gagner une SI fonctionnelle ? »
Sitôt spectro avait-il posté, sitôt j'avais été voir dans mon stock de composants TTL si j'avais des 74LS174 : j'en avais !
Et l'opération de vérification allait être encore plus simple que je ne le croyais car ces composants étaient déjà sur support : ils faisaient partie de ceux que j'avais dessoudés au début, quand je me battais avec le circuit RESET.
Mais avant de vous raconter la suite, revenons un peu sur cette partie du schéma que je n'avais pas pris le temps de vous expliquer.
Ici nous avons 3 sous-ensembles :
1) le décodage des ports d'entrée/sortie (E/S)
2) la capture de la valeur à décaler
3) le registre à décalage (shifter) en lui-même
1) Le décodage des ports tout d'abordOn l'avait évoqué lors de l'étude du watchdog, car la remise à 0 du watchdog se fait via le port 6. Le 7442 utilisé ici est un décodeur BCD. À partir de la combinaison binaire présente sur ses 4 entrées, il active la sortie correspondante de 0 à 9
Exemple : 0101 en entrée activera la sortie n° 5
En entrée nous avons les bits d'adresse A8, A9 et A10. La 4ème entrée reçoit le signal SAMPLE issu de la carte mère. Sans rentrer dans les détails, celle-ci passe à 1 seulement quand le CPU exécute une instruction de type IN ou OUT, c'est-à-dire des instructions réservées à la lecture écriture non pas dans le plan mémoire du CPU, mais dans sa zone d'E/S. Le signal SAMPLE est en général au niveau bas, donc au niveau haut après avoir traversé le 7404. Par conséquent, tant que le CPU n'exécute pas d'instruction IN ou OUT, seules les sorties du 7442 supérieures à 8 sont activées. Mais ces broches ne sont reliées à rien, donc sans effet. Par contre, à l'exécution d'une instruction IN ou OUT, SAMPLE va passer à 1 le temps de l'exécution de l'instruction. Selon l'opérande associé à l'instruction IN ou OUT, le microprocesseur présentera sur le bus d'adresse des valeurs pour les bits d'adresse A8 à A10 correspondant au port que l'on souhaite adresser. La sortie correspondante du 7442 sera activée, et déclenchera telle ou telle opération sur la carte fille selon le n° de port sélectionné. On n'exploite que 5 ports, ceux portant les n° de 2 à 6.
2) La capture de la valeur à décalerElle est confiée à un ensemble de bascules D. Voyez la bascule D comme une cellule mémoire élémentaire d'1 bit. Elle mémorise et présente sur sa sortie Q la valeur qui était présente sur son entrée D au moment où il y a eu un front montant sur sa broche CLK.
C'est en faisant une opération OUT vers le port 4 que le processeur enverra la valeur à mémoriser.
Ici la mémorisation est répartie sur 3 circuits
- D0 et D1 sur le 74175 situé en B5, D2
- D3 et D4 sur le 74174 situé en C5
- et enfin D5, D6 et D7 sur le 2nd 74174 implanté en D5.
Pourquoi 3 circuits qui totalisent 16 bascules D alors qu'on aurait pu imaginer n'en avoir besoin que de 8 ? On remarque un câblage particulier : les bits D0 à D7 provenant du bus de donnée sont réparties une entrée sur deux des bascules, et chaque sortie est bouclée sur son entrée voisine. Ainsi, à l'instant t, les bascules mémorisent les 8 bits provenant du bus de donnée. À l'instant t+1, elles mémorisent la nouvelle valeur, et leur voisine elles mémorisent les 8 bits de l'instant précédent ! Autrement dit, en 2 écritures successives nous aurons mémorisé une valeur 16 bits (en écrivant d'abord les 8 bits de poids fort, puis les 8 bits de poids faible).
3) Le registre à décalage, ou shifterCette partie est un peu plus alambiquée, aussi vais-je la détailler pour essayer de vous l'expliquer le plus simplement possible.
Sur la majorité des schémas de SI qu'on trouve sur le net, et sur la version papier que j'ai achetée, les composants au cœur de cette partie sont des 25S10. Il s'agit d'un quadruple multiplexeur (un multiplexeur peut être vu comme un aiguillage) permettant de choisir 4 fois entre 2 sources. Mais déjà à la fin des années 70 quand Space Invaders a été fabriqué, ce composant devait être difficile à sourcer (aujourd'hui je ne trouve même pas de datasheet sur le net, c'est dire si c'est un composant oublié !...). Aussi Taito et Midway ont planché sur une solution alternative utilisant d'autres composants plus courants.
(ce schéma que j'ai trouvé sur le net correspond à un PCB Taito, mais le principe est identique sur la version Midway).
Sur mon PCB, tout comme sur celui qu'aje m'a prêté, c'est cette version à base de 74151, un multiplexeur 8 sources vers 1.
Je vous l'ai schématisé comme ça :
Imaginez un gros switch Peritel qui vous permettrait de choisir entre 8 sources pour n'en sortir qu'une vers le téléviseur
. Bah c'est un peu ça, si ce n'est qu'en entrée, cela n'accepte pas in signal vidéo mais que du signal TTL qui peut être à 0 ou à 1.
Le 74151 a 8 entrées, I
0 à I
7, une sortie Q, et 3 broches de sélection S
0 à S
2. Selon la combinaison binaire présente sur ces 3 entrées, on retrouve en sortie le signal de l'entrée correspondante.
Comme on le voit sur le schéma plus haut, on n'utilise pas moins de 8 circuits 74151 ! Il y en a un par bit de la valeur décalée qu'on souhaite lire. Le principe de fonctionnement de ce registre à décalage est très simple, mais pas facile à exposer car ça fait un câblage touffu
.
J'ai essayé de le schématiser sur le dessin suivant :
A gauche nous retrouvons nos valeurs de 2 x 8 bits qui ont été verrouillées dans les 174 et 175. Pour cet exemple la valeur mémorisée est 1111001110101110.
- quand la valeur de sélection des 74151 est à 000, on veut la valeur non décalée. Ainsi les 8 bits de poids les plus faibles sont envoyés sur les entrées 0 des huit 74151 (traits noirs sur le schéma).
- quand la valeur de sélection des 74151 est à 001, on veut la valeur décalée d'un cran. Ainsi on oriente vers les secondes entrées des 74151 8 bits en démarrant cette fois avec le bit en deuxième position (traits pointillés marron sur le schéma).
- quand la valeur de sélection des 74151 est à 010 en binaire, soit 2, on veut la valeur décalée de deux crans. Ainsi on oriente vers les 3ème entrées des 74151 8 bits en démarrant cette fois avec le bit en troisième position (traits pointillés rouge sur le schéma).
- et ainsi de suite pour les 8 valeurs de décalage possibles.
(sur le schéma je me suis arrêté à 4 pour ne pas le rendre illisible
.
La valeur de sélection présentée à S
0, S
1 et S
2 quant à elle est mémorisé par le 74175 situé tout en haut sur le schéma Midway ou Taito.
Donc cet ensemble de composants permet au CPU d'obtenir rapidement une valeur 16 bits décalée de 1 à 8 bits d'un coup. Ceux qui connaissent un peu la programmation assembleur se demandent peut-être pourquoi une telle usine à gaz, alors qu'un microprocesseur possède des opérations de décalage... Hein, pourquoi alors ?
Et bien la plupart des microprocesseurs possèdent de telles instructions mais pas le 8080 d'Intel !
En effet, ce processeur est très mal pourvu : il peut effectuer des rotations au sein d'un registre (le bit qui sort d'un côté rentre de l'autre), mais pas de décalages !
Pour en finir avec cet exposé, je vous mets ici un exemple de décalage où j'ai matérialisé les bits du registre à décalage par des points noirs et blancs pour symboliser des pixels
.
Voilà pour la partie théorique. Qu'en est-il de mon dépannage ?
Pour rappel, mon diagnostique, confirmé par Spectro se situait que le verrouillage de la valeur à décaler. Plus haut je vous disais que par chance j'avais d'autre 74LS174 sous la main, et qu'en plus ceux d'origine étaient déjà sur support.
J'aurais dû aller me coucher mais je ne peux pas m'empêcher de tester tout de suite le remplacement des deux 74LS174 présumés coupables ! J'enlève de leur support les composants originaux, et je mets en place les neufs. Je mets sous tension et ...
Tadhaaa !...
Quoi ?
Rien, que de chi, ça merde toujours, cela n'a rien changé !
Merde alors, j'étais tellement sûr de mon coup !...
Cela ne m'a pas empêché de dormir, mais vous pouvez croire que j'y ai pensé quand même une partie de la nuit ! Je retournais mentalement le schéma dans tous les sens
.
À ce moment là, je n'avais pas encore étudié dans le détail la partie shifter exposée juste avant. Je me posais des questions, mais je ne comprenais pas comment cela aurait pu venir d'autre chose que des 74174.
J'ai commencé par examiner à l'analyseur logique ce qui arrivait sur les entrés des 74174 et 74175.
Mais mes observations étaient pour le moins incohérentes ! J'utilisais le signal du port 4 comme déclenchement de l'acquisition des données, mais curieusement cela se déclenchait dès le calcul du CRC des ROM !
Du coup j'ai détaillé le décodage des ports me demandant si cela ne venait pas de ça, et qu'on écrirait plus souvent qu'il ne faut dans les 74174 :
Rien de flagrant par ici...
Ces ports sont aussi utilisés pour déclencher tel ou tel bruitage sur la carte fille. J'ai donc relié le PCB à un ampli pour écouter le sound test de l'EPROM de test : ce n'est pas gagné !... Les sons démarrent dès la mise sous tension, et lors du sound test, des bruits indistincts qui ne varient pas vraiment d'une ligne à l'autre...
Là je commençais à patauger et ne plus trop savoir où chercher.
J'aurais bien aimé savoir si le problème venait de la carte fille ou de la carte mère. Vous pensez que j'aurais pu facilement pu tester avec la carte fille d'aje... Oui en théorie, sauf que son PCB ne fonctionne plus non plus depuis des mois !... C'est même ce qui m'a poussé à faire le capkit de mon alim, pensant que l'alim avait peut être flingué son PCB !
Je ne m'en étais pas venté, des fois qu'aje passe par ici !
Je me suis donc retroussé les manches, et j'ai aussi cherché à dépanner son PCB qui ne donnait plus aucun signe de vie : bouillie de pixels fixe à la mise sous tension. J'ai commencé par regarder le circuit de RESET : bingo, il est HS !
J'ai d'abord cru que c'était les 74161 qui ne comptait plus. Sauf qu'une fois dessoudé, il était en fait bon !... Ah, mais il y a le 7404 en F3 qui provoque le chargement de la valeur à décompter. J'observe ce signal : il est toujours à 0 et bloque les compteurs ! Je le dessoude, le remplace et nouveau test :
ÇA MARCHE ! Curieusement, le composant est pourtant donné comme bon par le testeur de composants ! (ne pas s'y fier à 100% !)
Ouf, gros soulagement, ce n'était que ça
! À noter que c'était le même composant qui était HS sur mon PCB... Comme il est relié au RESET de l'alim, peut-être que celle-ci tend à envoyer des pains dans la tronche à la carte fille à la mise sous tension ?...
Me voilà à nouveau avec un second PCB fonctionnel : bien pratique pour faire des comparaisons ! Je teste donc avec la carte fille d'aje : le test du shifter passe sans problème ! À noter toutefois que le sound test ne fonctionne pas vraiment mieux avec la carte fille d'aje. À creuser plus tard. Si je teste ma carte fille sur le PCB d'aje, le jeu se lance, mais affiche de grosses barres blanches en travers des envahisseurs.
Bon, c'est donc bien ma carte fille qui déconne, mais d'où ?!?!
Ne sachant à nouveau plus où chercher, vendredi dernier j'ai utilisé le comparateur de portes TTL HP prêté par mikebrandt. J'ai comparé plein de composants :
- 7442 en E3 => OK
- les 74174 en D5 et C5 => OK
- le 74175 en B5 => OK
- les 74151 en A4, A4', A5 et A5' => tous OK
- les 74153 en A3, B3, C3 et D3 => pareil, OK !...
Bon, et bien je n'y arrive pas, je vais me coucher
La nuit portant conseil, et ayant encore retourné le problème dans tous les sens, je me dis qu'il faut tracer le signal entre la carte mère et les 74174 de la carte fille. J'avais déjà vérifié minutieusement le connecteur, mais je le fais à nouveau : bah non, tout est bon. Ensuite je teste à l'ohmmètre la continuité entre le peigne de la carte fille et les 74174, tout particulièrement les bits de données D4 et D5. Mais ce n'est pas aisé car les via de ma carte fille sont un peu oxydés... Ah, ici l'ohmmètre ne bipe pas !
Je scrute le pcb à la loupe :
Je croyais avoir un piste coupée ici, mais non, ce n'était qu'une saleté sur la piste.
Je continue à regarder de très près toutes les pistes, quand je tombe sur ça :
Puis sur ça !
En fait, dans les deux cas, il s'agit de pastilles qui ont été abîmées par mon dessoudage des 74174 fait il y 5 mois !
Je refais les pistes en soudant un petit bout de fil de cuivre
Je mets sous tension pour une Nième fois, et... le test du shifter est cette fois bon !
Quand je pense que je me suis échiné durant des jours à chercher un composant coupable !...
L'erreur de débutant quoi !...
Je vous poste une petite vidéo de ce que cela donne avec les ROM du jeu :
[youtube=640,527]09gb6bNKIbI[/youtube]
On peut voir que tout n'est pas encore bon : il y a ces pixels parasites à l'écran à plusieurs endroits !... L'intervalle est régulier : tous les 4 envahisseurs. J'ai testé ma carte fille sur la carte mère d'aje : ça ne le fait pas. C'est donc un problème lié à ma carte mère. Cela aurait-il un lien avec mes RAM détectées une fois sur 4 comme mauvaises, cela ne m'étonnerait pas...
Un gros plan sur les parasites :
Si vous avez des pistes, je suis preneur, car là je ne sais pas trop où chercher pour l'instant (enfin si, je vais me pencher sur les buffers du bus d'adresse et du bus de donnée). Mais à part les remplacer par d'autres pour comparer, je ne saurais pas comment observer ce genre de défaillance à l'analyseur logique !
Merci de m'avoir lu jusqu'au bout (je sais, je suis toujours trop long...
)
A+