NESASM教程——第十二天——VBlank和中断

简介:

【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,可以复习第三天内容)。

修改后的代码比之前旧的循环更稳定。

晚安~

目录
相关文章
|
6月前
|
物联网 Linux
中断系列第一篇:假装入个门之啥子是中断?
中断系列第一篇:假装入个门之啥子是中断?
60 0
|
6月前
|
存储 缓存 Linux
中断系列第三篇:中断实操一下?
中断系列第三篇:中断实操一下?
74 0
|
前端开发 芯片
【芯片前端】同步FIFO的一个小的延伸——一会加一会减得计数器怎么写
【芯片前端】同步FIFO的一个小的延伸——一会加一会减得计数器怎么写
|
4月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
337 0
【期末不挂科-单片机考前速过系列P5】(第五章:11题速过中断系统和中断系统结构)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P5】(第五章:11题速过中断系统和中断系统结构)经典例题盘点(带图解析)
|
6月前
|
存储
【51单片机】初学者必读的一文【探究定时计数器与中断系统是如何配合起来的?】(9)
【51单片机】初学者必读的一文【探究定时计数器与中断系统是如何配合起来的?】(9)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
|
小程序 JavaScript
小程序自学系列(零基础学小程序)---小程序实现简单的倒计时效果
小程序自学系列(零基础学小程序)---小程序实现简单的倒计时效果
|
Linux 调度
Linux驱动开发——中断编程之顶半部与底半部机制(1)
Linux驱动开发——中断编程之顶半部与底半部机制(1)
208 0
Linux驱动开发——中断编程之顶半部与底半部机制(1)
|
存储 Linux 调度
Linux驱动开发——定时器
Linux驱动开发——定时器
176 0
Linux驱动开发——定时器