]> git.sur5r.net Git - cc65/commitdiff
Implemented cursor functionality.
authorStephan Mühlstrasser <stephan.muehlstrasser@web.de>
Sat, 29 Nov 2014 19:07:30 +0000 (20:07 +0100)
committerStephan Mühlstrasser <stephan.muehlstrasser@web.de>
Sat, 29 Nov 2014 19:07:30 +0000 (20:07 +0100)
cfg/c1p.cfg
libsrc/c1p/cgetc.s
libsrc/c1p/extzp.inc
libsrc/c1p/extzp.s

index 46015017b367883ca0130e8ad51508409dcb47b5..2f48dd0849ff4d3ee488623fa13fcd31f3ae6cc0 100644 (file)
@@ -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 {
index a73866a56bf1f07f02ec3418a49cd98aa262a53d..b17e76572ef9f8fd91335826a4b12c81c300d5fa 100644 (file)
@@ -2,7 +2,28 @@
 ; char cgetc (void);\r
 ;\r
         .export         _cgetc\r
+        .import         cursor\r
+\r
         .include        "c1p.inc"\r
+        .include        "extzp.inc"\r
 \r
-; Direct use of input routine from 65V PROM MONITOR\r
-_cgetc = INPUTC\r
+; Input routine from 65V PROM MONITOR, show cursor if enabled\r
+_cgetc:\r
+        lda     cursor          ; show cursor?\r
+        beq     nocursor\r
+        ldy     CURS_X\r
+        lda     (SCREEN_PTR),y  ; fetch current character\r
+        sta     CURS_SAV        ; save it\r
+        lda     #$A1            ; full white square\r
+        sta     (SCREEN_PTR),y  ; store at cursor position\r
+nocursor:\r
+        jsr     INPUTC\r
+        pha                     ; save retrieved character\r
+        lda     cursor          ; was cursor on?\r
+        beq     nocursor2\r
+        lda     CURS_SAV        ; fetch saved character\r
+        ldy     CURS_X\r
+        sta     (SCREEN_PTR),y  ; store at cursor position\r
+nocursor2:\r
+        pla                     ; restore retrieved character\r
+        rts\r
index 0f9632df22551394320c92d55ced622d7330d4eb..c5bb2b5851dc32490487df163ab4cc64cd3db651 100644 (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
index 139feffdefdc73efda1a1ccb0eda434a40e20347..c55156f820e08052815856d9134bb6b477d874f6 100644 (file)
 
 .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