NES读取手柄的6502汇编代码
; 读取手柄1
; JOY_NOW:当前值, JOY_LAST:前一次的值
; 一些常数, 某些可以按位或组合
; Right:$01, Left:$02, Down:$04, Up:$08
; Start:$10, Select:$20, B:$40, A:$80
JOY_NOW = $00
JOY_LAST = $01
read_joy:
lda JOY_NOW ; 保存上一次的值
pha
lda #$01 ; 硬件初始化
sta $4016
lsr
sta $4016
ldx #$08 ; 循环读取8次
sta JOY_NOW ; 初始化
sta JOY_LAST
joy_loop:
lda $4016 ; 循环读取
and #$01 ; 仅取的效位
sta JOY_LAST ; 借用上一次的地址
lda JOY_NOW
asl
ora JOY_LAST
sta JOY_NOW
dex
bne joy_loop
pla ; 保存上一次的按键值
sta JOY_LAST
rts