Alors ça y est, j'ai trouvé ce qui provoquait le bug des 2 dernières épées, aussi bien sur ma rom decryptée que sur les version jap. Voilà comment j'ai procédé, en utilisant Mame qui est un outil absolument génial :
J'ai d'abord utilisé une rom hybride pour la rom IC90, avec comme
première moitié ma rom decryptée sans autofire, et comme seconde moitié,
la seconde moitié de la rom 90 de la Virtual Console (qui contient donc les DATA correctement décryptées).
En gros ça donne ça
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111111
1111111111111111
----------------------
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
64ko en tout
Je l'ai testée avec Mame, et là pas de problème, j'obtiens les bonnes épées au bon moment. Du coup j'ai refait 2 autres hybrides, schématisées ci dessous :
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
----------------------et---------------------
1111111111111111 0000000000000000
1111111111111111 0000000000000000
1111111111111111 0000000000000000
1111111111111111 0000000000000000
0000000000000000 1111111111111111
0000000000000000 1111111111111111
0000000000000000 1111111111111111
0000000000000000 1111111111111111
C'est celle de gauche qui fonctionne. Sur cette base, je fais deux nouvelles roms hybrides, en coupant encore en deux la partie issue de la rom VC
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
----------------------et---------------------
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 1111111111111111
1111111111111111 0000000000000000
1111111111111111 0000000000000000
0000000000000000 1111111111111111
0000000000000000 1111111111111111
et ainsi de suite jusqu'à ce que je me retrouve avec deux roms très peu différentes, dont une qui au moment crucial me donne toujours le gant à la con, et l'autre qui m'affiche le message comme quoi j'ai la bonne épée, mais rien n’apparaît et je reste bloqué dans la salle du boss (on sort de la salle du boss lorsqu'on récupère l'item qu'il nous donne après le combat). Je présume donc que j'ai coupé la partie fautive en deux pour me retrouver avec ce bug inédit. Mes deux roms
diffèrent de seulement 80 octects (128 en décimal), ce qui est peu au regard des
32 768 octets qui composent la ROM. Il m'a fallu 8 divisions par 2 pour en arriver là, ce qui prend un peu de temps, mais moins pour moi que d'éplucher tout le code. La source du problème est donc ici.
A partir de ce point, j'ai repris la cartographie de ma rom (un fichier assembleur généré par Mame sur lequel j'avais étiqueté les parties étant des OPcodes et les DATA) que j'avais établi en m'aidant de la cartographie générée par romconv (le petit prog de dégryptage que Runik avait trouvé sur un site japonais pour rappel). Il apparaît alors que dans les 80 octects (128) suspects, il y aurait une possibilité que des opérandes aient été mal identifiées et soient en fait des DATA. Celà concernait
C octets (12 en décimal).
En faisant l'hypothèse que ces C (12) octects sont bien des DATA, je les copie dans la seconde moitié de la rom 90 de la VC (celle avec les bonnes DATA donc), et je les mets à la place des octects correspondant dans ma rom de 32Ko, puis enfin j'ai testé directement sur le vrai hardware (plus rapide que de modifier une nouvelle fois les drivers de Mame, de regénérer un nouveau Mame et me faire tout le jeu jusqu'à l'endroit critique).
Et bah ça a fonctionné, j'ai pu récupérer les 2 dernières épées au bon moment, et finir le jeu comme il faut
Je n'ai plus qu'à faire la même correction aux 2 version japonaises décryptées avec romconv, et j'aurai enfin à ma disposition des roms utilisables sur le hardware original, sans modifier celui-ci, que ce soit en anglais ou en japonais.