mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-03 18:29:53 +00:00
199 lines
2.8 KiB
ArmAsm
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
|
|
|
|
|