mirror of
https://github.com/cc65/cc65.git
synced 2025-08-08 22:25:28 +00:00
Atari: split "setcursor" function out of cgetc.s source file into setcursor.s.
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).
This commit is contained in:
@@ -6,9 +6,9 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.include "atari.inc"
|
.include "atari.inc"
|
||||||
.export _cgetc,setcursor
|
.export _cgetc
|
||||||
|
.import setcursor
|
||||||
.import KEYBDV_handler
|
.import KEYBDV_handler
|
||||||
.import cursor,mul40
|
|
||||||
|
|
||||||
_cgetc:
|
_cgetc:
|
||||||
jsr setcursor
|
jsr setcursor
|
||||||
@@ -29,43 +29,3 @@ _cgetc:
|
|||||||
pha
|
pha
|
||||||
rts
|
rts
|
||||||
.endif
|
.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
|
|
||||||
|
48
libsrc/atari/setcursor.s
Normal file
48
libsrc/atari/setcursor.s
Normal file
@@ -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
|
Reference in New Issue
Block a user