1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-27 15:29:46 +00:00
cc65/libsrc/lynx/kbhit.s
cuz a47adefd7b Updated version by Karri Kaksonen.
git-svn-id: svn://svn.cc65.org/cc65/trunk@3771 b7a2c559-68d2-44c3-8de9-860c34a00d81
2007-02-09 08:24:03 +00:00

56 lines
1.1 KiB
ArmAsm

;
; Karri Kaksonen, Harry Dodgson 2006-01-06
;
; unsigned char kbhit (void);
;
.export _kbhit
.export KBEDG
.export KBSTL
.import return0, 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 $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
beq @L1
jmp return1 ; Key hit
@L1:
jmp return0 ; No new keys hit