diff --git a/rpcs3/Emu/Cell/lv2/sys_fs.cpp b/rpcs3/Emu/Cell/lv2/sys_fs.cpp index 8cc7527f21..16ee89e30b 100644 --- a/rpcs3/Emu/Cell/lv2/sys_fs.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_fs.cpp @@ -19,6 +19,8 @@ lv2_fs_mount_point g_mp_sys_dev_usb{"", 512, 4096, lv2_mp_flag::no_uid_gid}; lv2_fs_mount_point g_mp_sys_dev_bdvd{"", 2048, 65536, lv2_mp_flag::read_only + lv2_mp_flag::no_uid_gid}; lv2_fs_mount_point g_mp_sys_host_root{"", 512, 512, lv2_mp_flag::strict_get_block_size + lv2_mp_flag::no_uid_gid}; lv2_fs_mount_point g_mp_sys_dev_flash{"", 512, 8192, lv2_mp_flag::read_only + lv2_mp_flag::no_uid_gid}; +lv2_fs_mount_point g_mp_sys_dev_flash2{ "", 512, 8192, lv2_mp_flag::no_uid_gid }; // TODO confirm +lv2_fs_mount_point g_mp_sys_dev_flash3{ "", 512, 8192, lv2_mp_flag::read_only + lv2_mp_flag::no_uid_gid }; // TODO confirm bool verify_mself(const fs::file& mself_file) { @@ -119,6 +121,10 @@ lv2_fs_mount_point* lv2_fs_object::get_mp(std::string_view filename) return &g_mp_sys_host_root; if (mp_name == "dev_flash"sv) return &g_mp_sys_dev_flash; + if (mp_name == "dev_flash2"sv) + return &g_mp_sys_dev_flash2; + if (mp_name == "dev_flash3"sv) + return &g_mp_sys_dev_flash3; // Default return &g_mp_sys_dev_hdd0; diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index c7987f0b1c..2f0cebcb15 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -196,6 +196,8 @@ void Emulator::Init(bool add_only) const std::string dev_hdd1 = g_cfg.vfs.get(g_cfg.vfs.dev_hdd1, emu_dir); const std::string dev_usb = g_cfg.vfs.get(g_cfg.vfs.dev_usb000, emu_dir); const std::string dev_flsh = g_cfg.vfs.get_dev_flash(); + const std::string dev_flsh2 = g_cfg.vfs.get_dev_flash2(); + const std::string dev_flsh3 = g_cfg.vfs.get_dev_flash3(); auto make_path_verbose = [](const std::string& path) { @@ -213,6 +215,8 @@ void Emulator::Init(bool add_only) make_path_verbose(dev_hdd0); make_path_verbose(dev_hdd1); make_path_verbose(dev_flsh); + make_path_verbose(dev_flsh2); + make_path_verbose(dev_flsh3); make_path_verbose(dev_usb); make_path_verbose(dev_hdd0 + "game/"); make_path_verbose(dev_hdd0 + "game/TEST12345/"); @@ -1161,6 +1165,8 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool // Mount default relative path to non-existent directory vfs::mount("/dev_hdd0", g_cfg.vfs.get(g_cfg.vfs.dev_hdd0, emu_dir)); vfs::mount("/dev_flash", g_cfg.vfs.get_dev_flash()); + vfs::mount("/dev_flash2", g_cfg.vfs.get_dev_flash2()); + vfs::mount("/dev_flash3", g_cfg.vfs.get_dev_flash3()); vfs::mount("/dev_usb", g_cfg.vfs.get(g_cfg.vfs.dev_usb000, emu_dir)); vfs::mount("/dev_usb000", g_cfg.vfs.get(g_cfg.vfs.dev_usb000, emu_dir)); vfs::mount("/app_home", g_cfg.vfs.app_home.to_string().empty() ? elf_dir + '/' : g_cfg.vfs.get(g_cfg.vfs.app_home, emu_dir)); diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index b37fe31d93..949d2949ac 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -87,6 +87,8 @@ struct cfg_root : cfg::node cfg::string dev_hdd0{ this, "/dev_hdd0/", "$(EmulatorDir)dev_hdd0/" }; cfg::string dev_hdd1{ this, "/dev_hdd1/", "$(EmulatorDir)dev_hdd1/" }; cfg::string dev_flash{ this, "/dev_flash/", "$(EmulatorDir)dev_flash/" }; + cfg::string dev_flash2{ this, "/dev_flash2/", "$(EmulatorDir)dev_flash2/" }; + cfg::string dev_flash3{ this, "/dev_flash3/", "$(EmulatorDir)dev_flash3/" }; cfg::string dev_usb000{ this, "/dev_usb000/", "$(EmulatorDir)dev_usb000/" }; cfg::string dev_bdvd{ this, "/dev_bdvd/" }; // Not mounted cfg::string app_home{ this, "/app_home/" }; // Not mounted @@ -96,6 +98,16 @@ struct cfg_root : cfg::node return get(dev_flash); } + std::string get_dev_flash2() const + { + return get(dev_flash2); + } + + std::string get_dev_flash3() const + { + return get(dev_flash3); + } + cfg::_bool host_root{ this, "Enable /host_root/" }; cfg::_bool init_dirs{ this, "Initialize Directories", true }; diff --git a/rpcs3/rpcs3qt/emu_settings_type.h b/rpcs3/rpcs3qt/emu_settings_type.h index b1b28af7e1..1588da449a 100644 --- a/rpcs3/rpcs3qt/emu_settings_type.h +++ b/rpcs3/rpcs3qt/emu_settings_type.h @@ -154,6 +154,8 @@ enum class emu_settings_type dev_hdd0Location, dev_hdd1Location, dev_flashLocation, + dev_flash2Location, + dev_flash3Location, dev_usb000Location, }; @@ -309,5 +311,7 @@ inline static const QMap<emu_settings_type, cfg_location> settings_location = { emu_settings_type::dev_hdd0Location, { "VFS", "/dev_hdd0/" }}, { emu_settings_type::dev_hdd1Location, { "VFS", "/dev_hdd1/" }}, { emu_settings_type::dev_flashLocation, { "VFS", "/dev_flash/"}}, + { emu_settings_type::dev_flash2Location, { "VFS", "/dev_flash2/"}}, + { emu_settings_type::dev_flash3Location, { "VFS", "/dev_flash3/"}}, { emu_settings_type::dev_usb000Location, { "VFS", "/dev_usb000/"}}, }; diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 3c96757ca4..900636ce1c 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -173,6 +173,8 @@ namespace gui const gui_save fs_dev_hdd0_list = gui_save(fs, "dev_hdd0_list", QStringList()); const gui_save fs_dev_hdd1_list = gui_save(fs, "dev_hdd1_list", QStringList()); const gui_save fs_dev_flash_list = gui_save(fs, "dev_flash_list", QStringList()); + const gui_save fs_dev_flash2_list = gui_save(fs, "dev_flash2_list", QStringList()); + const gui_save fs_dev_flash3_list = gui_save(fs, "dev_flash3_list", QStringList()); const gui_save fs_dev_usb000_list = gui_save(fs, "dev_usb000_list", QStringList()); const gui_save l_tty = gui_save(logger, "TTY", true); diff --git a/rpcs3/rpcs3qt/vfs_dialog.cpp b/rpcs3/rpcs3qt/vfs_dialog.cpp index 5802fcf005..4e0b60be8f 100644 --- a/rpcs3/rpcs3qt/vfs_dialog.cpp +++ b/rpcs3/rpcs3qt/vfs_dialog.cpp @@ -35,6 +35,12 @@ vfs_dialog::vfs_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_pt vfs_dialog_tab* dev_flash_tab = new vfs_dialog_tab({ "dev_flash", emu_settings_type::dev_flashLocation, gui::fs_dev_flash_list, &g_cfg.vfs.dev_flash }, m_gui_settings, m_emu_settings, this); + vfs_dialog_tab* dev_flash2_tab = new vfs_dialog_tab({ "dev_flash2", emu_settings_type::dev_flash2Location, gui::fs_dev_flash2_list, &g_cfg.vfs.dev_flash2 }, + m_gui_settings, m_emu_settings, this); + + vfs_dialog_tab* dev_flash3_tab = new vfs_dialog_tab({ "dev_flash3", emu_settings_type::dev_flash3Location, gui::fs_dev_flash3_list, &g_cfg.vfs.dev_flash3 }, + m_gui_settings, m_emu_settings, this); + vfs_dialog_tab* dev_usb000_tab = new vfs_dialog_tab({ "dev_usb000", emu_settings_type::dev_usb000Location, gui::fs_dev_usb000_list, &g_cfg.vfs.dev_usb000 }, m_gui_settings, m_emu_settings, this); @@ -42,6 +48,8 @@ vfs_dialog::vfs_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_pt tabs->addTab(dev_hdd0_tab, "dev_hdd0"); tabs->addTab(dev_hdd1_tab, "dev_hdd1"); tabs->addTab(dev_flash_tab, "dev_flash"); + tabs->addTab(dev_flash2_tab, "dev_flash2"); + tabs->addTab(dev_flash3_tab, "dev_flash3"); tabs->addTab(dev_usb000_tab, "dev_usb000"); // Create buttons