[DCMOTO] Slap Fight

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Carl, Papy.G, fneck

__sam__
Messages : 6359
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

[DCMOTO] Slap Fight

Message par __sam__ »

Dans le temps j'avais fais quelques tests de SlapFight avec la version 20201108 de DCMOTO et ca marchait bien.. et puis je vois qu'il y a une nouvelle version de ce matin 20210513... et là, le même jeu ne se lance plus (SAP/FD peu importe la provenance c'est pareil). Cela affiche "SYNTAXE E" (rror probablement) dans la page du démarrage.

De ce que je vois ca semble être le code de déplombage du jeu qui provoque ca: reset à chaud de la machine, retour au basic, déverrouillage de la protection basic dans le débuggeur puis un simple "LIST ." pour pointer l'instruction avec l'erreur. Il n'y a pas vraiment d'erreur de syntaxe. C'est un effet de bord d'un des exec précédents.

J'essaye avec les différentes versions de DCMOTO experimental que j'aie sous le coude.. et je constate que ca déconnait au moins depuis la dcmoto_20201209, mais pas avant la dcmoto_20201108. Il ya donc eu une modification entre ces deux dates (Novembre dernier donc) qui a cassé le crack de Slap Flight.

En faisant tourner les deux versions en parallèle à partir d'un point d'arrêt sur $9C41 (point d'entrée du crack), je vois que la version qui marche bloque "un certain temps" (environ 75120 cycles si je mets un point d'arrêt entre 9C5F et 9C61) sur le

Code : Tout sélectionner

9C5F 3CFF       CWAI   #$FF               20
9C61 BD9CFA     JSR    $9CFA               8
Alors que la version qui ne marche pas passe au travers en 20 cycles, mais que surtout elle ne saute pas au dessus du CWAI mais aboutit en

Code : Tout sélectionner

9C60 FFBD9C     STU    $BD9C               6
9C63 FA7A9D     ORB    $7A9D               5
9C66 9426       ANDA   <$26                4
9C68 10B6       ???                       ??
:idea: Arghh ==> Le compteur programme n'a avancé que de 1 octet au lieu de deux, ce qui fait qu'il part en vrille et plante à partir de là.

Je pense que la table utilisée pour le nombre d'octets de CWAI dans l'émulation CPU est cassée, et peut-être d'autres choses car en principe CWAI attends bien plus que ses 20 cycles propres. Il aurait fallu avoir une interruption pile au début du CWAI, mais c'est rare (ce truc est utilisé par le hacker pour attendre environ 1/10 sec (interruption timer) avec peu d'octets).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 14417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO] Slap Fight

Message par Daniel »

@__sam__ : Non seulement tu détectes le bug, mais en plus tu trouves la cause. Je n'ai plus rien à faire. Merci !

Dans les notes de version je trouve ceci :
Version 2020.12.09
Correction d'une erreur dans l'émulation de l'instruction CWAI des processeurs 6809 et 6309.
Alors j'ai sûrement corrigé une erreur, mais j'en ai ajouté une autre. Elle est fatale, mais pas compliquée, une simple étourderie.
L'instruction CWAI comporte deux octets et boucle en attente d'interruption. Pour boucler il faut faire PC -= 2, et j'avais écrit PC--. Honte à moi !

C'est corrigé dans la version 20210513, je l'ai mise à jour, il suffit de la recharger. Comme le fichier n'a pas changé de nom il est possible, s'il est en cache, de récupérer l'ancienne version et pas la nouvelle. Dans ce cas il faut vider le cache du navigateur et recommencer.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6359
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO] Slap Fight

Message par __sam__ »

En fait j'ai découvert le bug en préparant une série d'articles sur une étude que j'avais débutée sur ce jeu.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre