Dom*_*mra 6 assembly interrupt 6502 emulation nintendo
事先,我为这个问题的开放性和一般的清醒道歉,因为老实说,我对这个话题的了解非常不完整,我发现很难描述我的问题.我真的不想发帖,但我完全被完全卡住了.
我已经启动了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)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,有人可以通过PPU渲染向我解释1次迭代的基础知识,包括循环计数,中断等事项(即绘制一整个240扫描线屏幕并移动到下一个).
那里有模拟器,您是否查看过它们的来源来寻找答案?通常这些都是为了性能而编写的,可读性不是很好,但您可能会找到一些花絮来帮助您继续。代码是否正在等待执行中断?您是否执行了该中断?可能是中断修改了返回地址,让程序继续执行?无限循环轮询寄存器中的某个位吗?或者它是自我的无条件分支?