public PageFaultError(UserModeCore core, int segment, int page, ulong loc) { CORE = core; Segment = segment; Page = page; Address = loc; }
public MarshallCPU(TextWriter outputChan, TextReader inputChan) { this.outputChan = outputChan; this.inputChan = inputChan; if (this.outputChan != null) { this.outputChan.NewLine = CRLF; } core = new UserModeCore(false); cpu = new SimhPDP10CPU(core, OSTypes.Tops10) { ProcessorType = ProcessorTypes.KL10 }; tops10 = new MonitorContext(cpu); tops10.TTCALL.ConsoleOutput += TTCALL_ConsoleOutput; tops10.TTCALL.AttachToConsole(); cpu.ProcFlags = 0; cpu.SetUserMode(); parser = new SimpleParser { CPU = cpu }; }
public bool DoIPause(UserModeCore core, ulong PC) { switch (BreakAction) { case BreakPointActions.Pause: return(true); case BreakPointActions.PauseOnValue: return(pauseOnValue(core, PC)); } return(false); // ? }
public void cpuSetup() { Core = new UserModeCore(true); CPU = new SimhPDP10CPU(Core, OSTypes.Tops10) { ProcessorType = ProcessorTypes.KA10 }; CPU.PCChanged += CPU_PCChanged; CPU.LightsChanged += CPU_LightsChanged; CPU.ProcFlagChanged += CPU_ProcFlagChanged; CPU.EffectiveAddressCalculated += CPU_EffectiveAddressCalculated; TOPS10 = new MonitorContext(CPU); TOPS10.TTCALL.ConsoleOutput += TTCALL_ConsoleOutput; TOPS10.TTCALL.AttachToConsole(); loader = new Tops10SAVLoader(Core, KLADEXE); addACs(); addSymbols <int>(typeof(JOBDAT)); MapCore(); MapProperties(); foreach (var seg in Core) { seg.MemberPageChanged += seg_MemberPageChanged; } CoreBrowser.Rows[0].Expanded = true; var gr = FindGridRow(loader.Transaddr.UL); SelectGridRow(gr); DecorateRow(gr, Color.Red, "Transfer Address: " + loader.Transaddr); CPU.PC = loader.Transaddr.UI; CoreBrowser.AfterRowUpdate += CoreBrowser_AfterRowUpdate; setUpYet = true; CPU.ProcFlags = 0; CPU.SetUserMode(); }
private bool pauseOnValue(UserModeCore core, ulong pc) { var uMem = core[ValueAddress]; ulong v = 0; switch (WordType) { case BreakWords.Whole: v = uMem.UL; break; case BreakWords.LH: v = uMem.LHW.UL; break; case BreakWords.RH: v = uMem.RHW.UL; break; } switch (CompareType) { case BreakCompareTypes.EQ: return(v == CompareValue); case BreakCompareTypes.LT: return(v < CompareValue); case BreakCompareTypes.LE: return(v <= CompareValue); case BreakCompareTypes.GT: return(v > CompareValue); case BreakCompareTypes.GE: return(v >= CompareValue); } return(false); // ? }
public Tops10SAVLoader(UserModeCore core, string infile) { Core = core; //ulong pop, fmt; //ulong lw = 0, hwm = 0; var hwmPage = 0; var hw = 0; var lw = 0; if (!Core.PageExists(0)) { Core.NewPage(0); } // Eventually call our raw file reader for 36 bit files var inexe = new StreamReader(infile); // Read in first word of file while (!inexe.EndOfStream) { var rw = ReadWord(inexe); var lh = rw.LHW; var leb = rw.LHW.UL; if (leb == 0254000.OctU()) { /*printf("Transfer Address = %o\n",re);*/ Transaddr = rw.RHW; break; } if (((lh & 0400000.Oct18())).NZ) { leb |= 37777000000u.OctU(); } var wordsToRead = -leb.SignE(); var re = Convert.ToInt32(rw.RHW.UL); if (wordsToRead <= 0) { throw new Exception("?T10_LOADER - SAV Not a count! " + rw); } //Console.WriteLine("Load %d words at %o\n",-le,re+1); lw += wordsToRead; for (var i = 0; i < (wordsToRead); i++) { var bodyw = ReadWord(inexe); var adrs = re + i + 1; var page = Core.Page(adrs); assureCoreHwm(page, ref hwmPage); Core[re + i + 1] = bodyw; // printf("%o/ %o,,%o %llo\n",re+i+1,lh,rh,blv); if (re + i + 1 > hw) { hw = re + i + 1; } } } Console.WriteLine("[{0} Words Loaded From {1}]", lw, infile); inexe.Close(); Console.WriteLine("[End loading {0}]", infile); if (Transaddr.NZ) { Core[0, 0120.Oct18().UI] = new Word36((Word18)0, Transaddr); } Transaddr = Core[0, 0120.Oct18().UI].RHW; Hiseg_floor = 0400000.Oct18(); High_Water = (Word18)hw; Console.WriteLine("[Loader High-Water-Mark is {0}]", High_Water); Console.WriteLine("[Transfer address is {0} Hiseg is {1}]", Transaddr, Hiseg_floor); }
static void Main(string[] args) { var Core = new UserModeCore(); var loader = new Tops10SAVLoader(Core, "test.sav"); }