From cab62472b868c50eeecbd43043f2a76b0983906a Mon Sep 17 00:00:00 2001 From: skidau Date: Tue, 15 Jun 2010 01:01:34 +0000 Subject: [PATCH] Confirmed the ARAM DMA alignment by testing the real hardware. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5704 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/HW/DSP.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSP.cpp b/Source/Core/Core/Src/HW/DSP.cpp index c42f48c413..b9806933c0 100644 --- a/Source/Core/Core/Src/HW/DSP.cpp +++ b/Source/Core/Core/Src/HW/DSP.cpp @@ -444,7 +444,8 @@ void Write16(const u16 _Value, const u32 _Address) break; case AR_DMA_MMADDR_L: - g_arDMA.MMAddr = (g_arDMA.MMAddr & 0xFFFF0000) | (_Value); + // Align MMAddr to the 32 byte boundary. Verified on real HW + g_arDMA.MMAddr = ((g_arDMA.MMAddr & 0xFFFF0000) | (_Value)) & ~31; break; case AR_DMA_ARADDR_H: @@ -452,7 +453,8 @@ void Write16(const u16 _Value, const u32 _Address) break; case AR_DMA_ARADDR_L: - g_arDMA.ARAddr = (g_arDMA.ARAddr & 0xFFFF0000) | (_Value); + // Align ARAddr to the 32 byte boundary. Verified on real HW + g_arDMA.ARAddr = ((g_arDMA.ARAddr & 0xFFFF0000) | (_Value)) & ~31; break; case AR_DMA_CNT_H: @@ -460,7 +462,8 @@ void Write16(const u16 _Value, const u32 _Address) break; case AR_DMA_CNT_L: - g_arDMA.Cnt.Hex = ((g_arDMA.Cnt.Hex & 0xFFFF0000) | (_Value) + 3) & ~3; + // Align count to the 32 byte boundary. Verified on real HW + g_arDMA.Cnt.Hex = ((g_arDMA.Cnt.Hex & 0xFFFF0000) | (_Value)) & ~31; Do_ARAM_DMA(); break; @@ -615,9 +618,6 @@ 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) {