Files
cc65/libsrc/apple2/cgetc.s
Oliver Schmidt 7c2671be2a Disable interrupts during aux memory access.
Interrupt handlers rather likely access text screen holes. Especially MSLOT is obligatory for every interrupt handler that requires access to an extension ROM ($C800-$CFFE) in order to be able to re-enable the extension ROM that was enabled when the interrupt occured. Those text screen holes only hold valid values in main memory so interrupts must be disabled while the aux memory text screen is mapped.
2025-03-13 22:22:28 +01:00

54 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 "zeropage.inc"
.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 ; Saves old character in tmp3
; 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
lda tmp3
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