mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
87 lines
1.8 KiB
C++
87 lines
1.8 KiB
C++
#include <cstring>
|
|
#include <cassert>
|
|
#include "sif_ee.h"
|
|
#include "game/system/iop_thread.h"
|
|
#include "game/runtime.h"
|
|
|
|
namespace ee {
|
|
|
|
namespace {
|
|
::IOP* iop;
|
|
}
|
|
|
|
void LIBRARY_sceSif_register(::IOP* i) {
|
|
iop = i;
|
|
}
|
|
|
|
void LIBRARY_INIT_sceSif() {
|
|
iop = nullptr;
|
|
}
|
|
void sceSifInitRpc(unsigned int mode) {
|
|
(void)mode;
|
|
}
|
|
|
|
int sceSifRebootIop(const char* imgfile) {
|
|
(void)imgfile;
|
|
return 1;
|
|
}
|
|
|
|
int sceSifSyncIop() {
|
|
return 1;
|
|
}
|
|
|
|
void sceFsReset() {
|
|
|
|
}
|
|
|
|
int sceSifLoadModule(const char* name, int arg_size, const char* args) {
|
|
if(!strcmp(name, "cdrom0:\\\\DRIVERS\\\\OVERLORD.IRX;1") || !strcmp(name, "host0:binee/overlord.irx")) {
|
|
const char* src = args;
|
|
char* dst = iop->overlord_arg_data;
|
|
int cnt;
|
|
iop->overlord_argv[0] = nullptr;
|
|
for(cnt = 1; src - args < arg_size; cnt++) {
|
|
auto len = strlen(src);
|
|
memcpy(dst, src, len + 1);
|
|
iop->overlord_argv[cnt] = dst;
|
|
dst += len + 1;
|
|
src += len + 1;
|
|
}
|
|
iop->overlord_argc = cnt;
|
|
|
|
for(int i = 0; i < cnt; i++) {
|
|
if(iop->overlord_argv[i])
|
|
printf("arg %d : %s\n", i, iop->overlord_argv[i]);
|
|
}
|
|
iop->set_ee_main_mem(g_ee_main_mem);
|
|
iop->send_status(IOP_Status::IOP_OVERLORD_INIT);
|
|
iop->wait_for_overlord_init_finish();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int sceMcInit() {
|
|
return 1;
|
|
}
|
|
|
|
s32 sceSifCallRpc(sceSifClientData* bd, u32 fno, u32 mode, void* send, s32 ssize, void* recv, s32 rsize, void* end_func, void* end_para) {
|
|
assert(!end_func);
|
|
assert(!end_para);
|
|
assert(mode == 1); // async
|
|
iop->kernel.sif_rpc(bd->rpcd.id, fno, mode, send, ssize, recv, rsize);
|
|
return 0;
|
|
}
|
|
|
|
s32 sceSifCheckStatRpc(sceSifRpcData* bd) {
|
|
iop->signal_run_iop();
|
|
return iop->kernel.sif_busy(bd->id);
|
|
}
|
|
|
|
s32 sceSifBindRpc(sceSifClientData* bd, u32 request, u32 mode) {
|
|
assert(mode == 1); // async
|
|
bd->rpcd.id = request;
|
|
bd->serve = (sceSifServeData*)1;
|
|
return 0;
|
|
}
|
|
} |