|
|
| version 1.25, 2005/02/07 14:46:10 | version 1.28, 2005/03/18 06:49:16 |
|---|---|
| Line 4 | Line 4 |
| #include "v30patch.h" | #include "v30patch.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "dmap.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 263 void i286c(void) { | Line 282 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) { |
| i286c_interrupt(1); | i286c_interrupt(1); |
| } | } |
| dmap_i286(); | dmax86(); |
| } while(I286_REMCLOCK > 0); | } while(I286_REMCLOCK > 0); |
| } | } |
| 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](); |
| dmap_i286(); | dmax86(); |
| } while(I286_REMCLOCK > 0); | } while(I286_REMCLOCK > 0); |
| } | } |
| 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); |
| Line 300 void i286c_step(void) { | Line 328 void i286c_step(void) { |
| if (I286_OV) { | if (I286_OV) { |
| I286_FLAG |= (O_FLAG); | I286_FLAG |= (O_FLAG); |
| } | } |
| dmap_i286(); | dmax86(); |
| } | } |