basic timing support for VI_V_CURRENT_LINE_REG alternating scan fields by cxd4
This commit is contained in:
parent
5267d80ce2
commit
7345ecd97e
|
@ -48,7 +48,8 @@ public:
|
||||||
virtual bool ValidVaddr ( DWORD VAddr ) const = 0;
|
virtual bool ValidVaddr ( DWORD VAddr ) const = 0;
|
||||||
|
|
||||||
virtual int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer ) = 0;
|
virtual int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer ) = 0;
|
||||||
|
virtual void UpdateFieldSerration ( unsigned int interlaced ) = 0;
|
||||||
|
|
||||||
//Protect the Memory from being written to
|
//Protect the Memory from being written to
|
||||||
virtual void ProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0;
|
virtual void ProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0;
|
||||||
virtual void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0;
|
virtual void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0;
|
||||||
|
|
|
@ -31,6 +31,7 @@ CMipsMemoryVM::CMipsMemoryVM ( CMipsMemory_CallBack * CallBack, bool SavesReadOn
|
||||||
m_RomWroteValue(0),
|
m_RomWroteValue(0),
|
||||||
m_HalfLine(0),
|
m_HalfLine(0),
|
||||||
m_HalfLineCheck(false),
|
m_HalfLineCheck(false),
|
||||||
|
m_FieldSerration(0),
|
||||||
m_TempValue(0)
|
m_TempValue(0)
|
||||||
{
|
{
|
||||||
g_Settings->RegisterChangeCB(Game_RDRamSize,this,(CSettings::SettingChangedFunc)RdramChanged);
|
g_Settings->RegisterChangeCB(Game_RDRamSize,this,(CSettings::SettingChangedFunc)RdramChanged);
|
||||||
|
@ -2633,8 +2634,6 @@ void CMipsMemoryVM::UpdateHalfLine (void)
|
||||||
m_HalfLine = 0;
|
m_HalfLine = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_HalfLine = (DWORD)(NextViTimer / g_System->ViRefreshRate());
|
|
||||||
m_HalfLine &= ~1;
|
|
||||||
|
|
||||||
int check_value = (int)(m_HalfLineCheck - NextViTimer);
|
int check_value = (int)(m_HalfLineCheck - NextViTimer);
|
||||||
if (check_value > 0 && check_value < 40)
|
if (check_value > 0 && check_value < 40)
|
||||||
|
@ -2646,11 +2645,17 @@ void CMipsMemoryVM::UpdateHalfLine (void)
|
||||||
}
|
}
|
||||||
g_SystemTimer->UpdateTimers();
|
g_SystemTimer->UpdateTimers();
|
||||||
NextViTimer = g_SystemTimer->GetTimer(CSystemTimer::ViTimer);
|
NextViTimer = g_SystemTimer->GetTimer(CSystemTimer::ViTimer);
|
||||||
m_HalfLine = (DWORD)(NextViTimer / g_System->ViRefreshRate());
|
|
||||||
m_HalfLine &= ~1;
|
|
||||||
}
|
}
|
||||||
|
m_HalfLine = (DWORD)(NextViTimer / g_System->ViRefreshRate());
|
||||||
|
m_HalfLine &= ~1;
|
||||||
|
m_HalfLine |= m_FieldSerration;
|
||||||
m_HalfLineCheck = NextViTimer;
|
m_HalfLineCheck = NextViTimer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMipsMemoryVM::UpdateFieldSerration (unsigned int interlaced)
|
||||||
|
{
|
||||||
|
m_FieldSerration ^= 1;
|
||||||
|
m_FieldSerration &= interlaced;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMipsMemoryVM::ProtectMemory( DWORD StartVaddr, DWORD EndVaddr )
|
void CMipsMemoryVM::ProtectMemory( DWORD StartVaddr, DWORD EndVaddr )
|
||||||
|
|
|
@ -57,6 +57,7 @@ public:
|
||||||
BOOL SD_PAddr ( DWORD PAddr, QWORD Value );
|
BOOL SD_PAddr ( DWORD PAddr, QWORD Value );
|
||||||
|
|
||||||
int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
|
int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
|
||||||
|
void UpdateFieldSerration (unsigned int interlaced);
|
||||||
|
|
||||||
//Protect the Memory from being written to
|
//Protect the Memory from being written to
|
||||||
void ProtectMemory ( DWORD StartVaddr, DWORD EndVaddr );
|
void ProtectMemory ( DWORD StartVaddr, DWORD EndVaddr );
|
||||||
|
@ -156,6 +157,7 @@ private:
|
||||||
void UpdateHalfLine ( void );
|
void UpdateHalfLine ( void );
|
||||||
DWORD m_HalfLine;
|
DWORD m_HalfLine;
|
||||||
DWORD m_HalfLineCheck;
|
DWORD m_HalfLineCheck;
|
||||||
|
DWORD m_FieldSerration;
|
||||||
DWORD m_TempValue;
|
DWORD m_TempValue;
|
||||||
|
|
||||||
//Initilizing and reseting information about the memory system
|
//Initilizing and reseting information about the memory system
|
||||||
|
|
|
@ -1797,6 +1797,8 @@ void CN64System::RefreshScreen ( void ) {
|
||||||
WriteTrace(TraceError,__FUNCTION__ ": Exception caught");
|
WriteTrace(TraceError,__FUNCTION__ ": Exception caught");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_MMU->UpdateFieldSerration((m_Reg.VI_STATUS_REG & 0x40) != 0);
|
||||||
|
|
||||||
if ((bBasicMode() || bLimitFPS() ) && !bSyncToAudio()) {
|
if ((bBasicMode() || bLimitFPS() ) && !bSyncToAudio()) {
|
||||||
if (bShowCPUPer()) { m_CPU_Usage.StartTimer(Timer_Idel); }
|
if (bShowCPUPer()) { m_CPU_Usage.StartTimer(Timer_Idel); }
|
||||||
DWORD FrameRate;
|
DWORD FrameRate;
|
||||||
|
|
Loading…
Reference in New Issue