您好我正在为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,那么第二个字节的目的是什么?
答案 0 :(得分:12)
你是对的。 LD (C),A
和LD A,(C)
长度为1个字节。
我甚至通过电子邮件向负责人(Pastraiser)发送电子邮件要求澄清(或者他是否可以修复网站),但我没有回答。
困扰我的另一件事是prefix CB
被认为是1个字节长并消耗4个周期。并且所有扩展指令被认为是2个字节长并且消耗8个周期(如果它们访问(HL)
则为16个)。对Prefix CB
下面的空格留空是更有意义的,因此很明显所有扩展指令都已包含其前缀的大小和处理周期。
困扰我的另一件事是STOP
长度为2的事实。它实际上只有一个字节长。 Gameboy Classic上存在一个硬件错误,导致STOP
之后的指令被跳过。所以Nintendo开始告诉开发人员在NOP
之后总是添加STOP
。因此,为了100%正确,我会认为STOP
是(1,4)而不是(2,4)。 Gameboy Color上不存在此问题。