From 0220fd194072f596092cde1c76be0712d80af786 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Tue, 2 Apr 2013 03:23:48 +0200 Subject: [PATCH] Implemented command 03: ADD_SUB_TO_LR --- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp | 27 +++++++++++++++++-- .../Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h | 5 ++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp index 810194eed9..ec640ca038 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.cpp @@ -83,7 +83,11 @@ void CUCode_AXWii::HandleCommandList() AddToLR(HILO_TO_32(addr), cmd == CMD_SUB_TO_LR_OLD); break; - case CMD_UNK_03_OLD: curr_idx += 2; break; + case CMD_ADD_SUB_TO_LR_OLD: + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + AddSubToLR(HILO_TO_32(addr)); + break; case CMD_PB_ADDR_OLD: addr_hi = m_cmdlist[curr_idx++]; @@ -162,7 +166,11 @@ void CUCode_AXWii::HandleCommandList() AddToLR(HILO_TO_32(addr), cmd == CMD_SUB_TO_LR); break; - case CMD_UNK_03: curr_idx += 2; break; + case CMD_ADD_SUB_TO_LR: + addr_hi = m_cmdlist[curr_idx++]; + addr_lo = m_cmdlist[curr_idx++]; + AddSubToLR(HILO_TO_32(addr)); + break; case CMD_PROCESS: addr_hi = m_cmdlist[curr_idx++]; @@ -292,6 +300,21 @@ void CUCode_AXWii::AddToLR(u32 val_addr, bool neg) } } +void CUCode_AXWii::AddSubToLR(u32 val_addr) +{ + int* ptr = (int*)HLEMemory_Get_Pointer(val_addr); + for (int i = 0; i < 32 * 3; ++i) + { + int val = (int)Common::swap32(*ptr++); + m_samples_left[i] += val; + } + for (int i = 0; i < 32 * 3; ++i) + { + int val = (int)Common::swap32(*ptr++); + m_samples_right[i] -= val; + } +} + AXMixControl CUCode_AXWii::ConvertMixerControl(u32 mixer_control) { u32 ret = 0; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h index 9c49f35a81..8952961004 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AXWii.h @@ -72,6 +72,7 @@ protected: void SetupProcessing(u32 init_addr); void AddToLR(u32 val_addr, bool neg); + void AddSubToLR(u32 val_addr); void ProcessPBList(u32 pb_addr); void MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 volume); void OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume, @@ -84,7 +85,7 @@ private: CMD_SETUP = 0x00, CMD_ADD_TO_LR = 0x01, CMD_SUB_TO_LR = 0x02, - CMD_UNK_03 = 0x03, + CMD_ADD_SUB_TO_LR = 0x03, CMD_PROCESS = 0x04, CMD_MIX_AUXA = 0x05, CMD_MIX_AUXB = 0x06, @@ -106,7 +107,7 @@ private: CMD_SETUP_OLD = 0x00, CMD_ADD_TO_LR_OLD = 0x01, CMD_SUB_TO_LR_OLD = 0x02, - CMD_UNK_03_OLD = 0x03, + CMD_ADD_SUB_TO_LR_OLD = 0x03, CMD_PB_ADDR_OLD = 0x04, CMD_PROCESS_OLD = 0x05, CMD_MIX_AUXA_OLD = 0x06,