【问题标题】:Relative Jump in GameBoy emulator isn't jumping to where it shouldGameBoy 模拟器中的相对跳转没有跳转到应有的位置
【发布时间】:2019-10-02 23:23:36
【问题描述】:

我正在使用 C# 开发 GameBoy 模拟器,并使用 Blargg 的测试 ROM(来自here 的 cpu_instrs)对其进行测试。我正在单独进行测试,现在我正在使用07-jrjpcallretrst。我正在将我的结果与 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 video-game-consoles


    【解决方案1】:
    byte jumpOffset = Processor.ReadNextByte();
    

    应该是 sbyte 给出 -5 而不是 0xFB。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多