diff options
| author | skidau <skidau@gmail.com> | 2010-06-10 10:30:41 +0000 |
|---|---|---|
| committer | skidau <skidau@gmail.com> | 2010-06-10 10:30:41 +0000 |
| commit | de45e015cdecd94a601573d37afbdf5b6f19efa9 (patch) | |
| tree | 006f517603f07012a2b6e8aede62d8a6e7c21ab6 /Source/Core | |
| parent | 5845ff6728fbdd945230608ed660bdf4132c9787 (diff) | |
Fixed a silly math bug from r5638. Thanks ector!
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5644 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/HW/DSP.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Source/Core/Core/Src/HW/DSP.cpp b/Source/Core/Core/Src/HW/DSP.cpp index 5a56b27d6a..c42f48c413 100644 --- a/Source/Core/Core/Src/HW/DSP.cpp +++ b/Source/Core/Core/Src/HW/DSP.cpp @@ -440,21 +440,27 @@ void Write16(const u16 _Value, const u32 _Address) break; case AR_DMA_MMADDR_H: - g_arDMA.MMAddr = (g_arDMA.MMAddr & 0xFFFF) | (_Value<<16); break; + g_arDMA.MMAddr = (g_arDMA.MMAddr & 0xFFFF) | (_Value<<16); + break; + case AR_DMA_MMADDR_L: - g_arDMA.MMAddr = (g_arDMA.MMAddr & 0xFFFF0000) | (_Value); break; // Is MMAddr also 32 byte aligned? + g_arDMA.MMAddr = (g_arDMA.MMAddr & 0xFFFF0000) | (_Value); + break; case AR_DMA_ARADDR_H: - g_arDMA.ARAddr = (g_arDMA.ARAddr & 0xFFFF) | (_Value<<16); break; + g_arDMA.ARAddr = (g_arDMA.ARAddr & 0xFFFF) | (_Value<<16); + break; + case AR_DMA_ARADDR_L: - g_arDMA.ARAddr = (g_arDMA.ARAddr & 0xFFFF0000) | (_Value) + (_Value % 32); break; + g_arDMA.ARAddr = (g_arDMA.ARAddr & 0xFFFF0000) | (_Value); + break; case AR_DMA_CNT_H: g_arDMA.Cnt.Hex = (g_arDMA.Cnt.Hex & 0xFFFF) | (_Value<<16); break; case AR_DMA_CNT_L: - g_arDMA.Cnt.Hex = (g_arDMA.Cnt.Hex & 0xFFFF0000) | (_Value) + (_Value % 4); + g_arDMA.Cnt.Hex = ((g_arDMA.Cnt.Hex & 0xFFFF0000) | (_Value) + 3) & ~3; Do_ARAM_DMA(); break; @@ -609,6 +615,9 @@ void UpdateAudioDMA() void Do_ARAM_DMA() { + // Align ARAddr to the 32 byte boundary. TODO: Verify alignment on the real hw + g_arDMA.ARAddr = g_arDMA.ARAddr & ~31; + // Real hardware DMAs in 32byte chunks, but we can get by with 8byte chunks if (g_arDMA.Cnt.dir) { |
