mirror of https://github.com/PCSX2/pcsx2.git
VIF MFifo: Simulate buffer filling time from Scratchpad.
-Fixes other Chessmaster hang. -having it say it has data really quickly if the data incoming was huge seemed to throw it off. I suspect it may actually be the time it takes to fill 16qw (or whatever is incoming if lower) is the wait time but it seems rather happy with the incoming data size.
This commit is contained in:
parent
5cbd0cf42a
commit
286769dc03
|
@ -271,7 +271,7 @@ __fi void vif1FBRST(u32 value) {
|
||||||
case MFD_VIF1:
|
case MFD_VIF1:
|
||||||
//Console.WriteLn("MFIFO Stall");
|
//Console.WriteLn("MFIFO Stall");
|
||||||
//MFIFO active and not empty
|
//MFIFO active and not empty
|
||||||
if(vif1ch.chcr.STR == true && !(vif1.inprogress & 0x10)) CPU_INT(DMAC_MFIFO_VIF, 0);
|
if(vif1ch.chcr.STR == true) CPU_INT(DMAC_MFIFO_VIF, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NO_MFD:
|
case NO_MFD:
|
||||||
|
|
|
@ -187,7 +187,8 @@ void mfifoVIF1transfer(int qwc)
|
||||||
if(vif1ch.chcr.STR == true && !(cpuRegs.interrupt & (1<<DMAC_MFIFO_VIF)) && !vif1Regs.stat.INT)
|
if(vif1ch.chcr.STR == true && !(cpuRegs.interrupt & (1<<DMAC_MFIFO_VIF)) && !vif1Regs.stat.INT)
|
||||||
{
|
{
|
||||||
SPR_LOG("Data Added, Resuming");
|
SPR_LOG("Data Added, Resuming");
|
||||||
CPU_INT(DMAC_MFIFO_VIF, 16);
|
//Need to simulate the time it takes to copy here, if the VIF resumes before the SPR has finished, it isn't happy.
|
||||||
|
CPU_INT(DMAC_MFIFO_VIF, qwc * BIAS);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Apparently this is bad, i guess so, the data is going to memory rather than the FIFO
|
//Apparently this is bad, i guess so, the data is going to memory rather than the FIFO
|
||||||
|
@ -329,10 +330,7 @@ void vifMFIFOInterrupt()
|
||||||
|
|
||||||
hwIntcIrq(INTC_VIF1);
|
hwIntcIrq(INTC_VIF1);
|
||||||
--vif1.irq;
|
--vif1.irq;
|
||||||
if (vif1.inprogress & 0x10) {
|
|
||||||
FireMFIFOEmpty();
|
|
||||||
//if (!(vif1.done && vif1ch.qwc == 0))return;
|
|
||||||
}
|
|
||||||
if (vif1Regs.stat.test(VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS)) {
|
if (vif1Regs.stat.test(VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS)) {
|
||||||
//vif1Regs.stat.FQC = 0; // FQC=0
|
//vif1Regs.stat.FQC = 0; // FQC=0
|
||||||
//vif1ch.chcr.STR = false;
|
//vif1ch.chcr.STR = false;
|
||||||
|
|
Loading…
Reference in New Issue