int sceKernelSysEventDispatch(int ev_type_mask, int ev_id, char* ev_name, void* param, int* result, int break_nonzero, SceSysEventHandler **break_handler) { int oldGp = pspGetGp(); int ret = 0; int oldIntr = suspendIntr(); SceSysEventHandler *cur = g_sysEvHandlers; // C928 while (cur != NULL) { if ((cur->type_mask & ev_type_mask) != 0) { // C984 cur->busy = 1; resumeIntr(oldIntr); pspSetGp(cur->gp); ret = cur->handler(ev_id, ev_name, param, result); oldIntr = suspendIntr(); cur->busy = 0; if (ret < 0 && break_nonzero != 0) { // C9D8 if (break_handler != NULL) *break_handler = cur; break; } ret = 0; } // C934 cur = cur->next; } // C940 resumeIntr(oldIntr); pspSetGp(oldGp); return ret; }
int sceKernelRegisterSysEventHandler(SceSysEventHandler* handler) { int oldIntr1 = suspendIntr(); int oldIntr2 = suspendIntr(); SceSysEventHandler *cur = g_sysEvHandlers; // CA90 while (cur != NULL) { if (cur == handler) break; cur = cur->next; } // CAA4 resumeIntr(oldIntr2); if (cur == NULL) { handler->busy = 0; // CAE0 handler->gp = pspGetGp(); handler->next = g_sysEvHandlers; g_sysEvHandlers = handler; resumeIntr(oldIntr1); return 0; } resumeIntr(oldIntr1); return 0x80020067; }
int sceKernelRegisterResumeHandler(int reg, int (*handler)(int, void*), void *param) { if (reg < 0 || reg >= 32) return -1; int oldIntr = suspendIntr(); SceResumeHandler *cur = &g_resumeHandlers[reg]; cur->handler = handler; cur->param = param; cur->gp = pspGetGp(); resumeIntr(oldIntr); return 0; }
//Subroutine sceUmd_76D356F9 - Address 0x000008B4 u32 sceUmd_76D356F9(s32 (*arg0)(void)) { s32 intrState; intrState = sceKernelCpuSuspendIntr(); g_mediaMan.unk60 = arg0; g_mediaMan.unk36 = pspGetGp(); sceKernelCpuResumeIntr(intrState); return SCE_ERROR_OK; }
//Subroutine sceUmd_3748C4DB - Address 0x00000838 u32 sceUmdRegisterReplaceCallBack(s32 (*umdReplaceCallback)(s32)) { s32 intrState; intrState = sceKernelCpuSuspendIntr(); g_mediaMan.umdReplaceCallback = umdReplaceCallback; g_mediaMan.umdReplaceCallbackGp = pspGetGp(); sceKernelCpuResumeIntr(intrState); return SCE_ERROR_OK; }
//Subroutine sceUmd_D1C80E51 - Address 0x00000720 u32 sceUmdRegisterDeactivateCallBack(s32 (*deactivateCallback)(s32, void *), void *param) { s32 intrState; intrState = sceKernelCpuSuspendIntr(); g_mediaMan.umdDeactivateCallback = deactivateCallback; g_mediaMan.umdDeactivateCallbackParam = param; g_mediaMan.umdDeactivateCallbackGp = pspGetGp(); sceKernelCpuResumeIntr(intrState); return SCE_ERROR_OK; }
//Subroutine sceUmd_63517CBA - Address 0x000005CC u32 sceUmdRegisterMediaPresentCallBack(s32(*MediaPresentCallback)(void *), void *param) { s32 intrState; intrState = sceKernelCpuSuspendIntr(); g_mediaMan.umdMediaPresentCallback = MediaPresentCallback; g_mediaMan.umdMediaPresentCallbackParam = param; g_mediaMan.umdMediaPresentCallbackGp = pspGetGp(); sceKernelCpuResumeIntr(intrState); return SCE_ERROR_OK; }
//Subroutine sceUmd_48EF868C - Address 0x0000053C u32 sceUmdRegisterGetUMDInfoCallBack(s32 (*umdInfoCallback)(SceUmdDiscInfo *), SceUmdDiscInfo *pDiscInfo) { s32 intrState; intrState = sceKernelCpuSuspendIntr(); g_mediaMan.umdInfoCallback = umdInfoCallback; g_mediaMan.umdInfoCallbackDiscInfo = pDiscInfo; g_mediaMan.umdInfoCallbackGp = pspGetGp(); sceKernelCpuResumeIntr(intrState); return SCE_ERROR_OK; }
int sceKernelDispatchResumeHandlers(int unk) { int oldGp = pspGetGp(); SceResumeHandler *cur = &g_resumeHandlers[31]; // CF40 int i; for (i = 0; i < 32; i++) { if (cur->handler != NULL) { // CF80 pspSetGp(cur->gp); cur->handler(unk, cur->param); } cur--; } pspSetGp(oldGp); return 0; }
int sceKernelDispatchSuspendHandlers(int unk) { int oldGp = pspGetGp(); SceSuspendHandler *cur = &g_suspendHandlers[0]; int i; // CEB0 for (i = 0; i < 32; i++) { if (cur->handler != NULL) { // CEF0 pspSetGp(cur->gp); cur->handler(unk, cur->param); } // CEC0 cur++; } pspSetGp(oldGp); return 0; }