removesprite.s
来自「symbian 的一个 二维飞行游戏 源码 及相关技术文章」· S 代码 · 共 62 行
S
62 行
@@ 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 + =
减小字号Ctrl + -
显示快捷键?