]> git.sur5r.net Git - cc65/blobdiff - libsrc/c128/cgetc.s
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / libsrc / c128 / cgetc.s
index aea20f983e7bacf6a40a13a7310822ea4500d284..46f13d197c18214c54e4429d7f3a19d19cb428d0 100644 (file)
@@ -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_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     CURS_SET        ; Set cursor to current position
+        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
 
-               jsr     KBDREAD         ; Read char and return in A
-       ldx     #0
-       rts
+L2:     jsr     KBDREAD         ; Read char and return in A
+        ldx     #0
+        rts
 
 ;--------------------------------------------------------------------------
 ; Module constructor/destructor
 
 .bss
-keyvec:        .res    2
+keyvec: .res    2
 
-.code
+.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
-
-SetVec:        sei
-       sta     KeyStoreVec
-       stx     KeyStoreVec+1
-       cli
-       rts
+        lda     #<$C6B7
+        ldx     #>$C6B7
+        jmp     SetVec
 
+.code
 donecgetc:
-        lda     #$00
-        sta     SCROLL
-       lda     keyvec
-       ldx     keyvec+1
-       bne     SetVec
+        lda     keyvec
+        ldx     keyvec+1
+SetVec: sei
+        sta     KeyStoreVec
+        stx     KeyStoreVec+1
+        cli
+        rts
+