6

正直なところ、このトピックに関する私の知識は非常に不完全であり、私の問題を説明することすら難しいと感じているので、事前に、この質問のオープンエンドと一般的な希望に満ちた態度についてお詫びします。私は本当に投稿したくありませんでしたが、私は完全にそして完全に立ち往生しています。

NESエミュレータを起動しました。解釈されます(したがって、動的な再計算は行われません)。

Atmは、ROM(mapper 0 rom)をロードしてマップし、割り込みとPPUを処理する必要がある場所まで初期化コードを実行できます。それは私が立ち往生しているところです。

これが私のemuatmからの出力例です。実行は8000から始まり、800aで無限ループに陥り、そこからどのように進むかがわかりません。

8002: LDA #$10    ; read immediate value to set PPU control registers 
8004: STA $2000   ; store value 
8007: LDX #$FF    ; load immediate value into X register 
8009: TXS         ; store X register into stack 
800a: LDA $2002   ; read PPU flags into accumulator (set N flag based on bit 7) 
800d: BPL         ; test N flag, branch to 800a if not positive, (N is set) 
800a: LDA $2002
800d: BPL
800a: LDA $2002
800d: BPL
800a: LDA $2002
800d: BPL
etc, etc etc (inf loop)

だから私の質問は、誰かが私のためにPPUレンダリングを介した1回の反復の基本を説明できますか?サイクルカウント、割り込みなどを含みます(つまり、240スキャンライン画面全体を描画して次の画面に移動します)。

4

1 に答える 1

1

そこにエミュレーターがあります、あなたは答えのためにそれらのソースを見ましたか?通常、これらはパフォーマンスのために作成されており、あまり読みやすくはありませんが、少しでもうまくいくかもしれません。コードは割り込みが実行されるのを待っていますか?その割り込みを実行しましたか?割り込みがリターンアドレスを変更し、プログラムの続行を許可している可能性がありますか?無限ループはレジスタのビットをポーリングしていますか?それとも、それは自己への無条件の分岐ですか?

于 2010-07-08T19:11:01.680 に答える