私はNESのJavascriptエミュレーターを見て、それがどのように機能するかを理解しようとしています。
この行で:
addr = this.load(opaddr+2);
オペコードは2つインクリメントされます。ただし、私が読んでいるドキュメント(付録Eを参照)には次のように書かれています。
ゼロページアドレッシングは、操作対象のデータを見つけることができるゼロページ($ 0000- $ 00FF)のアドレスへのポインタとして機能する単一のオペランドを使用します。ゼロページアドレッシングを使用することにより、オペランドに必要なバイトは1バイトのみであるため、2つのオペランドを使用するアドレッシングモードよりも命令が短くなり、実行が高速になります。ゼロページ命令の例はAND$12です。
したがって、オペランドの引数が1バイトしかない場合は、その直後に表示して、+2ではなく+1にする必要がありますか?なぜ+2?
これは私がそれが機能すると思う方法ですが、それは間違っているかもしれません。私たちの記憶が次のようになっていると仮定します。
-------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | <- index
-------------------------
| a | b | c | d | e | f | <- memory
-------------------------
^
\
PC
そして私たちのPCは0
、を指していa
ます。このサイクルでは、オペコードは次のようになります。
var pc= 0; //for example's sake
var opcode= memory[pc]; //a
したがって、最初のオペランドを次のスロットにするべきではありませんb
。
var first_operand = memory[pc + 1]; //b