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).
;
.include "atari.inc"
- .export _cgetc,setcursor
+ .export _cgetc
+ .import setcursor
.import KEYBDV_handler
- .import cursor,mul40
_cgetc:
jsr setcursor
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
--- /dev/null
+;
+; 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