diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index 4d2f8fef28..db048cf58b 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -45,7 +45,7 @@ SCoreStartupParameter::SCoreStartupParameter() bSkipIdle(true), bNTSC(false), bHLE_BS2(true), bUseFastMem(false), bLockThreads(false), - bEnableCheats(false), + bEnableCheats(false), bSMC(false), bRunCompareServer(false), bRunCompareClient(false), bMMU(false), iTLBHack(0), SelectedLanguage(0), bWii(false), bConfirmStop(false), bHideCursor(false), @@ -70,6 +70,7 @@ void SCoreStartupParameter::LoadDefaults() bLockThreads = true; bEnableFPRF = false; bMMU = false; + bSMC = false; iTLBHack = 0; SelectedLanguage = 0; bWii = false; diff --git a/Source/Core/Core/Src/CoreParameter.h b/Source/Core/Core/Src/CoreParameter.h index 4b45ee63cc..20132c5105 100644 --- a/Source/Core/Core/Src/CoreParameter.h +++ b/Source/Core/Core/Src/CoreParameter.h @@ -78,6 +78,7 @@ struct SCoreStartupParameter bool bRunCompareClient; bool bMMU; + bool bSMC; int iTLBHack; int SelectedLanguage; diff --git a/Source/Core/Core/Src/HW/MemmapFunctions.cpp b/Source/Core/Core/Src/HW/MemmapFunctions.cpp index 72f09f720b..213415a728 100644 --- a/Source/Core/Core/Src/HW/MemmapFunctions.cpp +++ b/Source/Core/Core/Src/HW/MemmapFunctions.cpp @@ -270,7 +270,7 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address, *(T*)&m_pRAM[em_address & RAM_MASK] = bswap(data); // Required for games with self modifying code (e.g. Monster House) - if (Core::g_CoreStartupParameter.bMMU) + if (Core::g_CoreStartupParameter.bSMC) Write_Opcode_JIT(em_address, 0x14141414); return; diff --git a/Source/Core/DolphinWX/Src/BootManager.cpp b/Source/Core/DolphinWX/Src/BootManager.cpp index 440494447f..2bbde55ee1 100644 --- a/Source/Core/DolphinWX/Src/BootManager.cpp +++ b/Source/Core/DolphinWX/Src/BootManager.cpp @@ -108,6 +108,7 @@ bool BootCore(const std::string& _rFilename) game_ini.Get("Core", "EnableFPRF", &StartUp.bEnableFPRF, StartUp.bEnableFPRF); game_ini.Get("Core", "TLBHack", &StartUp.iTLBHack, StartUp.iTLBHack); game_ini.Get("Core", "MMU", &StartUp.bMMU, StartUp.bMMU); + game_ini.Get("Core", "SMC", &StartUp.bSMC, StartUp.bSMC); // Wii settings if (StartUp.bWii) { diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index 400a0900e4..929d17f919 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -292,6 +292,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) SkipIdle = new wxCheckBox(m_GameConfig, ID_IDLESKIP, _("Enable Idle Skipping"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); MMU = new wxCheckBox(m_GameConfig, ID_MMU, _("Enable MMU"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); TLBHack = new wxCheckBox(m_GameConfig, ID_TLBHACK, _("MMU Speed Hack"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); + SMC = new wxCheckBox(m_GameConfig, ID_MMU, _("Enable self modifying code check"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); // Wii Console sbWiiOverrides = new wxStaticBoxSizer(wxVERTICAL, m_GameConfig, _("Wii Console")); EnableProgressiveScan = new wxCheckBox(m_GameConfig, ID_ENABLEPROGRESSIVESCAN, _("Enable Progressive Scan"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); @@ -349,6 +350,7 @@ void CISOProperties::CreateGUIControls(bool IsWad) sbCoreOverrides->Add(SkipIdle, 0, wxEXPAND|wxLEFT, 5); sbCoreOverrides->Add(MMU, 0, wxEXPAND|wxLEFT, 5); sbCoreOverrides->Add(TLBHack, 0, wxEXPAND|wxLEFT, 5); + sbCoreOverrides->Add(SMC, 0, wxEXPAND|wxLEFT, 5); sbWiiOverrides->Add(EnableProgressiveScan, 0, wxEXPAND|wxLEFT, 5); sbWiiOverrides->Add(EnableWideScreen, 0, wxEXPAND|wxLEFT, 5); sbVideoOverrides->Add(ForceFiltering, 0, wxEXPAND|wxLEFT, 5); @@ -821,6 +823,11 @@ void CISOProperties::LoadGameConfig() else TLBHack->Set3StateValue(wxCHK_UNDETERMINED); + if (GameIni.Get("Core", "SMC", &bTemp)) + SMC->Set3StateValue((wxCheckBoxState)bTemp); + else + SMC->Set3StateValue(wxCHK_UNDETERMINED); + if (GameIni.Get("Wii", "ProgressiveScan", &bTemp)) EnableProgressiveScan->Set3StateValue((wxCheckBoxState)bTemp); else @@ -907,6 +914,11 @@ bool CISOProperties::SaveGameConfig() else GameIni.Set("Core", "TLBHack", TLBHack->Get3StateValue()); + if (SMC->Get3StateValue() == wxCHK_UNDETERMINED) + GameIni.DeleteKey("Core", "SMC"); + else + GameIni.Set("Core", "SMC", SMC->Get3StateValue()); + if (EnableProgressiveScan->Get3StateValue() == wxCHK_UNDETERMINED) GameIni.DeleteKey("Wii", "ProgressiveScan"); else diff --git a/Source/Core/DolphinWX/Src/ISOProperties.h b/Source/Core/DolphinWX/Src/ISOProperties.h index 91600e5ba2..51c295614b 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.h +++ b/Source/Core/DolphinWX/Src/ISOProperties.h @@ -84,7 +84,7 @@ class CISOProperties : public wxDialog wxStaticText *OverrideText; // Core - wxCheckBox *CPUThread, *SkipIdle, *MMU, *TLBHack; + wxCheckBox *CPUThread, *SkipIdle, *MMU, *SMC, *TLBHack; // Wii wxCheckBox *EnableProgressiveScan, *EnableWideScreen; // Video @@ -166,6 +166,7 @@ class CISOProperties : public wxDialog ID_IDLESKIP, ID_MMU, ID_TLBHACK, + ID_SMC, ID_FORCEFILTERING, ID_EFBCOPYDISABLE, ID_EFBTOTEXTUREENABLE,