File:  [RetroPC.NET] / np2 / i286a / i286a_0f.s
Revision 1.1: download - view: text, annotated - select for diffs
Wed Dec 17 23:04:43 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		i286a_ea
	IMPORT		i286a_a
	IMPORT		i286_memoryread
	IMPORT		i286_memoryread_w
	IMPORT		i286_memorywrite
	IMPORT		i286_memorywrite_w

	IMPORT		i286a_localint

	EXPORT		i286a_cts

	AREA	.text, CODE, READONLY


i286a_cts		mov		r6, r8
				GETPC8
				cmp		r0, #1
				bne		cts_ldall
				GETPC8
				and		r12, r0, #(7 << 3)
				adr		r1, cts1tbl
				ldr		pc, [r1, r12 lsr #1]
cts1tbl			dcd		sgdt
				dcd		sidt
				dcd		lgdt
				dcd		lidt
				dcd		smsw
				dcd		smsw
				dcd		lmsw
				dcd		lmsw

cts_ldall		cmp		r0, #5
				bne		cts_intr

cts_intr		sub		r8, r6, #(1 << 16)
				mov		r6, #6
				b		i286a_localint

sgdt			cmp		r0, #&c0
				bcs		cts_intr
				CPUWORK	#11
				bl		i286a_a
				add		r4, r0, #2
				ldrh	r1, [r9, #(CPU_GDTR + 0)]
				add		r0, r0, r6
				bic		r4, r4, #(1 << 16)
				bl		i286_memorywrite_w
				add		r0, r4, r6
				ldrh	r1, [r9, #(CPU_GDTR + 2)]
				add		r4, r4, #2
				bl		i286_memorywrite_w
				ldrb	r1, [r9, #(CPU_GDTR + 4)]
				bic		r4, r4, #(1 << 16)
				orr		r1, r1, #&ff00
				add		r0, r4, r6
				mov		lr, r11
				b		i286_memorywrite_w

sidt			cmp		r0, #&c0
				bcs		cts_intr
				CPUWORK	#12
				bl		i286a_a
				add		r4, r0, #2
				ldrh	r1, [r9, #(CPU_IDTR + 0)]
				add		r0, r0, r6
				bic		r4, r4, #(1 << 16)
				bl		i286_memorywrite_w
				add		r0, r4, r6
				ldrh	r1, [r9, #(CPU_IDTR + 2)]
				add		r4, r4, #2
				bl		i286_memorywrite_w
				ldrb	r1, [r9, #(CPU_IDTR + 4)]
				bic		r4, r4, #(1 << 16)
				orr		r1, r1, #&ff00
				add		r0, r4, r6
				mov		lr, r11
				b		i286_memorywrite_w

lgdt			cmp		r0, #&c0
				bcs		cts_intr
				CPUWORK	#11
				bl		i286a_a
				add		r4, r0, #2
				add		r0, r0, r6
				bic		r4, r4, #(1 << 16)
				bl		i286_memoryread_w
				strh	r0, [r9, #(CPU_GDTR + 0)]
				add		r0, r4, r6
				add		r4, r4, #2
				bl		i286_memoryread_w
				bic		r4, r4, #(1 << 16)
				strh	r0, [r9, #(CPU_GDTR + 2)]
				add		r0, r4, r6
				bl		i286_memoryread_w
				strh	r0, [r9, #(CPU_GDTR + 4)]
				mov		pc, r11

lidt			cmp		r0, #&c0
				bcs		cts_intr
				CPUWORK	#12
				bl		i286a_a
				add		r4, r0, #2
				add		r0, r0, r6
				bic		r4, r4, #(1 << 16)
				bl		i286_memoryread_w
				strh	r0, [r9, #(CPU_IDTR + 0)]
				add		r0, r4, r6
				add		r4, r4, #2
				bl		i286_memoryread_w
				bic		r4, r4, #(1 << 16)
				strh	r0, [r9, #(CPU_IDTR + 2)]
				add		r0, r4, r6
				bl		i286_memoryread_w
				strh	r0, [r9, #(CPU_IDTR + 4)]
				mov		pc, r11

smsw			cmp		r0, #&c0
				bcc		smswm
				CPUWORK	#3
				R16SRC	r0, r5
				ldrh	r1, [r9, #CPU_MSW]
				strh	r1, [r5, #CPU_REG]
				mov		pc, r11
smswm			CPUWORK	#6
				bl		i286a_ea
				strh	r1, [r9, #CPU_MSW]
				mov		lr, r11
				b		i286_memorywrite_w

lmsw			cmp		r0, #&c0
				bcc		lmswm
				CPUWORK	#3
				R16SRC	r0, r5
				ldrh	r0, [r5, #CPU_REG]
				strh	r0, [r9, #CPU_MSW]
				mov		pc, r11
lmswm			CPUWORK	#6
				bl		i286a_ea
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_MSW]
				mov		pc, r11

	END


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