File:  [RetroPC.NET] / np2 / i286a / i286a.inc
Revision 1.11: download - view: text, annotated - select for diffs
Fri Dec 19 18:38:25 2003 JST (21 years, 10 months ago) by yui
Branches: MAIN
CVS tags: HEAD
fix i286a (T.Yui)


I286_MEMREADMAX		equ		&a4000
I286_MEMWRITEMAX	equ		&a0000

C_FLAG				equ		&0001
P_FLAG				equ		&0004
A_FLAG				equ		&0010
Z_FLAG				equ		&0040
S_FLAG				equ		&0080
T_FLAG				equ		&0100
I_FLAG				equ		&0200
D_FLAG				equ		&0400
O_FLAG				equ		&0800

CPU_SIZE			equ		112
CPU_STAT			equ		0 - 112
CPU_EXT				equ		104 - 112

CPU_REG				equ		CPU_STAT + 0
CPU_SEG				equ		CPU_STAT + 16
CPU_REMAINCLOCK		equ		CPU_STAT + 28
CPU_BASECLOCK		equ		CPU_STAT + 32
; cpu_clock			equ		CPU_STAT + 36
CPU_ADRSMASK		equ		CPU_STAT + 40
CPU_ES_BASE			equ		CPU_STAT + 44
CPU_CS_BASE			equ		CPU_STAT + 48
CPU_SS_BASE			equ		CPU_STAT + 52
CPU_DS_BASE			equ		CPU_STAT + 56
CPU_SS_FIX			equ		CPU_STAT + 60
CPU_DS_FIX			equ		CPU_STAT + 64
CPU_PREFIX			equ		CPU_STAT + 68
CPU_TRAP			equ		CPU_STAT + 70
; cpu_type			equ		CPU_STAT + 71
; cpu_pf_semaphore	equ		CPU_STAT + 72
; cpu_repbak		equ		CPU_STAT + 76
CPU_INPUT			equ		CPU_STAT + 80
; cpu_ovflag		equ		CPU_STAT + 84
CPU_GDTR			equ		CPU_STAT + 88
CPU_IDTR			equ		CPU_STAT + 94
CPU_MSW				equ		CPU_STAT + 100
; cpu_resetreq		equ		CPU_STAT + 102
; cpu_itfbank		equ		CPU_STAT + 103
; cpu_stat_size		equ		104
CPU_EXTMEM			equ		CPU_STAT + 104
CPU_EXTMEMSIZE		equ		CPU_STAT + 108
; cpu_ext_size		equ		8
; cpu_mainmem		equ		CPU_STAT + 112

CPU_AL				equ		CPU_STAT + 0
CPU_AH				equ		CPU_STAT + 1
CPU_CL				equ		CPU_STAT + 2
CPU_CH				equ		CPU_STAT + 3
CPU_DL				equ		CPU_STAT + 4
CPU_DH				equ		CPU_STAT + 5
CPU_BL				equ		CPU_STAT + 6
CPU_BH				equ		CPU_STAT + 7

CPU_AX				equ		CPU_STAT + 0
CPU_CX				equ		CPU_STAT + 2
CPU_DX				equ		CPU_STAT + 4
CPU_BX				equ		CPU_STAT + 6
CPU_SP				equ		CPU_STAT + 8
CPU_BP				equ		CPU_STAT + 10
CPU_SI				equ		CPU_STAT + 12
CPU_DI				equ		CPU_STAT + 14
CPU_ES				equ		CPU_STAT + 16
CPU_CS				equ		CPU_STAT + 18
CPU_SS				equ		CPU_STAT + 20
CPU_DS				equ		CPU_STAT + 22
CPU_FLAG			equ		CPU_STAT + 24
CPU_IP				equ		CPU_STAT + 26

MAX_PREFIX			equ		8


	MACRO
$label	CPUSVC
$label
	MEND

	MACRO
$label	CPULDC
$label
	MEND

	MACRO
$label	CPUSVF
$label		str		r8, [r9, #CPU_FLAG]
	MEND

	MACRO
$label	CPULDF
$label		ldr		r8, [r9, #CPU_FLAG]
	MEND

	MACRO
$label	CPUSV
$label	CPUSVF
		CPUSVC
	MEND

	MACRO
$label	CPULD
$label	CPULDF
		CPULDC
	MEND


	MACRO
$label	CPUWORK	$clock
$label		ldr		r7, [r9, #CPU_REMAINCLOCK]
			sub		r7, r7, $clock
			str		r7, [r9, #CPU_REMAINCLOCK]
	MEND

	MACRO
$label	CPUWKS	$clock
$label		ldr		r7, [r9, #CPU_REMAINCLOCK]
			subs	r7, r7, $clock
			str		r7, [r9, #CPU_REMAINCLOCK]
	MEND

	MACRO
$label	CREMSET	$clock
$label		mov		r7, $clock
			str		r7, [r9, #CPU_REMAINCLOCK]
	MEND

	MACRO
$label	NEXT_OPCODE
$label		ldr		r7, [r9, #CPU_REMAINCLOCK]
			cmp		r7, #1
			movge	pc, r11
			ldr		r0, [r9, #CPU_BASECLOCK]
			rsb		r1, r7, #1
			mov		r7, #1
			add		r0, r0, r1
			str		r0, [r9, #CPU_BASECLOCK]
			str		r7, [r9, #CPU_REMAINCLOCK]
			mov		pc, r11
	MEND

	MACRO
$label	REMAIN_ADJUST	$clk
$label		ldr		r7, [r9, #CPU_REMAINCLOCK]
			cmp		r7, $clk
			moveq	pc, r11
			ldr		r0, [r9, #CPU_BASECLOCK]
			rsb		r1, r7, $clk
			mov		r7, $clk
			add		r0, r0, r1
			str		r0, [r9, #CPU_BASECLOCK]
			str		r7, [r9, #CPU_REMAINCLOCK]
			mov		pc, r11
	MEND

	MACRO
$label	I286IRQCHECKTERM
$label		ldr		r7, [r9, #CPU_REMAINCLOCK]
			cmp		r7, #0
			movle	pc, r11
			ldr		r0, [r9, #CPU_BASECLOCK]
			mov		r1, r7
			mov		r7, #0
			sub		r0, r0, r1
			str		r7, [r9, #CPU_REMAINCLOCK]
			str		r0, [r9, #CPU_BASECLOCK]
			mov		pc, r11
	MEND

	END


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