mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 01:38:37 +12:00
Improved LLE Manager
Improved VFS
This commit is contained in:
parent
795729a0b7
commit
a59cf50f03
22 changed files with 559 additions and 175 deletions
|
@ -62,10 +62,12 @@ Module::~Module()
|
|||
{
|
||||
UnLoad();
|
||||
|
||||
for (int i = 0; i < m_funcs_list.size(); i++)
|
||||
for (auto &i : m_funcs_list)
|
||||
{
|
||||
delete m_funcs_list[i];
|
||||
delete i.second;
|
||||
}
|
||||
|
||||
m_funcs_list.clear();
|
||||
}
|
||||
|
||||
void Module::Load()
|
||||
|
@ -75,12 +77,10 @@ void Module::Load()
|
|||
|
||||
if(m_load_func) m_load_func();
|
||||
|
||||
for(u32 i=0; i<m_funcs_list.size(); ++i)
|
||||
for (auto &i : m_funcs_list)
|
||||
{
|
||||
Emu.GetModuleManager().AddFunc(m_funcs_list[i]);
|
||||
Emu.GetModuleManager().AddFunc(i.second);
|
||||
}
|
||||
|
||||
SetLoaded(true);
|
||||
}
|
||||
|
||||
void Module::UnLoad()
|
||||
|
@ -90,6 +90,11 @@ void Module::UnLoad()
|
|||
|
||||
if(m_unload_func) m_unload_func();
|
||||
|
||||
for (auto &i : m_funcs_list)
|
||||
{
|
||||
i.second->lle_func.set(0);
|
||||
}
|
||||
|
||||
// TODO: Re-enable this when needed
|
||||
// This was disabled because some functions would get unloaded and
|
||||
// some games tried to use them, thus only printing a TODO message
|
||||
|
@ -106,16 +111,14 @@ bool Module::Load(u32 id)
|
|||
if(Emu.GetModuleManager().IsLoadedFunc(id))
|
||||
return false;
|
||||
|
||||
for(u32 i=0; i<m_funcs_list.size(); ++i)
|
||||
{
|
||||
if(m_funcs_list[i]->id == id)
|
||||
{
|
||||
Emu.GetModuleManager().AddFunc(m_funcs_list[i]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
auto res = m_funcs_list.find(id);
|
||||
|
||||
return false;
|
||||
if (res == m_funcs_list.end())
|
||||
return false;
|
||||
|
||||
Emu.GetModuleManager().AddFunc(res->second);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Module::UnLoad(u32 id)
|
||||
|
@ -177,7 +180,7 @@ void fix_import(Module* module, u32 func, u32 addr)
|
|||
{
|
||||
using namespace PPU_instr;
|
||||
|
||||
vm::ptr<u32>& ptr = (vm::ptr<u32>&)addr;
|
||||
vm::ptr<u32>& ptr = vm::ptr<u32>::make(addr);
|
||||
|
||||
*ptr++ = ADDIS(11, 0, func >> 16);
|
||||
*ptr++ = ORI(11, 11, func & 0xffff);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue