Gamoover

[move]Vous aimez la série Ricky la belle vie, Julio Iglésias ou l'émission Kohlanta ? Alors soyez les bienvenus sur Gamoover ! [/move]

[WIP 90%] Borne vectorielle : Sega Space Ship

Démarré par f4brice, Jeudi 31 Décembre 2009, 16:57:03 PM

f4brice

Citation de: gc339 le Mardi 23 Février 2010, 22:48:38 PM
Précision pour les tests : il ne faut pas tester les lignes mémoire individuellement les unes après les autres mais faire le test en globalité
[couic sur la description précise de l'algo de test]

Bonjour.

Merci pour cette information.  ^-

Je partais mal pour mon algo de test car il ne sollicitait qu'une seule cellule mémoire à la fois, sans se préoccuper des autres.
Un problème lié au bus d'adresse n'aurait pas pu être détecté, si tant est que le problème se manifeste à l'identique entre les phases de lecture et d'écriture.
Je n'avais écrit que 25% du programme, donc je vais le reprendre à 0.
De même, je n'avais pas utilisé le fait que les 3 puces mémoires de 256 x 4 bits chacunes sont indépendantes.
L'algo s'en trouvera simplifié.

Le CCPU ne permet d'accéder à la RAM qu'à travers la notion de page.
Les 256 mots de 3 x 4 bits sont organisés en 16 pages de 16 mots de 3 x 4 bits.
Il n'est possible de sélectionner qu'une seule page à la fois (en écrivant dans le registre P, qui ne peut pas être relu).
D'ailleur, il n'existe qu'une et une unique instruction pour écrire dans le registre P :

  • LDP #n
Il n'est possible d'utiliser qu'une constante "n" pour cette instruction, donc définie au moment de l'écriture du programme.
Impossible d'incrémenter, décrémenter P, de copier un accumulateur dans P, etc...
Le jeu d'instructions du CCPU est particulièrement réduit.
Il y a 2 accumulateurs de 12 bits chacun. Tous les autres registres ont une utilité spécifique et ne peuvent être qu'écrits, jamais lu.
Par exemple, le registre "J" contient l'adresse du prochain JUMP réalisé.
Plusieurs instructions permettent de l'écrire, mais aucune ne peut le relire.
Il est lu en interne lorsque justement un JUMP est effectué.
De même, le registre "I" (registre d'indirection mémoire) peut être écrit grâce à plusieurs instructions, mais il n'est jamais lisible.
Il est utilisé en interne pour toutes les opération mémoires qui peuvent utiliser l'indirection :

  • STA [ I ]
  • ADD [ I ]
  • ...

À suivre...

f4brice

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 à 0x000 au lieu de 0x008. 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...

maldoror68

c'est toujours aussi passionant a suivre, et surtout détaillé  :-* :-* ^-

the_vidy

Ca a l'air trop facile pour toi d'acheter des composants. Je trouve ça trop galere, il n'y a plus de magasin d'electronique par chez moi et faire une commande electronique diffusion coute plus cher en transport (en plus je me goure souvent dans les ref).
Recherche.... une vitre de jeutel

Iro

Citation de: the_vidy le Jeudi 25 Mars 2010, 16:17:25 PM
Ca a l'air trop facile pour toi d'acheter des composants de dépanner.
... tout cours !!
Je suis admiratif devant ce travail !!!
HS : Gti Club Minifiesta est sorti sur WII. Sympa mais pas transcendant.
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

f4brice

#165
Citation de: the_vidy le Jeudi 25 Mars 2010, 16:17:25 PM
Ca a l'air trop facile pour toi d'acheter des composants. Je trouve ça trop galere, il n'y a plus de magasin d'electronique par chez moi et faire une commande electronique diffusion coute plus cher en transport (en plus je me goure souvent dans les ref).

Sur Besançon, il y a 2 magasins d'électroniques assez bien fournis.
EDIT : http://www.microprocessor-fr.com/ et http://www.reboul.fr/

Ce matin, je suis passé dans le magasin habituel (situé à 2 min de mon boulot, je passe devant tous les jours).
Ils n'avaient pas de 74LS194 référencés (pourtant ils ont des trucs largement plus exotiques).
J'ai passé un coup de fil au 2e magasin qui l'avait en référence et en stock.

C'est vrai que c'est extrêmement pratique de ne pas à avoir à tout commander par correspondance.

f4brice

Bonsoir.

Mise à jour de ce WIP.

Hier soir, j'avais déterminé avec certitude qu'un composant était bel et bien grillé.
À midi, je suis passé chez le 2e crémier et j'ai donc acheté 3 circuits intégrés 74LS194 (1 pour remplacement, 2 pour avoir un peu de stock).

Ce soir, j'ai donc dessoudé celui d'origine qui avait pris sa retraite trop tôt à mon goût :


Toi, tu sors !

J'ai déjà constaté à l'oscillo sa panne ; mon flasheur-testeur confirme mon diagnostic :


Ca môrche pô !

Je mets en place (sans utiliser de support) son remplaçant, fraichement acheté :


Bienvenue au p'tit nouveau

Ensuite, il me faut confirmer que le p'tit nouveau a un avenir prometteur.
Je déroule donc à nouveau les instructions assembleur du jeu en pas à pas.
Cette fois, lorsqu'il s'agit de faire le 3e décalage binaire, le nouveau composant assure :


Well done, Jim !

Je continue de suivre l'exécution de nombreuses instructions.
Tout semble correct, il est temps de déconnecter mon bouton poussoir de pas à pas, et de remettre en service le quartz de la clock d'origine...


Back to 19,968 MHz (ok, c'est divisé derrière)

Les afficheurs TIL311 affichent "8" car l'œil n'a pas le temps de voir les changements (persistance rétinienne) si toutefois les afficheurs ont bien le temps de commuter, ce qui n'est pas sûr. Bref, c'est normal.

Un petit coup d'oscillo sur le signal "RESET" du watchdog, et... c'est le calme plat !
Le PCB n'est plus reseté par le watchdog !
:-)= :-)= :-)= :-)=

Je jette un oeil à l'une des sorties qui pilote l'écran vectoriel :


Miam !

Ça, c'est très très (...) très bon signe, ça veut dire que le PCB envoie des ordres de tracé vectoriel à l'écran !  :-)=

Je teste donc le PCB dans la borne, et...





.




.




.




.




.




.





Ça maaaaaaaaaaarche !


Mon PCB Sega Space Ship est donc réparé pour la 2e fois ! :-)=  :-*  8)


zebassprophet


AsPiC

Good Job ^-^

Sinon pas tout jeune le remplaçant :D


Sir Kayne

C'est le genre de post qui me redonne du courage pour reparer mes pcb défectueux (en particulier une turbo outrun qui me reste à dépanner)  8)

En tout cas bravo pour la réparation, mais aussi pour les explications, ce n'est peux être pas limpides pour tout le monde, mais en tous cas ca donne une certaine démarche logique à suivre (pas bête le coup des TIL) ^-
Cherche : pédale d'accélération d'une Outrun Upright, Une Racingcab (outrunner ou Daytona), pcb RaveRacer, PCB Missile Command (he oui), une Spacegun et puis un flipper Raven (je l'aurais un jour...)
"Ne me dite pas que je ne peux pas faire quelque chose!" J.Locke

f4brice

Citation de: Sir Kayne le Jeudi 25 Mars 2010, 22:39:35 PM
pas bête le coup des TIL

L'idée des TIL311 est de gc339<:)
C'est lui aussi qui m'a donné 6 de ces composants !  :-*

jujusl


HerosSuperMan

yeahhh encore une super action des dieux de l'électronique  ^-^
(on peut dire "des" pour une personne ???  :D)

et mdr pour la signature de ton pseudo
« Matériel inconnu ? Touche à ton cul ! »
^-
Mes Wip, mes RT... la vie quoi ^^
Mes recherches\échanges (bornes, PCB, pièces ...)
Recherche .. non..rien rien rien..le problème c'est que l'on fini toujours par trouver... >:D

speedsterharry

F4brice, l'homme qui avait le pouvoir de vie et de mort sur les PCBs  ^-

maldoror68


f4brice

Citation de: speedsterharry le Vendredi 26 Mars 2010, 15:54:45 PM
F4brice, l'homme qui avait le pouvoir de vie et de mort sur les PCBs  ^-

Citation de: maldoror68 le Vendredi 26 Mars 2010, 20:05:17 PM
f4brice, le chuck norris des pcb  ^-^ :D

Ne vous emballez pas, les poulettes !
Cette réparation-là était assez simple :

  • problème constaté dès les 1ères instructions du jeu
  • 1 seul composant était malade

En plus, je n'ai même pas fini d'écrire le programme de test mémoire dont je pensais avoir besoin...

:?  ;)