Refactoring, save/restore additional libs

This commit is contained in:
Chris Spegal 2023-10-08 10:34:45 -04:00
parent 288c8d9854
commit 35f6e67903
87 changed files with 1024 additions and 717 deletions

View file

@ -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

View file

@ -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);

View file

@ -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);
}
}
}

View file

@ -6,5 +6,8 @@ namespace camera
sint32 CAMOpen(sint32 camHandle);
sint32 CAMClose(sint32 camHandle);
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
};

View file

@ -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()

View file

@ -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);

View file

@ -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>());

View file

@ -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();

View file

@ -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()

View file

@ -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));
}

View file

@ -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();
}

View file

@ -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()

View file

@ -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();
}

View file

@ -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);
}

View file

@ -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();
}

View file

@ -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()

View file

@ -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

View file

@ -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()

View file

@ -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();
};

View file

@ -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()

View file

@ -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();
};

View file

@ -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);
}

View file

@ -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()

View file

@ -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();
}

View file

@ -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()

View file

@ -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();
}

View file

@ -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()

View file

@ -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();
}

View file

@ -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()

View file

@ -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();
};

View file

@ -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()

View file

@ -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();
};

View file

@ -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 ************/

View file

@ -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()

View file

@ -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();
}

View file

@ -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()

View file

@ -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();
};

View file

@ -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()

View file

@ -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();

View file

@ -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()
{

View file

@ -1 +1,4 @@
void dmae_save(MemStreamWriter& s);
void dmae_restore(MemStreamReader& s);
void dmae_load();

View file

@ -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);

View file

@ -2,5 +2,8 @@
namespace nlibcurl
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
}

View file

@ -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);

View file

@ -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();
}
}

View file

@ -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()
{

View file

@ -33,4 +33,7 @@ namespace act
}
}
void nnAct_save(MemStreamWriter& s);
void nnAct_restore(MemStreamReader& s);
void nnAct_load();

View file

@ -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);

View file

@ -2,6 +2,9 @@ namespace nn
{
namespace aoc
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void Initialize();
}
}

View file

@ -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);

View file

@ -1 +1,4 @@
void nnBoss_save(MemStreamWriter& s);
void nnBoss_restore(MemStreamReader& s);
void nnBoss_load();

View file

@ -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);

View file

@ -3,6 +3,9 @@ namespace nn
{
namespace fp
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
}
}

View file

@ -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++)

View file

@ -2,6 +2,9 @@ namespace nn
{
namespace ndm
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
}
}

View file

@ -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

View file

@ -2,6 +2,9 @@
namespace nn::nfp
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
}

View file

@ -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;

View file

@ -18,6 +18,9 @@ namespace nn
sint32 GetOlvAccessKey(uint32_t* pOutKey);
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
void unload();
}

View file

@ -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);

View file

@ -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);

View file

@ -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()
{

View file

@ -4,6 +4,9 @@ namespace nn
{
namespace save
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
void ResetToDefaultState();

View file

@ -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);

View file

@ -2,5 +2,8 @@
namespace nn::temp
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void Initialize();
};

View file

@ -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
*/

View file

@ -1 +1,4 @@
void nnUds_save(MemStreamWriter& s);
void nnUds_restore(MemStreamReader& s);
void nnUds_load();

View file

@ -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);

View file

@ -1,5 +1,8 @@
#pragma once
namespace nsyshid
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void load();
}

View file

@ -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()
{

View file

@ -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);

View file

@ -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);

View file

@ -4,6 +4,9 @@
namespace padscore
{
void save(MemStreamWriter& s);
void restore(MemStreamReader& s);
void start();
void load();
}

View file

@ -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);

View file

@ -1,4 +1,7 @@
void procui_save(MemStreamWriter& s);
void procui_restore(MemStreamReader& s);
void procui_load();
void ProcUI_SendForegroundMessage();