void __KernelInit() { if (kernelRunning) { ERROR_LOG(HLE, "Can't init kernel when kernel is running"); return; } __KernelTimeInit(); __InterruptsInit(); __KernelMemoryInit(); __KernelThreadingInit(); __KernelAlarmInit(); __KernelVTimerInit(); __KernelEventFlagInit(); __KernelMbxInit(); __KernelMutexInit(); __KernelSemaInit(); __IoInit(); __JpegInit(); __AudioInit(); __SasInit(); __AtracInit(); __CccInit(); __DisplayInit(); __GeInit(); __PowerInit(); __UtilityInit(); __UmdInit(); __MpegInit(); __PsmfInit(); __CtrlInit(); __RtcInit(); __SslInit(); __ImposeInit(); __UsbInit(); __FontInit(); __NetInit(); __VaudioInit(); __CheatInit(); SaveState::Init(); // Must be after IO, as it may create a directory // "Internal" PSP libraries __PPGeInit(); kernelRunning = true; INFO_LOG(HLE, "Kernel initialized."); }
SceUID __KernelSetAlarm(u64 ticks, u32 handlerPtr, u32 commonPtr) { if (!alarmInitComplete) __KernelAlarmInit(); Alarm *alarm = new Alarm; SceUID uid = kernelObjects.Create(alarm); alarm->alm.size = sizeof(NativeAlarm); alarm->alm.schedule = CoreTiming::GetTicks() + ticks; alarm->alm.handlerPtr = handlerPtr; alarm->alm.commonPtr = commonPtr; u32 error = __RegisterSubInterruptHandler(PSP_SYSTIMER0_INTR, uid, new AlarmIntrHandler(alarm)); if (error != 0) return error; __KernelScheduleAlarm(alarm, (int) ticks); return uid; }