示例#1
0
        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);
        }
示例#2
0
 public static EmuInstrReader GetInstrReader(uint address, DoneNotif notifFn)
 {
     return(new EmuInstrReader(address, notifFn));
 }
示例#3
0
 public static EmuMemoryReader GetMemoryReader(uint address, DoneNotif notifFn)
 {
     return(new EmuMemoryReader(address, notifFn));
 }