From: notaz Date: Mon, 6 Jun 2011 16:43:26 +0000 (+0300) Subject: r3000a: don't patch RAM to work around BIOS X-Git-Tag: r9~91 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=665e364a0aba523bb555f369efe4c7be966a6666;p=pcsx_rearmed.git r3000a: don't patch RAM to work around BIOS BIOS steps over if GTE instructions are interrupted, we must work around that since we don't emulate the pipeline. Previous workaround sucks since it hacks emulated RAM.. --- diff --git a/libpcsxcore/r3000a.c b/libpcsxcore/r3000a.c index 98aff3a3..1e8d0b0e 100644 --- a/libpcsxcore/r3000a.c +++ b/libpcsxcore/r3000a.c @@ -79,6 +79,15 @@ void psxShutdown() { } void psxException(u32 code, u32 bd) { + if (!Config.HLE && (((PSXMu32(psxRegs.pc) >> 24) & 0xfe) == 0x4a)) { + // "hokuto no ken" / "Crash Bandicot 2" ... + // BIOS does not allow to return to GTE instructions + // (just skips it, supposedly because it's scheduled already) + // so we step over it with the interpreter + extern void execI(); + execI(); + } + // Set the Cause psxRegs.CP0.n.Cause = code; @@ -102,11 +111,6 @@ void psxException(u32 code, u32 bd) { psxRegs.CP0.n.Status = (psxRegs.CP0.n.Status &~0x3f) | ((psxRegs.CP0.n.Status & 0xf) << 2); - if (!Config.HLE && (((PSXMu32(psxRegs.CP0.n.EPC) >> 24) & 0xfe) == 0x4a)) { - // "hokuto no ken" / "Crash Bandicot 2" ... fix - PSXMu32ref(psxRegs.CP0.n.EPC)&= SWAPu32(~0x02000000); - } - if (Config.HLE) psxBiosException(); }