mirror of https://github.com/PCSX2/pcsx2.git
Worked on SIGNAL support some more; fixes missing menu geometry in Soul Calibur 3 (devs: see code comments for details).
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3346 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
6d57e15615
commit
9e3824c9ef
12
pcsx2/GS.cpp
12
pcsx2/GS.cpp
|
@ -117,9 +117,9 @@ static __forceinline void gsCSRwrite( const tGS_CSR& csr )
|
||||||
// trigger the gsInt and clear the second pending SIGNAL -- if they fail to do so, the
|
// trigger the gsInt and clear the second pending SIGNAL -- if they fail to do so, the
|
||||||
// GS will freeze again upon the very next SIGNAL).
|
// GS will freeze again upon the very next SIGNAL).
|
||||||
|
|
||||||
CSRreg.SIGNAL = CSR_SIGNAL_Pending;
|
CSRreg.SIGNAL = false; //CSR_SIGNAL_Pending;
|
||||||
if( CSRreg.SIGNAL )
|
//if( CSRreg.SIGNAL )
|
||||||
CSR_SIGNAL_Pending = false;
|
// CSR_SIGNAL_Pending = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(csr.FINISH) CSRreg.FINISH = false;
|
if(csr.FINISH) CSRreg.FINISH = false;
|
||||||
|
@ -134,6 +134,12 @@ static __forceinline void IMRwrite(u32 value)
|
||||||
|
|
||||||
if(CSRreg.GetInterruptMask() & (~(GSIMR >> 8) & 0x1f))
|
if(CSRreg.GetInterruptMask() & (~(GSIMR >> 8) & 0x1f))
|
||||||
gsIrq();
|
gsIrq();
|
||||||
|
|
||||||
|
if( CSR_SIGNAL_Pending && !(GSIMR & 0x100))
|
||||||
|
{
|
||||||
|
//CSRreg.SIGNAL = true;
|
||||||
|
gsIrq();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void gsWrite8(u32 mem, u8 value)
|
__forceinline void gsWrite8(u32 mem, u8 value)
|
||||||
|
|
|
@ -41,7 +41,7 @@ static void SaveStateFile_ReadHeader( IStreamReader& thr )
|
||||||
|
|
||||||
if( strcmp(SavestateIdentString, ident) )
|
if( strcmp(SavestateIdentString, ident) )
|
||||||
throw Exception::SaveStateLoadError( thr.GetStreamName() )
|
throw Exception::SaveStateLoadError( thr.GetStreamName() )
|
||||||
.SetDiagMsg(wxsFormat( L"Unrecognized file signature while loading savestate. [sig = %s]", ident ))
|
.SetDiagMsg(wxsFormat( L"Unrecognized file signature while loading savestate."))
|
||||||
.SetUserMsg(_("This is not a valid PCSX2 savestate, or is from an older unsupported version of PCSX2."));
|
.SetUserMsg(_("This is not a valid PCSX2 savestate, or is from an older unsupported version of PCSX2."));
|
||||||
|
|
||||||
u32 savever;
|
u32 savever;
|
||||||
|
|
|
@ -141,38 +141,35 @@ static void __fastcall RegHandlerSIGNAL(const u32* data)
|
||||||
|
|
||||||
GSSIGLBLID.SIGID = (GSSIGLBLID.SIGID&~data[1])|(data[0]&data[1]);
|
GSSIGLBLID.SIGID = (GSSIGLBLID.SIGID&~data[1])|(data[0]&data[1]);
|
||||||
|
|
||||||
// This is not working yet for some reason. Will have to troubleshoot it later.
|
// HACK:
|
||||||
// For now having the SIGNAL behave like other interrupts seems to be fine. --air
|
// Soul Calibur 3 has missing geometry on the Vs select screen if we only setup
|
||||||
// (note: use Soul Calibur 3 for testing double-throw Signals!)
|
// SIGNAL when the CSR flag is cleared. It seems to be doing SIGNALs on PATH2 and
|
||||||
|
// PATH3 simultaneously, and isn't too happy with the results. It properly clears the
|
||||||
|
// SIGNAL interrupt but seems to get suck on a VBLANK OVERLAP loop.
|
||||||
|
// Investigating the game's internals more deeply may prove to be revealing. --air
|
||||||
|
|
||||||
/*if (!(GSIMR&0x100) )
|
if (false)
|
||||||
|
//if (CSRreg.SIGNAL) // breaks SC3
|
||||||
{
|
{
|
||||||
if (CSRreg.SIGNAL)
|
// Time to ignore all subsequent drawing operations. (which is not yet supported)
|
||||||
|
if (!CSR_SIGNAL_Pending)
|
||||||
{
|
{
|
||||||
// Time to ignore all subsequent drawing operations.
|
DevCon.WriteLn( Color_StrongOrange, "GS SIGNAL double throw encountered!" );
|
||||||
if (!CSR_SIGNAL_Pending)
|
CSR_SIGNAL_Pending = true;
|
||||||
{
|
|
||||||
DevCon.WriteLn( Color_StrongOrange, "GS SIGNAL double throw encountered!" );
|
|
||||||
CSR_SIGNAL_Pending = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CSRreg.SIGNAL = true;
|
|
||||||
gsIrq();
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (!CSRreg.SIGNAL)
|
|
||||||
{
|
|
||||||
CSRreg.SIGNAL = true;
|
|
||||||
if (!(GSIMR&0x100) )
|
|
||||||
{
|
|
||||||
CSRreg.SIGNAL = true;
|
|
||||||
gsIrq();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// notes:
|
||||||
|
// * DDS SMT however crashes at the first FMV if SIGNAL raises IRQs constantly,
|
||||||
|
// so that's why we only raise an IRQ if both signal and GSIMR are prepped.
|
||||||
|
// (this might be correct behavior-- hard to tell yet) --air
|
||||||
|
|
||||||
|
if (!CSRreg.SIGNAL && !(GSIMR&0x100) )
|
||||||
|
gsIrq();
|
||||||
|
|
||||||
|
CSRreg.SIGNAL = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FINISH : Enables end-of-draw signaling. When FINISH is written it tells the GIF to
|
// FINISH : Enables end-of-draw signaling. When FINISH is written it tells the GIF to
|
||||||
|
|
Loading…
Reference in New Issue