欢迎光临散文网 会员登陆 & 注册

FC按键扫描

2020-03-02 01:04 作者:FlameCyclone  | 我要投稿

原理:

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

 


FC按键扫描的评论 (共 条)

分享到微博请遵守国家法律