From 8ef73203b24af2885bfcf54e26aede0898bde195 Mon Sep 17 00:00:00 2001 From: Stenzek 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; } }