1
0
mirror of https://github.com/cc65/cc65.git synced 2024-11-16 18:08:04 +00:00
cc65/libsrc/apple2/cgetc.s
Oliver Schmidt 73faf60fe0 Support randomize().
In order to have randomize() work as expected (and the Apple II random number generation in general) it is necessary to update the random counter during keypress wait just like the ROM function does.
2018-09-08 18:45:20 +02:00

53 lines
1.3 KiB
ArmAsm

;
; Kevin Ruland
;
; char cgetc (void);
;
; If open_apple key is pressed then the high-bit of the key is set.
;
.export _cgetc
.import cursor, putchardirect
.include "apple2.inc"
_cgetc:
; Cursor on ?
lda cursor
beq :+
; 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
: lda KBD
bpl :-- ; If < 128, no key pressed
; 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
done: ldx #>$0000
rts