summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2010-06-10 10:30:41 +0000
committerskidau <skidau@gmail.com>2010-06-10 10:30:41 +0000
commitde45e015cdecd94a601573d37afbdf5b6f19efa9 (patch)
tree006f517603f07012a2b6e8aede62d8a6e7c21ab6 /Source/Core
parent5845ff6728fbdd945230608ed660bdf4132c9787 (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.cpp19
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)
{