]> git.sur5r.net Git - cc65/commitdiff
honour cursor setting
authorcpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 3 Nov 2002 22:10:55 +0000 (22:10 +0000)
committercpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 3 Nov 2002 22:10:55 +0000 (22:10 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1481 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/atari/cgetc.s

index 82b6cdd8e5e0bef570c92fca19936aac3ed186ec..62e00d2e51960a6d9843546228e301dfcf59db38 100644 (file)
@@ -1,21 +1,48 @@
 ;
-; get a kbd char.
+; Christian Groessler, November-2002
 ;
+; get a char from the keyboard
 ; char cgetc(void)
 ;
 
-        .include "atari.inc"
-        .export _cgetc
-        
+       .include "atari.inc"
+       .export _cgetc
+       .import cursor
+       
 _cgetc:
+       jsr     setcursor
        jsr     @1
        ldx     #0
        rts
 
-@1:    lda     KEYBDV+5
-        pha
-        lda     KEYBDV+4
-        pha
+@1:    lda     KEYBDV+5
+       pha
+       lda     KEYBDV+4
+       pha
        lda     #12
        sta     ICAX1Z          ; fix problems with direct call to KEYBDV
-        rts
+       rts
+
+
+.proc  setcursor
+
+       lda     OLDCHR          ; get char at current cursor position
+       ldy     #0              ; needed later
+
+       ldx     cursor          ; current cursor setting as requested by the user
+       beq     off
+       ldx     #0
+       beq     cont
+
+off:   inx
+cont:  stx     CRSINH          ; update system variable
+
+       beq     turnon
+       and     #$7f            ; clear high bit / inverse flag
+finish:        sta     (OLDADR),y      ; update on-screen display
+       rts
+
+turnon:        ora     #$80            ; set high bit / inverse flag
+       bne     finish
+
+.endproc