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


	INCLUDE		i286a.inc
	INCLUDE		i286aalu.inc
	INCLUDE		i286aop.inc

	IMPORT		i286core
	IMPORT		_szpcflag8
	IMPORT		i286a_ea
	IMPORT		i286a_lea
	IMPORT		i286_memoryread
	IMPORT		i286_memoryread_w
	IMPORT		i286_memorywrite
	IMPORT		i286_memorywrite_w
	IMPORT		iocore_inp8
	IMPORT		iocore_inp16
	IMPORT		iocore_out8
	IMPORT		iocore_out16
	IMPORT		i286a_localint

	EXPORT		i286a_step
	EXPORT		optbl1

	AREA	.text, CODE, READONLY

add_ea_r8		OP_EA_R8	ADD8, #2, #7
add_ea_r16		OP_EA_R16	ADD16, #2, #7
add_r8_ea		OP_R8_EA	ADD8, #2, #7
add_r16_ea		OP_R16_EA	ADD16, #2, #7
add_al_d8		OP_AL_D8	ADD8, #3
add_ax_d16		OP_AX_D16	ADD16, #3
push_es			REGPUSH		#CPU_ES, #3
pop_es			SEGPOP		#CPU_ES, #CPU_ES_BASE, #5

or_ea_r8		OP_EA_R8	OR8, #2, #7
or_ea_r16		OP_EA_R16	OR16, #2, #7
or_r8_ea		OP_R8_EA	OR8, #2, #7
or_r16_ea		OP_R16_EA	OR16, #2, #7
or_al_d8		OP_AL_D8	OR8, #3
or_ax_d16		OP_AX_D16	OR16, #3
push_cs			REGPUSH		#CPU_CS, #3
; ope0f

adc_ea_r8		OP_EA_R8	ADC8, #2, #7
adc_ea_r16		OP_EA_R16	ADC16, #2, #7
adc_r8_ea		OP_R8_EA	ADC8, #2, #7
adc_r16_ea		OP_R16_EA	ADC16, #2, #7
adc_al_d8		OP_AL_D8	ADC8, #3
adc_ax_d16		OP_AX_D16	ADC16, #3
push_ss			REGPUSH		#CPU_SS, #3
pop_ss			SEGPOPFIX	#CPU_SS, #CPU_SS_BASE, #CPU_SS_FIX, #5

sbb_ea_r8		OP_EA_R8	SBB8, #2, #7
sbb_ea_r16		OP_EA_R16	SBB16, #2, #7
sbb_r8_ea		OP_R8_EA	SBB8, #2, #7
sbb_r16_ea		OP_R16_EA	SBB16, #2, #7
sbb_al_d8		OP_AL_D8	SBB8, #3
sbb_ax_d16		OP_AX_D16	SBB16, #3
push_ds			REGPUSH		#CPU_DS, #3
pop_ds			SEGPOPFIX	#CPU_DS, #CPU_DS_BASE, #CPU_DS_FIX, #5

and_ea_r8		OP_EA_R8	AND8, #2, #7
and_ea_r16		OP_EA_R16	AND16, #2, #7
and_r8_ea		OP_R8_EA	AND8, #2, #7
and_r16_ea		OP_R16_EA	AND16, #2, #7
and_al_d8		OP_AL_D8	AND8, #3
and_ax_d16		OP_AX_D16	AND16, #3
; segprefix_es		!
; daa			*

sub_ea_r8		OP_EA_R8	SUB8, #2, #7
sub_ea_r16		OP_EA_R16	SUB16, #2, #7
sub_r8_ea		OP_R8_EA	SUB8, #2, #7
sub_r16_ea		OP_R16_EA	SUB16, #2, #7
sub_al_d8		OP_AL_D8	SUB8, #3
sub_ax_d16		OP_AX_D16	SUB16, #3
; segprefix_cs		!
; das			*

xor_ea_r8		OP_EA_R8	XOR8, #2, #7
xor_ea_r16		OP_EA_R16	XOR16, #2, #7
xor_r8_ea		OP_R8_EA	XOR8, #2, #7
xor_r16_ea		OP_R16_EA	XOR16, #2, #7
xor_al_d8		OP_AL_D8	XOR8, #3
xor_ax_d16		OP_AX_D16	XOR16, #3
; segprefix_ss		!
; aaa			*

cmp_ea_r8		S_EA_R8		SUB8, #2, #7
cmp_ea_r16		S_EA_R16	SUB16, #2, #7
cmp_r8_ea		S_R8_EA		SUB8, #2, #6
cmp_r16_ea		S_R16_EA	SUB16, #2, #6
cmp_al_d8		S_AL_D8		SUB8, #3
cmp_ax_d16		S_AX_D16	SUB16, #3
; segprefix_ds		!
; aas			*

inc_ax			OP_INC16	#CPU_AX, #2
inc_cx			OP_INC16	#CPU_CX, #2
inc_dx			OP_INC16	#CPU_DX, #2
inc_bx			OP_INC16	#CPU_BX, #2
inc_sp			OP_INC16	#CPU_SP, #2
inc_bp			OP_INC16	#CPU_BP, #2
inc_si			OP_INC16	#CPU_SI, #2
inc_di			OP_INC16	#CPU_DI, #2
dec_ax			OP_DEC16	#CPU_AX, #2
dec_cx			OP_DEC16	#CPU_CX, #2
dec_dx			OP_DEC16	#CPU_DX, #2
dec_bx			OP_DEC16	#CPU_BX, #2
dec_sp			OP_DEC16	#CPU_SP, #2
dec_bp			OP_DEC16	#CPU_BP, #2
dec_si			OP_DEC16	#CPU_SI, #2
dec_di			OP_DEC16	#CPU_DI, #2

push_ax			REGPUSH		#CPU_AX, #3
push_cx			REGPUSH		#CPU_CX, #3
push_dx			REGPUSH		#CPU_DX, #3
push_bx			REGPUSH		#CPU_BX, #3
push_sp			SP_PUSH		#3
push_bp			REGPUSH		#CPU_BP, #3
push_si			REGPUSH		#CPU_SI, #3
push_di			REGPUSH		#CPU_DI, #3
pop_ax			REGPOP		#CPU_AX, #5
pop_cx			REGPOP		#CPU_CX, #5
pop_dx			REGPOP		#CPU_DX, #5
pop_bx			REGPOP		#CPU_BX, #5
pop_sp			SP_POP		#5
pop_bp			REGPOP		#CPU_BP, #5
pop_si			REGPOP		#CPU_SI, #5
pop_di			REGPOP		#CPU_DI, #5

; pusha			*
; popa			*
; bound
; arpl
; push_d16		*
; imul_r_ea_d16	+
; push_d8		*
; imul_r_ea_d8	+
; insb			*
; insw			*
; outsb			*
; outsw			*

jo_short		JMPNE		#O_FLAG, #2, #7
jno_short		JMPEQ		#O_FLAG, #2, #7
jc_short		JMPNE		#C_FLAG, #2, #7
jnc_short		JMPEQ		#C_FLAG, #2, #7
jz_short		JMPNE		#Z_FLAG, #2, #7
jnz_short		JMPEQ		#Z_FLAG, #2, #7
jna_short		JMPNE		#(Z_FLAG + C_FLAG), #2, #7
ja_short		JMPEQ		#(Z_FLAG + C_FLAG), #2, #7
js_short		JMPNE		#S_FLAG, #2, #7
jns_short		JMPEQ		#S_FLAG, #2, #7
jp_short		JMPNE		#P_FLAG, #2, #7
jnp_short		JMPEQ		#P_FLAG, #2, #7
; jl_short		+
; jnl_short		+
; jle_short		+
; jnle_short	+

; calc_ea8_i8	+
; calc_ea16_i16	+
; calc_ea16_i8	+
test_ea_r8		S_EA_R8		AND8, #2, #6
test_ea_r16		S_EA_R16	AND16, #2, #6
; xchg_ea_r8	*
; xchg_ea_r16	*
; mov_ea_r8		*
; mov_ea_r16	*
; mov_r8_ea		*
; mov_r16_ea	*
; mov_ea_seg	+
; lea_r16_ea	+
; mov_seg_ea		!
; pop_ea		*

; nop
xchg_ax_cx		XCHG_AX		#CPU_CX, #3
xchg_ax_dx		XCHG_AX		#CPU_DX, #3
xchg_ax_bx		XCHG_AX		#CPU_BX, #3
xchg_ax_sp		XCHG_AX		#CPU_SP, #3
xchg_ax_bp		XCHG_AX		#CPU_BP, #3
xchg_ax_si		XCHG_AX		#CPU_SI, #3
xchg_ax_di		XCHG_AX		#CPU_DI, #3
; cbw			*
; cwd			*
; call_far		*
; wait			*
; pushf			*
; popf				!
; sahf			*
; lahf			*

; mov_al_m8		*
; mov_ax_m16	*
; mov_m8_al		*
; mov_m16_ax	*
; movsb			*
; movsw			*
; cmpsb			*
; cmpsw			*
test_al_d8		S_AL_D8		AND8, #3
test_ax_d16		S_AX_D16	AND16, #3
; stosb			*
; stosw			*
; lodsb			*
; lodsw			*
; scasb			*
; scasw			*

mov_al_imm		MOVIMM8		#CPU_AL, #2
mov_cl_imm		MOVIMM8		#CPU_CL, #2
mov_dl_imm		MOVIMM8		#CPU_DL, #2
mov_bl_imm		MOVIMM8		#CPU_BL, #2
mov_ah_imm		MOVIMM8		#CPU_AH, #2
mov_ch_imm		MOVIMM8		#CPU_CH, #2
mov_dh_imm		MOVIMM8		#CPU_DH, #2
mov_bh_imm		MOVIMM8		#CPU_BH, #2
mov_ax_imm		MOVIMM16	#CPU_AX, #2
mov_cx_imm		MOVIMM16	#CPU_CX, #2
mov_dx_imm		MOVIMM16	#CPU_DX, #2
mov_bx_imm		MOVIMM16	#CPU_BX, #2
mov_sp_imm		MOVIMM16	#CPU_SP, #2
mov_bp_imm		MOVIMM16	#CPU_BP, #2
mov_si_imm		MOVIMM16	#CPU_SI, #2
mov_di_imm		MOVIMM16	#CPU_DI, #2

; shift_ea8_d8
; shift_ea16_d8
; ret_near_d16	+
; ret_near		+
; les_r16_ea
; lds_r16_ea
; mov_ea8_d8	*
; mov_ea16_d16	*
; enter
; leave			+
; ret_far_d16	+
; ret_far		+
; int_03		+
; int_d8		+
; into			+
; iret				!

; shift_ea8_1
; shift_ea16_1
; shift_ea8_cl
; shift_ea16_cl
; aam			+
; aad			*
; setalc		*
; xlat			*
; esc			*

; loopnz		*
; loopz			*
; loop			*
; jcxz			*
; in_al_d8		*
; in_ax_d8		*
; out_d8_al		*
; out_d8_ax		*
; call_near		*
; jmp_near		*
; jmp_far		*
jmp_short		JMPS	#7
; in_al_dx		*
; in_ax_dx		*
; out_dx_al		*
; out_dx_ax		*

; lock			*
; repne				!
; repe				!
; hlt			+
; cmc			*
; ope0xf6
; ope0xf7
; clc			*
; stc			*
; cli			*
; sti				!
; cld			*
; std			*
; ope0xfe
; ope0xff


; ----

daa				CPUWORK	#3
				ldrb	r0, [r9, #CPU_AL]
				bic		r8, r8, #O_FLAG
				eor		r2, r0, #&80
				tst		r8, #A_FLAG
				bne		daalo2
				and		r1, r0, #&0f
				cmp		r1, #10
				bcc		daahi
				orr		r8, r8, #A_FLAG
daalo2			add		r0, r0, #6
				orr		r8, r8, r0 lsr #8
				and		r0, r0, #&ff
daahi			tst		r8, #C_FLAG
				bne		daahi2
				cmp		r0, #&a0
				bcc		daaflg
				orr		r8, r8, #C_FLAG
daahi2			add		r0, r0, #&60
				and		r0, r0, #&ff
daaflg			strb	r0, [r9, #CPU_AL]
				ldrb	r1, [r10, r0]
				bic		r8, r8, #(&ff - A_FLAG - C_FLAG)
				and		r2, r0, r2
				orr		r8, r1, r8
				tst		r2, #&80
				addne	r8, r8, #O_FLAG
				mov		pc, r11

das				CPUWORK	#3
				ldrb	r0, [r9, #CPU_AL]
				tst		r8, #C_FLAG
				bne		dashi2
				cmp		r0, #&9a
				bcc		daslo
				orr		r8, r8, #C_FLAG
dashi2			sub		r0, r0, #&60
				and		r0, r0, #&ff
daslo			tst		r8, #A_FLAG
				bne		daslo2
				and		r1, r0, #&0f
				cmp		r1, #10
				bcc		dasflg
				orr		r8, r8, #A_FLAG
daslo2			sub		r0, r0, #6
				orr		r8, r8, r0 lsr #31
				and		r0, r0, #&ff
dasflg			strb	r0, [r9, #CPU_AL]
				ldrb	r1, [r10, r0]
				bic		r8, r8, #(&ff - A_FLAG - C_FLAG)
				orr		r8, r1, r8
				mov		pc, r11

aaa				CPUWORK	#3
				ldrh	r0, [r9, #CPU_AX]
				tst		r8, #A_FLAG
				bic		r8, r8, #(A_FLAG + C_FLAG)
				bne		aaa1
				and		r1, r0, #&f
				cmp		r1, #10
				bcc		aaa2
aaa1			orr		r8, r8, #(A_FLAG + C_FLAG)
				add		r0, r0, #6
				add		r0, r0, #&100
aaa2			bic		r0, r0, #&f0
				strh	r0, [r9, #CPU_AX]
				mov		pc, r11

aas				CPUWORK	#3
				ldrh	r0, [r9, #CPU_AX]
				tst		r8, #A_FLAG
				bic		r8, r8, #(A_FLAG + C_FLAG)
				bne		aas1
				and		r1, r0, #&f
				cmp		r1, #10
				movcc	pc, r11
aas1			orr		r8, r8, #(A_FLAG + C_FLAG)
				sub		r0, r0, #6
				sub		r0, r0, #&100
				strh	r0, [r9, #CPU_AX]
				mov		pc, r11


pusha			ldrh	r4, [r9, #CPU_SP]
				ldr		r5, [r9, #CPU_SS_BASE]
				mov		r6, r4
				mov		r4, r4 lsl #16
				ldrh	r1, [r9, #CPU_AX]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldrh	r1, [r9, #CPU_CX]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldrh	r1, [r9, #CPU_DX]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldrh	r1, [r9, #CPU_BX]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				mov		r1, r6
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldrh	r1, [r9, #CPU_BP]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldrh	r1, [r9, #CPU_SI]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldrh	r1, [r9, #CPU_DI]
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				mov		r0, r4 lsr #16
				strh	r0, [r9, #CPU_SP]
				mov		pc, r11

popa			ldrh	r4, [r9, #CPU_SP]
				ldr		r5, [r9, #CPU_SS_BASE]
				add		r0, r5, r4
				mov		r4, r4 lsl #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_DI]
				add		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_SI]
				add		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_BP]
				add		r4, r4, #(4 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_BX]
				add		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_DX]
				add		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_CX]
				add		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_AX]
				add		r4, r4, #(2 << 16)
				mov		r0, r4 lsr #16
				strh	r0, [r9, #CPU_SP]
				mov		pc, r11

push_d16		CPUWORK	#3
				GETPC16
				ldrh	r2, [r9, #CPU_SP]
				ldr		r3, [r9, #CPU_SS_BASE]
				subs	r2, r2, #2
				addcc	r2, r2, #&10000
				mov		r1, r0
				strh	r2, [r9, #CPU_SP]
				add		r0, r2, r3
				mov		lr, r11
				b		i286_memorywrite_w

imul_r_ea_d16	REG16EA	r5, #21, #24
				mov		r4, r0, lsl #16
				GETPC16
				mov		r0, r0, lsl #16
				mov		r4, r4, asr #16
				mov		r0, r0, asr #16
				mul		r1, r0, r4
				add		r12, r1, #&8000
				strh	r1, [r5, #CPU_REG]
				movs	r12, r12 lsr #16
				biceq	r8, r8, #O_FLAG
				biceq	r8, r8, #C_FLAG
				orrne	r8, r8, #O_FLAG
				orrne	r8, r8, #C_FLAG
				mov		pc, r11

push_d8			CPUWORK	#3
				GETPC8
				ldrh	r2, [r9, #CPU_SP]
				ldr		r3, [r9, #CPU_SS_BASE]
				subs	r2, r2, #2
				addcc	r2, r2, #&10000
				mov		r0, r0 lsl #24
				mov		r1, r0 asr #24
				strh	r2, [r9, #CPU_SP]
				add		r0, r2, r3
				mov		lr, r11
				b		i286_memorywrite_w

imul_r_ea_d8	REG16EA	r5, #21, #24
				mov		r4, r0, lsl #16
				GETPC8
				mov		r0, r0, lsl #24
				mov		r4, r4, asr #16
				mov		r0, r0, asr #24
				mul		r1, r0, r4
				add		r12, r1, #&8000
				strh	r1, [r5, #CPU_REG]
				movs	r12, r12 lsr #16
				biceq	r8, r8, #O_FLAG
				biceq	r8, r8, #C_FLAG
				orrne	r8, r8, #O_FLAG
				orrne	r8, r8, #C_FLAG
				mov		pc, r11

insb			ldrh	r0, [r9, #CPU_DX]
				bl		iocore_inp8
				ldrh	r2, [r9, #CPU_DI]
				ldr		r3, [r9, #CPU_ES_BASE]
				mov		r1, r0
				add		r0, r2, r3
				tst		r8, #D_FLAG
				addeq	r2, r2, #1
				subne	r2, r2, #1
				mov		lr, r11
				strh	r2, [r9, #CPU_DI]
				b		i286_memorywrite

insw			ldrh	r0, [r9, #CPU_DX]
				bl		iocore_inp16
				ldrh	r2, [r9, #CPU_DI]
				ldr		r3, [r9, #CPU_ES_BASE]
				mov		r1, r0
				add		r0, r2, r3
				tst		r8, #D_FLAG
				addeq	r2, r2, #2
				subne	r2, r2, #2
				mov		lr, r11
				strh	r2, [r9, #CPU_DI]
				b		i286_memorywrite_w

outsb			ldrh	r1, [r9, #CPU_SI]
				ldr		r2, [r9, #CPU_DS_FIX]
				add		r0, r1, r2
				tst		r8, #D_FLAG
				addeq	r1, r1, #1
				subne	r1, r1, #1
				strh	r1, [r9, #CPU_SI]
				bl		i286_memoryread
				mov		r1, r0
				ldr		r0, [r9, #CPU_DX]
				mov		lr, r11
				b		iocore_out8

outsw			ldrh	r1, [r9, #CPU_SI]
				ldr		r2, [r9, #CPU_DS_FIX]
				add		r0, r1, r2
				tst		r8, #D_FLAG
				addeq	r1, r1, #2
				subne	r1, r1, #2
				strh	r1, [r9, #CPU_SI]
				bl		i286_memoryread_w
				mov		r1, r0
				ldr		r0, [r9, #CPU_DX]
				mov		lr, r11
				b		iocore_out16

jle_short		tst		r8, #Z_FLAG
				bne		jmps
jl_short		eor		r0, r8, r8 lsr #4
				tst		r0, #S_FLAG
				bne		jmps
nojmps			CPUWORK	#2
				add		r8, r8, #(1 << 16)
				mov		pc, r11

jnle_short		tst		r8, #Z_FLAG
				bne		jmps
jnl_short		eor		r0, r8, r8 lsr #4
				tst		r0, #S_FLAG
				bne		nojmps
jmps			JMPS	#7


xchg_ea_r8		EAREG8	r6
				cmp		r0, #&c0
				bcc		xchgear8_1
				CPUWORK	#3
				R8SRC	r0, r5
				ldrb	r0, [r6, #CPU_REG]
				ldrb	r1, [r5, #CPU_REG]
				strb	r0, [r5, #CPU_REG]
				strb	r1, [r6, #CPU_REG]
				mov		pc, r11
xchgear8_1		CPUWORK	#5
				bl		i286a_ea
				cmp		r0, #I286_MEMWRITEMAX
				bcs		xchgear8_2
				ldrb	r1, [r6, #CPU_REG]
				ldrb	r4, [r9, r0]
				strb	r1, [r9, r0]
				strb	r4, [r6, #CPU_REG]
				mov		pc, r11
xchgear8_2		mov		r5, r0
				bl		i286_memoryread
				ldrb	r1, [r6, #CPU_REG]
				strb	r0, [r6, #CPU_REG]
				mov		r0, r5
				mov		lr, r11
				b		i286_memorywrite

xchg_ea_r16		EAREG16	r6
				cmp		r0, #&c0
				bcc		xchgear16_1
				CPUWORK	#3
				R16SRC	r0, r5
				ldrh	r0, [r6, #CPU_REG]
				ldrh	r1, [r5, #CPU_REG]
				strh	r0, [r5, #CPU_REG]
				strh	r1, [r6, #CPU_REG]
				mov		pc, r11
xchgear16_1		CPUWORK	#5
				bl		i286a_ea
				tst		r0, #1
				bne		xchgear16_2
				cmp		r0, #I286_MEMWRITEMAX
				bcs		xchgear16_2
				ldrh	r1, [r6, #CPU_REG]
				ldrh	r4, [r9, r0]
				strh	r1, [r9, r0]
				strh	r4, [r6, #CPU_REG]
				mov		pc, r11
xchgear16_2		mov		r5, r0
				bl		i286_memoryread_w
				ldrh	r1, [r6, #CPU_REG]
				strh	r0, [r6, #CPU_REG]
				mov		r0, r5
				mov		lr, r11
				b		i286_memorywrite_w

mov_ea_r8		EAREG8	r6
				cmp		r0, #&c0
				bcc		movear8_1
				CPUWORK	#3
				R8SRC	r0, r5
				ldrb	r0, [r6, #CPU_REG]
				strb	r0, [r5, #CPU_REG]
				mov		pc, r11
movear8_1		CPUWORK	#5
				bl		i286a_ea
				ldrb	r1, [r6, #CPU_REG]
				mov		lr, r11
				b		i286_memorywrite

mov_ea_r16		EAREG16	r6
				cmp		r0, #&c0
				bcc		movear16_1
				CPUWORK	#3
				R16SRC	r0, r5
				ldrh	r0, [r6, #CPU_REG]
				strh	r0, [r5, #CPU_REG]
				mov		pc, r11
movear16_1		CPUWORK	#5
				bl		i286a_ea
				ldrh	r1, [r6, #CPU_REG]
				mov		lr, r11
				b		i286_memorywrite_w

mov_r8_ea		REG8EA	r5, #2, #5
				ldrb	r0, [r5, #CPU_REG]
				mov		pc, r11

mov_r16_ea		REG16EA	r5, #2, #5
				ldrh	r0, [r5, #CPU_REG]
				mov		pc, r11

mov_ea_seg		GETPC8
				and		r1, r0, #(3 << 3)
				add		r1, r9, r1 lsr #2
				ldrh	r5, [r1, #CPU_REG]
				cmp		r0, #&c0
				bcc		measegm
				CPUWORK	#2
				R16DST	r0, r4
				strh	r5, [r4, #CPU_REG]
				mov		pc, r11
measegm			CPUWORK	#3
				bl		i286a_ea
				mov		r1, r5
				mov		lr, r11
				b		i286_memorywrite_w

lea_r16_ea		CPUWORK	#3
				GETPC8
				cmp		r0, #&c0
				bcs		leareg
				R8DST	r0, r5
				bl		i286a_lea
				strh	r0, [r5, #CPU_REG]
				mov		pc, r11
leareg			mov		r6, #6
				sub		r8, r8, #(2 << 16)
				b		i286a_localint


pop_ea			POP		#5
				mov		r4, r0
				GETPC8
				cmp		r0, #&c0
				bcs		popreg
				bl		i286a_ea
				mov		r1, r4
				mov		lr, r11
				b		i286_memorywrite_w
popreg			R16DST	r0, r1
				ldrh	r4, [r1, #CPU_REG]
				mov		pc, r11


cbw				CPUWORK	#2
				ldrb	r0, [r9, #CPU_AL]
				mov		r1, r0 lsl #24
				mov		r0, r1 asr #31
				strb	r0, [r9, #CPU_AH]
				mov		pc, r11

cwd				CPUWORK	#2
				ldrb	r0, [r9, #CPU_AH]
				mov		r1, r0 lsl #24
				mov		r0, r1 asr #31
				strh	r0, [r9, #CPU_DX]
				mov		pc, r11

call_far		CPUWORK	#13
				ldrh	r1, [r9, #CPU_CS]
				ldrh	r4, [r9, #CPU_SP]
				ldr		r5, [r9, #CPU_SS_BASE]
				mov		r4, r4 lsl #16
				sub		r4, r4, #(2 << 16)
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				add		r12, r8, #(4 << 16)
				sub		r4, r4, #(2 << 16)
				mov		r1, r12 lsr #16
				add		r0, r5, r4 lsr #16
				bl		i286_memorywrite_w
				ldr		r5, [r9, #CPU_CS_BASE]
				strh	r4, [r9, #CPU_SP]
				add		r0, r5, r8 lsr #16
				bl		i286_memoryread_w
				add		r8, r8, #(2 << 16)
				mov		r4, r0 lsl #16
				add		r0, r5, r8 lsr #16
				bl		i286_memoryread_w
				mov		r1, r0 lsl #4
				strh	r0, [r9, #CPU_CS]
				str		r1, [r9, #CPU_CS_BASE]
				mov		r0, r8 lsl #16
				orr		r8, r4, r0 lsr #16
				mov		pc, r11

wait			CPUWORK	#2
				mov		pc, r11

pushf			CPUWORK	#3
				ldrh	r1, [r9, #CPU_SP]
				ldr		r2, [r9, #CPU_SS_BASE]
				sub		r0, r1, #2
				mov		r3, r0 lsl #16
				strh	r0, [r9, #CPU_SP]
				add		r0, r2, r3 lsr #16
				mov		r1, r8
				mov		lr, r11
				b		i286_memorywrite_w

sahf			CPUWORK	#2
				ldrb	r0, [r9, #CPU_AH]
				bic		r8, r8, #&ff
				orr		r8, r0, r8
				mov		pc, r11

lahf			CPUWORK	#2
				strb	r8, [r9, #CPU_AH]
				mov		pc, r11


mov_al_m8		CPUWORK	#5
				ldr		r5, [r9, #CPU_DS_FIX]
				GETPC16
				add		r0, r5, r0
				bl		i286_memoryread
				strb	r0, [r9, #CPU_AL]
				mov		pc, r11

mov_ax_m16		CPUWORK	#5
				ldr		r5, [r9, #CPU_DS_FIX]
				GETPC16
				add		r0, r5, r0
				bl		i286_memoryread_w
				strh	r0, [r9, #CPU_AX]
				mov		pc, r11

mov_m8_al		CPUWORK	#5
				ldr		r5, [r9, #CPU_DS_FIX]
				GETPC16
				ldrb	r1, [r9, #CPU_AL]
				add		r0, r5, r0
				mov		lr, r11
				b		i286_memorywrite

mov_m16_ax		CPUWORK	#5
				ldr		r5, [r9, #CPU_DS_FIX]
				GETPC16
				ldrh	r1, [r9, #CPU_AX]
				add		r0, r5, r0
				mov		lr, r11
				b		i286_memorywrite_w

movsb			CPUWORK	#5
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread
				ldr		r2, [r9, #CPU_ES_BASE]
				ldrh	r3, [r9, #CPU_DI]
				and		r12, r8, #D_FLAG
				mov		r1, r0
				mov		r12, r12 lsr #(10 - 1)
				add		r0, r2, r3
				add		r2, r12, #-1
				mov		lr, r11
				add		r5, r2, r5
				add		r3, r2, r3
				strh	r5, [r9, #CPU_SI]
				strh	r3, [r9, #CPU_DI]
				b		i286_memorywrite

movsw			CPUWORK	#5
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread_w
				ldr		r2, [r9, #CPU_ES_BASE]
				ldrh	r3, [r9, #CPU_DI]
				and		r12, r8, #D_FLAG
				mov		r1, r0
				mov		r12, r12 lsr #(10 - 2)
				add		r0, r2, r3
				add		r2, r12, #-2
				mov		lr, r11
				add		r5, r2, r5
				add		r3, r2, r3
				strh	r5, [r9, #CPU_SI]
				strh	r3, [r9, #CPU_DI]
				b		i286_memorywrite_w

cmpsb			CPUWORK	#8
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread
				ldr		r2, [r9, #CPU_ES_BASE]
				ldrh	r3, [r9, #CPU_DI]
				mov		r6, r0
				and		r12, r8, #D_FLAG
				mov		r12, r12 lsr #(10 - 1)
				add		r0, r2, r3
				add		r2, r12, #-1
				add		r5, r2, r5
				add		r3, r2, r3
				strh	r5, [r9, #CPU_SI]
				strh	r3, [r9, #CPU_DI]
				bl		i286_memoryread
				SUB8	r6, r0
				mov		pc, r11

cmpsw			CPUWORK	#8
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread_w
				ldr		r2, [r9, #CPU_ES_BASE]
				ldrh	r3, [r9, #CPU_DI]
				mov		r6, r0
				and		r12, r8, #D_FLAG
				mov		r12, r12 lsr #(10 - 2)
				add		r0, r2, r3
				add		r2, r12, #-2
				add		r5, r2, r5
				add		r3, r2, r3
				strh	r5, [r9, #CPU_SI]
				strh	r3, [r9, #CPU_DI]
				bl		i286_memoryread_w
				SUB16	r6, r0
				mov		pc, r11

stosb			CPUWORK	#3
				ldr		r0, [r9, #CPU_ES_BASE]
				ldrb	r1, [r9, #CPU_AL]
				ldrh	r2, [r9, #CPU_DI]
				add		r0, r2, r0
				tst		r8, #D_FLAG
				addeq	r2, r2, #1
				subne	r2, r2, #1
				strh	r2, [r9, #CPU_DI]
				mov		lr, r11
				b		i286_memorywrite

stosw			CPUWORK	#3
				ldr		r0, [r9, #CPU_ES_BASE]
				ldrh	r1, [r9, #CPU_AX]
				ldrh	r2, [r9, #CPU_DI]
				add		r0, r2, r0
				tst		r8, #D_FLAG
				addeq	r2, r2, #2
				subne	r2, r2, #2
				strh	r2, [r9, #CPU_DI]
				mov		lr, r11
				b		i286_memorywrite_w

lodsb			CPUWORK	#5
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread
				tst		r8, #D_FLAG
				addeq	r5, r5, #1
				subne	r5, r5, #1
				strb	r0, [r9, #CPU_AL]
				strh	r5, [r9, #CPU_SI]
				mov		pc, r11

lodsw			CPUWORK	#5
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread_w
				tst		r8, #D_FLAG
				addeq	r5, r5, #2
				subne	r5, r5, #2
				strh	r0, [r9, #CPU_AX]
				strh	r5, [r9, #CPU_SI]
				mov		pc, r11

scasb			CPUWORK	#7
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread
				tst		r8, #D_FLAG
				addeq	r5, r5, #1
				subne	r5, r5, #1
				strh	r5, [r9, #CPU_SI]
				ldrb	r5, [r9, #CPU_AL]
				SUB8	r5, r0
				mov		pc, r11

scasw			CPUWORK	#7
				ldr		r0, [r9, #CPU_DS_FIX]
				ldrh	r5, [r9, #CPU_SI]
				add		r0, r5, r0
				bl		i286_memoryread_w
				tst		r8, #D_FLAG
				addeq	r5, r5, #2
				subne	r5, r5, #2
				strh	r5, [r9, #CPU_SI]
				ldrh	r5, [r9, #CPU_AX]
				SUB16	r5, r0
				mov		pc, r11


ret_near_d16	CPUWORK	#11
				GETPC16
				ldrh	r1, [r9, #CPU_SP]
				ldr		r2, [r9, #CPU_SS_BASE]
				add		r3, r0, r1
				add		r0, r1, r2
				add		r3, r3, #2
				strh	r3, [r9, #CPU_SP]
				bl		i286_memoryread_w
				mov		r8, r8 lsl #16
				mov		r8, r8 lsr #16
				orr		r8, r8, r0 lsl #16
				mov		pc, r11

ret_near		CPUWORK	#11
				ldrh	r4, [r9, #CPU_SP]
				ldr		r0, [r9, #CPU_SS_BASE]
				add		r0, r4, r0
				add		r4, r4, #2
				strh	r4, [r9, #CPU_SP]
				bl		i286_memoryread_w
				mov		r8, r8 lsl #16
				mov		r8, r8 lsr #16
				orr		r8, r8, r0 lsl #16
				mov		pc, r11

mov_ea8_d8		GETPC16
				and		r1, r0, #&ff
				mov		r4, r0, lsr #8
				cmp		r1, #&c0
				bcs		med8_r
				bl		i286a_ea
				mov		r1, r4
				mov		lr, r11
				b		i286_memorywrite
med8_r			R8DST	r0, r1
				ldrb	r4, [r1, #CPU_REG]
				mov		pc, r11

mov_ea16_d16	GETPC8
				cmp		r0, #&c0
				bcs		med16_r
				bl		i286a_ea
				mov		r4, r0
				GETPC16
				mov		r1, r0
				mov		r0, r4
				mov		lr, r11
				b		i286_memorywrite_w
med16_r			R16DST	r0, r4
				GETPC16
				ldrh	r0, [r4, #CPU_REG]
				mov		pc, r11

leave			CPUWORK	#5
				ldrh	r4, [r9, #CPU_BP]
				ldr		r0, [r9, #CPU_SS_BASE]
				add		r0, r4, r0
				bl		i286_memoryread_w
				add		r4, r4, #2
				strh	r0, [r9, #CPU_BP]
				strh	r4, [r9, #CPU_SP]
				mov		pc, r11

ret_far_d16		CPUWORK	#15
				GETPC16
				mov		r6, r0
				ldrh	r4, [r9, #CPU_SP]
				ldr		r5, [r9, #CPU_SS_BASE]
				add		r0, r4, r5
				add		r4, r4, #2
				bl		i286_memoryread_w
				mov		r8, r8 lsl #16
				mov		r8, r8 lsr #16
				orr		r8, r8, r0 lsl #16
				bic		r4, r4, #(1 << 16)
				add		r0, r4, r5
				add		r4, r4, #2
				bl		i286_memoryread_w
				add		r4, r6, r4
				mov		r1, r0 lsl #4
				strh	r4, [r9, #CPU_SP]
				strh	r0, [r9, #CPU_CS]
				str		r1, [r9, #CPU_CS_BASE]
				mov		pc, r11

ret_far			CPUWORK	#15
				ldrh	r4, [r9, #CPU_SP]
				ldr		r5, [r9, #CPU_SS_BASE]
				add		r0, r4, r5
				add		r4, r4, #2
				bl		i286_memoryread_w
				mov		r8, r8 lsl #16
				mov		r8, r8 lsr #16
				orr		r8, r8, r0 lsl #16
				bic		r4, r4, #(1 << 16)
				add		r0, r4, r5
				add		r4, r4, #2
				bl		i286_memoryread_w
				mov		r1, r0 lsl #4
				strh	r4, [r9, #CPU_SP]
				strh	r0, [r9, #CPU_CS]
				str		r1, [r9, #CPU_CS_BASE]
				mov		pc, r11

int_03			CPUWORK	#3
				mov		r6, #3
				b		i286a_localint

int_d8			CPUWORK	#3
				GETPC8
				mov		r6, r0
				b		i286a_localint

into			CPUWORK	#4
				tst		r8, #O_FLAG
				moveq	pc, r11
				mov		r6, #4
				b		i286a_localint


aam				CPUWORK	#16
				GETPC8
				movs	r0, r0, lsl #7
				beq		aamzero
				ldrb	r1, [r9, #CPU_AL]
				mov		r2, #&80
				mov		r3, #0
aamlp			cmp		r1, r0
				subcs	r1, r1, r0
				orrcs	r3, r2, r3
				movs	r2, r2 lsr #1
				bne		aamlp
				bic		r8, r8, #(S_FLAG + Z_FLAG + P_FLAG)
				ldrb	r2, [r10, r1]
				and		r2, r2, #P_FLAG
				orr		r8, r2, r8
				orr		r1, r1, r3 lsl #8
				movs	r2, r1 lsl #16
				orreq	r8, r8, #Z_FLAG
				orrmi	r8, r8, #S_FLAG
				strh	r1, [r9, #CPU_AX]
				mov		pc, r11
aamzero			sub		r8, r8, #(2 << 16)
				mov		r6, #0
				b		i286a_localint

aad				CPUWORK	#14
				GETPC8
				ldrh	r1, [r9, #CPU_AX]
				bic		r8, r8, #(S_FLAG + Z_FLAG + P_FLAG)
				mov		r2, r1 lsr #8
				mla		r3, r2, r0, r1
				and		r1, r3, #&ff
				ldrb	r2, [r10, r1]
				strh	r1, [r9, #CPU_AX]
				orr		r8, r2, r8
				mov		pc, r11

setalc			CPUWORK	#2
				mov		r0, r8 lsr #31
				mov		r0, r0 asr #31
				strb	r0, [r9, #CPU_AL]
				mov		pc, r11

xlat			CPUWORK	#5
				ldrb	r0, [r9, #CPU_AL]
				ldrh	r1, [r9, #CPU_BX]
				ldr		r2, [r9, #CPU_DS_FIX]
				add		r0, r1, r0
				bic		r0, r0, #(1 << 16)
				add		r0, r2, r0
				bl		i286_memoryread
				strb	r0, [r9, #CPU_AL]
				mov		pc, r11

esc				CPUWORK	#2
				GETPC8
				cmp		r0, #&c0
				movcs	pc, r11
				mov		lr, r11
				b		i286a_ea


loopnz			ldrh	r0, [r9, #CPU_CX]
				subs	r0, r0, #1
				strh	r0, [r9, #CPU_CX]
				beq		lpnznoj
				tst		r8, #Z_FLAG
				bne		lpnznoj
				JMPS	#8
lpnznoj			CPUWORK	#4
				add		r8, r8, #(1 << 16)
				mov		pc, r11

loopz			ldrh	r0, [r9, #CPU_CX]
				subs	r0, r0, #1
				strh	r0, [r9, #CPU_CX]
				beq		lpznoj
				tst		r8, #Z_FLAG
				beq		lpnznoj
				JMPS	#8
lpznoj			CPUWORK	#4
				add		r8, r8, #(1 << 16)
				mov		pc, r11

loop			ldrh	r0, [r9, #CPU_CX]
				subs	r0, r0, #1
				strh	r0, [r9, #CPU_CX]
				beq		lpnoj
				JMPS	#8
lpnoj			CPUWORK	#4
				add		r8, r8, #(1 << 16)
				mov		pc, r11

jcxz			ldrh	r0, [r9, #CPU_CX]
				cmp		r0, #0
				beq		jcxzj
				CPUWORK	#4
				add		r8, r8, #(1 << 16)
				mov		pc, r11
jcxzj			JMPS	#8

in_al_d8		CPUWORK	#5
				GETPC8
				bl		iocore_inp8
				strb	r0, [r9, #CPU_AL]
				mov		pc, r11

in_ax_d8		CPUWORK	#5
				GETPC8
				bl		iocore_inp16
				strh	r0, [r9, #CPU_AX]
				mov		pc, r11

out_d8_al		CPUWORK	#3
				GETPC8
				ldrb	r1, [r9, #CPU_AL]
				mov		lr, r11
				b		iocore_out8

out_d8_ax		CPUWORK	#3
				GETPC8
				ldrh	r1, [r9, #CPU_AX]
				mov		lr, r11
				b		iocore_out16

call_near		CPUWORK	#7
				GETPC16
				ldrh	r2, [r9, #CPU_SP]
				ldr		r3, [r9, #CPU_SS_BASE]
				sub		r1, r2, #2
				mov		r2, r1 lsl #16
				strh	r1, [r9, #CPU_SP]
				mov		r1, r8 lsr #16
				add		r8, r8, r0 lsl #16
				add		r0, r3, r2 lsr #16
				mov		lr, r11
				b		i286_memorywrite_w

jmp_near		CPUWORK	#7
				GETPC16
				add		r8, r8, r0 lsl #16
				mov		pc, r11

jmp_far			CPUWORK	#11
				ldr		r4, [r9, #CPU_CS_BASE]
				add		r0, r4, r8 lsr #16
				bl		i286_memoryread_w
				add		r8, r8, #(2 << 16)
				mov		r1, r0, lsl #16
				add		r0, r4, r8 lsr #16
				mov		r8, r8, lsl #16
				orr		r8, r0, r8 lsr #16
				bl		i286_memoryread_w
				mov		r1, r0 lsl #4
				strh	r0, [r9, #CPU_CS]
				str		r1, [r9, #CPU_CS_BASE]
				mov		pc, r11

in_al_dx		CPUWORK	#5
				ldrh	r0, [r9, #CPU_DX]
				bl		iocore_inp8
				strb	r0, [r9, #CPU_AL]
				mov		pc, r11

in_ax_dx		CPUWORK	#5
				ldrh	r0, [r9, #CPU_DX]
				bl		iocore_inp16
				strh	r0, [r9, #CPU_AX]
				mov		pc, r11

out_dx_al		CPUWORK	#3
				ldrb	r1, [r9, #CPU_AL]
				ldrh	r0, [r9, #CPU_DX]
				mov		lr, r11
				b		iocore_out8

out_dx_ax		CPUWORK	#3
				ldrh	r1, [r9, #CPU_AX]
				ldrh	r0, [r9, #CPU_DX]
				mov		lr, r11
				b		iocore_out16


lock			CPUWORK	#2
				mov		pc, r11

hlt				CREMSET	#-1
				sub		r8, r8, #(1 << 16)
				mov		pc, r11

cmc				CPUWORK	#2
				eor		r8, r8, #C_FLAG
				mov		pc, r11

clc				CPUWORK	#2
				bic		r8, r8, #C_FLAG
				mov		pc, r11

stc				CPUWORK	#2
				orr		r8, r8, #C_FLAG
				mov		pc, r11

cli				CPUWORK	#3
				mov		r0, #0
				bic		r8, r8, #I_FLAG
				strb	r0, [r9, #CPU_TRAP]
				mov		pc, r11

cld				CPUWORK	#2
				bic		r8, r8, #D_FLAG
				mov		pc, r11

std				CPUWORK	#2
				orr		r8, r8, #D_FLAG
				mov		pc, r11



i286a_step		stmdb	sp!, {r4 - r11, lr}
				ldr		r9, ias_r9
				ldr		r10, ias_r10
		;		ldr		r7, [r9, #CPU_REMAINCLOCK]
				ldr		r8, [r9, #CPU_FLAG]

				ldr		r0, [r9, #CPU_CS_BASE]
				add		r0, r0, r8 lsr #16
				bl		i286_memoryread
				add		r8, r8, #(1 << 16)

				adr		r1, optbl1
				mov		r11, pc
				ldr		pc, [r1, r0 lsl #2]

				str		r8, [r9, #CPU_FLAG]

				ldmia	sp!, {r4 - r11, pc}

ias_r9			dcd		i286core - CPU_REG
ias_r10			dcd		_szpcflag8

optbl1			dcd		add_ea_r8
				dcd		add_ea_r16
				dcd		add_r8_ea
				dcd		add_r16_ea
				dcd		add_al_d8
				dcd		add_ax_d16
				dcd		push_es
				dcd		pop_es
				dcd		or_ea_r8
				dcd		or_ea_r16
				dcd		or_r8_ea
				dcd		or_r16_ea
				dcd		or_al_d8
				dcd		or_ax_d16
				dcd		push_cs
				dcd		0					; op_0f/pop_cs

				dcd		adc_ea_r8
				dcd		adc_ea_r16
				dcd		adc_r8_ea
				dcd		adc_r16_ea
				dcd		adc_al_d8
				dcd		adc_ax_d16
				dcd		push_ss
				dcd		pop_ss
				dcd		sbb_ea_r8
				dcd		sbb_ea_r16
				dcd		sbb_r8_ea
				dcd		sbb_r16_ea
				dcd		sbb_al_d8
				dcd		sbb_ax_d16
				dcd		push_ds
				dcd		pop_ds

				dcd		and_ea_r8
				dcd		and_ea_r16
				dcd		and_r8_ea
				dcd		and_r16_ea
				dcd		and_al_d8
				dcd		and_ax_d16
				dcd		0				; segprefix_es
				dcd		0				; daa
				dcd		sub_ea_r8
				dcd		sub_ea_r16
				dcd		sub_r8_ea
				dcd		sub_r16_ea
				dcd		sub_al_d8
				dcd		sub_ax_d16
				dcd		0				; segprefix_cs
				dcd		0				; das

				dcd		xor_ea_r8
				dcd		xor_ea_r16
				dcd		xor_r8_ea
				dcd		xor_r16_ea
				dcd		xor_al_d8
				dcd		xor_ax_d16
				dcd		0				; segprefix_ss
				dcd		0				; aaa
				dcd		cmp_ea_r8
				dcd		cmp_ea_r16
				dcd		cmp_r8_ea
				dcd		cmp_r16_ea
				dcd		cmp_al_d8
				dcd		cmp_ax_d16
				dcd		0				; segprefix_ds
				dcd		0				; aas

				dcd		inc_ax
				dcd		inc_cx
				dcd		inc_dx
				dcd		inc_bx
				dcd		inc_sp
				dcd		inc_bp
				dcd		inc_si
				dcd		inc_di
				dcd		dec_ax
				dcd		dec_cx
				dcd		dec_dx
				dcd		dec_bx
				dcd		dec_sp
				dcd		dec_bp
				dcd		dec_si
				dcd		dec_di

				dcd		push_ax
				dcd		push_cx
				dcd		push_dx
				dcd		push_bx
				dcd		push_sp
				dcd		push_bp
				dcd		push_si
				dcd		push_di
				dcd		pop_ax
				dcd		pop_cx
				dcd		pop_dx
				dcd		pop_bx
				dcd		pop_sp
				dcd		pop_bp
				dcd		pop_si
				dcd		pop_di

				dcd		0				; pusha
				dcd		0				; popa
				dcd		0				; bound
				dcd		0				; arpl
				dcd		0				; reserved
				dcd		0				; reserved
				dcd		0				; reserved
				dcd		0				; reserved
				dcd		0				; push_d16
				dcd		0				; imul_reg_ea_d16
				dcd		0				; push_d8
				dcd		0				; imul_reg_ea_d8
				dcd		0				; insb
				dcd		0				; insw
				dcd		0				; outsb
				dcd		0				; outsw

				dcd		jo_short
				dcd		jno_short
				dcd		jc_short
				dcd		jnc_short
				dcd		jz_short
				dcd		jnz_short
				dcd		jna_short
				dcd		ja_short
				dcd		js_short
				dcd		jns_short
				dcd		jp_short
				dcd		jnp_short
				dcd		0				; jl_short
				dcd		0				; jnl_short
				dcd		0				; jle_short
				dcd		0				; jnle_short

				dcd		0				; calc_ea8_i8
				dcd		0				; calc_ea16_i16
				dcd		0				; calc_ea8_i8
				dcd		0				; calc_ea16_i8
				dcd		test_ea_r8
				dcd		test_ea_r16
				dcd		xchg_ea_r8
				dcd		xchg_ea_r16
				dcd		mov_ea_r8
				dcd		mov_ea_r16
				dcd		mov_r8_ea
				dcd		mov_r16_ea
				dcd		0				; mov_ea_seg
				dcd		0				; lea_r16_ea
				dcd		0				; mov_seg_ea
				dcd		0				; pop_ea

				dcd		0				; nop
				dcd		xchg_ax_cx
				dcd		xchg_ax_dx
				dcd		xchg_ax_bx
				dcd		xchg_ax_sp
				dcd		xchg_ax_bp
				dcd		xchg_ax_si
				dcd		xchg_ax_di
				dcd		cbw
				dcd		cwd
				dcd		0				; call_far
				dcd		wait
				dcd		0				; pushf
				dcd		0				; popf
				dcd		sahf
				dcd		lahf

				dcd		mov_al_m8
				dcd		mov_ax_m16
				dcd		mov_m8_al
				dcd		mov_m16_ax
				dcd		0				; movsb
				dcd		0				; movsw
				dcd		0				; cmpsb
				dcd		0				; cmpsw
				dcd		test_al_d8
				dcd		test_ax_d16
				dcd		0				; stosb
				dcd		0				; stosw
				dcd		0				; lodsb
				dcd		0				; lodsw
				dcd		0				; scasb
				dcd		0				; scasw

				dcd		mov_al_imm
				dcd		mov_cl_imm
				dcd		mov_dl_imm
				dcd		mov_bl_imm
				dcd		mov_ah_imm
				dcd		mov_ch_imm
				dcd		mov_dh_imm
				dcd		mov_bh_imm
				dcd		mov_ax_imm
				dcd		mov_cx_imm
				dcd		mov_dx_imm
				dcd		mov_bx_imm
				dcd		mov_sp_imm
				dcd		mov_bp_imm
				dcd		mov_si_imm
				dcd		mov_di_imm

				dcd		0				; shift_ea8_d8
				dcd		0				; shift_ea16_d8
				dcd		0				; ret_near_d16
				dcd		0				; ret_near
				dcd		0				; les_r16_ea
				dcd		0				; lds_r16_ea
				dcd		0				; mov_ea8_d8
				dcd		0				; mov_ea16_d16
				dcd		0				; enter
				dcd		0				; leave
				dcd		0				; ret_far_d16
				dcd		0				; ret_far
				dcd		0				; int_03
				dcd		0				; int_d8
				dcd		0				; into
				dcd		0				; iret

				dcd		0				; shift_ea8_1
				dcd		0				; shift_ea16_1
				dcd		0				; shift_ea8_cl
				dcd		0				; shift_ea16_cl
				dcd		0				; aam
				dcd		0				; aad
				dcd		0				; setalc
				dcd		0				; xlat
				dcd		0				; esc0
				dcd		0				; esc1
				dcd		0				; esc2
				dcd		0				; esc3
				dcd		0				; esc4
				dcd		0				; esc5
				dcd		0				; esc6
				dcd		0				; esc7

				dcd		0				; loopnz
				dcd		0				; loopz
				dcd		0				; loop
				dcd		0				; jcxz
				dcd		0				; in_al_d8
				dcd		0				; in_ax_d8
				dcd		0				; out_d8_al
				dcd		0				; out_d8_ax
				dcd		0				; call_near
				dcd		0				; jmp_near
				dcd		0				; jmp_far
				dcd		jmp_short
				dcd		0				; in_al_dx
				dcd		0				; in_ax_dx
				dcd		0				; out_dx_al
				dcd		0				; out_dx_ax

				dcd		0				; lock
				dcd		0				; lock
				dcd		0				; repne
				dcd		0				; repe
				dcd		0				; hlt
				dcd		0				; cmc
				dcd		0				; ope0xf6
				dcd		0				; ope0xf7
				dcd		0				; clc
				dcd		0				; stc
				dcd		0				; cli
				dcd		0				; sti
				dcd		0				; cld
				dcd		0				; std
				dcd		0				; ope0xfe
				dcd		0				; ope0xff


	END


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