Gamoover

[move]Pour vous aussi la chipo ne sera jamais qu'un bootleg de merguez (c)sushy18 ? Alors soyez les bienvenus sur Gamoover ! [/move]

[WIP] Atari Breakout de 1976

Démarré par f4brice, Dimanche 05 Septembre 2010, 13:55:36 PM

maldoror68

c'est vrai... qui nous désosse un minitel=?=(après les manettes dreamcast ça va nous changer  :D)

(j'ai édité mon post funkycochise)

AsPiC


gc339

Citation de: maldoror68 le Mercredi 08 Septembre 2010, 13:03:51 PM
c'est vrai... qui nous désosse un minitel=?=(après les manettes dreamcast ça va nous changer  :D)

Le problème c'est qu'il y a eu plusieurs constructeurs de MNTL. C'est une tâche fastidieuse que de le faire pour tous, à moins d'ouvrir un wip spécialement pour ça, chacun pourrait alors exposer la marche à suivre pour le MNTL de la marque qu'il possède.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard






ɐɹqoƆ‾ɥƃᴉH


maldoror68


f4brice

Bonsoir.

Voici une mise à jour de ce WIP.

La réparation de ce PCB Breakout n'est pas très facile, à cause de la carte additionnelle non documentée, et la manie qu'ont certains composants en état de marche de se petit-suicider...

Reprenons depuis le début...

Déjà, la première chose à faire est de sortir le PCB de la borne.
Le dépannage ne pourra se faire qu'à mon bureau, pour une simple question de confort pour ma modeste personne malade et fiévreuse et surtout de repos indispensable dont j'ai grandement besoin.

Il semble que le PCB a déjà eu un gros coup de chaud...
On voit nettement qu'une des broches du connecteur a tellement chauffé qu'elle en a fait fondre le plastique :


Je débranche le connecteur.
On voit bien la piste brûlée sur le PCB.
La personne qui a fait la "réparation" a coupé les fils du connecteur et les a soudés directement sur le PCB.


Je dessoude les fils en question et le PCB est maintenant libre :


Le PCB comporte quelques pistes volontairement coupées et une tripatouillée de fils soudés un peu partout.
Tous les fils vont à une petite carte additionnelle située en bas à gauche. C'est un sacré bordel.

Il y a 2 fils, dont l'extrémité est dénudée et étamée, qui sont en l'air :


Tous les deux vont bien sur la petite carte, mais l'un d'entre eux n'est relié à rien du tout.
Surprenant. Autant ne pas le souder du tout, après tout !
Pour éviter les mauvaises blagues, j'isole l'extrémité libre du fil avec un petit bout de gaîne thermo-rétractable.

En revanche, le 2e fil semble avoir une utilité : il est relié à une entrée d'un 74151.
Où était-il soudé sur le grand PCB ? Mystère. Je l'isole aussi en attendant de déterminer où il allait.

Sachant que j'aurai à fouiner avec l'oscillo sous la petite carte, je la dévisse simplement.
Une petite surprise apparaît :


Il n'y a aucun doute : ce PCB est déjà passé tout près de chez moi !  :-*

Pour pouvoir dépanner le PCB, je souhaite utiliser l'alim de mon banc de test.
Or elle ne sort que des tensions classiques pour des PCB plus récents.

Un examen du schéma du PCB Atari me permet de trouver une solution simple.
En effet, le PCB dispose d'un redresseur & régulateur interne pour générer son propre +5V.
La tension redressée non régulée va aussi alimenter l'ampli audio (un LM380 que je connais bien).

Une 2e alim non redressée sert à illuminer les 2 × 2 ampoules situées dans les boutons "START 1P et "START 2P".
Les ampoules sont commandées par des thyristors.

Donc, je peux très bien alimenter directement le PCB en +5V si je l'injecte en aval du régulateur intégré.
Ne sachant pas trop comment ce dernier réagirait, je décide de le dessouder pour le protéger :


Il semble qu'il a bien chauffé lui aussi. Notez (flèche rouge) la piste bouffée et le PCB brûlé.
C'est une panne courante (et aux conséquences grave) sur ces vieux PCB.
Ils sont équipés de composants TTL 74xxx qui consomment un max.
Tout le courant absorbé passe obligatoirement par le connecteur et les pistes sous le connecteur.
Avec le temps, la petite broche appuie moins fort, la piste s'oxyde. Le courant passe moins bien. La zone de contact devient davantage résistive.
Par effet Joule, ça chauffe. En général, ça finit par s'emballer d'un seul coup. Ca crame. Dans tous les cas, le PCB s'arrête (il n'est plus alimenté).
Selon l'environnement et les matériaux, le micro-incendie s'arrête là ou se propage à toute la borne (miam, du bois !).

Je soude directement sous le PCB 2 gros fils qui vont l'alimenter en +5V.
Il n'y aura pas de son pendant le dépannage. Je verrai plus tard si la partie audio a un problème.

Voici le PCB confortablement installé sur mon bureau, prêt à être dépanné :


Alors, on va déjà s'attaquer au principal problème : le problème de synchro horizontale.
Ce genre de panne n'est généralement pas bien grave à diagnostiquer.
Il y a un oscillateur, des diviseurs de fréquence et quelques portes logiques pour faire beau...

Finalement, je constate qu'il n'y a aucun problème de synchro.
C'est juste que le PCB génère des fréquences un peu exotiques :

  • fréquence ligne : 15,9 kHz
  • fréquence trame : 63 Hz

Je démonte ma petite TV chinoise et je trouve le potard qui règle le H-SYNC.
J'arrive immédaitement à avoir une image stable :


J'ai le paddle présent, le score du joueur 1 qui clignote. Les briques et les murs sont absents.
Quand j'appuie sur le bouton "service", la balle apparaît. Elle a une trajectoire louche.
En plus, elle ne rembondit même pas sur la raquette...
Notez la déformation de l'image (ça fait une vague) au niveau de la flèche rouge, je vous en reparlerai plus tard !


À suivre : le gras du dépannage du PCB !

maldoror68

ce soir c'est service des "grands brulés" chez f4brice  :D

ne pense tu pas que la "fréquence éxotique" de la pcb est due a son coté défectueux ? =?=
en effet, si j'ai bien saisi, le TTL est une logique très "effet domino" non ? la doc atari donne une fréquence pour le moniteur ?

(ce n'est qu'une supposition de gros noob hein  :))

f4brice

Citation de: maldoror68 le Mercredi 08 Septembre 2010, 20:47:48 PMne pense tu pas que la "fréquence éxotique" de la pcb est due a son coté défectueux ?

Non, le PCB génère simplement un signal proche du NTSC. (15,750 kHz / 60 Hz) ;)

Citation de: maldoror68 le Mercredi 08 Septembre 2010, 20:47:48 PMle TTL est une logique très "effet domino" non ?

Je ne sais pas ce que tu appelles "effet domino" quand il est question de TTL.
S'il s'agit de pannes en cascade, je ne suis pas d'accord.
Un PCB TTL est beaucoup plus robuste qu'un PCB avec processeur, ROM, RAM...

Citation de: maldoror68 le Mercredi 08 Septembre 2010, 20:47:48 PMla doc atari donne une fréquence pour le moniteur ?

Je n'ai trouvé aucune information à ce sujet dans la doc.
Vu que c'est l'écran d'origne, je doute qu'Atari Europe monte d'origine des moniteurs incompatibles avec les PCB fournis par Atari USA.

maldoror68

en même temps tu m'a répondu... atari usa = ntsc .

merki ;)

Bal




f4brice

Bonsoir.

Suite de ce WIP.

La dernière fois, le PCB du jeu était prêt pour son dépannage.

Alors, déjà, voici ce qui ne fonctionne pas de manière flagrante :


  • absence du mur de briques
  • trajectoire foireuse de la balle
  • le jeu ne crédite pas
  • le jeu ne se met pas en "attract mode" mais attend systématiquement un appui sur le bouton "service" (= envoyer la balle)
  • il manque les murs verticaux et le mur tout en haut
  • sûrement plein d'autres trucs pas encore identifiés...

Tout d'abord, je trouve pourquoi le jeu est en mode "attente de service".
Le signal correspondant est généré par un 7474 (double bascule D) qui est mort :


Après changement, je constate du mieux. Le PCB est par défaut en "attract mode".
Il n'attend plus un appui sur le bouton "service".

Maintenant, voyons le problème de crédit.
J'ai beau simuler l'insertion d'un crédit, rien ne se passe.
Pourtant le PCB croit qu'il y a plusieurs crédits d'insérés...
Je vérifie tous les étages successifs entre les 2 entrées de crédit du PCB et jusqu'au composant qui génère l'impulsion "COIN".
Tout va bien.

Le problème est simplement dû au compteur interne de crédits.
Non seulement il ne compte plus, mais il reste figé à une valeur particulière malgré un reset envoyé par le PCB.
Je change le composant :


On voit que ça a chauffé dur sous le composant...

Maintenant, je vais m'attaquer au problème de murs et briques absents.
Là je dois dire que j'en ai bavé à comprendre ce qui se passait...

Les 3 murs sont générés à partir de 3 signaux :



  • "RH SIDE" (mur de droite
  • "LH SIDE" (mur de gauche)
  • "TOP BOUND" (limite supérieure)

Tout ça est combiné avec ce qui sort de la petite RAM de 256 × 1 bit (BRICK DISPLAY) pour générer le signal "PLAYFIELD" :


Là où c'est totalement incompréhensible, c'est que je vois tout plein de tops sur le signal "PLAYFIELD", et que ça ne fait rien afficher sur la TV.

En effet, "PLAYFIELD" va directement sur le circuit sommateur vidéo, donc il devrait apporter directement sa contribution à l'image :


J'ai même accusé la petite résistance R51 de 3,9 kΩ, mais elle était bonne...

Comment "PLAYFIELD" peut-il avoir plein de tops sans que la TV n'affiche quelque chose ?

Finalement, j'ai opté pour une méthode radicale.
J'ai temporairement dessoudé la broche de la résistance R51, du coté du signal "PLAYFIELD".
Déjà, chose surprenant : la vague au niveau du score du 2e joueur (voir un de mes messages précédents) a ainsi disparu...
Ensuite, j'ai injecté avec un petit bout de fil sur la résistance R51 les signaux des murs.
Quand j'injecte "LH SIDE", le mur de gauche apparait comme par magie. Même chose avec "RH SIDE".
Par contre, quand j'injecte "TOP BOUND", non seulement je n'ai rien à l'écran, mais en plus la vague au niveau du score revient...

En examinant en détail comment "TOP BOUND" est généré, je découvre enfin le problème :


Le signal est tout pas beau, ce qui fait que "TOP BOUND" n'a pas du tout la synchro prévue avec les différents signaux de synchro horizontale (8H, 16H, 32H, 64H et 128H).
Je pense qu'il interfère même avec le signal de synchro horizontale destiné au moniteur.
C'est pour ça qu'on ne voit rien : l'affichage se fait probablement durant les retours lignes du spot.

Je change le composant fautif :


Yeah ! J'ai maintenant les murs qui sont présents, et le mur de briques aussi.
Le mur de briques change de forme régulièrement...


Par contre, je constate maintenant que la balle ne rebondit pas en bas.
Dès qu'elle touche le trait du bas, elle... s'arrête.
Je regarde donc comment est fait le test de collision entre la balle et le mur du bas.
Finalement, je trouve le coupable. C'est encore un 7474 ! Je le change :


Maintenant, j'ai un PCB qui démarre en "attract mode", crédite, démarre une partie, et envoie la balle.
Je constate maintenant 2 nouveaux problèmes :

  • les briques sont indestructibles !!!
  • la partie ne s'arrête jamais : j'ai autant de balles que je veux...


À suivre...

funkycochise

CitationMaintenant, j'ai un PCB qui démarre en "attract mode", crédite, démarre une partie, et envoie la balle.
Je constate maintenant 2 nouveaux problèmes :
    * les briques sont indestructibles !!!
    * la partie ne s'arrête jamais : j'ai autant de balles que je veux...
joli cheat mode :)

maldoror68

Citation de: funkycochise le Samedi 11 Septembre 2010, 07:20:57 AM
joli cheat mode :)

bien vu! tu as la version de l'AM Show de de 1975 maintenant  :D

je  :fleche:

f4brice

#46
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

Wapata

Comment ce fait il que tu ai autant de portes logiques mortes ? Aucune n'a eu la chance de faire fusible pour protéger les autres ?
Une demi-douzaine de cramées, c'est déjà beaucoup non ?