Bonsoir.
J'ai profité de cette fin de dimanche pour faire un peu de
reverse-engineering sur le PCB de Bubble Bobble, pour essayer d'aider au mieux kaneda56 à réparer son PCB.
En effet, je dispose depuis plusieurs mois d'un analyseur logique assez performant, et c'est l'outil tout à fait adapté pour ce genre de travail.
C'est un appareil USB, nécessitant un logiciel sous Zindoze (malheureusement) pour l'exploiter.
EDIT du 21/02/2013: il fonctionne aussi sous Linux via VirtualBox !
Voici le plan de travail :
L'appareil dispose de 2 connecteurs de 10 broches.
Chaque connecteur dispose de sa masse et de 9 voies d'acquisition.
Mon analyseur dispose donc de 18 voies, et sait échantillonner à 200 MHz sur les 18 voies en même temps.
C'est un
DigiView™ DV3200.
Sur la photo, mon écran a un problème de synchro.
Ca ne vient pas du PCB (testé sur 2 bornes), mais de mon "jamma to péritel".
Le signal de synchro doit se perdre quelque part, pourtant j'ai bien vérifié mon montage et je me suis basé sur un plan fiable (
lien).
Pas très grave pour le moment, et ce n'est pas le sujet du jour.
Lorsque tous les signaux à mesurer sont situés dans la même zone, c'est vite le bazar :
Heureusement, les micro grip-fils fournis avec l'appareil sont d'excellente qualité et peuvent aller s'accrocher à une patte de circuit intégré très facilement.
Voilà la zone qui nous intéresse :
En 1, c'est un signal très important : /VBL (Vertical BLanking, soit "extinction verticale"):
- il passe à 0 lorsque le spot a fini d'afficher l'image, et remonte pour se placer en haut, pour afficher l'image suivante
- il passe à 1 lorsque cette remontée est finie et que l'image va donc s'afficher
Ce signal sert généralement à éteindre le spot du moniteur.
En 2 et 3, ce sont les signaux envoyés sur les composants propriétaires Taito PC040DA (5).
Je les ai baptisés plus loin "Vert_BR10" et "Horiz_BR11".
En 4, j'ai vérifié que "6M" est bien une clock à 6 MHz.
/BLACK (ou /B_ACK) s'est révélé toujours à 1 durant toutes mes mesures.
Je n'ai pas cherché à regarder s'il était à 0 au moment du boot du jeu, pour éviter l'affichage temporaire de bouille de pixels à l'écran.
J'ai placé le reste des entrées sur les 3 groupes de 4 bits des composants PC040DA.
Les bits CO9, CO10 et CO11 ont systématiquement été mesurés à 0.
Pour le moment, leur utilité reste inconnue, mais je pense qu'il s'agit quand même d'un bit de poids faible pour chaque couleur, inexploitée par le logiciel du jeu.
Voici la mesure.
La synchro de l'analyseur est réglée sur un front montant du signal /VBL :
En 1, nous avons le front montant du signal VBL, source du déclenchement de l'analyseur.
En 2, j'observe que le signal envoyé sur la broche 10 des composants PC040DA passe à l'état haut lorsque l'image commence à être affichée.
Le signal envoyé sur la broche 11 des composants PC040DA passe à l'état haut lorsque chaque ligne est affichée.
En 3, les composantes R/V/B sont toutes à 0xF, c'est à dire du blanc.
Effectivement, si on regarde avec précision la mire du jeu Bubble Bobble, la 1ère ligne est un trait blanc continu.
En 4, si on zoome, on voit une altermance de "beaucoup de noir", "un peu de blanc".
Ca correspond bien à la 2e ligne de la mire, du fait de son quadrillage.
- Je sais maintenant que le signal sur BR10 passe à l'état haut lorsque l'image est affichée
- Je sais maintenant que le signal sur BR11 passe à l'état haut lorsque chaque ligne est affichée,
la 1ère transition se fait avec un léger retard par rapport à BR10.
Il est possible de faire des mesures précises...
Voici la mire du jeu, au pixel près, obtenue en faisait un screenshot du jeu lancé sous Mame :
En ouvrant cette image avec un éditeur d'image, j'observe que :
- les blocs rouges sont affichés durant les lignes 49 à 80
- les blocs verts sont affichés durant les lignes 81 à 112
- les blocs bleus sont affichés durant les lignes 113 à 144
- les blocs blanc/gris sont affichés durant les lignes 145 à 176
Si je peux demander à mon analyseur de se déclencher sur le scénario "complexe" suivant...
- attendre un front montant sur BR10 (= début d'affichage de l'image)
- puis ensuite attendre 49 front montants sur BR11 (= début d'affichage de la 49e ligne)
... alors ça veut dire que le PCB sera en train d'afficher justement la 49e ligne de la mire, soit la 1ère ligne où l'on a du rouge !
La ligne d'avant est un trait blanc continu.
Voici ledit réglage de déclenchement :
C'est assez facile à réaliser.
- je créé un 1er "match" qui est "front montant sur BR10"
- je créé un 2e "match" qui est "front montant sur BR11"
- le 1er match est inséré en 1ère position dans un séquenceur, et le compteur de répétition est réglé à 1 (match à constater 1 fois)
- le 2e match est inséré en 2e position dans le séquenceur, et le compteur de répétition est réglé à 49 (match à constater 49 fois)
Lorsque cette séquence est observée => l'analyseur se déclenche.
Pour info, l'analyseur travaille en permanence.
Lorsque les condition de déclenchement sont réalisées, il note "simplement" l'instant.
Je l'ai réglé pour qu'il continue l'enregistrement sur 50% de son buffer
après le déclenchement.
Ainsi, je sais ce qu'il s'est passé
avant et
après le déclenchement.
C'est très pratique quand ce que l'on doit observer s'est passé
avant la condition de déclenchement : ça fait un peu "machine à remonter dans le temps", même si ce n'est pas nécessaire pour les travaux de ce jour.
Voici la 49e ligne de la mire.
J'ai effacé avec un logiciel de dessin toutes les autres, pour bien la montrer :
Voici la mesure :
Le trait vertical au centre est l'instant de déclenchement.
Voici ce que l'on observe :
- ligne n°48 : un trait blanc horizontal sur toute la largeur
- trait blanc qui précède le 1er bloc de rouge
- 1er bloc de rouge (le plus clair)
- 2e bloc de rouge
- 3e bloc de rouge
- 4e bloc de rouge (le plus foncé)
- trait blanc qui suit le dernier bloc de rouge
- ligne n°50 : quadrillage qui précède le 1er bloc de rouge
En réglant le déclenchement de l'analyseur sur la 81e ligne, je peux voir la transition du rouge au vert, qui se produit à la 81° ligne de la mire :
Voici la mesure :
- ligne n°80, la dernière avec du rouge ; on voit les 4 blocs de rouge (composantes vertes et bleues à 0)
- ligne n°81, la 1ère avec du vert ; on voit les 4 blocs de verts (composants rouges et bleues à 0)
Voilà, c'est tout pour ce soir.
Maintenant, le pilotage de ces cochonneries de PC040DA est mieux connu.
Nous avons donc plus d'infos pour dépanner le PCB de kaneda56.
![Cheesy :D](http://www.gamoover.net/Forums/Smileys/guntar/cheesy.gif)