mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
Implemented cursor functionality.
This commit is contained in:
parent
7dac57f60d
commit
ac88639f4a
@ -14,7 +14,8 @@ SYMBOLS {
|
||||
__HIMEM__: type = weak, value = $2000; # Presumed RAM end
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0002, size = $001A + $0005;
|
||||
# for size of ZP see runtime/zeropage.s and c1p/extzp.s
|
||||
ZP: file = "", define = yes, start = $0002, size = $001A + $0006;
|
||||
RAM: file = %O, define = yes, start = %S, size = __HIMEM__ - __STACKSIZE__ - %S;
|
||||
}
|
||||
SEGMENTS {
|
||||
|
@ -2,7 +2,28 @@
|
||||
; char cgetc (void);
|
||||
;
|
||||
.export _cgetc
|
||||
.include "c1p.inc"
|
||||
.import cursor
|
||||
|
||||
; Direct use of input routine from 65V PROM MONITOR
|
||||
_cgetc = INPUTC
|
||||
.include "c1p.inc"
|
||||
.include "extzp.inc"
|
||||
|
||||
; Input routine from 65V PROM MONITOR, show cursor if enabled
|
||||
_cgetc:
|
||||
lda cursor ; show cursor?
|
||||
beq nocursor
|
||||
ldy CURS_X
|
||||
lda (SCREEN_PTR),y ; fetch current character
|
||||
sta CURS_SAV ; save it
|
||||
lda #$A1 ; full white square
|
||||
sta (SCREEN_PTR),y ; store at cursor position
|
||||
nocursor:
|
||||
jsr INPUTC
|
||||
pha ; save retrieved character
|
||||
lda cursor ; was cursor on?
|
||||
beq nocursor2
|
||||
lda CURS_SAV ; fetch saved character
|
||||
ldy CURS_X
|
||||
sta (SCREEN_PTR),y ; store at cursor position
|
||||
nocursor2:
|
||||
pla ; restore retrieved character
|
||||
rts
|
||||
|
@ -4,4 +4,4 @@
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
|
||||
.globalzp CURS_X, CURS_Y, SCR_LINELEN, SCREEN_PTR
|
||||
.globalzp CURS_X, CURS_Y, CURS_SAV, SCR_LINELEN, SCREEN_PTR
|
||||
|
@ -11,13 +11,11 @@
|
||||
|
||||
.segment "EXTZP" : zeropage
|
||||
|
||||
; The following values get initialized from a table in the startup code.
|
||||
; While this sounds crazy, it has reasons that have to do with modules (and
|
||||
; we have the space anyway). So when changing anything, be sure to adjust the
|
||||
; initializer table
|
||||
CURS_X: .byte 0
|
||||
CURS_Y: .byte 0
|
||||
CURS_SAV: .byte 0
|
||||
SCR_LINELEN: .byte 24
|
||||
SCREEN_PTR: .res 2
|
||||
|
||||
; size 5
|
||||
; size 6
|
||||
; Adjust size of this segment in c1p.cfg if the size changes
|
||||
|
Loading…
Reference in New Issue
Block a user