mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-14 18:58:29 +12:00
Refactoring, save/restore additional libs
This commit is contained in:
parent
288c8d9854
commit
35f6e67903
87 changed files with 1024 additions and 717 deletions
|
@ -185,6 +185,47 @@ void osLib_returnFromFunction64(PPCInterpreter_t* hCPU, uint64 returnValue64)
|
|||
hCPU->instructionPointer = hCPU->spr.LR;
|
||||
}
|
||||
|
||||
void osLib_save(MemStreamWriter& s)
|
||||
{
|
||||
coreinit_save(s);
|
||||
dmae_save(s);
|
||||
padscore::save(s);
|
||||
nnAct_save(s);
|
||||
nn::acp::save(s);
|
||||
nnBoss_save(s);
|
||||
nn::nfp::save(s);
|
||||
nnUds_save(s);
|
||||
nn::ndm::save(s);
|
||||
nn::save::save(s);
|
||||
nsysnet_save(s);
|
||||
nn::fp::save(s);
|
||||
nn::olv::save(s);
|
||||
nlibcurl::save(s);
|
||||
nsyshid::save(s);
|
||||
camera::save(s);
|
||||
procui_save(s);
|
||||
}
|
||||
void osLib_restore(MemStreamReader& s)
|
||||
{
|
||||
coreinit_restore(s);
|
||||
dmae_restore(s);
|
||||
padscore::restore(s);
|
||||
nnAct_restore(s);
|
||||
nn::acp::restore(s);
|
||||
nnBoss_restore(s);
|
||||
nn::nfp::restore(s);
|
||||
nnUds_restore(s);
|
||||
nn::ndm::restore(s);
|
||||
nn::save::restore(s);
|
||||
nsysnet_restore(s);
|
||||
nn::fp::restore(s);
|
||||
nn::olv::restore(s);
|
||||
nlibcurl::restore(s);
|
||||
nsyshid::restore(s);
|
||||
camera::restore(s);
|
||||
procui_restore(s);
|
||||
}
|
||||
|
||||
void osLib_load()
|
||||
{
|
||||
// load HLE modules
|
||||
|
|
|
@ -6,6 +6,9 @@ struct PPCInterpreter_t;
|
|||
#define OSLIB_FUNCTIONTABLE_TYPE_FUNCTION (1)
|
||||
#define OSLIB_FUNCTIONTABLE_TYPE_POINTER (2)
|
||||
|
||||
void osLib_save(MemStreamWriter& s);
|
||||
void osLib_restore(MemStreamReader& s);
|
||||
|
||||
void osLib_load();
|
||||
void osLib_generateHashFromName(const char* name, uint32* hashA, uint32* hashB);
|
||||
sint32 osLib_getFunctionIndex(const char* libraryName, const char* functionName);
|
||||
|
|
|
@ -242,6 +242,29 @@ namespace camera
|
|||
g_cameraCounter = 0;
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("camera");
|
||||
|
||||
s.writePODVector(g_table_cameraHandles);
|
||||
s.writePODVector(g_activeCameraInstances);
|
||||
s.writeAtomic(g_cameraCounter);
|
||||
s.writeMPTR(g_alarm_camera);
|
||||
s.writeMPTR(g_cameraHandlerParam);
|
||||
}
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("camera");
|
||||
|
||||
std::unique_lock<std::recursive_mutex> _lock(g_mutex_camera);
|
||||
|
||||
s.readPODVector(g_table_cameraHandles);
|
||||
s.readPODVector(g_activeCameraInstances);
|
||||
s.readAtomic(g_cameraCounter);
|
||||
s.readMPTR(g_alarm_camera);
|
||||
s.readMPTR(g_cameraHandlerParam);
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
reset();
|
||||
|
@ -253,5 +276,4 @@ namespace camera
|
|||
cafeExportRegister("camera", CAMClose, LogType::Placeholder);
|
||||
cafeExportRegister("camera", CAMSubmitTargetSurface, LogType::Placeholder);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -6,5 +6,8 @@ namespace camera
|
|||
sint32 CAMOpen(sint32 camHandle);
|
||||
sint32 CAMClose(sint32 camHandle);
|
||||
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
};
|
|
@ -316,54 +316,64 @@ namespace coreinit
|
|||
}
|
||||
};
|
||||
|
||||
void ci_Save(MemStreamWriter& s)
|
||||
void coreinit_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_S", 15);
|
||||
s.writeSection("coreinit");
|
||||
|
||||
s.writeData(gCoreinitData, sizeof(coreinitData_t));
|
||||
s.writeBE(placeholderFont);
|
||||
s.writeBE(placeholderFontSize);
|
||||
|
||||
using namespace coreinit;
|
||||
ci_CodeGen_Save(s);
|
||||
ci_DynLoad_Save(s);
|
||||
ci_FG_Save(s);
|
||||
ci_GHS_Save(s);
|
||||
ci_IPC_Save(s);
|
||||
ci_LockedCache_Save(s);
|
||||
ci_MEM_Save(s);
|
||||
ci_MemoryMapping_Save(s);
|
||||
ci_MessageQueue_Save(s);
|
||||
ci_OverlayArena_Save(s);
|
||||
ci_Sync_Save(s);
|
||||
ci_SysHeap_Save(s);
|
||||
ci_SystemInfo_Save(s);
|
||||
coreinit_Init_Save(s);
|
||||
coreinit::SysHeap_Save(s);
|
||||
coreinit::Thread_Save(s);
|
||||
coreinit::MEM_Save(s);
|
||||
coreinit::FG_Save(s);
|
||||
coreinit::OverlayArena_Save(s);
|
||||
coreinit::DynLoad_Save(s);
|
||||
coreinit::GHS_Save(s);
|
||||
coreinit::LockedCache_Save(s);
|
||||
coreinit::Alarm_Save(s);
|
||||
coreinit::FS_Save(s);
|
||||
coreinit::SystemInfo_Save(s);
|
||||
coreinit::Synchronization_Save(s);
|
||||
coreinit::MessageQueue_Save(s);
|
||||
coreinit::IPC_Save(s);
|
||||
coreinit::MemoryMapping_Save(s);
|
||||
coreinit::CodeGen_Save(s);
|
||||
coreinit_Callbacks_Save(s);
|
||||
}
|
||||
|
||||
void ci_Restore(MemStreamReader& s)
|
||||
void coreinit_restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_S") == 0);
|
||||
s.readSection("coreinit");
|
||||
|
||||
bool recreate = false;
|
||||
if (recreate)
|
||||
coreinit::__OSDeleteAllActivePPCThreads();
|
||||
|
||||
s.readData(gCoreinitData, sizeof(coreinitData_t));
|
||||
placeholderFont = s.readBE<MPTR>();
|
||||
placeholderFontSize = s.readBE<sint32>();
|
||||
s.readBE(placeholderFont);
|
||||
s.readBE(placeholderFontSize);
|
||||
|
||||
using namespace coreinit;
|
||||
ci_CodeGen_Restore(s);
|
||||
ci_DynLoad_Restore(s);
|
||||
ci_FG_Restore(s);
|
||||
ci_GHS_Restore(s);
|
||||
ci_IPC_Restore(s);
|
||||
ci_LockedCache_Restore(s);
|
||||
ci_MEM_Restore(s);
|
||||
ci_MemoryMapping_Restore(s);
|
||||
ci_MessageQueue_Restore(s);
|
||||
ci_OverlayArena_Restore(s);
|
||||
ci_Sync_Restore(s);
|
||||
ci_SysHeap_Restore(s);
|
||||
ci_SystemInfo_Restore(s);
|
||||
coreinit_Init_Restore(s);
|
||||
coreinit::SysHeap_Restore(s);
|
||||
coreinit::Thread_Restore(s, recreate);
|
||||
coreinit::MEM_Restore(s);
|
||||
coreinit::FG_Restore(s);
|
||||
coreinit::OverlayArena_Restore(s);
|
||||
coreinit::DynLoad_Restore(s);
|
||||
coreinit::GHS_Restore(s);
|
||||
coreinit::LockedCache_Restore(s);
|
||||
coreinit::Alarm_Restore(s);
|
||||
coreinit::FS_Restore(s);
|
||||
coreinit::SystemInfo_Restore(s);
|
||||
coreinit::Synchronization_Restore(s);
|
||||
coreinit::MessageQueue_Restore(s);
|
||||
coreinit::IPC_Restore(s);
|
||||
coreinit::MemoryMapping_Restore(s);
|
||||
coreinit::CodeGen_Restore(s);
|
||||
coreinit_Callbacks_Restore(s);
|
||||
}
|
||||
|
||||
void coreinit_load()
|
||||
|
|
|
@ -11,15 +11,15 @@ void InitializeAsyncCallback();
|
|||
void coreinitAsyncCallback_add(MPTR functionMPTR, uint32 numParameters, uint32 r3 = 0, uint32 r4 = 0, uint32 r5 = 0, uint32 r6 = 0, uint32 r7 = 0, uint32 r8 = 0, uint32 r9 = 0, uint32 r10 = 0);
|
||||
void coreinitAsyncCallback_addWithLock(MPTR functionMPTR, uint32 numParameters, uint32 r3 = 0, uint32 r4 = 0, uint32 r5 = 0, uint32 r6 = 0, uint32 r7 = 0, uint32 r8 = 0, uint32 r9 = 0, uint32 r10 = 0);
|
||||
|
||||
void ci_Callbacks_Save(MemStreamWriter& s);
|
||||
void ci_Callbacks_Restore(MemStreamReader& s);
|
||||
void coreinit_Callbacks_Save(MemStreamWriter& s);
|
||||
void coreinit_Callbacks_Restore(MemStreamReader& s);
|
||||
|
||||
// misc
|
||||
|
||||
void coreinit_load();
|
||||
void coreinit_save(MemStreamWriter& s);
|
||||
void coreinit_restore(MemStreamReader& s);
|
||||
|
||||
void ci_Save(MemStreamWriter& s);
|
||||
void ci_Restore(MemStreamReader& s);
|
||||
void coreinit_load();
|
||||
|
||||
// coreinit shared memory
|
||||
|
||||
|
@ -41,8 +41,8 @@ extern coreinitData_t* gCoreinitData;
|
|||
// coreinit init
|
||||
void coreinit_start(PPCInterpreter_t* hCPU);
|
||||
|
||||
void ci_Init_Save(MemStreamWriter& s);
|
||||
void ci_Init_Restore(MemStreamReader& s);
|
||||
void coreinit_Init_Save(MemStreamWriter& s);
|
||||
void coreinit_Init_Restore(MemStreamReader& s);
|
||||
|
||||
MPTR OSAllocFromSystem(uint32 size, uint32 alignment);
|
||||
void OSFreeToSystem(MPTR mem);
|
||||
|
|
|
@ -305,18 +305,18 @@ namespace coreinit
|
|||
__OSUnlockScheduler();
|
||||
}
|
||||
|
||||
void ci_Alarm_Save(MemStreamWriter& s)
|
||||
void Alarm_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_A_S", 15);
|
||||
s.writeSection("coreinit_Alarm");
|
||||
|
||||
s.writeBE(g_alarmEvent.GetMPTR());
|
||||
s.writeBE(g_alarmThread.GetMPTR());
|
||||
s.writeBE(_g_alarmThreadStack.GetMPTR());
|
||||
s.writeBE(_g_alarmThreadName.GetMPTR());
|
||||
s.writeMPTR(g_alarmEvent);
|
||||
s.writeMPTR(g_alarmThread);
|
||||
s.writeMPTR(_g_alarmThreadStack);
|
||||
s.writeMPTR(_g_alarmThreadName);
|
||||
|
||||
s.writeBE(coreinit_getOSTime());
|
||||
|
||||
s.writeBE(g_activeAlarms.size());
|
||||
s.writeBE((uint64)g_activeAlarms.size());
|
||||
for (auto& itr : g_activeAlarms)
|
||||
{
|
||||
s.writeBE(memory_getVirtualOffsetFromPointer(itr.first));
|
||||
|
@ -324,23 +324,21 @@ namespace coreinit
|
|||
}
|
||||
}
|
||||
|
||||
void ci_Alarm_Restore(MemStreamReader& s)
|
||||
void Alarm_Restore(MemStreamReader& s)
|
||||
{
|
||||
OSAlarm_Shutdown();
|
||||
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_A_S") == 0);
|
||||
s.readSection("coreinit_Alarm");
|
||||
|
||||
g_alarmEvent = (OSEvent*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
g_alarmThread = (OSThread_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_g_alarmThreadStack = (uint8*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_g_alarmThreadName = (char*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readMPTR(g_alarmEvent);
|
||||
s.readMPTR(g_alarmThread);
|
||||
s.readMPTR(_g_alarmThreadStack);
|
||||
s.readMPTR(_g_alarmThreadName);
|
||||
|
||||
uint64 currentTime = coreinit_getOSTime();
|
||||
uint64_t timeOffset = currentTime - s.readBE<uint64_t>();
|
||||
|
||||
size_t alms = s.readBE<size_t>();
|
||||
size_t alms = s.readBE<uint64>();
|
||||
for (size_t alm = 0; alm < alms; alm++)
|
||||
{
|
||||
OSAlarm_t* alarm = (OSAlarm_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
|
|
|
@ -47,8 +47,8 @@ namespace coreinit
|
|||
|
||||
void OSAlarm_Shutdown();
|
||||
|
||||
void ci_Alarm_Save(MemStreamWriter& s);
|
||||
void ci_Alarm_Restore(MemStreamReader& s);
|
||||
void Alarm_Save(MemStreamWriter& s);
|
||||
void Alarm_Restore(MemStreamReader& s);
|
||||
|
||||
void alarm_update();
|
||||
|
||||
|
|
|
@ -31,14 +31,14 @@ struct CoreinitAsyncCallback
|
|||
s_asyncCallbackSpinlock.unlock();
|
||||
}
|
||||
|
||||
static std::vector<struct CoreinitAsyncCallback*>* getPoolPtr()
|
||||
static std::vector<struct CoreinitAsyncCallback*>& getPool()
|
||||
{
|
||||
return &s_asyncCallbackPool;
|
||||
return s_asyncCallbackPool;
|
||||
}
|
||||
|
||||
static std::vector<struct CoreinitAsyncCallback*>* getQueuePtr()
|
||||
static std::vector<struct CoreinitAsyncCallback*>& getQueue()
|
||||
{
|
||||
return &s_asyncCallbackQueue;
|
||||
return s_asyncCallbackQueue;
|
||||
}
|
||||
|
||||
friend void ci_Callbacks_Save(MemStreamWriter& s);
|
||||
|
@ -117,48 +117,26 @@ void coreinitAsyncCallback_add(MPTR functionMPTR, uint32 numParameters, uint32 r
|
|||
coreinitAsyncCallback_addWithLock(functionMPTR, numParameters, r3, r4, r5, r6, r7, r8, r9, r10);
|
||||
}
|
||||
|
||||
void ci_Callbacks_Save(MemStreamWriter& s)
|
||||
void coreinit_Callbacks_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_C_S", 15);
|
||||
|
||||
s.writeBE(g_coreinitCallbackThread.GetMPTR());
|
||||
s.writeBE(_g_coreinitCallbackThreadStack.GetMPTR());
|
||||
s.writeBE(g_asyncCallbackAsync.GetMPTR());
|
||||
s.writeBE(_g_coreinitCBThreadName.GetMPTR());
|
||||
|
||||
std::vector<struct CoreinitAsyncCallback*>* pool = CoreinitAsyncCallback::getPoolPtr();
|
||||
size_t poolSize = pool->size();
|
||||
s.writeBE(poolSize);
|
||||
s.writeData(pool, sizeof(CoreinitAsyncCallback) * poolSize);
|
||||
|
||||
std::vector<struct CoreinitAsyncCallback*>* queue = CoreinitAsyncCallback::getQueuePtr();
|
||||
size_t queueSize = queue->size();
|
||||
s.writeBE(queueSize);
|
||||
s.writeData(queue, sizeof(CoreinitAsyncCallback) * queueSize);
|
||||
s.writeSection("coreinit_Callbacks");
|
||||
s.writeMPTR(g_coreinitCallbackThread);
|
||||
s.writeMPTR(_g_coreinitCallbackThreadStack);
|
||||
s.writeMPTR(g_asyncCallbackAsync);
|
||||
s.writeMPTR(_g_coreinitCBThreadName);
|
||||
s.writePODVector(CoreinitAsyncCallback::getPool());
|
||||
s.writePODVector(CoreinitAsyncCallback::getQueue());
|
||||
}
|
||||
|
||||
void ci_Callbacks_Restore(MemStreamReader& s)
|
||||
void coreinit_Callbacks_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_C_S") == 0);
|
||||
|
||||
g_coreinitCallbackThread = (OSThread_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_g_coreinitCallbackThreadStack = (uint8*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
g_asyncCallbackAsync = (coreinit::OSSemaphore*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_g_coreinitCBThreadName = (char*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
|
||||
std::vector<struct CoreinitAsyncCallback*>* pool = CoreinitAsyncCallback::getPoolPtr();
|
||||
size_t poolSize = s.readBE<size_t>();
|
||||
pool->clear();
|
||||
pool->resize(poolSize);
|
||||
s.readData(pool, sizeof(CoreinitAsyncCallback) * poolSize);
|
||||
|
||||
std::vector<struct CoreinitAsyncCallback*>* queue = CoreinitAsyncCallback::getPoolPtr();
|
||||
size_t queueSize = s.readBE<size_t>();
|
||||
queue->clear();
|
||||
queue->resize(queueSize);
|
||||
s.readData(queue, sizeof(CoreinitAsyncCallback) * queueSize);
|
||||
s.readSection("coreinit_Callbacks");
|
||||
s.readMPTR(g_coreinitCallbackThread);
|
||||
s.readMPTR(_g_coreinitCallbackThreadStack);
|
||||
s.readMPTR(g_asyncCallbackAsync);
|
||||
s.readMPTR(_g_coreinitCBThreadName);
|
||||
s.readPODVector(CoreinitAsyncCallback::getPool());
|
||||
s.readPODVector(CoreinitAsyncCallback::getQueue());
|
||||
}
|
||||
|
||||
void InitializeAsyncCallback()
|
||||
|
|
|
@ -136,18 +136,15 @@ namespace coreinit
|
|||
return true;
|
||||
}
|
||||
|
||||
void ci_CodeGen_Save(MemStreamWriter& s)
|
||||
void CodeGen_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_CG_S", 15);
|
||||
s.writeSection("coreinit_CodeGen");
|
||||
s.writeData(&coreinitCodeGen, sizeof(coreinitCodeGen));
|
||||
}
|
||||
|
||||
void ci_CodeGen_Restore(MemStreamReader& s)
|
||||
void CodeGen_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_CG_S") == 0);
|
||||
|
||||
s.readSection("coreinit_CodeGen");
|
||||
s.readData(&coreinitCodeGen, sizeof(coreinitCodeGen));
|
||||
}
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ namespace coreinit
|
|||
void codeGenHandleICBI(uint32 ea);
|
||||
bool codeGenShouldAvoid();
|
||||
|
||||
void ci_CodeGen_Save(MemStreamWriter& s);
|
||||
void ci_CodeGen_Restore(MemStreamReader& s);
|
||||
void CodeGen_Save(MemStreamWriter& s);
|
||||
void CodeGen_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeCodeGen();
|
||||
}
|
|
@ -129,26 +129,22 @@ namespace coreinit
|
|||
return 0;
|
||||
}
|
||||
|
||||
void ci_DynLoad_Save(MemStreamWriter& s)
|
||||
void DynLoad_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_DL_S", 15);
|
||||
|
||||
s.writeSection("coreinit_DynLoad");
|
||||
s.writeBE(_osDynLoadFuncAlloc);
|
||||
s.writeBE(_osDynLoadFuncFree);
|
||||
s.writeBE(_osDynLoadTLSFuncAlloc);
|
||||
s.writeBE(_osDynLoadTLSFuncFree);
|
||||
}
|
||||
|
||||
void ci_DynLoad_Restore(MemStreamReader& s)
|
||||
void DynLoad_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_DL_S") == 0);
|
||||
|
||||
_osDynLoadFuncAlloc = s.readBE<MPTR>();
|
||||
_osDynLoadFuncFree = s.readBE<MPTR>();
|
||||
_osDynLoadTLSFuncAlloc = s.readBE<MPTR>();
|
||||
_osDynLoadTLSFuncFree = s.readBE<MPTR>();
|
||||
s.readSection("coreinit_DynLoad");
|
||||
s.readBE(_osDynLoadFuncAlloc);
|
||||
s.readBE(_osDynLoadFuncFree);
|
||||
s.readBE(_osDynLoadTLSFuncAlloc);
|
||||
s.readBE(_osDynLoadTLSFuncFree);
|
||||
}
|
||||
|
||||
void InitializeDynLoad()
|
||||
|
|
|
@ -14,8 +14,8 @@ namespace coreinit
|
|||
void OSDynLoad_Release(uint32 moduleHandle);
|
||||
uint32 OSDynLoad_FindExport(uint32 moduleHandle, uint32 isData, const char* exportName, betype<MPTR>* addrOut);
|
||||
|
||||
void ci_DynLoad_Save(MemStreamWriter& s);
|
||||
void ci_DynLoad_Restore(MemStreamReader& s);
|
||||
void DynLoad_Save(MemStreamWriter& s);
|
||||
void DynLoad_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeDynLoad();
|
||||
}
|
|
@ -191,23 +191,19 @@ namespace coreinit
|
|||
osLib_returnFromFunction(hCPU, r ? 1 : 0);
|
||||
}
|
||||
|
||||
void ci_FG_Save(MemStreamWriter& s)
|
||||
void FG_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_FG_S", 15);
|
||||
|
||||
s.writeBE(fgAddr.GetMPTR());
|
||||
s.writeBE(fgSaveAreaAddr.GetMPTR());
|
||||
s.writeSection("coreinit_FG");
|
||||
s.writeMPTR(fgAddr);
|
||||
s.writeMPTR(fgSaveAreaAddr);
|
||||
s.writeData(&fgAreaEntries, sizeof(fgAreaEntries) * FG_BUCKET_AREA_COUNT);
|
||||
}
|
||||
|
||||
void ci_FG_Restore(MemStreamReader& s)
|
||||
void FG_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_FG_S") == 0);
|
||||
|
||||
fgAddr = memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
fgSaveAreaAddr = memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readSection("coreinit_FG");
|
||||
s.readMPTR(fgAddr);
|
||||
s.readMPTR(fgSaveAreaAddr);
|
||||
s.readData(&fgAreaEntries, sizeof(fgAreaEntries) * FG_BUCKET_AREA_COUNT);
|
||||
}
|
||||
|
||||
|
|
|
@ -13,8 +13,8 @@ namespace coreinit
|
|||
|
||||
void InitForegroundBucket();
|
||||
|
||||
void ci_FG_Save(MemStreamWriter& s);
|
||||
void ci_FG_Restore(MemStreamReader& s);
|
||||
void FG_Save(MemStreamWriter& s);
|
||||
void FG_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeFG();
|
||||
}
|
|
@ -2638,38 +2638,30 @@ namespace coreinit
|
|||
return FSA_RESULT::OK;
|
||||
}
|
||||
|
||||
void ci_FS_Save(MemStreamWriter& s)
|
||||
void FS_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_FS_S", 15);
|
||||
s.writeSection("coreinit_FS");
|
||||
s.writeData(g_fsRegisteredClientBodies, sizeof(FSClientBody_t));
|
||||
s.writeBE(_sdCard01Mounted);
|
||||
s.writeBE(_mlc01Mounted);
|
||||
s.writeBE(_tempFSSpace.GetMPTR());
|
||||
size_t s_fsa_activeClients_size = s_fsa_activeClients.size();
|
||||
s.writeBE(s_fsa_activeClients_size);
|
||||
s.writeData(&s_fsa_activeClients, sizeof(FSAClientHandle) * s_fsa_activeClients_size);
|
||||
s.writeBE(s_fsaIpcPool.GetMPTR());
|
||||
s.writeBE(s_fsaIpcPoolBuffer.GetMPTR());
|
||||
s.writeBE(s_fsaIpcPoolBufferNumItems.GetMPTR());
|
||||
s.writeBool(_sdCard01Mounted);
|
||||
s.writeBool(_mlc01Mounted);
|
||||
s.writeMPTR(_tempFSSpace);
|
||||
s.writePODVector(s_fsa_activeClients);
|
||||
s.writeMPTR(s_fsaIpcPool);
|
||||
s.writeMPTR(s_fsaIpcPoolBuffer);
|
||||
s.writeMPTR(s_fsaIpcPoolBufferNumItems);
|
||||
}
|
||||
|
||||
void ci_FS_Restore(MemStreamReader& s)
|
||||
void FS_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_FS_S") == 0);
|
||||
|
||||
s.readSection("coreinit_FS");
|
||||
s.readData(g_fsRegisteredClientBodies, sizeof(FSClientBody_t));
|
||||
_sdCard01Mounted = s.readBE<bool>();
|
||||
_mlc01Mounted = s.readBE<bool>();
|
||||
_tempFSSpace = memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
size_t s_fsa_activeClients_size = s.readBE<size_t>();
|
||||
s_fsa_activeClients.clear();
|
||||
s_fsa_activeClients.resize(s_fsa_activeClients_size);
|
||||
s.readData(&s_fsa_activeClients, sizeof(FSAClientHandle) * s_fsa_activeClients_size);
|
||||
s_fsaIpcPool = (IPCBufPool_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_fsaIpcPoolBuffer = memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_fsaIpcPoolBufferNumItems = (uint32be*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readBool(_sdCard01Mounted);
|
||||
s.readBool(_mlc01Mounted);
|
||||
s.readMPTR(_tempFSSpace);
|
||||
s.readPODVector(s_fsa_activeClients);
|
||||
s.readMPTR(s_fsaIpcPool);
|
||||
s.readMPTR(s_fsaIpcPoolBuffer);
|
||||
s.readMPTR(s_fsaIpcPoolBufferNumItems);
|
||||
}
|
||||
|
||||
void InitializeFS()
|
||||
|
|
|
@ -308,8 +308,8 @@ namespace coreinit
|
|||
|
||||
FS_VOLSTATE FSGetVolumeState(FSClient_t* fsClient);
|
||||
|
||||
void ci_FS_Save(MemStreamWriter& s);
|
||||
void ci_FS_Restore(MemStreamReader& s);
|
||||
void FS_Save(MemStreamWriter& s);
|
||||
void FS_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeFS();
|
||||
}; // namespace coreinit
|
||||
|
|
|
@ -258,24 +258,22 @@ namespace coreinit
|
|||
return memory_getPointerFromVirtualOffset(_swapEndianU32(tlsBlock->addr) + _swapEndianU32(tlsIndex->ukn04));
|
||||
}
|
||||
|
||||
void ci_GHS_Save(MemStreamWriter& s)
|
||||
void GHS_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_GHS_S", 15);
|
||||
|
||||
s.writeBE(g_ghs_data.GetMPTR());
|
||||
s.writeBE(_flockMutexArray.GetMPTR());
|
||||
s.writeData(_flockMutexMask, sizeof(bool) * GHS_FOPEN_MAX);
|
||||
s.writeSection("coreinit_GHS");
|
||||
s.writeMPTR(g_ghs_data);
|
||||
s.writeMPTR(_flockMutexArray);
|
||||
s.writeData(reinterpret_cast<uint8*>(_flockMutexMask), sizeof(uint8) * GHS_FOPEN_MAX);
|
||||
}
|
||||
|
||||
void ci_GHS_Restore(MemStreamReader& s)
|
||||
void GHS_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_GHS_S") == 0);
|
||||
|
||||
g_ghs_data = (GHSAccessibleData*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_flockMutexArray = (coreinit::OSMutex*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readData(_flockMutexMask, sizeof(bool) * GHS_FOPEN_MAX);
|
||||
s.readSection("coreinit_GHS");
|
||||
s.readMPTR(g_ghs_data);
|
||||
s.readMPTR(_flockMutexArray);
|
||||
uint8 _flockMutexMaskTmp[GHS_FOPEN_MAX] = { 0 };
|
||||
s.readData(_flockMutexMaskTmp, sizeof(uint8) * GHS_FOPEN_MAX);
|
||||
memcpy(_flockMutexMask, reinterpret_cast<bool*>(_flockMutexMaskTmp), sizeof(bool) * GHS_FOPEN_MAX);
|
||||
}
|
||||
|
||||
void InitializeGHS()
|
||||
|
|
|
@ -4,8 +4,8 @@ namespace coreinit
|
|||
{
|
||||
void PrepareGHSRuntime();
|
||||
|
||||
void ci_GHS_Save(MemStreamWriter& s);
|
||||
void ci_GHS_Restore(MemStreamReader& s);
|
||||
void GHS_Save(MemStreamWriter& s);
|
||||
void GHS_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeGHS();
|
||||
};
|
|
@ -462,32 +462,28 @@ namespace coreinit
|
|||
return r;
|
||||
}
|
||||
|
||||
void ci_IPC_Save(MemStreamWriter& s)
|
||||
void IPC_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_IPC_S", 15);
|
||||
|
||||
s.writeBE(s_ipcResourceBuffers.GetMPTR());
|
||||
s.writeBE(s_ipcDriver.GetMPTR());
|
||||
s.writeBE(gIPCThread.GetMPTR());
|
||||
s.writeBE(_gIPCThreadStack.GetMPTR());
|
||||
s.writeBE(_gIPCThreadNameStorage.GetMPTR());
|
||||
s.writeBE(gIPCThreadMsgQueue.GetMPTR());
|
||||
s.writeBE(_gIPCThreadSemaphoreStorage.GetMPTR());
|
||||
s.writeSection("coreinit_IPC");
|
||||
s.writeMPTR(s_ipcResourceBuffers);
|
||||
s.writeMPTR(s_ipcDriver);
|
||||
s.writeMPTR(gIPCThread);
|
||||
s.writeMPTR(_gIPCThreadStack);
|
||||
s.writeMPTR(_gIPCThreadNameStorage);
|
||||
s.writeMPTR(gIPCThreadMsgQueue);
|
||||
s.writeMPTR(_gIPCThreadSemaphoreStorage);
|
||||
}
|
||||
|
||||
void ci_IPC_Restore(MemStreamReader& s)
|
||||
void IPC_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_IPC_S") == 0);
|
||||
|
||||
s_ipcResourceBuffers = (IPCResourceBuffer*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_ipcDriver = (IPCDriver*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
gIPCThread = (OSThread_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_gIPCThreadStack = memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_gIPCThreadNameStorage = memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
gIPCThreadMsgQueue = (OSMessageQueue*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_gIPCThreadSemaphoreStorage = (OSMessage*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readSection("coreinit_IPC");
|
||||
s.readMPTR(s_ipcResourceBuffers);
|
||||
s.readMPTR(s_ipcDriver);
|
||||
s.readMPTR(gIPCThread);
|
||||
s.readMPTR(_gIPCThreadStack);
|
||||
s.readMPTR(_gIPCThreadNameStorage);
|
||||
s.readMPTR(gIPCThreadMsgQueue);
|
||||
s.readMPTR(_gIPCThreadSemaphoreStorage);
|
||||
}
|
||||
|
||||
void InitializeIPC()
|
||||
|
|
|
@ -12,8 +12,8 @@ namespace coreinit
|
|||
IOS_ERROR IOS_Ioctlv(IOSDevHandle devHandle, uint32 requestId, uint32 numIn, uint32 numOut, IPCIoctlVector* vec);
|
||||
IOS_ERROR IOS_IoctlvAsync(IOSDevHandle devHandle, uint32 requestId, uint32 numIn, uint32 numOut, IPCIoctlVector* vec, MEMPTR<void> asyncResultFunc, MEMPTR<void> asyncResultUserParam);
|
||||
|
||||
void ci_IPC_Save(MemStreamWriter& s);
|
||||
void ci_IPC_Restore(MemStreamReader& s);
|
||||
void IPC_Save(MemStreamWriter& s);
|
||||
void IPC_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeIPC();
|
||||
};
|
|
@ -216,24 +216,20 @@ void coreinit_start(PPCInterpreter_t* hCPU)
|
|||
hCPU->instructionPointer = _coreinitTitleEntryPoint;
|
||||
}
|
||||
|
||||
void ci_Init_Save(MemStreamWriter& s)
|
||||
void coreinit_Init_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_Init_S", 15);
|
||||
|
||||
s.writeSection("coreinit_Init");
|
||||
s.writeData(_coreinitInfo, sizeof(coreinitInit_t));
|
||||
s.writeBE(argStorageIndex);
|
||||
s.writeBE(g_preinitUserParam.GetMPTR());
|
||||
s.writeMPTR(g_preinitUserParam);
|
||||
s.writeBE(_coreinitTitleEntryPoint);
|
||||
}
|
||||
|
||||
void ci_Init_Restore(MemStreamReader& s)
|
||||
void coreinit_Init_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_Init_S") == 0);
|
||||
|
||||
s.readSection("coreinit_Init");
|
||||
s.readData(_coreinitInfo, sizeof(coreinitInit_t));
|
||||
argStorageIndex = s.readBE<sint32>();
|
||||
g_preinitUserParam = (PreinitUserHeapStruct*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_coreinitTitleEntryPoint = s.readBE<sint32>();
|
||||
s.readBE(argStorageIndex);
|
||||
s.readMPTR(g_preinitUserParam);
|
||||
s.readBE(_coreinitTitleEntryPoint);
|
||||
}
|
|
@ -271,24 +271,20 @@ namespace coreinit
|
|||
osLib_returnFromFunction(hCPU, 0);
|
||||
}
|
||||
|
||||
void ci_LockedCache_Save(MemStreamWriter& s)
|
||||
void LockedCache_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_LC_S", 15);
|
||||
|
||||
s.writeSection("coreinit_LockedCache");
|
||||
s.writeData(lcCacheMask, sizeof(uint8) * PPC_CORE_COUNT * (LC_LOCKED_CACHE_SIZE + LC_LOCKED_CACHE_GRANULARITY - 1) / LC_LOCKED_CACHE_GRANULARITY);
|
||||
s.writeData(lcAllocatedBlocks, sizeof(uint32) * PPC_CORE_COUNT);
|
||||
s.writeBE(_lcDisableErrorCounter);
|
||||
}
|
||||
|
||||
void ci_LockedCache_Restore(MemStreamReader& s)
|
||||
void LockedCache_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_LC_S") == 0);
|
||||
|
||||
s.readSection("coreinit_LockedCache");
|
||||
s.readData(lcCacheMask, sizeof(uint8) * PPC_CORE_COUNT * (LC_LOCKED_CACHE_SIZE + LC_LOCKED_CACHE_GRANULARITY - 1) / LC_LOCKED_CACHE_GRANULARITY);
|
||||
s.readData(lcAllocatedBlocks, sizeof(uint32) * PPC_CORE_COUNT);
|
||||
_lcDisableErrorCounter = s.readBE<sint32>();
|
||||
s.readBE(_lcDisableErrorCounter);
|
||||
}
|
||||
|
||||
void InitializeLC()
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
namespace coreinit
|
||||
{
|
||||
void ci_LockedCache_Save(MemStreamWriter& s);
|
||||
void ci_LockedCache_Restore(MemStreamReader& s);
|
||||
void LockedCache_Save(MemStreamWriter& s);
|
||||
void LockedCache_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeLC();
|
||||
}
|
|
@ -630,44 +630,40 @@ namespace coreinit
|
|||
memset(&g_list3, 0, sizeof(g_list3));
|
||||
}
|
||||
|
||||
void ci_MEM_Save(MemStreamWriter& s)
|
||||
void MEM_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_MEM_S", 15);
|
||||
|
||||
s.writeSection("coreinit_MEM");
|
||||
s.writeBE(sysAreaAllocatorOffset);
|
||||
s.writeBE(g_heapTableCount);
|
||||
s.writeData(g_heapTable, sizeof(MEMHeapBase) * MEM_MAX_HEAP_TABLE);
|
||||
s.writeBE(g_slockInitialized);
|
||||
s.writeBE(g_listsInitialized);
|
||||
s.writeBool(g_slockInitialized);
|
||||
s.writeBool(g_listsInitialized);
|
||||
s.writeData(&g_list1, sizeof(MEMList));
|
||||
s.writeData(&g_list2, sizeof(MEMList));
|
||||
s.writeData(&g_list3, sizeof(MEMList));
|
||||
s.writeData(&gHeapFillValues, sizeof(uint32) * 3);
|
||||
s.writeBE(gHeapGlobalLock.GetMPTR());
|
||||
s.writeMPTR(gHeapGlobalLock);
|
||||
s.writeData(&gDefaultHeap, sizeof(MEMHeapBase));
|
||||
s.writeData(&sHeapBaseHandle, sizeof(MEMHeapBase) * 9);
|
||||
s.writeBE(gDefaultHeapAllocator.GetMPTR());
|
||||
s.writeMPTR(gDefaultHeapAllocator);
|
||||
}
|
||||
|
||||
void ci_MEM_Restore(MemStreamReader& s)
|
||||
void MEM_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_MEM_S") == 0);
|
||||
|
||||
sysAreaAllocatorOffset = s.readBE<MPTR>();
|
||||
g_heapTableCount = s.readBE<sint32>();
|
||||
s.readSection("coreinit_MEM");
|
||||
s.readBE(sysAreaAllocatorOffset);
|
||||
s.readBE(g_heapTableCount);
|
||||
s.readData(g_heapTable, sizeof(MEMHeapBase) * MEM_MAX_HEAP_TABLE);
|
||||
g_slockInitialized = s.readBE<bool>();
|
||||
g_listsInitialized = s.readBE<bool>();
|
||||
s.readBool(g_slockInitialized);
|
||||
s.readBool(g_listsInitialized);
|
||||
s.readData(&g_list1, sizeof(MEMList));
|
||||
s.readData(&g_list2, sizeof(MEMList));
|
||||
s.readData(&g_list3, sizeof(MEMList));
|
||||
s.readData(&gHeapFillValues, sizeof(uint32) * 3);
|
||||
gHeapGlobalLock = (OSSpinLock*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readMPTR(gHeapGlobalLock);
|
||||
s.readData(&gDefaultHeap, sizeof(MEMHeapBase));
|
||||
s.readData(&sHeapBaseHandle, sizeof(MEMHeapBase) * 9);
|
||||
gDefaultHeapAllocator = (MEMAllocatorFunc*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readMPTR(gDefaultHeapAllocator);
|
||||
}
|
||||
|
||||
void InitializeMEM()
|
||||
|
|
|
@ -179,8 +179,8 @@ namespace coreinit
|
|||
|
||||
void InitializeMEMUnitHeap();
|
||||
|
||||
void ci_MEM_Save(MemStreamWriter& s);
|
||||
void ci_MEM_Restore(MemStreamReader& s);
|
||||
void MEM_Save(MemStreamWriter& s);
|
||||
void MEM_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeMEM();
|
||||
}
|
||||
|
|
|
@ -153,25 +153,16 @@ namespace coreinit
|
|||
return 1;
|
||||
}
|
||||
|
||||
void ci_MemoryMapping_Save(MemStreamWriter& s)
|
||||
void MemoryMapping_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_MemMap_S", 15);
|
||||
|
||||
size_t s_allocatedVirtMemorySize = s_allocatedVirtMemory.size();
|
||||
s.writeBE(s_allocatedVirtMemorySize);
|
||||
s.writeData(&s_allocatedVirtMemory, sizeof(OSVirtMemoryEntry) * s_allocatedVirtMemorySize);
|
||||
s.writeSection("coreinit_MemoryMapping ");
|
||||
s.writePODVector(s_allocatedVirtMemory);
|
||||
}
|
||||
|
||||
void ci_MemoryMapping_Restore(MemStreamReader& s)
|
||||
void MemoryMapping_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_MemMap_S") == 0);
|
||||
|
||||
size_t s_allocatedVirtMemorySize = s.readBE<size_t>();
|
||||
s_allocatedVirtMemory.clear();
|
||||
s_allocatedVirtMemory.resize(s_allocatedVirtMemorySize);
|
||||
s.readData(&s_allocatedVirtMemory, sizeof(OSVirtMemoryEntry) * s_allocatedVirtMemorySize);
|
||||
s.readSection("coreinit_MemoryMapping ");
|
||||
s.readPODVector(s_allocatedVirtMemory);
|
||||
}
|
||||
|
||||
void InitializeMemoryMapping()
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
|
||||
namespace coreinit
|
||||
{
|
||||
void ci_MemoryMapping_Save(MemStreamWriter& s);
|
||||
void ci_MemoryMapping_Restore(MemStreamReader& s);
|
||||
void MemoryMapping_Save(MemStreamWriter& s);
|
||||
void MemoryMapping_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeMemoryMapping();
|
||||
}
|
||||
|
|
|
@ -117,22 +117,18 @@ namespace coreinit
|
|||
return g_systemMessageQueue.GetPtr();
|
||||
}
|
||||
|
||||
void ci_MessageQueue_Save(MemStreamWriter& s)
|
||||
void MessageQueue_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_MessQue_S", 15);
|
||||
|
||||
s.writeBE(g_systemMessageQueue.GetMPTR());
|
||||
s.writeBE(_systemMessageQueueArray.GetMPTR());
|
||||
s.writeSection("coreinit_MessageQueue");
|
||||
s.writeMPTR(g_systemMessageQueue);
|
||||
s.writeMPTR(_systemMessageQueueArray);
|
||||
}
|
||||
|
||||
void ci_MessageQueue_Restore(MemStreamReader& s)
|
||||
void MessageQueue_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_MessQue_S") == 0);
|
||||
|
||||
g_systemMessageQueue = (OSMessageQueue*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
_systemMessageQueueArray = (OSMessage*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readSection("coreinit_MessageQueue");
|
||||
s.readMPTR(g_systemMessageQueue);
|
||||
s.readMPTR(_systemMessageQueueArray);
|
||||
}
|
||||
|
||||
void InitializeMessageQueue()
|
||||
|
|
|
@ -36,8 +36,8 @@ namespace coreinit
|
|||
bool OSPeekMessage(OSMessageQueue* msgQueue, OSMessage* msg);
|
||||
sint32 OSSendMessage(OSMessageQueue* msgQueue, OSMessage* msg, uint32 flags);
|
||||
|
||||
void ci_MessageQueue_Save(MemStreamWriter& s);
|
||||
void ci_MessageQueue_Restore(MemStreamReader& s);
|
||||
void MessageQueue_Save(MemStreamWriter& s);
|
||||
void MessageQueue_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeMessageQueue();
|
||||
};
|
|
@ -25,19 +25,15 @@ namespace coreinit
|
|||
*areaSize = MEMORY_OVERLAY_AREA_SIZE;
|
||||
}
|
||||
|
||||
void ci_OverlayArena_Save(MemStreamWriter& s)
|
||||
void OverlayArena_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_OverArea_S", 15);
|
||||
|
||||
s.writeData(&g_coreinitOverlayArena, sizeof(g_coreinitOverlayArena));
|
||||
s.writeSection("coreinit_OverlayArena");
|
||||
s.writeBool(g_coreinitOverlayArena.isEnabled);
|
||||
}
|
||||
void ci_OverlayArena_Restore(MemStreamReader& s)
|
||||
void OverlayArena_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_OverArea_S") == 0);
|
||||
|
||||
s.readData(&g_coreinitOverlayArena, sizeof(g_coreinitOverlayArena));
|
||||
s.readSection("coreinit_OverlayArena");
|
||||
s.readBool(g_coreinitOverlayArena.isEnabled);
|
||||
}
|
||||
|
||||
void InitializeOverlayArena()
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
namespace coreinit
|
||||
{
|
||||
void ci_OverlayArena_Save(MemStreamWriter& s);
|
||||
void ci_OverlayArena_Restore(MemStreamReader& s);
|
||||
void OverlayArena_Save(MemStreamWriter& s);
|
||||
void OverlayArena_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeOverlayArena();
|
||||
};
|
|
@ -614,20 +614,16 @@ namespace coreinit
|
|||
OSWakeupThread(&fastCond->threadQueue);
|
||||
}
|
||||
|
||||
void ci_Sync_Save(MemStreamWriter& s)
|
||||
void Synchronization_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_Sync_S", 15);
|
||||
|
||||
s.writeBE(g_rendezvousEvent.GetMPTR());
|
||||
s.writeSection("coreinit_Synchronization");
|
||||
s.writeMPTR(g_rendezvousEvent);
|
||||
}
|
||||
|
||||
void ci_Sync_Restore(MemStreamReader& s)
|
||||
void Synchronization_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_Sync_S") == 0);
|
||||
|
||||
g_rendezvousEvent = (OSEvent*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readSection("coreinit_Synchronization");
|
||||
s.readMPTR(g_rendezvousEvent);
|
||||
}
|
||||
|
||||
/************* init ************/
|
||||
|
|
|
@ -32,24 +32,20 @@ namespace coreinit
|
|||
_sysHeapFreeCounter = 0;
|
||||
}
|
||||
|
||||
void ci_SysHeap_Save(MemStreamWriter& s)
|
||||
void SysHeap_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_SysHeap_S", 15);
|
||||
|
||||
s.writeSection("coreinit_SysHeap");
|
||||
s.writeData(_sysHeapHandle, sizeof(MEMHeapBase));
|
||||
s.writeBE(_sysHeapAllocCounter);
|
||||
s.writeBE(_sysHeapFreeCounter);
|
||||
}
|
||||
|
||||
void ci_SysHeap_Restore(MemStreamReader& s)
|
||||
void SysHeap_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_SysHeap_S") == 0);
|
||||
|
||||
s.readSection("coreinit_SysHeap");
|
||||
s.readData(_sysHeapHandle, sizeof(MEMHeapBase));
|
||||
_sysHeapAllocCounter = s.readBE<sint32>();
|
||||
_sysHeapFreeCounter = s.readBE<sint32>();
|
||||
s.readBE(_sysHeapAllocCounter);
|
||||
s.readBE(_sysHeapFreeCounter);
|
||||
}
|
||||
|
||||
void InitializeSysHeap()
|
||||
|
|
|
@ -4,8 +4,8 @@ namespace coreinit
|
|||
{
|
||||
void InitSysHeap();
|
||||
|
||||
void ci_SysHeap_Save(MemStreamWriter& s);
|
||||
void ci_SysHeap_Restore(MemStreamReader& s);
|
||||
void SysHeap_Save(MemStreamWriter& s);
|
||||
void SysHeap_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeSysHeap();
|
||||
}
|
|
@ -10,20 +10,16 @@ namespace coreinit
|
|||
return *g_system_info.GetPtr();
|
||||
}
|
||||
|
||||
void ci_SystemInfo_Save(MemStreamWriter& s)
|
||||
void SystemInfo_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_SysInfo_S", 15);
|
||||
|
||||
s.writeBE(g_system_info.GetMPTR());
|
||||
s.writeSection("coreinit_SysInfo");
|
||||
s.writeMPTR(g_system_info);
|
||||
}
|
||||
|
||||
void ci_SystemInfo_Restore(MemStreamReader& s)
|
||||
void SystemInfo_Restore(MemStreamReader& s)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section, 15);
|
||||
cemu_assert_debug(strcmp(section, "ci_SysInfo_S") == 0);
|
||||
|
||||
g_system_info = (OSSystemInfo*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readSection("coreinit_SysInfo");
|
||||
s.readMPTR(g_system_info);
|
||||
}
|
||||
|
||||
void InitializeSystemInfo()
|
||||
|
|
|
@ -16,8 +16,8 @@ namespace coreinit
|
|||
|
||||
const OSSystemInfo& OSGetSystemInfo();
|
||||
|
||||
void ci_SystemInfo_Save(MemStreamWriter& s);
|
||||
void ci_SystemInfo_Restore(MemStreamReader& s);
|
||||
void SystemInfo_Save(MemStreamWriter& s);
|
||||
void SystemInfo_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeSystemInfo();
|
||||
};
|
||||
|
|
|
@ -1331,12 +1331,13 @@ namespace coreinit
|
|||
}
|
||||
}
|
||||
|
||||
void ci_Thread_Save(MemStreamWriter& s)
|
||||
void Thread_Save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeData("ci_T_S", 15);
|
||||
s.writeSection("coreinit_Thread");
|
||||
|
||||
s.writeBE(g_activeThreadQueue.GetMPTR());
|
||||
s.writeBE(g_coreRunQueue.GetMPTR());
|
||||
s.writeBE((uint8)sSchedulerActive.load());
|
||||
s.writeMPTR(g_activeThreadQueue);
|
||||
s.writeMPTR(g_coreRunQueue);
|
||||
|
||||
s.writeBE(activeThreadCount);
|
||||
for (sint32 i = 0; i < activeThreadCount; i++)
|
||||
|
@ -1345,25 +1346,25 @@ namespace coreinit
|
|||
}
|
||||
for (sint32 i = 0; i < PPC_CORE_COUNT; i++)
|
||||
{
|
||||
s.writeBE(memory_getVirtualOffsetFromPointer(__currentCoreThread[i]));
|
||||
s.writePTR(__currentCoreThread[i]);
|
||||
s.writeBE(s_lehmer_lcg[i]);
|
||||
s.writeBE(s_terminatorThreads[i].terminatorThread.GetMPTR());
|
||||
s.writeBE(s_terminatorThreads[i].threadStack.GetMPTR());
|
||||
s.writeBE(s_terminatorThreads[i].threadName.GetMPTR());
|
||||
s.writeBE(s_terminatorThreads[i].semaphoreQueuedDeallocators.GetMPTR());
|
||||
s.writeMPTR(s_terminatorThreads[i].terminatorThread);
|
||||
s.writeMPTR(s_terminatorThreads[i].threadStack);
|
||||
s.writeMPTR(s_terminatorThreads[i].threadName);
|
||||
s.writeMPTR(s_terminatorThreads[i].semaphoreQueuedDeallocators);
|
||||
s.writeMPTR(_defaultThreadName[i]);
|
||||
}
|
||||
s.writeBE(s_defaultThreads.GetMPTR());
|
||||
s.writeBE(s_stack.GetMPTR());
|
||||
s.writeMPTR(s_defaultThreads);
|
||||
s.writeMPTR(s_stack);
|
||||
}
|
||||
|
||||
void ci_Thread_Restore(MemStreamReader& s, bool recreate)
|
||||
void Thread_Restore(MemStreamReader& s, bool recreate)
|
||||
{
|
||||
char section[16] = { '\0' };
|
||||
s.readData(section,15);
|
||||
cemu_assert_debug(strcmp(section, "ci_T_S") == 0);
|
||||
s.readSection("coreinit_Thread");
|
||||
|
||||
g_activeThreadQueue = (OSThreadQueue*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
g_coreRunQueue = (OSThreadQueue*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
sSchedulerActive.store(s.readBE<uint8>());
|
||||
s.readMPTR(g_activeThreadQueue);
|
||||
s.readMPTR(g_coreRunQueue);
|
||||
|
||||
sint32 prevActiveThreadCount = s.readBE<sint32>();
|
||||
for (sint32 i = 0; i < prevActiveThreadCount; i++)
|
||||
|
@ -1383,15 +1384,16 @@ namespace coreinit
|
|||
}
|
||||
for (sint32 i = 0; i < PPC_CORE_COUNT; i++)
|
||||
{
|
||||
__currentCoreThread[i] = (OSThread_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_lehmer_lcg[i] = s.readBE<uint32>();
|
||||
s_terminatorThreads[i].terminatorThread = (OSThread_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_terminatorThreads[i].threadStack = (uint8*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_terminatorThreads[i].threadName = (char*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_terminatorThreads[i].semaphoreQueuedDeallocators = (OSSemaphore*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readPTR(__currentCoreThread[i]);
|
||||
s.readBE(s_lehmer_lcg[i]);
|
||||
s.readMPTR(s_terminatorThreads[i].terminatorThread);
|
||||
s.readMPTR(s_terminatorThreads[i].threadStack);
|
||||
s.readMPTR(s_terminatorThreads[i].threadName);
|
||||
s.readMPTR(s_terminatorThreads[i].semaphoreQueuedDeallocators);
|
||||
s.readMPTR(_defaultThreadName[i]);
|
||||
}
|
||||
s_defaultThreads = (OSThread_t*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s_stack = (uint8*)memory_getPointerFromVirtualOffset(s.readBE<MPTR>());
|
||||
s.readMPTR(s_defaultThreads);
|
||||
s.readMPTR(s_stack);
|
||||
}
|
||||
|
||||
void SuspendActiveThreads()
|
||||
|
|
|
@ -496,15 +496,15 @@ static_assert(sizeof(OSThread_t) == 0x6A0-4); // todo - determine correct size
|
|||
|
||||
namespace coreinit
|
||||
{
|
||||
void ci_Thread_Save(MemStreamWriter& s);
|
||||
void ci_Thread_Restore(MemStreamReader& s, bool recreate);
|
||||
void Thread_Save(MemStreamWriter& s);
|
||||
void Thread_Restore(MemStreamReader& s, bool recreate);
|
||||
void SuspendActiveThreads();
|
||||
void ResumeActiveThreads();
|
||||
|
||||
void InitializeThread();
|
||||
|
||||
void ci_Sync_Save(MemStreamWriter& s);
|
||||
void ci_Sync_Restore(MemStreamReader& s);
|
||||
void Synchronization_Save(MemStreamWriter& s);
|
||||
void Synchronization_Restore(MemStreamReader& s);
|
||||
|
||||
void InitializeConcurrency();
|
||||
|
||||
|
|
|
@ -108,6 +108,17 @@ void dmaeExport_DMAEGetRetiredTimeStamp(PPCInterpreter_t* hCPU)
|
|||
osLib_returnFromFunction64(hCPU, dmaeRetiredTimestamp);
|
||||
}
|
||||
|
||||
void dmae_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("dmae");
|
||||
s.writeBE(dmaeRetiredTimestamp);
|
||||
}
|
||||
|
||||
void dmae_restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("dmae");
|
||||
s.readBE(dmaeRetiredTimestamp);
|
||||
}
|
||||
|
||||
void dmae_load()
|
||||
{
|
||||
|
|
|
@ -1 +1,4 @@
|
|||
void dmae_save(MemStreamWriter& s);
|
||||
void dmae_restore(MemStreamReader& s);
|
||||
|
||||
void dmae_load();
|
|
@ -1354,6 +1354,29 @@ void export_curl_global_init_mem(PPCInterpreter_t* hCPU)
|
|||
osLib_returnFromFunction(hCPU, result);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nlibcurl");
|
||||
s.writeBE(g_nlibcurl.initialized);
|
||||
s.writeMPTR(g_nlibcurl.proxyConfig);
|
||||
s.writeMPTR(g_nlibcurl.malloc);
|
||||
s.writeMPTR(g_nlibcurl.free);
|
||||
s.writeMPTR(g_nlibcurl.realloc);
|
||||
s.writeMPTR(g_nlibcurl.strdup);
|
||||
s.writeMPTR(g_nlibcurl.calloc);
|
||||
}
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nlibcurl");
|
||||
s.readBE(g_nlibcurl.initialized);
|
||||
s.readMPTR(g_nlibcurl.proxyConfig);
|
||||
s.readMPTR(g_nlibcurl.malloc);
|
||||
s.readMPTR(g_nlibcurl.free);
|
||||
s.readMPTR(g_nlibcurl.realloc);
|
||||
s.readMPTR(g_nlibcurl.strdup);
|
||||
s.readMPTR(g_nlibcurl.calloc);
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
osLib_addFunction("nlibcurl", "curl_global_init_mem", export_curl_global_init_mem);
|
||||
|
|
|
@ -2,5 +2,8 @@
|
|||
|
||||
namespace nlibcurl
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
}
|
|
@ -490,6 +490,18 @@ namespace acp
|
|||
osLib_returnFromFunction(hCPU, 0);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_acp");
|
||||
s.writeBool(sSaveDirMounted);
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_acp");
|
||||
s.readBool(sSaveDirMounted);
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
cafeExportRegister("nn_acp", ACPCheckApplicationDeviceEmulation, LogType::Placeholder);
|
||||
|
|
|
@ -24,6 +24,9 @@ namespace acp
|
|||
ACPStatus ACPCreateSaveDir(uint32 persistentId, ACPDeviceType type);
|
||||
ACPStatus ACPUpdateSaveTimeStamp(uint32 persistentId, uint64 titleId, ACPDeviceType deviceType);;
|
||||
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -664,6 +664,19 @@ void nnActExport_AcquirePrincipalIdByAccountId(PPCInterpreter_t* hCPU)
|
|||
osLib_returnFromFunction(hCPU, result);
|
||||
}
|
||||
|
||||
void nnAct_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_act");
|
||||
s.writeBE(nn::act::g_initializeCount);
|
||||
s.writeBE((uint32)g_isParentalControlCheckEnabled);
|
||||
}
|
||||
void nnAct_restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_act");
|
||||
s.readBE(nn::act::g_initializeCount);
|
||||
g_isParentalControlCheckEnabled = s.readBE<uint32>();
|
||||
}
|
||||
|
||||
// register account functions
|
||||
void nnAct_load()
|
||||
{
|
||||
|
|
|
@ -33,4 +33,7 @@ namespace act
|
|||
}
|
||||
}
|
||||
|
||||
void nnAct_save(MemStreamWriter& s);
|
||||
void nnAct_restore(MemStreamReader& s);
|
||||
|
||||
void nnAct_load();
|
|
@ -36,6 +36,7 @@ namespace nn
|
|||
|
||||
struct AOCCacheEntry
|
||||
{
|
||||
AOCCacheEntry() {};
|
||||
AOCCacheEntry(uint64 titleId) : aocTitleId(titleId) {};
|
||||
|
||||
uint64 aocTitleId;
|
||||
|
@ -149,6 +150,20 @@ namespace nn
|
|||
return AOC_RESULT::ERROR_OK;
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_aoc");
|
||||
s.writePODVector(sAocCache);
|
||||
s.writeBool(sAocCacheGenerated);
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_aoc");
|
||||
s.readPODVector(sAocCache);
|
||||
s.readBool(sAocCacheGenerated);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
cafeExportRegister("nn_aoc", AOC_CalculateWorkBufferSize, LogType::NN_AOC);
|
||||
|
|
|
@ -2,6 +2,9 @@ namespace nn
|
|||
{
|
||||
namespace aoc
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void Initialize();
|
||||
}
|
||||
}
|
|
@ -1714,6 +1714,22 @@ void nnBossNsDataExport_seek(PPCInterpreter_t* hCPU)
|
|||
osLib_returnFromFunction(hCPU, r);
|
||||
}
|
||||
|
||||
void nnBoss_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_boss");
|
||||
s.writeMPTR(nn::boss::g_mutex);
|
||||
s.writeBE(nn::boss::g_initCounter);
|
||||
s.writeBool(nn::boss::g_isInitialized);
|
||||
}
|
||||
|
||||
void nnBoss_restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_boss");
|
||||
s.readMPTR(nn::boss::g_mutex);
|
||||
s.readBE(nn::boss::g_initCounter);
|
||||
s.readBool(nn::boss::g_isInitialized);
|
||||
}
|
||||
|
||||
void nnBoss_load()
|
||||
{
|
||||
OSInitMutexEx(&nn::boss::g_mutex, nullptr);
|
||||
|
|
|
@ -1 +1,4 @@
|
|||
void nnBoss_save(MemStreamWriter& s);
|
||||
void nnBoss_restore(MemStreamReader& s);
|
||||
|
||||
void nnBoss_load();
|
|
@ -739,6 +739,18 @@ namespace nn
|
|||
osLib_returnFromFunction(hCPU, fpdRequest->returnCode);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_fp");
|
||||
s.writeData(&g_fp, sizeof(g_fp));
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_fp");
|
||||
s.readData(&g_fp, sizeof(g_fp));
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
osLib_addFunction("nn_fp", "Initialize__Q2_2nn2fpFv", export_Initialize);
|
||||
|
|
|
@ -3,6 +3,9 @@ namespace nn
|
|||
{
|
||||
namespace fp
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
}
|
||||
}
|
|
@ -74,6 +74,20 @@ namespace nn
|
|||
return BUILD_NN_RESULT(NN_RESULT_LEVEL_SUCCESS, NN_RESULT_MODULE_NN_NDM, 0);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_ndm");
|
||||
s.writeData(s_daemonStatus, sizeof(DAEMON_STATUS) * NUM_DAEMONS);
|
||||
s.writeBE(s_initializeRefCount);
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_ndm");
|
||||
s.readData(s_daemonStatus, sizeof(DAEMON_STATUS) * NUM_DAEMONS);
|
||||
s.readBE(s_initializeRefCount);
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
for(size_t i=0; i<NUM_DAEMONS; i++)
|
||||
|
|
|
@ -2,6 +2,9 @@ namespace nn
|
|||
{
|
||||
namespace ndm
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1015,6 +1015,18 @@ namespace nn::nfp
|
|||
osLib_addFunction("nn_nfp", "GetAmiiboSettingsArgs__Q2_2nn3nfpFPQ3_2nn3nfp18AmiiboSettingsArgs", nnNfpExport_GetAmiiboSettingsArgs);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_nfp");
|
||||
s.writeData(&nfp_data, sizeof(nfp_data));
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_nfp");
|
||||
s.readData(&nfp_data, sizeof(nfp_data));
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
nnNfp_load(); // legacy interface, update these to use cafeExportRegister / cafeExportRegisterFunc
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
namespace nn::nfp
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
}
|
||||
|
||||
|
|
|
@ -110,6 +110,40 @@ namespace nn
|
|||
|
||||
static_assert(GetErrorCodeImpl(0xa119c600) == 1155004);
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_olv");
|
||||
s.writeMPTR(s_OlvReleaseBgThread);
|
||||
s.writeMPTR(s_OlvReleaseBgThreadStack);
|
||||
s.writeMPTR(s_OlvReleaseBgThreadName);
|
||||
s.writeData(&g_ParamPack, sizeof(ParamPackStorage));
|
||||
s.writeData(&g_DiscoveryResults, sizeof(DiscoveryResultStorage));
|
||||
s.writeBE(g_ReportTypes);
|
||||
s.writeBool(g_IsInitialized);
|
||||
s.writeBool(g_IsOnlineMode);
|
||||
s.writeBool(g_IsOfflineDBMode);
|
||||
s.writeBool(OfflineDB_Initialized());
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_olv");
|
||||
s.readMPTR(s_OlvReleaseBgThread);
|
||||
s.readMPTR(s_OlvReleaseBgThreadStack);
|
||||
s.readMPTR(s_OlvReleaseBgThreadName);
|
||||
s.readData(&g_ParamPack, sizeof(ParamPackStorage));
|
||||
s.readData(&g_DiscoveryResults, sizeof(DiscoveryResultStorage));
|
||||
s.readBE(g_ReportTypes);
|
||||
s.readBool(g_IsInitialized);
|
||||
s.readBool(g_IsOnlineMode);
|
||||
s.readBool(g_IsOfflineDBMode);
|
||||
if (s.readBool())
|
||||
{
|
||||
OfflineDB_Shutdown();
|
||||
OfflineDB_LazyInit();
|
||||
}
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
g_ReportTypes = 0;
|
||||
|
|
|
@ -18,6 +18,9 @@ namespace nn
|
|||
|
||||
sint32 GetOlvAccessKey(uint32_t* pOutKey);
|
||||
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
void unload();
|
||||
}
|
||||
|
|
|
@ -17,6 +17,11 @@ namespace nn
|
|||
bool g_offlineDBInitialized = false;
|
||||
ZArchiveReader* g_offlineDBArchive{nullptr};
|
||||
|
||||
bool OfflineDB_Initialized()
|
||||
{
|
||||
return g_offlineDBInitialized;
|
||||
}
|
||||
|
||||
void OfflineDB_LazyInit()
|
||||
{
|
||||
std::scoped_lock _l(g_offlineDBMutex);
|
||||
|
|
|
@ -6,7 +6,9 @@ namespace nn
|
|||
{
|
||||
namespace olv
|
||||
{
|
||||
void OfflineDB_Init();
|
||||
bool OfflineDB_Initialized();
|
||||
|
||||
void OfflineDB_LazyInit();
|
||||
void OfflineDB_Shutdown();
|
||||
|
||||
nnResult OfflineDB_DownloadPostDataListParam_DownloadPostDataList(DownloadedTopicData* downloadedTopicData, DownloadedPostData* downloadedPostData, uint32be* postCountOut, uint32 maxCount, DownloadPostDataListParam* param);
|
||||
|
|
|
@ -1521,6 +1521,18 @@ namespace save
|
|||
osLib_returnFromFunction(hCPU, result);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_save");
|
||||
s.writeMPTR(g_nn_save);
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_save");
|
||||
s.readMPTR(g_nn_save);
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@ namespace nn
|
|||
{
|
||||
namespace save
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
void ResetToDefaultState();
|
||||
|
||||
|
|
|
@ -16,6 +16,18 @@ namespace nn::temp
|
|||
osLib_returnFromFunction(hCPU, 0);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_temp");
|
||||
s.writeBE(tempIdGenerator);
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_temp");
|
||||
s.readBE(tempIdGenerator);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
osLib_addFunction("nn_temp", "TEMPCreateAndInitTempDir", nnTempExport_TEMPCreateAndInitTempDir);
|
||||
|
|
|
@ -2,5 +2,8 @@
|
|||
|
||||
namespace nn::temp
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void Initialize();
|
||||
};
|
|
@ -15,6 +15,18 @@ void nnUdsExport___sti___11_uds_Api_cpp_f5d9abb2(PPCInterpreter_t* hCPU)
|
|||
osLib_returnFromFunction(hCPU, memory_getVirtualOffsetFromPointer(udsWorkspace));
|
||||
}
|
||||
|
||||
void nnUds_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nn_uds");
|
||||
s.writeData(udsWorkspace, sizeof(udsWorkspace_t));
|
||||
}
|
||||
|
||||
void nnUds_restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nn_uds");
|
||||
s.readData(udsWorkspace, sizeof(udsWorkspace_t));
|
||||
}
|
||||
|
||||
/*
|
||||
* Load UDS functions
|
||||
*/
|
||||
|
|
|
@ -1 +1,4 @@
|
|||
void nnUds_save(MemStreamWriter& s);
|
||||
void nnUds_restore(MemStreamReader& s);
|
||||
|
||||
void nnUds_load();
|
|
@ -813,6 +813,28 @@ namespace nsyshid
|
|||
osLib_returnFromFunction(hCPU, 0);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nsyshid");
|
||||
s.writeData(firstDevice, sizeof(HIDDeviceInfo_t));
|
||||
s.writeData(firstHIDClient, sizeof(HIDClient_t));
|
||||
s.writeBE(_lastGeneratedHidHandle);
|
||||
s.writeMPTR(_devicePool);
|
||||
s.writeBE(_devicePoolMask.count());
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nsyshid");
|
||||
s.readData(firstDevice, sizeof(HIDDeviceInfo_t));
|
||||
s.readData(firstHIDClient, sizeof(HIDClient_t));
|
||||
s.readBE(_lastGeneratedHidHandle);
|
||||
s.readMPTR(_devicePool);
|
||||
_devicePoolMask.reset();
|
||||
for (size_t i = 0; i < s.readBE<size_t>(); i++)
|
||||
_devicePoolMask.set(i);
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
osLib_addFunction("nsyshid", "HIDAddClient", export_HIDAddClient);
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#pragma once
|
||||
namespace nsyshid
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void load();
|
||||
}
|
|
@ -2161,6 +2161,32 @@ namespace nsysnet
|
|||
}
|
||||
}
|
||||
|
||||
void nsysnet_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("nsysnet");
|
||||
s.writeMPTR(_ntoa_tempString);
|
||||
s.writeMPTR(_staticHostent);
|
||||
s.writeMPTR(_staticHostentName);
|
||||
s.writeMPTR(_staticHostentPtrList);
|
||||
s.writeMPTR(_staticHostentEntries);
|
||||
s.writePODVector(nsysnet::g_nsslInternalStates);
|
||||
s.writeBool(sockLibReady);
|
||||
s.writeData(virtualSocketTable, sizeof(virtualSocket_t) * WU_SOCKET_LIMIT);
|
||||
}
|
||||
|
||||
void nsysnet_restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("nsysnet");
|
||||
s.readMPTR(_ntoa_tempString);
|
||||
s.readMPTR(_staticHostent);
|
||||
s.readMPTR(_staticHostentName);
|
||||
s.readMPTR(_staticHostentPtrList);
|
||||
s.readMPTR(_staticHostentEntries);
|
||||
s.readPODVector(nsysnet::g_nsslInternalStates);
|
||||
s.readBool(sockLibReady);
|
||||
s.readData(virtualSocketTable, sizeof(virtualSocket_t) * WU_SOCKET_LIMIT);
|
||||
}
|
||||
|
||||
// register nsysnet functions
|
||||
void nsysnet_load()
|
||||
{
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
|
||||
typedef signed int WUSOCKET;
|
||||
|
||||
void nsysnet_save(MemStreamWriter& s);
|
||||
void nsysnet_restore(MemStreamReader& s);
|
||||
|
||||
void nsysnet_load();
|
||||
WUSOCKET nsysnet_createVirtualSocketFromExistingSocket(SOCKET existingSocket);
|
||||
void nsysnet_notifyCloseSharedSocket(SOCKET existingSocket);
|
||||
|
|
|
@ -53,7 +53,8 @@ namespace padscore
|
|||
|
||||
WPADState_t g_wpad_state = kWPADStateMaster;
|
||||
|
||||
struct {
|
||||
struct g_padscore_t
|
||||
{
|
||||
SysAllocator<coreinit::OSAlarm_t> alarm;
|
||||
bool kpad_initialized = false;
|
||||
|
||||
|
@ -746,6 +747,30 @@ namespace padscore
|
|||
OSSetPeriodicAlarm(&g_padscore.alarm, start_tick, period_tick, handler);
|
||||
}
|
||||
|
||||
void save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("padscore");
|
||||
s.writeBool(debugUseDRC1);
|
||||
s.writeBool(g_kpadIsInited);
|
||||
s.writeData(&g_padscore, sizeof(g_padscore_t));
|
||||
s.writeData(g_kpad_ringbuffer, sizeof(KPADUnifiedWpadStatus_t));
|
||||
s.writeBE(g_kpad_ringbuffer_length);
|
||||
s.writeBool(g_wpad_callback_by_kpad);
|
||||
s.writeBE((uint32)g_wpad_state);
|
||||
}
|
||||
|
||||
void restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("padscore");
|
||||
s.readBool(debugUseDRC1);
|
||||
s.readBool(g_kpadIsInited);
|
||||
s.readData(&g_padscore, sizeof(g_padscore_t));
|
||||
s.readData(g_kpad_ringbuffer, sizeof(KPADUnifiedWpadStatus_t));
|
||||
s.readBE(g_kpad_ringbuffer_length);
|
||||
s.readBool(g_wpad_callback_by_kpad);
|
||||
g_wpad_state = (WPADState_t)s.readBE<uint32>();
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
cafeExportRegister("padscore", WPADIsMplsAttached, LogType::InputAPI);
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
namespace padscore
|
||||
{
|
||||
void save(MemStreamWriter& s);
|
||||
void restore(MemStreamReader& s);
|
||||
|
||||
void start();
|
||||
void load();
|
||||
}
|
||||
|
|
|
@ -49,6 +49,16 @@ void ProcUI_SendForegroundMessage()
|
|||
}
|
||||
}
|
||||
|
||||
void procui_save(MemStreamWriter& s)
|
||||
{
|
||||
s.writeSection("proc_ui");
|
||||
}
|
||||
|
||||
void procui_restore(MemStreamReader& s)
|
||||
{
|
||||
s.readSection("proc_ui");
|
||||
}
|
||||
|
||||
void procui_load()
|
||||
{
|
||||
cafeExportRegister("proc_ui", ProcUIRegisterCallback, LogType::ProcUi);
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
|
||||
void procui_save(MemStreamWriter& s);
|
||||
void procui_restore(MemStreamReader& s);
|
||||
|
||||
void procui_load();
|
||||
|
||||
void ProcUI_SendForegroundMessage();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue