dos33fsprogs/demos/second/part20_credits/font_4am_1x8.s
2023-10-26 21:50:58 -04:00

199 lines
2.8 KiB
ArmAsm

;license:MIT
;(c) 2023 by 4am
;
; drawing routines for Million Perfect Tiles Condensed
;
; Public functions:
; - draw_condensed_1x8
;
; VMW: commented, reformatted, minor changes, ca65 assembly
; hacked up some more
FONT_OFFSET = $13
;------------------------------------------------------------------------------
; draw_condensed_1x8
;
; in: A/Y points to zero terminated string, with x-pos and y-pos at start
; out: clobbers all registers & flags
;------------------------------------------------------------------------------
draw_condensed_1x8:
; store the string location
sta OUTL
sty OUTH
draw_condensed_1x8_again:
ldy #0
lda (OUTL),Y
sta CH
bpl still_good
demo_demo_done:
; FIXME: stop music?
jmp demo_demo_done
still_good:
clc
lda #1
adc OUTL
sta OUTL
sta dcb_loop_1x8_smc+1
lda #0
adc OUTH
sta OUTH
sta dcb_loop_1x8_smc+2
ldy CV
; row0
lda hposn_low, Y ; get low memory offset
clc
adc CH ; add in x-coord
sta dcb_row_1x8_0+4
lda hposn_high, Y ; get high memory offset
sta dcb_row_1x8_0+5 ; save it out
iny ; go to next row
; row1
lda hposn_low, Y
adc CH
sta dcb_row_1x8_1+4
lda hposn_high, Y
sta dcb_row_1x8_1+5
iny
; row2
lda hposn_low, Y
adc CH
sta dcb_row_1x8_2+4
lda hposn_high, Y
sta dcb_row_1x8_2+5
iny
; row3
lda hposn_low, Y
adc CH
sta dcb_row_1x8_3+4
lda hposn_high, Y
sta dcb_row_1x8_3+5
iny
; row4
lda hposn_low, Y
adc CH
sta dcb_row_1x8_4+4
lda hposn_high, Y
sta dcb_row_1x8_4+5
iny
; row5
lda hposn_low, Y
adc CH
sta dcb_row_1x8_5+4
lda hposn_high, Y
sta dcb_row_1x8_5+5
iny
; row6
lda hposn_low, Y
adc CH
sta dcb_row_1x8_6+4
lda hposn_high, Y
sta dcb_row_1x8_6+5
iny
; row7
lda hposn_low, Y
adc CH
sta dcb_row_1x8_7+4
lda hposn_high, Y
sta dcb_row_1x8_7+5
ldx #0
dcb_loop_1x8:
dcb_loop_1x8_smc:
ldy $FDFD, X ; load next char into Y
beq dcb_done_1x8
; cpy #13
; bne not_linefeed
; lda #0
; sta CH
; clc
; lda CV
; adc #8
; sta CV
; inx
; lda CV
; cmp #192
; bcc dcb_loop_1x8
; lda #184
; sta CV
; stx XSAVE
; jsr scroll_screen
; ldx XSAVE
; jmp dcb_loop_1x8
not_linefeed:
; unrolled loop to write out each line
dcb_row_1x8_0:
lda font_1x8_row0-FONT_OFFSET, Y ; get 1-byte font row
sta $FDFD, X ; write out to graphics mem
dcb_row_1x8_1:
lda font_1x8_row1-FONT_OFFSET, Y
sta $FDFD, X
dcb_row_1x8_2:
lda font_1x8_row2-FONT_OFFSET, Y
sta $FDFD, X
dcb_row_1x8_3:
lda font_1x8_row3-FONT_OFFSET, Y
sta $FDFD, X
dcb_row_1x8_4:
lda font_1x8_row4-FONT_OFFSET, Y
sta $FDFD, X
dcb_row_1x8_5:
lda font_1x8_row5-FONT_OFFSET, Y
sta $FDFD, X
dcb_row_1x8_6:
lda font_1x8_row6-FONT_OFFSET, Y
sta $FDFD, X
dcb_row_1x8_7:
lda font_1x8_row7-FONT_OFFSET, Y
sta $FDFD, X
inc CH
inx ; move to next
bne dcb_loop_1x8 ; bra (well, as long as string
; is less than 255 chars)
dcb_done_1x8:
rts