mirror of https://github.com/PCSX2/pcsx2.git
ReorderingMTGS: Clean up and unify all OPH flag handling to be in the BUSDIR handler.
git-svn-id: http://pcsx2.googlecode.com/svn/branches/ReorderingMTGS@3522 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
ffdf8223fd
commit
f7d0ed2dc5
|
@ -164,7 +164,6 @@ void __fastcall WriteFIFO_page_5(u32 mem, const mem128_t *value)
|
||||||
|
|
||||||
if(GSTransferStatus.PTH2 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH2)
|
if(GSTransferStatus.PTH2 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH2)
|
||||||
{
|
{
|
||||||
if(gifRegs->stat.DIR == 0)gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
||||||
}
|
}
|
||||||
|
@ -201,7 +200,6 @@ void __fastcall WriteFIFO_page_6(u32 mem, const mem128_t *value)
|
||||||
GetMTGS().SendDataPacket();
|
GetMTGS().SendDataPacket();
|
||||||
if(GSTransferStatus.PTH3 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH3 )
|
if(GSTransferStatus.PTH3 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH3 )
|
||||||
{
|
{
|
||||||
if(gifRegs->stat.DIR == 0)gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
||||||
}
|
}
|
||||||
|
|
15
pcsx2/GS.cpp
15
pcsx2/GS.cpp
|
@ -282,14 +282,19 @@ void __fastcall gsWrite64_page_01( u32 mem, const mem64_t* value )
|
||||||
{
|
{
|
||||||
case 0x12001040: //busdir
|
case 0x12001040: //busdir
|
||||||
|
|
||||||
//This is probably a complete hack, however writing to BUSDIR "should" start a transfer (Bleach Blade Battlers)
|
//This is probably a complete hack, however writing to BUSDIR "should" start a transfer
|
||||||
//Only problem is it kills killzone :( leaving it commented out for now.
|
//(Bleach Blade Battlers, Growlanser 2 and 3, Wizardry)
|
||||||
|
//Only problem is it kills killzone :(.
|
||||||
// (yes it *is* a complete hack; both lines here in fact --air)
|
// (yes it *is* a complete hack; both lines here in fact --air)
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
//gifRegs->stat.OPH = true;
|
//Console.Warning("BUSDIR write! Setting OPH and DIR to = %x",(u32)value[0]);
|
||||||
//=========================================================================
|
if ((u32)value[0] == 1)
|
||||||
gifRegs->stat.DIR = (u32)value;
|
gifRegs->stat.OPH = true;
|
||||||
|
else
|
||||||
|
gifRegs->stat.OPH = false;
|
||||||
|
|
||||||
|
gifRegs->stat.DIR = (u32)value[0];
|
||||||
|
//=========================================================================
|
||||||
// BUSDIR INSANITY !! MTGS FLUSH NEEDED
|
// BUSDIR INSANITY !! MTGS FLUSH NEEDED
|
||||||
//
|
//
|
||||||
// Yup folks. BUSDIR is evil. The only safe way to handle it is to flush the whole MTGS
|
// Yup folks. BUSDIR is evil. The only safe way to handle it is to flush the whole MTGS
|
||||||
|
|
|
@ -70,7 +70,6 @@ void gsPath1Interrupt()
|
||||||
|
|
||||||
if(GSTransferStatus.PTH1 == STOPPED_MODE)
|
if(GSTransferStatus.PTH1 == STOPPED_MODE)
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,7 +105,6 @@ __forceinline void gsInterrupt()
|
||||||
|
|
||||||
if(GSTransferStatus.PTH3 >= PENDINGSTOP_MODE && gifRegs->stat.APATH == GIF_APATH3 )
|
if(GSTransferStatus.PTH3 >= PENDINGSTOP_MODE && gifRegs->stat.APATH == GIF_APATH3 )
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
GSTransferStatus.PTH3 = STOPPED_MODE;
|
GSTransferStatus.PTH3 = STOPPED_MODE;
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
||||||
|
@ -319,7 +317,7 @@ void GIFdma()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//gifRegs->stat.OPH = true;
|
//gifRegs->stat.OPH = true; // why set the GS output path flag here? (rama)
|
||||||
gifRegs->stat.FQC = min((u16)0x10, gif->qwc);// FQC=31, hack ;) (for values of 31 that equal 16) [ used to be 0xE00; // APATH=3]
|
gifRegs->stat.FQC = min((u16)0x10, gif->qwc);// FQC=31, hack ;) (for values of 31 that equal 16) [ used to be 0xE00; // APATH=3]
|
||||||
//Check with Path3 masking games
|
//Check with Path3 masking games
|
||||||
if (gif->qwc > 0) {
|
if (gif->qwc > 0) {
|
||||||
|
@ -338,7 +336,7 @@ void GIFdma()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//gifRegs->stat.OPH = true;
|
//gifRegs->stat.OPH = true; // why set the GS output path flag here? (rama)
|
||||||
// Transfer Dn_QWC from Dn_MADR to GIF
|
// Transfer Dn_QWC from Dn_MADR to GIF
|
||||||
if ((gif->chcr.MOD == NORMAL_MODE) || (gif->qwc > 0)) // Normal Mode
|
if ((gif->chcr.MOD == NORMAL_MODE) || (gif->qwc > 0)) // Normal Mode
|
||||||
{
|
{
|
||||||
|
@ -632,7 +630,6 @@ void gifMFIFOInterrupt()
|
||||||
|
|
||||||
if(GSTransferStatus.PTH3 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH3 )
|
if(GSTransferStatus.PTH3 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH3 )
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
||||||
}
|
}
|
||||||
|
|
|
@ -345,7 +345,6 @@ __forceinline void vif1Interrupt()
|
||||||
|
|
||||||
if(GSTransferStatus.PTH2 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH2)
|
if(GSTransferStatus.PTH2 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH2)
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
||||||
}
|
}
|
||||||
|
@ -440,11 +439,6 @@ __forceinline void vif1Interrupt()
|
||||||
if (vif1.cmd != 0) Console.WriteLn("vif1.cmd still set %x tag size %x", vif1.cmd, vif1.tag.size);
|
if (vif1.cmd != 0) Console.WriteLn("vif1.cmd still set %x tag size %x", vif1.cmd, vif1.tag.size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if((vif1ch->chcr.DIR == VIF_NORMAL_TO_MEM_MODE) && vif1.GSLastDownloadSize <= 16)
|
|
||||||
{ //Reverse fifo has finished and nothing is left, so lets clear the outputting flag
|
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
}
|
|
||||||
vif1ch->chcr.STR = false;
|
vif1ch->chcr.STR = false;
|
||||||
vif1.vifstalled = false;
|
vif1.vifstalled = false;
|
||||||
g_vifCycles = 0;
|
g_vifCycles = 0;
|
||||||
|
|
|
@ -239,7 +239,6 @@ void vifMFIFOInterrupt()
|
||||||
if(GSTransferStatus.PTH2 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH2)
|
if(GSTransferStatus.PTH2 == STOPPED_MODE && gifRegs->stat.APATH == GIF_APATH2)
|
||||||
{
|
{
|
||||||
GSTransferStatus.PTH2 = STOPPED_MODE;
|
GSTransferStatus.PTH2 = STOPPED_MODE;
|
||||||
if(gifRegs->stat.DIR == 0)gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
if(gifRegs->stat.P1Q) gsPath1Interrupt();
|
||||||
/*gifRegs->stat.APATH = GIF_APATH_IDLE;
|
/*gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
|
|
|
@ -357,7 +357,8 @@ static __forceinline void gsHandler(const u8* pMem)
|
||||||
// qwords, rounded down; any extra bits are lost
|
// qwords, rounded down; any extra bits are lost
|
||||||
// games must take care to ensure transfer rectangles are exact multiples of a qword
|
// games must take care to ensure transfer rectangles are exact multiples of a qword
|
||||||
vif1.GSLastDownloadSize = vif1.TRXREG.RRW * vif1.TRXREG.RRH * bpp >> 7;
|
vif1.GSLastDownloadSize = vif1.TRXREG.RRW * vif1.TRXREG.RRH * bpp >> 7;
|
||||||
gifRegs->stat.OPH = true;
|
//DevCon.Warning("GS download in progress. OPH = %x", gifRegs->stat.OPH);
|
||||||
|
//gifRegs->stat.OPH = true; // Too early to set it here. It should be done on a BUSDIR call (rama)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (reg >= 0x60)
|
if (reg >= 0x60)
|
||||||
|
@ -617,7 +618,7 @@ __forceinline int GIFPath::CopyTag(const u128* pMem128, u32 size)
|
||||||
}
|
}
|
||||||
if(GSTransferStatus.PTH3 < PENDINGSTOP_MODE || pathidx != 2)
|
if(GSTransferStatus.PTH3 < PENDINGSTOP_MODE || pathidx != 2)
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = true;
|
//gifRegs->stat.OPH = true; // why set the GS output path flag here? (rama)
|
||||||
gifRegs->stat.APATH = pathidx + 1;
|
gifRegs->stat.APATH = pathidx + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -645,7 +646,7 @@ __forceinline int GIFPath::CopyTag(const u128* pMem128, u32 size)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gifRegs->stat.APATH = pathidx + 1;
|
gifRegs->stat.APATH = pathidx + 1;
|
||||||
gifRegs->stat.OPH = true;
|
//gifRegs->stat.OPH = true; // why set the GS output path flag here? (rama)
|
||||||
|
|
||||||
switch(tag.FLG) {
|
switch(tag.FLG) {
|
||||||
case GIF_FLG_PACKED:
|
case GIF_FLG_PACKED:
|
||||||
|
|
|
@ -1111,7 +1111,6 @@ void __fastcall mVU_XGKICK_(u32 addr) {
|
||||||
|
|
||||||
if(GSTransferStatus.PTH1 == STOPPED_MODE)
|
if(GSTransferStatus.PTH1 == STOPPED_MODE)
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1994,7 +1994,6 @@ void __fastcall VU1XGKICK_MTGSTransfer(u32 *pMem, u32 addr)
|
||||||
|
|
||||||
if(GSTransferStatus.PTH1 == STOPPED_MODE )
|
if(GSTransferStatus.PTH1 == STOPPED_MODE )
|
||||||
{
|
{
|
||||||
gifRegs->stat.OPH = false;
|
|
||||||
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
gifRegs->stat.APATH = GIF_APATH_IDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue