1
0
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:
Stephan Mühlstrasser 2014-11-29 20:07:30 +01:00
parent 7dac57f60d
commit ac88639f4a
4 changed files with 30 additions and 10 deletions

View File

@ -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 {

View File

@ -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

View File

@ -4,4 +4,4 @@
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
.globalzp CURS_X, CURS_Y, SCR_LINELEN, SCREEN_PTR .globalzp CURS_X, CURS_Y, CURS_SAV, SCR_LINELEN, SCREEN_PTR

View File

@ -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