Gamoover

Vous êtes nostalgiques des jeux vidéos de votre enfance ? Vous désirez acquérir, ou construire une borne d'arcade ? Vous trouverez ici les réponses a vos questions et une communauté de joueurs passionnés.

[WIP 90%] Borne vectorielle : Sega Space Ship

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

maldoror68


jujusl


f4brice

Bonsoir.

Voici une mise à jour de ce dépannage.

Je rappelle la méthodologie :

  • j'ai déconnecté la CLOCK d'origine, qui fonctionnait à environ 20 MHz
  • j'ai mis à la place un bouton poussoir qui fait avancer la CLOCK pas à pas
  • je dis bonjour à chaque instruction qui se présente
  • je contrôle son exécution

Cette méthodologie m'a déjà permis de résoudre 2 problèmes :

  • le composant P13 (chargé de stocker le n° de la page de RAM sélectionnée) était mort
  • la PROM PR-10 avait un problème de désélection

Je la trouve très efficace, mais particulièrement longue et laborieuse.
À chaque fois, je dois vérifier à l'oscillo l'instruction exécutée, la valeur de certains registres du CCPU, etc...

L'idée de gc339 d'utiliser des composants type TIL311 (voir ce message) serait un gain de temps et de confort très appréciable.

Jeudi dernier, lors de la rencontre entre lyonnais, gc339 m'a remis 6 composants TIL311 qu'il a pu dessouder de son stock de cartes diverses :


Composants TIL311 donnés par gc339

L'idée est de leur faire afficher en hexadécimal toute donnée clé que je jugerai utile :

  • l'adresse courante en ROM
  • l'instruction en cours d'exécution
  • les valeurs des 2 accumulateurs
  • la page RAM sélectionnée
  • etc...

Vu que je ne possède qu'un nombre limité de ces afficheurs TIL311, j'ai décidé de leur associer à chacun un composant 74LS157.
Ce composant est un quadruple sélectionneur 2 entrées / 1 sortie.
Il me permettra de choisir avec un bouton poussoir 2 sources de données différentes pour 1 afficheur TIL311.
Ainsi, chaque TIL311 pourra afficher 2 infos différentes. Un bouton poussoir me permet d'afficher l'une ou l'autre.

Voici donc le petit montage pour mettre en oeuvre le 1er TIL311...
J'utilise une chute de plaque à trous et pastilles cuivrées.
Le boîtier 74LS157 a 2 pattes dans le vide, mais c'est sans importance.


Montage à base de TIL311

J'ai choisi de lui faire afficher les 4 bits de poids fort de l'instruction en cours d'exécution. Ces 4 bits sont les plus importants, car ils définissent le type de l'instruction (une addition, la lecture d'une entrée, etc...)
Les 4 bits de poids faible seront affichés si j'appuie sur le bouton poussoir.

La technique de réalisation la plus adaptée aurait été incontestablement le wrapping.
Malheureusement, je ne suis pas (encore) équipé pour ça.
J'en ai fait quand j'étais étudiant et c'est d'une simplicité et d'une rapidité extraordinaire.
Pour aujourd'hui, j'ai donc dû me battre et souder le tout.

Et voilà !


Affichage des 4 bits de poids fort de la 1ère instruction

L'afficheur affiche un "4".
Ca tombe bien, c'est effectivement les 4 bits de poids fort de la 1ère instruction du jeu Space Wars (flèche rouge) :


Lorsque j'appuie sur le bouton poussoir, l'afficheur me montre alors les 4 bits de poids faible (flèche verte :"9") :


Affichage des 4 bits de poids faible de la 1ère instruction

Maintenant, simplement avec cet unique afficheur et son bouton poussoir, je peux faire du pas à pas beaucoup plus vite :

  • je vois quelle instruction est exécutée
  • je sais où j'en suis dans le code du jeu
  • je peux me concentrer sur sur ce que je veux investiguer

Cette fois, j'ai pu suivre une trentaine d'instructions sans perdre de temps ni me faire de noeuds au cerveau.
Je ne revérifie pas en détail toutes les instructions que j'ai déjà vues fonctionner.

AdresseCodeAssembleurStatutCommentaire
7EA8FLDP #FOKSélectionner la page de RAM n°15 ("F" en hexa)
7EB08LDA #800OKCharger l'accumulateur avec la constante 800 (en hexa)
7ECDFSTA FOKEnregistrer l'accumulateur à l'adresse RAM n°15 ("F" en hexa) de la page courante
7ED0ALDA #A00OKCharger l'accumulateur avec la constante A00 (en hexa)
7EEDESTA EOKEnregistrer l'accumulateur à l'adresse RAM n°14 ("E" en hexa) de la page courante
7EF8BLDP #BOKSélectionner la page de RAM n°11 ("B" en hexa)
7F020 A0  ADD #A0OKAjouter la constante A0 (en hexa) à l'accumulateur
7F2D6STA 6OKEnregistrer l'accumulateur à l'adresse RAM n°6 de la page courante
7F300CLROKEffacer l'accumulateur
7F4D3STA 3OKEnregistrer l'accumulateur à l'adresse RAM n°3 de la page courante
7F5D5STA 5OKEnregistrer l'accumulateur à l'adresse RAM n°5 de la page courante
7F621ADD #1OKAjouter la constante 1 à l'accumulateur
7F7D4STA 4OKEnregistrer l'accumulateur à l'adresse RAM n°4 de la page courante
7F895OUT 5OKMettre la sortie n°5 à la valeur opposée du bit de poids faible de l'accumulateur (il faut suivre, hein ?)
7F94C 27LDJ #72COKCharger le registre J (adresse de destination du prochain jump) avec la constante 72C (en hexa)
7FB58JMPOKSauter à l'adresse contenue dans le registre J
72CA6LDA 6KOCharger l'accumulateur avec le contenu en RAM de l'adresse n°6 dans la page courante

L'instruction de l'adresse 72C a foiré.
Si on suit bien :

  • en 7F2, l'accumulateur valait A00 (chargé en 7ED) + A0 (instruction en 7F0) = AA0
  • cette valeur AA0 a été écrite en RAM à l'emplacement B:6
  • en 72C, lorsque le programme veut relire cette adresse, j'ai constaté une erreur :

    • valeur qu'il aurait dû relire : AA0 (soit en binaire 101010100000)
    • valeur effectivement relue : A20 (soit en binaire 101000100000)
Le bit foireux correspond au bit de poid fort du composant de RAM M14.
Ce composant est donc bel est bien en panne comme je l'avais indiqué dans ce message.
À ce moment là, il était en L14, mais il a changé de place depuis que tous les boîtiers de RAM sont sur support.
J'ai aujourd'hui la preuve de sa panne, car j'ai vérifié à l'oscillo directement en sortie du composant.
Il ne s'agit pas d'une piste coupée ou autre farce.


La bonne nouvelle, c'est que dès que j'avais déterminé qu'au moins un composant de RAM était foireux, je m'étais mis en quête d'en trouver un autre.
Une personne de la liste de diffusion vectorlist s'était proposée pour m'en envoyer gratuitement.

Il y a donc en ce moment même 3 de ces composants de RAM en train de se diriger vers ma boîte à lettre.  =:))




Baddy

J'adore lire tes explications, c'est clair, accessible et pour moi c'est pareil que restaurer une vieille bagnole :). Tu t'adaptes à des technologies anciennes et fait preuve d'ingéniosité pour résoudre tes problèmes  ^-

Tout tes articles me motivent à me trouver une PCB en panne et à la réparer :)

gc339

Bonsoir.


  • Pinaillage : Le TIL311 éblouit trop sur la photo, il serait nécessaire d'intercaler un bout de plexiglass rouge pour limiter l'éblouissement et améliorer le contraste.
  • "Yeux de rat" : Le TIL 311 a deux points décimaux, le droite et le gauche, qui peuvent élégamment remplir cet office.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





f4brice

Citation de: gc339 le Samedi 30 Janvier 2010, 20:45:57 PM
Pinaillage : Le TIL311 éblouit trop sur la photo, il serait nécessaire d'intercaler un bout de plexiglass rouge pour limiter l'éblouissement et améliorer le contraste.

:D
La photo étant prise sans flash, la diffusion de la lumière du TIL311 est exagérée.

Citation de: gc339 le Samedi 30 Janvier 2010, 20:45:57 PM"Yeux de rat" : Le TIL 311 a deux points décimaux, le droite et le gauche, qui peuvent élégamment remplir cet office.

J'ai câblé le point décimal droit dans cet optique, mais il ne s'allume pas.
J'ai vérifié mon transistor NPN et sa polarisation qui sont tous les deux bons.
Peut-être ma résistance de 570 Ω entre le transistor et le TIL311 est trop forte ?

gc339

#102
Re ...

Mea culpa, j'aurais du penser Jeudi soir à te donner deux boîtiers mémoires MCM51L01.


Car même si ces RAM CMOS sont lentes (650ns), elles sont compatibles broche à broche et conviendraient pour remplacer la RAM défectueuse et ainsi poursuivre la recherche de panne en pas à pas ou en vitesse d'horloge réduite.
En tous cas, si tu tardes à recevoir les boîtiers RAM promis, je peux te les poster pour faire avancer le schmilblick.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





Blue Narc

Clap, Clap, Clap, bravo très intéressant ce wip, même si moi aussi je plane à 20.000 très souvent, en tout cas le détail et les explications claires permettent de d'accrocher quand même et c'est un beau morceau de borne qui vas être sauvée  ^-^ ^-^

zebassprophet

donc si j'ai bien tout compris
les composants de gc 339 ont été fabriqué la 23eme semaine de 1980?  =:))

gc339

Bonjour.

Citation de: zebassprophet le Dimanche 31 Janvier 2010, 11:52:22 AM
donc si j'ai bien tout compris
les composants de gc 339 ont été fabriqué la 23eme semaine de 1980?  =:))

Ce doit être tout à fait exact car les cartes, sur lesquelles j'ai récupérés ces mémoires, ont été fabriquées à cette époque la.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





speedsterharry

Super, l'esprit d'entraide ! J'adore ce WIP, même si ma compréhension des choses est assez sommaire.

f4brice

Bonsoir.
Good evening.

Voici une mise à jour de ce WIP.
Here is a WIP (Work In Progress) update.

Toutes les phrases ce message sont traduites en anglais, vous allez comprendre pourquoi...
All the sentences of this message are translated to english, you'll understand why...

Il y a quelques jours, j'ai été contacté par une personne très sympa : S.H qui habite en Angleterre.
Some days ago, I was contacted by a very friendly person : S.H. who lives in England
Il y a eu un échange rapide d'e-mails, signe qu'il était derrière son ordi en même temps que moi.
There was a rapid exchange of e-mails, sign that he was behind his computer at the same time as me.

J'ai fini par lui proposer de l'appeler au téléphone, et nous avons passé plus d'une heure à discuter (il a free, il a tout compris).
I finally ask him to call on the phone, and we spent over an hour to chat (untranslatable advertising slogan of a french internet operator).

Nous avons beaucoup parlé d'arcade, de jeux vectoriels, et du jeu Space Wars.
We chatted about arcade, vector games, and the Space Wars game.
S. m'a proposé de me donner un PCB original de chez Cinematronics non testé, ainsi qu'une doc qu'il avait en double.
S. offered to give me an untested Cinematronics original PCB, and an owner manual that he had duplicated.
Bien sûr j'ai accepté et je l'ai remercié autant que mon vocabulaire anglais me le permettait.
Of course I agreed and thanked him as much as my English vocabulary would allow.

En fin de semaine dernière, le facteur m'a apporté ça :
At the end of last week, the postman brought me this :






Comme l'a dit speedsterharry, il y a non seulement un esprit d'entraide, mais en plus il est national et international:-*
As stated speedsterharry, there is not only a spirit of mutual assistance, but also it is national and international !

Un examen du PCB indique qu'il est sans aucun doute en panne. Il manque 3 circuits intégrés standards.
A check of the PCB shows it is for sure faulty. 3 standard chips are missing.
Bizarrement, ils n'ont pas été dessoudés, mais toutes leurs broches ont été coupées.
Strangely, they were not un-soldered, but all their pins were cut.
L'idée est que je récupère, si nécessaire et possible, les composants spécifiques tels que les PROMS du CPU.
The idea is that I get, if necessary and possible, the specific components such as CPU PROMS.
J'ai la PROM D14 sur le PCB SEGA qui est louche.
D14 PROM on the SEGA PCB is suspicious.
Si elle est en panne, peut-être celle de ce PCB pourra la remplacer.
If it's dead, maybe that one on this PCB may replace it.


La carte étant très sale, il est nécessaire de lui donner le bain.
The PCB is very dirty, it is necessary to bathe (<- not sure of this word !).


Un peu d'eau tiède...
A little warm water...


Même pas peur !
No fear !


C'était nécessaire...
It was necessary ...


Rincage
Rinse


Égouttage
Draining


Et voilà !
Et voilà !


Un grand merci à S.H. pour le don de cette carte et de la documentation originales.
A big thank you to SH for donating this PCB and the original documentation.

À suivre : prélèvement de composants sur cette carte pour test sur le PCB SEGA.
Next: removal of components on this board for testing on the SEGA PCB.

Aganyte


jujusl

Trop de la balle !
Too much of the bullet ! (silly French expression ;D translated just for fun)

aganim

Une fois la première retaper tu va même pouvoir t'en faire une de rechange  ^-

Blue Narc

Citation de: aganim le Mardi 02 Février 2010, 06:33:56 AM
Une fois la première retaper tu va même pouvoir t'en faire une de rechange  ^-


Qui sait, peut être même qu'à son tour avec se qu'il en restera il pourra aider une autre personne plus tard qui en sauvera une lui aussi  :ang:

Bravo pour ce don et l'entraide  ^-