基本的NES仿真理论 - 我被困住了

时间:2010-07-08 09:28:31

标签: assembly interrupt emulation nintendo 6502

事先,我为这个问题的开放性和一般的清醒道歉,因为老实说,我对这个话题的了解非常不完整,我发现很难描述我的问题。我真的不想发帖,但我完全被完全卡住了。

我已经开始使用NES模拟器了。它被解释(所以没有动态重新编译)。

它可以加载和映射roms(mapper 0 roms)并执行init代码,直到我必须处理中断和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扫描线屏幕并移至下一个)。

1 个答案:

答案 0 :(得分:1)

那里有模拟器,你看过他们的答案源吗?通常这些都是为了性能而写的,并不是非常易读,但你可能会找到一个小小的东西来帮助你。是等待中断执行的代码,你执行了那个中断吗?可能是中断修改了返回地址并允许程序继续?是无限循环轮询寄存器中的位?或者它是自我的无条件分支?