Le concept est donc une sorte de roman photo où je décris une réparation de carte d'arcade, photos à l'appui. Ca me permet d'expliquer un peu plus de détails que ce que je ferais dans le cadre d'une vidéo, et il y a quand même une vidéo à la fin.
J'essaie en général de faire ça pendant la réparation, mais dans ce cas précis, j'ai terminé la réparation ce week-end.
Il s'agit d'une mission un peu particulière, dans la mesure où j'ai décidé d'offrir ce jeu à un ami pour son anniversaire, et cet anniversaire est dans 2 semaines. Résultat: j'avais le droit à 2 week-ends pour en venir à bout.

Petite présentation de la chose: un PCB bootleg de Pang, vendu comme un Super Pang (j'ai eu droit à une remise sur un slot MVS HS pour compenser). Il n'y a donc naturellement aucune documentation technique, ni aucun plan à disposition. Et quand on branche le PCB, on a un joyeux Click of death, qui ne sent pas forcément très bon.
Le click of death, comme j'ai eu l'occasion de l'expliquer quelque fois, c'est typique d'une carte d'arcade...
Lors du déroulement d'un jeu, le code du jeu accède à une zone précise de la mémoire à intervalles réguliers. S'il ne le fait pas, la carte considère que le jeu et planté et le reboote. Au passage, on se prend potentiellement un reset du circuit audio, qui balance une impulsion sur le haut-parleur, et bim, click de la mort (parce que la carte est morte, et ça fait clic).
La carte dispose de 3 oscillateurs: 2 sont basés sur des résonateurs à quarts de 12MHz (Z80 principal) et 10MHz (Z80 de la section audio / synchèse de fréquence Yamaha), et un sur un résonateur céramique de 400kHz pour la puce OKI qui joue les échantillons ADPCM des effets sonores.
Côté section audio, quelque chose me dit qu'il y a un souci...

Pour rappel ou info, un quartz ne suffit pas à générer un signal alternatif. Il n'est là que pour fixer la fréquence d'un circuit oscillant en entrant en résonance à une fréquence précise qui lui est propre.
Il ne faut pas confondre les quartz et les oscillateurs à quartz, composants parallélépipédiques à 4 broches qu'on alimente et qui sortent un signal sinusoïdal. Ces composants contiennent en fait un circuit oscillant et un résonateur à quartz.
Bref, je remplace le quartz pété par un nouveau quartz à 10MHz, et je sonde une broche du quartz...

Et j'obtiens un signal carrément faiblard, et à 30MHz au lieu de 10!

L'oscillation est créée par ce quadruple inverseur. L'idée est d'utiliser des portes inverseuses, et d'en brancher un nombre impair en boucle. Ici, on n'en utilise qu'une seule: on prend son entrée, et on la branche sur sa sortie.
Résultat: elle reçoit un oui, elle se répond non, donc elle se répond oui, donc elle se répond non, ...
En mettant des condensateurs et des résistances dans la boucle, on peut jouer sur la constante de temps de la rétroaction, et en ajoutant un résonateur à quartz, on peut fixer précisément la fréquence d'oscillation.

J'essaie de faire varier la fréquence d'oscillation en faisant varier la capacité (j'ajoute un condendateur en parallèle)...

Et magie: je retombe sur mon signal à 10MHz, bien plus fort que celui que j'observais tout-à-l'heure.

Je peux dégager l'ancien condensateur, et le remplacer par un beau condensateur tout neuf.
Du balai!

Mais tout ça, c'était il y a 6 mois. Voyant que je n'avais toujours pas d'image, je suis passé à autre chose et j'ai réparé une brouette de slots MVS.
Seulement là, il faut vraiment que je m'y remette et que je fasse marcher cette carte, et vite!
Sur une carte d'arcade post milieu des années 80, le plus souvent, la logique de la carte, pilotée par le CPU, est dissociée de la logique d'affichage. Avant ça, il arrivait que le CPU gère lui-même le rafraîchissement de l'écran, au grand dam des performances.
Pour avoir un affichage, même moche, la première étape est d'avoir un signal de synchro vidéo à 15kHz. Si l'écran reçoit ce signal, il affichera quelque chose.
Je pars donc du fil de synchro sur le connecteur JAMMA...

Je suis la synchro jusqu'à une porte logique (une porte NAND si je me souviens bien), mon multimètre m'en assure.

J'observe quelque chose qui ressemble fortement à un signal de synchro composite (horizontale + verticale), et je ne comprends donc pas trop pourquoi je n'ai pas d'affichage...

Jusqu'à ce que je mesure la fréquence du signal. Un magnifique signal de 20Hz, soit le tiers de la fréquence attendue par l'écran.

Au passage, si je teste les entrées de la porte logique à l'oscilloscope...

Je retrouve ici le signal de synchro horizontale, déclenchée à chaque ligne affichée (c'est le signal qui est normalement à 15kHz)...

Et juste à côté, le signal de synchro verticale, déclenché à chaque début de rafraîchissement (c'est le signal à 60Hz)...

Je retrouve sur le signal HSync une période de 195us environ au lieu des 63us attendues, soit une fréquence de 5kHz au lieu de 15!

Il faut se rendre à l'évidence, le rapport de 3 n'est pas anodin, il correspond à l'écart entre les 30MHz que j'observais au départ et les 10MHz que j'ai fièrement "retrouvés" à force de bricolage.
Etant donné qu'il s'est passé plusieurs mois depuis l'opération, inutile de fouiller les poubelles, l'ancien condensateur est parti.
Heureusement, grâce à la photo, je lis une valeur et je remplace le condensateur par 3 fois plus petit que le précédent..

Mon circuit résone toujours à 10MHz, mais quand je perturbe la sortie de ma porte inverseuse avec mes pinces conductrices...

Je retrouve un semblant de signal à 15kHz et j'ai un affichage (pété, mais j'ai un affichage, alors je suis content, mais à moitié parce que je ne compte pas souder mes pinces sur la puce).

A force de redémarrages, comble de l'excitation, il arrive même que le circuit oscille directement à la bonne fréquence, et que j'obtienne une image!
Bon, l'image est un peu rouge, mais ça montre que le reste de la carte fonctionne à peu près!
On dirait donc que la logique de la carte se synchronise avec la logique d'affichage (ou avec la processeur audio?) au démarrage, et que quand elle n'y arrive pas, elle ne démarre pas.

Pour stabiliser le signal, j'ai déjà expérimenté par le passé (sur Thunder Hoop) le placement d'un condensateur en parallèle sur le résonateur. Le problème, c'est que ça change la fréquence de résonance. Et là, on a un CPU et un signal vidéo en face, alors on a besoin de justesse.
Qu'à celà ne tienne, je tente le coup avec une résistance de 10kOhms en parallèle sur le quartz..
Le signal sort à présent quasi toujours à 30MHz et j'ai un affichage (cassé).

Mais quasi, ce n'est pas assez. Pour réduire encore un peu plus les erreurs, après m'être aperçu que l'une des deux résistances marquées 330Ohms n'était pas dans sa plage de tolérance, je les remplace toutes les deux.

Hop, on soude.

Et voilà, on a un affichage à tous les coups, youpi, on va pouvoir passer aux choses sérieuses!

Etant donné qu'il arrivait à la carte de booter correctement de temps en temps, je me dis que le reset est peut-être relâché trop vite, avant que les horloges se soient stabilisées.
Petite explication.. Le RESET, c'est un signal qui tient les diverses puces (et notamment les microprocesseurs) en état de stase. Une fois le signal levé, les puces démarrent toutes en même temps.
Lors de la mise sous tension des cartes, il faut un petit moment (quelques millisecondes) pour que l'alimentation se stabilise, que les condensateurs de découplage de chargent (ça va vite), et que les horloges se mettent en résonance à leur fréquence propre.
Le boulot du circuit de reset, c'est d'attendre un moment avant de lâcher les chevaux.
Après la mise sous tension, si je fais un RESET à la main en mettant à la masse la broche de reset du Z80 principal...

La carte démarre à chaque fois! On dirait qu'on a un souci avec le circuit de reset.

Ces circuits sont plus ou moins élaborés, parfois avec des puces dédiées à la gestion de l'alimentation, qui genèrent un signal lorsque la tention atteint un niveau spécifique, par exemple.
Une chose est à peu près constante dans tout ça: on trouve quasiment tout le temps au moins un condensateur dont la charge définit le temps d'attente.
Si on fait abstraction des condensateurs de la section audio et d'éventuels condensateurs de découplage de l'alimentation, on tombe assez vite sur le condensateur du circuit de reset (quand il y en a un). Et on trouve donc le circuit de reset pas loin.
Ici, je le trouve dans un coin de la carte.
Au passage, la technique du bricoleur avec Paint.Net et des calques...
- Je prends une photo de la carte
- J'ajoute un calque pour coller le schéma des puces
- J'ajoute un calque pour mettre du blanc derrière parce que sinon on ne voit rien7
- J'ajoute un calque pour mettre les fils que j'ai réussi à suivre sur la carte
- J'ajoute un calque pour les annotations
Ca fait des calques, mais c'est assez pratique.
On voit ici une porte NAND trigger de Schmitt, dont les entrées sont reliées ensemble. Ce qui nous fait une porte NOT avec un trigger de Schmitt.
Le trigger de Schmitt permet d'avoir une tension de bascule d'un état à l'autre qui dépend du sens dans lequel l'entrée varie. Concrètement, ça permet d'avoir deux seuils distincts et d'éviter les oscillations / rebonds indésirables.
Le signal de RESET à l'état bas: le CPU reste bloqué tant que le signal est à 0V. Il démarre quand on est à 5V (environ).
Ici, ça devient un peu tordu dans le timing:
- La première porte, en bas à gauche, a une entrée à 0V au démarrage
- Sa sortie est donc à 5V.
- Sa sortie est raccordée à l'entrée de la porte suivante via un condensateur, qui va se charger. Au départ, elle a donc une tension de 0V en entrée.
- Et elle a donc une sortie à 5V
- Le CPU démarre donc d'entrée de jeu
- Je ne sais pas à quelle vitesse le condensateur de droite se charge, alors je vais faire abstraction pour le moment. Ca va dépendre de la résistance interne de la porte de gauche, alors autant dire que je n'en sais rien et que ça dépend des portes. Mais le fait est que quand il sera chargé, le RESET passera à 0V et le CPU sera bloqué.
- Le condensateur de gauche est chargé via la résistance du haut, jusqu'à atteindre le seuil de bascule du trigger
- La porte de gauche va alors basculer à l'état bas (0V) et décharger le condensateur de droite
- La porte de droite va alors attendre que le seul inférieur de son trigger soit atteint (le condensateur se décharge), et détecter un état bas en entrée
- Elle bascule alors à l'état haut, le RESET avec elle, et le CPU peut partir.
Pour faire simple, on a un état haut au démarrage, puis un état bas, puis un état haut. Concrètement, on une impulsion de reset, donc la durée dépend du condensateur de droite, et le délai de celui de gauche.

Le condensateur de gauche est étiqueté à 47uF et mesure à 30 => il est mort.
Je le remplace par un condensateur de 100uF pour augmenter le délai de déclenchement du reset et laisser le temps à mon bricolage des 30MHz de se stabiliser.
Je change aussi le second, qui a une sale tête, et je lui remets sa version de base, à savoir 22uF.

Résultat: ça boote à tous les coups!
(au passage, la charge du premier condensateur en rouge, le reset en bleu, je n'ai que 2 sondes, alors on ne voit pas l'enchaînement, dommage)

La suite très vite!























