diff options
author | notaz | 2011-10-26 00:01:47 +0300 |
---|---|---|
committer | notaz | 2011-10-30 23:48:08 +0200 |
commit | 48e74ef5e10804f8809fae397be4234e8bf613a7 (patch) | |
tree | 05bf769f22cad3c940dbae0b99c5881261a2eff2 | |
parent | 15d0ba027cfbe88c69b539cc0c9ac6769e577c78 (diff) | |
download | pcsx_rearmed-48e74ef5e10804f8809fae397be4234e8bf613a7.tar.gz pcsx_rearmed-48e74ef5e10804f8809fae397be4234e8bf613a7.tar.bz2 pcsx_rearmed-48e74ef5e10804f8809fae397be4234e8bf613a7.zip |
psxinterpreter: a bit more accurate Cause reg handling
-rw-r--r-- | libpcsxcore/psxinterpreter.c | 8 | ||||
-rw-r--r-- | libpcsxcore/r3000a.c | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/libpcsxcore/psxinterpreter.c b/libpcsxcore/psxinterpreter.c index 66730d9..ff49491 100644 --- a/libpcsxcore/psxinterpreter.c +++ b/libpcsxcore/psxinterpreter.c @@ -780,10 +780,9 @@ void psxMFC0() { if (!_Rt_) return; _i32(_rRt_) = (int)_rFs_; } void psxCFC0() { if (!_Rt_) return; _i32(_rRt_) = (int)_rFs_; } void psxTestSWInts() { - // the next code is untested, if u know please - // tell me if it works ok or not (linuzappz) if (psxRegs.CP0.n.Cause & psxRegs.CP0.n.Status & 0x0300 && - psxRegs.CP0.n.Status & 0x1) { + psxRegs.CP0.n.Status & 0x1) { + psxRegs.CP0.n.Cause &= ~0x7c; psxException(psxRegs.CP0.n.Cause, branch); } } @@ -797,7 +796,8 @@ void MTC0(int reg, u32 val) { break; case 13: // Cause - psxRegs.CP0.n.Cause = val & ~(0xfc00); + psxRegs.CP0.n.Cause &= ~0x0300; + psxRegs.CP0.n.Cause |= val & 0x0300; psxTestSWInts(); break; diff --git a/libpcsxcore/r3000a.c b/libpcsxcore/r3000a.c index cccfa60..f5996ac 100644 --- a/libpcsxcore/r3000a.c +++ b/libpcsxcore/r3000a.c @@ -89,7 +89,7 @@ void psxException(u32 code, u32 bd) { } // Set the Cause - psxRegs.CP0.n.Cause = code; + psxRegs.CP0.n.Cause = (psxRegs.CP0.n.Cause & 0x300) | code; // Set the EPC & PC if (bd) { |