【VBlank?】
如果你不知道什么是VBlank, 那么假装我给了你一条鳟鱼;
如果你知道什么是VBlank,那么假装我给了你一条鳟鱼;
如果你不确定一条鳟鱼和NES有什么关系,那么假装我给了你一条鳟鱼;
既然我们房间里有一股想象中的鱼臭味,那么让我们学习更好的方式来与VBlank同步。
【我们怎么用它?】
首先我们有个标签,比如VBlank_Routine,无哦一我们把它放在段1的地址$FFFA处,就像这样:
.bank 1 .org $FFFA .dw VBlank_Routine ; VBlank中断向量 .dw Start ; 复位向量 .dw 0 ; 当BRK指令执行时的中断向量,改天再谈 .bank 0 .org $0000 ;保留一个变量VBlankOrNo VBlankOrNo .db 0 .org $8000 ;code VBlank_Routine: ;VBlank子程序开始 inc VBlankOrNo ; 使变量VBlankOrNo增1 rti ; RTI 意思是中断返回 (Interrupt RETurn or ReTurn from Interrupt) Start: ;主程序开始 ; ;waitforvblank: 旧代码 ; lda $2002 旧代码 ; bpl waitforvblank 旧代码 ; 新代码如下 WaitForVBlank: lda VBlankOrNo ; A = VBlankOrNO cmp #1 ; if A == 1 说明发生了VBlank bne WaitForVBlank ; 没有发生VBlank,循环 dec VBlankOrNo ; 发生了VBlank,使变量VBlankOrNo减一,变为0 ; 代码如旧
希望你懂了总体思想。
哦对了,别忘了将PPU控制寄存器中的“Generate VBlank Bit"设为1(我记得是bit7,可以复习第三天内容)。
修改后的代码比之前旧的循环更稳定。
晚安~