事先,我为这个问题的开放性和普遍的要求而道歉,因为老实说,我对该主题的了解非常零散,而且我发现很难描述我的问题。我确实不想发帖,但是我完全被卡住了。
我已经启动了NES模拟器。它是经过解释的(因此没有动态重新压缩)。
Atm可以加载和映射ROM(映射器0 ROM)并执行初始化代码,直到我必须处理中断和PPU的地方。那就是我被困住的地方。
这是我的e 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扫描线屏幕并移至下一个屏幕)的情况。
最佳答案
那里有仿真器,您是否看过他们的答案来源?通常,这些都是为提高性能而编写的,但不是很可读,但是您可能会发现一些窍门,以助您一臂之力。代码正在等待要执行的中断,您是否已执行了该中断?可能是中断修改了返回地址并允许程序继续执行?无限循环轮询寄存器中的某个位?还是对自己的无条件分支?
关于assembly - 基本的NES仿真理论-我被困住了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3202221/