From d8abe755267a3959bfa77522a8c1cf491ccd1fda Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 13 Jul 2017 18:35:37 +0300 Subject: [PATCH] Improved sprx boot (for devs only) --- rpcs3/Emu/Cell/PPUModule.cpp | 17 +++++++++++++++++ rpcs3/Emu/System.cpp | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index 764a5cc76d..1eec01d231 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -130,6 +130,11 @@ struct ppu_linkage_info // Initialize static modules. static void ppu_initialize_modules(const std::shared_ptr& link) { + if (!link->modules.empty()) + { + return; + } + ppu_initialize_syscalls(); const std::initializer_list registered @@ -674,6 +679,9 @@ std::shared_ptr ppu_load_prx(const ppu_prx_object& elf, const std::stri // Access linkage information object const auto link = fxm::get_always(); + // Initialize HLE modules + ppu_initialize_modules(link); + for (const auto& prog : elf.progs) { LOG_NOTICE(LOADER, "** Segment: p_type=0x%x, p_vaddr=0x%llx, p_filesz=0x%llx, p_memsz=0x%llx, flags=0x%x", prog.p_type, prog.p_vaddr, prog.p_filesz, prog.p_memsz, prog.p_flags); @@ -894,6 +902,15 @@ std::shared_ptr ppu_load_prx(const ppu_prx_object& elf, const std::stri prx->epilogue.set(prx->specials[0x330F7005]); prx->name = path.substr(path.find_last_of('/') + 1); prx->path = path; + + if (Emu.IsReady() && fxm::import([&] { return prx; })) + { + // Special loading mode + auto ppu = idm::make_ptr("test_thread", 0, 0x100000); + + ppu->cmd_push({ppu_cmd::initialize, 0}); + } + return prx; } diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 66bf372e57..a5b868bbc9 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -536,7 +536,7 @@ void Emulator::Load() m_state = system_state::ready; GetCallbacks().on_ready(); vm::ps3::init(); - ppu_load_prx(ppu_prx, ""); + ppu_load_prx(ppu_prx, m_path); } else if (spu_exec.open(elf_file) == elf_error::ok) {