2015-02-19 22:19:21 +01:00
|
|
|
;
|
|
|
|
; unsigned char kbhit (void);
|
|
|
|
;
|
|
|
|
|
|
|
|
.export _kbhit
|
|
|
|
.include "osic1p.inc"
|
|
|
|
|
|
|
|
_kbhit:
|
|
|
|
lda #%11111110 ; Select first keyboard row
|
|
|
|
scan:
|
|
|
|
sta KBD ; Select keyboard row
|
|
|
|
tax ; Save A
|
|
|
|
lda KBD ; Read keyboard columns
|
|
|
|
ora #$01 ; Mask out lsb (Shift Lock), since we ignore it
|
|
|
|
cmp #$FF ; No keys pressed?
|
|
|
|
bne keypressed
|
|
|
|
txa ; Restore A
|
|
|
|
sec ; Want to shift in ones
|
|
|
|
rol a ; Rotate row select to next bit position
|
|
|
|
cmp #$FF ; Done?
|
|
|
|
bne scan ; If not, continue
|
|
|
|
lda #$00 ; Return false
|
2015-02-21 20:24:58 +01:00
|
|
|
tax ; High byte of return is also zero
|
|
|
|
sta CHARBUF ; No character in buffer
|
2015-02-19 22:19:21 +01:00
|
|
|
rts
|
|
|
|
keypressed:
|
2015-02-21 20:24:58 +01:00
|
|
|
jsr INPUTC ; Get input character in A
|
|
|
|
sta CHARBUF ; Save in buffer
|
2015-02-19 22:19:21 +01:00
|
|
|
ldx #$00 ; High byte of return is always zero
|
|
|
|
lda #$01 ; Return true
|
|
|
|
rts
|