基本的NES仿真理论 - 我卡住了
题
提前,我为这个问题的开放结束,普遍希望,因为诚实我对这个话题的了解是非常拼凑的,我发现很难描述我的问题。我真的不想发布,但我完全和完全困住了。
我已经开始了一个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循环是否在寄存器中轮询一点?或者是自我的无条件分支?
不隶属于 StackOverflow