Je pense être tombé sur un bug
En examinant une portion de code linéaire (sans saut dedans ou dehors), par exemple:
, et en comptant le nb de passage dans chacune, je m'attendais à avoir la même chose partout: passer en 68D6 nous fait aussi exécuter 68D7, D8, D9. Or j'obtiens ceci:
$ grep -e '^68D6' dcmoto_trace.txt |wc -l
9961
$ grep -e '^68D7' dcmoto_trace.txt |wc -l
9773
$ grep -e '^68D8' dcmoto_trace.txt |wc -l
9779
$ grep -e '^68D9' dcmoto_trace.txt |wc -l
9771[/code]C'est à dire qu'on a pas du tout les mêmes valeurs. C'est tout à fait illogique!
En analysant plus en détail la trace, je suis tombé sur ceci:
Code : Tout sélectionner
68D4 33CB LEAU D,U 8 52697 D=FE73 X=9C46 Y=43C0 U=ABC7 S=9FF1 DP=00 CC=E9 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
68D6 53 COMB 2 52705 D=FE73 X=9C46 Y=43C0 U=AA3A S=9FF1 DP=00 CC=E9 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
FAC1 86E7 LDA #$E7 2 52724 D=FE73 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=00 CC=F9 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
FAC3 1F8B TFR A,DP 6 52726 D=E773 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=00 CC=F9 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
...
765 2A02 BPL $6769 3 52840 D=C011 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=67 CC=D8 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
6767 CB11 ADDB #$11 2 52843 D=C011 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=67 CC=D8 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
6769 F7E7CD STB $E7CD 5 52845 D=C022 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=67 CC=D0 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
676C B6E7C6 LDA $E7C6 5 52850 D=C022 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=67 CC=D0 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
676F 3B RTI 16/4 52855 D=0122 X=9C46 Y=43C0 U=AA3A S=9FE5 DP=67 CC=D0 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
68D6 53 COMB 2 52871 D=FE73 X=9C46 Y=43C0 U=AA3A S=9FF1 DP=00 CC=E9 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
68D7 43 COMA 2 52873 D=FE8C X=9C46 Y=43C0 U=AA3A S=9FF1 DP=00 CC=E9 | Banques: SYST=0 ROM=0 RAM=1F MEMO=0 VIDEO=1
Ce qu'il se passe c'est qu'une interruption se produit durant le COMB en 68D6.. Bon oui c'est normal (le programme utilise les interruptions), mais.. mais à la sortie de l'interruption (RTI) la trace réaffiche le COMB, qui est donc compté deux fois là où le COMA qui suit ne l'est qu'une fois avec mes stats (wc -l) plus haut.
Alors est-ce normal d'avoir cette instruction dédoublée dans la trace ? (je ne pense pas que l'émulateur ait exécuté deux fois le COMB, le résultat aurait été catastrophique et j'aurais vu des anomales bien plus graves je pense.)