diff --git a/src/386.c b/src/386.c index a0ad35f..4568199 100644 --- a/src/386.c +++ b/src/386.c @@ -2,7 +2,6 @@ #include #include #include "ibm.h" -#include "386.h" #include "x86.h" #include "x87.h" #include "mem.h" @@ -20,7 +19,10 @@ extern int codegen_flags_changed; extern int nmi_enable; -int inscounts[256]; +uint32_t use32; +int stack32; +int optype; + uint32_t oldpc2; int trap; @@ -31,7 +33,6 @@ extern int cpl_override; int has_fpu; extern int fpucount; -uint16_t rds; uint16_t ea_rseg; int is486; @@ -42,9 +43,8 @@ int cgate32; uint8_t romext[32768]; uint8_t *ram,*rom; -uint32_t rmdat32; -#define rmdat rmdat32 -#define fetchdat rmdat32 +uint32_t rmdat; + uint32_t backupregs[16]; extern int oddeven; int inttype; @@ -54,9 +54,6 @@ uint32_t oldecx; uint32_t *eal_r, *eal_w; -uint16_t *mod1add[2][8]; -uint32_t *mod1seg[8]; - static inline void fetch_ea_32_long(uint32_t rmdat) { eal_r = eal_w = NULL; @@ -245,10 +242,10 @@ dontprint=0; fetchdat = fastreadl(cs + cpu_state.pc); if (!cpu_state.abrt) - { - trap = cpu_state.flags & T_FLAG; - opcode = fetchdat & 0xFF; + { + uint8_t opcode = fetchdat & 0xFF; fetchdat >>= 8; + trap = cpu_state.flags & T_FLAG; if (output == 3) { @@ -350,7 +347,6 @@ dontprint=0; addr = (temp << 2) + idt.base; cpu_state.flags &= ~I_FLAG; cpu_state.flags &= ~T_FLAG; - oxpc=cpu_state.pc; cpu_state.pc=readmemw(0,addr); loadcs(readmemw(0,addr+2)); // if (temp==0x76) pclog("INT to %04X:%04X\n",CS,pc); diff --git a/src/386.h b/src/386.h deleted file mode 100644 index 595773e..0000000 --- a/src/386.h +++ /dev/null @@ -1,13 +0,0 @@ -extern void cpu_386_flags_extract(); -extern void cpu_386_flags_rebuild(); - -void pmodeint(int num, int soft); -void loadcscall(uint16_t seg); -void loadcsjmp(uint16_t seg, uint32_t oxpc); -void pmoderetf(int is32, uint16_t off); -void pmodeiret(int is32); -void x86_int_sw(int num); -int x86_int_sw_rm(int num); - -int divl(uint32_t val); -int idivl(int32_t val); diff --git a/src/386_common.h b/src/386_common.h index fa18096..cf12239 100644 --- a/src/386_common.h +++ b/src/386_common.h @@ -239,7 +239,4 @@ static inline void seteaq(uint64_t v) #define getword2f() ((uint16_t)(fetchdat>>8)); cpu_state.pc+=2 -#define rmdat rmdat32 -#define fetchdat rmdat32 - void x86_int(int num); diff --git a/src/386_dynarec.c b/src/386_dynarec.c index f6c5572..43388fc 100644 --- a/src/386_dynarec.c +++ b/src/386_dynarec.c @@ -2,7 +2,6 @@ #include #include #include "ibm.h" -#include "386.h" #include "x86.h" #include "x86_ops.h" #include "x87.h" @@ -32,7 +31,6 @@ int cpu_block_end = 0; int nmi_enable = 1; -int inscounts[256]; uint32_t oldpc2; int trap; @@ -43,7 +41,6 @@ int cpl_override=0; int has_fpu; int fpucount=0; -uint16_t rds; uint16_t ea_rseg; int is486; @@ -53,7 +50,6 @@ int cgate32; uint8_t romext[32768]; uint8_t *ram,*rom; -uint32_t rmdat32; uint32_t backupregs[16]; int oddeven=0; int inttype; @@ -61,11 +57,6 @@ int inttype; uint32_t oldecx; -uint32_t *eal_r, *eal_w; - -uint16_t *mod1add[2][8]; -uint32_t *mod1seg[8]; - static inline void fetch_ea_32_long(uint32_t rmdat) { eal_r = eal_w = NULL; @@ -231,7 +222,6 @@ void x86_int(int num) cpu_state.flags &= ~I_FLAG; cpu_state.flags &= ~T_FLAG; - oxpc=cpu_state.pc; cpu_state.pc=readmemw(0,addr); loadcs(readmemw(0,addr+2)); } @@ -278,7 +268,6 @@ void x86_int_sw(int num) cpu_state.flags &= ~I_FLAG; cpu_state.flags &= ~T_FLAG; - oxpc=cpu_state.pc; cpu_state.pc=readmemw(0,addr); loadcs(readmemw(0,addr+2)); cycles -= timing_int_rm; @@ -311,7 +300,6 @@ int x86_int_sw_rm(int num) cpu_state.flags &= ~T_FLAG; cpu_state.pc = new_pc; loadcs(new_cs); - oxpc=cpu_state.pc; cycles -= timing_int_rm; trap = 0; @@ -548,9 +536,9 @@ void exec386_dynarec(int cycs) if (!cpu_state.abrt) { - trap = cpu_state.flags & T_FLAG; - opcode = fetchdat & 0xFF; + uint8_t opcode = fetchdat & 0xFF; fetchdat >>= 8; + trap = cpu_state.flags & T_FLAG; // if (output == 3) // pclog("int %04X(%06X):%04X : %08X %08X %08X %08X %04X %04X %04X(%08X) %04X %04X %04X(%08X) %08X %08X %08X SP=%04X:%08X %02X %04X %i %08X %08X %i %i %02X %02X %02X %02X %02X %f %02X%02X %02X%02X\n",CS,cs,pc,EAX,EBX,ECX,EDX,CS,DS,ES,es,FS,GS,SS,ss,EDI,ESI,EBP,SS,ESP,opcode,flags,ins,0, ldt.base, CPL, stack32, pic.pend, pic.mask, pic.mask2, pic2.pend, pic2.mask, pit.c[0], ram[0x8f13f], ram[0x8f13e], ram[0x8f141], ram[0x8f140]); @@ -685,9 +673,10 @@ void exec386_dynarec(int cycs) if (!cpu_state.abrt) { - trap = cpu_state.flags & T_FLAG; - opcode = fetchdat & 0xFF; + uint8_t opcode = fetchdat & 0xFF; fetchdat >>= 8; + + trap = cpu_state.flags & T_FLAG; // if (output == 3) // pclog("%04X(%06X):%04X : %08X %08X %08X %08X %04X %04X %04X(%08X) %04X %04X %04X(%08X) %08X %08X %08X SP=%04X:%08X %02X %04X %i %08X %08X %i %i %02X %02X %02X %02X %02X %08x %08x\n",CS,cs,pc,EAX,EBX,ECX,EDX,CS,DS,ES,es,FS,GS,SS,ss,EDI,ESI,EBP,SS,ESP,opcode,flags,ins,0, ldt.base, CPL, stack32, pic.pend, pic.mask, pic.mask2, pic2.pend, pic2.mask, cs+pc, pccache); @@ -757,10 +746,11 @@ void exec386_dynarec(int cycs) if (!cpu_state.abrt) { - trap = cpu_state.flags & T_FLAG; - opcode = fetchdat & 0xFF; + uint8_t opcode = fetchdat & 0xFF; fetchdat >>= 8; + trap = cpu_state.flags & T_FLAG; + // if (output == 3) // pclog("%04X(%06X):%04X : %08X %08X %08X %08X %04X %04X %04X(%08X) %04X %04X %04X(%08X) %08X %08X %08X SP=%04X:%08X %02X %04X %i %08X %08X %i %i %02X %02X %02X %02X %02X %08x %08x\n",CS,cs,pc,EAX,EBX,ECX,EDX,CS,DS,ES,es,FS,GS,SS,ss,EDI,ESI,EBP,SS,ESP,opcode,flags,ins,0, ldt.base, CPL, stack32, pic.pend, pic.mask, pic.mask2, pic2.pend, pic2.mask, cs+pc, pccache); @@ -885,7 +875,6 @@ void exec386_dynarec(int cycs) addr=temp<<2; cpu_state.flags &= ~I_FLAG; cpu_state.flags &= ~T_FLAG; - oxpc=cpu_state.pc; cpu_state.pc=readmemw(0,addr); loadcs(readmemw(0,addr+2)); } diff --git a/src/386_dynarec_ops.c b/src/386_dynarec_ops.c index 342e138..1b77f71 100644 --- a/src/386_dynarec_ops.c +++ b/src/386_dynarec_ops.c @@ -1,6 +1,5 @@ #include "ibm.h" #include "cpu.h" -#include "386.h" #include "x86.h" #include "x86_ops.h" #include "x87.h" @@ -15,9 +14,6 @@ #include "386_common.h" -extern uint16_t *mod1add[2][8]; -extern uint32_t *mod1seg[8]; - static inline void fetch_ea_32_long(uint32_t rmdat) { eal_r = eal_w = NULL; diff --git a/src/808x.c b/src/808x.c index 1ea2091..fa83679 100644 --- a/src/808x.c +++ b/src/808x.c @@ -38,6 +38,8 @@ int nopageerrors=0; void FETCHCOMPLETE(); +#define IRQTEST ((cpu_state.flags & I_FLAG) && (pic.pend&~pic.mask) && !noint) + #undef readmemb #undef readmemw uint8_t readmemb(uint32_t a) @@ -91,9 +93,8 @@ void writememl(uint32_t s, uint32_t a, uint32_t v) int oldcpl; int tempc; -uint8_t opcode; uint16_t pc2,pc3; -int noint=0; +static int noint=0; int output=0; @@ -330,9 +331,9 @@ reg = If mod=11, (depending on data size, 16 bits/8 bits, 32 bits=extend 16 bit */ uint32_t easeg; -int rmdat; +uint32_t rmdat; -uint16_t zero=0; +static uint16_t zero=0; uint16_t *mod1add[2][8]; uint32_t *mod1seg[8]; @@ -429,7 +430,7 @@ static inline void seteaw(uint16_t val) /*Flags*/ uint8_t znptable8[256]; -uint16_t znptable16[65536]; +static uint16_t znptable16[65536]; void makeznptable() { @@ -649,7 +650,6 @@ void resetx86() EAX = 0; ESP=0; mmu_perm=4; - memset(inscounts, 0, sizeof(inscounts)); x86seg_reset(); codegen_reset(); x86_was_reset = 1; @@ -1112,10 +1112,9 @@ void rep(int fv) } -int inhlt=0; -uint16_t lastpc,lastcs; +static int inhlt=0; int firstrepcycle; -int skipnextprint=0; +static int skipnextprint=0; int instime=0; //#if 0 @@ -1136,6 +1135,8 @@ void execx86(int cycs) // return; while (cycles>0) { + uint8_t opcode; + // old83=old82; // old82=old8; // if (pc==0x96B && cs==0x9E040) { printf("Hit it\n"); output=1; timetolive=150; } @@ -2450,8 +2451,6 @@ void execx86(int cycs) cycles-=72; break; case 0xCD: /*INT*/ - lastpc=cpu_state.pc; - lastcs=CS; temp=FETCH(); if (cpu_state.ssegs) ss=oldss; diff --git a/src/codegen_ops_jump.c b/src/codegen_ops_jump.c index d559881..c2c7eb6 100644 --- a/src/codegen_ops_jump.c +++ b/src/codegen_ops_jump.c @@ -2,7 +2,6 @@ #include "x86.h" #include "386_common.h" -#include "386.h" #include "codegen.h" #include "codegen_ir.h" #include "codegen_ops.h" diff --git a/src/codegen_ops_misc.c b/src/codegen_ops_misc.c index 8afb20a..2db4c32 100644 --- a/src/codegen_ops_misc.c +++ b/src/codegen_ops_misc.c @@ -3,7 +3,6 @@ #include "x86.h" #include "x86_flags.h" #include "386_common.h" -#include "386.h" #include "codegen.h" #include "codegen_ir.h" #include "codegen_ops.h" diff --git a/src/fdc.c b/src/fdc.c index 883cf01..f958bd3 100644 --- a/src/fdc.c +++ b/src/fdc.c @@ -70,7 +70,6 @@ typedef struct FDC static FDC fdc; void fdc_callback(); -int timetolive; //#define SECTORS 9 int lastbyte=0; uint8_t disc_3f7; diff --git a/src/ibm.h b/src/ibm.h index f9974be..9b3a07a 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -276,7 +276,6 @@ uint32_t dr[8]; //#define IOPLV86 ((!(msw&1)) || (CPL<=IOPL)) extern int cycles_lost; extern int is486; -extern uint8_t opcode; extern int insc; extern int fpucount; extern float mips,flops; diff --git a/src/pc.c b/src/pc.c index d3fd112..d574087 100644 --- a/src/pc.c +++ b/src/pc.c @@ -81,7 +81,6 @@ void fullspeed(); int framecount,fps; -int output; int atfullspeed; void saveconfig(char *fn); diff --git a/src/pic.c b/src/pic.c index b1110a4..a7636ef 100644 --- a/src/pic.c +++ b/src/pic.c @@ -4,7 +4,6 @@ #include "pit.h" #include "video.h" -int output; int intclear; int keywaiting=0; int pic_intpending; diff --git a/src/x86.h b/src/x86.h index 5a76ba9..5f0be4d 100644 --- a/src/x86.h +++ b/src/x86.h @@ -1,22 +1,30 @@ -extern uint32_t rmdat32; -int oldcpl; +extern uint32_t rmdat; +#define fetchdat rmdat + +extern uint32_t easeg; + +extern int oldcpl; extern int nmi_enable; -int tempc; -int output; -int firstrepcycle; +extern int output; +extern int timetolive; -uint32_t easeg,ealimit,ealimitw; +extern uint8_t znptable8[256]; -int skipnextprint; -int inhlt; +extern uint32_t use32; +extern int stack32; + +extern uint16_t *mod1add[2][8]; +extern uint32_t *mod1seg[8]; + +extern int cgate32; + +extern uint32_t *eal_r, *eal_w; + +extern int x86_was_reset; -uint8_t opcode; -int noint; -uint16_t lastcs,lastpc; -int timetolive,keyboardtimer; #define setznp168 setznp16 @@ -29,12 +37,6 @@ int timetolive,keyboardtimer; #define setr16(r,v) cpu_state.regs[r].w=v #define setr32(r,v) cpu_state.regs[r].l=v -uint8_t znptable8[256]; -uint16_t znptable16[65536]; - -int use32; -int stack32; - #define fetchea() { rmdat=readmemb(cs+pc); pc++; \ reg=(rmdat>>3)&7; \ mod=(rmdat>>6)&3; \ @@ -42,34 +44,12 @@ int stack32; if (mod!=3) fetcheal(); } -int optype; +extern int optype; #define JMP 1 #define CALL 2 #define IRET 3 #define OPTYPE_INT 4 -uint32_t oxpc; - -extern uint16_t *mod1add[2][8]; -extern uint32_t *mod1seg[8]; - - -#define IRQTEST ((cpu_state.flags & I_FLAG) && (pic.pend&~pic.mask) && !noint) - -extern int cgate32; - - -extern uint32_t *eal_r, *eal_w; - - -extern uint32_t flags_zn; -extern uint8_t flags_p; -#define FLAG_N (flags_zn>>31) -#define FLAG_Z (flags_zn) -#define FLAG_P (znptable8[flags_p]&P_FLAG) - -extern int gpf; - enum { @@ -86,22 +66,14 @@ extern uint32_t abrt_error; void x86_doabrt(int x86_abrt); -extern uint8_t opcode2; - -extern uint16_t rds; -extern uint32_t rmdat32; - -extern int inscounts[256]; +extern int codegen_flat_ds; +extern int codegen_flat_ss; void x86illegal(); void x86seg_reset(); void x86gpf(char *s, uint16_t error); -extern uint16_t zero; - -extern int x86_was_reset; - void resetx86(); void softresetx86(); void refreshread(); @@ -111,5 +83,13 @@ void execx86(int cycs); void exec386(int cycs); void exec386_dynarec(int cycs); -extern int codegen_flat_ds; -extern int codegen_flat_ss; +void pmodeint(int num, int soft); +void loadcscall(uint16_t seg, uint32_t old_pc); +void loadcsjmp(uint16_t seg, uint32_t old_pc); +void pmoderetf(int is32, uint16_t off); +void pmodeiret(int is32); +void x86_int_sw(int num); +int x86_int_sw_rm(int num); + +int divl(uint32_t val); +int idivl(int32_t val); diff --git a/src/x86_flags.h b/src/x86_flags.h index 70d8965..4332fad 100644 --- a/src/x86_flags.h +++ b/src/x86_flags.h @@ -1,3 +1,5 @@ +extern int tempc; + enum { FLAGS_UNKNOWN, @@ -553,3 +555,5 @@ static inline void setsbc32(uint32_t a, uint32_t b) cpu_state.flags_op = FLAGS_SBC32; } +extern void cpu_386_flags_extract(); +extern void cpu_386_flags_rebuild(); diff --git a/src/x86_ops_call.h b/src/x86_ops_call.h index aa126c6..4c2e117 100644 --- a/src/x86_ops_call.h +++ b/src/x86_ops_call.h @@ -1,11 +1,10 @@ #define CALL_FAR_w(new_seg, new_pc) \ old_cs = CS; \ old_pc = cpu_state.pc; \ - oxpc = cpu_state.pc; \ cpu_state.pc = new_pc; \ optype = CALL; \ cgate16 = cgate32 = 0; \ - if (msw & 1) loadcscall(new_seg); \ + if (msw & 1) loadcscall(new_seg, old_pc); \ else \ { \ loadcs(new_seg); \ @@ -30,11 +29,10 @@ #define CALL_FAR_l(new_seg, new_pc) \ old_cs = CS; \ old_pc = cpu_state.pc; \ - oxpc = cpu_state.pc; \ cpu_state.pc = new_pc; \ optype = CALL; \ cgate16 = cgate32 = 0; \ - if (msw & 1) loadcscall(new_seg); \ + if (msw & 1) loadcscall(new_seg, old_pc); \ else \ { \ loadcs(new_seg); \ @@ -158,11 +156,11 @@ static int opFF_w_a16(uint32_t fetchdat) case 0x28: /*JMP far*/ if (cpu_mod != 3) SEG_CHECK_READ(cpu_state.ea_seg); - oxpc = cpu_state.pc; + old_pc = cpu_state.pc; new_pc = readmemw(easeg, cpu_state.eaaddr); new_cs = readmemw(easeg, cpu_state.eaaddr + 2); if (cpu_state.abrt) return 1; cpu_state.pc = new_pc; - loadcsjmp(new_cs, oxpc); if (cpu_state.abrt) return 1; + loadcsjmp(new_cs, old_pc); if (cpu_state.abrt) return 1; CPU_BLOCK_END(); PREFETCH_RUN(cycles_old-cycles, 2, rmdat, 2,0,0,0, 0); PREFETCH_FLUSH(); @@ -249,11 +247,11 @@ static int opFF_w_a32(uint32_t fetchdat) case 0x28: /*JMP far*/ if (cpu_mod != 3) SEG_CHECK_READ(cpu_state.ea_seg); - oxpc = cpu_state.pc; + old_pc = cpu_state.pc; new_pc = readmemw(easeg, cpu_state.eaaddr); new_cs = readmemw(easeg, cpu_state.eaaddr + 2); if (cpu_state.abrt) return 1; cpu_state.pc = new_pc; - loadcsjmp(new_cs, oxpc); if (cpu_state.abrt) return 1; + loadcsjmp(new_cs, old_pc); if (cpu_state.abrt) return 1; CPU_BLOCK_END(); PREFETCH_RUN(cycles_old-cycles, 2, rmdat, 2,0,0,0, 1); PREFETCH_FLUSH(); @@ -341,11 +339,11 @@ static int opFF_l_a16(uint32_t fetchdat) case 0x28: /*JMP far*/ if (cpu_mod != 3) SEG_CHECK_READ(cpu_state.ea_seg); - oxpc = cpu_state.pc; + old_pc = cpu_state.pc; new_pc = readmeml(easeg, cpu_state.eaaddr); new_cs = readmemw(easeg, cpu_state.eaaddr + 4); if (cpu_state.abrt) return 1; cpu_state.pc = new_pc; - loadcsjmp(new_cs, oxpc); if (cpu_state.abrt) return 1; + loadcsjmp(new_cs, old_pc); if (cpu_state.abrt) return 1; CPU_BLOCK_END(); PREFETCH_RUN(cycles_old-cycles, 2, rmdat, 1,1,0,0, 0); PREFETCH_FLUSH(); @@ -432,11 +430,11 @@ static int opFF_l_a32(uint32_t fetchdat) case 0x28: /*JMP far*/ if (cpu_mod != 3) SEG_CHECK_READ(cpu_state.ea_seg); - oxpc = cpu_state.pc; + old_pc = cpu_state.pc; new_pc = readmeml(easeg, cpu_state.eaaddr); new_cs = readmemw(easeg, cpu_state.eaaddr + 4); if (cpu_state.abrt) return 1; cpu_state.pc = new_pc; - loadcsjmp(new_cs, oxpc); if (cpu_state.abrt) return 1; + loadcsjmp(new_cs, old_pc); if (cpu_state.abrt) return 1; CPU_BLOCK_END(); PREFETCH_RUN(cycles_old-cycles, 2, rmdat, 1,1,0,0, 1); PREFETCH_FLUSH(); diff --git a/src/x86_ops_jump.h b/src/x86_ops_jump.h index a7c4fd5..94cad2d 100644 --- a/src/x86_ops_jump.h +++ b/src/x86_ops_jump.h @@ -270,9 +270,9 @@ static int opJMP_far_a16(uint32_t fetchdat) { uint16_t addr = getwordf(); uint16_t seg = getword(); if (cpu_state.abrt) return 1; - uint32_t oxpc = cpu_state.pc; + uint32_t old_pc = cpu_state.pc; cpu_state.pc = addr; - loadcsjmp(seg, oxpc); + loadcsjmp(seg, old_pc); CPU_BLOCK_END(); PREFETCH_RUN(11, 5, -1, 0,0,0,0, 0); PREFETCH_FLUSH(); @@ -282,9 +282,9 @@ static int opJMP_far_a32(uint32_t fetchdat) { uint32_t addr = getlong(); uint16_t seg = getword(); if (cpu_state.abrt) return 1; - uint32_t oxpc = cpu_state.pc; + uint32_t old_pc = cpu_state.pc; cpu_state.pc = addr; - loadcsjmp(seg, oxpc); + loadcsjmp(seg, old_pc); CPU_BLOCK_END(); PREFETCH_RUN(11, 7, -1, 0,0,0,0, 0); PREFETCH_FLUSH(); diff --git a/src/x86_ops_ret.h b/src/x86_ops_ret.h index b69180c..70ac327 100644 --- a/src/x86_ops_ret.h +++ b/src/x86_ops_ret.h @@ -4,7 +4,6 @@ pmoderetf(0, stack_offset); \ return 1; \ } \ - oxpc = cpu_state.pc; \ if (stack32) \ { \ cpu_state.pc = readmemw(ss, ESP); \ @@ -26,7 +25,6 @@ pmoderetf(1, stack_offset); \ return 1; \ } \ - oxpc = cpu_state.pc; \ if (stack32) \ { \ cpu_state.pc = readmeml(ss, ESP); \ @@ -108,7 +106,6 @@ static int opIRET_286(uint32_t fetchdat) else { uint16_t new_cs; - oxpc = cpu_state.pc; if (stack32) { cpu_state.pc = readmemw(ss, ESP); @@ -184,7 +181,6 @@ static int opIRET(uint32_t fetchdat) else { uint16_t new_cs; - oxpc = cpu_state.pc; if (stack32) { cpu_state.pc = readmemw(ss, ESP); @@ -230,7 +226,6 @@ static int opIRETD(uint32_t fetchdat) else { uint16_t new_cs; - oxpc = cpu_state.pc; if (stack32) { cpu_state.pc = readmeml(ss, ESP); diff --git a/src/x86seg.c b/src/x86seg.c index 7876ae0..bed02ad 100644 --- a/src/x86seg.c +++ b/src/x86seg.c @@ -5,7 +5,7 @@ #include "ibm.h" #include "mem.h" #include "x86.h" -#include "386.h" +#include "x86_flags.h" #include "386_common.h" #include "cpu.h" #include "config.h" @@ -32,8 +32,6 @@ int intgatesize; void taskswitch286(uint16_t seg, uint16_t *segdat, int is32); void taskswitch386(uint16_t seg, uint16_t *segdat); -int output; - /*NOT PRESENT is INT 0B GPF is INT 0D*/ @@ -60,8 +58,6 @@ void x86abort(const char *format, ...) exit(-1); } -uint8_t opcode2; - static void seg_reset(x86seg *s) { s->access = (0 << 5) | 2; @@ -129,7 +125,6 @@ void x86_doabrt(int x86_abrt) cpu_state.flags &= ~I_FLAG; cpu_state.flags &= ~T_FLAG; - oxpc=cpu_state.pc; cpu_state.pc=readmemw(0,addr); loadcs(readmemw(0,addr+2)); return; @@ -163,8 +158,6 @@ void x86_doabrt(int x86_abrt) SP-=4; } } -// ingpf = 0; -// abrt = gpf = 1; } void x86gpf(char *s, uint16_t error) { @@ -343,7 +336,7 @@ int loadseg(uint16_t seg, x86seg *s) { if (addr>=ldt.limit) { - pclog("Bigger than LDT limit %04X %04X %02X %02X %02X\n",seg,ldt.limit, opcode, opcode2, 0/*rmdat*/); + pclog("Bigger than LDT limit %04X %04X %02X\n",seg,ldt.limit, 0/*rmdat*/); // dumppic(); // dumpregs(); // exit(-1); @@ -548,7 +541,7 @@ void loadcs(uint16_t seg) if ((seg&3)>CPL) { x86gpf(NULL,seg&~3); - pclog("loadcs RPL > CPL %04X %04X %i %02X\n",segdat[2],seg,CPL,opcode); + pclog("loadcs RPL > CPL %04X %04X %i\n",segdat[2],seg,CPL); return; } if (CPL != DPL) @@ -592,7 +585,7 @@ void loadcs(uint16_t seg) switch (segdat[2]&0xF00) { default: - pclog("Bad CS %02X %02X %i special descriptor %03X %04X\n",opcode,0/*rmdat*/,optype,segdat[2]&0xF00,seg); + pclog("Bad CS %02X %i special descriptor %03X %04X\n",0/*rmdat*/,optype,segdat[2]&0xF00,seg); x86gpf(NULL,seg&~3); return; } @@ -615,7 +608,7 @@ void loadcs(uint16_t seg) } } -void loadcsjmp(uint16_t seg, uint32_t oxpc) +void loadcsjmp(uint16_t seg, uint32_t old_pc) { uint16_t segdat[4]; uint32_t addr; @@ -825,7 +818,7 @@ void loadcsjmp(uint16_t seg, uint32_t oxpc) case 0x100: /*286 Task gate*/ case 0x900: /*386 Task gate*/ // pclog("Task gate\n"); - cpu_state.pc=oxpc; + cpu_state.pc = old_pc; optype=JMP; cpl_override=1; taskswitch286(seg,segdat,segdat[2]&0x800); @@ -837,7 +830,7 @@ void loadcsjmp(uint16_t seg, uint32_t oxpc) return; default: - pclog("Bad JMP CS %02X %02X %i special descriptor %03X %04X\n",opcode,0/*rmdat*/,optype,segdat[2]&0xF00,seg); + pclog("Bad JMP CS %02X %i special descriptor %03X %04X\n",0/*rmdat*/,optype,segdat[2]&0xF00,seg); x86gpf(NULL,0); return; // dumpregs(); @@ -931,7 +924,7 @@ uint32_t POPL() return templ; } -void loadcscall(uint16_t seg) +void loadcscall(uint16_t seg, uint32_t old_pc) { uint16_t seg2; uint16_t segdat[4],segdat2[4],newss; @@ -1337,7 +1330,7 @@ void loadcscall(uint16_t seg) case 0x100: /*286 Task gate*/ case 0x900: /*386 Task gate*/ // pclog("Task gate\n"); - cpu_state.pc=oxpc; + cpu_state.pc = old_pc; cpl_override=1; taskswitch286(seg,segdat,segdat[2]&0x800); cpl_override=0; @@ -2070,7 +2063,6 @@ void pmodeiret(int is32) x86gpf(NULL,0); return; } - oxpc=cpu_state.pc; if (is32) { newpc=POPL(); @@ -2128,7 +2120,6 @@ void pmodeiret(int is32) cpl_override=0; return; } - oxpc=cpu_state.pc; flagmask=0xFFFF; if (CPL) flagmask&=~0x3000; if (IOPL