File:  [RetroPC.NET] / np2 / i286a / i286a_fe.s
Revision 1.1: download - view: text, annotated - select for diffs
Wed Dec 17 12:46:27 2003 JST (21 years, 10 months ago) by yui
Branches: MAIN
CVS tags: HEAD
fix i286a (T.Yui)


	INCLUDE		i286a.inc
	INCLUDE		i286aalu.inc

	IMPORT		_szpcflag8
	IMPORT		i286a_ea
	IMPORT		i286_memoryread
	IMPORT		i286_memoryread_w
	IMPORT		i286_memorywrite
	IMPORT		i286_memorywrite_w

	EXPORT		i286a_0xfe
	EXPORT		i286a_0xff

	AREA	.text, CODE, READONLY


i286a_0xfe		GETPC8
				tst		r0, #(1 << 3)
				bne		decea8

				cmp		r0, #&c0
				bcc		inc8m
				CPUWORK	#2
				R8SRC	r0, r5
				ldrb	r4, [r5, #CPU_REG]
				INC8	r4
				strb	r1, [r5, #CPU_REG]
				mov		pc, r11
inc8m			CPUWORK	#7
				bl		i286a_ea
				cmp		r0, #I286_MEMWRITEMAX
				bcs		inc8e
				ldrb	r4, [r9, r0]
				INC8	r4
				strb	r1, [r9, r0]
				mov		pc, r11
inc8e			mov		r5, r0
				bl		i286_memoryread
				INC8	r0
				mov		r0, r5
				mov		lr, r11
				b		i286_memorywrite

decea8			cmp		r0, #&c0
				bcc		dec8m
				CPUWORK	#2
				R8SRC	r0, r5
				ldrb	r4, [r5, #CPU_REG]
				DEC8	r4
				strb	r1, [r5, #CPU_REG]
				mov		pc, r11
dec8m			CPUWORK	#7
				bl		i286a_ea
				cmp		r0, #I286_MEMWRITEMAX
				bcs		dec8e
				ldrb	r4, [r9, r0]
				DEC8	r4
				strb	r1, [r9, r0]
				mov		pc, r11
dec8e			mov		r5, r0
				bl		i286_memoryread
				DEC8	r0
				mov		r0, r5
				mov		lr, r11
				b		i286_memorywrite


; ----

i286a_0xff		GETPC8
				and		r12, r0, #(7 << 3)
				adr		r1, opefftbl
				ldr		pc, [r1, r12 lsr #1]

opefftbl		dcd		incea16
				dcd		decea16

				dcd		pushea16
				dcd		popea16

incea16			cmp		r0, #&c0
				bcc		inc16m
				CPUWORK	#2
				R16SRC	r0, r5
				ldrh	r4, [r5, #CPU_REG]
				INC16	r4
				strh	r1, [r5, #CPU_REG]
				mov		pc, r11
inc16m			CPUWORK	#7
				bl		i286a_ea
				tst		r0, #1
				bne		inc16e
				cmp		r0, #I286_MEMWRITEMAX
				bcs		inc16e
				ldrh	r4, [r9, r0]
				INC16	r4
				strh	r1, [r9, r0]
				mov		pc, r11
inc16e			mov		r5, r0
				bl		i286_memoryread_w
				INC16	r0
				mov		r0, r5
				mov		lr, r11
				b		i286_memorywrite_w

decea16			cmp		r0, #&c0
				bcc		dec16m
				CPUWORK	#2
				R16SRC	r0, r5
				ldrh	r4, [r5, #CPU_REG]
				DEC16	r4
				strh	r1, [r5, #CPU_REG]
				mov		pc, r11
dec16m			CPUWORK	#7
				bl		i286a_ea
				tst		r0, #1
				bne		dec16e
				cmp		r0, #I286_MEMWRITEMAX
				bcs		dec16e
				ldrh	r4, [r9, r0]
				DEC16	r4
				strh	r1, [r9, r0]
				mov		pc, r11
dec16e			mov		r5, r0
				bl		i286_memoryread_w
				DEC16	r0
				mov		r0, r5
				mov		lr, r11
				b		i286_memorywrite_w

pushea16		cmp		r0, #&c0
				bcc		push16m
				CPUWORK	#3
				R16SRC	r0, r5
				ldrh	r1, [r5, #CPU_REG]
				b		push16e
push16m			CPUWORK	#5
				bl		i286a_ea
				bl		i286_memoryread_w
				mov		r1, r0
push16e			ldrh	r2, [r9, #CPU_SP]
				ldr		r3, [r9, #CPU_SS_BASE]
				subs	r2, r2, #2
				addcc	r2, r2, #&10000
				strh	r2, [r9, #CPU_SP]
				add		r0, r2, r3
				mov		lr, r11
				b		i286_memorywrite_w

popea16			CPUWORK	#5
				ldrh	r2, [r9, #CPU_SP]
				ldr		r3, [r9, #CPU_SS_BASE]
				mov		r6, r0
				add		r0, r2, r3
				add		r2, r2, #2
				bic		r2, r2, #&10000
				strh	r2, [r9, #CPU_SP]
				bl		i286_memoryread_w
				cmp		r6, #&c0
				bcc		pop16m
				R16SRC	r6, r1
				ldrh	r0, [r1, #CPU_REG]
				mov		pc, r11
pop16m			mov		r5, r0
				mov		r0, r6
				bl		i286a_ea
				mov		r1, r5
				mov		lr, r11
				b		i286_memoryread_w

	END


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