public static string[] GetInstrPage(uint pageIdx, DoneNotif notifFn) { if (!currentlyPaused) { // Don't allow reading while the game is running... return(null); } cacheMutex.WaitOne(); InstrPage entry; if (!instrDict.TryGetValue(pageIdx, out entry)) { entry = null; } if (entry == null) { var newPage = new InstrPage(); newPage.pauseIdx = 0; newPage.data = null; newPage.waiters = new List <DoneNotif>(); instrDict.Add(pageIdx, newPage); entry = newPage; } if (entry.pauseIdx < pauseIndex) { uint PAGE_SIZE = GetInstrPageSize(); sendDisasm(pageIdx * PAGE_SIZE, PAGE_SIZE / 4); entry.pauseIdx = pauseIndex; if (notifFn != null) { entry.waiters.Add(notifFn); } } cacheMutex.ReleaseMutex(); return(entry.data); }
public static EmuInstrReader GetInstrReader(uint address, DoneNotif notifFn) { return(new EmuInstrReader(address, notifFn)); }
public static EmuMemoryReader GetMemoryReader(uint address, DoneNotif notifFn) { return(new EmuMemoryReader(address, notifFn)); }