1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-26 08:32:00 +00:00
cc65/libsrc/apple2/cgetc.s

53 lines
1.3 KiB
ArmAsm
Raw Normal View History

;
; Kevin Ruland
;
; char cgetc (void);
;
; If open_apple key is pressed then the high-bit of the key is set.
;
2016-06-19 13:03:20 +00:00
.export _cgetc
.import cursor, putchardirect
2016-06-19 13:03:20 +00:00
.include "apple2.inc"
_cgetc:
2016-06-19 13:03:20 +00:00
; Cursor on ?
lda cursor
beq :+
2016-06-19 13:03:20 +00:00
; Show caret.
.ifdef __APPLE2ENH__
lda #$7F | $80 ; Checkerboard, screen code
.else
lda #' ' | $40 ; Blank, flashing
.endif
jsr putchardirect ; Returns old character in X
; Wait for keyboard strobe.
: inc RNDL ; Increment random counter low
bne :+
inc RNDH ; Increment random counter high
2016-06-19 13:03:20 +00:00
: lda KBD
bpl :-- ; If < 128, no key pressed
2016-06-19 13:03:20 +00:00
; Cursor on ?
ldy cursor
beq :+
; Restore old character.
pha
txa
jsr putchardirect
pla
; At this time, the high bit of the key pressed is set.
: bit KBDSTRB ; Clear keyboard strobe
.ifdef __APPLE2ENH__
bit BUTN0 ; Check if OpenApple is down
bmi done
.endif
and #$7F ; If not down, then clear high bit
2016-06-19 13:03:20 +00:00
done: ldx #>$0000
rts