X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fc128%2Fcgetc.s;h=46f13d197c18214c54e4429d7f3a19d19cb428d0;hb=f16516047a551319c82debd339ded8bc2b587212;hp=f3f62ff53db4146568940a54616c25fba1570edd;hpb=d0bee35728a55148fea9bd8d90bfef36b7e7de86;p=cc65 diff --git a/libsrc/c128/cgetc.s b/libsrc/c128/cgetc.s index f3f62ff53..46f13d197 100644 --- a/libsrc/c128/cgetc.s +++ b/libsrc/c128/cgetc.s @@ -4,67 +4,69 @@ ; char cgetc (void); ; - .export _cgetc + .export _cgetc .constructor initcgetc .destructor donecgetc - .import cursor + .import cursor - .include "c128.inc" + .include "c128.inc" ;-------------------------------------------------------------------------- -_cgetc: lda KEY_COUNT ; Get number of characters - bne L2 ; Jump if there are already chars waiting +_cgetc: lda KEY_COUNT ; Get number of characters + bne L2 ; Jump if there are already chars waiting -; Switch on the cursor if needed +; Switch on the cursor if needed. We MUST always switch the cursor on, +; before switching it off, because switching it off will restore the +; character attribute remembered when it was switched on. So just switching +; it off will restore the wrong character attribute. - lda cursor - beq L1 jsr CURS_SET ; Set cursor to current position - jsr CURS_ON - jmp L2 -L1: lda #$01 - jsr CURS_OFF -L2: lda KEY_COUNT ; Check characters again - beq L2 - jsr CURS_OFF ; Switch cursor off, if characters available - - jsr KBDREAD ; Read char and return in A - ldx #0 - rts + jsr CURS_ON + lda cursor + bne L1 + lda #$01 + jsr CURS_OFF +L1: lda KEY_COUNT ; Check characters again + beq L1 + jsr CURS_OFF ; Switch cursor off, if characters available + +L2: jsr KBDREAD ; Read char and return in A + ldx #0 + rts ;-------------------------------------------------------------------------- ; Module constructor/destructor .bss -keyvec: .res 2 +keyvec: .res 2 .segment "INIT" initcgetc: ; Save the old vector - lda KeyStoreVec - sta keyvec - lda KeyStoreVec+1 - sta keyvec+1 + 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 + lda #<$C6B7 + ldx #>$C6B7 jmp SetVec .code donecgetc: - lda keyvec - ldx keyvec+1 -SetVec: sei - sta KeyStoreVec - stx KeyStoreVec+1 - cli - rts + lda keyvec + ldx keyvec+1 +SetVec: sei + sta KeyStoreVec + stx KeyStoreVec+1 + cli + rts