diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index a61ca614d0..18510b1cdf 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -1221,6 +1221,13 @@ void ppu_load_exec(const ppu_exec_object& elf) { const std::string lle_dir = vfs::get("/dev_flash/sys/external/"); + if (!fs::is_dir(lle_dir)) + { + LOG_ERROR(GENERAL, "/dev_flash/sys/external/ directory does not exist!" + "\nYou should install the PS3 Firmware (Menu: Tools -> Install Firmware)." + "\nVisit https://rpcs3.net/ for Quickstart Guide and more information."); + } + for (const auto& name : load_libs) { const ppu_prx_object obj = decrypt_self(fs::file(lle_dir + name)); @@ -1245,7 +1252,7 @@ void ppu_load_exec(const ppu_exec_object& elf) } else { - LOG_FATAL(LOADER, "Failed to load %s: %s", name, obj.get_error()); + fmt::throw_exception("Failed to load /dev_flash/sys/external/%s: %s", name, obj.get_error()); } } } diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 5e6e56824d..7e6460fd2b 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -359,7 +359,7 @@ void MainFrame::BootElf(wxCommandEvent& WXUNUSED(event)) Emu.SetPath(fmt::ToUTF8(ctrl.GetPath())); Emu.Load(); - LOG_SUCCESS(LOADER, "(S)ELF: boot done."); + if (Emu.IsReady()) LOG_SUCCESS(LOADER, "(S)ELF: boot done."); } void MainFrame::DecryptSPRXLibraries(wxCommandEvent& WXUNUSED(event)) diff --git a/rpcs3/Loader/ELF.cpp b/rpcs3/Loader/ELF.cpp index 8ace3d128b..933225de6d 100644 --- a/rpcs3/Loader/ELF.cpp +++ b/rpcs3/Loader/ELF.cpp @@ -11,7 +11,7 @@ void fmt_class_string::format(std::string& out, u64 arg) { case elf_error::ok: return "OK"; - case elf_error::stream: return "Invalid stream"; + case elf_error::stream: return "Invalid stream or file not found"; case elf_error::stream_header: return "Failed to read ELF header"; case elf_error::stream_phdrs: return "Failed to read ELF program headers"; case elf_error::stream_shdrs: return "Failed to read ELF section headers";