Bonsoir.
Après des semaines où je n'ai pas touché terre et une semaine d'absence, j'ai enfin pu reprendre le dépannage de ce PCB Sega Space Ship.
La dernière fois, je l'avais laissé dans l'état suivant :
- le watchdog aboie et reset périodiquement le PCB
- des commandes aléatoires sont envoyées dans la partie audio pendant quelques secondes
- aucune image
La 3e puce de RAM (qui était encore d'origine) était très fortement soupçonnée.
J'avais écris un compilateur de code assembleur pour pouvoir réaliser mon propre programme de test de RAM.
Ce programme devait être flashé dans une EPROM standard et j'aurais adapté cette EPROM à la place des 8 PROM Sega qui contiennent le jeu.
N'ayant pas encore d'effaceur d'EPROM, j'avais apporté chez mes parents tout mon stock d'EPROM pour les effacer sur l'insoleur UV (outil pour faire les circuits imprimés) de mon Pôpa.
Malheureusement, j'ai oublié chez mes parents tout ce stock d'EPROM, et je me retrouve donc pour quelques semaines sans aucun de ces composants, jusqu'à ma prochaine visite chez eux !
Donc en attendant, j'ai décidé de continuer quand même le dépannage du PCB avec la méthode "traditionnelle" :
- suppression de l'oscillateur à quartz du PCB
- mise en place d'un bouton poussoir pour faire du pas à pas
- flicage
au microscope à l'oscilloscope de toutes les instructions
Ayant plusieurs petits composants optiques "TIL311" qui m'ont été donnés par gc339, j'en ai profité pour les mettre en action :
5 composants TIL311 en action
- 2 d'entre eux affichent l'instruction en cours d'exécution ; c'est une information essentielle
- 3 autres affichent la valeur de l'accumulateur principal du PCB ; c'est une autre information majeure
Ainsi, je suis quitte de promener la sonde de l'oscillo à ces endroits.
J'ai 2 infos très importantes en un seul coup d'oeil. Le confort et le gain de temps sont nettement améliorés.
L'instruction en cours d'exécution
Pour le branchement, je ne me suis pas pris la tête comme la dernière fois.
Les composants TIL311 sont branchés directement sur les bus à observer.
J'ai vérifié à l'oscillo et leur présence n'affaiblit pas les niveaux TTL.
J'ai vérifié également qu'ils étaient tous correctement câblés et qu'ils indiquaient tous la valeur qu'ils doivent mesurer.
C'est reparti pour un débuggage électronique du PCB...
Parmi les premières instructions, le jeu lit une entrée et récupère la valeur opposée (le PCB est ainsi conçu) dans l'accumulateur :
L'entrée n'est pas activée, 0x001 est écrit dans l'accumulateur
L'instruction d'après demande un décalage de 1 bit vers la gauche de l'accumulateur.
Il passe donc comme prévu de la valeur 0x001 à 0x002.
C'est grosso-modo l'équivalent d'une multiplication par 2.
Décalage de 1 bit vers la gauche
L'instruction suivante est elle aussi un décalage de 1 bit vers la gauche.
L'accumulateur passe donc de 0x002 à 0x004 comme il est prévu :
2e décalage de 1 bit vers la gauche
Puis l'instruction d'après est encore un décalage vers la gauche (ça fait le 3e).
J'ai vérifié, et le code du jeu est bel et bien réalisé comme ça.
Sauf que là, c'est le drame :
Patatra !
L'accumulateur passe de 0x004 à 0x00
0 au lieu de 0x00
8. Pas glop...
En plus, le changement se fait sur un front
descendant de la clock.
D'après la doc technique du 74LS194 (le composant qui stocke la valeur de l'accumulateur
et qui réalise aussi les décalages binaires), le changement aurait dû se faire sur le front
montant de la clock, et j'aurai dû avoir 0x008 et non pas 0x000.
J'ai bien sûr vérifié à l'oscillo et le petit afficheur TIL311 affiche la valeur réelle (une erreur de câblage de ma part aurait pu m'enduire d'erreur et me faire croire à une erreur à l'insu de mon plein gré).
Demain matin, je ferai escale chez le crémier pour acheter un composant de remplacement...
À suivre...