Debugger PinMame

Mame sous XP, dos ou linux ?
Répondre
izidor
Dept: 49
Rech/Achete: 0 flip
Messages : 583
Enregistré le : 12/04/2018
Niveau : Initié
Pro / revendeur : non
Localisation : Angers

Debugger PinMame

Message par izidor » lun. 06 12, 2021 12:11

Bonjour,
Est-ce qu'il existe une version de " PinMame " avec un debugger et une fenêtre pour visualiser la ram d'un sys80 et tracer du code ? Un peu comme Snes9x Geiger's pour ceux qui connaissent et sur la photo suivante une version pour WPC:
Capture.JPG
Capture.JPG (156.92 Kio) Vu 1383 fois
J'ai bien testé la version " PinMAME_210_MAMEDebug " mais rien n'a faire, quand j'appuie sur F5 pour basculer en mode debug rien ne s'affiche! Même en ligne de commande "CMD" avec l'option -debug
Merci par avance de votre réponse.
Flipper actuel : Congo, Flash Gordon, Black Knight, Nine Ball
RECHERCHE : Flipper Sorcerer Williams quelque soit l'état .

izidor
Dept: 49
Rech/Achete: 0 flip
Messages : 583
Enregistré le : 12/04/2018
Niveau : Initié
Pro / revendeur : non
Localisation : Angers

Re: Debugger PinMame

Message par izidor » lun. 06 12, 2021 17:52

J'ai trouvé!
Version 1.6, exécuter en ligne de commande:
"c:\monDossier\PinMAME_VC2008md.exe c:\monDossier\roms\rom.zip --debug"
Mon erreur était de mettre l'option debug avec un seul tiret du 6.
J'ai bien la console de "debug" qui s'affiche a l’exécution.
Pour exécuter la rom, c'est la commande G, puis on peut rebasculer sur la console de débogage
en pressant la touche " ² ".
Flipper actuel : Congo, Flash Gordon, Black Knight, Nine Ball
RECHERCHE : Flipper Sorcerer Williams quelque soit l'état .

Avatar du membre
brice
Dept: 81
Collec Perso: 3 flips
Rech/Achete: 6 flips
accepte les visites de sa Gameroom
Messages : 68
Enregistré le : 29/06/2018
Niveau : Initié
Pro / revendeur : non
Localisation : Mazamet
Contact :

Re: Debugger PinMame

Message par brice » ven. 21 01, 2022 11:44

Bonjour,
il y a la 2.2 avec option debug dispo aussi si besoin : https://sourceforge.net/projects/pinmam ... nmame/2.2/
Je fais quelques tests pour analyser un jeu mais pas si simple a bien interpréter toutes les infos.
https://retrohappygames.fr/

izidor
Dept: 49
Rech/Achete: 0 flip
Messages : 583
Enregistré le : 12/04/2018
Niveau : Initié
Pro / revendeur : non
Localisation : Angers

Re: Debugger PinMame

Message par izidor » lun. 27 06, 2022 20:23

Merci ! (mieux vaut tard que jamais.) Sinon,
Je fais quelques tests pour analyser un jeu mais pas si simple a bien interpréter toutes les infos.
Oui j’avoue !! Pas simple :wink:
Ce qu'il faut c'est être sûr d'avoir à faire à du code, car là comme ça devant un éditeur hexadécimal on ne peut pas faire la différence entre le code pur(instructions) et les données.

Par exemple,
Lors de mon analyse de la rom de ma carte SoundSpeech MA-216 à base de processeur 6502, on sait que le pointeur qui donne l'adresse (l'offset) du code d'un évènement IRQ est stocker sur 2 octets en fin de rom.

Le pointeur IRQ en fin de rom:
Capture.JPG
C'est pas fini! Il faut maintenant retrancher $F000, ce qui donne F56D - F000 = 56D.
Cette fois c'est bon!
La routine IRQ :
Capture.JPG
Maintenant on sait que l'on est en début de code et non sur des données, on peut le vérifier facilement.
Un IRQ est un évènement qui peut subvenir à tout moment, avant de le traiter il faut sauvegarder
les données en cours et notamment les registres A,Y et X.
On devrait donc trouver la sous-routine qui s'occupe de ça en tout début de code.
Comme ceci :
Capture.JPG
De même, en fin de code les valeur des registres A, Y et X doivent être restituées avant de sortir de évènement IRQ.
On peut le vérifier comme ceci :
Capture.JPG

Pour aller plus loin,
Voici mon analyse pour trouver dans la rom les fameux messages vocaux de nos chers flipper en version parlant
avec carte MA-216.
C'est juste de l'analyse que je partage !

Au début je me suis dit, " Tiens cela serait sympa de personnaliser mon flipper en modifiant ses messages vocaux ".
Puis finalement non, même si cela reste possible :wink:

Le SC-01 de chez Votrax qui équipe la carte MA-216 est le chip qui permet de traiter les messages vocaux.
Cette puce est un vocaliser assez complexe, il faut juste savoir qu'elle fonctionne avec des codes dit " Phonème "
dont leurs valeur hexadécimal vont de 00 à 3F.
Voici une partie du dictionnaire SC-01 (les valeurs hexa dans la colonne verte) :
Capture2.JPG
Capture2.JPG (130.43 Kio) Vu 547 fois
Entrons maintenant dans le vif du sujet, comment trouver les messages dans la rom !? :roll:
Je vais vous montrez, pour cela je vais prendre exemple pour le message " VOLCANO " du flipper du même nom.

Premier chose à faire, avec le mode debugg de PinMame on va mettre l’exécution du code en pause
pendant la diffusion du message.
Voici ce que cela donne :
Capture.JPG
Capture.JPG (168.91 Kio) Vu 545 fois
La colonne de gauche correspond au code assembleur du 6502 et à droite les données en ram.

En regardant la colonne du code assembleur une ligne est intéressante :
Capture.JPG
Capture.JPG (169.24 Kio) Vu 543 fois
L'instruction LDA($51), y est intéressant car on voit que à l'adresse ram $51 il y à une valeur et le Y nous indique
probablement que c'est une boucle.
Voici à quoi correspond cette instruction : Charge dans le registre A la valeur qui se trouve à l'adresse $51 en
lui ajoutant la valeur de Y.
A = valeur de l'adresse $51 + Y.

Regardons maintenant ce qui se trouve à l'adresse $51 :
Capture.JPG
Capture.JPG (168.99 Kio) Vu 543 fois
On trouve la valeur AD, suivit de F7.
Peut être un pointeur 16 bits !?
On va appliquer à ces deux octets la méthode du pointeur IRQ décrit plus haut.
On a donc ADF7.
On inverse F7AD.
On retranche $F000.
Ce qui nous donne 7AD.

Allons voire ce que l'on peut trouver à cette adresse dans la rom :
Capture.JPG
Alors, on trouve la valeur 03, suivit de 8F, 30 ect...
Pour savoir si nous somme sur le code du message, on va temporairement modifier les valeurs 03, 8F, 30 en 04, 90, 31
et voire si cela change.
Et bien dans ce cas, après cette modification temporaire, notre message est bien déformé !
Remettons les valeurs d'origines et poursuivons l'analyse.

Comment savoir si c'est le début du code du message et ou s'arrête t'il :?):
Jetons à nouveaux un œil sur le code assembleur et plus particulièrement sur ces lignes :
Capture.JPG
Capture.JPG (169.21 Kio) Vu 539 fois
Pour commencer l'instruction LDY #$00 met la valeur du registre Y à 0.
Reprenons l'instruction LDA ($51) +Y
On comprend qu'en début de boucle/cycle on a LDA ($51) + Y = LDA AD + 0 = LDA #$03.
Donc A = 03.
On peut en déduire que 03 est bien le début du message.

Maintenant la fin du message, continuons avec CMP #$FF
Cette instruction compare la valeur de A à FF. Intéressant, peut-être la condition de fin de message !?.
Retournons voir dans la rom :
Capture1.JPG
Quelques octets plus loin on trouve la valeur FF. Faisons une modification temporaire en plaçant une valeur FF
quelques octets avant celle-ci.
Effectivement, dans ce cas après exécution cela tronque le message . Remettons la valeur d'origine !
On peut en déduire que le message commence à 03 et s'arrête à FF donc de 7AD à 7B8.
Voilà la chaine complète du message " VOLCANO " :
Capture1.JPG
La suite du code, BEQ #F2AA, en gros cette instruction sert à faire un saut dans le code à l'adresse $F2AA si
A == FF. (drapeau d'égalité positionné à 1 par l'instruction précédente CMP #$FF si A == FF sinon le drapeau est à 0).
Juste un point la dessus // En fait l'instruction CMP est une simple soustraction entre A et FF. Si le résultat est 0
alors le drapeau d'égalité est positionné à 1 sinon l'égalité est faux et le drapeau est positionné à 0.


On poursuit avec l'instruction suivante, EOR #$3F.

Alors c'est quoi EOR #$3F :roll:
Cette instruction permet de faire un " ou binaire exclusif " sur la valeur du registre A.
//Table de vérité du Ou exclusif.
A B logique
0 0 0
1 0 1
1 1 0
0 1 1


Donc par exemple :
3F en binaire 00111111
03 en binaire 00000011
Résultat EOR 00111100

On peut constater que les 6 derniers bits sont inversés. Mais pourquoi inversé les 6 derniers bits !?
A vrai dire je ne sais pas trop mais peut être une hypothèse :
Tout d'abord le dictionnaire de phonème s'arrête à 3F donc en binaire 00111111, les deux premiers bit de poids
fort ne prendrons jamais 1.
Dans le circuit de la carte MA-216, juste avant que les bits du codes phonème soient envoyés au SC-01 il y
a un autre composant, un 74LS05 porte "non" logique (appelez aussi porte inverse).
Si il y à un 1 en entrée, ce sera un 0 en sortie et si il y a un 0 entrée, se sera un 1 en sortie.
On peut voire qu'il ne prend seulement que 6 bits.
Capture4.JPG
On peut donc dire que les bits inversés par l'instruction EOR, sont restitués par le 74ls05.
Autre chose, 3F d’après le dictionnaire Votrax du SC-01 veut dire " STOP ".
Capture3.JPG
Capture3.JPG (64.25 Kio) Vu 521 fois
Ce code " 3F " est utilisé pour dire au SC-01 que c'est la fin du message.
Souvenez-vous de cette ligne : BEQ #F2AA
Cette instruction veut dire : Poursuivre l’exécution/fait un saut à l'adresse F2AA si A == FF.
Voyons ce qu'on trouve à F2AA :
Capture.JPG
Capture.JPG (168.89 Kio) Vu 519 fois
On peut y voire la ligne suivante :
EOR #$FF En d'autre terme, fait un ou exclusif entre la valeur de A et FF.
Donc à ce moment de l’exécution A = FF .
A = en binaire 11111111
FF = en binaire 11111111
Résultat EOR 00000000
cette instruction met la valeur de A à 0.

Maintenant L'instruction STA $2000, c'est l'instruction qui sert à envoyer le code phonème vers le sc-01.
Donc on envoie la valeur de A vers l'adresse $2000. Comme A vaut 0 en envoie donc 8 bits à 0
Souvenez-vous, le 74ls05, l’inverseur ! il va inverser les bits donc le SC-01 va recevoir les 6bits de poids faible 111111
ce qui donne 3F en hexadécimal donc "STOP". Fin du message!

L'organisation des données dans la rom :
Capture.JPG
En gros un pointeur pointe vers un autre pointeur qui lui pointe sur le message.
Pointeur1 ---> pointeur2 ---> Message.
Pour modifier le message il faudrait déjà le déplacer dans la rom (sur la plage $0000 à $FFFF) pour gagner de la place,
puis recalculer le pointeur 1 et 2 ainsi que le checksum.


A suivre...
Flipper actuel : Congo, Flash Gordon, Black Knight, Nine Ball
RECHERCHE : Flipper Sorcerer Williams quelque soit l'état .

Répondre