Vif/Gif: Hack for Hotwheels World Race, should be pretty harmless at it's very rare conditions.

(Note: Game runs better on ZeroGS than GSDX)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4889 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2011-08-29 21:54:23 +00:00
parent 915d2cc3a1
commit c355393b5b
2 changed files with 8 additions and 3 deletions

View File

@ -576,10 +576,10 @@ struct Gif_Unit {
// DirectHL // DirectHL
bool CanDoPath2HL() { return (stat.APATH == 0 || stat.APATH == 2) bool CanDoPath2HL() { return (stat.APATH == 0 || stat.APATH == 2)
&& (CanDoGif() == 1); } && (CanDoGif() == 1); }
// Gif DMA // Gif DMA - gifch.qwc <= 1 is a hack for Hot Wheels, shouldnt cause much trouble (if any):S
bool CanDoPath3() { return((stat.APATH == 0 && !Path3Masked()) bool CanDoPath3() { return((stat.APATH == 0 && !Path3Masked())
|| stat.APATH == 3) || stat.APATH == 3)
&& (CanDoGif() == 1); } && (CanDoGif() == 1 || gifch.qwc <= 1); }
bool CanDoP3Slice() { return stat.IMT == 1 && gifPath[GIF_PATH_3].state == GIF_PATH_IMAGE; } bool CanDoP3Slice() { return stat.IMT == 1 && gifPath[GIF_PATH_3].state == GIF_PATH_IMAGE; }
bool CanDoGif() { return stat.PSE == 0 && stat.DIR == 0 && gsSIGNAL.queued == 0; } bool CanDoGif() { return stat.PSE == 0 && stat.DIR == 0 && gsSIGNAL.queued == 0; }

View File

@ -260,7 +260,12 @@ __fi void vif1STAT(u32 value) {
if ((vif1Regs.stat.FDR) ^ ((tVIF_STAT&)value).FDR) { if ((vif1Regs.stat.FDR) ^ ((tVIF_STAT&)value).FDR) {
// different so can't be stalled // different so can't be stalled
if (vif1Regs.stat.test(VIF1_STAT_INT | VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS)) { if (vif1Regs.stat.test(VIF1_STAT_INT | VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS)) {
DevCon.WriteLn("changing dir when vif1 fifo stalled"); DevCon.WriteLn("changing dir when vif1 fifo stalled done = %x qwc = %x", vif1.done, vif1ch.qwc);
//Hack!! Hotwheels seems to leave 1QW in the fifo and expect the DMA to be ready for a reverse FIFO
//There's no important data in there so for it to work, we will just end it.
vif1ch.chcr.STR = false;
//This is actually more important for our handling, else the DMA for reverse fifo doesnt start properly.
} }
} }