1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
;
; void cputcxy (unsigned char x, unsigned char y, char c);
; void cputc (char c);
;
.export _cputcxy, _cputc, cputdirect, putchar
.export newline, plot
.import gotoxy
.import PLOT
.import xsize
.import fontdata
.import _plotlo
.importzp tmp3,tmp4
.importzp ptr3
.include "gamate.inc"
.include "extzp.inc"
_cputcxy:
pha ; Save C
jsr gotoxy ; Set cursor, drop x and y
pla ; Restore C
; Plot a character - also used as internal function
_cputc: cmp #$0d ; CR?
bne L1
lda #0
sta CURS_X
beq plot ; Recalculate pointers
L1: cmp #$0a ; LF?
beq newline ; Recalculate pointers
; Printable char of some sort
cputdirect:
jsr putchar ; Write the character to the screen
; Advance cursor position
advance:
ldy CURS_X
iny
cpy xsize
bne L3
jsr newline ; new line
ldy #0 ; + cr
L3: sty CURS_X
jmp plot
newline:
inc CURS_Y
; Set cursor position, calculate RAM pointers
plot: ldy CURS_X
ldx CURS_Y
clc
jmp PLOT ; Set the new cursor
; Write one character to the screen without doing anything else, return X
; position in Y
putchar:
sta ptr3
txa
pha
lda #0
sta ptr3+1
; char index * 8
asl ptr3
rol ptr3+1
asl ptr3
rol ptr3+1
asl ptr3
rol ptr3+1
; plus fontdata base address
lda ptr3
clc
adc #<(fontdata-$f8)
sta ptr3
lda ptr3+1
adc #>(fontdata-$f8)
sta ptr3+1
lda CHARCOLOR
and #1
beq @skip_plane1
lda #LCD_XPOS_PLANE1
clc
adc CURS_X
sta LCD_X
ldy #$f8
@copylp1:
lda (ptr3),y
eor RVS
sta LCD_DATA
iny
bne @copylp1
@skip_plane1:
lda CHARCOLOR
and #2
beq @skip_plane2
lda #LCD_XPOS_PLANE2
clc
adc CURS_X
sta LCD_X
ldx CURS_Y
lda _plotlo,x
sta LCD_Y
ldy #$f8
@copylp2:
lda (ptr3),y
eor RVS
sta LCD_DATA
iny
bne @copylp2
@skip_plane2:
pla
tax
ldy CURS_X
rts
;-------------------------------------------------------------------------------
; force the init constructor to be imported
.import initconio
conio_init = initconio
|