在构建芯片 8 仿真器时,我遇到了芯片 8 信息的 2 个主要来源似乎不同的问题,这对整个芯片 8 解释器都有影响。
一方面,我们有维基百科,它在操作码 FX65 下告诉我们
“用从地址 I 开始的内存中的值填充 V0 到 VX(包括 VX)。每写入一个值,I 就增加 1。”
其中“每写入一个值,I 就增加 1。” 是重要的部分。
遵循这将导致以下代码:
for(int i = 0; i <= ((opcode & 0x0F00) >> 8); ++i) {
V[i] = memory[I];
++I;
}
另一方面,我们有cowgod 的 chip-8 参考,几乎每个教程都链接到该参考,它告诉我们以下内容
“解释器从位置 I 开始的内存中读取值到寄存器 V0 到 Vx。”
应用此逻辑会产生以下代码(这也是大多数芯片 8 实现使用的实现):
for(int i = 0; i <= ((opcode & 0x0F00) >> 8); ++i) {
V[i] = memory[I + i];
}
这两者之间的主要区别是 I 要么增加,要么不增加。由于 I 是仿真器的寄存器索引,因此程序能否正常运行非常重要。
我想知道的是这个操作码的哪个实现是正确的。