10

こんにちは、ゲームボーイ用のエミュレーターを書いています。

私はこのリファレンスを使用します:ゲームボーイCPU(LR35902)命令セット

このドキュメントでは、オペコードについて次のように述べています。

0xE2 LD (C),A

0xF2 LD A,(C)

長さは 2 です。

Game Boy CPU Manualには、これらの命令がそれぞれ次のように記載されています。

アドレス $FF00 + レジスタ C の値を A に入れます。

A をアドレス $FF00 + レジスタ C に入れます。

オペコードは自己完結型であり、別の値を解釈する必要がないため、長さは 1 だと思います。長さが 2 の場合、2 番目のバイトの目的は何ですか?

4

1 に答える 1

14

あなたは、絶対に正しい。LD (C),AおよびLD A,(C)長さは 1 バイトです。

責任者(Pastraiser)に説明を求めて(または彼がウェブサイトを修正できるかどうか)電子メールを送信しましたが、回答がありませんでした.

私を悩ませているもう 1 つのことは、prefix CB1 バイトの長さと見なされ、4 サイクルを消費するという事実です。また、すべての拡張命令は 2 バイトの長さと見なされ、8 サイクル (アクセスする場合は 16 サイクル) を消費します(HL)。以下のスペースを空白のままにしておく方が理にかなっているPrefix CBので、すべての拡張命令にプレフィックスのサイズと処理サイクルが既に含まれていることは明らかです。

もう 1 つ気になるのは、STOP長さが 2 であることです。実際には、長さは 1 バイトです。Gameboy Classic にはハードウェアのバグがあり、a に続く命令STOPがスキップされます。そこで任天堂は開発者に a のNOP後に always を追加するように言い始めましたSTOP。したがって、100% 正しいとするSTOPには、(2,4) ではなく (1,4) であると考えます。この問題は、ゲームボーイ カラーには存在しません。

于 2017-01-02T07:11:44.613 に答える