;
.export _cgetc
+ .constructor initcgetc
+ .destructor donecgetc
+
.import cursor
.include "c128.inc"
+;--------------------------------------------------------------------------
+
_cgetc: lda KEY_COUNT ; Get number of characters
bne L2 ; Jump if there are already chars waiting
lda cursor
beq L1
+ jsr CURS_SET ; Set cursor to current position
jsr CURS_ON
jmp L2
L1: lda #$01
ldx #0
rts
-
+;--------------------------------------------------------------------------
+; Module constructor/destructor
+
+.bss
+keyvec: .res 2
+
+.segment "INIT"
+initcgetc:
+
+; Save the old vector
+
+ lda KeyStoreVec
+ sta keyvec
+ lda KeyStoreVec+1
+ sta keyvec+1
+
+; Set the new vector. I can only hope that this works for other C128
+; versions...
+
+ lda #<$C6B7
+ ldx #>$C6B7
+ jmp SetVec
+
+.code
+donecgetc:
+ lda keyvec
+ ldx keyvec+1
+SetVec: sei
+ sta KeyStoreVec
+ stx KeyStoreVec+1
+ cli
+ rts
+
+