second: forgot a file

This commit is contained in:
Vince Weaver 2023-10-26 23:50:37 -04:00
parent 31abf4ba63
commit 55937c6c9d

View File

@ -0,0 +1,234 @@
;license:MIT
;(c) 2023 by 4am
;
; drawing routines for Million Perfect Tiles Condensed
;
; Public functions:
; - draw_font_1x10
;
; VMW: commented, reformatted, minor changes, ca65 assembly
FONT_OFFSET10 = $19
;------------------------------------------------------------------------------
; draw_font_1x10
;
; in: A/Y points to zero terminated string, with x-pos and y-pos at start
; out: clobbers all registers & flags
;------------------------------------------------------------------------------
draw_font_1x10:
; store the string location
sta OUTL
sty OUTH
ldy #0
lda (OUTL), Y ; get xpos
sta CH ; save the X column offset
iny
lda (OUTL),Y ; get ypos
tay
; add two to string pointer
clc
lda OUTL
adc #2
sta dcb_1x10_loop+1
lda #0
adc OUTH
sta dcb_1x10_loop+2
; row0
lda hposn_low, Y ; get low memory offset
clc
adc CH ; add in x-coord
sta dcb_1x10_row0+4
clc
lda hposn_high, Y ; get high memory offset
adc DRAW_PAGE
sta dcb_1x10_row0+5 ; save it out
iny ; go to next row
; row1
lda hposn_low, Y
adc CH
sta dcb_1x10_row1+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row1+5
iny
; row2
lda hposn_low, Y
adc CH
sta dcb_1x10_row2+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row2+5
iny
; row3
lda hposn_low, Y
adc CH
sta dcb_1x10_row3+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row3+5
iny
; row4
lda hposn_low, Y
adc CH
sta dcb_1x10_row4+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row4+5
iny
; row5
lda hposn_low, Y
adc CH
sta dcb_1x10_row5+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row5+5
iny
; row6
lda hposn_low, Y
adc CH
sta dcb_1x10_row6+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row6+5
iny
; row7
lda hposn_low, Y
adc CH
sta dcb_1x10_row7+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row7+5
iny
; row8
lda hposn_low, Y
adc CH
sta dcb_1x10_row8+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row8+5
iny
; row9
lda hposn_low, Y
adc CH
sta dcb_1x10_row9+4
clc
lda hposn_high, Y
adc DRAW_PAGE
sta dcb_1x10_row9+5
ldx #0
dcb_1x10_loop:
dcb_1x10_loop_smc:
ldy $FDFD, X ; load next char into Y
beq dcb_1x10_done
cpy #13
beq dcb_1x10_done
not_linefeed_1x10:
; unrolled loop to write out each line
dcb_1x10_row0:
lda font_1x10_row0-FONT_OFFSET10, Y ; get 1-byte font row
sta $FDFD, X ; write out to graphics mem
dcb_1x10_row1:
lda font_1x10_row1-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row2:
lda font_1x10_row2-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row3:
lda font_1x10_row3-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row4:
lda font_1x10_row4-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row5:
lda font_1x10_row5-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row6:
lda font_1x10_row6-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row7:
lda font_1x10_row7-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row8:
lda font_1x10_row8-FONT_OFFSET10, Y
sta $FDFD, X
dcb_1x10_row9:
lda font_1x10_row9-FONT_OFFSET10, Y
sta $FDFD, X
inx ; move to next
bpl dcb_1x10_loop
dcb_1x10_done:
rts
draw_font_1x10_multiple:
draw_font_1x10_multiple_loop:
jsr draw_font_1x10
; Y is 13 if keep going
cpy #0
beq done_draw_font_1x10_multiple
; want OUTL/OUTH+X+1 in A/Y
inx ; point past the carriage return
inx ; original code doesn't adjust for x/y
inx
clc
txa
adc OUTL
sta OUTL
lda #0
adc OUTH
tay
lda OUTL
jmp draw_font_1x10_multiple_loop
done_draw_font_1x10_multiple:
rts