📄 blit.s
字号:
@@ Copyright 2002 Kenneth Guy,
@@
.global BlitAsm__4CMap
BlitAsm__4CMap:
stmfd sp!, {r0-r12,lr}
@@ r0 CMap*
@@ - offset 0 vtable
@@ - offset 4 const TInt16* iMapData;
@@ - offset 8 TUint16* iMapDrawPoint;
@@ - offset 12 TUint16* iDrawArea;
@@ - offset 16 TUint16* iDrawEnd;
@@ - offset 20 TUint16* iScreenBase;
@@ - offset 24 TUint16* iBlitStart;
@@ - offset 28 const TUint16* iMapSprites;
add r0,r0,#16
ldmia r0, {r1,r2,r3} @ iDrawEnd,iScreenBase,iBlitStart
mov r0,#200
add r2,r2,#128 @ skip status area
add r3,r3,#64 @ skip left offscreen area
sub r1,r1,#1408 @ last line is a special case
blitLoop:
cmp r3,r1
bge overlap
@ line of pixels from iBlitStart to iScreenBase
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r12,r14};stmia r2!,{r4-r12,r14}
ldmia r3!,{r4-r11};stmia r2!,{r4-r11}
add r3,r3,#256 @ skip extra sprite
overlapReturn:
add r2,r2,#128 @ skip status area
subs r0,r0,#1
bne blitLoop
blitEnd:
ldmfd sp!, {r0-r12,lr}
@ handle returning to thumb code
bx lr
overlap:
add r1,r1,#1408
mov r5,#1152
cmp r3,r1
subge r3,r3,#0x4D000 @ length of draw area
lastBits:
ldr r7,[r3],#4
str r7,[r2],#4
cmp r3,r1
subge r3,r3,#0x4D000 @ length of draw area
subs r5,r5,#4
bne lastBits
add r3,r3,#256 @ skip extra sprite
cmp r3,r1
subge r3,r3,#0x4D000 @ length of draw area
b overlapReturn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -