Index: Source/Core/Core/Src/ConfigManager.cpp =================================================================== --- Source/Core/Core/Src/ConfigManager.cpp (revision 3623) +++ Source/Core/Core/Src/ConfigManager.cpp (working copy) @@ -121,6 +121,7 @@ ini.Set("Core", "RunCompareServer", m_LocalCoreStartupParameter.bRunCompareServer); ini.Set("Core", "RunCompareClient", m_LocalCoreStartupParameter.bRunCompareClient); ini.Set("Core", "FrameLimit", m_Framelimit); + ini.Set("Core", "Watchdog", m_Watchdog); // Wii ini.Set("Wii", "Widescreen", m_LocalCoreStartupParameter.bWidescreen); @@ -238,6 +239,7 @@ ini.Get("Core", "RunCompareClient", &m_LocalCoreStartupParameter.bRunCompareClient, false); ini.Get("Core", "TLBHack", &m_LocalCoreStartupParameter.iTLBHack, 0); ini.Get("Core", "FrameLimit", &m_Framelimit,0); + ini.Get("Core", "Watchdog", &m_Watchdog,0); // Wii ini.Get("Wii", "Widescreen", &m_LocalCoreStartupParameter.bWidescreen, false); Index: Source/Core/Core/Src/ConfigManager.h =================================================================== --- Source/Core/Core/Src/ConfigManager.h (revision 3623) +++ Source/Core/Core/Src/ConfigManager.h (working copy) @@ -67,6 +67,7 @@ INTERFACE_LANGUAGE m_InterfaceLanguage; // framelimit choose u32 m_Framelimit; + u32 m_Watchdog; // other interface settings bool m_InterfaceToolbar; bool m_InterfaceStatusbar; Index: Source/Core/Core/Src/HW/SystemTimers.cpp =================================================================== --- Source/Core/Core/Src/HW/SystemTimers.cpp (revision 3623) +++ Source/Core/Core/Src/HW/SystemTimers.cpp (working copy) @@ -76,6 +76,7 @@ #include "../IPC_HLE/WII_IPC_HLE.h" #include "Thread.h" #include "Timer.h" +#include "../ConfigManager.h" ///////////////////////////// @@ -232,7 +233,10 @@ void Init() { - FAKE_GP_WATCHDOG_PERIOD = GetTicksPerSecond() / 60; + u32 targetWatchDog = (SConfig::GetInstance().m_Watchdog)*5; + if ( targetWatchDog == 0 ) + targetWatchDog = 1; + FAKE_GP_WATCHDOG_PERIOD = GetTicksPerSecond() / targetWatchDog; if (Core::GetStartupParameter().bWii) { CPU_CORE_CLOCK = 729000000u; Index: Source/Core/DolphinWX/Src/ConfigMain.cpp =================================================================== --- Source/Core/DolphinWX/Src/ConfigMain.cpp (revision 3623) +++ Source/Core/DolphinWX/Src/ConfigMain.cpp (working copy) @@ -55,6 +55,7 @@ EVT_CHECKBOX(ID_IDLESKIP, CConfigMain::CoreSettingsChanged) EVT_CHECKBOX(ID_ENABLECHEATS, CConfigMain::CoreSettingsChanged) EVT_CHOICE(ID_FRAMELIMIT, CConfigMain::CoreSettingsChanged) +EVT_CHOICE(ID_WATCHDOG, CConfigMain::CoreSettingsChanged) EVT_CHOICE(ID_GC_SRAM_LNG, CConfigMain::GCSettingsChanged) EVT_CHOICE(ID_GC_EXIDEVICE_SLOTA, CConfigMain::GCSettingsChanged) @@ -187,6 +188,20 @@ arrayStringFor_Framelimit.Add(wxT("50")); arrayStringFor_Framelimit.Add(wxT("55")); arrayStringFor_Framelimit.Add(wxT("60")); + // WatchDog + arrayStringFor_Watchdog.Add(wxT("1")); + arrayStringFor_Watchdog.Add(wxT("5")); + arrayStringFor_Watchdog.Add(wxT("10")); + arrayStringFor_Watchdog.Add(wxT("15")); + arrayStringFor_Watchdog.Add(wxT("20")); + arrayStringFor_Watchdog.Add(wxT("25")); + arrayStringFor_Watchdog.Add(wxT("30")); + arrayStringFor_Watchdog.Add(wxT("35")); + arrayStringFor_Watchdog.Add(wxT("40")); + arrayStringFor_Watchdog.Add(wxT("45")); + arrayStringFor_Watchdog.Add(wxT("50")); + arrayStringFor_Watchdog.Add(wxT("55")); + arrayStringFor_Watchdog.Add(wxT("60")); // Create the notebook and pages Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); @@ -261,6 +276,12 @@ Framelimit = new wxChoice(GeneralPage, ID_FRAMELIMIT, wxDefaultPosition, wxDefaultSize, arrayStringFor_Framelimit, 0, wxDefaultValidator); Framelimit->SetSelection(SConfig::GetInstance().m_Framelimit); + // Choose Watchdog + wxStaticText *WatchdogText = new wxStaticText(GeneralPage, ID_WATCHDOG_TEXT, wxT("Watchdog:"), wxDefaultPosition, wxDefaultSize); + Watchdog = new wxChoice(GeneralPage, ID_WATCHDOG, wxDefaultPosition, wxDefaultSize, arrayStringFor_Watchdog, 0, wxDefaultValidator); + Watchdog->SetSelection(SConfig::GetInstance().m_Watchdog); + + // Themes wxArrayString ThemeChoices; ThemeChoices.Add(wxT("Boomy")); @@ -335,6 +356,10 @@ sFramelimit->Add(FramelimitText, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); sFramelimit->Add(Framelimit, 0, wxEXPAND | wxALL, 5); sbInterface->Add(sFramelimit, 0, wxEXPAND | wxALL, 5); + wxBoxSizer *sWatchdog = new wxBoxSizer(wxHORIZONTAL); + sFramelimit->Add(WatchdogText, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); + sFramelimit->Add(Watchdog, 0, wxEXPAND | wxALL, 5); + sbInterface->Add(sWatchdog, 0, wxEXPAND | wxALL, 5); // Populate the entire page sGeneralPage = new wxBoxSizer(wxVERTICAL); @@ -658,6 +683,9 @@ case ID_FRAMELIMIT: SConfig::GetInstance().m_Framelimit = (u32)Framelimit->GetSelection(); break; + case ID_WATCHDOG: + SConfig::GetInstance().m_Watchdog = (u32)Watchdog->GetSelection(); + break; case ID_ALLWAYS_HLEBIOS: // Core SConfig::GetInstance().m_LocalCoreStartupParameter.bHLEBios = AlwaysUseHLEBIOS->IsChecked(); break; Index: Source/Core/DolphinWX/Src/ConfigMain.h =================================================================== --- Source/Core/DolphinWX/Src/ConfigMain.h (revision 3623) +++ Source/Core/DolphinWX/Src/ConfigMain.h (working copy) @@ -59,6 +59,9 @@ wxArrayString arrayStringFor_Framelimit; wxChoice* Framelimit; + wxArrayString arrayStringFor_Watchdog; + wxChoice* Watchdog; + wxRadioBox* Theme; wxBoxSizer* sCore; @@ -230,6 +233,7 @@ ID_INTERFACE_LANG_TEXT, ID_INTERFACE_LANG, ID_INTERFACE_THEME, ID_FRAMELIMIT_TEXT, ID_FRAMELIMIT, + ID_WATCHDOG_TEXT, ID_WATCHDOG, ID_GC_SRAM_LNG_TEXT, ID_GC_SRAM_LNG,