mirror of
https://github.com/SourMesen/Mesen-S.git
synced 2024-06-23 06:41:55 -04:00
Debugger: Implemented "edit in memory tools" and "view in disassembly" context menu options in watch list
This commit is contained in:
parent
71ddf2bf1c
commit
1290fa90f6
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
66
UI/Debugger/Controls/ctrlWatch.Designer.cs
generated
66
UI/Debugger/Controls/ctrlWatch.Designer.cs
generated
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue