diff options
| author | NeoBrainX <NeoBrainX@googlemail.com> | 2011-02-12 21:29:51 +0000 |
|---|---|---|
| committer | NeoBrainX <NeoBrainX@googlemail.com> | 2011-02-12 21:29:51 +0000 |
| commit | ced7336d27fcf63d3f569d4517f4f418e2d6236e (patch) | |
| tree | 1d989b3cf6e6b735b427d02a75daee8a756bbe11 /Source/Core | |
| parent | bc6f04adae92648e94f334ebf61fcdbcba249ccc (diff) | |
wx-less: This time WITH the files of awesomeness!
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7153 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/BootManager.cpp | 159 | ||||
| -rw-r--r-- | Source/Core/Core/Src/BootManager.h | 32 |
2 files changed, 191 insertions, 0 deletions
diff --git a/Source/Core/Core/Src/BootManager.cpp b/Source/Core/Core/Src/BootManager.cpp new file mode 100644 index 0000000000..6b96347fc7 --- /dev/null +++ b/Source/Core/Core/Src/BootManager.cpp @@ -0,0 +1,159 @@ +// Copyright (C) 2003 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+// File description
+// -------------
+// Purpose of this file: Collect boot settings for Core::Init()
+
+// Call sequence: This file has one of the first function called when a game is booted,
+// the boot sequence in the code is:
+
+// DolphinWX: GameListCtrl.cpp OnActivated
+// BootManager.cpp BootCore
+// Core Core.cpp Init Thread creation
+// EmuThread Calls CBoot::BootUp
+// Boot.cpp CBoot::BootUp()
+// CBoot::EmulatedBS2_Wii() / GC() or Load_BS2()
+
+
+// Includes
+// ----------------
+#include <string>
+#include <vector>
+
+#include "Common.h"
+#include "IniFile.h"
+#include "BootManager.h"
+#include "Volume.h"
+#include "VolumeCreator.h"
+#include "ConfigManager.h"
+#include "SysConf.h"
+#include "Core.h"
+#include "Host.h"
+
+
+namespace BootManager
+{
+
+// TODO this is an ugly hack which allows us to restore values trampled by per-game settings
+// Apply fire liberally
+struct ConfigCache
+{
+ bool valid, bCPUThread, bSkipIdle, bEnableFPRF, bMMU, bMMUBAT,
+ bVBeam, bFastDiscSpeed, bMergeBlocks, bDSPHLE;
+ int iTLBHack;
+};
+static ConfigCache config_cache;
+
+// Boot the ISO or file
+bool BootCore(const std::string& _rFilename)
+{
+ SCoreStartupParameter& StartUp = SConfig::GetInstance().m_LocalCoreStartupParameter;
+
+ // Use custom settings for debugging mode
+ Host_SetStartupDebuggingParameters();
+
+ StartUp.m_BootType = SCoreStartupParameter::BOOT_ISO;
+ StartUp.m_strFilename = _rFilename;
+ SConfig::GetInstance().m_LastFilename = _rFilename;
+ StartUp.bRunCompareClient = false;
+ StartUp.bRunCompareServer = false;
+
+ StartUp.hInstance = Host_GetInstance();
+ #if defined(_WIN32) && defined(_M_X64)
+ StartUp.bUseFastMem = true;
+ #endif
+
+ // If for example the ISO file is bad we return here
+ if (!StartUp.AutoSetup(SCoreStartupParameter::BOOT_DEFAULT)) return false;
+
+ // Load game specific settings
+ IniFile game_ini;
+ std::string unique_id = StartUp.GetUniqueID();
+ StartUp.m_strGameIni = std::string(File::GetUserPath(D_GAMECONFIG_IDX)) + unique_id + ".ini";
+ if (unique_id.size() == 6 && game_ini.Load(StartUp.m_strGameIni.c_str()))
+ {
+ config_cache.valid = true;
+ config_cache.bCPUThread = StartUp.bCPUThread;
+ config_cache.bSkipIdle = StartUp.bSkipIdle;
+ config_cache.bEnableFPRF = StartUp.bEnableFPRF;
+ config_cache.bMMU = StartUp.bMMU;
+ config_cache.bMMUBAT = StartUp.bMMUBAT;
+ config_cache.iTLBHack = StartUp.iTLBHack;
+ config_cache.bVBeam = StartUp.bVBeam;
+ config_cache.bFastDiscSpeed = StartUp.bFastDiscSpeed;
+ config_cache.bMergeBlocks = StartUp.bMergeBlocks;
+ config_cache.bDSPHLE = StartUp.bDSPHLE;
+
+ // General settings
+ game_ini.Get("Core", "CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread);
+ game_ini.Get("Core", "SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle);
+ game_ini.Get("Core", "EnableFPRF", &StartUp.bEnableFPRF, StartUp.bEnableFPRF);
+ 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", "VBeam", &StartUp.bVBeam, StartUp.bVBeam);
+ game_ini.Get("Core", "FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed);
+ game_ini.Get("Core", "BlockMerging", &StartUp.bMergeBlocks, StartUp.bMergeBlocks);
+ game_ini.Get("Core", "DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE);
+
+ // Wii settings
+ if (StartUp.bWii)
+ {
+ // Flush possible changes to SYSCONF to file
+ SConfig::GetInstance().m_SYSCONF->Save();
+ }
+ }
+
+ // Run the game
+ StartUp.hMainWindow = Host_GetRenderHandle();
+ // Init the core
+ if (!Core::Init())
+ {
+ PanicAlertT("Couldn't init the core.\nCheck your configuration.");
+ return false;
+ }
+
+ // Boot to pause or not
+ Core::SetState(StartUp.bBootToPause ? Core::CORE_PAUSE : Core::CORE_RUN);
+
+ return true;
+}
+
+void Stop()
+{
+ Core::Stop();
+
+ SCoreStartupParameter& StartUp = SConfig::GetInstance().m_LocalCoreStartupParameter;
+
+ if (config_cache.valid)
+ {
+ config_cache.valid = false;
+ StartUp.bCPUThread = config_cache.bCPUThread;
+ StartUp.bSkipIdle = config_cache.bSkipIdle;
+ StartUp.bEnableFPRF = config_cache.bEnableFPRF;
+ StartUp.bMMU = config_cache.bMMU;
+ StartUp.bMMUBAT = config_cache.bMMUBAT;
+ StartUp.iTLBHack = config_cache.iTLBHack;
+ StartUp.bVBeam = config_cache.bVBeam;
+ StartUp.bFastDiscSpeed = config_cache.bFastDiscSpeed;
+ StartUp.bMergeBlocks = config_cache.bMergeBlocks;
+ StartUp.bDSPHLE = config_cache.bDSPHLE;
+ }
+}
+
+} // namespace
diff --git a/Source/Core/Core/Src/BootManager.h b/Source/Core/Core/Src/BootManager.h new file mode 100644 index 0000000000..fd2738e3a2 --- /dev/null +++ b/Source/Core/Core/Src/BootManager.h @@ -0,0 +1,32 @@ +// Copyright (C) 2003 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#ifndef _BOOTMANAGER_H
+#define _BOOTMANAGER_H
+
+#include <string>
+
+class GameListItem;
+
+namespace BootManager
+{
+bool BootCore(const std::string& _rFilename);
+
+void Stop();
+};
+
+#endif
|
