From b4753c5c62ac5241f26869fd76e6d21a4620452d Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Wed, 5 Nov 2003 19:48:49 +0000 Subject: [PATCH] Far jmps/calls interrupts restart the core Changes for new lazy flag testing Removed carry flag only changing type Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1403 --- src/cpu/core_normal.cpp | 16 ++-- src/cpu/core_normal/prefix_0f.h | 79 ++++++++--------- src/cpu/core_normal/prefix_66.h | 76 ++++++---------- src/cpu/core_normal/prefix_66_0f.h | 44 +++++---- src/cpu/core_normal/prefix_none.h | 138 +++++++++++++---------------- src/cpu/core_normal/support.h | 5 +- 6 files changed, 155 insertions(+), 203 deletions(-) diff --git a/src/cpu/core_normal.cpp b/src/cpu/core_normal.cpp index fded8ef7..34c95897 100644 --- a/src/cpu/core_normal.cpp +++ b/src/cpu/core_normal.cpp @@ -156,6 +156,13 @@ static Bits CPU_Core_Normal_Decode_Trap(void); static Bits CPU_Core_Normal_Decode(void) { decode_start: + if (cpu.code.big) { + core.index_default=0x200; + core.prefix_default=PREFIX_ADDR; + } else { + core.index_default=0; + core.prefix_default=0; + } LOADIP; lflags.type=t_UNKNOWN; while (CPU_Cycles>0) { @@ -214,16 +221,7 @@ static Bits CPU_Core_Normal_Decode_Trap(void) { void CPU_Core_Normal_Start(bool big) { - if (GETFLAG(TF)) cpudecoder=CPU_Core_Normal_Decode_Trap; else cpudecoder=CPU_Core_Normal_Decode; - - if (big) { - core.index_default=0x200; - core.prefix_default=PREFIX_ADDR; - } else { - core.index_default=0; - core.prefix_default=0; - } } diff --git a/src/cpu/core_normal/prefix_0f.h b/src/cpu/core_normal/prefix_0f.h index d4923ffb..d08a2a36 100644 --- a/src/cpu/core_normal/prefix_0f.h +++ b/src/cpu/core_normal/prefix_0f.h @@ -178,69 +178,69 @@ } break; CASE_0F_W(0x80) /* JO */ - JumpSIw(get_OF());break; + JumpSIw(TFLG_O);break; CASE_0F_W(0x81) /* JNO */ - JumpSIw(!get_OF());break; + JumpSIw(TFLG_NO);break; CASE_0F_W(0x82) /* JB */ - JumpSIw(get_CF());break; + JumpSIw(TFLG_B);break; CASE_0F_W(0x83) /* JNB */ - JumpSIw(!get_CF());break; + JumpSIw(TFLG_NB);break; CASE_0F_W(0x84) /* JZ */ - JumpSIw(get_ZF());break; + JumpSIw(TFLG_Z);break; CASE_0F_W(0x85) /* JNZ */ - JumpSIw(!get_ZF());break; + JumpSIw(TFLG_NZ);break; CASE_0F_W(0x86) /* JBE */ - JumpSIw(get_CF() || get_ZF());break; + JumpSIw(TFLG_BE);break; CASE_0F_W(0x87) /* JNBE */ - JumpSIw(!get_CF() && !get_ZF());break; + JumpSIw(TFLG_NBE);break; CASE_0F_W(0x88) /* JS */ - JumpSIw(get_SF());break; + JumpSIw(TFLG_S);break; CASE_0F_W(0x89) /* JNS */ - JumpSIw(!get_SF());break; + JumpSIw(TFLG_NS);break; CASE_0F_W(0x8a) /* JP */ - JumpSIw(get_PF());break; + JumpSIw(TFLG_P);break; CASE_0F_W(0x8b) /* JNP */ - JumpSIw(!get_PF());break; + JumpSIw(TFLG_NP);break; CASE_0F_W(0x8c) /* JL */ - JumpSIw(get_SF() != get_OF());break; + JumpSIw(TFLG_L);break; CASE_0F_W(0x8d) /* JNL */ - JumpSIw(get_SF() == get_OF());break; + JumpSIw(TFLG_NL);break; CASE_0F_W(0x8e) /* JLE */ - JumpSIw(get_ZF() || (get_SF() != get_OF()));break; + JumpSIw(TFLG_LE);break; CASE_0F_W(0x8f) /* JNLE */ - JumpSIw((get_SF() == get_OF()) && !get_ZF());break; + JumpSIw(TFLG_NLE);break; CASE_0F_B(0x90) /* SETO */ - SETcc(get_OF());break; + SETcc(TFLG_O);break; CASE_0F_B(0x91) /* SETNO */ - SETcc(!get_OF());break; + SETcc(TFLG_NO);break; CASE_0F_B(0x92) /* SETB */ - SETcc(get_CF());break; + SETcc(TFLG_B);break; CASE_0F_B(0x93) /* SETNB */ - SETcc(!get_CF());break; + SETcc(TFLG_NB);break; CASE_0F_B(0x94) /* SETZ */ - SETcc(get_ZF());break; + SETcc(TFLG_Z);break; CASE_0F_B(0x95) /* SETNZ */ - SETcc(!get_ZF()); break; + SETcc(TFLG_NZ); break; CASE_0F_B(0x96) /* SETBE */ - SETcc(get_CF() || get_ZF());break; + SETcc(TFLG_BE);break; CASE_0F_B(0x97) /* SETNBE */ - SETcc(!get_CF() && !get_ZF());break; + SETcc(TFLG_NBE);break; CASE_0F_B(0x98) /* SETS */ - SETcc(get_SF());break; + SETcc(TFLG_S);break; CASE_0F_B(0x99) /* SETNS */ - SETcc(!get_SF());break; + SETcc(TFLG_NS);break; CASE_0F_B(0x9a) /* SETP */ - SETcc(get_PF());break; + SETcc(TFLG_P);break; CASE_0F_B(0x9b) /* SETNP */ - SETcc(!get_PF());break; + SETcc(TFLG_NP);break; CASE_0F_B(0x9c) /* SETL */ - SETcc(get_SF() != get_OF());break; + SETcc(TFLG_L);break; CASE_0F_B(0x9d) /* SETNL */ - SETcc(get_SF() == get_OF());break; + SETcc(TFLG_NL);break; CASE_0F_B(0x9e) /* SETLE */ - SETcc(get_ZF() || (get_SF() != get_OF()));break; + SETcc(TFLG_LE);break; CASE_0F_B(0x9f) /* SETNLE */ - SETcc((get_SF() == get_OF()) && !get_ZF());break; + SETcc(TFLG_NLE);break; CASE_0F_W(0xa0) /* PUSH FS */ Push_16(SegValue(fs));break; @@ -250,7 +250,7 @@ CPU_CPUID();break; CASE_0F_W(0xa3) /* BT Ew,Gw */ { - GetRMrw; + FillFlags();GetRMrw; Bit16u mask=1 << (*rmrw & 15); if (rm >= 0xc0 ) { GetEArw; @@ -259,7 +259,6 @@ GetEAa;Bit16u old=LoadMw(eaa); SETFLAGBIT(CF,(old & mask)); } - SetTypeCF(); break; } CASE_0F_W(0xa4) /* SHLD Ew,Gw,Ib */ @@ -274,7 +273,7 @@ CPU_SetSegGeneral(gs,Pop_16());break; CASE_0F_W(0xab) /* BTS Ew,Gw */ { - GetRMrw; + FillFlags();GetRMrw; Bit16u mask=1 << (*rmrw & 15); if (rm >= 0xc0 ) { GetEArw; @@ -285,7 +284,6 @@ SETFLAGBIT(CF,(old & mask)); SaveMw(eaa,old | mask); } - SetTypeCF(); break; } CASE_0F_W(0xac) /* SHRD Ew,Gw,Ib */ @@ -305,7 +303,7 @@ } CASE_0F_W(0xb3) /* BTR Ew,Gw */ { - GetRMrw; + FillFlags();GetRMrw; Bit16u mask=1 << (*rmrw & 15); if (rm >= 0xc0 ) { GetEArw; @@ -316,7 +314,6 @@ SETFLAGBIT(CF,(old & mask)); SaveMw(eaa,old & ~mask); } - SetTypeCF(); break; } CASE_0F_W(0xb4) /* LFS Ew */ @@ -348,7 +345,7 @@ } CASE_0F_W(0xba) /* GRP8 Ew,Ib */ { - GetRM; + FillFlags();GetRM; if (rm >= 0xc0 ) { GetEArw; Bit16u mask=1 << (Fetchb() & 15); @@ -388,12 +385,11 @@ E_Exit("CPU:0F:BA:Illegal subfunction %X",rm & 0x38); } } - SetTypeCF(); break; } CASE_0F_W(0xbb) /* BTC Ew,Gw */ { - GetRMrw; + FillFlags();GetRMrw; Bit16u mask=1 << (*rmrw & 15); if (rm >= 0xc0 ) { GetEArw; @@ -404,7 +400,6 @@ SETFLAGBIT(CF,(old & mask)); SaveMw(eaa,old ^ mask); } - SetTypeCF(); break; } CASE_0F_W(0xbc) /* BSF Gw,Ew */ diff --git a/src/cpu/core_normal/prefix_66.h b/src/cpu/core_normal/prefix_66.h index b64b65c0..cd0b2ee4 100644 --- a/src/cpu/core_normal/prefix_66.h +++ b/src/cpu/core_normal/prefix_66.h @@ -341,13 +341,9 @@ CASE_D(0x9a) /* CALL FAR Ad */ { Bit32u newip=Fetchd();Bit16u newcs=Fetchw(); - SAVEIP; - if (CPU_CALL(true,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; + LEAVECORE; + CPU_CALL(true,newcs,newip); + goto decode_start; } CASE_D(0x9c) /* PUSHFD */ FillFlags(); @@ -475,38 +471,32 @@ break; CASE_D(0xca) /* RETF Iw */ { - if (CPU_RET(true,Fetchw())) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; - } + Bitu words=Fetchw(); + LEAVECORE; + CPU_RET(true,words); + goto decode_start; + } CASE_D(0xcb) /* RETF */ { - if (CPU_RET(true,0)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; + LEAVECORE; + CPU_RET(true,0); + goto decode_start; } CASE_D(0xcf) /* IRET */ { - if (CPU_IRET(true)) { + LEAVECORE; + CPU_IRET(true); #if CPU_TRAP_CHECK - if (GETFLAG(TF)) { - cpudecoder=CPU_Core_Normal_Decode_Trap; - return CBRET_NONE; - } + if (GETFLAG(TF)) { + cpudecoder=CPU_Core_Normal_Decode_Trap; + return CBRET_NONE; + } #endif #ifdef CPU_PIC_CHECK - if (GETFLAG(IF) && PIC_IRQCheck) return CBRET_NONE; + if (GETFLAG(IF) && PIC_IRQCheck) return CBRET_NONE; #endif //TODO TF check - goto decode_start; - } else return CBRET_NONE; - break; + goto decode_start; } CASE_D(0xd1) /* GRP2 Ed,1 */ GRP2D(1);break; @@ -532,13 +522,9 @@ { Bit32u newip=Fetchd(); Bit16u newcs=Fetchw(); - SAVEIP; - if (CPU_JMP(true,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; + LEAVECORE; + CPU_JMP(true,newcs,newip); + goto decode_start; } CASE_D(0xed) /* IN EAX,DX */ reg_eax=IO_ReadD(reg_dx); @@ -609,12 +595,9 @@ GetEAa; Bit32u newip=LoadMd(eaa); Bit16u newcs=LoadMw(eaa+4); - SAVEIP; - if (CPU_CALL(true,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } + LEAVECORE; + CPU_CALL(true,newcs,newip); + goto decode_start; } break; case 0x04: /* JMP NEAR Ed */ @@ -626,12 +609,9 @@ GetEAa; Bit32u newip=LoadMd(eaa); Bit16u newcs=LoadMw(eaa+4); - SAVEIP; - if (CPU_JMP(true,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } + LEAVECORE; + CPU_JMP(true,newcs,newip); + goto decode_start; } break; case 0x06: /* Push Ed */ diff --git a/src/cpu/core_normal/prefix_66_0f.h b/src/cpu/core_normal/prefix_66_0f.h index 7493fa8b..02c1102d 100644 --- a/src/cpu/core_normal/prefix_66_0f.h +++ b/src/cpu/core_normal/prefix_66_0f.h @@ -124,37 +124,37 @@ } break; CASE_0F_D(0x80) /* JO */ - JumpSId(get_OF());break; + JumpSId(TFLG_O);break; CASE_0F_D(0x81) /* JNO */ - JumpSId(!get_OF());break; + JumpSId(TFLG_NO);break; CASE_0F_D(0x82) /* JB */ - JumpSId(get_CF());break; + JumpSId(TFLG_B);break; CASE_0F_D(0x83) /* JNB */ - JumpSId(!get_CF());break; + JumpSId(TFLG_NB);break; CASE_0F_D(0x84) /* JZ */ - JumpSId(get_ZF());break; + JumpSId(TFLG_Z);break; CASE_0F_D(0x85) /* JNZ */ - JumpSId(!get_ZF());break; + JumpSId(TFLG_NZ);break; CASE_0F_D(0x86) /* JBE */ - JumpSId(get_CF() || get_ZF());break; + JumpSId(TFLG_BE);break; CASE_0F_D(0x87) /* JNBE */ - JumpSId(!get_CF() && !get_ZF());break; + JumpSId(TFLG_NBE);break; CASE_0F_D(0x88) /* JS */ - JumpSId(get_SF());break; + JumpSId(TFLG_S);break; CASE_0F_D(0x89) /* JNS */ - JumpSId(!get_SF());break; + JumpSId(TFLG_NS);break; CASE_0F_D(0x8a) /* JP */ - JumpSId(get_PF());break; + JumpSId(TFLG_P);break; CASE_0F_D(0x8b) /* JNP */ - JumpSId(!get_PF());break; + JumpSId(TFLG_NP);break; CASE_0F_D(0x8c) /* JL */ - JumpSId(get_SF() != get_OF());break; + JumpSId(TFLG_L);break; CASE_0F_D(0x8d) /* JNL */ - JumpSId(get_SF() == get_OF());break; + JumpSId(TFLG_NL);break; CASE_0F_D(0x8e) /* JLE */ - JumpSId(get_ZF() || (get_SF() != get_OF()));break; + JumpSId(TFLG_LE);break; CASE_0F_D(0x8f) /* JNLE */ - JumpSId((get_SF() == get_OF()) && !get_ZF());break; + JumpSId(TFLG_NLE);break; CASE_0F_D(0xa0) /* PUSH FS */ Push_32(SegValue(fs));break; @@ -163,7 +163,7 @@ CASE_0F_D(0xa3) /* BT Ed,Gd */ { - GetRMrd; + FillFlags();GetRMrd; Bit32u mask=1 << (*rmrd & 31); if (rm >= 0xc0 ) { GetEArd; @@ -172,7 +172,6 @@ GetEAa;Bit32u old=LoadMd(eaa); SETFLAGBIT(CF,(old & mask)); } - SetTypeCF(); break; } CASE_0F_D(0xa4) /* SHLD Ed,Gd,Ib */ @@ -187,7 +186,7 @@ CPU_SetSegGeneral(gs,(Bit16u)Pop_32());break; CASE_0F_D(0xab) /* BTS Ed,Gd */ { - GetRMrd; + FillFlags();GetRMrd; Bit32u mask=1 << (*rmrd & 31); if (rm >= 0xc0 ) { GetEArd; @@ -198,7 +197,6 @@ SETFLAGBIT(CF,(old & mask)); SaveMd(eaa,old | mask); } - SetTypeCF(); break; } @@ -247,7 +245,7 @@ } CASE_0F_D(0xba) /* GRP8 Ed,Ib */ { - GetRM; + FillFlags();GetRM; if (rm >= 0xc0 ) { GetEArd; Bit32u mask=1 << (Fetchb() & 31); @@ -290,12 +288,11 @@ E_Exit("CPU:66:0F:BA:Illegal subfunction %X",rm & 0x38); } } - SetTypeCF(); break; } CASE_0F_D(0xbb) /* BTC Ed,Gd */ { - GetRMrd; + FillFlags();GetRMrd; Bit32u mask=1 << (*rmrd & 31); if (rm >= 0xc0 ) { GetEArd; @@ -306,7 +303,6 @@ SETFLAGBIT(CF,(old & mask)); SaveMd(eaa,old ^ mask); } - SetTypeCF(); break; } CASE_0F_D(0xbc) /* BSF Gd,Ed */ diff --git a/src/cpu/core_normal/prefix_none.h b/src/cpu/core_normal/prefix_none.h index 3eba569c..913058b7 100644 --- a/src/cpu/core_normal/prefix_none.h +++ b/src/cpu/core_normal/prefix_none.h @@ -277,37 +277,37 @@ CASE_W(0x6f) /* OUTSW */ DoString(R_OUTSW);break; CASE_B(0x70) /* JO */ - JumpSIb(get_OF());break; + JumpSIb(TFLG_O);break; CASE_B(0x71) /* JNO */ - JumpSIb(!get_OF());break; + JumpSIb(TFLG_NO);break; CASE_B(0x72) /* JB */ - JumpSIb(get_CF());break; + JumpSIb(TFLG_B);break; CASE_B(0x73) /* JNB */ - JumpSIb(!get_CF());break; + JumpSIb(TFLG_NB);break; CASE_B(0x74) /* JZ */ - JumpSIb(get_ZF());break; + JumpSIb(TFLG_Z);break; CASE_B(0x75) /* JNZ */ - JumpSIb(!get_ZF());break; + JumpSIb(TFLG_NZ);break; CASE_B(0x76) /* JBE */ - JumpSIb(get_CF() || get_ZF());break; + JumpSIb(TFLG_BE);break; CASE_B(0x77) /* JNBE */ - JumpSIb(!get_CF() && !get_ZF());break; + JumpSIb(TFLG_NBE);break; CASE_B(0x78) /* JS */ - JumpSIb(get_SF());break; + JumpSIb(TFLG_S);break; CASE_B(0x79) /* JNS */ - JumpSIb(!get_SF());break; + JumpSIb(TFLG_NS);break; CASE_B(0x7a) /* JP */ - JumpSIb(get_PF());break; + JumpSIb(TFLG_P);break; CASE_B(0x7b) /* JNP */ - JumpSIb(!get_PF());break; + JumpSIb(TFLG_NP);break; CASE_B(0x7c) /* JL */ - JumpSIb(get_SF() != get_OF());break; + JumpSIb(TFLG_L);break; CASE_B(0x7d) /* JNL */ - JumpSIb(get_SF() == get_OF());break; + JumpSIb(TFLG_NL);break; CASE_B(0x7e) /* JLE */ - JumpSIb(get_ZF() || (get_SF() != get_OF()));break; + JumpSIb(TFLG_LE);break; CASE_B(0x7f) /* JNLE */ - JumpSIb((get_SF() == get_OF()) && !get_ZF());break; + JumpSIb(TFLG_NLE);break; CASE_B(0x80) /* Grpl Eb,Ib */ CASE_B(0x82) /* Grpl Eb,Ib Mirror instruction*/ { @@ -547,13 +547,9 @@ CASE_W(0x9a) /* CALL Ap */ { Bit16u newip=Fetchw();Bit16u newcs=Fetchw(); - SAVEIP; - if (CPU_CALL(false,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; + LEAVECORE; + CPU_CALL(false,newcs,newip); + goto decode_start; } CASE_B(0x9b) /* WAIT */ break; /* No waiting here */ @@ -737,32 +733,27 @@ reg_bp=Pop_16(); break; CASE_W(0xca) /* RETF Iw */ - { - if (CPU_RET(false,Fetchw())) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; + { + Bitu words=Fetchw(); + LEAVECORE; + CPU_RET(false,words); + goto decode_start; } CASE_W(0xcb) /* RETF */ - { - if (CPU_RET(false,0)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; - } + LEAVECORE; + CPU_RET(false,0); + goto decode_start; CASE_B(0xcc) /* INT3 */ LEAVECORE; #if C_DEBUG if (DEBUG_Breakpoint()) { return debugCallback; } -#endif +#endif + CPU_SW_Interrupt(3); +#if CPU_TRAP_CHECK core.trap.skip=true; - if (!Interrupt(3)) return CBRET_NONE; +#endif goto decode_start; CASE_B(0xcd) /* INT Ib */ { @@ -773,37 +764,39 @@ return debugCallback; } #endif + CPU_SW_Interrupt(num); +#if CPU_TRAP_CHECK core.trap.skip=true; - if (!Interrupt(num)) return CBRET_NONE; - goto decode_start; //Restore IP with a LOADIP +#endif + goto decode_start; } break; CASE_B(0xce) /* INTO */ if (get_OF()) { LEAVECORE; + CPU_SW_Interrupt(4); +#if CPU_TRAP_CHECK core.trap.skip=true; - if (!Interrupt(4)) return CBRET_NONE; - goto decode_start; //Restore IP with a LOADIP +#endif + goto decode_start; + } break; CASE_W(0xcf) /* IRET */ { - if (CPU_IRET(false)) { + LEAVECORE; + CPU_IRET(false); #ifdef CPU_PIC_CHECK - if (GETFLAG(IF) && PIC_IRQCheck) return CBRET_NONE; + if (GETFLAG(IF) && PIC_IRQCheck) return CBRET_NONE; #endif #if CPU_TRAP_CHECK - if (GETFLAG(TF)) { - cpudecoder=CPU_Core_Normal_Decode_Trap; - return CBRET_NONE; - } + if (GETFLAG(TF)) { + cpudecoder=CPU_Core_Normal_Decode_Trap; + return CBRET_NONE; + } #endif goto decode_start; - } else { - return CBRET_NONE; } - break; - } CASE_B(0xd0) /* GRP2 Eb,1 */ GRP2B(1);break; CASE_W(0xd1) /* GRP2 Ew,1 */ @@ -930,13 +923,9 @@ { Bit16u newip=Fetchw(); Bit16u newcs=Fetchw(); - SAVEIP; - if (CPU_JMP(false,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } - break; + LEAVECORE; + CPU_JMP(false,newcs,newip); + goto decode_start; } CASE_B(0xeb) /* JMP Jb */ ADDIPFAST(Fetchbs());break; @@ -963,8 +952,8 @@ CPU_HLT(); return CBRET_NONE; CASE_B(0xf5) /* CMC */ - SETFLAGBIT(CF,!get_CF()); - SetTypeCF() ; + FillFlags(); + SETFLAGBIT(CF,!(reg_flags & FLAG_CF)); break; CASE_B(0xf6) /* GRP3 Eb(,Ib) */ { @@ -1055,12 +1044,12 @@ break; } CASE_B(0xf8) /* CLC */ + FillFlags(); SETFLAGBIT(CF,false); - SetTypeCF(); break; CASE_B(0xf9) /* STC */ + FillFlags(); SETFLAGBIT(CF,true); - SetTypeCF(); break; CASE_B(0xfa) /* CLI */ SETFLAGBIT(IF,false); @@ -1118,12 +1107,9 @@ GetEAa; Bit16u newip=LoadMw(eaa); Bit16u newcs=LoadMw(eaa+2); - SAVEIP; - if (CPU_CALL(false,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } + LEAVECORE; + CPU_CALL(false,newcs,newip); + goto decode_start; } break; case 0x04: /* JMP Ev */ @@ -1135,12 +1121,10 @@ GetEAa; Bit16u newip=LoadMw(eaa); Bit16u newcs=LoadMw(eaa+2); - SAVEIP; - if (CPU_JMP(false,newcs,newip)) { - LOADIP; - } else { - FillFlags();return CBRET_NONE; - } } + LEAVECORE; + CPU_JMP(false,newcs,newip); + goto decode_start; + } break; case 0x06: /* PUSH Ev */ if (rm >= 0xc0 ) {GetEArw;Push_16(*earw);} diff --git a/src/cpu/core_normal/support.h b/src/cpu/core_normal/support.h index d0e4d2a1..7ed92cbe 100644 --- a/src/cpu/core_normal/support.h +++ b/src/cpu/core_normal/support.h @@ -47,9 +47,8 @@ static INLINE void ADDIPFAST(Bits blah) { Bit8u new_num=blah; \ core.ip_lookup=core.op_start; \ LEAVECORE; \ - if (Interrupt(new_num)) { \ - goto decode_start; \ - } else return CBRET_NONE; \ + CPU_Exception(new_num); \ + goto decode_start; \ } static INLINE Bit8u Fetchb() {