]> git.sur5r.net Git - cc65/commitdiff
Fixed a problem with a disabled cursor: Switching off the cursor using the
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 18 Feb 2010 20:31:50 +0000 (20:31 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 18 Feb 2010 20:31:50 +0000 (20:31 +0000)
kernal routine does not work, when the cursor is not at the same position
where it was switched on, because when switching it on, the kernal remembers
the character attribute and restores this when switching it off. So characters
may get the wrong attribute. The solution is to always switch the cursor on,
before switching it off.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4592 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c128/cgetc.s

index f3f62ff53db4146568940a54616c25fba1570edd..78e06b1eb84b84e8e7594d6b5cea1155e2bfb0d0 100644 (file)
 ;--------------------------------------------------------------------------
 
 _cgetc:        lda     KEY_COUNT       ; Get number of characters
-       bne     L2              ; Jump if there are already chars waiting
+               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
+       lda     cursor
+               bne     L1
+        lda    #$01
        jsr     CURS_OFF
-L2:            lda     KEY_COUNT       ; Check characters again
-       beq     L2
-       jsr     CURS_OFF        ; Switch cursor off, if characters available
+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
+L2:     jsr     KBDREAD                ; Read char and return in A
+        ldx     #0
        rts
 
 ;--------------------------------------------------------------------------