public int sceKernelRegisterSubIntrHandler(PspInterrupts PspInterrupt, int HandlerIndex, uint CallbackAddress, uint CallbackArgument) { CheckImplementedInterruptType(PspInterrupt); var HleSubinterruptHandler = HleInterruptManager.GetInterruptHandler(PspInterrupt).SubinterruptHandlers[HandlerIndex]; { HleSubinterruptHandler.Address = CallbackAddress; HleSubinterruptHandler.Argument = CallbackArgument; } return(0); }
protected override void Main() { while (true) { ThreadTaskQueue.HandleEnqueued(); if (!Running) { return; } //Console.Error.WriteLine("Triggered!"); HleInterruptManager.GetInterruptHandler(PspInterrupts.PSP_VBLANK_INT).Trigger(); //PspDisplay.Update(); Thread.Sleep(TimeSpan.FromSeconds(1.0 / 59.94)); } }
protected override void Main() { Console.WriteLine("DisplayComponentThread.Start()"); try { var vSyncTimeIncrement = TimeSpan.FromSeconds(1.0 / (PspDisplay.HorizontalSyncHertz / (double)(PspDisplay.VsyncRow))); //var VSyncTimeIncrement = TimeSpan.FromSeconds(1.0 / (PspDisplay.HorizontalSyncHertz / (double)(PspDisplay.VsyncRow / 2))); // HACK to give more time to render! var endTimeIncrement = TimeSpan.FromSeconds(1.0 / (PspDisplay.HorizontalSyncHertz / (double)(PspDisplay.NumberOfRows))); var vBlankInterruptHandler = _hleInterruptManager.GetInterruptHandler(PspInterrupts.PspVblankInt); while (true) { //Console.WriteLine("[1]"); var startTime = DateTime.UtcNow; var vSyncTime = startTime + vSyncTimeIncrement; var endTime = startTime + endTimeIncrement; ThreadTaskQueue.HandleEnqueued(); if (!Running) { return; } // Draw time _pspDisplay.TriggerDrawStart(); ThreadUtils.SleepUntilUtc(vSyncTime); // VBlank time _pspDisplay.TriggerVBlankStart(); vBlankInterruptHandler.Trigger(); ThreadUtils.SleepUntilUtc(endTime); _pspDisplay.TriggerVBlankEnd(); } } finally { Console.WriteLine("DisplayComponentThread.End()"); } }
protected override void Main() { vBlankInterruptHandler = _hleInterruptManager.GetInterruptHandler(PspInterrupts.PspVblankInt); Console.WriteLine("DisplayComponentThread.Start()"); try { while (Running) { if (triggerStuff) { Step(_pspDisplay.TriggerDrawStart, _pspDisplay.TriggerVBlankStart, _pspDisplay.TriggerVBlankEnd); } else { Thread.Sleep(16.Milliseconds()); } } } finally { Console.WriteLine("DisplayComponentThread.End()"); } }