Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
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));
            }
        }
Ejemplo n.º 3
0
        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()");
            }
        }
Ejemplo n.º 4
0
 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()");
     }
 }