Simulate data being available in VIF1 FIFO when FDR is set.

This commit is contained in:
Jean-Philip Desjardins 2016-09-18 17:34:41 -04:00
parent 1b9205fb5b
commit 31ca0a1d0b
2 changed files with 16 additions and 1 deletions

View File

@ -82,6 +82,12 @@ uint32 CVif::GetRegister(uint32 address)
case VIF0_STAT:
case VIF1_STAT:
result = m_STAT;
if(m_STAT.nFDR != 0)
{
//When FDR is set, it usually means the game is trying to
//read data from GS and that FIFO has some data in it
result |= (0x10 << 24);
}
break;
case VIF0_MARK:
case VIF1_MARK:
@ -139,6 +145,9 @@ void CVif::SetRegister(uint32 address, uint32 value)
{
switch(address)
{
case VIF1_STAT:
m_STAT.nFDR = ((value & STAT_FDR) != 0) ? 1 : 0;
break;
case VIF0_FBRST:
case VIF1_FBRST:
if(value & FBRST_RST)

View File

@ -74,6 +74,11 @@ protected:
FBRST_STC = 0x08
};
enum
{
STAT_FDR = 0x00800000,
};
enum
{
FIFO_SIZE = 0x100
@ -129,7 +134,8 @@ protected:
unsigned int nINT : 1;
unsigned int nER0 : 1;
unsigned int nER1 : 1;
unsigned int nReserved2 : 10;
unsigned int nReserved2 : 9;
unsigned int nFDR : 1; //VIF1 only
unsigned int nFQC : 4;
unsigned int nReserved3 : 4;
};