dos33fsprogs/games/tfv/gr_hlin.s

134 lines
2.3 KiB
ArmAsm

;=============================
; decently fast hlin routines
;=============================
; can also be used to print repeated text if desperate
;================================
; hlin_double:
;================================
; HLIN Y, V2 AT A
; color in COLOR
; GBASL/GBASH set to proper address
; A, Y trashed
; at end Y points to end of line
hlin_double:
inc V2 ; drawing inclusive
sty TEMPY ; 3
and #$fe ; make even ; 2
tay ; y=A ; 2
lda gr_offsets,Y ; lookup low-res memory address ; 4
sta GBASL ; 3
clc ; 2
lda gr_offsets+1,Y ; 4
adc DRAW_PAGE ; add in draw page offset ; 3
sta GBASH ; 3
;===========
; 26
lda COLOR ; 3
ldy TEMPY ; restore ; 3
hlin_double_loop:
sta (GBASL),Y ; 6
iny ; 2
cpy V2 ; 3
bne hlin_double_loop ; 2nt/3
rts ; 6
;=================================
; hlin_double_continue: width
;=================================
; GBASL has correct offset for row/col
; V2=start, width in X
; A, X, Y trashed
; V2=xcoord at end
hlin_double_continue:
txa
clc
adc V2
sta V2
lda COLOR ; 3
hlin_double_continue_loop:
sta (GBASL),Y ; 6
iny ; 2
cpy V2
bne hlin_double_continue_loop ; 2nt/3
rts ; 6
;=============
;================================
; hlin_single:
;================================
; HLIN Y, V2 AT A
; color in COLOR
; GBASL/GBASH set to proper address
; A, Y trashed
; at end Y points to end of line
; Y, X, A trashed
hlin_single:
inc V2 ; drawing inclusive
sty TEMPY ; 3
and #$fe ; make even ; 2
php ; save if zero ; 2
tay ; y=A ; 2
lda gr_offsets,Y ; lookup low-res memory address ; 4
sta GBASL ; 3
clc ; 2
lda gr_offsets+1,Y ; 4
adc DRAW_PAGE ; add in draw page offset ; 3
sta GBASH ; 3
;===========
; 28
plp ; restore if 0
beq hlin_single_bottom
hlin_single_top:
lda COLOR
and #$f0
sta COLOR
ldy TEMPY
hlin_single_top_loop:
lda (GBASL),Y
and #$0f
ora COLOR
sta (GBASL),Y
iny
cpy V2
bne hlin_single_top_loop
rts
hlin_single_bottom:
lda COLOR
and #$0f
sta COLOR
ldy TEMPY
hlin_single_bottom_loop:
lda (GBASL),Y
and #$f0
sta (GBASL),Y
iny
cpy V2
bne hlin_single_bottom_loop
rts