1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-26 08:32:00 +00:00
cc65/libsrc/lynx/kbhit.s
Fabrizio Caruso 2bd798fa13 Optimizations
2019-10-30 18:00:27 -04:00

57 lines
1.5 KiB
ArmAsm

;
; Karri Kaksonen, Harry Dodgson 2006-01-06
;
; unsigned char kbhit (void);
;
.export _kbhit
.export KBEDG
.export KBSTL
.import return1
; --------------------------------------------------------------------------
; The Atari Lynx has a very small keyboard - only 3 keys
; Opt1, Opt2 and Pause.
; But the designers have decided that pressing Pause and Opt1 at the
; same time means Restart and pressing Pause and Opt2 means Flip screen.
; For "easter egg" use I have also included all three keys pressed '?'
; and Opt1 + Opt2 pressed '3'.
; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'.
.data
KBTMP: .byte 0
KBPRV: .byte 0
KBEDG: .byte 0
KBSTL: .byte 0
KBDEB: .byte 0
KBNPR: .byte 0
.code
_kbhit:
lda KBEDG
bne L1
lda $FCB0 ; Read the Opt buttons
and #$0c
sta KBTMP
lda $FCB1 ; Read Pause
and #1
ora KBTMP ; 0000210P
tax
and KBPRV
sta KBSTL ; for multibutton
txa
and KBDEB
sta KBEDG ; for just depressed
txa
and KBNPR
sta KBDEB ; for debouncing
txa
eor #$ff
sta KBNPR ; inverted previous ones pressed
stx KBPRV
lda KBEDG
L1: tax
rts