|
|
| version 1.26, 2005/02/08 09:57:26 | version 1.29, 2005/05/20 13:59:47 |
|---|---|
| Line 6 | Line 6 |
| #include "iocore.h" | #include "iocore.h" |
| #include "dmax86.h" | #include "dmax86.h" |
| #include "i286c.mcr" | #include "i286c.mcr" |
| #if defined(ENABLE_TRAP) | |
| #include "steptrap.h" | |
| #endif | |
| I286CORE i286core; | I286CORE i286core; |
| Line 180 void i286c_shut(void) { | Line 183 void i286c_shut(void) { |
| void i286c_setextsize(UINT32 size) { | void i286c_setextsize(UINT32 size) { |
| if (CPU_EXTMEMSIZE != size) { | if (CPU_EXTMEMSIZE != size) { |
| if (CPU_EXTMEM) { | UINT8 *extmem; |
| _MFREE(CPU_EXTMEM); | extmem = CPU_EXTMEM; |
| CPU_EXTMEM = NULL; | if (extmem != NULL) { |
| _MFREE(extmem); | |
| extmem = NULL; | |
| } | } |
| if (size) { | if (size != 0) { |
| CPU_EXTMEM = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); | extmem = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); |
| if (CPU_EXTMEM == NULL) { | } |
| size = 0; | 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[0] = mem + 0xc0000; |
| i286core.e.ems[1] = mem + 0xc4000; | i286core.e.ems[1] = mem + 0xc4000; |
| Line 220 void CPUCALL i286c_intnum(UINT vect, REG | Line 239 void CPUCALL i286c_intnum(UINT vect, REG |
| const UINT8 *ptr; | const UINT8 *ptr; |
| if (vect < 0x10) TRACEOUT(("i286c_intnum - %.2x", vect)); | |
| REGPUSH0(REAL_FLAGREG) | REGPUSH0(REAL_FLAGREG) |
| REGPUSH0(I286_CS) | REGPUSH0(I286_CS) |
| REGPUSH0(IP) | REGPUSH0(IP) |
| Line 263 void i286c(void) { | Line 283 void i286c(void) { |
| if (I286_TRAP) { | if (I286_TRAP) { |
| do { | do { |
| #if defined(ENABLE_TRAP) | |
| steptrap(CPU_CS, CPU_IP); | |
| #endif | |
| GET_PCBYTE(opcode); | GET_PCBYTE(opcode); |
| i286op[opcode](); | i286op[opcode](); |
| if (I286_TRAP) { | if (I286_TRAP) { |
| Line 273 void i286c(void) { | Line 296 void i286c(void) { |
| } | } |
| else if (dmac.working) { | else if (dmac.working) { |
| do { | do { |
| #if defined(ENABLE_TRAP) | |
| steptrap(CPU_CS, CPU_IP); | |
| #endif | |
| GET_PCBYTE(opcode); | GET_PCBYTE(opcode); |
| i286op[opcode](); | i286op[opcode](); |
| dmax86(); | dmax86(); |
| Line 280 void i286c(void) { | Line 306 void i286c(void) { |
| } | } |
| else { | else { |
| do { | do { |
| #if defined(ENABLE_TRAP) | |
| steptrap(CPU_CS, CPU_IP); | |
| #endif | |
| GET_PCBYTE(opcode); | GET_PCBYTE(opcode); |
| i286op[opcode](); | i286op[opcode](); |
| } while(I286_REMCLOCK > 0); | } while(I286_REMCLOCK > 0); |