}
uae_u16 imask = intreq2 & intena2;
if (!(imask && (intena2 & 0x4000)))
- return -1;
+ return 0;
if (imask & (0x4000 | 0x2000)) // 13 14
return 6;
if (imask & (0x1000 | 0x0800)) // 11 12
return 2;
if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2
return 1;
- return -1;
+ return 0;
}
void rethink_uae_int(void)
int exception;
int intmask;
int ipl[2], ipl_pin, ipl_pin_p;
+ int lastipl;
evt_t ipl_pin_change_evt, ipl_pin_change_evt_p;
evt_t ipl_evt, ipl_evt_pre;
int ipl_evt_pre_mode;
SET_VFLG(0);
SET_NFLG(0);
regs.intmask = 7;
+ regs.lastipl = 0;
regs.vbr = regs.sfc = regs.dfc = 0;
regs.irc = 0xffff;
#ifdef FPUEMU
if (spcflags & SPCFLAG_INT) {
int intr = intlev();
unset_special (SPCFLAG_INT | SPCFLAG_DOINT);
- if (intr > regs.intmask || intr == 7)
+ if (intr > regs.intmask || (intr == 7 && intr > regs.lastipl)) {
do_interrupt(intr);
+ }
+ regs.lastipl = intr;
}
}