Beispiel #1
0
void __startVTimer(VTimer *vt) {
	vt->nvt.active = 1;
	vt->nvt.base = cyclesToUs(CoreTiming::GetTicks());

	if (vt->nvt.schedule != 0 && vt->nvt.handlerAddr != 0)
		__KernelScheduleVTimer(vt, vt->nvt.schedule);
}
u32 sceKernelSetVTimerHandler(u32 uid, u32 scheduleAddr, u32 handlerFuncAddr, u32 commonAddr) {
	if (uid == 0) {
		WARN_LOG(HLE, "sceKernelSetVTimerHandler(%08x, %08x, %08x, %08x): invalid vtimer", uid, scheduleAddr, handlerFuncAddr, commonAddr);
		return SCE_KERNEL_ERROR_ILLEGAL_VTID;
	}

	u32 error;
	VTimer *vt = kernelObjects.Get<VTimer>(uid, error);

	if (error) {
		WARN_LOG(HLE, "%08x=sceKernelSetVTimerHandler(%08x, %08x, %08x, %08x)", error, uid, scheduleAddr, handlerFuncAddr, commonAddr);
		return error;
	}

	DEBUG_LOG(HLE, "sceKernelSetVTimerHandler(%08x, %08x, %08x, %08x)", uid, scheduleAddr, handlerFuncAddr, commonAddr);

	u64 schedule = Memory::Read_U64(scheduleAddr);
	vt->nvt.handlerAddr = handlerFuncAddr;
	if (handlerFuncAddr)
		vt->nvt.commonAddr = commonAddr;

	__KernelScheduleVTimer(vt, schedule);

	return 0;
}
void __rescheduleVTimer(SceUID id, int delay) {
	u32 error;
	VTimer *vt = kernelObjects.Get<VTimer>(id, error);

	if (error)
		return;

	if (delay < 0)
		delay = 100;

	__KernelScheduleVTimer(vt, delay);
}
Beispiel #4
0
void __rescheduleVTimer(SceUID id, u32 delay) {
	u32 error;
	VTimer *vt = kernelObjects.Get<VTimer>(id, error);

	if (error)
		return;

	if (delay < 0)
		delay = 100;

	vt->nvt.schedule += delay;

	__KernelScheduleVTimer(vt, vt->nvt.schedule);
}
Beispiel #5
0
u32 sceKernelSetVTimerHandlerWide(u32 uid, u64 schedule, u32 handlerFuncAddr, u32 commonAddr) {
	DEBUG_LOG(HLE, "sceKernelSetVTimerHandlerWide(%08x, %llu, %08x, %08x)", uid, schedule, handlerFuncAddr, commonAddr);

	u32 error;
	VTimer *vt = kernelObjects.Get<VTimer>(uid, error);

	if (error) {
		WARN_LOG(HLE, "%08x=sceKernelSetVTimerHandlerWide(%08x, %llu, %08x, %08x)", error, uid, schedule, handlerFuncAddr, commonAddr);
		return error;
	}

	vt->nvt.handlerAddr = handlerFuncAddr;
	vt->nvt.commonAddr = commonAddr;

	__KernelScheduleVTimer(vt, schedule);

	return 0;
}