summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2012-11-27 20:36:14 +0100
committerPierre Bourdon <delroth@gmail.com>2012-11-27 20:36:14 +0100
commit2120f536d55c37eae017d06c3e888ebcd5bdc018 (patch)
tree148ca919d3f0ddc5aee953b485d8bb5b367e08f6 /Source/Core
parent9b1a66245e316e8adce6e553d361f61f601f3e38 (diff)
Implement command 07 in GC AX (download data to main LR and reset main surround)
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp19
-rw-r--r--Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h3
2 files changed, 20 insertions, 2 deletions
diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp
index 4352eea2ec..91a7b03625 100644
--- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp
+++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp
@@ -136,7 +136,12 @@ void CUCode_AX::HandleCommandList()
UploadLRS(HILO_TO_32(addr));
break;
- case CMD_SBUFFER_ADDR: curr_idx += 2; break;
+ case CMD_SET_LR:
+ addr_hi = m_cmdlist[curr_idx++];
+ addr_lo = m_cmdlist[curr_idx++];
+ SetMainLR(HILO_TO_32(addr));
+ break;
+
case CMD_UNK_08: curr_idx += 10; break; // TODO: check
case CMD_MIX_AUXB_NOWRITE:
@@ -419,6 +424,18 @@ void CUCode_AX::UploadLRS(u32 dst_addr)
memcpy(HLEMemory_Get_Pointer(dst_addr), buffers, sizeof (buffers));
}
+void CUCode_AX::SetMainLR(u32 src_addr)
+{
+ int* ptr = (int*)HLEMemory_Get_Pointer(src_addr);
+ for (u32 i = 0; i < 5 * 32; ++i)
+ {
+ int samp = (int)Common::swap32(*ptr++);
+ m_samples_left[i] = samp;
+ m_samples_right[i] = samp;
+ m_samples_surround[i] = 0;
+ }
+}
+
void CUCode_AX::OutputSamples(u32 lr_addr, u32 surround_addr)
{
int surround_buffer[5 * 32];
diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h
index 4ac23f7968..32083f675a 100644
--- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h
+++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.h
@@ -134,6 +134,7 @@ protected:
void ProcessPBList(u32 pb_addr);
void MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr);
void UploadLRS(u32 dst_addr);
+ void SetMainLR(u32 src_addr);
void OutputSamples(u32 out_addr, u32 surround_addr);
void MixAUXBLR(u32 ul_addr, u32 dl_addr);
void SendAUXAndMix(u32 main_auxa_up, u32 auxb_s_up, u32 main_l_dl,
@@ -149,7 +150,7 @@ private:
CMD_MIX_AUXA = 0x04,
CMD_MIX_AUXB = 0x05,
CMD_UPLOAD_LRS = 0x06,
- CMD_SBUFFER_ADDR = 0x07,
+ CMD_SET_LR = 0x07,
CMD_UNK_08 = 0x08,
CMD_MIX_AUXB_NOWRITE = 0x09,
CMD_COMPRESSOR_TABLE_ADDR = 0x0A,