Debugger: Allow byte code to be shown in source view
This commit is contained in:
parent
0b54ef6c0b
commit
413cf7a212
4 changed files with 47 additions and 29 deletions
|
@ -33,7 +33,7 @@
|
|||
this.mnuMarkAsCode = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuMarkAsData = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuMarkAsUnidentifiedData = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.sepMarkSelectionAs = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuEditSelectedCode = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuEditSubroutine = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuUndoPrgChrEdit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -76,7 +76,7 @@
|
|||
//
|
||||
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuMarkSelectionAs,
|
||||
this.toolStripMenuItem4,
|
||||
this.sepMarkSelectionAs,
|
||||
this.mnuEditSelectedCode,
|
||||
this.mnuEditSubroutine,
|
||||
this.mnuUndoPrgChrEdit,
|
||||
|
@ -142,10 +142,10 @@
|
|||
this.mnuMarkAsUnidentifiedData.Text = "Unidentified Code/Data";
|
||||
this.mnuMarkAsUnidentifiedData.Click += new System.EventHandler(this.mnuMarkAsUnidentifiedData_Click);
|
||||
//
|
||||
// toolStripMenuItem4
|
||||
// sepMarkSelectionAs
|
||||
//
|
||||
this.toolStripMenuItem4.Name = "toolStripMenuItem4";
|
||||
this.toolStripMenuItem4.Size = new System.Drawing.Size(250, 6);
|
||||
this.sepMarkSelectionAs.Name = "sepMarkSelectionAs";
|
||||
this.sepMarkSelectionAs.Size = new System.Drawing.Size(250, 6);
|
||||
//
|
||||
// mnuEditSelectedCode
|
||||
//
|
||||
|
@ -417,7 +417,7 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem mnuMarkAsCode;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuMarkAsData;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuMarkAsUnidentifiedData;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;
|
||||
private System.Windows.Forms.ToolStripSeparator sepMarkSelectionAs;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuEditSelectedCode;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuEditSubroutine;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuUndoPrgChrEdit;
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
private DebugViewInfo _config;
|
||||
|
||||
public ICodeViewer Viewer { get; set; }
|
||||
public bool SourceView { get; set; }
|
||||
public bool SourceView { get; private set; }
|
||||
|
||||
public CodeViewerActions()
|
||||
{
|
||||
|
@ -465,9 +465,13 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
items[nameof(mnuSetNextStatement)].Enabled = Viewer.ActiveAddress.HasValue;
|
||||
items[nameof(mnuEditSelectedCode)].Enabled = items[nameof(mnuEditSubroutine)].Enabled = InteropEmu.DebugIsExecutionStopped() && Viewer.CodeViewer.CurrentLine >= 0;
|
||||
|
||||
bool hasSymbolProvider = Viewer.SymbolProvider != null;
|
||||
items[nameof(mnuShowSourceAsComments)].Visible = hasSymbolProvider;
|
||||
items[nameof(mnuSwitchView)].Visible = hasSymbolProvider;
|
||||
items[nameof(sepSwitchView)].Visible = hasSymbolProvider;
|
||||
|
||||
if(SourceView) {
|
||||
items[nameof(mnuMarkSelectionAs)].Visible = false;
|
||||
items[nameof(mnuShowCodeNotes)].Visible = false;
|
||||
|
||||
items[nameof(mnuFindOccurrences)].Visible = false;
|
||||
items[nameof(mnuEditSubroutine)].Visible = false;
|
||||
|
@ -477,12 +481,8 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
items[nameof(mnuEditLabel)].Visible = false;
|
||||
items[nameof(sepNavigation)].Visible = false;
|
||||
items[nameof(mnuShowSourceAsComments)].Visible = false;
|
||||
items[nameof(sepMarkSelectionAs)].Visible = false;
|
||||
}
|
||||
|
||||
bool hasSymbolProvider = Viewer.SymbolProvider != null;
|
||||
items[nameof(mnuShowSourceAsComments)].Visible = hasSymbolProvider;
|
||||
items[nameof(mnuSwitchView)].Visible = hasSymbolProvider;
|
||||
items[nameof(sepSwitchView)].Visible = hasSymbolProvider;
|
||||
}
|
||||
|
||||
private bool UpdateContextMenu(Point mouseLocation)
|
||||
|
|
|
@ -84,17 +84,30 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
_lineNumberNotes = new List<string>();
|
||||
List<string> codeLines = new List<string>();
|
||||
|
||||
byte[] prgRomContent = InteropEmu.DebugGetMemoryState(DebugMemoryType.PrgRom);
|
||||
|
||||
bool isC = CurrentFile.Name.EndsWith(".h") || CurrentFile.Name.EndsWith(".c");
|
||||
int index = 0;
|
||||
int lineIndex = 0;
|
||||
foreach(string line in CurrentFile.Data) {
|
||||
string l = line.Replace("\t", " ");
|
||||
|
||||
addressing.Add("");
|
||||
|
||||
int prgAddress = _symbolProvider.GetPrgAddress(CurrentFile.ID, index);
|
||||
int prgAddress = _symbolProvider.GetPrgAddress(CurrentFile.ID, lineIndex);
|
||||
|
||||
if(prgAddress >= 0) {
|
||||
int opSize = frmOpCodeTooltip.GetOpSize(prgRomContent[prgAddress]);
|
||||
string byteCode = "";
|
||||
for(int i = prgAddress, end = prgAddress + opSize; i < end ; i++) {
|
||||
byteCode += "$" + prgRomContent[i].ToString("X2") + " ";
|
||||
}
|
||||
lineNotes.Add(byteCode);
|
||||
} else {
|
||||
lineNotes.Add("");
|
||||
}
|
||||
|
||||
int relativeAddress = InteropEmu.DebugGetRelativeAddress((uint)prgAddress, AddressType.PrgRom);
|
||||
lineNumbers.Add(relativeAddress);
|
||||
lineNotes.Add("");
|
||||
_lineNumberNotes.Add(prgAddress >= 0 ? prgAddress.ToString("X4") : "");
|
||||
|
||||
string trimmed = l.TrimStart();
|
||||
|
@ -115,7 +128,7 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
comments.Add("");
|
||||
codeLines.Add(trimmed);
|
||||
}
|
||||
index++;
|
||||
lineIndex++;
|
||||
}
|
||||
|
||||
ctrlCodeViewer.CodeHighlightingEnabled = !isC;
|
||||
|
|
|
@ -112,17 +112,7 @@ namespace Mesen.GUI.Debugger
|
|||
|
||||
if(relativeAddress >= 0) {
|
||||
byte opCode = InteropEmu.DebugGetMemoryValue(DebugMemoryType.CpuMemory, (UInt32)relativeAddress);
|
||||
|
||||
int opSize = 1;
|
||||
switch(AddressingModes[opCode]) {
|
||||
case AddrMode.Abs: case AddrMode.AbsX: case AddrMode.AbsXW: case AddrMode.AbsY: case AddrMode.AbsYW: case AddrMode.Ind:
|
||||
opSize = 3;
|
||||
break;
|
||||
|
||||
case AddrMode.Imm: case AddrMode.IndX: case AddrMode.IndY: case AddrMode.IndYW: case AddrMode.Rel: case AddrMode.Zero: case AddrMode.ZeroX: case AddrMode.ZeroY:
|
||||
opSize = 2;
|
||||
break;
|
||||
}
|
||||
int opSize = GetOpSize(opCode);
|
||||
|
||||
string byteCode = "";
|
||||
for(int i = 0; i < opSize; i++) {
|
||||
|
@ -171,6 +161,21 @@ namespace Mesen.GUI.Debugger
|
|||
base.OnLoad(e);
|
||||
}
|
||||
|
||||
public static int GetOpSize(byte opCode)
|
||||
{
|
||||
int opSize = 1;
|
||||
switch(AddressingModes[opCode]) {
|
||||
case AddrMode.Abs: case AddrMode.AbsX: case AddrMode.AbsXW: case AddrMode.AbsY: case AddrMode.AbsYW: case AddrMode.Ind:
|
||||
opSize = 3;
|
||||
break;
|
||||
|
||||
case AddrMode.Imm: case AddrMode.IndX: case AddrMode.IndY: case AddrMode.IndYW: case AddrMode.Rel: case AddrMode.Zero: case AddrMode.ZeroX: case AddrMode.ZeroY:
|
||||
opSize = 2;
|
||||
break;
|
||||
}
|
||||
return opSize;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
enum CpuFlag { None = 0, Carry = 1, Decimal = 2, Interrupt = 4, Negative = 8, Overflow = 16, Zero = 32 }
|
||||
|
||||
|
@ -196,7 +201,7 @@ namespace Mesen.GUI.Debugger
|
|||
AbsX, AbsXW, AbsY, AbsYW
|
||||
}
|
||||
|
||||
private AddrMode[] AddressingModes = new AddrMode[256] {
|
||||
private static AddrMode[] AddressingModes = new AddrMode[256] {
|
||||
AddrMode.Imp, AddrMode.IndX, AddrMode.None, AddrMode.IndX, AddrMode.Zero, AddrMode.Zero, AddrMode.Zero, AddrMode.Zero, AddrMode.Imp, AddrMode.Imm, AddrMode.Acc, AddrMode.Imm, AddrMode.Abs, AddrMode.Abs, AddrMode.Abs, AddrMode.Abs,
|
||||
AddrMode.Rel, AddrMode.IndY, AddrMode.None, AddrMode.IndYW, AddrMode.ZeroX, AddrMode.ZeroX, AddrMode.ZeroX, AddrMode.ZeroX, AddrMode.Imp, AddrMode.AbsY, AddrMode.Imp, AddrMode.AbsYW,AddrMode.AbsX, AddrMode.AbsX, AddrMode.AbsXW,AddrMode.AbsXW,
|
||||
AddrMode.Abs, AddrMode.IndX, AddrMode.None, AddrMode.IndX, AddrMode.Zero, AddrMode.Zero, AddrMode.Zero, AddrMode.Zero, AddrMode.Imp, AddrMode.Imm, AddrMode.Acc, AddrMode.Imm, AddrMode.Abs, AddrMode.Abs, AddrMode.Abs, AddrMode.Abs,
|
||||
|
|
Loading…
Add table
Reference in a new issue