diff --git a/pcsx2/IPU/IPU.cpp b/pcsx2/IPU/IPU.cpp index d39c1d242b..e0c2829752 100644 --- a/pcsx2/IPU/IPU.cpp +++ b/pcsx2/IPU/IPU.cpp @@ -206,8 +206,8 @@ __fi u32 ipuRead32(u32 mem) if (!ipuRegs.ctrl.BUSY) IPU_LOG("read32: IPU_CTRL=0x%08X", ipuRegs.ctrl._u32); - return ipuRegs.ctrl._u32; - } + return ipuRegs.ctrl._u32; + } ipucase(IPU_BP): // IPU_BP { @@ -218,7 +218,7 @@ __fi u32 ipuRead32(u32 mem) ipuRegs.ipubp |= g_BP.FP << 16; IPU_LOG("read32: IPU_BP=0x%08X", ipuRegs.ipubp); - return ipuRegs.ipubp; + return ipuRegs.ipubp; } default: diff --git a/pcsx2/IPU/IPU.h b/pcsx2/IPU/IPU.h index 6759e547db..bba968e31c 100644 --- a/pcsx2/IPU/IPU.h +++ b/pcsx2/IPU/IPU.h @@ -85,7 +85,7 @@ struct __aligned16 tIPU_BP { BP += bits; pxAssume( BP <= 256 ); - if (BP > 127) + if (BP >= 128) { BP -= 128; @@ -100,8 +100,11 @@ struct __aligned16 tIPU_BP { else { // if FP == 1 then the buffer has been completely drained. - // if FP == 0 then an already-drained buffer is being advanced. - // In either case we just assign FP to 0. + // if FP == 0 then an already-drained buffer is being advanced, and we need to drop a + // quadword from the IPU FIFO. + + if (!FP) + ipu_fifo.in.read(&internal_qwc[0]); FP = 0; }