iigs-game-engine/src/blitter/Tiles10010.s

89 lines
3.7 KiB
ArmAsm

; _TBMaskedSpriteTile
;
; Renders a composited tile with masking to the code field.
_TBMaskedSpriteTile_00
_TBMaskedSpriteTile_0H
sta _X_REG ; Immedately stash the parameters
sty _Y_REG
jsr _TBCopyTileDataToCBuff ; Copy the tile data into the compositing buffer (using correct x-register)
jsr _TBCopyTileMaskToCBuff ; Copy the tile mask into the compositing buffer (using correct x-register)
jsr _TBMergeSpriteDataAndMask ; Overlay the data and mask from the sprite plane into the compositing buffer
jmp _TBMaskedCBuff ; Render the masked tile from the compositing buffer into the code field
;_TBMaskedSpriteTile_0H
; sta _X_REG
; sty _Y_REG
; jsr _TBCopyTileDataToCBuffH
; jsr _TBCopyTileMaskToCBuffH
; jsr _TBMergeSpriteDataAndMask
; jmp _TBMaskedCBuff
_TBMaskedSpriteTile_V0
_TBMaskedSpriteTile_VH
sta _X_REG
sty _Y_REG
jsr _TBCopyTileDataToCBuffV
jsr _TBCopyTileMaskToCBuffV
jsr _TBMergeSpriteDataAndMask
jmp _TBMaskedCBuff
;_TBMaskedSpriteTile_VH
; sta _X_REG
; sty _Y_REG
; jsr _TBCopyTileDataToCBuffVH
; jsr _TBCopyTileMaskToCBuffVH
; jsr _TBMergeSpriteDataAndMask
; jmp _TBMaskedCBuff
_TBMergeSpriteDataAndMask
ldx _SPR_X_REG ; set to the unaligned tile block address in the sprite plane
]line equ 0
lup 8
lda blttmp+{]line*4}
andl spritemask+{]line*SPRITE_PLANE_SPAN},x
oral spritedata+{]line*SPRITE_PLANE_SPAN},x
sta blttmp+{]line*4}
ldal spritemask+{]line*SPRITE_PLANE_SPAN},x
and blttmp+{]line*4}+32
sta blttmp+{]line*4}+32
lda blttmp+{]line*4}+2
andl spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
oral spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
sta blttmp+{]line*4}+2
ldal spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
and blttmp+{]line*4}+32+2
sta blttmp+{]line*4}+32+2
]line equ ]line+1
--^
rts
; See the Tiles00010.s blitter for additional details
_TBMaskedCBuff
CopyMaskedWordD blttmp+0;$0003
CopyMaskedWordD blttmp+4;$1003
CopyMaskedWordD blttmp+8;$2003
CopyMaskedWordD blttmp+12;$3003
CopyMaskedWordD blttmp+16;$4003
CopyMaskedWordD blttmp+20;$5003
CopyMaskedWordD blttmp+24;$6003
CopyMaskedWordD blttmp+28;$7003
inc _X_REG
inc _X_REG
CopyMaskedWordD blttmp+2;$0000
CopyMaskedWordD blttmp+6;$1000
CopyMaskedWordD blttmp+10;$2000
CopyMaskedWordD blttmp+14;$3000
CopyMaskedWordD blttmp+18;$4000
CopyMaskedWordD blttmp+22;$5000
CopyMaskedWordD blttmp+26;$6000
CopyMaskedWordD blttmp+30;$7000
rts