mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 19:29:37 +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
|
__HIMEM__: type = weak, value = $2000; # Presumed RAM end
|
||||||
}
|
}
|
||||||
MEMORY {
|
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;
|
RAM: file = %O, define = yes, start = %S, size = __HIMEM__ - __STACKSIZE__ - %S;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
|
@ -2,7 +2,28 @@
|
|||||||
; char cgetc (void);
|
; char cgetc (void);
|
||||||
;
|
;
|
||||||
.export _cgetc
|
.export _cgetc
|
||||||
.include "c1p.inc"
|
.import cursor
|
||||||
|
|
||||||
; Direct use of input routine from 65V PROM MONITOR
|
.include "c1p.inc"
|
||||||
_cgetc = INPUTC
|
.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
|
.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_X: .byte 0
|
||||||
CURS_Y: .byte 0
|
CURS_Y: .byte 0
|
||||||
|
CURS_SAV: .byte 0
|
||||||
SCR_LINELEN: .byte 24
|
SCR_LINELEN: .byte 24
|
||||||
SCREEN_PTR: .res 2
|
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