X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fr3000a.c;fp=libpcsxcore%2Fr3000a.c;h=0be8a53c4f068a1a57659983931e3a125e8dfe7e;hp=8351c949e0b0d7e3683300b4dbbfb927d734988b;hb=0b1da49108ea0344f762d78c03c2d6eff2b21069;hpb=d512faf7162c167d4ad34c5d13601697c6205ae1 diff --git a/libpcsxcore/r3000a.c b/libpcsxcore/r3000a.c index 8351c949..0be8a53c 100644 --- a/libpcsxcore/r3000a.c +++ b/libpcsxcore/r3000a.c @@ -109,7 +109,7 @@ void psxException(u32 cause, enum R3000Abdt bdt, psxCP0Regs *cp0) { } // Set the Cause - cp0->n.Cause = (bdt << 30) | (cp0->n.Cause & 0x300) | cause; + cp0->n.Cause = (bdt << 30) | (cp0->n.Cause & 0x700) | cause; // Set the EPC & PC cp0->n.EPC = bdt ? psxRegs.pc - 4 : psxRegs.pc; @@ -196,15 +196,11 @@ void psxBranchTest() { } } - if (psxHu32(0x1070) & psxHu32(0x1074)) { - if ((psxRegs.CP0.n.SR & 0x401) == 0x401) { -#ifdef PSXCPU_LOG - PSXCPU_LOG("Interrupt: %x %x\n", psxHu32(0x1070), psxHu32(0x1074)); -#endif -// SysPrintf("Interrupt (%x): %x %x\n", psxRegs.cycle, psxHu32(0x1070), psxHu32(0x1074)); - psxException(0x400, 0, &psxRegs.CP0); - } - } + psxRegs.CP0.n.Cause &= ~0x400; + if (psxHu32(0x1070) & psxHu32(0x1074)) + psxRegs.CP0.n.Cause |= 0x400; + if (((psxRegs.CP0.n.Cause | 1) & psxRegs.CP0.n.SR & 0x401) == 0x401) + psxException(0, 0, &psxRegs.CP0); } void psxJumpTest() {