Debugger: Implemented "edit in memory tools" and "view in disassembly" context menu options in watch list

This commit is contained in:
Sour 2019-07-18 08:31:41 -04:00
parent 71ddf2bf1c
commit 1290fa90f6
7 changed files with 66 additions and 55 deletions

View file

@ -131,7 +131,7 @@ namespace Mesen.GUI.Debugger.Controls
private void mnuAddBreakpoint_Click(object sender, EventArgs e)
{
Breakpoint breakpoint = new Breakpoint() { MemoryType = _cpuType == CpuType.Cpu ? SnesMemoryType.CpuMemory : SnesMemoryType.SpcMemory };
Breakpoint breakpoint = new Breakpoint() { MemoryType = _cpuType.ToMemoryType() };
if(new frmBreakpoint(breakpoint).ShowDialog() == DialogResult.OK) {
BreakpointManager.AddBreakpoint(breakpoint);
}

View file

@ -34,7 +34,7 @@ namespace Mesen.GUI.Debugger
AddBinding(nameof(Breakpoint.BreakOnExec), chkExec);
AddBinding(nameof(Breakpoint.Condition), txtCondition);
_cpuType = breakpoint.MemoryType == SnesMemoryType.SpcMemory ? CpuType.Spc : CpuType.Cpu;
_cpuType = breakpoint.MemoryType.ToCpuType();
cboBreakpointType.Items.Clear();
if(_cpuType == CpuType.Cpu) {

View file

@ -32,7 +32,7 @@ namespace Mesen.GUI.Debugger
public string GetEffectiveAddressString(string format)
{
if(EffectiveAddress >= 0) {
AddressInfo relAddress = new AddressInfo() { Address = EffectiveAddress, Type = _cpuType == CpuType.Spc ? SnesMemoryType.SpcMemory : SnesMemoryType.CpuMemory };
AddressInfo relAddress = new AddressInfo() { Address = EffectiveAddress, Type = _cpuType.ToMemoryType() };
CodeLabel label = LabelManager.GetLabel(relAddress);
if(label != null) {
if(label.Length > 1) {

View file

@ -96,7 +96,7 @@ namespace Mesen.GUI.Debugger.Controls
return "[bottom of stack]";
}
CodeLabel label = relSubEntryAddr >= 0 ? LabelManager.GetLabel(new AddressInfo() { Address = relSubEntryAddr, Type = _cpuType == CpuType.Cpu ? SnesMemoryType.CpuMemory : SnesMemoryType.SpcMemory }) : null;
CodeLabel label = relSubEntryAddr >= 0 ? LabelManager.GetLabel(new AddressInfo() { Address = relSubEntryAddr, Type = _cpuType.ToMemoryType() }) : null;
if(label != null) {
return label.Label + " ($" + relSubEntryAddr.ToString(_format) + ")";
} else if(flags == StackFrameFlags.Nmi) {

View file

@ -44,10 +44,6 @@
this.mnuMoveUp = new System.Windows.Forms.ToolStripMenuItem();
this.mnuMoveDown = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
this.mnuDecimalDisplay = new System.Windows.Forms.ToolStripMenuItem();
this.mnuHexDisplay = new System.Windows.Forms.ToolStripMenuItem();
this.mnuBinaryDisplay = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
this.mnuRowDisplayFormat = new System.Windows.Forms.ToolStripMenuItem();
this.mnuRowBinary = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
@ -63,6 +59,10 @@
this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripSeparator();
this.mnuRowClearFormat = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
this.mnuDecimalDisplay = new System.Windows.Forms.ToolStripMenuItem();
this.mnuHexDisplay = new System.Windows.Forms.ToolStripMenuItem();
this.mnuBinaryDisplay = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
this.mnuImport = new System.Windows.Forms.ToolStripMenuItem();
this.mnuExport = new System.Windows.Forms.ToolStripMenuItem();
this.txtEdit = new System.Windows.Forms.TextBox();
@ -152,7 +152,7 @@
this.mnuViewInDisassembly.Image = global::Mesen.GUI.Properties.Resources.Debugger;
this.mnuViewInDisassembly.Name = "mnuViewInDisassembly";
this.mnuViewInDisassembly.Size = new System.Drawing.Size(193, 22);
this.mnuViewInDisassembly.Text = "View in disassembly";
this.mnuViewInDisassembly.Text = "View in Disassembly";
this.mnuViewInDisassembly.Click += new System.EventHandler(this.mnuViewInDisassembly_Click);
//
// toolStripMenuItem4
@ -181,34 +181,6 @@
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(190, 6);
//
// mnuDecimalDisplay
//
this.mnuDecimalDisplay.Name = "mnuDecimalDisplay";
this.mnuDecimalDisplay.Size = new System.Drawing.Size(193, 22);
this.mnuDecimalDisplay.Text = "Decimal Display";
this.mnuDecimalDisplay.Click += new System.EventHandler(this.mnuDecimalDisplay_Click);
//
// mnuHexDisplay
//
this.mnuHexDisplay.Checked = true;
this.mnuHexDisplay.CheckState = System.Windows.Forms.CheckState.Checked;
this.mnuHexDisplay.Name = "mnuHexDisplay";
this.mnuHexDisplay.Size = new System.Drawing.Size(193, 22);
this.mnuHexDisplay.Text = "Hexadecimal Display";
this.mnuHexDisplay.Click += new System.EventHandler(this.mnuHexDisplay_Click);
//
// mnuBinaryDisplay
//
this.mnuBinaryDisplay.Name = "mnuBinaryDisplay";
this.mnuBinaryDisplay.Size = new System.Drawing.Size(193, 22);
this.mnuBinaryDisplay.Text = "Binary Display";
this.mnuBinaryDisplay.Click += new System.EventHandler(this.mnuBinaryDisplay_Click);
//
// toolStripMenuItem5
//
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
this.toolStripMenuItem5.Size = new System.Drawing.Size(190, 6);
//
// mnuRowDisplayFormat
//
this.mnuRowDisplayFormat.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -318,6 +290,34 @@
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(190, 6);
//
// mnuDecimalDisplay
//
this.mnuDecimalDisplay.Name = "mnuDecimalDisplay";
this.mnuDecimalDisplay.Size = new System.Drawing.Size(193, 22);
this.mnuDecimalDisplay.Text = "Decimal Display";
this.mnuDecimalDisplay.Click += new System.EventHandler(this.mnuDecimalDisplay_Click);
//
// mnuHexDisplay
//
this.mnuHexDisplay.Checked = true;
this.mnuHexDisplay.CheckState = System.Windows.Forms.CheckState.Checked;
this.mnuHexDisplay.Name = "mnuHexDisplay";
this.mnuHexDisplay.Size = new System.Drawing.Size(193, 22);
this.mnuHexDisplay.Text = "Hexadecimal Display";
this.mnuHexDisplay.Click += new System.EventHandler(this.mnuHexDisplay_Click);
//
// mnuBinaryDisplay
//
this.mnuBinaryDisplay.Name = "mnuBinaryDisplay";
this.mnuBinaryDisplay.Size = new System.Drawing.Size(193, 22);
this.mnuBinaryDisplay.Text = "Binary Display";
this.mnuBinaryDisplay.Click += new System.EventHandler(this.mnuBinaryDisplay_Click);
//
// toolStripMenuItem5
//
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
this.toolStripMenuItem5.Size = new System.Drawing.Size(190, 6);
//
// mnuImport
//
this.mnuImport.Image = global::Mesen.GUI.Properties.Resources.Import;

View file

@ -12,6 +12,7 @@ using Mesen.GUI.Controls;
using System.Text.RegularExpressions;
using System.Globalization;
using Mesen.GUI.Forms;
using Mesen.GUI.Debugger.Labels;
namespace Mesen.GUI.Debugger
{
@ -24,7 +25,7 @@ namespace Mesen.GUI.Debugger
private int _previousMaxLength = -1;
private int _selectedAddress = -1;
//private CodeLabel _selectedLabel = null;
private CodeLabel _selectedLabel = null;
private List<WatchValueInfo> _previousValues = new List<WatchValueInfo>();
private bool _isEditing = false;
@ -201,19 +202,17 @@ namespace Mesen.GUI.Debugger
if(address[0] >= '0' && address[0] <= '9' || address[0] == '$') {
//CPU Address
_selectedAddress = Int32.Parse(address[0] == '$' ? address.Substring(1) : address, address[0] == '$' ? NumberStyles.AllowHexSpecifier : NumberStyles.None);
//TODO
//_selectedLabel = null;
_selectedLabel = null;
mnuEditInMemoryViewer.Enabled = true;
mnuViewInDisassembly.Enabled = true;
} else {
//Label
_selectedAddress = -1;
//TODO
/*_selectedLabel = LabelManager.GetLabel(address);
_selectedLabel = LabelManager.GetLabel(address);
if(_selectedLabel != null) {
mnuEditInMemoryViewer.Enabled = true;
mnuViewInDisassembly.Enabled = true;
}*/
}
}
}
@ -235,33 +234,31 @@ namespace Mesen.GUI.Debugger
private void mnuViewInDisassembly_Click(object sender, EventArgs e)
{
//TODO
/*if(lstWatch.SelectedItems.Count != 1) {
if(lstWatch.SelectedItems.Count != 1) {
return;
}
if(_selectedAddress >= 0) {
DebugWindowManager.GetDebugger().ScrollToAddress(_selectedAddress);
DebugWindowManager.OpenDebugger(_cpuType).GoToAddress(_selectedAddress);
} else if(_selectedLabel != null) {
int relAddress = _selectedLabel.GetRelativeAddress();
if(relAddress >= 0) {
DebugWindowManager.GetDebugger().ScrollToAddress(relAddress);
AddressInfo relAddress = _selectedLabel.GetRelativeAddress();
if(relAddress.Address >= 0) {
DebugWindowManager.OpenDebugger(_cpuType).GoToAddress(relAddress.Address);
}
}*/
}
}
private void mnuEditInMemoryViewer_Click(object sender, EventArgs e)
{
//TODO
/*if(lstWatch.SelectedItems.Count != 1) {
if(lstWatch.SelectedItems.Count != 1) {
return;
}
if(_selectedAddress >= 0) {
DebugWindowManager.OpenMemoryViewer(_selectedAddress, DebugMemoryType.CpuMemory);
DebugWindowManager.OpenMemoryViewer(new AddressInfo() { Address = _selectedAddress, Type = _cpuType.ToMemoryType() });
} else if(_selectedLabel != null) {
DebugWindowManager.OpenMemoryViewer((int)_selectedLabel.Address, _selectedLabel.AddressType.ToMemoryType());
}*/
DebugWindowManager.OpenMemoryViewer(_selectedLabel.GetAbsoluteAddress());
}
}
private void StartEdit(string text, ListViewItem selectedItem = null)

View file

@ -613,6 +613,20 @@ namespace Mesen.GUI
Spc,
}
public static class CpuTypeExtensions
{
public static SnesMemoryType ToMemoryType(this CpuType cpuType)
{
switch(cpuType) {
case CpuType.Cpu: return SnesMemoryType.CpuMemory;
case CpuType.Spc: return SnesMemoryType.SpcMemory;
default:
throw new Exception("Invalid CPU type");
}
}
}
public enum StepType
{
CpuStep,