From 8ef73203b24af2885bfcf54e26aede0898bde195 Mon Sep 17 00:00:00 2001
From: Stenzek <stenzek@gmail.com>
Date: Fri, 31 May 2024 21:00:46 +1000
Subject: [PATCH] Bus: Ignore SPU byte writes to unaligned addresses

---
 src/core/bus.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/core/bus.cpp b/src/core/bus.cpp
index c157faef0..fb956b16a 100644
--- a/src/core/bus.cpp
+++ b/src/core/bus.cpp
@@ -1505,7 +1505,6 @@ void Bus::HWHandlers::SPUWrite(PhysicalMemoryAddress address, u32 value)
   const u32 offset = address & SPU_MASK;
 
   // 32-bit writes are written as two 16-bit writes.
-  // TODO: Ignore if address is not aligned.
   switch (size)
   {
     case MemoryAccessSize::Word:
@@ -1525,8 +1524,11 @@ void Bus::HWHandlers::SPUWrite(PhysicalMemoryAddress address, u32 value)
 
     case MemoryAccessSize::Byte:
     {
-      SPU::WriteRegister(FIXUP_HALFWORD_OFFSET(size, offset),
-                         Truncate16(FIXUP_HALFWORD_READ_VALUE(size, offset, value)));
+      // Byte writes to unaligned addresses are apparently ignored.
+      if (address & 1)
+        return;
+
+      SPU::WriteRegister(offset, Truncate16(FIXUP_HALFWORD_READ_VALUE(size, offset, value)));
       break;
     }
   }