10

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

我使用这个参考:Gameboy CPU (LR35902) 指令集

该文档指出操作码:

0xE2 LD (C),A

0xF2 LD A,(C)

长度为 2。

Game Boy CPU 手册分别说这些说明:

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

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

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

4

1 回答 1

14

你是绝对正确的。LD (C),A并且LD A,(C)是 1 字节长。

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

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

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

于 2017-01-02T07:11:44.613 回答