Exemple #1
0
 private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
 {
     if (UpdateContextMenu(_lastLocation))
     {
         DebugWindowManager.OpenMemoryViewer(GetDestination());
     }
 }
        public void GoToDestination(GoToDestination dest)
        {
            bool bringToFront = true;

            if (dest.RelativeAddress?.Type == _manager.CpuType.ToMemoryType())
            {
                ScrollToAddress((uint)dest.RelativeAddress.Value.Address);
            }
            else if (dest.RelativeAddress != null)
            {
                DebugWindowManager.OpenDebugger(dest.RelativeAddress.Value.Type.ToCpuType())?.GoToAddress(dest.RelativeAddress.Value.Address);
                bringToFront = false;
            }
            else if (dest.SourceLocation != null)
            {
                ScrollToSourceLocation(dest.SourceLocation);
            }
            else if (dest.File != null)
            {
                SelectFile(dest.File);
            }

            if (bringToFront)
            {
                Form parent = this.ParentForm;
                if (parent.WindowState == FormWindowState.Minimized)
                {
                    //Unminimize window if it was minimized
                    parent.WindowState = FormWindowState.Normal;
                }
                parent.BringToFront();
            }
        }
Exemple #3
0
        private void MarkSelectionAs(CdlFlags type)
        {
            if (_memoryType != SnesMemoryType.CpuMemory && _memoryType != SnesMemoryType.PrgRom && _memoryType != SnesMemoryType.GameboyMemory && _memoryType != SnesMemoryType.GbPrgRom)
            {
                return;
            }

            int start = SelectionStartAddress;
            int end   = SelectionEndAddress;

            if (_memoryType == SnesMemoryType.CpuMemory || _memoryType == SnesMemoryType.GameboyMemory)
            {
                start = DebugApi.GetAbsoluteAddress(new AddressInfo()
                {
                    Address = start, Type = _memoryType
                }).Address;
                end = DebugApi.GetAbsoluteAddress(new AddressInfo()
                {
                    Address = end, Type = _memoryType
                }).Address;
            }

            if (start >= 0 && end >= 0 && start <= end)
            {
                DebugApi.MarkBytesAs((UInt32)start, (UInt32)end, type);
                DebugWindowManager.GetDebugger(_memoryType.ToCpuType())?.RefreshDisassembly();
            }

            RefreshData(_memoryType);
        }
Exemple #4
0
        private void mnuDebugDualSystemSecondaryCpu_Click(object sender, EventArgs e)
        {
            bool switchCpu = false;

            if (!DebugWindowManager.HasOpenedWindow)
            {
                switchCpu = true;
            }
            else
            {
                if (MessageBox.Show("Warning: Changing this setting will close all currently opened debug tools!", "Warning", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {
                    DebugWindowManager.CloseAll();
                    if (!DebugWindowManager.HasOpenedWindow)
                    {
                        switchCpu = true;
                    }
                }
            }

            if (switchCpu)
            {
                mnuDebugDualSystemSecondaryCpu.Checked        = !mnuDebugDualSystemSecondaryCpu.Checked;
                ConfigManager.Config.DebugInfo.DebugConsoleId = mnuDebugDualSystemSecondaryCpu.Checked ? InteropEmu.ConsoleId.Slave : InteropEmu.ConsoleId.Master;
                ConfigManager.ApplyChanges();
                InteropEmu.DebugSetDebuggerConsole(ConfigManager.Config.DebugInfo.DebugConsoleId);
            }
        }
Exemple #5
0
 private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
 {
     if (UpdateContextMenu(_lastLocation))
     {
         DebugWindowManager.OpenMemoryViewer(_lastClickedAddress, false);
     }
 }
        private void EditInMemoryTools(LocationInfo location)
        {
            if (location.Symbol != null)
            {
                AddressInfo?address = _symbolProvider.GetSymbolAddressInfo(location.Symbol);
                if (address.HasValue)
                {
                    DebugWindowManager.OpenMemoryViewer(address.Value);
                }
            }
            else if (location.Address >= 0)
            {
                AddressInfo relAddress = new AddressInfo()
                {
                    Address = location.Address,
                    Type    = _manager.RelativeMemoryType
                };

                DebugWindowManager.OpenMemoryViewer(relAddress);
            }
            else if (location.Label != null)
            {
                DebugWindowManager.OpenMemoryViewer(location.Label.GetAbsoluteAddress());
            }
        }
Exemple #7
0
 private void mnuAddBreakpoint_Click(object sender, EventArgs e)
 {
     if (DebugWindowManager.GetDebugger() == null)
     {
         return;
     }
     AddBreakpoint(_tileInfo.PpuAddress);
 }
Exemple #8
0
 private void ctxMenu_Opening(object sender, CancelEventArgs e)
 {
     mnuAddBreakpoint.Text          = "Add breakpoint ($" + _currentPpuAddress.ToString("X4") + ")";
     mnuEditInMemoryViewer.Text     = "Edit in Memory Viewer ($" + _currentPpuAddress.ToString("X4") + ")";
     mnuAddBreakpoint.Enabled       = DebugWindowManager.GetDebugger() != null;
     mnuCopyNametableHdPack.Visible = Control.ModifierKeys == Keys.Shift;
     _copyData = ToHdPackFormat(_nametableIndex, _tileY * 32 + _tileX);
 }
        private void MarkSelectionAs(CdlFlags type)
        {
            SelectedAddressRange range = GetSelectedAddressRange();

            if (!_inSourceView && range != null && range.Start.Type == _manager.PrgMemoryType && range.End.Type == _manager.PrgMemoryType)
            {
                DebugApi.MarkBytesAs((UInt32)range.Start.Address, (UInt32)range.End.Address, type);
                DebugWindowManager.OpenDebugger(_manager.CpuType)?.RefreshDisassembly();
            }
        }
        private void EditSelectedCode()
        {
            SelectedAddressRange range = GetSelectedRelativeAddressRange();

            if (range.Start.Address >= 0 && range.End.Address >= 0 && range.Start.Address <= range.End.Address)
            {
                int length = range.End.Address - range.Start.Address + 1;
                DebugWindowManager.OpenAssembler(_manager.CpuType, GetSelectedCode(), range.Start.Address, length);
            }
        }
Exemple #11
0
 private void mnuViewInMemoryType_Click(object sender, EventArgs e)
 {
     if (lstLabels.SelectedIndices.Count == 1)
     {
         CodeLabel label = GetSelectedLabel();
         if (label.MemoryType != SnesMemoryType.Register)
         {
             DebugWindowManager.OpenMemoryViewer(label.GetAbsoluteAddress());
         }
     }
 }
Exemple #12
0
        private void OnNotificationReceived(NotificationEventArgs e)
        {
            switch (e.NotificationType)
            {
            case ConsoleNotificationType.GameLoaded:
                this.BeginInvoke((Action)(() => {
                    UpdateDebuggerMenu();
                    ctrlRecentGames.Visible = false;
                    SaveStateManager.UpdateStateMenu(mnuLoadState, false);
                    SaveStateManager.UpdateStateMenu(mnuSaveState, true);

                    RomInfo romInfo = EmuApi.GetRomInfo();
                    this.Text = "Mesen-S - " + romInfo.GetRomName();

                    if (DebugWindowManager.HasOpenedWindow)
                    {
                        DebugWorkspaceManager.GetWorkspace();
                    }
                }));
                break;

            case ConsoleNotificationType.BeforeEmulationStop:
                this.Invoke((Action)(() => {
                    DebugWindowManager.CloseAll();
                }));
                break;

            case ConsoleNotificationType.EmulationStopped:
                this.BeginInvoke((Action)(() => {
                    this.Text = "Mesen-S";
                    UpdateDebuggerMenu();
                    ctrlRecentGames.Initialize();
                    ctrlRecentGames.Visible = true;
                    ResizeRecentGames();
                    if (_displayManager.ExclusiveFullscreen)
                    {
                        _displayManager.SetFullscreenState(false);
                    }
                }));
                break;

            case ConsoleNotificationType.ResolutionChanged:
                this.BeginInvoke((Action)(() => {
                    _displayManager.UpdateViewerSize();
                }));
                break;

            case ConsoleNotificationType.ExecuteShortcut:
                this.BeginInvoke((Action)(() => {
                    _shortcuts.ExecuteShortcut((EmulatorShortcut)e.Parameter);
                }));
                break;
            }
        }
Exemple #13
0
        public static void ShowWindow()
        {
            if (_instance != null)
            {
                DebugWindowManager.BringToFront(_instance);
            }
            frmCheatList frm = new frmCheatList();

            _instance   = frm;
            frm.Closed += (s, e) => { _instance = null; };
            frm.Show(null, frmMain.Instance);
        }
Exemple #14
0
 private void mnuViewInMemoryType_Click(object sender, EventArgs e)
 {
     if (lstLabels.SelectedIndices.Count == 1)
     {
         ListViewItem item  = GetSelectedItem();
         CodeLabel    label = (CodeLabel)item.SubItems[1].Tag;
         if (label.AddressType != AddressType.Register && label.AddressType != AddressType.InternalRam)
         {
             DebugWindowManager.OpenMemoryViewer((int)label.Address, label.AddressType.ToMemoryType());
         }
     }
 }
Exemple #15
0
 private void lstLabels_DoubleClick(object sender, EventArgs e)
 {
     if (lstLabels.SelectedIndices.Count > 0)
     {
         CodeLabel label      = (CodeLabel)GetSelectedLabel();
         int       relAddress = label.GetRelativeAddress(_cpuType).Address;
         if (relAddress >= 0)
         {
             DebugWindowManager.OpenDebugger(_cpuType).GoToAddress(relAddress);
         }
     }
 }
Exemple #16
0
 private void lstFunctions_DoubleClick(object sender, EventArgs e)
 {
     if (lstFunctions.SelectedIndices.Count > 0)
     {
         AddressInfo relativeAddress = DebugApi.GetRelativeAddress(_functions[lstFunctions.SelectedIndices[0]].Address, this.CpuType);
         if (relativeAddress.Address >= 0)
         {
             frmDebugger debugger = DebugWindowManager.OpenDebugger(this.CpuType);
             debugger.GoToAddress(relativeAddress.Address);
         }
     }
 }
Exemple #17
0
 private void mnuViewInCpuMemory_Click(object sender, EventArgs e)
 {
     if (lstLabels.SelectedIndices.Count == 1)
     {
         ListViewItem item    = GetSelectedItem();
         int          address = (int)item.Tag;
         if (address >= 0)
         {
             DebugWindowManager.OpenMemoryViewer(address, DebugMemoryType.CpuMemory);
         }
     }
 }
Exemple #18
0
 private void mnuUndoPrgChrEdit_Click(object sender, EventArgs e)
 {
     if (InteropEmu.DebugHasUndoHistory())
     {
         InteropEmu.DebugPerformUndo();
         frmDebugger debugger = DebugWindowManager.GetDebugger();
         if (debugger != null)
         {
             debugger.UpdateDebugger(false);
         }
     }
 }
Exemple #19
0
 private void mnuViewInCpuMemory_Click(object sender, EventArgs e)
 {
     if (lstLabels.SelectedIndices.Count == 1)
     {
         CodeLabel   label      = GetSelectedLabel();
         AddressInfo relAddress = label.GetRelativeAddress(_cpuType);
         if (relAddress.Address >= 0)
         {
             DebugWindowManager.OpenMemoryViewer(relAddress);
         }
     }
 }
Exemple #20
0
        private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
        {
            int baseAddress = _hoverBottomBank ? 0x1000 : 0x0000;

            if (this.cboChrSelection.SelectedIndex > 1)
            {
                baseAddress += (this.cboChrSelection.SelectedIndex - 1) * 0x2000;
            }

            int tileIndex = GetLargeSpriteIndex(_hoverTileIndex >= 0 ? _hoverTileIndex : _tileIndex);

            DebugWindowManager.OpenMemoryViewer(baseAddress + tileIndex * 16, GetChrMemoryType());
        }
Exemple #21
0
        private void mnuViewInDisassembly_Click(object sender, EventArgs e)
        {
            frmDebugger debugger = DebugWindowManager.GetDebugger();

            if (debugger != null)
            {
                if (_memoryType == DebugMemoryType.CpuMemory)
                {
                    debugger.ScrollToAddress(SelectionStartAddress);
                }
                else if (_memoryType == DebugMemoryType.PrgRom || _memoryType == DebugMemoryType.WorkRam || _memoryType == DebugMemoryType.SaveRam)
                {
                    int relativeAddress = InteropEmu.DebugGetRelativeAddress((UInt32)SelectionStartAddress, _memoryType.ToAddressType());
                    debugger.ScrollToAddress(relativeAddress);
                }
            }
        }
Exemple #22
0
        private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
        {
            int baseAddress = _hoverBottomBank ? 0x1000 : 0x0000;

            if (this.cboChrSelection.SelectedIndex > 1)
            {
                baseAddress += (this.cboChrSelection.SelectedIndex - 1) * 0x2000;
            }

            bool            ppuMemory = this.cboChrSelection.SelectedIndex == 0;
            bool            isChrRam  = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
            DebugMemoryType memType   = ppuMemory ? DebugMemoryType.PpuMemory : (isChrRam ? DebugMemoryType.ChrRam : DebugMemoryType.ChrRom);

            int tileIndex = GetLargeSpriteIndex(_hoverTileIndex >= 0 ? _hoverTileIndex : _tileIndex);

            DebugWindowManager.OpenMemoryViewer(baseAddress + tileIndex * 16, memType);
        }
Exemple #23
0
        private void MarkSelectionAs(CdlPrgFlags type)
        {
            int    startAddress, endAddress;
            string range;

            GetSelectedAddressRange(out startAddress, out endAddress, out range);

            if (startAddress >= 0 && endAddress >= 0 && startAddress <= endAddress)
            {
                InteropEmu.DebugMarkPrgBytesAs((UInt32)startAddress, (UInt32)endAddress, type);

                frmDebugger debugger = DebugWindowManager.GetDebugger();
                if (debugger != null)
                {
                    debugger.UpdateDebugger(false);
                }
            }
        }
Exemple #24
0
        private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
        {
            if (_selectedSprite < 0 && _contextMenuSpriteIndex < 0)
            {
                return;
            }

            int ramAddr   = (_selectedSprite >= 0 ? _selectedSprite : _contextMenuSpriteIndex) * 4;
            int tileIndex = _spriteRam[ramAddr + 1];

            DebugState state = new DebugState();

            InteropEmu.DebugGetState(ref state);

            int tileIndexOffset = (!_largeSprites && state.PPU.ControlFlags.SpritePatternAddr == 0x1000) ? 256 : 0;

            DebugWindowManager.OpenMemoryViewer((tileIndex + tileIndexOffset) * 16, DebugMemoryType.PpuMemory);
        }
Exemple #25
0
        private void MarkSelectionAs(int start, int end, CdlPrgFlags type)
        {
            if (_memoryType == DebugMemoryType.CpuMemory)
            {
                start = InteropEmu.DebugGetAbsoluteAddress((UInt32)start);
                end   = InteropEmu.DebugGetAbsoluteAddress((UInt32)end);
            }

            if (start >= 0 && end >= 0 && start <= end)
            {
                InteropEmu.DebugMarkPrgBytesAs((UInt32)start, (UInt32)end, type);
                frmDebugger debugger = DebugWindowManager.GetDebugger();
                if (debugger != null)
                {
                    debugger.UpdateDebugger(false, false);
                }
            }
        }
Exemple #26
0
        private void mnuToggleBreakpoint_Click(object sender, EventArgs e)
        {
            if (DebugWindowManager.GetDebugger() == null)
            {
                return;
            }

            PpuAddressTypeInfo addressInfo = InteropEmu.DebugGetPpuAbsoluteAddressAndType((uint)_currentPpuAddress);

            BreakpointManager.EditBreakpoint(new Breakpoint()
            {
                MemoryType   = addressInfo.Type.ToMemoryType(),
                BreakOnExec  = false,
                BreakOnRead  = true,
                BreakOnWrite = true,
                Address      = (UInt32)addressInfo.Address,
                StartAddress = (UInt32)addressInfo.Address,
                EndAddress   = (UInt32)addressInfo.Address,
                AddressType  = BreakpointAddressType.SingleAddress
            });
        }
Exemple #27
0
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);

            DebugApi.ResumeExecution();
            DebugWindowManager.CloseAll();

            EmuApi.Stop();

            if (_notifListener != null)
            {
                _notifListener.Dispose();
                _notifListener = null;
            }

            ConfigManager.Config.WindowLocation = this.WindowState == FormWindowState.Normal ? this.Location : this.RestoreBounds.Location;
            ConfigManager.Config.WindowSize     = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size;
            ConfigManager.ApplyChanges();

            EmuApi.Release();
        }
Exemple #28
0
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);

            InBackgroundHelper.StopBackgroundTimer();

            if (_notifListener != null)
            {
                _notifListener.Dispose();
                _notifListener = null;
            }

            if (!_shuttingDown && Program.IsMono)
            {
                //This appears to prevent Mono from locking up when closing the form
                DebugApi.ResumeExecution();
                DebugWindowManager.CloseAll();

                Task.Run(() => {
                    EmuApi.Stop();
                    _shuttingDown = true;
                    this.BeginInvoke((Action)(() => this.Close()));
                });
                e.Cancel = true;
                return;
            }

            DebugApi.ResumeExecution();
            DebugWindowManager.CloseAll();

            ConfigManager.Config.WindowLocation = this.WindowState == FormWindowState.Normal ? this.Location : this.RestoreBounds.Location;
            ConfigManager.Config.WindowSize     = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size;
            ConfigManager.ApplyChanges();
            ConfigManager.SaveConfig();

            EmuApi.Stop();
            EmuApi.Release();
        }
Exemple #29
0
 private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
 {
     DebugWindowManager.OpenMemoryViewer(_tileInfo.PpuAddress, DebugMemoryType.PpuMemory);
 }
Exemple #30
0
 private void mnuTextHooker_Click(object sender, EventArgs e)
 {
     DebugWindowManager.OpenDebugWindow(DebugWindow.TextHooker);
 }