【问题标题】:What do opcodes 0xE9 (JP HL) and 0xF8 (LD HL,SP+r8) do?操作码 0xE9 (JP HL) 和 0xF8 (LD HL,SP+r8) 有什么作用?
【发布时间】:2016-08-29 13:08:59
【问题描述】:

我想我很难正确定义以下模棱两可的操作码:LD HL,SP+r8JP (HL) 操作码(分别为0xE90xF8

在我的实现中,LD HL,SP+r8HL 设置为 SP+r8 的值,但我感觉这可能与从 RAM 加载内存有关。 JP (HL),我有 PUSH 将 PC 放入堆栈并将程序计数器设置为 HL 的值(如 JP a16,除了 HL 的值),但我读过一些论坛,似乎说那是错的。

任何说明这些说明的作用都会很好,因为我现在很迷茫。

【问题讨论】:

  • 也许这会以某种方式帮助你 0xE90xF8
  • @Dodge 我一直在寻找一个开源模拟器来查看源代码是什么,但我发现唯一一个实现了一些完全错误的操作码,所以我并不真正相信它。这个模拟器测试过吗?如果是这样,谢谢你,你很有帮助!
  • 您可以查看我的github.com/creker/Cookieboy 它通过了 blargg 的所有测试 - CPU、计时、LCD、声音。即使是那些测试硬件错误的人
  • @creker 谢谢,正如我所说,很难找到一个真正有效的开源模拟器。现在只需要整理所有这些文件。 ^~^ 但这只需要几分钟,所以谢谢。

标签: emulation gameboy opcodes


【解决方案1】:

在我的实现中,LD HL,SP+r8 将 HL 设置为 SP+r8 的值,但我感觉这可能与从 RAM 加载内存有关。

没有。它只需要一个 8 位立即数,对其进行符号扩展,将 SP 的值添加到其中并将结果存储在 HL 中。

JP (HL),我将 PC 推入堆栈并将程序计数器设置为 HL 的值(如 JP a16,除了 HL 的值)

JP 不会将当前的PC 压入堆栈(也许您将它与CALL 混淆了)。 JP (HL) 所做的只是 PC = HL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2023-02-25
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多