]> git.sur5r.net Git - cc65/commitdiff
Atari: split "setcursor" function out of cgetc.s source file into setcursor.s.
authorChristian Groessler <chris@groessler.org>
Tue, 3 Oct 2017 19:58:52 +0000 (21:58 +0200)
committerChristian Groessler <chris@groessler.org>
Tue, 3 Oct 2017 19:58:52 +0000 (21:58 +0200)
This function is used by many other CONIO functions, and the user program not
necessarily uses 'cgetc'. Having "setcursor" in a different object file saves
space in this case and also allows the user program to override it (e.g. when
not using GRAPHICS 0 mode).

libsrc/atari/cgetc.s
libsrc/atari/setcursor.s [new file with mode: 0644]

index 2e9ebcb313ea045c86a581fe7b3ef37360624d01..f8d938dfbdacbd6b27164978d0f1bd172bde8358 100644 (file)
@@ -6,9 +6,9 @@
 ;
 
         .include "atari.inc"
-        .export _cgetc,setcursor
+        .export _cgetc
+        .import setcursor
         .import KEYBDV_handler
-        .import cursor,mul40
 
 _cgetc:
         jsr     setcursor
@@ -29,43 +29,3 @@ _cgetc:
         pha
         rts
 .endif
-
-.proc   setcursor
-
-        ldy     #0
-        lda     OLDCHR
-        sta     (OLDADR),y
-
-        lda     ROWCRS
-        jsr     mul40
-        clc
-        adc     SAVMSC          ; add start of screen memory
-        sta     OLDADR
-        txa
-        adc     SAVMSC+1
-        sta     OLDADR+1
-        lda     COLCRS
-        adc     OLDADR
-        sta     OLDADR
-        bcc     nc
-        inc     OLDADR+1
-nc:     lda     (OLDADR),y
-        sta     OLDCHR
-
-        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
diff --git a/libsrc/atari/setcursor.s b/libsrc/atari/setcursor.s
new file mode 100644 (file)
index 0000000..cf596d4
--- /dev/null
@@ -0,0 +1,48 @@
+;
+; Christian Groessler, November-2002
+;
+; cursor handling, internal function
+
+        .include "atari.inc"
+        .import cursor,mul40
+        .export setcursor
+
+.proc   setcursor
+
+        ldy     #0
+        lda     OLDCHR
+        sta     (OLDADR),y
+
+        lda     ROWCRS
+        jsr     mul40
+        clc
+        adc     SAVMSC          ; add start of screen memory
+        sta     OLDADR
+        txa
+        adc     SAVMSC+1
+        sta     OLDADR+1
+        lda     COLCRS
+        adc     OLDADR
+        sta     OLDADR
+        bcc     nc
+        inc     OLDADR+1
+nc:     lda     (OLDADR),y
+        sta     OLDCHR
+
+        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