From 172a3628846816f7c4a29bff486c65063c24eeb2 Mon Sep 17 00:00:00 2001
From: MerryMage <MerryMage@users.noreply.github.com>
Date: Mon, 7 Mar 2016 21:51:59 +0000
Subject: [PATCH] dsp_dsp: Messages are modified by service before being sent
 to DSP

---
 src/core/hle/service/dsp_dsp.cpp | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp
index fe8a6c2d62..39711ea976 100644
--- a/src/core/hle/service/dsp_dsp.cpp
+++ b/src/core/hle/service/dsp_dsp.cpp
@@ -303,6 +303,24 @@ static void WriteProcessPipe(Service::Interface* self) {
         message[i] = Memory::Read8(buffer + i);
     }
 
+    // This behaviour was confirmed by RE.
+    // The likely reason for this is that games tend to pass in garbage at these bytes
+    // because they read random bytes off the stack.
+    switch (pipe) {
+    case DSP::HLE::DspPipe::Audio:
+        ASSERT(message.size() >= 4);
+        message[2] = 0;
+        message[3] = 0;
+        break;
+    case DSP::HLE::DspPipe::Binary:
+        ASSERT(message.size() >= 8);
+        message[4] = 1;
+        message[5] = 0;
+        message[6] = 0;
+        message[7] = 0;
+        break;
+    }
+
     DSP::HLE::PipeWrite(pipe, message);
 
     cmd_buff[0] = IPC::MakeHeader(0xD, 1, 0);