Do not try to change default config, use state configs.

This commit is contained in:
O1L 2015-10-24 22:48:07 +04:00
parent a273768c4d
commit 1673ba217c
7 changed files with 39 additions and 37 deletions

View file

@ -3,6 +3,7 @@
#include "Utilities/Log.h" #include "Utilities/Log.h"
#include "Emu/Memory/Memory.h" #include "Emu/Memory/Memory.h"
#include "Emu/System.h" #include "Emu/System.h"
#include "Emu/state.h"
#include "Emu/IdManager.h" #include "Emu/IdManager.h"
#include "Emu/ARMv7/PSVFuncList.h" #include "Emu/ARMv7/PSVFuncList.h"
@ -179,14 +180,14 @@ void ARMv7Thread::do_run()
{ {
m_dec.reset(); m_dec.reset();
switch(Ini.CPUDecoderMode.GetValue()) switch((int)rpcs3::state.config.core.ppu_decoder.value())
{ {
case 0: case 0:
case 1: case 1:
m_dec.reset(new ARMv7Decoder(*this)); m_dec.reset(new ARMv7Decoder(*this));
break; break;
default: default:
LOG_ERROR(ARMv7, "Invalid CPU decoder mode: %d", Ini.CPUDecoderMode.GetValue()); LOG_ERROR(ARMv7, "Invalid CPU decoder mode: %d", (int)rpcs3::state.config.core.ppu_decoder.value());
Emu.Pause(); Emu.Pause();
} }
} }

View file

@ -3,6 +3,7 @@
#include "Utilities/Log.h" #include "Utilities/Log.h"
#include "Emu/Memory/Memory.h" #include "Emu/Memory/Memory.h"
#include "Emu/System.h" #include "Emu/System.h"
#include "Emu/state.h"
#include "Emu/IdManager.h" #include "Emu/IdManager.h"
#include "Emu/Cell/PPUThread.h" #include "Emu/Cell/PPUThread.h"
#include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUDecoder.h"
@ -143,20 +144,20 @@ void PPUThread::do_run()
{ {
m_dec.reset(); m_dec.reset();
switch (auto mode = Ini.CPUDecoderMode.GetValue()) switch (auto mode = rpcs3::state.config.core.ppu_decoder.value())
{ {
case 0: // original interpreter case ppu_decoder_type::interpreter: // original interpreter
{ {
m_dec.reset(new PPUDecoder(new PPUInterpreter(*this))); m_dec.reset(new PPUDecoder(new PPUInterpreter(*this)));
break; break;
} }
case 1: // alternative interpreter case ppu_decoder_type::interpreter2: // alternative interpreter
{ {
break; break;
} }
case 2: case ppu_decoder_type::recompiler_llvm:
{ {
#ifdef PPU_LLVM_RECOMPILER #ifdef PPU_LLVM_RECOMPILER
m_dec.reset(new ppu_recompiler_llvm::CPUHybridDecoderRecompiler(*this)); m_dec.reset(new ppu_recompiler_llvm::CPUHybridDecoderRecompiler(*this));

View file

@ -3,6 +3,7 @@
#include "Utilities/Log.h" #include "Utilities/Log.h"
#include "Emu/Memory/Memory.h" #include "Emu/Memory/Memory.h"
#include "Emu/System.h" #include "Emu/System.h"
#include "Emu/state.h"
#include "Emu/IdManager.h" #include "Emu/IdManager.h"
#include "Emu/Cell/PPUThread.h" #include "Emu/Cell/PPUThread.h"
@ -111,7 +112,7 @@ void SPUThread::task()
if (!custom_task && !m_dec) if (!custom_task && !m_dec)
{ {
// Select opcode table (TODO) // Select opcode table (TODO)
const auto& table = Ini.SPUDecoderMode.GetValue() == 0 ? spu_interpreter::precise::g_spu_opcode_table : spu_interpreter::fast::g_spu_opcode_table; const auto& table = rpcs3::state.config.core.spu_decoder.value() == spu_decoder_type::interpreter_precise ? spu_interpreter::precise::g_spu_opcode_table : spu_interpreter::fast::g_spu_opcode_table;
// LS base address // LS base address
const auto base = vm::_ptr<const u32>(offset); const auto base = vm::_ptr<const u32>(offset);
@ -208,15 +209,15 @@ void SPUThread::do_run()
{ {
m_dec.reset(); m_dec.reset();
switch (auto mode = Ini.SPUDecoderMode.GetValue()) switch (auto mode = rpcs3::state.config.core.spu_decoder.value())
{ {
case 0: // Interpreter 1 (Precise) case spu_decoder_type::interpreter_precise: // Interpreter 1 (Precise)
case 1: // Interpreter 2 (Fast) case spu_decoder_type::interpreter_fast: // Interpreter 2 (Fast)
{ {
break; break;
} }
case 2: case spu_decoder_type::recompiler_asmjit:
{ {
m_dec.reset(new SPURecompilerDecoder(*this)); m_dec.reset(new SPURecompilerDecoder(*this));
break; break;
@ -224,7 +225,7 @@ void SPUThread::do_run()
default: default:
{ {
LOG_ERROR(SPU, "Invalid SPU decoder mode: %d", mode); LOG_ERROR(SPU, "Invalid SPU decoder mode: %d", (u8)mode);
Emu.Pause(); Emu.Pause();
} }
} }

View file

@ -191,9 +191,6 @@ void Emulator::Load()
ResetInfo(); ResetInfo();
GetVFS().Init(elf_dir); GetVFS().Init(elf_dir);
// TODO: use state configuration instead of global config
rpcs3::state.config = rpcs3::config;
LOG_NOTICE(LOADER, "Loading '%s'...", m_path.c_str()); LOG_NOTICE(LOADER, "Loading '%s'...", m_path.c_str());
// /dev_bdvd/ mounting // /dev_bdvd/ mounting
@ -229,8 +226,8 @@ void Emulator::Load()
LOG_NOTICE(LOADER, ""); LOG_NOTICE(LOADER, "");
LOG_NOTICE(LOADER, "Settings:"); LOG_NOTICE(LOADER, "Settings:");
LOG_NOTICE(LOADER, "CPU: %s", Ini.CPUIdToString(Ini.CPUDecoderMode.GetValue())); //LOG_NOTICE(LOADER, "CPU: %s", Ini.CPUIdToString(Ini.CPUDecoderMode.GetValue()));
LOG_NOTICE(LOADER, "SPU: %s", Ini.SPUIdToString(Ini.SPUDecoderMode.GetValue())); //LOG_NOTICE(LOADER, "SPU: %s", Ini.SPUIdToString(Ini.SPUDecoderMode.GetValue()));
LOG_NOTICE(LOADER, "Renderer: %s", Ini.RendererIdToString(Ini.GSRenderMode.GetValue())); LOG_NOTICE(LOADER, "Renderer: %s", Ini.RendererIdToString(Ini.GSRenderMode.GetValue()));
if (Ini.GSRenderMode.GetValue() == 2) if (Ini.GSRenderMode.GetValue() == 2)
@ -247,10 +244,6 @@ void Emulator::Load()
LOG_NOTICE(LOADER, "Log Everything: %s", Ini.HLELogging.GetValue() ? "Yes" : "No"); LOG_NOTICE(LOADER, "Log Everything: %s", Ini.HLELogging.GetValue() ? "Yes" : "No");
LOG_NOTICE(LOADER, "RSX Logging: %s", Ini.RSXLogging.GetValue() ? "Yes" : "No"); LOG_NOTICE(LOADER, "RSX Logging: %s", Ini.RSXLogging.GetValue() ? "Yes" : "No");
LOG_NOTICE(LOADER, "");
LOG_NOTICE(LOADER, rpcs3::config.to_string().c_str());
LOG_NOTICE(LOADER, ""); LOG_NOTICE(LOADER, "");
f.Open("/app_home/../PARAM.SFO"); f.Open("/app_home/../PARAM.SFO");
const PSFLoader psf(f); const PSFLoader psf(f);
@ -262,7 +255,9 @@ void Emulator::Load()
title.length() ? SetTitle(title) : SetTitle(m_path); title.length() ? SetTitle(title) : SetTitle(m_path);
SetTitleID(title_id); SetTitleID(title_id);
// load custom config as global rpcs3::state.config = rpcs3::config;
// load custom config
if (!Ini.UseDefaultIni.GetValue()) if (!Ini.UseDefaultIni.GetValue())
{ {
std::string& name = title_id; std::string& name = title_id;
@ -270,12 +265,15 @@ void Emulator::Load()
{ {
name = name.substr(0, 4) + "-" + name.substr(4, 5); name = name.substr(0, 4) + "-" + name.substr(4, 5);
CreateConfig(name); CreateConfig(name);
rpcs3::config.path("data/" + name + "/" + name + ".ini"); rpcs3::config_t custom_config { "data/" + name + "/" + name + ".ini" };
rpcs3::config.load(); custom_config.load();
rpcs3::state.config = custom_config;
} }
} }
LOG_NOTICE(LOADER, "Used configuration: '%s'", rpcs3::config.path().c_str()); LOG_NOTICE(LOADER, "Used configuration: '%s'", rpcs3::state.config.path().c_str());
LOG_NOTICE(LOADER, "");
LOG_NOTICE(LOADER, rpcs3::state.config.to_string().c_str());
if (m_elf_path.empty()) if (m_elf_path.empty())
{ {
@ -478,8 +476,7 @@ void Emulator::Stop()
RSXIOMem.Clear(); RSXIOMem.Clear();
vm::close(); vm::close();
rpcs3::config.path("rpcs3.new.ini"); // fallback to default .ini rpcs3::state.config = rpcs3::config; // fallback to default .ini
rpcs3::config.load();
SendDbgCommand(DID_STOPPED_EMU); SendDbgCommand(DID_STOPPED_EMU);
} }

View file

@ -7,6 +7,7 @@
#include "Emu/FS/VFS.h" #include "Emu/FS/VFS.h"
#include "Emu/FS/vfsDir.h" #include "Emu/FS/vfsDir.h"
#include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsFile.h"
#include "Emu/state.h"
#include "GameViewer.h" #include "GameViewer.h"
#include "Loader/PSF.h" #include "Loader/PSF.h"
#include "SettingsDialog.h" #include "SettingsDialog.h"
@ -286,12 +287,10 @@ void GameViewer::ConfigureGame(wxCommandEvent& WXUNUSED(event))
if (i < 0) return; if (i < 0) return;
Emu.CreateConfig(m_game_data[i].serial); Emu.CreateConfig(m_game_data[i].serial);
rpcs3::config.path("data/" + m_game_data[i].serial + "/" + m_game_data[i].serial + ".ini"); rpcs3::config_t custom_config { "data/" + m_game_data[i].serial + "/" + m_game_data[i].serial + ".ini" };
LOG_NOTICE(LOADER, "Configure: '%s'", rpcs3::config.path().c_str()); custom_config.load();
rpcs3::config.load(); LOG_NOTICE(LOADER, "Configure: '%s'", custom_config.path().c_str());
SettingsDialog(this); SettingsDialog(this, &custom_config);
rpcs3::config.path("rpcs3.new.ini");
rpcs3::config.load();
} }
void GameViewer::RemoveGame(wxCommandEvent& event) void GameViewer::RemoveGame(wxCommandEvent& event)

View file

@ -2,6 +2,7 @@
#include "Ini.h" #include "Ini.h"
#include "Emu/System.h" #include "Emu/System.h"
#include "Emu/state.h"
#include "Emu/SysCalls/Modules/cellVideoOut.h" #include "Emu/SysCalls/Modules/cellVideoOut.h"
#include "SettingsDialog.h" #include "SettingsDialog.h"
#include "Utilities/Log.h" #include "Utilities/Log.h"
@ -89,6 +90,7 @@ SettingsDialog::SettingsDialog(wxWindow *parent, rpcs3::config_t* cfg)
: wxDialog(parent, wxID_ANY, "Settings", wxDefaultPosition) : wxDialog(parent, wxID_ANY, "Settings", wxDefaultPosition)
{ {
const bool was_running = Emu.Pause(); const bool was_running = Emu.Pause();
if (was_running || Emu.IsReady()) cfg = &rpcs3::state.config;
static const u32 width = 458; static const u32 width = 458;
static const u32 height = 400; static const u32 height = 400;
@ -348,11 +350,11 @@ SettingsDialog::SettingsDialog(wxWindow *parent, rpcs3::config_t* cfg)
chbox_emulationdir_enable->SetValue(Ini.SysEmulationDirPathEnable.GetValue()); chbox_emulationdir_enable->SetValue(Ini.SysEmulationDirPathEnable.GetValue());
txt_emulationdir_path->SetValue(Ini.SysEmulationDirPath.GetValue()); txt_emulationdir_path->SetValue(Ini.SysEmulationDirPath.GetValue());
rbox_ppu_decoder->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() : 0); rbox_ppu_decoder->SetSelection((int)cfg->core.ppu_decoder.value());
txt_dbg_range_min->SetValue(std::to_string(Ini.LLVMMinId.GetValue())); txt_dbg_range_min->SetValue(std::to_string(Ini.LLVMMinId.GetValue()));
txt_dbg_range_max->SetValue(std::to_string(Ini.LLVMMaxId.GetValue())); txt_dbg_range_max->SetValue(std::to_string(Ini.LLVMMaxId.GetValue()));
txt_llvm_threshold->SetValue(std::to_string(Ini.LLVMThreshold.GetValue())); txt_llvm_threshold->SetValue(std::to_string(Ini.LLVMThreshold.GetValue()));
rbox_spu_decoder->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() : 0); rbox_spu_decoder->SetSelection((int)cfg->core.spu_decoder.value());
cbox_gs_render->SetSelection(Ini.GSRenderMode.GetValue()); cbox_gs_render->SetSelection(Ini.GSRenderMode.GetValue());
cbox_gs_d3d_adaptater->SetSelection(Ini.GSD3DAdaptater.GetValue()); cbox_gs_d3d_adaptater->SetSelection(Ini.GSD3DAdaptater.GetValue());
cbox_gs_resolution->SetSelection(ResolutionIdToNum(Ini.GSResolution.GetValue()) - 1); cbox_gs_resolution->SetSelection(ResolutionIdToNum(Ini.GSResolution.GetValue()) - 1);
@ -487,7 +489,7 @@ SettingsDialog::SettingsDialog(wxWindow *parent, rpcs3::config_t* cfg)
if (ShowModal() == wxID_OK) if (ShowModal() == wxID_OK)
{ {
Ini.CPUDecoderMode.SetValue(rbox_ppu_decoder->GetSelection()); cfg->core.ppu_decoder = (ppu_decoder_type)rbox_ppu_decoder->GetSelection();
long minllvmid, maxllvmid; long minllvmid, maxllvmid;
txt_dbg_range_min->GetValue().ToLong(&minllvmid); txt_dbg_range_min->GetValue().ToLong(&minllvmid);
txt_dbg_range_max->GetValue().ToLong(&maxllvmid); txt_dbg_range_max->GetValue().ToLong(&maxllvmid);
@ -497,7 +499,7 @@ SettingsDialog::SettingsDialog(wxWindow *parent, rpcs3::config_t* cfg)
long llvmthreshold; long llvmthreshold;
txt_llvm_threshold->GetValue().ToLong(&llvmthreshold); txt_llvm_threshold->GetValue().ToLong(&llvmthreshold);
Ini.LLVMThreshold.SetValue((u32)llvmthreshold); Ini.LLVMThreshold.SetValue((u32)llvmthreshold);
Ini.SPUDecoderMode.SetValue(rbox_spu_decoder->GetSelection()); cfg->core.spu_decoder = (spu_decoder_type)rbox_spu_decoder->GetSelection();
Ini.HookStFunc.SetValue(chbox_core_hook_stfunc->GetValue()); Ini.HookStFunc.SetValue(chbox_core_hook_stfunc->GetValue());
Ini.LoadLibLv2.SetValue(chbox_core_load_liblv2->GetValue()); Ini.LoadLibLv2.SetValue(chbox_core_load_liblv2->GetValue());
Ini.GSRenderMode.SetValue(cbox_gs_render->GetSelection()); Ini.GSRenderMode.SetValue(cbox_gs_render->GetSelection());

View file

@ -16,6 +16,7 @@ namespace rpcs3
config_t& config_t::operator =(const config_t& rhs) config_t& config_t::operator =(const config_t& rhs)
{ {
assign(rhs); assign(rhs);
path(rhs.path());
return *this; return *this;
} }