提前,我为这个问题的开放结束,普遍希望,因为诚实我对这个话题的了解是非常拼凑的,我发现很难描述我的问题。我真的不想发布,但我完全和完全困住了。

我已经开始了一个nes仿真器。它是解释的(所以没有动态重新计算)。

atm它可以加载和映射roms(Mapper 0 ROM)并执行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扫描线屏幕并移动到下一个)。

有帮助吗?

解决方案

在那里有仿真器,你看过他们的答案来源吗?通常是那些写作的性能而不是非常可读,但你可能会找到一个tidbit来让你走。代码是否等待被执行的中断,并让您执行该中断?可能是中断修改返回地址并允许程序继续?Infinite循环是否在寄存器中轮询一点?或者是自我的无条件分支?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top