--- np2/wince/arm/sdrawq16.s 2003/12/08 17:57:29 1.2 +++ np2/wince/arm/sdrawq16.s 2003/12/21 23:27:09 1.3 @@ -1,48 +1,23 @@ -; それ以前にメモリが遅いから C版とあんまり変らないような… - - -NP2PALS_TXT equ 10 -NP2PALS_GRPH equ 16 - -NP2PAL_TEXT equ 0 -NP2PAL_SKIP equ NP2PALS_TXT -NP2PAL_GRPH equ (NP2PAL_SKIP + NP2PALS_GRPH) -NP2PAL_TEXT2 equ (NP2PAL_GRPH + NP2PALS_GRPH) - -SURFACE_WIDTH equ 640 - -S_SRC equ 0 -S_SRC2 equ 4 -S_DST equ 8 -S_WIDTH equ 12 -S_XBYTES equ 16 -S_Y equ 20 -S_XALIGN equ 24 -S_YALIGN equ 28 -S_DIRTY equ 32 - + INCLUDE sdraw.inc IMPORT np2_pal16 - EXPORT sdraw_getproctbl AREA .text, CODE, READONLY qvga16p_0 stmdb sp!, {r4 - r8, lr} - ldr r6, [r0, #S_SRC] - ldr r7, [r0, #S_DST] - ldr r8, [r0, #S_WIDTH] + add r0, r0, #S_HDRSIZE + ldr lr, pal16_0 ldr r3, [r0, #S_XALIGN] ldr r4, [r0, #S_Y] - ldr r5, [r0, #S_YALIGN] - ldr lr, pal16_0 ldr lr, [lr] - add lr, lr, lr, lsr #16 - mov lr, lr, lsr #16 - add lr, lr, lr, lsl #16 - add r0, r0, #S_DIRTY -putylp_0 ldrh r12, [r0, r4] - cmp r12, #0 + ldr r5, [r0, #S_YALIGN] + ldr r6, [r0, #S_SRC] + ldr r7, [r0, #S_DST] + ldrh r12, [r4, r0] + ldr r8, [r0, #S_WIDTH] + orr lr, lr, lr lsr #16 +putylp_0 cmp r12, #0 beq putyed_0 mov r12, r7 mov r2, #0 @@ -55,299 +30,314 @@ putyed_0 add r4, r4, #2 add r6, r6, #(SURFACE_WIDTH * 2) add r7, r7, r5 cmp r4, r1 + ldrcch r12, [r4, r0] bcc putylp_0 - str r6, [r0, #(S_SRC - S_DIRTY)] - str r7, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r6, [r0, #S_SRC] + str r7, [r0, #S_DST] + str r4, [r0, #S_Y] ldmia sp!, {r4 - r8, pc} pal16_0 dcd (np2_pal16 + (NP2PAL_TEXT2 * 4)) qvga16p_1 stmdb sp!, {r4 - r11, lr} + add r0, r0, #S_HDRSIZE ldr r11, pal16_1 ldr lr, pmask_1 - ldr r7, [r0, #S_SRC] - ldr r8, [r0, #S_DST] - ldr r10, [r0, #S_WIDTH] ldr r3, [r0, #S_XALIGN] ldr r4, [r0, #S_Y] ldr r5, [r0, #S_YALIGN] - add r0, r0, #S_DIRTY -putylp_1 ldrh r12, [r0, r4] - cmp r12, #0 + ldr r7, [r0, #S_SRC] + ldrh r12, [r0, r4] + ldr r8, [r0, #S_DST] + ldr r10, [r0, #S_WIDTH] +putylp_1 cmp r12, #0 beq putyed_1 - str r4, [r0, #(S_Y - S_DIRTY)] - mov r9, r8 + ldr r9, [r7] ; r2 = 0 + str r4, [r0, #S_Y] + str r8, [r0, #S_DST] mov r2, #0 -putxlp_1 ldr r4, [r7, r2] - and r12, r4, #255 - ldr r5, [r11, r12, lsl #2] - mov r12, r4, lsr #8 +putxlp_1 and r5, r9, #255 + mov r12, r9 lsr #8 and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r5, r5, r12 - mov r12, r4, lsr #16 - and r12, r12, #255 - ldr r6, [r11, r12, lsl #2] - mov r12, r4, lsr #24 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 - add r12, r2, #SURFACE_WIDTH - ldr r4, [r7, r12] - and r12, r4, #255 - ldr r12, [r11, r12, lsl #2] + ldr r5, [r11, r5 lsl #2] + ldr r12, [r11, r12 lsl #2] + mov r4, r9 lsr #16 + and r4, r4, #255 add r5, r5, r12 - mov r12, r4, lsr #8 + mov r12, r9 lsr #24 + ldr r6, [r11, r4 lsl #2] + ldr r12, [r11, r12 lsl #2] + add r9, r2, #SURFACE_WIDTH + ldr r9, [r9, r7] + add r6, r12, r6 + add r2, r2, #4 + and r4, r9, #255 + mov r12, r9 lsr #8 and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] + ldr r4, [r11, r4 lsl #2] + ldr r12, [r11, r12 lsl #2] + mov r9, r9 lsr #16 + add r5, r5, r4 add r5, r5, r12 - mov r12, r4, lsr #16 - and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 - mov r12, r4, lsr #24 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 + and r4, r9, #255 + mov r12, r9 lsr #8 + ldr r4, [r11, r4 lsl #2] + ldr r12, [r11, r12 lsl #2] and r5, r5, lr - mov r12, r5, lsr #2 - add r12, r12, r5, lsr #18 - strh r12, [r9], r3 + add r6, r6, r4 + add r6, r6, r12 and r6, r6, lr - mov r12, r6, lsr #2 - add r12, r12, r6, lsr #18 - strh r12, [r9], r3 - add r2, r2, #4 + mov r9, r5 lsr #2 + add r9, r9, r5 lsr #18 + mov r12, r6 lsr #2 + add r12, r12, r6 lsr #18 + strh r9, [r8], r3 + strh r12, [r8], r3 cmp r2, r10 + ldrcc r9, [r2, r7] bcc putxlp_1 - ldr r4, [r0, #(S_Y - S_DIRTY)] - ldr r5, [r0, #(S_YALIGN - S_DIRTY)] + ldr r4, [r0, #S_Y] + ldr r5, [r0, #S_YALIGN] + ldr r8, [r0, #S_DST] putyed_1 add r4, r4, #2 add r7, r7, #(SURFACE_WIDTH * 2) add r8, r8, r5 cmp r4, r1 + ldrcch r12, [r4, r0] bcc putylp_1 - str r7, [r0, #(S_SRC - S_DIRTY)] - str r8, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r7, [r0, #S_SRC] + str r8, [r0, #S_DST] + str r4, [r0, #S_Y] ldmia sp!, {r4 - r11, pc} pal16_1 dcd (np2_pal16 + (NP2PAL_GRPH * 4)) pmask_1 dcd (&07e0f81f << 2) qvga16p_2 stmdb sp!, {r4 - r11, lr} + add r0, r0, #S_HDRSIZE ldr r11, pal16_2 ldr lr, pmask_2 + ldr r3, [r0, #S_XALIGN] + ldr r4, [r0, #S_Y] + ldr r5, [r0, #S_YALIGN] ldr r7, [r0, #S_SRC] ldr r8, [r0, #S_SRC2] + ldr r12, [r4, r0] ldr r9, [r0, #S_DST] ldr r10, [r0, #S_WIDTH] - ldr r3, [r0, #S_XALIGN] - ldr r4, [r0, #S_Y] - ldr r5, [r0, #S_YALIGN] - add r0, r0, #S_DIRTY -putylp_2 ldrh r12, [r0, r4] - cmp r12, #0 +putylp_2 cmp r12, #0 beq putyed_2 - str r9, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r9, [r0, #S_DST] + str r4, [r0, #S_Y] + ldr r4, [r7] ; r2 = 0 + ldr r12, [r8] ; r2 = 0 mov r2, #0 -putxlp_2 ldr r4, [r7, r2] - ldr r12, [r8, r2] - add r4, r4, r12 - and r12, r4, #255 - ldr r5, [r11, r12, lsl #2] - mov r12, r4, lsr #8 - and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r5, r5, r12 - mov r12, r4, lsr #16 - and r12, r12, #255 - ldr r6, [r11, r12, lsl #2] - mov r12, r4, lsr #24 - ldr r12, [r11, r12, lsl #2] + str r1, [sp, #-4]! +putxlp_2 add r4, r12, r4 + and r5, r4, #255 + mov r12, r4 lsr #8 + and r12, r12, #255 + ldr r5, [r11, r5 lsl #2] + ldr r12, [r11, r12 lsl #2] + mov r6, r4 lsr #16 + and r6, r6, #255 + add r5, r12, r5 + mov r12, r4 lsr #24 + ldr r6, [r11, r6 lsl #2] + ldr r12, [r11, r12 lsl #2] + add r1, r2, #SURFACE_WIDTH + ldr r4, [r1, r7] + ldr r1, [r1, r8] + add r2, r2, #4 add r6, r6, r12 - add r12, r2, #SURFACE_WIDTH - ldr r4, [r7, r12] - ldr r12, [r8, r12] - add r4, r4, r12 - and r12, r4, #255 - ldr r12, [r11, r12, lsl #2] - add r5, r5, r12 - mov r12, r4, lsr #8 - and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] + add r4, r1, r4 + and r1, r4, #255 + mov r12, r4 lsr #8 + and r12, r12, #255 + ldr r1, [r11, r1 lsl #2] + ldr r12, [r11, r12 lsl #2] + mov r4, r4 lsr #16 + add r5, r5, r1 add r5, r5, r12 - mov r12, r4, lsr #16 - and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 - mov r12, r4, lsr #24 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 + and r1, r4, #255 + mov r12, r4 lsr #8 + ldr r1, [r11, r1 lsl #2] + ldr r12, [r11, r12 lsl #2] and r5, r5, lr - mov r12, r5, lsr #2 - add r12, r12, r5, lsr #18 - strh r12, [r9], r3 + add r6, r6, r1 + add r6, r6, r12 and r6, r6, lr - mov r12, r6, lsr #2 - add r12, r12, r6, lsr #18 + mov r4, r5 lsr #2 + mov r12, r6 lsr #2 + add r4, r4, r5 lsr #18 + add r12, r12, r6 lsr #18 + strh r4, [r9], r3 strh r12, [r9], r3 - add r2, r2, #4 cmp r2, r10 + ldrcc r4, [r2, r7] + ldrcc r12, [r2, r8] bcc putxlp_2 - ldr r9, [r0, #(S_DST - S_DIRTY)] - ldr r4, [r0, #(S_Y - S_DIRTY)] - ldr r5, [r0, #(S_YALIGN - S_DIRTY)] + ldr r9, [r0, #S_DST] + ldr r4, [r0, #S_Y] + ldr r5, [r0, #S_YALIGN] + ldr r1, [sp], #4 putyed_2 add r4, r4, #2 add r7, r7, #(SURFACE_WIDTH * 2) add r8, r8, #(SURFACE_WIDTH * 2) add r9, r9, r5 cmp r4, r1 + ldrcch r12, [r4, r0] bcc putylp_2 - str r7, [r0, #(S_SRC - S_DIRTY)] - str r8, [r0, #(S_SRC2 - S_DIRTY)] - str r9, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r7, [r0, #S_SRC] + str r8, [r0, #S_SRC2] + str r9, [r0, #S_DST] + str r4, [r0, #S_Y] ldmia sp!, {r4 - r11, pc} pal16_2 dcd (np2_pal16 + (NP2PAL_GRPH * 4)) pmask_2 dcd (&07e0f81f << 2) qvga16p_gi stmdb sp!, {r4 - r11, lr} + add r0, r0, #S_HDRSIZE ldr r11, pal16_gi ldr lr, pmask_gi - ldr r7, [r0, #S_SRC] - ldr r8, [r0, #S_DST] - ldr r10, [r0, #S_WIDTH] ldr r3, [r0, #S_XALIGN] ldr r4, [r0, #S_Y] ldr r5, [r0, #S_YALIGN] - add r0, r0, #S_DIRTY -putylp_gi ldrh r12, [r0, r4] - cmp r12, #0 + ldr r7, [r0, #S_SRC] + ldrh r12, [r4, r0] + ldr r8, [r0, #S_DST] + ldr r10, [r0, #S_WIDTH] +putylp_gi cmp r12, #0 beq putyed_gi - str r4, [r0, #(S_Y - S_DIRTY)] + str r4, [r0, #S_Y] + ldr r4, [r7] ; r2 = 0 mov r9, r8 mov r2, #0 -putxlp_gi ldr r4, [r7, r2] - and r12, r4, #255 - ldr r5, [r11, r12, lsl #2] - mov r12, r4, lsr #8 +putxlp_gi and r5, r4, #255 + mov r12, r4 lsr #8 and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r5, r5, r12 - mov r12, r4, lsr #16 - and r12, r12, #255 - ldr r6, [r11, r12, lsl #2] - mov r12, r4, lsr #24 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 + ldr r5, [r11, r5 lsl #2] + ldr r12, [r11, r12 lsl #2] + mov r6, r4 lsr #16 + and r6, r6, #255 + add r5, r12, r5 + mov r12, r4 lsr #24 + ldr r6, [r11, r6 lsl #2] + ldr r12, [r11, r12 lsl #2] and r5, r5, lr - mov r12, r5, lsr #1 - add r12, r12, r5, lsr #17 - strh r12, [r9], r3 - and r6, r6, lr - mov r12, r6, lsr #1 - add r12, r12, r6, lsr #17 - strh r12, [r9], r3 add r2, r2, #4 + mov r4, r5 lsr #1 + orr r4, r4, r5 lsr #17 + add r6, r12, r6 + and r6, r6, lr + strh r4, [r9], r3 + mov r12, r6 lsr #1 + orr r12, r12, r6 lsr #17 cmp r2, r10 + strh r12, [r9], r3 + ldrcc r4, [r2, r7] bcc putxlp_gi - ldr r4, [r0, #(S_Y - S_DIRTY)] - ldr r5, [r0, #(S_YALIGN - S_DIRTY)] + ldr r4, [r0, #S_Y] + ldr r5, [r0, #S_YALIGN] putyed_gi add r4, r4, #2 add r7, r7, #(SURFACE_WIDTH * 2) add r8, r8, r5 cmp r4, r1 + ldrcch r12, [r4, r0] bcc putylp_gi - str r7, [r0, #(S_SRC - S_DIRTY)] - str r8, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r7, [r0, #S_SRC] + str r8, [r0, #S_DST] + str r4, [r0, #S_Y] ldmia sp!, {r4 - r11, pc} pal16_gi dcd (np2_pal16 + (NP2PAL_GRPH * 4)) pmask_gi dcd (&07e0f81f << 1) qvga16p_2i stmdb sp!, {r4 - r11, lr} + add r0, r0, #S_HDRSIZE ldr r11, pal16_2i ldr lr, pmask_2i + ldr r3, [r0, #S_XALIGN] + ldr r4, [r0, #S_Y] + ldr r5, [r0, #S_YALIGN] ldr r7, [r0, #S_SRC] ldr r8, [r0, #S_SRC2] + ldrh r12, [r0, r4] ldr r9, [r0, #S_DST] ldr r10, [r0, #S_WIDTH] - ldr r3, [r0, #S_XALIGN] - ldr r4, [r0, #S_Y] - ldr r5, [r0, #S_YALIGN] - add r0, r0, #S_DIRTY -putylp_2i ldrh r12, [r0, r4] - cmp r12, #0 +putylp_2i cmp r12, #0 beq putyed_2i - str r9, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r9, [r0, #S_DST] + str r4, [r0, #S_Y] + ldr r6, [r8, #SURFACE_WIDTH] mov r2, #0 -putxlp_2i add r6, r2, #SURFACE_WIDTH - ldr r4, [r7, r2] - ldr r6, [r8, r6] + str r1, [sp, #-4]! +putxlp_2i ldr r4, [r7, r2] ands r12, r6, #(&f0 << 0) - movne r12, r12, lsr #4 - addne r12, r12, #(NP2PAL_TEXT - NP2PAL_GRPH) andeq r12, r4, #255 - ldr r5, [r11, r12, lsl #2] - ands r12, r6, #(&f0 << 8) - movne r12, r12, lsr #12 + movne r12, r12 lsr #4 addne r12, r12, #(NP2PAL_TEXT - NP2PAL_GRPH) - moveq r12, r4, lsr #8 + ldr r5, [r11, r12 lsl #2] + ands r12, r6, #(&f0 << 8) + moveq r12, r4 lsr #8 andeq r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r5, r5, r12 - ands r12, r6, #(&f0 << 16) - movne r12, r12, lsr #20 + movne r12, r12 lsr #12 addne r12, r12, #(NP2PAL_TEXT - NP2PAL_GRPH) - moveq r12, r4, lsr #16 + ldr r1, [r11, r12 lsl #2] + ands r12, r6, #(&f0 << 16) + moveq r12, r4 lsr #16 andeq r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - movs r6, r6, lsr #28 + movne r12, r12 lsr #20 + addne r12, r12, #(NP2PAL_TEXT - NP2PAL_GRPH) + movs r6, r6 lsr #28 + moveq r6, r4 lsr #24 addne r6, r6, #(NP2PAL_TEXT - NP2PAL_GRPH) - moveq r6, r4, lsr #24 - ldr r6, [r11, r6, lsl #2] - add r6, r6, r12 + ldr r12, [r11, r12 lsl #2] + ldr r6, [r11, r6 lsl #2] + add r5, r5, r1 + ldr r1, [r8, r2] ;; ldr r4, [r7, r2] - ldr r12, [r8, r2] - add r4, r4, r12 - and r12, r4, #255 - ldr r12, [r11, r12, lsl #2] - add r5, r5, r12 - mov r12, r4, lsr #8 + add r6, r6, r12 + add r4, r1, r4 + and r1, r4, #255 + mov r12, r4 lsr #8 and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] + ldr r1, [r11, r1 lsl #2] + ldr r12, [r11, r12 lsl #2] + add r2, r2, #4 + add r5, r5, r1 add r5, r5, r12 - mov r12, r4, lsr #16 + mov r12, r4 lsr #16 and r12, r12, #255 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 - mov r12, r4, lsr #24 - ldr r12, [r11, r12, lsl #2] - add r6, r6, r12 + mov r4, r4 lsr #24 + ldr r12, [r11, r12 lsl #2] + ldr r4, [r11, r4 lsl #2] and r5, r5, lr - mov r12, r5, lsr #2 - add r12, r12, r5, lsr #18 - strh r12, [r9], r3 + add r6, r6, r12 + add r6, r6, r4 and r6, r6, lr - mov r12, r6, lsr #2 - add r12, r12, r6, lsr #18 + mov r12, r5 lsr #2 + orr r12, r12, r5 lsr #18 strh r12, [r9], r3 - add r2, r2, #4 + mov r12, r6 lsr #2 + orr r12, r12, r6 lsr #18 + strh r12, [r9], r3 + add r6, r2, #SURFACE_WIDTH cmp r2, r10 + ldrcc r6, [r6, r8] bcc putxlp_2i - ldr r9, [r0, #(S_DST - S_DIRTY)] - ldr r4, [r0, #(S_Y - S_DIRTY)] - ldr r5, [r0, #(S_YALIGN - S_DIRTY)] + ldr r1, [sp], #4 + ldr r9, [r0, #S_DST] + ldr r4, [r0, #S_Y] + ldr r5, [r0, #S_YALIGN] putyed_2i add r4, r4, #2 add r7, r7, #(SURFACE_WIDTH * 2) add r8, r8, #(SURFACE_WIDTH * 2) add r9, r9, r5 cmp r4, r1 + ldrcch r12, [r4, r0] bcc putylp_2i - str r7, [r0, #(S_SRC - S_DIRTY)] - str r8, [r0, #(S_SRC2 - S_DIRTY)] - str r9, [r0, #(S_DST - S_DIRTY)] - str r4, [r0, #(S_Y - S_DIRTY)] + str r7, [r0, #S_SRC] + str r8, [r0, #S_SRC2] + str r9, [r0, #S_DST] + str r4, [r0, #S_Y] ldmia sp!, {r4 - r11, pc} pal16_2i dcd (np2_pal16 + (NP2PAL_GRPH * 4)) pmask_2i dcd (&07e0f81f << 2)