在chip-8操作码FX65中增加I

duc*_*uck 5 opcode chip-8

在构建芯片 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;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我们有cowgodchip-8 参考,几乎每个教程都链接到的参考,它告诉我们以下内容

“解释器从位置 I 开始的内存读取值到寄存器 V0 到 Vx。”

应用此逻辑会产生以下代码(这也是大多数芯片 8 实现使用的实现):

for(int i = 0; i <= ((opcode & 0x0F00) >> 8); ++i) {
    V[i] = memory[I + i];
}
Run Code Online (Sandbox Code Playgroud)

这两者之间的主要区别在于 I 要么递增,要么不递增。由于 I 是仿真器的寄存器索引,因此程序能否正常工作非常重要。

我想知道的是这个操作码的哪个实现是正确的。

tof*_*fro 3

似乎没有明确的答案,因为似乎没有明确的参考。

这个参考文献似乎有同样的问题,同样的歧义

然而,这个(当代)参考文献(第 113 页)说“I = I + X + 1”。作者是发明者约瑟夫·韦斯贝克尔(Joseph Weisbecker)——我想他会知道的。