--- np2/i386c/ia32/ia32.c 2004/03/12 13:34:08 1.13 +++ np2/i386c/ia32/ia32.c 2004/06/15 13:50:13 1.16 @@ -1,4 +1,4 @@ -/* $Id: ia32.c,v 1.13 2004/03/12 13:34:08 monaka Exp $ */ +/* $Id: ia32.c,v 1.16 2004/06/15 13:50:13 monaka Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -101,8 +101,31 @@ ia32_setextsize(UINT32 size) } CPU_EXTMEMSIZE = size; } + CPU_EMSPTR[0] = mem + 0xc0000; + CPU_EMSPTR[1] = mem + 0xc4000; + CPU_EMSPTR[2] = mem + 0xc8000; + CPU_EMSPTR[3] = mem + 0xcc000; } +void +ia32_setemm(UINT frame, UINT32 addr) { + + BYTE *ptr; + + frame &= 3; + if (addr < USE_HIMEM) { + ptr = mem + addr; + } + else if ((addr - 0x100000 + 0x4000) <= CPU_EXTMEMSIZE) { + ptr = CPU_EXTMEM + (addr - 0x100000); + } + else { + ptr = mem + 0xc0000 + (frame << 14); + } + CPU_EMSPTR[frame] = ptr; +} + + /* * ¥â¡¼¥ÉÁ«°Ü */ @@ -127,8 +150,6 @@ change_pm(BOOL onoff) CPU_STAT_SS32 = 0; CPU_SET_CPL(0); CPU_STAT_PM = onoff; - - tlb_flush(TRUE); } void FASTCALL @@ -141,8 +162,6 @@ change_pg(BOOL onoff) VERBOSE(("Leaveing from Paging-Mode...")); } CPU_STAT_PAGING = onoff; - - tlb_flush(TRUE); } void FASTCALL @@ -153,6 +172,7 @@ change_vm(BOOL onoff) CPU_STAT_VM86 = onoff; if (onoff) { for (i = 0; i < CPU_SEGREG_NUM; i++) { + CPU_STAT_SREGLIMIT(i) = 0xffff; CPU_SET_SEGREG(i, CPU_REGS_SREG(i)); } CPU_INST_OP32 = CPU_INST_AS32 = @@ -166,6 +186,7 @@ change_vm(BOOL onoff) } } +#if !defined(IA32_DONT_USE_SET_EFLAGS_FUNCTION) /* * flags */ @@ -191,7 +212,6 @@ modify_eflags(UINT32 new_flags, UINT32 m } } -#if !defined(IA32_DONT_USE_SET_EFLAGS_FUNCTION) void set_flags(UINT16 new_flags, UINT16 mask) {