]> git.sur5r.net Git - cc65/commitdiff
Fixed several problems with the new output routines
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 21 Dec 2002 14:11:32 +0000 (14:11 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 21 Dec 2002 14:11:32 +0000 (14:11 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1823 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c128/c128.inc
libsrc/c128/cgetc.s
libsrc/c128/cputc.s

index 7524b3f7394864a926dc659f7b22f421ca637062..7253143319fb40f235d5549c8ec0b2ef80eb838d 100644 (file)
@@ -39,11 +39,13 @@ FKEY_TEXT   = $100A         ; Function key texts
 ; Kernal routines
 
 ; Direct entries
+CURS_SET       = $CD57
 CURS_ON                = $CD6F
 CURS_OFF        = $CD9F
 CLRSCR         = $C142
 KBDREAD                = $C006
-PRINT          = $C00C
+NEWLINE                = $C363
+PRINT          = $C322
 
 ; Extended jump table
 SETBNK          = $FF68
index aea20f983e7bacf6a40a13a7310822ea4500d284..01a5ff0e058187e4af21de1c72f641ab465e4411 100644 (file)
@@ -21,6 +21,7 @@ _cgetc:       lda     KEY_COUNT       ; Get number of characters
 
        lda     cursor
                beq     L1
+        jsr     CURS_SET        ; Set cursor to current position
        jsr     CURS_ON
        jmp     L2
 L1:            lda     #$01
index 24d9e4e9ba2584bfc97a8eb0236218a53f150c2d..5c761118f01a923ce8d8f18147c00afa69f96701 100644 (file)
@@ -1,43 +1,73 @@
 ;
-; Ullrich von Bassewitz, 06.08.1998
+; Ullrich von Bassewitz, 2000-08-06, 2002-12-21
+; Using lots of code from MagerValp, MagerValp@cling.gu.se
 ;
 ; void cputcxy (unsigned char x, unsigned char y, char c);
 ; void cputc (char c);
 ;
 
-       .export         _cputcxy, _cputc, cputdirect, putchar
-       .export         newline, plot
+       .export         _cputcxy, _cputc, cputdirect, putchar
+       .export         newline, plot
         .constructor    initcputc
         .destructor     donecputc
-       .import         popa, _gotoxy
+       .import         popa, _gotoxy
         .import         PLOT
 
-       .include        "c128.inc"
+       .include        "c128.inc"
+
+cputdirect      = PRINT
+newline         = NEWLINE
 
 
 _cputcxy:
-       pha                     ; Save C
-       jsr     popa            ; Get Y
-       jsr     _gotoxy         ; Set cursor, drop x
-       pla                     ; Restore C
-       jmp     PRINT
+       pha                     ; Save C
+       jsr     popa            ; Get Y
+       jsr     _gotoxy         ; Set cursor, drop x
+       pla                     ; Restore C
 
 ; Plot a character - also used as internal function
 
-_cputc         = PRINT         ; let the kernal handle it
+_cputc: cmp            #$0A            ; CR?
+               beq     cr              ; Output a cr
+
+       cmp     #$0D            ; LF?
+               bne     L2
+               jmp     NEWLINE         ; Update cursor position
+
+; Printable char of some sort
+
+L2:    cmp     #' '
+               bcc     L4              ; Other control char
+       tay
+       bmi     L5
+       cmp     #$60
+       bcc     L3
+       and     #$DF
+       bne     L4              ; Branch always
+L3:    and     #$3F
+L4:     jmp     PRINT                  ; Output character
+
+; Handle character if high bit set
+
+L5:    and     #$7F
+               cmp     #$7E            ; PI?
+       bne     L6
+       lda     #$5E            ; Load screen code for PI
+       bne     L4
+L6:    ora     #$40
+       bne     L4              ; Branch always
 
-cputdirect     = $c33b
+; Carriage return
 
-newline:
-       lda     #17
-       jmp     PRINT
+cr:    lda     #0
+       sta     CURS_X
 
 ; Set cursor position, calculate RAM pointers
 
 plot:  ldy     CURS_X
        ldx     CURS_Y
        clc
-       jmp     PLOT            ; Set the new cursor
+       jmp     PLOT            ; Set the new cursor
 
 ; Write one character to the screen without doing anything else, return X
 ; position in Y