gigatron/rom/Contrib/at67/gbas/runtime/sprite_ROMv3.i
2025-01-28 19:17:01 +03:00

83 lines
2.5 KiB
OpenEdge ABL

; do *NOT* use register4 to register7 during time slicing
spriteId EQU register0
spriteXY EQU register1
spriteAddrs EQU register2
%SUB drawSprite_
drawSprite_ PUSH
LDWI _spritesLut_
ADDW spriteId
ADDW spriteId
DEEK
STW spriteAddrs ; get sprite address table
drawS_loop LDW spriteAddrs
DEEK ; get source address
BEQ drawS_exit
STW giga_sysArg0
INC spriteAddrs
INC spriteAddrs
LDW spriteAddrs
DEEK ; get stripe destination offset
ADDW spriteXY
SYS 64
INC spriteAddrs
INC spriteAddrs
%if TIME_SLICING
CALL realTimeStubAddr
%endif
BRA drawS_loop
drawS_exit POP
RET
%ENDS
%SUB drawSprite
drawSprite PUSH
LDWI SYS_Sprite6_v3_64
STW giga_sysFn
LDWI drawSprite_
CALL giga_vAC
POP
RET
%ENDS
%SUB drawSpriteX
drawSpriteX PUSH
LDWI SYS_Sprite6x_v3_64
STW giga_sysFn
LDWI drawSprite_
CALL giga_vAC
POP
RET
%ENDS
%SUB drawSpriteY
drawSpriteY PUSH
LDWI SYS_Sprite6y_v3_64
STW giga_sysFn
LDWI drawSprite_
CALL giga_vAC
POP
RET
%ENDS
%SUB drawSpriteXY
drawSpriteXY PUSH
LDWI SYS_Sprite6xy_v3_64
STW giga_sysFn
LDWI drawSprite_
CALL giga_vAC
POP
RET
%ENDS
%SUB getSpriteLUT
getSpriteLUT LDWI _spritesLut_
ADDW spriteId
ADDW spriteId
DEEK
DEEK
RET
%ENDS