6

在此之前,我为这个问题的开放性和一般性的虚弱表示歉意,因为老实说,我对该主题的了解非常不完整,我什至发现很难描述我的问题。我真的不想发帖,但我完全被卡住了。

我已经启动了一个NES模拟器。它被解释(所以没有动态重新计算)。

Atm 它可以加载和映射 roms(mapper 0 roms)并执行初始化代码直到我必须处理中断和 PPU 的地方。这就是我卡住的地方。

这是我的emu atm的示例输出。执行从 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 回答