2021-11-27 10:18:48 -05:00
|
|
|
#include "Ps2VmJs.h"
|
|
|
|
#include "Jitter_CodeGen_Wasm.h"
|
|
|
|
#include "MemoryUtils.h"
|
|
|
|
#include "BasicBlock.h"
|
2022-01-09 15:02:45 -05:00
|
|
|
#include "PS2VM_Preferences.h"
|
|
|
|
#include "AppConfig.h"
|
2021-11-27 10:18:48 -05:00
|
|
|
|
|
|
|
extern "C" uint32 LWL_Proxy(uint32, uint32, CMIPS*);
|
|
|
|
extern "C" uint32 LWR_Proxy(uint32, uint32, CMIPS*);
|
2021-12-26 10:12:03 -05:00
|
|
|
extern "C" uint64 LDL_Proxy(uint32, uint64, CMIPS*);
|
|
|
|
extern "C" uint64 LDR_Proxy(uint32, uint64, CMIPS*);
|
2021-11-27 10:18:48 -05:00
|
|
|
extern "C" void SWL_Proxy(uint32, uint32, CMIPS*);
|
|
|
|
extern "C" void SWR_Proxy(uint32, uint32, CMIPS*);
|
2021-12-26 10:12:03 -05:00
|
|
|
extern "C" void SDL_Proxy(uint32, uint64, CMIPS*);
|
|
|
|
extern "C" void SDR_Proxy(uint32, uint64, CMIPS*);
|
2021-11-27 10:18:48 -05:00
|
|
|
|
|
|
|
void CPs2VmJs::CreateVM()
|
|
|
|
{
|
|
|
|
printf("Initializing PS2VM...\r\n");
|
|
|
|
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&EmptyBlockHandler), "_EmptyBlockHandler", "vi");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_GetByteProxy), "_MemoryUtils_GetByteProxy", "iii");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_GetHalfProxy), "_MemoryUtils_GetHalfProxy", "iii");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_GetWordProxy), "_MemoryUtils_GetWordProxy", "iii");
|
2021-12-04 11:10:41 -05:00
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_GetDoubleProxy), "_MemoryUtils_GetDoubleProxy", "jii");
|
2021-11-27 10:18:48 -05:00
|
|
|
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_SetByteProxy), "_MemoryUtils_SetByteProxy", "viii");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_SetHalfProxy), "_MemoryUtils_SetHalfProxy", "viii");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_SetWordProxy), "_MemoryUtils_SetWordProxy", "viii");
|
2021-12-04 11:10:41 -05:00
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&MemoryUtils_SetDoubleProxy), "_MemoryUtils_SetDoubleProxy", "viji");
|
2021-11-27 10:18:48 -05:00
|
|
|
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&LWL_Proxy), "_LWL_Proxy", "iiii");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&LWR_Proxy), "_LWR_Proxy", "iiii");
|
|
|
|
|
2021-12-26 10:12:03 -05:00
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&LDL_Proxy), "_LDL_Proxy", "jiji");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&LDR_Proxy), "_LDR_Proxy", "jiji");
|
|
|
|
|
2021-11-27 10:18:48 -05:00
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&SWL_Proxy), "_SWL_Proxy", "viii");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&SWR_Proxy), "_SWR_Proxy", "viii");
|
|
|
|
|
2021-12-26 10:12:03 -05:00
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&SDL_Proxy), "_SDL_Proxy", "viji");
|
|
|
|
Jitter::CWasmFunctionRegistry::RegisterFunction(reinterpret_cast<uintptr_t>(&SDR_Proxy), "_SDR_Proxy", "viji");
|
|
|
|
|
2021-11-27 10:18:48 -05:00
|
|
|
CPS2VM::CreateVM();
|
|
|
|
}
|
2022-01-09 15:02:45 -05:00
|
|
|
|
|
|
|
void CPs2VmJs::BootElf(std::string path)
|
|
|
|
{
|
2022-01-09 15:12:17 -05:00
|
|
|
m_mailBox.SendCall([this, path]() {
|
2022-01-09 15:02:45 -05:00
|
|
|
printf("Loading '%s'...\r\n", path.c_str());
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Reset();
|
|
|
|
m_ee->m_os->BootFromFile(path);
|
|
|
|
}
|
|
|
|
catch(const std::exception& ex)
|
|
|
|
{
|
|
|
|
printf("Failed to start: %s.\r\n", ex.what());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
printf("Starting...\r\n");
|
|
|
|
ResumeImpl();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
void CPs2VmJs::BootDiscImage(std::string path)
|
|
|
|
{
|
2022-01-09 15:12:17 -05:00
|
|
|
m_mailBox.SendCall([this, path]() {
|
2022-01-09 15:02:45 -05:00
|
|
|
printf("Loading '%s'...\r\n", path.c_str());
|
|
|
|
try
|
|
|
|
{
|
|
|
|
CAppConfig::GetInstance().SetPreferencePath(PREF_PS2_CDROM0_PATH, path);
|
|
|
|
Reset();
|
|
|
|
m_ee->m_os->BootFromCDROM();
|
|
|
|
}
|
|
|
|
catch(const std::exception& ex)
|
|
|
|
{
|
|
|
|
printf("Failed to start: %s.\r\n", ex.what());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
printf("Starting...\r\n");
|
|
|
|
ResumeImpl();
|
|
|
|
});
|
|
|
|
}
|