42 lines
886 B
ArmAsm
42 lines
886 B
ArmAsm
include "includes.i"
|
|
|
|
xdef BlitFillColor
|
|
|
|
BlitFillColor:
|
|
;; kills a0,d2,d3,d5,d5
|
|
;; a0 - bitplane
|
|
;; d0 - color#
|
|
;; d1 - height
|
|
;; d2 - ypos
|
|
|
|
;; movem.l d2-d5/a0,-(sp)
|
|
mulu.w #BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH,d2
|
|
add.l d2,a0
|
|
move.b #0,d3 ; bitplane #
|
|
.loop:
|
|
move.w d1,d4
|
|
btst d3,d0 ; is the color's bit set in this plane?
|
|
beq .zero
|
|
move.w #BLIT_DEST|$FF,d5 ; yes ? all ones
|
|
bra .doblit
|
|
.zero
|
|
move.w #BLIT_DEST|$0,d5 ; no ? all zeros
|
|
.doblit
|
|
WaitBlitter
|
|
|
|
move.w #0,BLTCON1(A6)
|
|
move.w d5,BLTCON0(A6)
|
|
move.w #BITPLANE_WIDTH_BYTES*(SCREEN_BIT_DEPTH-1),BLTDMOD(a6)
|
|
move.l a0,BLTDPTH(a6)
|
|
|
|
lsl.w #6,d4
|
|
ori.w #BITPLANE_WIDTH_WORDS,d4
|
|
move.w d4,BLTSIZE(a6)
|
|
add.b #1,d3
|
|
add.w #BITPLANE_WIDTH_BYTES,a0
|
|
cmp.b #SCREEN_BIT_DEPTH,d3 ; all planes for a single line done ?
|
|
bne .loop ; no ? do the next plane
|
|
|
|
;; movem.l (sp)+,d2-d5/a0
|
|
rts
|