--- np2/i386c/ia32/ia32.c 2004/01/23 14:33:26 1.6 +++ np2/i386c/ia32/ia32.c 2004/02/09 16:12:54 1.9 @@ -1,4 +1,4 @@ -/* $Id: ia32.c,v 1.6 2004/01/23 14:33:26 monaka Exp $ */ +/* $Id: ia32.c,v 1.9 2004/02/09 16:12:54 monaka Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -34,41 +34,6 @@ I386CORE i386core; -BYTE iflags[] = { - 0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, - 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x84, 0x80, 0x80, 0x84, 0x80, 0x84, 0x84, 0x80, - 0x80, 0x84, 0x84, 0x80, 0x84, 0x80, 0x80, 0x84, -}; - BYTE *reg8_b20[0x100]; BYTE *reg8_b53[0x100]; WORD *reg16_b20[0x100]; @@ -83,20 +48,7 @@ ia32_init(void) int i; memset(&i386core.s, 0, sizeof(i386core.s)); - CPU_STATSAVE.cpu_inst_default.seg_base = (DWORD)-1; - - CPU_EDX = (CPU_FAMILY << 8) | (CPU_MODEL << 4) | CPU_STEPPING; - CPU_EFLAG = 2; - CPU_CR0 = CPU_CR0_CD | CPU_CR0_NW | CPU_CR0_ET; - CPU_MXCSR = 0x1f80; - CPU_GDTR_LIMIT = 0xffff; - CPU_IDTR_LIMIT = 0xffff; - - for (i = 0; i < CPU_SEGREG_NUM; ++i) { - CPU_STAT_SREG_INIT(i); - } - CPU_LDTR_LIMIT = 0xffff; - CPU_TR_LIMIT = 0xffff; + ia32_initreg(); for (i = 0; i < 0x100; ++i) { /* 8bit */ @@ -134,6 +86,26 @@ ia32_init(void) #endif } +void +ia32_setextsize(UINT32 size) +{ + + if (CPU_EXTMEMSIZE != size) { + if (CPU_EXTMEM) { + _MFREE(CPU_EXTMEM); + CPU_EXTMEM = NULL; + } + if (size) { + CPU_EXTMEM = (BYTE *)_MALLOC(size + 16, "EXTMEM"); + if (CPU_EXTMEM == NULL) { + size = 0; + } + ZeroMemory(CPU_EXTMEM, size + 16); + } + CPU_EXTMEMSIZE = size; + } +} + /* * ¥â¡¼¥ÉÁ«°Ü */ @@ -156,7 +128,7 @@ change_pm(BOOL onoff) CPU_STATSAVE.cpu_inst_default.op_32 = CPU_STATSAVE.cpu_inst_default.as_32 = 0; CPU_STAT_SS32 = 0; - CPU_STAT_CPL = 0; + CPU_SET_CPL(0); CPU_STAT_PM = onoff; } @@ -186,7 +158,7 @@ change_vm(BOOL onoff) CPU_STATSAVE.cpu_inst_default.op_32 = CPU_STATSAVE.cpu_inst_default.as_32 = 0; CPU_STAT_SS32 = 0; - CPU_STAT_CPL = 3; + CPU_SET_CPL(3); VERBOSE(("Entering to Virtual-8086-Mode...")); } else { VERBOSE(("Leaveing from Virtual-8086-Mode...")); @@ -221,7 +193,7 @@ set_flags(WORD new_flags, WORD mask) { mask &= I_FLAG|IOPL_FLAG; - mask |= SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG; + mask |= (SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG); modify_eflags(new_flags, mask); }