FC按键扫描
原理:
1.扫描当前按键值保存到地址a
2.将扫描的按键值(地址a)与上次存储的按键值地址b异或得出二者发生改变的键位值(二进制位),假设上次键值是0x80,现在扫描到是0x84,那么异或后就是0x04
3.将异或后的结果与现在的键值相与,如前一步例子所讲0x04与0x84相与得到0x04,然后放到按键值地址c
4.将地址a的值放到地址b待下次使用
于是可以得到 保持按键地址a,单次按键地址c,上次按键地址b
;[FC][旋风的按键扫描程序]
;FlameCyclone
;20200302
.ORG $E000
Button_Keep = $40 ;保持按键
Button_Once = Button_Keep + 2 ;单次按键
Button_Read = Button_Once + 2 ;扫描读取
Button_Last = Button_Read + 2 ;上次按键
;====================
;延时等待
NmiWait:
LDA $2002
BPL NmiWait
JSR ButtonProcess
JMP NmiWait
;====================
;按键处理
ButtonProcess
LDX #$01
STX $4016
DEX
STX $4016
LDX #$01
ButtonScan
LDY #$08
ButtonScanStart
LDA $4016,X
AND #$01
STA Button_Read,X
LDA Button_Keep,X
ASL
ORA Button_Read,X
STA Button_Keep,X
DEY
BNE ButtonScanStart
TAY
EOR Button_Last,X
AND Button_Keep,X
STA Button_Once,X
STY Button_Last,X
DEX
BPL ButtonScan
RTS