【问题标题】:Length of instruction LD A,(C) in gameboy ~Z80 processorgameboy ~Z80 处理器中指令 LD A,(C) 的长度
【发布时间】:2017-05-12 06:05:40
【问题描述】:

您好,我正在为 Game Boy 编写模拟器。

我使用这个参考:Gameboy CPU (LR35902) instruction set

本文档声明操作码:

0xE2 LD (C),A

0xF2 LD A,(C)

长度为 2。

Game Boy CPU Manual 分别表示这些指令:

将地址 $FF00 + 寄存器 C 的值放入 A。

将 A 放入地址 $FF00 + 寄存器 C。

我认为它的长度为 1,因为操作码是自给自足的,它不需要解释另一个值。如果它的长度为2,那么第二个字节的用途是什么?

【问题讨论】:

  • 你为什么这么认为?
  • 图中说明指令是8位的。我看不出有任何不相信的理由。
  • 试试这个gameboy cpu reference
  • 我可能不太理解这个问题,但我从未见过 0xE2 和 0xF2 使用第二个字节。这是 GBC 中 0xE2 的示例:datacrystal.romhacking.net/wiki/…
  • 鉴于@MégaLag 给出的示例以及pandocs 所说的内容,我将其视为1 字节指令。

标签: assembly emulation z80 gameboy


【解决方案1】:

你完全正确。 LD (C),ALD A,(C) 的长度为 1 个字节。

我什至给负责人(Pastraiser)发了电子邮件,要求澄清(或者他是否可以修复网站),但我没有得到答复。

另一件困扰我的事情是prefix CB 被认为是 1 字节长并消耗 4 个周期。并且所有扩展指令都被认为是 2 个字节长并消耗 8 个周期(如果它们访问(HL),则为 16 个)。将Prefix CB 下方的空格留空对我来说更有意义,因此很明显所有扩展指令都已包含其前缀的大小和处理周期。

另外一件困扰我的事情是STOP 的长度是 2。它实际上只有一个字节长。 Gameboy Classic 上存在一个硬件错误,导致 STOP 后面的指令被跳过。所以任天堂开始告诉开发者在STOP之后总是添加NOP。所以,为了 100% 正确,我认为 STOP 是 (1,4) 而不是 (2,4)。 Gameboy Color 上不存在此问题。

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多