From 12249296a1815d04d5353dd99d1c8ac7173546e4 Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 20 Jan 2011 08:34:49 +0000 Subject: [PATCH] Added an option in the game properties to disable the VBeam speed hack. This option may fix games which currently have an unusual FPS rate. For example, this option fixes the crackly audio in Tales of Symphonia. Leave this option turned off unless you're noticing problems related to the FPS rate because it might slow down the emulator. Removed the Alternate RFI option as it is no longer needed. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6888 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/ConfigManager.cpp | 2 +- Source/Core/Core/Src/CoreParameter.cpp | 4 ++-- Source/Core/Core/Src/CoreParameter.h | 2 +- Source/Core/Core/Src/HW/VideoInterface.cpp | 2 +- Source/Core/Core/Src/LuaInterface.cpp | 2 +- .../Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp | 5 +---- .../Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp | 5 +---- Source/Core/DolphinWX/Src/BootManager.cpp | 8 ++++---- Source/Core/DolphinWX/Src/ISOProperties.cpp | 18 +++++++++--------- Source/Core/DolphinWX/Src/ISOProperties.h | 2 +- 10 files changed, 22 insertions(+), 28 deletions(-) diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index b3767709e6..66828dab8d 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -308,7 +308,7 @@ void SConfig::LoadSettings() ini.Get("Core", "RunCompareClient", &m_LocalCoreStartupParameter.bRunCompareClient, false); ini.Get("Core", "MMU", &m_LocalCoreStartupParameter.bMMU, false); ini.Get("Core", "TLBHack", &m_LocalCoreStartupParameter.iTLBHack, 0); - ini.Get("Core", "AlternateRFI", &m_LocalCoreStartupParameter.bAlternateRFI, false); + ini.Get("Core", "VBeam", &m_LocalCoreStartupParameter.bVBeam, false); ini.Get("Core", "FastDiscSpeed", &m_LocalCoreStartupParameter.bFastDiscSpeed, false); ini.Get("Core", "BAT", &m_LocalCoreStartupParameter.bMMUBAT, false); ini.Get("Core", "FrameLimit", &m_Framelimit, 1); // auto frame limit by default diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index c0c77e9447..90dce8c4e3 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -49,7 +49,7 @@ SCoreStartupParameter::SCoreStartupParameter() bEnableCheats(false), bMergeBlocks(false), bRunCompareServer(false), bRunCompareClient(false), - bMMU(false), bMMUBAT(false), iTLBHack(0), bAlternateRFI(false), + bMMU(false), bMMUBAT(false), iTLBHack(0), bVBeam(false), bFastDiscSpeed(false), SelectedLanguage(0), bWii(false), bConfirmStop(false), bHideCursor(false), @@ -77,7 +77,7 @@ void SCoreStartupParameter::LoadDefaults() bMMU = false; bMMUBAT = false; iTLBHack = 0; - bAlternateRFI = false; + bVBeam = false; bFastDiscSpeed = false; bMergeBlocks = false; SelectedLanguage = 0; diff --git a/Source/Core/Core/Src/CoreParameter.h b/Source/Core/Core/Src/CoreParameter.h index daa9e971fc..98b103dde6 100644 --- a/Source/Core/Core/Src/CoreParameter.h +++ b/Source/Core/Core/Src/CoreParameter.h @@ -84,7 +84,7 @@ struct SCoreStartupParameter bool bMMU; bool bMMUBAT; int iTLBHack; - bool bAlternateRFI; + bool bVBeam; bool bFastDiscSpeed; int SelectedLanguage; diff --git a/Source/Core/Core/Src/HW/VideoInterface.cpp b/Source/Core/Core/Src/HW/VideoInterface.cpp index d3598a7d4b..d0987c9ff4 100644 --- a/Source/Core/Core/Src/HW/VideoInterface.cpp +++ b/Source/Core/Core/Src/HW/VideoInterface.cpp @@ -832,7 +832,7 @@ void Update() } if (++m_VBeamPos > s_lineCount) - m_VBeamPos = (NewVBeamPos > s_lineCount) ? 1 : NewVBeamPos; + m_VBeamPos = (NewVBeamPos > s_lineCount || Core::g_CoreStartupParameter.bVBeam) ? 1 : NewVBeamPos; for (int i = 0; i < 4; i++) { diff --git a/Source/Core/Core/Src/LuaInterface.cpp b/Source/Core/Core/Src/LuaInterface.cpp index 09e82560da..ef3aa960d7 100644 --- a/Source/Core/Core/Src/LuaInterface.cpp +++ b/Source/Core/Core/Src/LuaInterface.cpp @@ -2800,7 +2800,7 @@ DEFINE_LUA_FUNCTION(emulua_loadrom, "filename") game_ini.Get("Core", "MMU", &StartUp.bMMU, StartUp.bMMU); game_ini.Get("Core", "BAT", &StartUp.bMMUBAT, StartUp.bMMUBAT); game_ini.Get("Core", "TLBHack", &StartUp.iTLBHack, StartUp.iTLBHack); - game_ini.Get("Core", "AlternateRFI", &StartUp.bAlternateRFI, StartUp.bAlternateRFI); + game_ini.Get("Core", "VBeam", &StartUp.bVBeam, StartUp.bVBeam); game_ini.Get("Core", "FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); // Wii settings if (StartUp.bWii) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp index 34f9839d6f..12c47fd41a 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp @@ -70,10 +70,7 @@ void Jit64::rfi(UGeckoInstruction inst) OR(32, M(&MSR), R(EAX)); // NPC = SRR0; MOV(32, R(EAX), M(&SRR0)); - if (Core::g_CoreStartupParameter.bAlternateRFI) - WriteExitDestInEAX(); - else - WriteRfiExitDestInEAX(); + WriteRfiExitDestInEAX(); } void Jit64::bx(UGeckoInstruction inst) diff --git a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp index 7af2405488..987b1561db 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64IL/IR_X86.cpp @@ -1859,10 +1859,7 @@ static void DoWriteCode(IRBuilder* ibuild, JitIL* Jit, bool UseProfile, bool Mak Jit->MOV(32, M(&MSR), R(EAX)); // NPC = SRR0; Jit->MOV(32, R(EAX), M(&SRR0)); - if (SConfig::GetInstance().m_LocalCoreStartupParameter.bAlternateRFI) - Jit->WriteExitDestInOpArg(R(EAX)); - else - Jit->WriteRfiExitDestInOpArg(R(EAX)); + Jit->WriteRfiExitDestInOpArg(R(EAX)); break; } case FPExceptionCheckStart: { diff --git a/Source/Core/DolphinWX/Src/BootManager.cpp b/Source/Core/DolphinWX/Src/BootManager.cpp index 84cc702011..8fe421eb0a 100644 --- a/Source/Core/DolphinWX/Src/BootManager.cpp +++ b/Source/Core/DolphinWX/Src/BootManager.cpp @@ -68,7 +68,7 @@ namespace BootManager struct ConfigCache { bool valid, bCPUThread, bSkipIdle, bEnableFPRF, bMMU, bMMUBAT, - bAlternateRFI, bFastDiscSpeed, bMergeBlocks; + bVBeam, bFastDiscSpeed, bMergeBlocks; int iTLBHack; }; static ConfigCache config_cache; @@ -119,7 +119,7 @@ bool BootCore(const std::string& _rFilename) config_cache.bMMU = StartUp.bMMU; config_cache.bMMUBAT = StartUp.bMMUBAT; config_cache.iTLBHack = StartUp.iTLBHack; - config_cache.bAlternateRFI = StartUp.bAlternateRFI; + config_cache.bVBeam = StartUp.bVBeam; config_cache.bFastDiscSpeed = StartUp.bFastDiscSpeed; config_cache.bMergeBlocks = StartUp.bMergeBlocks; // General settings @@ -129,7 +129,7 @@ bool BootCore(const std::string& _rFilename) game_ini.Get("Core", "MMU", &StartUp.bMMU, StartUp.bMMU); game_ini.Get("Core", "BAT", &StartUp.bMMUBAT, StartUp.bMMUBAT); game_ini.Get("Core", "TLBHack", &StartUp.iTLBHack, StartUp.iTLBHack); - game_ini.Get("Core", "AlternateRFI", &StartUp.bAlternateRFI, StartUp.bAlternateRFI); + game_ini.Get("Core", "VBeam", &StartUp.bVBeam, StartUp.bVBeam); game_ini.Get("Core", "FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); game_ini.Get("Core", "BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks); // Wii settings @@ -180,7 +180,7 @@ void Stop() StartUp.bMMU = config_cache.bMMU; StartUp.bMMUBAT = config_cache.bMMUBAT; StartUp.iTLBHack = config_cache.iTLBHack; - StartUp.bAlternateRFI = config_cache.bAlternateRFI; + StartUp.bVBeam = config_cache.bVBeam; StartUp.bFastDiscSpeed = config_cache.bFastDiscSpeed; StartUp.bMergeBlocks = config_cache.bMergeBlocks; } diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index bd33ab755e..091632f966 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -310,8 +310,8 @@ void CISOProperties::CreateGUIControls(bool IsWad) MMUBAT->SetToolTip(_("Enables Block Address Translation (BAT); a function of the Memory Management Unit. Accurate to the hardware, but slow to emulate. (ON = Compatible, OFF = Fast)")); TLBHack = new wxCheckBox(m_GameConfig, ID_TLBHACK, _("MMU Speed Hack"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); TLBHack->SetToolTip(_("Fast version of the MMU. Does not work for every game.")); - AlternateRFI = new wxCheckBox(m_GameConfig, ID_RFI, _("Alternate RFI"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); - AlternateRFI->SetToolTip(_("If a game hangs, works only in the Interpreter or Dolphin crashes, this option may fix the game.")); + VBeam = new wxCheckBox(m_GameConfig, ID_RFI, _("Disable VBeam Speed Hack"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); + VBeam->SetToolTip(_("If the FPS is erratic, this option may help. (ON = Compatible, OFF = Fast)")); FastDiscSpeed = new wxCheckBox(m_GameConfig, ID_DISCSPEED, _("Speed up Disc Transfer Rate"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); FastDiscSpeed->SetToolTip(_("Enable fast disc access. Needed for a few games. (ON = Fast, OFF = Compatible)")); BlockMerging = new wxCheckBox(m_GameConfig, ID_MERGEBLOCKS, _("Enable Block Merging"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); @@ -375,7 +375,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sbCoreOverrides->Add(MMU, 0, wxEXPAND|wxLEFT, 5); sbCoreOverrides->Add(MMUBAT, 0, wxEXPAND|wxLEFT, 5); sbCoreOverrides->Add(TLBHack, 0, wxEXPAND|wxLEFT, 5); - sbCoreOverrides->Add(AlternateRFI, 0, wxEXPAND|wxLEFT, 5); + sbCoreOverrides->Add(VBeam, 0, wxEXPAND|wxLEFT, 5); sbCoreOverrides->Add(FastDiscSpeed, 0, wxEXPAND|wxLEFT, 5); sbCoreOverrides->Add(BlockMerging, 0, wxEXPAND|wxLEFT, 5); sbWiiOverrides->Add(EnableProgressiveScan, 0, wxEXPAND|wxLEFT, 5); @@ -843,10 +843,10 @@ void CISOProperties::LoadGameConfig() else TLBHack->Set3StateValue(wxCHK_UNDETERMINED); - if (GameIni.Get("Core", "AlternateRFI", &bTemp)) - AlternateRFI->Set3StateValue((wxCheckBoxState)bTemp); + if (GameIni.Get("Core", "VBeam", &bTemp)) + VBeam->Set3StateValue((wxCheckBoxState)bTemp); else - AlternateRFI->Set3StateValue(wxCHK_UNDETERMINED); + VBeam->Set3StateValue(wxCHK_UNDETERMINED); if (GameIni.Get("Core", "FastDiscSpeed", &bTemp)) FastDiscSpeed->Set3StateValue((wxCheckBoxState)bTemp); @@ -959,10 +959,10 @@ bool CISOProperties::SaveGameConfig() else GameIni.Set("Core", "TLBHack", TLBHack->Get3StateValue()); - if (AlternateRFI->Get3StateValue() == wxCHK_UNDETERMINED) - GameIni.DeleteKey("Core", "AlternateRFI"); + if (VBeam->Get3StateValue() == wxCHK_UNDETERMINED) + GameIni.DeleteKey("Core", "VBeam"); else - GameIni.Set("Core", "AlternateRFI", AlternateRFI->Get3StateValue()); + GameIni.Set("Core", "VBeam", VBeam->Get3StateValue()); if (FastDiscSpeed->Get3StateValue() == wxCHK_UNDETERMINED) GameIni.DeleteKey("Core", "FastDiscSpeed"); diff --git a/Source/Core/DolphinWX/Src/ISOProperties.h b/Source/Core/DolphinWX/Src/ISOProperties.h index 98de6ef5b2..547e52b739 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.h +++ b/Source/Core/DolphinWX/Src/ISOProperties.h @@ -85,7 +85,7 @@ class CISOProperties : public wxDialog wxStaticText *OverrideText; // Core wxCheckBox *CPUThread, *SkipIdle, *MMU, *MMUBAT, *TLBHack; - wxCheckBox *AlternateRFI, *FastDiscSpeed, *BlockMerging; + wxCheckBox *VBeam, *FastDiscSpeed, *BlockMerging; // Wii wxCheckBox *EnableProgressiveScan, *EnableWideScreen; // Video