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

时间:2016-12-28 00:29:03

标签: assembly emulation z80 gameboy

您好我正在为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,那么第二个字节的目的是什么?

1 个答案:

答案 0 :(得分:12)

你是对的。 LD (C),ALD 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上不存在此问题。