From 05617a332b059fd630420784b04d12099079d25a Mon Sep 17 00:00:00 2001 From: Mefiresu <15063879+Mefiresu@users.noreply.github.com> Date: Mon, 12 May 2025 18:16:14 +0200 Subject: [PATCH] dmae: Implement 16bit endian swap for DMAECopyMem (#1564) --- src/Cafe/OS/libs/dmae/dmae.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Cafe/OS/libs/dmae/dmae.cpp b/src/Cafe/OS/libs/dmae/dmae.cpp index 7c513784..c35fce2e 100644 --- a/src/Cafe/OS/libs/dmae/dmae.cpp +++ b/src/Cafe/OS/libs/dmae/dmae.cpp @@ -36,6 +36,16 @@ void dmaeExport_DMAECopyMem(PPCInterpreter_t* hCPU) dstBuffer[i] = _swapEndianU32(srcBuffer[i]); } } + else if( hCPU->gpr[6] == DMAE_ENDIAN_16 ) + { + // swap per uint16 + uint16* srcBuffer = (uint16*)memory_getPointerFromVirtualOffset(hCPU->gpr[4]); + uint16* dstBuffer = (uint16*)memory_getPointerFromVirtualOffset(hCPU->gpr[3]); + for(uint32 i=0; igpr[5]*2; i++) + { + dstBuffer[i] = _swapEndianU16(srcBuffer[i]); + } + } else { cemuLog_logDebug(LogType::Force, "DMAECopyMem(): Unsupported endian swap\n");