NESASM教程——第六天——跳转和按键处理

简介:

【读取按键】

我们假设你要读取的是一个普通的方形NES手柄,而不是一些其他乱七八糟的东西。为了知道一个按键是否按下,你一次一键地读取0x4016(手柄1)或0x4017(手柄2)。如果按键按下,右边的bit0将被置位(1)。你用1同它相“与”,若结果不为0则跳转。在你读取任何内容之前,你需要先复位手柄(选通)。

【选通/复位】

为了选通/复位手柄,我们写入一个1然后一个0到0x4016(手柄1)或0x4017(手柄2)。可以这么搞:


lda #$01
sta $4016
lda #$00
sta $4016

对,就这样!之后可以真正读取手柄信息。

【读取顺序】

在对0x4016或0x4017进行的的每个读取操作,你获得了不同按键的状态,这些被读出按键的顺序为:


读取序号  |   对应按键

1.    A

2.    B

3.    SELECT

4.    START

5.    UP

6.    DOWN

7.    LEFT

8.    RIGHT


那么在我们搞些事情之前先学习一些条件和跳转指令怎么样?


【条件跳转】

我们在大多数指令中设置了一些特定“条件”,他们是:

EQ——EQual-Zero, 等于0

NE——Not Equal,不等于0

LT——Less Than,小于0

GT——Greater Than, 大于0

PL——Plus,正数

MI——Minus,负数

CC——Carry Clear,进位标志为0

CS——Carry Set,进位标志为1

VC——oVerflow Clear,溢出标志为0

VS——oVerflow Set, 溢出标志为1


这些条件会被大多数指令设置,甚至包括数据载入。所有这些条件都有一个分支指令。在条件码前加上“B”就构成了条件跳转指令,例如:


;假设有个标签叫做Loopto
beq Loopto;跳到Loopto如果上个比较结果为相等或者上条指令结果为0
bpl Loopto;跳到Loopto如果上次结果bit7为0
bmi Loopto;你懂的

我希望你已经发现规律了。我相信只有NE和EQ条件能被一个非比较指令影响。


以防万一你不知道,偷偷告诉你,一个label(标签)就是一个名称后面跟上冒号,例如


Loopto:
aslkdfj:
Hello_a:

我希望你懂了。记住:标签很好玩。


【读取按键的一个小栗子】

说够了。上代码:


	lda #$01    ; |
	sta $4016   ;  \
	lda #$00    ;   - 设置手柄用来读
	sta $4016   ; _/

	lda $4016  ; 读取按键A
	and #1     ; 判断是否按下
	bne WasDown  ; 按下就走
	; 我不确定为什么是个BNE,但就是这样,所以就用吧!

	lda $4016  ; 读取按键B
	lda $4016  ; 读取按键SELECT
	lda $4016  ; 读取按键START
	and #1     ; 看看是否按下了?
	bne StartDown  ; 按下了,走起~

	lda $4016  ; UP
	lda $4016  ; DOWN
	lda $4016  ; LEFT
	lda $4016  ; RIGHT

	jmp NothingDown  ; 滚远点
	
StartDown:
	; 开始了开始了

WasDown:
	; AAAAAAAAAAAAAAAA

NothingDown:
	; 啥都不干


希望你不认为这太难。


个人认为GBA是更容易编程的。所以对我而言,NES程序需要更多学习来搞明白。

【复习今天内容】

首先我想提一点,你可能知道我的GBA 汇编系列教程了,或许你也知道我的x86(DOS)汇编教程?在三门汇编语言中穿梭有时让人抓狂,所以如果你看到一些奇怪的或者错误,让我知道就行。谢谢。

按键检测不那么激情澎湃,但我可以告诉你后面更精彩。。。

目录
相关文章
C#窗体连连看小游戏(超详细)(下)
C#窗体连连看小游戏(超详细)
374 0
HTML+CSS 星空闪烁登录页面(记得收藏)
HTML+CSS 星空闪烁登录页面(记得收藏)
|
算法 C#
C#窗体连连看小游戏(超详细)(上)
C#窗体连连看小游戏(超详细)
397 0
C#窗体连连看小游戏(超详细)(上)
|
前端开发
前端——关于鼠标的知识点
前端——关于鼠标的知识点
【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
901 0
|
小程序 JavaScript
小程序自学系列(零基础学小程序)---小程序实现简单的倒计时效果
小程序自学系列(零基础学小程序)---小程序实现简单的倒计时效果
|
缓存 小程序 JavaScript
【小程序】爆肝 3 天总结的微信小程序优化指南(收藏夹吃灰吧!)🔥🔥(上)
前言 大家好,我是HoMeTown,最近要做一个小程序的项目,项目启动之前,回顾自己之前做过的小程序,感觉做的还是不够好,最近学习了一下小程序优化方案,这块总结一份个人笔记,以便参考,同时分享给大家,共勉。
355 0
|
缓存 小程序 JavaScript
【小程序】爆肝 3 天总结的微信小程序优化指南(收藏夹吃灰吧!)🔥🔥(下)
前言 大家好,我是HoMeTown,最近要做一个小程序的项目,项目启动之前,回顾自己之前做过的小程序,感觉做的还是不够好,最近学习了一下小程序优化方案,这块总结一份个人笔记,以便参考,同时分享给大家,共勉。
593 0
|
物联网 API 定位技术
3_6_按键与跑马灯实验|学习笔记
快速学习3_6_按键与跑马灯实验。
307 0
3_6_按键与跑马灯实验|学习笔记
|
前端开发 JavaScript
两步实现在网站左下角实现音乐播放器弹窗听歌
两步实现在网站左下角实现音乐播放器弹窗听歌
176 0
两步实现在网站左下角实现音乐播放器弹窗听歌