--- np2/i286c/i286c.c 2005/03/05 06:02:29 1.27 +++ np2/i286c/i286c.c 2005/05/20 13:59:47 1.29 @@ -183,17 +183,33 @@ void i286c_shut(void) { void i286c_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) { - CPU_EXTMEM = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); - if (CPU_EXTMEM == NULL) { - size = 0; - } + if (size != 0) { + extmem = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); + } + if (extmem != NULL) { + CPU_EXTMEM = extmem; + CPU_EXTMEMSIZE = size; + CPU_EXTMEMBASE = CPU_EXTMEM - 0x100000; + CPU_EXTLIMIT16 = min(size + 0x100000, 0xf00000); +#if defined(CPU_EXTLIMIT) + CPU_EXTLIMIT = size + 0x100000; +#endif + } + else { + CPU_EXTMEM = NULL; + CPU_EXTMEMSIZE = 0; + CPU_EXTMEMBASE = NULL; + CPU_EXTLIMIT16 = 0; +#if defined(CPU_EXTLIMIT) + CPU_EXTLIMIT = 0; +#endif } - CPU_EXTMEMSIZE = size; } i286core.e.ems[0] = mem + 0xc0000; i286core.e.ems[1] = mem + 0xc4000; @@ -223,6 +239,7 @@ void CPUCALL i286c_intnum(UINT vect, REG const UINT8 *ptr; + if (vect < 0x10) TRACEOUT(("i286c_intnum - %.2x", vect)); REGPUSH0(REAL_FLAGREG) REGPUSH0(I286_CS) REGPUSH0(IP)