IPU Fix for Haunting Grounds (in-game cinemas skipped after 1 second). Bug was caused by the internal buffer of the IPU (2 QWC) not being refilled properly in rare circumstances.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3824 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2010-09-23 15:24:45 +00:00
parent 5fd2cf97d3
commit cfca4ccdd0
2 changed files with 9 additions and 6 deletions

View File

@ -206,8 +206,8 @@ __fi u32 ipuRead32(u32 mem)
if (!ipuRegs.ctrl.BUSY) if (!ipuRegs.ctrl.BUSY)
IPU_LOG("read32: IPU_CTRL=0x%08X", ipuRegs.ctrl._u32); IPU_LOG("read32: IPU_CTRL=0x%08X", ipuRegs.ctrl._u32);
return ipuRegs.ctrl._u32; return ipuRegs.ctrl._u32;
} }
ipucase(IPU_BP): // IPU_BP ipucase(IPU_BP): // IPU_BP
{ {
@ -218,7 +218,7 @@ __fi u32 ipuRead32(u32 mem)
ipuRegs.ipubp |= g_BP.FP << 16; ipuRegs.ipubp |= g_BP.FP << 16;
IPU_LOG("read32: IPU_BP=0x%08X", ipuRegs.ipubp); IPU_LOG("read32: IPU_BP=0x%08X", ipuRegs.ipubp);
return ipuRegs.ipubp; return ipuRegs.ipubp;
} }
default: default:

View File

@ -85,7 +85,7 @@ struct __aligned16 tIPU_BP {
BP += bits; BP += bits;
pxAssume( BP <= 256 ); pxAssume( BP <= 256 );
if (BP > 127) if (BP >= 128)
{ {
BP -= 128; BP -= 128;
@ -100,8 +100,11 @@ struct __aligned16 tIPU_BP {
else else
{ {
// if FP == 1 then the buffer has been completely drained. // if FP == 1 then the buffer has been completely drained.
// if FP == 0 then an already-drained buffer is being advanced. // if FP == 0 then an already-drained buffer is being advanced, and we need to drop a
// In either case we just assign FP to 0. // quadword from the IPU FIFO.
if (!FP)
ipu_fifo.in.read(&internal_qwc[0]);
FP = 0; FP = 0;
} }