;
-; Ullrich von Bassewitz, 06.08.1998
+; Ullrich von Bassewitz, 1998-08-06, 2009-09-26
;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
+; void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
+; void __fastcall__ cputc (char c);
;
.export _cputcxy, _cputc, cputdirect, putchar
- .export advance, newline, plot
+ .export newline, plot
.import popa, _gotoxy
- .import xsize, revers
+ .import PLOT
.include "c64.inc"
- .include "../cbm/cbm.inc"
+
_cputcxy:
pha ; Save C
; Plot a character - also used as internal function
-_cputc: cmp #$0D ; CR?
+_cputc: cmp #$0A ; CR?
bne L1
lda #0
sta CURS_X
beq plot ; Recalculate pointers
-L1: cmp #$0A ; LF?
- bne L2
- ldy CURS_Y
- iny
- bne newline ; Recalculate pointers
+L1: cmp #$0D ; LF?
+ beq newline ; Recalculate pointers
; Printable char of some sort
-L2: cmp #' '
+ cmp #' '
bcc cputdirect ; Other control char
tay
bmi L10
cmp #$60
- bcc L3
+ bcc L2
and #$DF
bne cputdirect ; Branch always
-L3: and #$3F
+L2: and #$3F
cputdirect:
- jsr putchar ; Write the character to the screen
+ jsr putchar ; Write the character to the screen
; Advance cursor position
advance:
iny
- cpy xsize
- bne L9
- ldy #0 ; new line
+ cpy #XSIZE
+ bne L3
+ jsr newline ; new line
+ ldy #0 ; + cr
+L3: sty CURS_X
+ rts
+
newline:
clc
- lda xsize
+ lda #XSIZE
adc SCREEN_PTR
sta SCREEN_PTR
bcc L4
inc SCREEN_PTR+1
-L4: clc
- lda xsize
+ clc
+L4: lda #XSIZE
adc CRAM_PTR
sta CRAM_PTR
bcc L5
inc CRAM_PTR+1
L5: inc CURS_Y
-L9: sty CURS_X
rts
; Handle character if high bit set
-; Set cursor position, calculate RAM pointers
+; 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
; position in Y
putchar:
- ora revers ; Set revers bit
+ ora RVS ; Set revers bit
ldy CURS_X
sta (SCREEN_PTR),y ; Set char
lda CHARCOLOR