FC按鍵掃描
原理:
1.掃描當(dāng)前按鍵值保存到地址a
2.將掃描的按鍵值(地址a)與上次存儲(chǔ)的按鍵值地址b異或得出二者發(fā)生改變的鍵位值(二進(jìn)制位),假設(shè)上次鍵值是0x80,現(xiàn)在掃描到是0x84,那么異或后就是0x04
3.將異或后的結(jié)果與現(xiàn)在的鍵值相與,如前一步例子所講0x04與0x84相與得到0x04,然后放到按鍵值地址c
4.將地址a的值放到地址b待下次使用
于是可以得到 保持按鍵地址a,單次按鍵地址c,上次按鍵地址b
;[FC][旋風(fēng)的按鍵掃描程序]
;FlameCyclone
;20200302
?.ORG $E000
?
Button_Keep = $40? ? ? ? ? ? ? ;保持按鍵
Button_Once = Button_Keep + 2? ;單次按鍵
Button_Read = Button_Once + 2? ;掃描讀取
Button_Last = Button_Read + 2? ;上次按鍵
;====================
;延時(shí)等待
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
?