GameBoy 模拟器中的相对跳转没有跳转到应有的位置

问题描述 投票:0回答:1

我正在 C# 上开发 GameBoy 模拟器,并使用 Blarrgg 的测试 ROM 对其进行测试(来自此处的 cpu_instrs)。我正在单独进行测试,现在我正在使用

07-jr
jp
call
ret
rst
。我正在将我的结果与 bgb 的调试器进行比较。现在,当我到达
0209
(运行操作码
0x20 (JR NZ)
)时,bgb 跳转到
0x206
,但我的模拟器跳转到
0x306

这是我当前该指令的代码:

if (Processor.GetZeroFlag() == 0)
{
    byte jumpOffset = Processor.ReadNextByte();
    ushort targetAddr = (ushort)(Processor.GetPC() + 2 + jumpOffset);

    Processor.SetPC(targetAddr);
    Processor.FinishedIntruction(0, 8, 2);
    break;
}
else
{
    Console.WriteLine("Not taking the branch");
    Processor.FinishedIntruction(2, 8, 2);
    break;
}

ReadNextByte()
从内存返回下一个字节(从PC + 1读取),在本例中是FB(根据bgb,这是正确的)。据我了解,我必须将 FB 添加到当前 PC 以及指令的长度 (2),但这样做我最终会得到 306,正如我已经解释的那样。

这里是否有我遗漏的东西——我的代码中有一些我看不到的错误?

c# emulation gameboy
1个回答
1
投票
byte jumpOffset = Processor.ReadNextByte();

应该是

sbyte
给出 -5 而不是 0xFB。

© www.soinside.com 2019 - 2024. All rights reserved.