void Emulator::Init() { if (!g_tty) { g_tty.open(fs::get_config_dir() + "TTY.log", fs::rewrite + fs::append); } idm::init(); fxm::init(); // Reset defaults, cache them cfg::root.from_default(); g_cfg_defaults = cfg::root.to_string(); // Reload global configuration cfg::root.from_string(fs::file(fs::get_config_dir() + "/config.yml", fs::read + fs::create).to_string()); }
void Emulator::Init() { if (!g_tty) { g_tty.open(fs::get_config_dir() + "TTY.log", fs::rewrite + fs::append); } idm::init(); fxm::init(); // Reset defaults, cache them g_cfg.from_default(); g_cfg_defaults = g_cfg.to_string(); // Reload global configuration g_cfg.from_string(fs::file(fs::get_config_dir() + "/config.yml", fs::read + fs::create).to_string()); // Create directories const std::string emu_dir_ = g_cfg.vfs.emulator_dir; const std::string emu_dir = emu_dir_.empty() ? fs::get_config_dir() : emu_dir_; const std::string dev_hdd0 = fmt::replace_all(g_cfg.vfs.dev_hdd0, "$(EmulatorDir)", emu_dir); const std::string dev_hdd1 = fmt::replace_all(g_cfg.vfs.dev_hdd1, "$(EmulatorDir)", emu_dir); const std::string dev_usb = fmt::replace_all(g_cfg.vfs.dev_usb000, "$(EmulatorDir)", emu_dir); fs::create_path(dev_hdd0); fs::create_dir(dev_hdd0 + "game/"); fs::create_dir(dev_hdd0 + "game/TEST12345/"); fs::create_dir(dev_hdd0 + "game/TEST12345/USRDIR/"); fs::create_dir(dev_hdd0 + "home/"); fs::create_dir(dev_hdd0 + "home/00000001/"); fs::create_dir(dev_hdd0 + "home/00000001/exdata/"); fs::create_dir(dev_hdd0 + "home/00000001/savedata/"); fs::create_dir(dev_hdd0 + "home/00000001/trophy/"); fs::write_file(dev_hdd0 + "home/00000001/localusername", fs::create + fs::excl + fs::write, "User"s); fs::create_dir(dev_hdd0 + "disc/"); fs::create_dir(dev_hdd1 + "cache/"); fs::create_dir(dev_hdd1 + "game/"); fs::create_path(dev_hdd1); fs::create_path(dev_usb); #ifdef WITH_GDB_DEBUGGER fxm::make<GDBDebugServer>(); #endif // Initialize patch engine fxm::make_always<patch_engine>()->append(fs::get_config_dir() + "/patch.yml"); }
bool Rpcs3App::OnInit() { static const wxCmdLineEntryDesc desc[] { { wxCMD_LINE_SWITCH, "h", "help", "Command line options:\nh (help): Help and commands\nt (test): For directly executing a (S)ELF", wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, { wxCMD_LINE_SWITCH, "t", "test", "Run in test mode on (S)ELF", wxCMD_LINE_VAL_NONE }, { wxCMD_LINE_PARAM, NULL, NULL, "(S)ELF", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_NONE } }; parser.SetDesc(desc); parser.SetCmdLine(argc, argv); if (parser.Parse()) { // help was given, terminating this->Exit(); } s_gui_cfg.open(fs::get_config_dir() + "/config_gui.yml", fs::read + fs::write + fs::create); g_gui_cfg = YAML::Load(s_gui_cfg.to_string()); EmuCallbacks callbacks; callbacks.call_after = [](std::function<void()> func) { wxGetApp().CallAfter(std::move(func)); }; callbacks.process_events = [this]() { m_MainFrame->Update(); wxGetApp().ProcessPendingEvents(); }; callbacks.exit = [this]() { wxGetApp().Exit(); }; callbacks.send_dbg_command = [](DbgCommand id, cpu_thread* t) { wxGetApp().SendDbgCommand(id, t); }; callbacks.get_kb_handler = PURE_EXPR(g_cfg_kb_handler.get()()); callbacks.get_mouse_handler = PURE_EXPR(g_cfg_mouse_handler.get()()); callbacks.get_pad_handler = PURE_EXPR(g_cfg_pad_handler.get()()); callbacks.get_gs_frame = [](frame_type type, int w, int h) -> std::unique_ptr<GSFrameBase> { switch (type) { case frame_type::OpenGL: return std::make_unique<GLGSFrame>(w, h); case frame_type::DX12: return std::make_unique<GSFrame>("DirectX 12", w, h); case frame_type::Null: return std::make_unique<GSFrame>("Null", w, h); case frame_type::Vulkan: return std::make_unique<GSFrame>("Vulkan", w, h); } throw EXCEPTION("Invalid Frame Type (0x%x)", type); }; callbacks.get_gs_render = PURE_EXPR(g_cfg_gs_render.get()()); callbacks.get_audio = PURE_EXPR(g_cfg_audio_render.get()()); callbacks.get_msg_dialog = []() -> std::shared_ptr<MsgDialogBase> { return std::make_shared<MsgDialogFrame>(); }; callbacks.get_save_dialog = []() -> std::unique_ptr<SaveDialogBase> { return std::make_unique<SaveDialogFrame>(); }; Emu.SetCallbacks(std::move(callbacks)); TheApp = this; SetAppName("RPCS3"); wxInitAllImageHandlers(); Emu.Init(); m_MainFrame = new MainFrame(); SetTopWindow(m_MainFrame); m_MainFrame->Show(); m_MainFrame->DoSettings(true); OnArguments(parser); return true; }
bool Rpcs3App::OnInit() { static const wxCmdLineEntryDesc desc[] { { wxCMD_LINE_SWITCH, "h", "help", "Command line options:\nh (help): Help and commands\nt (test): For directly executing a (S)ELF", wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, { wxCMD_LINE_SWITCH, "t", "test", "Run in test mode on (S)ELF", wxCMD_LINE_VAL_NONE }, { wxCMD_LINE_PARAM, NULL, NULL, "(S)ELF", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_NONE } }; parser.SetDesc(desc); parser.SetCmdLine(argc, argv); if (parser.Parse()) { // help was given, terminating this->Exit(); } s_gui_cfg.open(fs::get_config_dir() + "/config_gui.yml", fs::read + fs::write + fs::create); g_gui_cfg = YAML::Load(s_gui_cfg.to_string()); EmuCallbacks callbacks; callbacks.call_after = [](std::function<void()> func) { wxGetApp().CallAfter(std::move(func)); }; callbacks.process_events = [this]() { m_MainFrame->Update(); wxGetApp().ProcessPendingEvents(); }; callbacks.exit = [this]() { wxGetApp().Exit(); }; callbacks.get_kb_handler = []() -> std::shared_ptr<KeyboardHandlerBase> { switch (keyboard_handler type = g_cfg.io.keyboard) { case keyboard_handler::null: return std::make_shared<NullKeyboardHandler>(); case keyboard_handler::basic: return std::make_shared<BasicKeyboardHandler>(); default: fmt::throw_exception("Invalid keyboard handler: %s", type); } }; callbacks.get_mouse_handler = []() -> std::shared_ptr<MouseHandlerBase> { switch (mouse_handler type = g_cfg.io.mouse) { case mouse_handler::null: return std::make_shared<NullMouseHandler>(); case mouse_handler::basic: return std::make_shared<BasicMouseHandler>(); default: fmt::throw_exception("Invalid mouse handler: %s", type); } }; callbacks.get_pad_handler = []() -> std::shared_ptr<PadHandlerBase> { switch (pad_handler type = g_cfg.io.pad) { case pad_handler::null: return std::make_shared<NullPadHandler>(); case pad_handler::keyboard: return std::make_shared<KeyboardPadHandler>(); case pad_handler::ds4: return std::make_shared<DS4PadHandler>(); #ifdef _MSC_VER case pad_handler::xinput: return std::make_shared<XInputPadHandler>(); #endif #ifdef _WIN32 case pad_handler::mm: return std::make_shared<MMJoystickHandler>(); #endif default: fmt::throw_exception("Invalid pad handler: %s", type); } }; callbacks.get_gs_frame = []() -> std::unique_ptr<GSFrameBase> { extern const std::unordered_map<video_resolution, std::pair<int, int>, value_hash<video_resolution>> g_video_out_resolution_map; const auto size = g_video_out_resolution_map.at(g_cfg.video.resolution); switch (video_renderer type = g_cfg.video.renderer) { case video_renderer::null: return std::make_unique<GSFrame>("Null", size.first, size.second); case video_renderer::opengl: return std::make_unique<GLGSFrame>(size.first, size.second); #ifndef APPLE case video_renderer::vulkan: return std::make_unique<GSFrame>("Vulkan", size.first, size.second); #endif #ifdef _MSC_VER case video_renderer::dx12: return std::make_unique<GSFrame>("DirectX 12", size.first, size.second); #endif default: fmt::throw_exception("Invalid video renderer: %s" HERE, type); } }; callbacks.get_gs_render = []() -> std::shared_ptr<GSRender> { switch (video_renderer type = g_cfg.video.renderer) { case video_renderer::null: return std::make_shared<NullGSRender>(); case video_renderer::opengl: return std::make_shared<GLGSRender>(); #if !defined(__APPLE__) case video_renderer::vulkan: return std::make_shared<VKGSRender>(); #endif #ifdef _MSC_VER case video_renderer::dx12: return std::make_shared<D3D12GSRender>(); #endif default: fmt::throw_exception("Invalid video renderer: %s" HERE, type); } }; callbacks.get_audio = []() -> std::shared_ptr<AudioThread> { switch (audio_renderer type = g_cfg.audio.renderer) { case audio_renderer::null: return std::make_shared<NullAudioThread>(); #ifdef _WIN32 case audio_renderer::xaudio: return std::make_shared<XAudio2Thread>(); #elif __linux__ case audio_renderer::alsa: return std::make_shared<ALSAThread>(); #endif case audio_renderer::openal: return std::make_shared<OpenALThread>(); default: fmt::throw_exception("Invalid audio renderer: %s" HERE, type); } }; callbacks.get_msg_dialog = []() -> std::shared_ptr<MsgDialogBase> { return std::make_shared<MsgDialogFrame>(); }; callbacks.get_save_dialog = []() -> std::unique_ptr<SaveDialogBase> { return std::make_unique<SaveDialogFrame>(); }; Emu.SetCallbacks(std::move(callbacks)); TheApp = this; SetAppName("RPCS3"); wxInitAllImageHandlers(); Emu.Init(); m_MainFrame = new MainFrame(); SetTopWindow(m_MainFrame); m_MainFrame->Show(); m_MainFrame->DoSettings(true); OnArguments(parser); return true; }