diff --git a/Source/Project64/N64 System/N64 Class.cpp b/Source/Project64/N64 System/N64 Class.cpp index 1478963f7..a3768b691 100644 --- a/Source/Project64/N64 System/N64 Class.cpp +++ b/Source/Project64/N64 System/N64 Class.cpp @@ -2014,18 +2014,18 @@ void CN64System::RefreshScreen() } 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); } - DWORD FrameRate; - if (m_Limitor.Timer_Process(&FrameRate) && bDisplayFrameRate()) + uint32_t FrameRate; + if (m_Limitor.Timer_Process(&FrameRate) && bDisplayFrameRate()) { m_FPS.DisplayViCounter(FrameRate); m_bCleanFrameBox = true; } } - else if (bDisplayFrameRate()) + else if (bDisplayFrameRate()) { if (bShowCPUPer()) { m_CPU_Usage.StartTimer(Timer_UpdateFPS); } m_FPS.UpdateViCounter(); diff --git a/Source/Project64/N64 System/Speed Limitor Class.cpp b/Source/Project64/N64 System/Speed Limitor Class.cpp index 5d61147dd..03b7fa13b 100644 --- a/Source/Project64/N64 System/Speed Limitor Class.cpp +++ b/Source/Project64/N64 System/Speed Limitor Class.cpp @@ -9,104 +9,116 @@ * * ****************************************************************************/ #include "stdafx.h" -#pragma comment(lib, "winmm.lib") +#include "Speed Limitor Class.h" +#include +#include +#include + +#pragma comment(lib, "winmm.lib") CSpeedLimitor::CSpeedLimitor() { - m_Frames = 0; - m_LastTime = 0; - m_Speed = 60; - m_BaseSpeed = 60; - m_Ratio = 1000.0F / (float)m_Speed; + m_Frames = 0; + m_LastTime = 0; + m_Speed = 60; + m_BaseSpeed = 60; + m_Ratio = 1000.0F / (float)m_Speed; - TIMECAPS Caps; - timeGetDevCaps(&Caps, sizeof(Caps)); - if (timeBeginPeriod(Caps.wPeriodMin) == TIMERR_NOCANDO) { - g_Notify->DisplayError(L"Error during timer begin"); - } + TIMECAPS Caps; + timeGetDevCaps(&Caps, sizeof(Caps)); + if (timeBeginPeriod(Caps.wPeriodMin) == TIMERR_NOCANDO) + { + g_Notify->DisplayError(L"Error during timer begin"); + } } CSpeedLimitor::~CSpeedLimitor() { - TIMECAPS Caps; - timeGetDevCaps(&Caps, sizeof(Caps)); - timeEndPeriod(Caps.wPeriodMin); + TIMECAPS Caps; + timeGetDevCaps(&Caps, sizeof(Caps)); + timeEndPeriod(Caps.wPeriodMin); } -void CSpeedLimitor::SetHertz(DWORD Hertz) +void CSpeedLimitor::SetHertz(uint32_t Hertz) { - m_Speed = Hertz; - m_BaseSpeed = Hertz; - FixSpeedRatio(); + m_Speed = Hertz; + m_BaseSpeed = Hertz; + FixSpeedRatio(); } void CSpeedLimitor::FixSpeedRatio() { - m_Ratio = 1000.0f / static_cast(m_Speed); - m_Frames = 0; - m_LastTime = timeGetTime(); + m_Ratio = 1000.0f / static_cast(m_Speed); + m_Frames = 0; + m_LastTime = timeGetTime(); } -bool CSpeedLimitor::Timer_Process (DWORD * FrameRate ) { - m_Frames += 1; - DWORD CurrentTime = timeGetTime(); - - /* Calculate time that should of elapsed for this frame */ - double CalculatedTime = (double)m_LastTime + (m_Ratio * (double)m_Frames); - if ((double)CurrentTime < CalculatedTime) { - long time = (int)(CalculatedTime - (double)CurrentTime); - if (time > 0) { - Sleep(time); - } +bool CSpeedLimitor::Timer_Process(uint32_t * FrameRate) +{ + m_Frames += 1; + uint32_t CurrentTime = timeGetTime(); - /* Refresh current time */ - CurrentTime = timeGetTime(); - } + /* Calculate time that should of elapsed for this frame */ + double CalculatedTime = (double)m_LastTime + (m_Ratio * (double)m_Frames); + if ((double)CurrentTime < CalculatedTime) + { + int32_t time = (int)(CalculatedTime - (double)CurrentTime); + if (time > 0) + { + pjutil::Sleep(time); + } - if (CurrentTime - m_LastTime >= 1000) { - /* Output FPS */ - if (FrameRate != NULL) { *FrameRate = m_Frames; } - m_Frames = 0; - m_LastTime = CurrentTime; + /* Refresh current time */ + CurrentTime = timeGetTime(); + } - return true; - } else { - return false; - } + if (CurrentTime - m_LastTime >= 1000) + { + /* Output FPS */ + if (FrameRate != NULL) { *FrameRate = m_Frames; } + m_Frames = 0; + m_LastTime = CurrentTime; + + return true; + } + else + { + return false; + } } void CSpeedLimitor::IncreaseSpeed() { - if (m_Speed >= 60) - { - m_Speed += 10; - } - else if (m_Speed >= 15) - { - m_Speed += 5; - } - else - { - m_Speed += 1; - } - SpeedChanged(m_Speed); - FixSpeedRatio(); + if (m_Speed >= 60) + { + m_Speed += 10; + } + else if (m_Speed >= 15) + { + m_Speed += 5; + } + else + { + m_Speed += 1; + } + SpeedChanged(m_Speed); + FixSpeedRatio(); } void CSpeedLimitor::DecreaseSpeed() { - if (m_Speed > 60) - { - m_Speed -= 10; - } - else if (m_Speed > 15) - { - m_Speed -= 5; - } - else if (m_Speed > 1) - { - m_Speed -= 1; - } - SpeedChanged(m_Speed); - FixSpeedRatio(); + if (m_Speed > 60) + { + m_Speed -= 10; + } + else if (m_Speed > 15) + { + m_Speed -= 5; + } + else if (m_Speed > 1) + { + m_Speed -= 1; + } + SpeedChanged(m_Speed); + FixSpeedRatio(); } diff --git a/Source/Project64/N64 System/Speed Limitor Class.h b/Source/Project64/N64 System/Speed Limitor Class.h index 42cd3fd21..301d8221f 100644 --- a/Source/Project64/N64 System/Speed Limitor Class.h +++ b/Source/Project64/N64 System/Speed Limitor Class.h @@ -11,23 +11,23 @@ #pragma once class CSpeedLimitor : - private CGameSettings -{ + private CGameSettings +{ public: - CSpeedLimitor(); - ~CSpeedLimitor(); + CSpeedLimitor(); + ~CSpeedLimitor(); - void SetHertz(const DWORD Hertz); - bool Timer_Process(DWORD* const FrameRate); - void IncreaseSpeed(); - void DecreaseSpeed(); + void SetHertz(const uint32_t Hertz); + bool Timer_Process(uint32_t* const FrameRate); + void IncreaseSpeed(); + void DecreaseSpeed(); private: - CSpeedLimitor(const CSpeedLimitor&); // Disable copy constructor - CSpeedLimitor& operator=(const CSpeedLimitor&); // Disable assignment + CSpeedLimitor(const CSpeedLimitor&); // Disable copy constructor + CSpeedLimitor& operator=(const CSpeedLimitor&); // Disable assignment - void FixSpeedRatio(); + void FixSpeedRatio(); - DWORD m_Speed, m_BaseSpeed, m_Frames, m_LastTime; - double m_Ratio; + uint32_t m_Speed, m_BaseSpeed, m_Frames, m_LastTime; + double m_Ratio; };