mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-16 23:20:43 +00:00
252 lines
3.4 KiB
ArmAsm
252 lines
3.4 KiB
ArmAsm
;license:MIT
|
|
;(c) 2023 by 4am
|
|
;
|
|
; drawing routines for Million Perfect Tiles Condensed
|
|
;
|
|
; Public functions:
|
|
; - DrawCondensedString
|
|
;
|
|
|
|
; VMW: commented, reformatted, minor changes, ca65 assembly
|
|
; hacked up some more
|
|
|
|
FONT_OFFSET = $13
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
; DrawCondensedString
|
|
;
|
|
; in: A/Y points to zero terminated string, with x-pos and y-pos at start
|
|
; out: clobbers all registers & flags
|
|
;------------------------------------------------------------------------------
|
|
DrawCondensedString:
|
|
|
|
; store the string location
|
|
|
|
sta OUTL
|
|
sty OUTH
|
|
|
|
DrawCondensedStringAgain:
|
|
|
|
lda OUTL
|
|
sta dcb_loop_smc+1
|
|
lda OUTH
|
|
sta dcb_loop_smc+2
|
|
|
|
|
|
ldy CV
|
|
|
|
; row0
|
|
|
|
lda hposn_low, Y ; get low memory offset
|
|
clc
|
|
adc CH ; add in x-coord
|
|
sta dcb_row0+4
|
|
lda hposn_high, Y ; get high memory offset
|
|
sta dcb_row0+5 ; save it out
|
|
iny ; go to next row
|
|
|
|
; row1
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row1+4
|
|
lda hposn_high, Y
|
|
sta dcb_row1+5
|
|
iny
|
|
|
|
; row2
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row2+4
|
|
lda hposn_high, Y
|
|
sta dcb_row2+5
|
|
iny
|
|
|
|
; row3
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row3+4
|
|
lda hposn_high, Y
|
|
sta dcb_row3+5
|
|
iny
|
|
|
|
; row4
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row4+4
|
|
lda hposn_high, Y
|
|
sta dcb_row4+5
|
|
iny
|
|
|
|
; row5
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row5+4
|
|
lda hposn_high, Y
|
|
sta dcb_row5+5
|
|
iny
|
|
|
|
; row6
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row6+4
|
|
lda hposn_high, Y
|
|
sta dcb_row6+5
|
|
iny
|
|
|
|
; row7
|
|
|
|
lda hposn_low, Y
|
|
adc CH
|
|
sta dcb_row7+4
|
|
lda hposn_high, Y
|
|
sta dcb_row7+5
|
|
|
|
ldx #0
|
|
dcb_loop:
|
|
dcb_loop_smc:
|
|
ldy $FDFD, X ; load next char into Y
|
|
beq dcb_done
|
|
|
|
cpy #13
|
|
bne not_linefeed
|
|
|
|
lda #0
|
|
sta CH
|
|
clc
|
|
lda CV
|
|
adc #8
|
|
sta CV
|
|
inx
|
|
|
|
lda CV
|
|
cmp #192
|
|
bcc dcb_loop
|
|
|
|
lda #184
|
|
sta CV
|
|
|
|
stx XSAVE
|
|
jsr scroll_screen
|
|
ldx XSAVE
|
|
|
|
jmp dcb_loop
|
|
|
|
|
|
not_linefeed:
|
|
; unrolled loop to write out each line
|
|
|
|
dcb_row0:
|
|
lda CondensedRow0-FONT_OFFSET, Y ; get 1-byte font row
|
|
sta $FDFD, X ; write out to graphics mem
|
|
dcb_row1:
|
|
lda CondensedRow1-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
dcb_row2:
|
|
lda CondensedRow2-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
dcb_row3:
|
|
lda CondensedRow3-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
dcb_row4:
|
|
lda CondensedRow4-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
dcb_row5:
|
|
lda CondensedRow5-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
dcb_row6:
|
|
lda CondensedRow6-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
dcb_row7:
|
|
lda CondensedRow7-FONT_OFFSET, Y
|
|
sta $FDFD, X
|
|
|
|
inc CH
|
|
inx ; move to next
|
|
|
|
bne dcb_loop ; bra (well, as long as string
|
|
; is less than 255 chars)
|
|
|
|
dcb_done:
|
|
|
|
; point to location after
|
|
sec ; always add 1
|
|
txa
|
|
adc OUTL
|
|
sta OUTL
|
|
lda #0
|
|
adc OUTH
|
|
sta OUTH
|
|
|
|
rts
|
|
|
|
|
|
;================================
|
|
;================================
|
|
; scroll_screen
|
|
;================================
|
|
;================================
|
|
; scrolls hgr page1 up by 8, filling with empty space at bottom
|
|
; trashes A,X,Y
|
|
|
|
scroll_screen:
|
|
ldx #8
|
|
stx SCROLL_IN
|
|
ldx #0
|
|
stx SCROLL_OUT
|
|
|
|
scroll_yloop:
|
|
ldx SCROLL_IN
|
|
lda hposn_low,X
|
|
sta xloop_smc1+1
|
|
lda hposn_high,X
|
|
sta xloop_smc1+2
|
|
|
|
ldx SCROLL_OUT
|
|
lda hposn_low,X
|
|
sta xloop_smc2+1
|
|
lda hposn_high,X
|
|
sta xloop_smc2+2
|
|
|
|
ldy #39
|
|
scroll_xloop:
|
|
xloop_smc1:
|
|
lda $2000,Y
|
|
xloop_smc2:
|
|
sta $2000,Y
|
|
dey
|
|
bpl scroll_xloop
|
|
|
|
inc SCROLL_IN
|
|
inc SCROLL_OUT
|
|
|
|
lda SCROLL_IN
|
|
cmp #192
|
|
bne scroll_yloop
|
|
|
|
; blank bottom line
|
|
|
|
|
|
lda #$00
|
|
ldy #39
|
|
scroll_hline_xloop:
|
|
sta $23D0,Y
|
|
sta $27D0,Y
|
|
sta $2BD0,Y
|
|
sta $2FD0,Y
|
|
sta $33D0,Y
|
|
sta $37D0,Y
|
|
sta $3BD0,Y
|
|
sta $3FD0,Y
|
|
dey
|
|
bpl scroll_hline_xloop
|
|
|
|
rts
|
|
|