File:  [RetroPC.NET] / np2 / wince / arm / sdrawq16.s
Revision 1.1: download - view: text, annotated - select for diffs
Fri Dec 5 03:31:02 2003 JST (21 years, 10 months ago) by yui
Branches: MAIN
CVS tags: VER_0_72, HEAD
[MacOS9] fix F11/F12 [WinCE] add arm codes (T.Yui)


; それ以前にメモリが遅いから 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

	IMPORT	np2_pal16

	EXPORT	sdraw_getproctbl

	AREA	SDRAWQ16, CODE, READONLY

qvga16p_0		stmdb	sp!, {r4 - r8, lr}
				ldr		r6, [r0, #S_SRC]
				ldr		r7, [r0, #S_DST]
				ldr		r8, [r0, #S_WIDTH]
				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
				beq		putyed_0
				mov		r12, r7
				mov		r2, #0
putxlp_0		strh	lr, [r12], r3
				strh	lr, [r12], r3
				add		r2, r2, #4
				cmp		r2, r8
				bcc		putxlp_0
putyed_0		add		r4, r4, #2
				add		r6, r6, #(SURFACE_WIDTH * 2)
				add		r7, r7, r5
				cmp		r4, r1
				bcc		putylp_0
				str		r6, [r0, #(S_SRC - S_DIRTY)]
				str		r7, [r0, #(S_DST - S_DIRTY)]
				str		r4, [r0, #(S_Y - S_DIRTY)]
				ldmia	sp!, {r4 - r8, pc}
pal16_0			dcd		(np2_pal16 + (NP2PAL_TEXT2 * 4))

qvga16p_1		stmdb	sp!, {r4 - r11, lr}
				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
				beq		putyed_1
				str		r4, [r0, #(S_Y - S_DIRTY)]
				mov		r9, r8
				mov		r2, #0
putxlp_1		ldr		r4, [r7, r2]
				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]
				add		r6, r6, r12
				add		r12, r2, #SURFACE_WIDTH
				ldr		r4, [r7, 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		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		r5, r5, lr
				mov		r12, r5, lsr #2
				add		r12, r12, r5, lsr #18
				strh	r12, [r9], r3
				and		r6, r6, lr
				mov		r12, r6, lsr #2
				add		r12, r12, r6, lsr #18
				strh	r12, [r9], r3
				add		r2, r2, #4
				cmp		r2, r10
				bcc		putxlp_1
				ldr		r4, [r0, #(S_Y - S_DIRTY)]
				ldr		r5, [r0, #(S_YALIGN - S_DIRTY)]
putyed_1		add		r4, r4, #2
				add		r7, r7, #(SURFACE_WIDTH * 2)
				add		r8, r8, r5
				cmp		r4, r1
				bcc		putylp_1
				str		r7, [r0, #(S_SRC - S_DIRTY)]
				str		r8, [r0, #(S_DST - S_DIRTY)]
				str		r4, [r0, #(S_Y - S_DIRTY)]
				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}
				ldr		r11, pal16_2
				ldr		lr, pmask_2
				ldr		r7, [r0, #S_SRC]
				ldr		r8, [r0, #S_SRC2]
				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
				beq		putyed_2
				str		r9, [r0, #(S_DST - S_DIRTY)]
				str		r4, [r0, #(S_Y - S_DIRTY)]
				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]
				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		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		r5, r5, lr
				mov		r12, r5, lsr #2
				add		r12, r12, r5, lsr #18
				strh	r12, [r9], r3
				and		r6, r6, lr
				mov		r12, r6, lsr #2
				add		r12, r12, r6, lsr #18
				strh	r12, [r9], r3
				add		r2, r2, #4
				cmp		r2, r10
				bcc		putxlp_2
				ldr		r9, [r0, #(S_DST - S_DIRTY)]
				ldr		r4, [r0, #(S_Y - S_DIRTY)]
				ldr		r5, [r0, #(S_YALIGN - S_DIRTY)]
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
				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)]
				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}
				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
				beq		putyed_gi
				str		r4, [r0, #(S_Y - S_DIRTY)]
				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
				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
				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
				cmp		r2, r10
				bcc		putxlp_gi
				ldr		r4, [r0, #(S_Y - S_DIRTY)]
				ldr		r5, [r0, #(S_YALIGN - S_DIRTY)]
putyed_gi		add		r4, r4, #2
				add		r7, r7, #(SURFACE_WIDTH * 2)
				add		r8, r8, r5
				cmp		r4, r1
				bcc		putylp_gi
				str		r7, [r0, #(S_SRC - S_DIRTY)]
				str		r8, [r0, #(S_DST - S_DIRTY)]
				str		r4, [r0, #(S_Y - S_DIRTY)]
				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}
				ldr		r11, pal16_2i
				ldr		lr, pmask_2i
				ldr		r7, [r0, #S_SRC]
				ldr		r8, [r0, #S_SRC2]
				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
				beq		putyed_2i
				str		r9, [r0, #(S_DST - S_DIRTY)]
				str		r4, [r0, #(S_Y - S_DIRTY)]
				mov		r2, #0
putxlp_2i		add		r6, r2, #SURFACE_WIDTH
				ldr		r4, [r7, r2]
				ldr		r6, [r8, r6]
				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
					addne	r12, r12, #(NP2PAL_TEXT - NP2PAL_GRPH)
					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
					addne	r12, r12, #(NP2PAL_TEXT - NP2PAL_GRPH)
					moveq	r12, r4, lsr #16
					andeq	r12, r12, #255
				ldr		r12, [r11, r12, lsl #2]
				movs	r6, r6, lsr #28
					addne	r6, r6, #(NP2PAL_TEXT - NP2PAL_GRPH)
					moveq	r6, r4, lsr #24
				ldr		r6, [r11, r6, lsl #2]
				add		r6, r6, r12
		;;		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
				and		r12, r12, #255
				ldr		r12, [r11, r12, lsl #2]
				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		r5, r5, lr
				mov		r12, r5, lsr #2
				add		r12, r12, r5, lsr #18
				strh	r12, [r9], r3
				and		r6, r6, lr
				mov		r12, r6, lsr #2
				add		r12, r12, r6, lsr #18
				strh	r12, [r9], r3
				add		r2, r2, #4
				cmp		r2, r10
				bcc		putxlp_2i
				ldr		r9, [r0, #(S_DST - S_DIRTY)]
				ldr		r4, [r0, #(S_Y - S_DIRTY)]
				ldr		r5, [r0, #(S_YALIGN - S_DIRTY)]
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
				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)]
				ldmia	sp!, {r4 - r11, pc}
pal16_2i		dcd		(np2_pal16 + (NP2PAL_GRPH * 4))
pmask_2i		dcd		(&07e0f81f << 2)


sdraw_getproctbl
				mov		r0, pc
				mov		pc, lr
				dcd		qvga16p_0
				dcd		qvga16p_1
				dcd		qvga16p_1
				dcd		qvga16p_2
				dcd		qvga16p_0
				dcd		qvga16p_1
				dcd		qvga16p_gi
				dcd		qvga16p_2i
				dcd		qvga16p_0
				dcd		qvga16p_1
				dcd		qvga16p_gi
				dcd		qvga16p_2i

	END


RetroPC.NET-CVS <cvs@retropc.net>