From 7b7278bc85fa3becd39c47168fe6c912523b4d43 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Wed, 16 Dec 2020 14:04:54 +0000 Subject: [PATCH] VIF: Fix MPG bug incrementing addresses properly when using MTVU Also handle wrapping --- pcsx2/Vif_Codes.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pcsx2/Vif_Codes.cpp b/pcsx2/Vif_Codes.cpp index 41a0148e10..73232f2831 100644 --- a/pcsx2/Vif_Codes.cpp +++ b/pcsx2/Vif_Codes.cpp @@ -262,8 +262,18 @@ static __fi void _vifCode_MPG(int idx, u32 addr, const u32 *data, int size) { vifExecQueue(idx); if (idx && THREAD_VU1) { - vu1Thread.WriteMicroMem(addr, (u8*)data, size*4); - vifX.tag.addr = size * 4; + if ((addr + size * 4) > vuMemSize) + { + vu1Thread.WriteMicroMem(addr, (u8*)data, vuMemSize - addr); + size -= (vuMemSize - addr) / 4; + vu1Thread.WriteMicroMem(0, (u8*)data, size * 4); + vifX.tag.addr = size * 4; + } + else + { + vu1Thread.WriteMicroMem(addr, (u8*)data, size * 4); + vifX.tag.addr += size * 4; + } return; }