gameboy ~Z80 处理器中指令 LD A,(C) 的长度

Length of instruction LD A,(C) in gameboy ~Z80 processor

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

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

本文档指出操作码:

0xE2 LD (C),A

0xF2 LD A,(C)

长度为 2。

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

Put value at address $FF00 + register C into A.

Put A into address $FF00 + register C.

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

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

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

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

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