private void NewMemoryWindow(object sender, EventArgs e)
        {
            var t = new MemoryView("MemoryView");

            t.Show(dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.Float);
            myDocks.Add(t);
        }
Beispiel #2
0
        private void toolStripBtnMemoryFromCPU_Click(object sender, EventArgs e)
        {
            if (toolStripBtnMemoryFromCPU.Checked)
            {
                Core.Settings.MemorySource = MemorySourceType.CPU;
            }
            else
            {
                Core.Settings.MemorySource = MemorySourceType.RAM;
            }

            if (MemoryAsCPU)
            {
                toolStripBtnMemoryFromCPU.Image       = C64Studio.Properties.Resources.icon_memory_cpu.ToBitmap();
                toolStripBtnMemoryFromCPU.ToolTipText = "Show RAM as CPU sees it";
                m_ActiveMemory = m_MemoryCPU;
            }
            else
            {
                toolStripBtnMemoryFromCPU.Image       = C64Studio.Properties.Resources.icon_memory_ram.ToBitmap();
                toolStripBtnMemoryFromCPU.ToolTipText = "Show RAM";
                m_ActiveMemory = m_MemoryRAM;
            }
            SetHexData(m_ActiveMemory.RAM);
            ViewScrolled(this, new DebugMemoryEvent(m_Offset * hexView.BytesPerLine, hexView.BytesPerLine * hexView.VerticalByteCount));
        }
Beispiel #3
0
        public Mix()
        {
            SetFloatingPointModuleEnabled(ModuleSettings.FloatingPointEnabled);

            mMemory = new MemoryView(mFullMemory);

            mDevices.DeviceReportingEvent += DeviceReporting;
            mLog           = Queue.Synchronized(new Queue());
            ProgramCounter = 0;
            TickCounter    = 0L;
            mStatus        = RunStatus.Idle;
            mMode          = RunMode.Normal;

            SetMemoryBounds();

            mCurrentInstructionAddress   = int.MinValue;
            mCurrentInstructionMnemonic  = null;
            mCurrentInstructionTicksLeft = int.MinValue;
            mInterruptExecuted           = false;

            BreakpointManager = null;
            mStartStep        = new AutoResetEvent(false);
            mRunDetached      = false;

            var thread = new Thread(StepRunEntryPoint)
            {
                IsBackground = true,
                Name         = "Run thread"
            };

            thread.Start();
        }
Beispiel #4
0
        public DebugMemory(StudioCore Core)
        {
            InitializeComponent();

            this.Core = Core;

            m_ActiveMemory = m_MemoryCPU;

            SetHexData(m_ActiveMemory.RAM);

            hexView.SelectedByteProvider = new DynamicByteSelectionProvider(65536);
            hexView.ViewScrolled        += new EventHandler(hexView_ViewScrolled);

            hexView.ContextMenuStrip.Items.Add("-");

            m_MenuItemHexStringView         = new ToolStripMenuItem("Set to String View");
            m_MenuItemHexStringView.Click  += btnBinaryStringView_Click;
            m_MenuItemHexStringView.Checked = true;
            hexView.ContextMenuStrip.Items.Add(m_MenuItemHexStringView);

            m_MenuItemHexCharView        = new ToolStripMenuItem("Set to Character View");
            m_MenuItemHexCharView.Click += btnBinaryCharView_Click;
            hexView.ContextMenuStrip.Items.Add(m_MenuItemHexCharView);

            m_MenuItemHexSpriteView        = new ToolStripMenuItem("Set to Sprite View");
            m_MenuItemHexSpriteView.Click += btnBinarySpriteView_Click;
            hexView.ContextMenuStrip.Items.Add(m_MenuItemHexSpriteView);

            SetMemoryDisplayType();
        }
Beispiel #5
0
        internal void UpdateMemory(RequestData Request, ByteBuffer Data, bool AsRAM)
        {
            int Offset = Request.Parameter1;

            MemoryView memoryView = Core.Debugging.ActiveMemory;

            if (AsRAM)
            {
                memoryView = Core.Debugging.MemoryRAM;
            }

            for (int i = 0; i < Data.Length; ++i)
            {
                byte ramByte = Data.ByteAt(i);

                if (Request.Reason != RequestReason.MEMORY_FETCH)
                {
                    if (ramByte != memoryView.RAM.ByteAt(Offset + i))
                    {
                        memoryView.RAMChanged[Offset + i] = true;
                    }
                    else
                    {
                        memoryView.RAMChanged[Offset + i] = false;
                    }
                }
                memoryView.RAM.SetU8At(Offset + i, ramByte);
            }
            ValidateMemory(memoryView, Offset, (int)Data.Length);

            foreach (var debugView in MemoryViews)
            {
                debugView.UpdateMemory(Request, Data);
            }
        }
Beispiel #6
0
        private void ValidateMemory(MemoryView View, int Offset, int Length)
        {
            foreach (int offset in View.ValidMemory.Keys)
            {
                int storedlength = View.ValidMemory[offset];

                if ((Offset >= offset) &&
                    (Offset < offset + storedlength))
                {
                    // we are at least partially in here
                    if (Offset + Length < offset + storedlength)
                    {
                        // already fully validated
                        return;
                    }
                    Length -= Offset - offset;
                    Offset  = offset + storedlength;
                    if (Length == 0)
                    {
                        return;
                    }
                }
            }
            if (Length > 0)
            {
                View.ValidMemory.Add(Offset, Length);
            }
        }
 public void Update(object update)
 {
     if (update is uint memoryAddress)
     {
         MemoryInput.Text = MemoryView.AddressInputToString(memoryAddress);
         Go_Click(null, null);
     }
 }
Beispiel #8
0
        public HWLua()
        {
            Kernel = NativeMethods.LuaLNewState();
            Stack  = new MemoryView(this);
            Global = new TableView(this, GlobalRootObject);
            Kernel.LuaLOpenLibs();

            StackInstance = Stack;
        }
Beispiel #9
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            Text = "MOSA GDB Debugger v" + CompilerVersion.VersionString;

            dockPanel.SuspendLayout(true);
            dockPanel.DockTopPortion = 75;

            controlView.Show(dockPanel, DockState.DockTop);
            statusView.Show(controlView.PanelPane, DockAlignment.Right, 0.50);

            breakPointView.Show(dockPanel, DockState.DockBottom);
            watchView.Show(breakPointView.PanelPane, DockAlignment.Right, 0.50);

            displayView.Show(dockPanel, DockState.Document);
            outputView.Show(dockPanel, DockState.Document);

            //scriptView.Show(dockPanel, DockState.Document);
            registersView.Show(dockPanel, DockState.DockRight);
            stackFrameView.Show(registersView.Pane, DockAlignment.Bottom, 0.5);

            sourceView.Show(dockPanel, DockState.Document);
            sourceDataView.Show(dockPanel, DockState.Document);

            //stackFrameView.Show(dockPanel, DockState.DockRight);

            var memoryView = new MemoryView(this);

            memoryView.Show(dockPanel, DockState.Document);
            symbolView.Show(dockPanel, DockState.Document);

            instructionView.Show(symbolView.PanelPane, DockAlignment.Right, 0.35);
            methodView.Show(instructionView.PanelPane, instructionView);
            callStackView.Show(instructionView.PanelPane, DockAlignment.Bottom, 0.25);

            registersView.Show();

            dockPanel.ResumeLayout(true, true);

            CalculateVMHash();

            LauncherOptions.SerialConnectionOption = SerialConnectionOption.TCPServer;
            LauncherOptions.SerialConnectionPort   = 1250;

            if (LauncherOptions.ImageFile != null)
            {
                VMProcess = StartQEMU();
            }
            LoadDebugFile();
            if (LauncherOptions.AutoStart)
            {
                System.Threading.Thread.Sleep(3000);
                Connect();
            }

            LoadBreakPoints();
            LoadWatches();
        }
Beispiel #10
0
        /// <summary>移动到下一块</summary>
        /// <param name="view"></param>
        /// <returns></returns>
        public Boolean MoveNext(MemoryView view)
        {
            if (Next == 0)
            {
                return(false);
            }

            Position = Next;
            Read(view);

            return(true);
        }
 public void ShowMainMemory()
 {
     if (_asmLoaded)
     {
         MemoryView view = new MemoryView(this)
         {
             Visibility = Visibility.Visible
         };
     }
     else
     {
         MessageBox.Show("Files not loaded");
     }
 }
Beispiel #12
0
        /// <summary>写入内存块</summary>
        /// <param name="view"></param>
        public void Write(MemoryView view)
        {
            var p = Position;

            if (p < 0)
            {
                throw new ArgumentNullException(nameof(Position));
            }

#if DEBUG
            //XTrace.WriteLine("Write " + this);
#endif

            // 8字节对齐
            var len = Align(Size);

            var len2 = len;
            if (Free)
            {
                len2 |= 0b0000_00001;
            }
            if (PrevFree)
            {
                len2 |= 0b0000_00010;
            }

            view.Write(p, len2);
            // 空闲块有下一块指针,尾部也有长度标记
            if (Free)
            {
                view.Write(p + 8, Next);
                if (Next > 0)
                {
                    view.Write(p + len - 8, len2);
                }

                // 修改下一个相邻块的PrevFree
                p += len;
                if (p + 8 < view.Capacity)
                {
                    len = view.ReadInt64(p);
                    // 标记下一相邻块的PrevFree为1
                    if ((len & 0b0000_00010) == 0)
                    {
                        len |= 0b0000_00010;
                        view.Write(p, len);
                    }
                }
            }
        }
 public MemoryViewModel(IEnumerable <VM> ActiveVMList)
     : base("Memory", ActiveVMList)
 {
     //Instance = MemoryInstance;
     //Size = (UInt64)MemoryInstance["Reservation"];
     //UInt64 limit;
     Size = GetMem(ActiveVMList);
     //MaxSize = limit;
     ApplyCommand  = new DelegateCommand <object>(SetMemory, CanSetMemory);
     OKCommand     = new DelegateCommand <object> (PerformOK, CanSetMemory);
     CancelCommand = new DelegateCommand <object>(PerformCancel, CanCancel);
     ApplyCommand.RaiseCanExecuteChanged();
     View = new MemoryView();
     (View as IView).SetViewModel(this);
 }
Beispiel #14
0
        /// <summary>读取下一块</summary>
        /// <param name="view"></param>
        /// <returns></returns>
        public MemoryBlock ReadNext(MemoryView view)
        {
            if (Next == 0)
            {
                return(null);
            }

            var mb = new MemoryBlock {
                Position = Next
            };

            mb.Read(view);

            return(mb);
        }
Beispiel #15
0
        public static void SetWCharArrayRaw(_Array arr, object value)
        {
            MemoryView view = value as MemoryView;

            if ((object)view != null)
            {
                string strVal = view.tobytes().MakeString();
                if (strVal.Length > arr.__len__())
                {
                    throw PythonOps.ValueError("string too long");
                }
                value = strVal;
            }

            arr.NativeType.SetValue(arr._memHolder, 0, value);
        }
Beispiel #16
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            dockPanel.SuspendLayout(true);
            dockPanel.DockTopPortion = 75;

            controlView.Show(dockPanel, DockState.DockTop);
            statusView.Show(controlView.PanelPane, DockAlignment.Right, 0.50);

            breakPointView.Show(dockPanel, DockState.DockBottom);
            watchView.Show(breakPointView.PanelPane, DockAlignment.Right, 0.50);

            displayView.Show(dockPanel, DockState.Document);
            outputView.Show(dockPanel, DockState.Document);

            //scriptView.Show(dockPanel, DockState.Document);
            registersView.Show(dockPanel, DockState.DockRight);

            //flagView.Show(dockPanel, DockState.DockRight);
            //stackView.Show(dockPanel, DockState.DockRight);
            stackFrameView.Show(dockPanel, DockState.DockRight);

            var memoryView = new MemoryView(this);

            memoryView.Show(dockPanel, DockState.Document);
            symbolView.Show(dockPanel, DockState.Document);

            instructionView.Show(symbolView.PanelPane, DockAlignment.Right, 0.35);
            methodView.Show(instructionView.PanelPane, instructionView);
            callStackView.Show(instructionView.PanelPane, DockAlignment.Bottom, 0.25);

            registersView.Show();

            dockPanel.ResumeLayout(true, true);

            if (Options.AutoConnect)
            {
                Connect();
            }

            if (Options.DebugInfoFile != null)
            {
                LoadDebugData.LoadDebugInfo(Options.DebugInfoFile, DebugSource);
            }
        }
    public void SetUp()
    {
        var manager  = new GameObject();
        var emulator = manager.AddComponent <Emulator>();

        emulator.Awake();

        var address = new GameObject();

        _addressTextComponent = address.AddComponent <Text>();

        var memoryTextGameObject = new GameObject();
        var text       = memoryTextGameObject.AddComponent <Text>();
        var memoryView = memoryTextGameObject.AddComponent <MemoryView>();

        _memoryView         = memoryView;
        _memoryView.manager = manager;
        _memoryView.address = address;

        _memoryView.Start();
    }
Beispiel #18
0
        public MainWindow()
        {
            InitializeComponent();

            MemoryModel.SetAddressBusLength = 20;
            MemoryModel.GetInstance().AddObserver(this);
            memoryView = new MemoryView();
            Go_Click(null, null);

            generalPurposeRegisters = new GeneralPurposeRegisters();
            indexRegisters          = new IndexRegisters();
            pointerRegisters        = new PointerRegisters();
            segmentRegisters        = new SegmentRegisters();

            commandInterpreter = InitDefaultRegistryCommander();

            generalPurposeRegistersView = new GeneralPurposeRegistersView(new HexParser());
            indexRegistersView          = new IndexRegistersView(new HexParser());
            pointerRegistersView        = new PointerRegistersView(new HexParser());
            segmentRegistersView        = new SegmentRegistersView(new HexParser());

            if (generalPurposeRegisters is Observable observableGeneralPurposeReg)
            {
                observableGeneralPurposeReg.AddObserver(generalPurposeRegistersView);
            }
            if (indexRegisters is Observable observableIndexReg)
            {
                observableIndexReg.AddObserver(indexRegistersView);
            }
            if (pointerRegisters is Observable observablePointersReg)
            {
                observablePointersReg.AddObserver(pointerRegistersView);
            }
            if (segmentRegisters is Observable observableSegmentsReg)
            {
                observableSegmentsReg.AddObserver(segmentRegistersView);
            }

            SetBlockDataContext();
        }
Beispiel #19
0
        /// <summary>读取内存块,自动识别是否空闲</summary>
        /// <param name="view"></param>
        public Boolean Read(MemoryView view)
        {
            var p = Position;

            if (p < 0)
            {
                throw new ArgumentNullException(nameof(Position));
            }

            if (p + 8 >= view.Capacity)
            {
                return(false);
            }

            // 不管是否空闲块,都是长度开头
            var len  = view.ReadInt64(p);
            var flag = len & 0b0000_0111;

            len -= flag;

            Size     = len;
            Free     = (flag & 0b0000_00001) > 0;
            PrevFree = (flag & 0b0000_00010) > 0;

            // 如果是空闲块,还要读取前后空闲指针,最后8字节则可以不用读取
            if (Free)
            {
                Next = view.ReadInt64(p + 8);
            }
            else
            {
                Next = 0;
            }

#if DEBUG
            XTrace.WriteLine("Read  " + this);
#endif

            return(true);
        }
Beispiel #20
0
        internal void UpdateMemory(RequestData Request, ByteBuffer Data, bool AsRAM)
        {
            int Offset = Request.Parameter1;

            MemoryView memoryView = Core.Debugging.ActiveMemory;

            if (AsRAM)
            {
                memoryView = Core.Debugging.MemoryRAM;
            }

            for (int i = 0; i < Data.Length; ++i)
            {
                byte ramByte = Data.ByteAt(i);

                if (Request.Reason != RequestReason.MEMORY_FETCH)
                {
                    if (ramByte != memoryView.RAM.ByteAt(Offset + i))
                    {
                        // only mark as changed when we knew the orig value
                        if ((memoryView.Flags[Offset + i] & MemoryView.RAMFlag.VALUE_KNOWN) == 0)
                        {
                            memoryView.Flags[Offset + i] |= MemoryView.RAMFlag.VALUE_CHANGED;
                        }
                    }
                    else if ((memoryView.Flags[Offset + i] & MemoryView.RAMFlag.VALUE_KNOWN) == 0)
                    {
                        memoryView.Flags[Offset + i] &= ~MemoryView.RAMFlag.VALUE_CHANGED;
                    }
                }
                memoryView.Flags[Offset + i] |= MemoryView.RAMFlag.VALUE_KNOWN;
                memoryView.RAM.SetU8At(Offset + i, ramByte);
            }

            foreach (var debugView in MemoryViews)
            {
                debugView.UpdateMemory(Request, Data);
            }
        }
Beispiel #21
0
        public static void SetWCharArrayRaw(_Array arr, object value)
        {
            PythonBuffer buf = value as PythonBuffer;

            if (buf != null && (buf._object is string || buf._object is Bytes))
            {
                value = buf.ToString();
            }

            MemoryView view = value as MemoryView;

            if ((object)view != null)
            {
                string strVal = view.tobytes().ToString();
                if (strVal.Length > arr.__len__())
                {
                    throw PythonOps.ValueError("string too long");
                }
                value = strVal;
            }

            arr.NativeType.SetValue(arr._memHolder, 0, value);
        }
Beispiel #22
0
        /// <summary>实例化数据库</summary>
        /// <param name="file">文件</param>
        /// <param name="readOnly">只读</param>
        /// <param name="init">自动初始化</param>
        public ListDb(String file, Boolean readOnly, Boolean init = true)
        {
            File     = new MemoryFile(file, readOnly);
            ReadOnly = readOnly;

            if (readOnly)
            {
                View = File.CreateView(HEADER_SIZE, MAX_SIZE);
            }
            else
            {
                Heap = new Heap(File, HEADER_SIZE, MAX_SIZE, false);
                View = Heap.View;
            }

            // 加大步进增长率,减少映射次数,提升性能
            //View.StepRate = 100;

            // 加载
            if (init)
            {
                Init();
            }
        }
Beispiel #23
0
        private void btnViewMemory_Click(object sender, EventArgs e)
        {
            var memoryView = new MemoryView(this);

            memoryView.Show(dockPanel, DockState.Document);
        }
Beispiel #24
0
 public Debugging(StudioCore Core)
 {
     this.Core    = Core;
     ActiveMemory = MemoryCPU;
 }
Beispiel #25
0
 void RefreshView()
 {
     MemoryView.EnsureVisible(0);
     MemoryView.Refresh();
 }
Beispiel #26
0
 public static Bytes hexlify(MemoryView data)
 {
     return(hexlify(data.tobytes()));
 }
Beispiel #27
0
 public static Bytes a2b_uu(CodeContext /*!*/ context, [NotNull] MemoryView data)
 => a2b_uu_impl(context, data.tobytes());