Exemplo n.º 1
0
        private void MapCore()
        {
            blockMap.Clear();
            for (var seg = 0; seg < Core.InitialSegments; seg++)
            {
                var o = new object[1];
                o[0] = "Segment [" + seg.ToOctal(3) + "]";
                var sr = CoreDataSource.Rows.Add(o);
                sr.Tag = seg;
                for (var page = 0; page < Core.MaxPagesPerSegment; page++)
                {
                    if (Core.PageExists(seg, page))
                    {
                        var id = new KeyValuePair <int, int>(seg, page);

                        var pr = sr.GetChildRows(0);
                        var p  = new object[1];
                        p[0] = "Page [" + page.ToOctal(3) + "]";

                        var pc = pr.Add(p);
                        blockMap.Add(id, pc);
                        pc.Tag = id;

                        var mem = pc.GetChildRows(0);
                        for (var memv = 0; memv < Core.PageSize; memv++)
                        {
                            var memloc = page * Core.PageSize + memv;

                            var m = new object[6];
                            m[0] = false;
                            m[1] = "[" + memloc.ToOctal(6) + "]";
                            if (symbolTable.ContainsKey(memloc))
                            {
                                m[1] += " " + symbolTable[memloc];
                            }
                            var memvalue = Core[seg, (page * Core.PageSize) + memv];
                            m[2] = memvalue.ToString();
                            m[3] = memvalue.Instruction(memloc);
                            m[4] = memvalue.ASCII();
                            m[5] = memvalue.SIXBIT();

                            var memrow = mem.Add(m);
                            memrow.Tag = memloc;
                        }
                    }
                }
            }
            MapGrid();
        }
Exemplo n.º 2
0
        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);
        }