Zlika / theodore

Libretro core for Thomson MO/TO emulation / Core Libretro pour l'émulation des ordinateurs Thomson MO/TO.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Crash sur chargement d'un fichier .fd

bhrousseau opened this issue · comments

Je génère mes propres fichiers .fd avec secteur de boot pour TO8
Le fichier en pièce jointe fonctionne parfaitement sous DCMOTO ou sur mon TO8 avec SDDRIVE.
Par contre avec theodore, l'application crash.
Le secteur de boot contient un code de fondu palette vers la couleur noire.
Ce code ne semble pas exécuté et theodore plante.
Il y a donc un problème au chargement du secteur de boot en $6200.
TEST.zip

Je précise que le fichier FD ne comporte pas de FAT.

Merci d'avance !

Bonjour,
Merci pour ce retour, je regarde ça dès que possible.

Il s'agit visiblement d'une corruption mémoire dans la gestion de l'affichage vidéo. Je ne sais pas si j'aurai le temps de regarder ça plus en détail ce week-end, mais je vais essayer de corriger le problème dès que possible.
Ce programme fait quelque chose de particulier / atypique qui expliquerait que le plantage ne se produise pas sur tous les autres jeux que j'ai pu testés ? (par exemple, utilisation d'un mode vidéo peu courant qui ne serait pas géré correctement par l'émulateur...)

Je ne vois pas la pièce jointe.
Oui l'adresse $6200 est bien exécutée. Puis ensuite très vite je vois qu'il va "moissonner" en mémoire, le Program Counter arrivant dans une zone qui visiblement ne contient pas de données exécutables (et c'est sans doute la cause racine du crash qui suit) :

624A 8B02     ADDA  #$02           2 A=E8 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C8
624C B7627E   STA   $627E          5 A=EA B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C8
624F A6A4     LDA   ,Y             4 A=EA B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C8
6251 B7E7DA   STA   $E7DA          5 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6254 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6256 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6258 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
625A 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
625C 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
625E 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6260 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6262 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6264 0000     NEG   /$00           6 A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
6266 87       ???                  ? A=00 B=00 X=62E7 Y=62DB U=627F S=9FFA DP=60 CC=C4
Break on illegal opcode

Le code du boot et du programme de palette c'est ceux-ci : https://github.com/bhrousseau/bento8/tree/master/Bento8/ASM ?

J'ai corrigé le problème, qui venait du fait que si on écrit une valeur supérieure à 15 dans le registre E7BD (palette) cela provoquait un débordement dans un tableau interne de l'émulateur. Donc maintenant je ne garde que les bits de poids faibles quand on écrit dans ce registre. Par contre je ne sais pas pourquoi ton programme écrit des valeurs supérieures à 15 dans ce registre. Sur un vrai TO8 ainsi que dans dcmoto j'imagine que les bits de poids forts sont ignorés, ce qui n'était pas fait dans theodore. Maintenant c'est fait, mais peut être qu'il y a quand même un petit bug dans ton programme, car pour moi ça n'a pas de sens d'écrire une valeur supérieure à 15.