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

73 lines
2.6 KiB
ArmAsm

; On entry
;
; B is set to the correct BG1 data bank
; A is set to the the tile descriptor
; Y is set to the top-left address of the tile in the BG1 data bank
;
; tmp0/tmp1 is reserved
_RenderTileBG1
pha ; Save the tile descriptor
and #TILE_VFLIP_BIT+TILE_HFLIP_BIT ; Only horizontal and vertical flips are supported for BG1
xba
tax
pla
and #TILE_ID_MASK ; Mask out the ID and save just that
_Mul128 ; multiplied by 128
jmp (:actions,x)
:actions dw _TBSolidBG1_00,_TBSolidBG1_0H,_TBSolidBG1_V0,_TBSolidBG1_VH
_TBSolidBG1_00
tax
]line equ 0
lup 8
ldal tiledata+{]line*4},x
sta: $0000+{]line*$0100},y
ldal tiledata+{]line*4}+2,x
sta: $0002+{]line*$0100},y
]line equ ]line+1
--^
rts
_TBSolidBG1_0H
tax
]line equ 0
lup 8
ldal tiledata+{]line*4}+64,x
sta: $0000+{]line*$0100},y
ldal tiledata+{]line*4}+64+2,x
sta: $0002+{]line*$0100},y
]line equ ]line+1
--^
rts
_TBSolidBG1_V0
tax
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4},x
sta: $0000+{]dest*$0100},y
ldal tiledata+{]src*4}+2,x
sta: $0002+{]dest*$0100},y
]src equ ]src-1
]dest equ ]dest+1
--^
rts
_TBSolidBG1_VH
tax
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4}+64,x
sta: $0000+{]dest*$0100},y
ldal tiledata+{]src*4}+64+2,x
sta: $0002+{]dest*$0100},y
]src equ ]src-1
]dest equ ]dest+1
--^
rts