diff options
| author | Marko Pusljar <LM1234@gmail.com> | 2010-03-08 21:25:35 +0000 |
|---|---|---|
| committer | Marko Pusljar <LM1234@gmail.com> | 2010-03-08 21:25:35 +0000 |
| commit | 70a712c065cd53f8d106d0994795bf8f265eaebe (patch) | |
| tree | 39dada9f39a707e6b3d12dbdc76aaae40c61461f /Source/Core/DSPCore/Src/DSPIntExtOps.cpp | |
| parent | 76ad8db4459248d10785c82f7a877434664a0ff3 (diff) | |
DSPLLE - flags&stuff,xar->subarn,0x80 kinda figured out,... (experimental)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5174 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DSPCore/Src/DSPIntExtOps.cpp')
| -rw-r--r-- | Source/Core/DSPCore/Src/DSPIntExtOps.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Source/Core/DSPCore/Src/DSPIntExtOps.cpp b/Source/Core/DSPCore/Src/DSPIntExtOps.cpp index e707c4750d..76a30b4e61 100644 --- a/Source/Core/DSPCore/Src/DSPIntExtOps.cpp +++ b/Source/Core/DSPCore/Src/DSPIntExtOps.cpp @@ -480,7 +480,27 @@ void zeroWriteBackLog() { // always make sure to have an extra entry at the end w/ -1 to avoid // infinitive loops - for (int i = 0; writeBackLogIdx[i] != -1; i++) + for (int i = 0; writeBackLogIdx[i] != -1; i++) { dsp_op_write_reg(writeBackLogIdx[i], 0); + } } +//needed for 0x3... (at least)..., + clrl +//ex. corner case -> 0x4060: main opcode modifies .m, and extended .l -> .l shoudnt be zeroed because of .m write... +void zeroWriteBackLogPreserveAcc(u8 acc) +{ + for (int i = 0; writeBackLogIdx[i] != -1; i++) { + + // acc0 + if ((acc == 0) && + ((writeBackLogIdx[i] == DSP_REG_ACL0) || (writeBackLogIdx[i] == DSP_REG_ACM0) || (writeBackLogIdx[i] == DSP_REG_ACH0))) + continue; + + // acc1 + if ((acc == 1) && + ((writeBackLogIdx[i] == DSP_REG_ACL1) || (writeBackLogIdx[i] == DSP_REG_ACM1) || (writeBackLogIdx[i] == DSP_REG_ACH1))) + continue; + + dsp_op_write_reg(writeBackLogIdx[i], 0); + } +} |
