blit.s

来自「symbian 的一个 二维飞行游戏 源码 及相关技术文章」· S 代码 · 共 90 行

S
90
字号
@@  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 + =
减小字号Ctrl + -
显示快捷键?