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")); }
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")); }