由于 Gameboy 的处理器 LR35902 是 Z80 和 Intel 8080 的混合体,请记住,Z80 和 Intel 8080 的设计基本上是交叉兼容的,任何具有 Z80 处理器的东西都可以运行以下操作码吗?适用于LR35902?我想知道不是因为我希望用我的 TI84 在自习室玩口袋妖怪。
编辑:我知道我必须重新编程控件,可能还有游戏访问 RAM 的方式,但我宁愿这样做,也不愿移植整个游戏。
由于 Gameboy 的处理器 LR35902 是 Z80 和 Intel 8080 的混合体,请记住,Z80 和 Intel 8080 的设计基本上是交叉兼容的,任何具有 Z80 处理器的东西都可以运行以下操作码吗?适用于LR35902?我想知道不是因为我希望用我的 TI84 在自习室玩口袋妖怪。
编辑:我知道我必须重新编程控件,可能还有游戏访问 RAM 的方式,但我宁愿这样做,也不愿移植整个游戏。
Z-80 指令集是 8080 指令集的超集。LR35902 与 8080 有很多共同点,但用不同的指令替换了一些 8080 指令,并在与 Z-80 不同的方向上扩展了指令集。LR35902 与 Z-80 不兼容,也不与 8080 兼容。
您必须找到不兼容指令的所有用途,并用提供相同功能的补丁替换它们。由于 TI84 比原来的 GameBoy CPU 快得多,因此花费的额外时间不会成为问题,并且很容易为指令本身编写代码替换。ROM 的反汇编和从数据中分离代码将非常耗时。
但是,您可以使用现有的 GameBoy 仿真器并对其进行检测,以记录它执行的指令的位置,这些指令在 Z-80 上是不同的。广泛玩游戏应该会找到大部分代码必须修补的地方。
如需快速概览,请参阅此LR35902 指令图表并与 Z-80 进行比较。您还需要LR35902 指令的此描述。
这是 LR35902 和 Z-80 之间的简要指令操作码差异。
Opcode LR35902 Z-80
------ -------------- ----------
F2 LD A,(C) JP P,nn
E2 LD (C),A JP NV,nn
EA LD (nn),A JP V,nn
FA LD A,(nn) JP M,nn
3A LDD A,(HL) LD A,(nn)
32 LDD (HL),A LD (nn),A
2A LDI A,(HL) LD HL,(nn)
22 LDI (HL),A LD (nn),HL
08 LD (nn),SP EX AF,AF'
E0 LDH (n),A RET NV
F0 LDH A,(n) RET P
F8 LD HL,(SP+e) RET M
E8 ADD SP,e RET V
CB 3x SWAP r SL1 r (undocumented)
10 STOP DJNZ
D9 RETI EXX
这是一个很小的帮助,LD A,(nn)
并且LD (nn),A
在两者上都可用,并且只需使用不同的操作码。