--- np2/i286x/cpucore.h 2003/12/26 22:24:06 1.5 +++ np2/i286x/cpucore.h 2004/03/25 10:41:13 1.13 @@ -6,11 +6,16 @@ // //---------------------------------------------------------------------------- -#include "memory.h" #if defined(CPUCORE_IA32) #error : not support CPUCORE_IA32 #endif +#if defined(CPUSTRUC_MEMWAIT) +#error : not support CPUSTRUC_MEMWAIT +#endif + +#include "memory.h" + #if !defined(CPUDEBUG) enum { @@ -37,6 +42,13 @@ enum { }; enum { + MSW_PE = 0x0001, + MSW_MP = 0x0002, + MSW_EM = 0x0004, + MSW_TS = 0x0008 +}; + +enum { CPUTYPE_V30 = 0x01 }; @@ -141,33 +153,40 @@ typedef struct { I286REG8 b; I286REG16 w; } r; - SINT32 remainclock; - SINT32 baseclock; - UINT32 clock; - UINT32 adrsmask; // ver0.72 UINT32 es_base; UINT32 cs_base; UINT32 ss_base; UINT32 ds_base; UINT32 ss_fix; UINT32 ds_fix; + UINT32 adrsmask; // ver0.72 UINT16 prefix; UINT8 trap; - UINT8 cpu_type; - UINT32 pf_semaphore; - UINT32 repbak; - UINT32 inport; + UINT8 resetreq; // ver0.72 BYTE prefetchque[4]; I286DTR GDTR; - I286DTR IDTR; UINT16 MSW; - UINT8 resetreq; // ver0.72 + I286DTR IDTR; + UINT16 LDTR; // ver0.73 + I286DTR LDTRC; + UINT16 TR; + I286DTR TRC; + UINT8 padding[2]; + + UINT8 cpu_type; UINT8 itfbank; // ver0.72 + UINT16 ram_d0; + SINT32 remainclock; + SINT32 baseclock; + UINT32 clock; } I286STAT; typedef struct { // for ver0.73 BYTE *ext; UINT32 extsize; + BYTE *ems[4]; + UINT32 repbak; + UINT32 inport; } I286EXT; typedef struct { @@ -184,9 +203,12 @@ extern I286CORE i286core; extern const UINT8 iflags[]; void i286x_initialize(void); +void i286x_deinitialize(void); void i286x_reset(void); void i286x_shut(void); void i286x_resetprefetch(void); +void i286x_setextsize(UINT32 size); +void i286x_setemm(UINT frame, UINT32 addr); void CPUCALL i286x_interrupt(BYTE vect); @@ -243,10 +265,11 @@ void v30x_step(void); #define CPU_MSW i286core.s.MSW #define CPU_RESETREQ i286core.s.resetreq #define CPU_ITFBANK i286core.s.itfbank -#define CPU_INPADRS i286core.s.inport +#define CPU_RAM_D000 i286core.s.ram_d0 #define CPU_EXTMEM i286core.e.ext #define CPU_EXTMEMSIZE i286core.e.extsize +#define CPU_INPADRS i286core.e.inport #define CPU_TYPE i286core.s.cpu_type @@ -256,12 +279,16 @@ void v30x_step(void); i286core.s.trap = 0; #define CPU_STI i286core.s.r.w.flag |= I_FLAG; \ i286core.s.trap = (i286core.s.r.w.flag >> 8) & 1; +#define CPU_A20EN(en) CPU_ADRSMASK = (en)?0xfffffff:0x000fffff; -#define CPU_INITIALIZE i286x_initialize -#define CPU_RESET i286x_reset -#define CPU_CLEARPREFETCH i286x_resetprefetch -#define CPU_INTERRUPT(v) i286x_interrupt(v) -#define CPU_EXEC i286x -#define CPU_EXECV30 v30x -#define CPU_SHUT i286x_shut +#define CPU_INITIALIZE i286x_initialize +#define CPU_DEINITIALIZE i286x_deinitialize +#define CPU_RESET i286x_reset +#define CPU_CLEARPREFETCH i286x_resetprefetch +#define CPU_INTERRUPT(vect, soft) i286x_interrupt(vect) +#define CPU_EXEC i286x +#define CPU_EXECV30 v30x +#define CPU_SHUT i286x_shut +#define CPU_SETEXTSIZE(size) i286x_setextsize((UINT32)(size) << 20) +#define CPU_SETEMM(frame, addr) i286x_setemm(frame, addr)