Example #1
0
        public override void run()
        {
            setLog4jMDC();
            while (!exit_Renamed)
            {
                if (!CoreCtrlActive || CoreMadr == CoreSadr)
                {
                    if (!Emulator.pause && log.TraceEnabled)
                    {
                        log.trace(string.Format("CoreThreadMMIO not active... waiting"));
                    }

                    waitForSync(1000);
                }
                else
                {
                    updateMemoryUnsafeAddr();

                    //if (log.DebugEnabled)
                    {
                        Console.WriteLine(string.Format("CoreThreadMMIO processing 0x{0:X8}", NativeUtils.CoreMadr));
                    }

                    while (coreInterpret())
                    {
                        updateMemoryUnsafeAddr();

                        //if (log.DebugEnabled)
                        {
                            Console.WriteLine(string.Format("CoreThreadMMIO looping at 0x{0:X8}", NativeUtils.CoreMadr));
                        }

                        if (numberRendererThread > 0 && RendererIndexCount > 0)
                        {
                            break;
                        }
                    }

                    int interrupt = CoreInterrupt;
                    if ((interrupt & INTR_STAT_END) != 0)
                    {
                        MMIOHandlerGe.Instance.onGeInterrupt();
                    }

                    if (numberRendererThread > 0 && RendererIndexCount > 0)
                    {
                        ExternalGE.render();
                    }
                }
            }

            Console.WriteLine(string.Format("CoreThreadMMIO exited"));
        }
Example #2
0
        private void executeCommandFINISH(PspGeList list)
        {
            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("FINISH {0}", list));
            }

            list.clearRestart();
            list.finishList();
            list.pushFinishCallback(list.id, NativeUtils.getCoreCmdArray(GeCommands.FINISH) & 0x00FFFFFF);
            list.endList();
            list.status = sceGe_user.PSP_GE_LIST_DONE;
            ExternalGE.finishList(list);
        }
Example #3
0
        public override void run()
        {
            setLog4jMDC();
            bool doCoreInterpret = false;

            while (!exit_Renamed)
            {
                PspGeList list = ExternalGE.CurrentList;

                if (list == null)
                {
                    if (!Emulator.pause && log.DebugEnabled)
                    {
                        Console.WriteLine(string.Format("CoreThread no current list available... waiting"));
                    }

                    waitForSync(100);
                }
                else if (doCoreInterpret || list.waitForSync(100))
                {
                    InsideRendering = true;

                    doCoreInterpret      = false;
                    NativeUtils.CoreMadr = list.Pc;
                    NativeUtils.updateMemoryUnsafeAddr();

                    //if (log.DebugEnabled)
                    {
                        Console.WriteLine(string.Format("CoreThread processing {0}", list));
                    }

                    while (NativeUtils.coreInterpret())
                    {
                        NativeUtils.updateMemoryUnsafeAddr();

                        //if (log.DebugEnabled)
                        {
                            list.Pc = NativeUtils.CoreMadr;
                            Console.WriteLine(string.Format("CoreThread looping {0}", list));
                        }

                        if (ExternalGE.numberRendererThread > 0 && NativeUtils.RendererIndexCount > 0)
                        {
                            break;
                        }
                    }

                    list.Pc = NativeUtils.CoreMadr;

                    int intrStat = NativeUtils.CoreIntrStat;
                    if ((intrStat & INTR_STAT_END) != 0)
                    {
                        if ((intrStat & INTR_STAT_SIGNAL) != 0)
                        {
                            executeCommandSIGNAL(list);
                        }
                        if ((intrStat & INTR_STAT_FINISH) != 0)
                        {
                            executeCommandFINISH(list);
                        }
                        intrStat &= ~(INTR_STAT_END | INTR_STAT_SIGNAL | INTR_STAT_FINISH);
                        NativeUtils.CoreIntrStat = intrStat;
                    }

                    if (ExternalGE.numberRendererThread > 0 && NativeUtils.RendererIndexCount > 0)
                    {
                        ExternalGE.render();
                        doCoreInterpret = true;
                    }

                    InsideRendering = false;
                }
            }

            Console.WriteLine(string.Format("CoreThread exited"));
        }