From de45e015cdecd94a601573d37afbdf5b6f19efa9 Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 10 Jun 2010 10:30:41 +0000 Subject: [PATCH] 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 --- Source/Core/Core/Src/HW/DSP.cpp | 19 ++++++++++++++----- 1 file 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) {