私は 6502 プロセッサのエミュレートを「完了」しており、現在テスト段階にあります。私は初心者なので、この 1 つの問題にすでに数時間悩まされています。基本的には自作のROMと誰かが作成したログであるNESテストに従っています。メモリをステップスルーした後、すべてのレジスタにあるはずの値が示されています。アキュムレータの値が 0x40 で、最初の引数 (メモリ pc + 1) が 0x41 に等しい場合でも、即時の SBC 命令の後にオーバーフロー フラグがクリアされることをログが示している部分に行き詰まっています。つまり、0x40 ~ 0x41 は 0xFF、つまり -1 である必要があり、オーバーフローが発生したということですよね? オーバーフロー フラグに関する記事を読みましたが、また、値が大きすぎたり小さすぎたりして符号付きバイトに保持できない場合にオーバーフローが発生し、反対側にオーバーフローすることを示しています (つまり、2 8 ビットの正が 8 ビットの負になり、その逆も同様です)。だから私は間違った方法を考えていますか?これはログ行です:
CBC6 E9 41 SBC #$41 A:40 X:AA Y:73 P:E5
その次の行は、P レジスタが 0xA4 になったことを示しています。これは、キャリー フラグとオーバーフロー フラグの両方がクリアされたことを意味します。キャリー部分は取得できますが、オーバーフロー部分は取得できません。これは次の行です。
CBC8 20 62 F9 JSR $F962 A:FF X:AA Y:73 P:A4
ところで; その2行目は私の主張を証明しています.Aレジスタは実際に0xFFになり、符号付きバイトの0xFFは256 - 255 = -1に等しくなります....