📄 removesprite.s
字号:
@@ Copyright 2002 Kenneth Guy,
@@
.global RemoveAsm__12TSprite32x24
RemoveAsm__12TSprite32x24:
stmfd sp!, {r0-r12,lr}
@@ r0 TSprite32x24*
@@ - offset 0 TUint16* iSpritePos;
@@ - offset 4 TUint16* iDrawEnd;
@@ - offset 8 TUint16 iBehindSprite[32*24]
ldmia r0, {r2,r3} @ iSpritePos,iDrawEnd
add r1,r0,#8 @ iBehindSprite
mov r14,#24 @ sprite is 24 lines
sub r3,r3,#64 @ handle end of map area
RemoveSpritePlotLoop:
cmp r2,r3
bge removeSpriteOverlap
ldmia r1!,{r5-r12}
stmia r2!,{r5-r12}
ldmia r1!,{r5-r12}
stmia r2!,{r5-r12}
add r2,r2,#1344 @ next line
removeSpriteOverlapReturn:
subs r14,r14,#1
bne RemoveSpritePlotLoop @ loop 24 times (24 lines in a sprite)
ldmfd sp!, {r0-r12,lr}
@ handle returning to thumb code
bx lr
removeSpriteOverlap:
add r3,r3,#64
cmp r2,r3
subge r2,r2,#0x4D000 @ length of draw area
mov r10,#16
removeSpriteOverlapLoop:
ldr r5,[r1],#4
str r5,[r2],#4
cmp r2,r3
subge r2,r2,#0x4D000 @ length of draw area
subs r10,r10,#1
bne removeSpriteOverlapLoop
add r2,r2,#1344 @ next line
cmp r2,r3
subge r2,r2,#0x4D000 @ length of draw area
b removeSpriteOverlapReturn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -