2

私は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」でも適用・操作。

あまりにも古い仕様を見ているのか、それとも正しくやっているのか混乱します。

4

1 に答える 1