--- np2/i386c/ia32/ia32.c 2005/03/12 12:32:54 1.18 +++ np2/i386c/ia32/ia32.c 2008/01/25 17:49:46 1.20 @@ -1,4 +1,4 @@ -/* $Id: ia32.c,v 1.18 2005/03/12 12:32:54 monaka Exp $ */ +/* $Id: ia32.c,v 1.20 2008/01/25 17:49:46 monaka Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -81,18 +81,30 @@ ia32_setextsize(UINT32 size) { if (CPU_EXTMEMSIZE != size) { - if (CPU_EXTMEM) { - _MFREE(CPU_EXTMEM); - CPU_EXTMEM = NULL; + UINT8 *extmem; + extmem = CPU_EXTMEM; + if (extmem != NULL) { + _MFREE(extmem); + extmem = NULL; + } + if (size != 0) { + extmem = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); + } + if (extmem != NULL) { + ZeroMemory(extmem, size + 16); + CPU_EXTMEM = extmem; + CPU_EXTMEMSIZE = size; + CPU_EXTMEMBASE = CPU_EXTMEM - 0x100000; + CPU_EXTLIMIT16 = min(size + 0x100000, 0xf00000); + CPU_EXTLIMIT = size + 0x100000; } - if (size) { - CPU_EXTMEM = (BYTE *)_MALLOC(size + 16, "EXTMEM"); - if (CPU_EXTMEM == NULL) { - size = 0; - } - ZeroMemory(CPU_EXTMEM, size + 16); + else { + CPU_EXTMEM = NULL; + CPU_EXTMEMSIZE = 0; + CPU_EXTMEMBASE = NULL; + CPU_EXTLIMIT16 = 0; + CPU_EXTLIMIT = 0; } - CPU_EXTMEMSIZE = size; } CPU_EMSPTR[0] = mem + 0xc0000; CPU_EMSPTR[1] = mem + 0xc4000; @@ -179,7 +191,6 @@ change_vm(BOOL onoff) } } -#if !defined(IA32_DONT_USE_SET_EFLAGS_FUNCTION) /* * flags */ @@ -223,4 +234,3 @@ set_eflags(UINT32 new_flags, UINT32 mask mask |= AC_FLAG|ID_FLAG; modify_eflags(new_flags, mask); } -#endif /* !IA32_DONT_USE_SET_EFLAGS_FUNCTION */