File:  [RetroPC.NET] / xmil / adv / vram / makemix2.s
Revision 1.1: download - view: text, annotated - select for diffs
Fri Feb 4 15:42:10 2005 JST (20 years, 8 months ago) by yui
Branches: MAIN
CVS tags: HEAD
RetroPC CVS restarting 2005/02/04 (T.Yui)


	.include	"./vram/makescrn.inc"

	.global	makemix_mixstep
	.global	makemix_mixtext40
	.global	makemix_mixgrph40
	.global	makemix_mixtext80
	.global	makemix_mixgrph80
@	.global	to256colex

	.section	.iwram.text
	.code	32
	.align	0


@ col2tbl:	.word		to256colex
textmask:	.word		0x07070707


240:			add		r0, r0, #240
480:			add		r0, r0, #480


makemix_mixstep:
				cmp		r0, #0
				ldreq	r1, 240b
				ldrne	r1, 480b
				str		r1, 2401f
				str		r1, 2402f
				str		r1, 2403f
				str		r1, 2404f
				mov		pc, lr

makemix_mixtext40:
				stmdb	sp!, {r5 - r7, lr}
				adr		r5, to256colex
				ldr		lr, textmask
1:				ldr		r6, [r0, #0]
				ldr		r7, [r0, #4]
				ldrb	r12, [r1]
				bic		r6, r6, lr
				ldr		r12, [r5, r12, lsl #2]
				bic		r7, r7, lr
				and		r3, r12, lr					@ bit0
				and		r12, r12, lr, lsl #1		@ bit3
				orr		r6, r6, r3
				ldrb	r3, [r1, #(MAKETEXT_ROW * 1)]
				orr		r7, r7, r12, lsr #3
				ldr		r3, [r5, r3, lsl #2]
				add		r1, r1, #1
				and		r12, r3, lr					@ bit0
				and		r3, r3, lr, lsl #1			@ bit3
				orr		r6, r6, r12, lsl #1
				ldrb	r12, [r1, #((MAKETEXT_ROW * 2) - 1)]
				orr		r7, r7, r3, lsr #2
				ldr		r12, [r5, r12, lsl #2]
				and		r3, r12, lr					@ bit0
				and		r12, r12, lr, lsl #1		@ bit3
				orr		r6, r6, r3, lsl #2
				orr		r7, r7, r12, lsr #1
				subs	r2, r2, #1
				str		r6, [r0, #0]
				str		r7, [r0, #4]
2401:			add		r0, r0, #240
				bne		1b
				ldmia	sp!, {r5 - r7, pc}


makemix_mixgrph40:
				stmdb	sp!, {r5 - r7, lr}
				adr		r5, to256colex
				ldr		lr, textmask
1:				ldr		r6, [r0, #0]
				ldr		r7, [r0, #4]
				ldrb	r12, [r1]
				and		r6, r6, lr
				and		r7, r7, lr
				ldr		r12, [r5, r12, lsl #2]
				add		r1, r1, #0x4000
				and		r3, r12, lr					@ bit0
				and		r12, r12, lr, lsl #1		@ bit3
				orr		r6, r6, r3, lsl #3
				ldrb	r3, [r1]
				orr		r7, r7, r12
				ldr		r3, [r5, r3, lsl #2]
				add		r1, r1, #0x4000
				and		r12, r3, lr					@ bit0
				and		r3, r3, lr, lsl #1			@ bit3
				orr		r6, r6, r12, lsl #4
				ldrb	r12, [r1]
				orr		r7, r7, r3, lsl #1
				ldr		r12, [r5, r12, lsl #2]
				and		r3, r12, lr					@ bit0
				and		r12, r12, lr, lsl #1		@ bit3
				orr		r6, r6, r3, lsl #5
				orr		r7, r7, r12, lsl #2
				add		r1, r1, #0x0800			@ VRAM alignが 64KBなので
				bic		r1, r1, #0xc000			@ こんなロジック…
				str		r6, [r0, #0]
				str		r7, [r0, #4]
				subs	r2, r2, #1
2402:			add		r0, r0, #240
				bne		1b
				ldmia	sp!, {r5 - r7, pc}


makemix_mixtext80:
				stmdb	sp!, {r5 - r8, lr}
				adr		r5, to256colex
				ldr		lr, textmask
				mov		r8, #0xa000
1:				ldr		r6, [r0, #0]
				ldr		r7, [r0, r8]
				ldrb	r12, [r1]
				bic		r6, r6, lr
				ldr		r12, [r5, r12, lsl #2]
				bic		r7, r7, lr
				and		r3, r12, lr, lsl #4			@ bit4
				and		r12, r12, lr, lsl #5		@ bit7
				orr		r6, r6, r3, lsr #4
				ldrb	r3, [r1, #(MAKETEXT_ROW * 1)]
				orr		r7, r7, r12, lsr #7
				ldr		r3, [r5, r3, lsl #2]
				add		r1, r1, #1
				and		r12, r3, lr, lsl #4			@ bit4
				and		r3, r3, lr, lsl #5			@ bit7
				orr		r6, r6, r12, lsr #3
				ldrb	r12, [r1, #((MAKETEXT_ROW * 2) - 1)]
				orr		r7, r7, r3, lsr #6
				ldr		r12, [r5, r12, lsl #2]
				and		r3, r12, lr, lsl #4			@ bit0
				and		r12, r12, lr, lsl #5		@ bit7
				orr		r6, r6, r3, lsr #2
				orr		r7, r7, r12, lsr #5
				subs	r2, r2, #1
				str		r6, [r0, #0]
				str		r7, [r0, r8]
2403:			add		r0, r0, #240
				bne		1b
				ldmia	sp!, {r5 - r8, pc}


makemix_mixgrph80:
				stmdb	sp!, {r5 - r8, lr}
				adr		r5, to256colex
				ldr		lr, textmask
				mov		r8, #0xa000
1:				ldr		r6, [r0, #0]
				ldr		r7, [r0, r8]
				ldrb	r12, [r1]
				and		r6, r6, lr
				and		r7, r7, lr
				ldr		r12, [r5, r12, lsl #2]
				add		r1, r1, #0x4000
				and		r3, r12, lr, lsl #4			@ bit4
				and		r12, r12, lr, lsl #5		@ bit7
				orr		r6, r6, r3, lsr #1			@ 4->3
				ldrb	r3, [r1]
				orr		r7, r7, r12, lsr #4			@ 7->3
				ldr		r3, [r5, r3, lsl #2]
				add		r1, r1, #0x4000
				and		r12, r3, lr, lsl #4			@ bit4
				and		r3, r3, lr, lsl #5			@ bit7
				orr		r6, r6, r12					@ 4->4
				ldrb	r12, [r1]
				orr		r7, r7, r3, lsr #3			@ 7->4
				ldr		r12, [r5, r12, lsl #2]
				and		r3, r12, lr, lsl #4			@ bit4
				and		r12, r12, lr, lsl #5		@ bit7
				orr		r6, r6, r3, lsl #1			@ 4->5
				orr		r7, r7, r12, lsr #2			@ 7->5
				add		r1, r1, #0x0800			@ VRAM alignが 64KBなので
				bic		r1, r1, #0xc000			@ こんなロジック…
				str		r6, [r0, #0]
				str		r7, [r0, r8]
				subs	r2, r2, #1
2404:			add		r0, r0, #240
				bne		1b
				ldmia	sp!, {r5 - r8, pc}


to256colex:
		.word	0x00000000, 0x18000000, 0x80080000, 0x98080000
		.word	0x00800800, 0x18800800, 0x80880800, 0x98880800
		.word	0x00100008, 0x18100008, 0x80180008, 0x98180008
		.word	0x00900808, 0x18900808, 0x80980808, 0x98980808
		.word	0x01001000, 0x19001000, 0x81081000, 0x99081000
		.word	0x01801800, 0x19801800, 0x81881800, 0x99881800
		.word	0x01101008, 0x19101008, 0x81181008, 0x99181008
		.word	0x01901808, 0x19901808, 0x81981808, 0x99981808
		.word	0x00018000, 0x18018000, 0x80098000, 0x98098000
		.word	0x00818800, 0x18818800, 0x80898800, 0x98898800
		.word	0x00118008, 0x18118008, 0x80198008, 0x98198008
		.word	0x00918808, 0x18918808, 0x80998808, 0x98998808
		.word	0x01019000, 0x19019000, 0x81099000, 0x99099000
		.word	0x01819800, 0x19819800, 0x81899800, 0x99899800
		.word	0x01119008, 0x19119008, 0x81199008, 0x99199008
		.word	0x01919808, 0x19919808, 0x81999808, 0x99999808
		.word	0x00000180, 0x18000180, 0x80080180, 0x98080180
		.word	0x00800980, 0x18800980, 0x80880980, 0x98880980
		.word	0x00100188, 0x18100188, 0x80180188, 0x98180188
		.word	0x00900988, 0x18900988, 0x80980988, 0x98980988
		.word	0x01001180, 0x19001180, 0x81081180, 0x99081180
		.word	0x01801980, 0x19801980, 0x81881980, 0x99881980
		.word	0x01101188, 0x19101188, 0x81181188, 0x99181188
		.word	0x01901988, 0x19901988, 0x81981988, 0x99981988
		.word	0x00018180, 0x18018180, 0x80098180, 0x98098180
		.word	0x00818980, 0x18818980, 0x80898980, 0x98898980
		.word	0x00118188, 0x18118188, 0x80198188, 0x98198188
		.word	0x00918988, 0x18918988, 0x80998988, 0x98998988
		.word	0x01019180, 0x19019180, 0x81099180, 0x99099180
		.word	0x01819980, 0x19819980, 0x81899980, 0x99899980
		.word	0x01119188, 0x19119188, 0x81199188, 0x99199188
		.word	0x01919988, 0x19919988, 0x81999988, 0x99999988
		.word	0x00000011, 0x18000011, 0x80080011, 0x98080011
		.word	0x00800811, 0x18800811, 0x80880811, 0x98880811
		.word	0x00100019, 0x18100019, 0x80180019, 0x98180019
		.word	0x00900819, 0x18900819, 0x80980819, 0x98980819
		.word	0x01001011, 0x19001011, 0x81081011, 0x99081011
		.word	0x01801811, 0x19801811, 0x81881811, 0x99881811
		.word	0x01101019, 0x19101019, 0x81181019, 0x99181019
		.word	0x01901819, 0x19901819, 0x81981819, 0x99981819
		.word	0x00018011, 0x18018011, 0x80098011, 0x98098011
		.word	0x00818811, 0x18818811, 0x80898811, 0x98898811
		.word	0x00118019, 0x18118019, 0x80198019, 0x98198019
		.word	0x00918819, 0x18918819, 0x80998819, 0x98998819
		.word	0x01019011, 0x19019011, 0x81099011, 0x99099011
		.word	0x01819811, 0x19819811, 0x81899811, 0x99899811
		.word	0x01119019, 0x19119019, 0x81199019, 0x99199019
		.word	0x01919819, 0x19919819, 0x81999819, 0x99999819
		.word	0x00000191, 0x18000191, 0x80080191, 0x98080191
		.word	0x00800991, 0x18800991, 0x80880991, 0x98880991
		.word	0x00100199, 0x18100199, 0x80180199, 0x98180199
		.word	0x00900999, 0x18900999, 0x80980999, 0x98980999
		.word	0x01001191, 0x19001191, 0x81081191, 0x99081191
		.word	0x01801991, 0x19801991, 0x81881991, 0x99881991
		.word	0x01101199, 0x19101199, 0x81181199, 0x99181199
		.word	0x01901999, 0x19901999, 0x81981999, 0x99981999
		.word	0x00018191, 0x18018191, 0x80098191, 0x98098191
		.word	0x00818991, 0x18818991, 0x80898991, 0x98898991
		.word	0x00118199, 0x18118199, 0x80198199, 0x98198199
		.word	0x00918999, 0x18918999, 0x80998999, 0x98998999
		.word	0x01019191, 0x19019191, 0x81099191, 0x99099191
		.word	0x01819991, 0x19819991, 0x81899991, 0x99899991
		.word	0x01119199, 0x19119199, 0x81199199, 0x99199199
		.word	0x01919999, 0x19919999, 0x81999999, 0x99999999

	.end


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