mirror of https://github.com/RPCS3/rpcs3.git
Minor sys_prx update
This commit is contained in:
parent
d3e9e1296c
commit
c273c0e42b
|
@ -4,6 +4,7 @@
|
||||||
#include "Emu/System.h"
|
#include "Emu/System.h"
|
||||||
#include "Emu/SysCalls/SysCalls.h"
|
#include "Emu/SysCalls/SysCalls.h"
|
||||||
#include "Emu/FS/vfsFile.h"
|
#include "Emu/FS/vfsFile.h"
|
||||||
|
#include "Crypto/unself.h"
|
||||||
#include "sys_prx.h"
|
#include "sys_prx.h"
|
||||||
|
|
||||||
SysCallBase sys_prx("sys_prx");
|
SysCallBase sys_prx("sys_prx");
|
||||||
|
@ -13,18 +14,30 @@ s32 sys_prx_load_module(u32 path_addr, u64 flags, mem_ptr_t<sys_prx_load_module_
|
||||||
std::string path = Memory.ReadString(path_addr);
|
std::string path = Memory.ReadString(path_addr);
|
||||||
sys_prx.Todo("sys_prx_load_module(path=\"%s\", flags=0x%llx, pOpt=0x%x)", path.c_str(), flags, pOpt.GetAddr());
|
sys_prx.Todo("sys_prx_load_module(path=\"%s\", flags=0x%llx, pOpt=0x%x)", path.c_str(), flags, pOpt.GetAddr());
|
||||||
|
|
||||||
|
// Check if the file is SPRX
|
||||||
|
std::string local_path;
|
||||||
|
Emu.GetVFS().GetDevice(path, local_path);
|
||||||
|
if (IsSelf(local_path)) {
|
||||||
|
if (!DecryptSelf(local_path+".prx", local_path)) {
|
||||||
|
return CELL_PRX_ERROR_ILLEGAL_LIBRARY;
|
||||||
|
}
|
||||||
|
path += ".prx";
|
||||||
|
}
|
||||||
|
|
||||||
vfsFile f(path);
|
vfsFile f(path);
|
||||||
if (!f.IsOpened()) {
|
if (!f.IsOpened()) {
|
||||||
return CELL_PRX_ERROR_UNKNOWN_MODULE;
|
return CELL_PRX_ERROR_UNKNOWN_MODULE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the PRX into memory
|
|
||||||
u64 prx_size = f.GetSize();
|
|
||||||
u32 prx_address = Memory.Alloc(prx_size, 4);
|
|
||||||
f.Read(Memory.VirtualToRealAddr(prx_address), prx_size);
|
|
||||||
|
|
||||||
// Create the PRX object and return its id
|
// Create the PRX object and return its id
|
||||||
sys_prx_t* prx = new sys_prx_t(prx_size, prx_address);
|
sys_prx_t* prx = new sys_prx_t();
|
||||||
|
prx->size = f.GetSize();
|
||||||
|
prx->address = Memory.Alloc(prx->size, 4);
|
||||||
|
prx->path = path;
|
||||||
|
|
||||||
|
// Load the PRX into memory
|
||||||
|
f.Read(Memory.VirtualToRealAddr(prx->address), prx->size);
|
||||||
|
|
||||||
u32 id = sys_prx.GetNewId(prx, TYPE_PRX);
|
u32 id = sys_prx.GetNewId(prx, TYPE_PRX);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,15 +51,15 @@ struct sys_prx_unload_module_option_t
|
||||||
};
|
};
|
||||||
|
|
||||||
// Auxiliary data types
|
// Auxiliary data types
|
||||||
struct sys_prx_t {
|
struct sys_prx_t
|
||||||
|
{
|
||||||
u32 size;
|
u32 size;
|
||||||
u32 address;
|
u32 address;
|
||||||
|
std::string path;
|
||||||
bool isStarted;
|
bool isStarted;
|
||||||
|
|
||||||
sys_prx_t(u32 prx_size, u32 prx_address)
|
sys_prx_t()
|
||||||
: size(prx_size)
|
: isStarted(false)
|
||||||
, address(prx_address)
|
|
||||||
, isStarted(false)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -43,7 +43,7 @@ void KernelExplorer::Update()
|
||||||
char name[4096];
|
char name[4096];
|
||||||
|
|
||||||
m_tree->DeleteAllItems();
|
m_tree->DeleteAllItems();
|
||||||
auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x0C8A9000 (200.7 MB)");
|
auto& root = m_tree->AddRoot("Process, ID = 0x00000001, Total Memory Usage = 0x???????? (???.? MB)");
|
||||||
|
|
||||||
// TODO: PPU Threads
|
// TODO: PPU Threads
|
||||||
// TODO: SPU/RawSPU Threads
|
// TODO: SPU/RawSPU Threads
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <wx/listctrl.h>
|
|
||||||
#include <wx/treectrl.h>
|
#include <wx/treectrl.h>
|
||||||
|
|
||||||
class KernelExplorer : public wxFrame
|
class KernelExplorer : public wxFrame
|
||||||
|
|
|
@ -5,10 +5,9 @@
|
||||||
#include "Emu/Cell/PPUThread.h"
|
#include "Emu/Cell/PPUThread.h"
|
||||||
#include "Emu/SysCalls/SC_FUNC.h"
|
#include "Emu/SysCalls/SC_FUNC.h"
|
||||||
#include "Emu/SysCalls/Modules.h"
|
#include "Emu/SysCalls/Modules.h"
|
||||||
#include "ELF64.h"
|
|
||||||
#include "Emu/Cell/PPUInstrTable.h"
|
#include "Emu/Cell/PPUInstrTable.h"
|
||||||
#include "Emu/System.h"
|
|
||||||
#include "Emu/SysCalls/ModuleManager.h"
|
#include "Emu/SysCalls/ModuleManager.h"
|
||||||
|
#include "ELF64.h"
|
||||||
|
|
||||||
using namespace PPU_instr;
|
using namespace PPU_instr;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue