From ea4d2f4e6f2df8f0ccb62a1dca33a56af59743aa Mon Sep 17 00:00:00 2001 From: cuz Date: Sat, 21 Dec 2002 14:11:32 +0000 Subject: [PATCH] Fixed several problems with the new output routines git-svn-id: svn://svn.cc65.org/cc65/trunk@1823 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/c128/c128.inc | 4 ++- libsrc/c128/cgetc.s | 1 + libsrc/c128/cputc.s | 62 ++++++++++++++++++++++++++++++++------------ 3 files changed, 50 insertions(+), 17 deletions(-) diff --git a/libsrc/c128/c128.inc b/libsrc/c128/c128.inc index 7524b3f73..725314331 100644 --- a/libsrc/c128/c128.inc +++ b/libsrc/c128/c128.inc @@ -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 diff --git a/libsrc/c128/cgetc.s b/libsrc/c128/cgetc.s index aea20f983..01a5ff0e0 100644 --- a/libsrc/c128/cgetc.s +++ b/libsrc/c128/cgetc.s @@ -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 diff --git a/libsrc/c128/cputc.s b/libsrc/c128/cputc.s index 24d9e4e9b..5c761118f 100644 --- a/libsrc/c128/cputc.s +++ b/libsrc/c128/cputc.s @@ -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 -- 2.39.5