diff options
| author | iCatButler <i.am.catbutler@gmail.com> | 2018-03-19 07:39:08 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-19 07:39:08 +0000 |
| commit | 6f76041029393c6823973a29426b28c8c2d0b064 (patch) | |
| tree | 13c1bb5215c2510a7c430b59bc22df666cd2fbf3 /libpcsxcore/psxinterpreter.c | |
| parent | 768332417644451d38ce1a737465656c7cc75de3 (diff) | |
| parent | 128d6afb179756513860187cf5e31d84d6d8cac4 (diff) | |
| download | pcsxr-6f76041029393c6823973a29426b28c8c2d0b064.tar.gz | |
Merge pull request #7 from loathingKernel/sync-with-codeplex
Sync with codeplex
Diffstat (limited to 'libpcsxcore/psxinterpreter.c')
| -rwxr-xr-x | libpcsxcore/psxinterpreter.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/libpcsxcore/psxinterpreter.c b/libpcsxcore/psxinterpreter.c index 6aa5ac15..a4f38e6d 100755 --- a/libpcsxcore/psxinterpreter.c +++ b/libpcsxcore/psxinterpreter.c @@ -559,14 +559,20 @@ void psxSLTU() { if (!_Rd_) return; _rRd_ = _u32(_rRs_) < _u32(_rRt_); } // Rd * Format: OP rs, rt * *********************************************************/ void psxDIV() { - if (_i32(_rRt_) != 0) { + if (!_i32(_rRt_)) { + if (_i32(_rRs_) & 0x80000000) { + _i32(_rLo_) = 1; + } else { + _i32(_rLo_) = 0xFFFFFFFF; + _i32(_rHi_) = _i32(_rRs_); + } + } else if (_i32(_rRs_) == 0x80000000 && _i32(_rRt_) == 0xFFFFFFFF) { + _i32(_rLo_) = 0x80000000; + _i32(_rHi_) = 0; + } else { _i32(_rLo_) = _i32(_rRs_) / _i32(_rRt_); _i32(_rHi_) = _i32(_rRs_) % _i32(_rRt_); } - else { - _i32(_rLo_) = 0xffffffff; - _i32(_rHi_) = _i32(_rRs_); - } } void psxDIVU() { @@ -1115,7 +1121,6 @@ void (*psxCP2BSC[32])() = { }; #include "psxinterpreter_pgxp.h" - // Trace all functions using PGXP static void(*pgxpPsxBSC[64])() = { psxSPECIAL, psxREGIMM, psxJ , psxJAL , psxBEQ , psxBNE , psxBLEZ, psxBGTZ, |
