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