我正在研究 CHIP8 的实施,我正在阅读
Cowgod's
Chip-8
Technical Reference v1.0
http://web.archive.org/web/20130401182240/http://devernay.free.fr/hacks/chip8/C8TECH10.HTM#3.0
作为参考。我确信这是一个精确的规范,因为它也被几个讨论 CHIP8 的博客推荐。我的问题是,我已经实现了用于处理代码“7xkk”的操作码
7xkk - ADD Vx, byte
Set Vx = Vx + kk.
Adds the value kk to the value of register Vx, then stores the result in Vx.
这是我的代码
case 0x7:
log(this.logging, "0x7xkk: Setting Vx = Vx + kk.");
var result = this.registers.V[(opcode & 0x0F00) >> 8] + (opcode & 0x00FF);
this.registers.V[(opcode & 0x0F00) >> 8] = result;
break;
但其他开源 CHIP8 有完全不同的实现
case 0x7000:
// Set Vx = Vx + kk.
this.register[vX] += opcode & 0x00FF;
if(this.register[vX] > 255){
this.register[vX] -= 256;
}
break;
//这个人也检查Vx是否大于255,规范中没有描述。
链接 - https://github.com/loktar00/chip8/blob/master/chip8.js#L181
和我在网上找到的 C++ 实现
case 0x7: {
V[opCode2] = (char)((V[opCode2] + opCode & 0x00FF) & 0x00FF);
IP = IP + 2;
break;
}
//此人添加“opCode & 0x00FF”并应用和操作“0x00FF”。
如果我正在查看一个太旧的规范或者我做得正确,我会感到困惑。