Implemented cursor functionality.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user