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

Dem*_*jon 9 assembly z80 emulation gameboy

你好我正在为Game Boy写一个模拟器.

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

该文件说明了操作码:

0xE2 LD (C),A
Run Code Online (Sandbox Code Playgroud)

0xF2 LD A,(C)
Run Code Online (Sandbox Code Playgroud)

长度为2.

游戏男孩CPU手册说分别,这些说明:

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

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

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

Gab*_*iro 13

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

我甚至通过电子邮件向负责人(Pastraiser)发送电子邮件要求澄清(或者他是否可以修复网站),但我没有回答.

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

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