Debugger: SPC - Option to select disassembly format (6502-like vs original)
This commit is contained in:
parent
6e37291061
commit
6d9fb65ffd
10 changed files with 77 additions and 17 deletions
|
@ -4,6 +4,7 @@
|
||||||
#include "KeyManager.h"
|
#include "KeyManager.h"
|
||||||
#include "MessageManager.h"
|
#include "MessageManager.h"
|
||||||
#include "Console.h"
|
#include "Console.h"
|
||||||
|
#include "SpcDisUtils.h"
|
||||||
#include "NotificationManager.h"
|
#include "NotificationManager.h"
|
||||||
#include "../Utilities/FolderUtilities.h"
|
#include "../Utilities/FolderUtilities.h"
|
||||||
|
|
||||||
|
@ -277,6 +278,10 @@ void EmuSettings::SetDebuggerFlag(DebuggerFlags flag, bool enabled)
|
||||||
_debuggerFlags &= ~(int)flag;
|
_debuggerFlags &= ~(int)flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(flag == DebuggerFlags::UseAltSpcOpNames) {
|
||||||
|
SpcDisUtils::UseAltSpcOpNames = enabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EmuSettings::CheckDebuggerFlag(DebuggerFlags flag)
|
bool EmuSettings::CheckDebuggerFlag(DebuggerFlags flag)
|
||||||
|
|
|
@ -477,6 +477,8 @@ enum class DebuggerFlags : uint32_t
|
||||||
|
|
||||||
ShowUnidentifiedData = 0x400,
|
ShowUnidentifiedData = 0x400,
|
||||||
DisassembleUnidentifiedData = 0x800,
|
DisassembleUnidentifiedData = 0x800,
|
||||||
|
|
||||||
|
UseAltSpcOpNames = 0x1000,
|
||||||
|
|
||||||
GsuDebuggerEnabled = 0x10000000,
|
GsuDebuggerEnabled = 0x10000000,
|
||||||
Sa1DebuggerEnabled = 0x20000000,
|
Sa1DebuggerEnabled = 0x20000000,
|
||||||
|
|
|
@ -44,6 +44,8 @@ void SpcDebugger::ProcessRead(uint16_t addr, uint8_t value, MemoryOperationType
|
||||||
MemoryOperationInfo operation { addr, value, type };
|
MemoryOperationInfo operation { addr, value, type };
|
||||||
|
|
||||||
if(type == MemoryOperationType::ExecOpCode) {
|
if(type == MemoryOperationType::ExecOpCode) {
|
||||||
|
BreakSource breakSource = BreakSource::Unspecified;
|
||||||
|
|
||||||
SpcState spcState = _spc->GetState();
|
SpcState spcState = _spc->GetState();
|
||||||
|
|
||||||
if(_traceLogger->IsCpuLogged(CpuType::Spc) || _settings->CheckDebuggerFlag(DebuggerFlags::SpcDebuggerEnabled)) {
|
if(_traceLogger->IsCpuLogged(CpuType::Spc) || _settings->CheckDebuggerFlag(DebuggerFlags::SpcDebuggerEnabled)) {
|
||||||
|
@ -79,6 +81,17 @@ void SpcDebugger::ProcessRead(uint16_t addr, uint8_t value, MemoryOperationType
|
||||||
if(_step->StepCount > 0) {
|
if(_step->StepCount > 0) {
|
||||||
_step->StepCount--;
|
_step->StepCount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(_settings->CheckDebuggerFlag(DebuggerFlags::SpcDebuggerEnabled)) {
|
||||||
|
//Break on BRK/STP
|
||||||
|
if(value == 0x0F && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnBrk)) {
|
||||||
|
breakSource = BreakSource::BreakOnBrk;
|
||||||
|
_step->StepCount = 0;
|
||||||
|
} else if(value == 0xFF && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnStp)) {
|
||||||
|
breakSource = BreakSource::BreakOnStp;
|
||||||
|
_step->StepCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_debugger->ProcessBreakConditions(_step->StepCount == 0, GetBreakpointManager(), operation, addressInfo);
|
_debugger->ProcessBreakConditions(_step->StepCount == 0, GetBreakpointManager(), operation, addressInfo);
|
||||||
|
|
|
@ -7,7 +7,9 @@
|
||||||
#include "../Utilities/FastString.h"
|
#include "../Utilities/FastString.h"
|
||||||
#include "../Utilities/HexUtilities.h"
|
#include "../Utilities/HexUtilities.h"
|
||||||
|
|
||||||
/*constexpr const char* _opTemplate[256] = {
|
bool SpcDisUtils::UseAltSpcOpNames = false;
|
||||||
|
|
||||||
|
constexpr const char* _altOpTemplate[256] = {
|
||||||
"NOP", "TCALL 0", "SET1 d.0", "BBS d.0, q", "OR A, d", "OR A, !a", "OR A, (X)", "OR A, [d+X]", "OR A, #i", "OR t, s", "OR1 C, m.b", "ASL d", "ASL !a", "PUSH PSW", "TSET1 !a", "BRK",
|
"NOP", "TCALL 0", "SET1 d.0", "BBS d.0, q", "OR A, d", "OR A, !a", "OR A, (X)", "OR A, [d+X]", "OR A, #i", "OR t, s", "OR1 C, m.b", "ASL d", "ASL !a", "PUSH PSW", "TSET1 !a", "BRK",
|
||||||
"BPL r", "TCALL 1", "CLR1 d.0", "BBC d.0, q", "OR A, d+X", "OR A, !a+X", "OR A, !a+Y", "OR A, [d]+Y", "OR e, #i", "OR (X), (Y)", "DECW d", "ASL d+X", "ASL A", "DEC X", "CMP X, !a", "JMP [!a+X]",
|
"BPL r", "TCALL 1", "CLR1 d.0", "BBC d.0, q", "OR A, d+X", "OR A, !a+X", "OR A, !a+Y", "OR A, [d]+Y", "OR e, #i", "OR (X), (Y)", "DECW d", "ASL d+X", "ASL A", "DEC X", "CMP X, !a", "JMP [!a+X]",
|
||||||
"CLRP", "TCALL 2", "SET1 d.1", "BBS d.1, q", "AND A, d", "AND A, !a", "AND A, (X)", "AND A, [d+X]", "AND A, #i", "AND t, s", "OR1 C, /m.b", "ROL d", "ROL !a", "PUSH A", "CBNE d, q", "BRA r",
|
"CLRP", "TCALL 2", "SET1 d.1", "BBS d.1, q", "AND A, d", "AND A, !a", "AND A, (X)", "AND A, [d+X]", "AND A, #i", "AND t, s", "OR1 C, /m.b", "ROL d", "ROL !a", "PUSH A", "CBNE d, q", "BRA r",
|
||||||
|
@ -24,7 +26,7 @@
|
||||||
"BNE r", "TCALL 13", "CLR1 d.6", "BBC d.6, q", "MOV d+X, A", "MOV !a+X, A", "MOV !a+Y, A", "MOV [d]+Y, A", "MOV e, X", "MOV d+Y, X", "MOVW d, YA", "MOV d+X, Y", "DEC Y", "MOV A, Y", "CBNE d+X, q", "DAA A",
|
"BNE r", "TCALL 13", "CLR1 d.6", "BBC d.6, q", "MOV d+X, A", "MOV !a+X, A", "MOV !a+Y, A", "MOV [d]+Y, A", "MOV e, X", "MOV d+Y, X", "MOVW d, YA", "MOV d+X, Y", "DEC Y", "MOV A, Y", "CBNE d+X, q", "DAA A",
|
||||||
"CLRV", "TCALL 14", "SET1 d.7", "BBS d.7, q", "MOV A, d", "MOV A, !a", "MOV A, (X)", "MOV A, [d+X]", "MOV A, #i", "MOV X, !a", "NOT1 m.b", "MOV Y, d", "MOV Y, !a","NOTC", "POP Y", "SLEEP",
|
"CLRV", "TCALL 14", "SET1 d.7", "BBS d.7, q", "MOV A, d", "MOV A, !a", "MOV A, (X)", "MOV A, [d+X]", "MOV A, #i", "MOV X, !a", "NOT1 m.b", "MOV Y, d", "MOV Y, !a","NOTC", "POP Y", "SLEEP",
|
||||||
"BEQ r", "TCALL 15", "CLR1 d.7", "BBC d.7, q", "MOV A, d+X", "MOV A, !a+X", "MOV A, !a+Y", "MOV A, [d]+Y", "MOV X, d", "MOV X, d+Y", "MOV t, s", "MOV Y, d+X", "INC Y", "MOV Y, A", "DBNZ Y, q", "STOP"
|
"BEQ r", "TCALL 15", "CLR1 d.7", "BBC d.7, q", "MOV A, d+X", "MOV A, !a+X", "MOV A, !a+Y", "MOV A, [d]+Y", "MOV X, d", "MOV X, d+Y", "MOV t, s", "MOV Y, d+X", "INC Y", "MOV Y, A", "DBNZ Y, q", "STOP"
|
||||||
};*/
|
};
|
||||||
|
|
||||||
constexpr const char* _opTemplate[256] = {
|
constexpr const char* _opTemplate[256] = {
|
||||||
"NOP", "JST0", "SET1 d.0", "BBS d.0, q", "ORA d", "ORA a", "ORA (X)", "ORA [d,X]", "ORA #i", "OR t, s", "ORC m.b", "ASL d", "ASL a", "PHP", "SET1 a", "BRK",
|
"NOP", "JST0", "SET1 d.0", "BBS d.0, q", "ORA d", "ORA a", "ORA (X)", "ORA [d,X]", "ORA #i", "OR t, s", "ORC m.b", "ASL d", "ASL a", "PHP", "SET1 a", "BRK",
|
||||||
|
@ -42,7 +44,7 @@ constexpr const char* _opTemplate[256] = {
|
||||||
"SEI", "JSTC", "SET1 d.6", "BBS d.6, q", "STA d", "STA a", "STA (X)", "STA [d,X]", "CPX #i", "STX a", "STC m.b", "STY d", "STY a", "LDX #i","PLX", "MUL YA",
|
"SEI", "JSTC", "SET1 d.6", "BBS d.6, q", "STA d", "STA a", "STA (X)", "STA [d,X]", "CPX #i", "STX a", "STC m.b", "STY d", "STY a", "LDX #i","PLX", "MUL YA",
|
||||||
"BNE r", "JSTD", "CLR1 d.6", "BBC d.6, q", "STA d,X", "STA a,X", "STA a,Y", "STA [d],Y", "STX d", "STX d,Y", "STW d", "STY d,X", "DEY", "TYA", "CBNE d,X, q", "DAA A",
|
"BNE r", "JSTD", "CLR1 d.6", "BBC d.6, q", "STA d,X", "STA a,X", "STA a,Y", "STA [d],Y", "STX d", "STX d,Y", "STW d", "STY d,X", "DEY", "TYA", "CBNE d,X, q", "DAA A",
|
||||||
"CLV", "JSTE", "SET1 d.7", "BBS d.7, q", "LDA d", "LDA a", "LDA (X)", "LDA [d,X]", "LDA #i", "LDX a", "NOT m.b", "LDY d", "LDY a", "NOTC", "PLY", "WAI",
|
"CLV", "JSTE", "SET1 d.7", "BBS d.7, q", "LDA d", "LDA a", "LDA (X)", "LDA [d,X]", "LDA #i", "LDX a", "NOT m.b", "LDY d", "LDY a", "NOTC", "PLY", "WAI",
|
||||||
"BEQ r", "JSTF", "CLR1 d.7", "BBC d.7, q", "LDA d,X", "LDA a,X", "LDA a,Y", "LDA [d],Y", "LDX d", "LDX d,Y", "MOV t,s", "LDY d,X", "INC Y", "TAY", "DBNZ Y, r", "HLT"
|
"BEQ r", "JSTF", "CLR1 d.7", "BBC d.7, q", "LDA d,X", "LDA a,X", "LDA a,Y", "LDA [d],Y", "LDX d", "LDX d,Y", "MOV t,s", "LDY d,X", "INC Y", "TAY", "DBNZ Y, r", "STP"
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const uint8_t _opSize[256] = {
|
constexpr const uint8_t _opSize[256] = {
|
||||||
|
@ -99,7 +101,7 @@ void SpcDisUtils::GetDisassembly(DisassemblyInfo &info, string &out, uint32_t me
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t* byteCode = info.GetByteCode();
|
uint8_t* byteCode = info.GetByteCode();
|
||||||
const char* op = _opTemplate[byteCode[0]];
|
const char* op = SpcDisUtils::UseAltSpcOpNames ? _altOpTemplate[byteCode[0]] : _opTemplate[byteCode[0]];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while(op[i]) {
|
while(op[i]) {
|
||||||
switch(op[i]) {
|
switch(op[i]) {
|
||||||
|
|
|
@ -9,6 +9,8 @@ struct SpcState;
|
||||||
class SpcDisUtils
|
class SpcDisUtils
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static bool UseAltSpcOpNames;
|
||||||
|
|
||||||
static void GetDisassembly(DisassemblyInfo &info, string &out, uint32_t memoryAddr, LabelManager* labelManager);
|
static void GetDisassembly(DisassemblyInfo &info, string &out, uint32_t memoryAddr, LabelManager* labelManager);
|
||||||
static int32_t GetEffectiveAddress(DisassemblyInfo &info, Console *console, SpcState &state);
|
static int32_t GetEffectiveAddress(DisassemblyInfo &info, Console *console, SpcState &state);
|
||||||
static uint8_t GetOpSize(uint8_t opCode);
|
static uint8_t GetOpSize(uint8_t opCode);
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace Mesen.GUI.Config
|
||||||
public CodeDisplayMode UnidentifiedBlockDisplay = CodeDisplayMode.Hide;
|
public CodeDisplayMode UnidentifiedBlockDisplay = CodeDisplayMode.Hide;
|
||||||
public CodeDisplayMode VerifiedDataDisplay = CodeDisplayMode.Hide;
|
public CodeDisplayMode VerifiedDataDisplay = CodeDisplayMode.Hide;
|
||||||
|
|
||||||
|
public bool UseAltSpcOpNames = false;
|
||||||
|
|
||||||
public int BreakOnValue = 0;
|
public int BreakOnValue = 0;
|
||||||
public int BreakInCount = 1;
|
public int BreakInCount = 1;
|
||||||
public BreakInMetric BreakInMetric = BreakInMetric.CpuInstructions;
|
public BreakInMetric BreakInMetric = BreakInMetric.CpuInstructions;
|
||||||
|
@ -75,6 +77,8 @@ namespace Mesen.GUI.Config
|
||||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.DisassembleUnidentifiedData, UnidentifiedBlockDisplay == CodeDisplayMode.Disassemble);
|
ConfigApi.SetDebuggerFlag(DebuggerFlags.DisassembleUnidentifiedData, UnidentifiedBlockDisplay == CodeDisplayMode.Disassemble);
|
||||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.ShowVerifiedData, VerifiedDataDisplay == CodeDisplayMode.Show);
|
ConfigApi.SetDebuggerFlag(DebuggerFlags.ShowVerifiedData, VerifiedDataDisplay == CodeDisplayMode.Show);
|
||||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.DisassembleVerifiedData, VerifiedDataDisplay == CodeDisplayMode.Disassemble);
|
ConfigApi.SetDebuggerFlag(DebuggerFlags.DisassembleVerifiedData, VerifiedDataDisplay == CodeDisplayMode.Disassemble);
|
||||||
|
|
||||||
|
ConfigApi.SetDebuggerFlag(DebuggerFlags.UseAltSpcOpNames, UseAltSpcOpNames);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -442,7 +442,7 @@ namespace Mesen.GUI.Debugger.Controls
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
char[] _wordDelimiters = new char[] { ' ', ',', '|', ';', '(', ')', '.', '-', ':', '<', '>', '#', '*', '/', '&', '[', ']', '~', '%' };
|
char[] _wordDelimiters = new char[] { ' ', ',', '|', ';', '(', ')', '.', '-', ':', '<', '>', '#', '*', '/', '&', '[', ']', '~', '%', '!' };
|
||||||
public string GetWordUnderLocation(Point position)
|
public string GetWordUnderLocation(Point position)
|
||||||
{
|
{
|
||||||
int charIndex;
|
int charIndex;
|
||||||
|
|
34
UI/Debugger/frmDebugger.Designer.cs
generated
34
UI/Debugger/frmDebugger.Designer.cs
generated
|
@ -90,6 +90,7 @@
|
||||||
this.mnuShowData = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuShowData = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.mnuShowByteCode = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuShowByteCode = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.mnuUseAltSpcOpNames = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuBreakOptions = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuBreakOnPowerCycleReset = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOnPowerCycleReset = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuBreakOnOpen = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOnOpen = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -98,7 +99,7 @@
|
||||||
this.mnuBreakOnCop = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOnCop = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuBreakOnStp = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOnStp = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.mnuBreakOnWdm = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOnWdm = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripSeparator();
|
this.sepBreakOnUnitRead = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.mnuBreakOnUnitRead = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBreakOnUnitRead = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.mnuBringToFrontOnBreak = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuBringToFrontOnBreak = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -519,7 +520,8 @@
|
||||||
this.mnuUnidentifiedData,
|
this.mnuUnidentifiedData,
|
||||||
this.mnuVerifiedData,
|
this.mnuVerifiedData,
|
||||||
this.toolStripMenuItem6,
|
this.toolStripMenuItem6,
|
||||||
this.mnuShowByteCode});
|
this.mnuShowByteCode,
|
||||||
|
this.mnuUseAltSpcOpNames});
|
||||||
this.mnuDisassemblyOptions.Name = "mnuDisassemblyOptions";
|
this.mnuDisassemblyOptions.Name = "mnuDisassemblyOptions";
|
||||||
this.mnuDisassemblyOptions.Size = new System.Drawing.Size(209, 22);
|
this.mnuDisassemblyOptions.Size = new System.Drawing.Size(209, 22);
|
||||||
this.mnuDisassemblyOptions.Text = "Disassembly Options";
|
this.mnuDisassemblyOptions.Text = "Disassembly Options";
|
||||||
|
@ -532,7 +534,7 @@
|
||||||
this.mnuShowUnident});
|
this.mnuShowUnident});
|
||||||
this.mnuUnidentifiedData.Image = global::Mesen.GUI.Properties.Resources.UnidentifiedData;
|
this.mnuUnidentifiedData.Image = global::Mesen.GUI.Properties.Resources.UnidentifiedData;
|
||||||
this.mnuUnidentifiedData.Name = "mnuUnidentifiedData";
|
this.mnuUnidentifiedData.Name = "mnuUnidentifiedData";
|
||||||
this.mnuUnidentifiedData.Size = new System.Drawing.Size(199, 22);
|
this.mnuUnidentifiedData.Size = new System.Drawing.Size(217, 22);
|
||||||
this.mnuUnidentifiedData.Text = "Unidentified Code/Data";
|
this.mnuUnidentifiedData.Text = "Unidentified Code/Data";
|
||||||
this.mnuUnidentifiedData.DropDownOpening += new System.EventHandler(this.mnuUnidentifiedData_DropDownOpening);
|
this.mnuUnidentifiedData.DropDownOpening += new System.EventHandler(this.mnuUnidentifiedData_DropDownOpening);
|
||||||
//
|
//
|
||||||
|
@ -562,7 +564,7 @@
|
||||||
this.mnuShowData});
|
this.mnuShowData});
|
||||||
this.mnuVerifiedData.Image = global::Mesen.GUI.Properties.Resources.VerifiedData;
|
this.mnuVerifiedData.Image = global::Mesen.GUI.Properties.Resources.VerifiedData;
|
||||||
this.mnuVerifiedData.Name = "mnuVerifiedData";
|
this.mnuVerifiedData.Name = "mnuVerifiedData";
|
||||||
this.mnuVerifiedData.Size = new System.Drawing.Size(199, 22);
|
this.mnuVerifiedData.Size = new System.Drawing.Size(217, 22);
|
||||||
this.mnuVerifiedData.Text = "Verified Data";
|
this.mnuVerifiedData.Text = "Verified Data";
|
||||||
this.mnuVerifiedData.DropDownOpening += new System.EventHandler(this.mnuVerifiedData_DropDownOpening);
|
this.mnuVerifiedData.DropDownOpening += new System.EventHandler(this.mnuVerifiedData_DropDownOpening);
|
||||||
//
|
//
|
||||||
|
@ -587,15 +589,22 @@
|
||||||
// toolStripMenuItem6
|
// toolStripMenuItem6
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
|
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
|
||||||
this.toolStripMenuItem6.Size = new System.Drawing.Size(196, 6);
|
this.toolStripMenuItem6.Size = new System.Drawing.Size(214, 6);
|
||||||
//
|
//
|
||||||
// mnuShowByteCode
|
// mnuShowByteCode
|
||||||
//
|
//
|
||||||
this.mnuShowByteCode.CheckOnClick = true;
|
this.mnuShowByteCode.CheckOnClick = true;
|
||||||
this.mnuShowByteCode.Name = "mnuShowByteCode";
|
this.mnuShowByteCode.Name = "mnuShowByteCode";
|
||||||
this.mnuShowByteCode.Size = new System.Drawing.Size(199, 22);
|
this.mnuShowByteCode.Size = new System.Drawing.Size(217, 22);
|
||||||
this.mnuShowByteCode.Text = "Show byte code";
|
this.mnuShowByteCode.Text = "Show byte code";
|
||||||
//
|
//
|
||||||
|
// mnuUseAltSpcOpNames
|
||||||
|
//
|
||||||
|
this.mnuUseAltSpcOpNames.CheckOnClick = true;
|
||||||
|
this.mnuUseAltSpcOpNames.Name = "mnuUseAltSpcOpNames";
|
||||||
|
this.mnuUseAltSpcOpNames.Size = new System.Drawing.Size(217, 22);
|
||||||
|
this.mnuUseAltSpcOpNames.Text = "Use alternative mnemonics";
|
||||||
|
//
|
||||||
// mnuBreakOptions
|
// mnuBreakOptions
|
||||||
//
|
//
|
||||||
this.mnuBreakOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.mnuBreakOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -606,7 +615,7 @@
|
||||||
this.mnuBreakOnCop,
|
this.mnuBreakOnCop,
|
||||||
this.mnuBreakOnStp,
|
this.mnuBreakOnStp,
|
||||||
this.mnuBreakOnWdm,
|
this.mnuBreakOnWdm,
|
||||||
this.toolStripMenuItem11,
|
this.sepBreakOnUnitRead,
|
||||||
this.mnuBreakOnUnitRead,
|
this.mnuBreakOnUnitRead,
|
||||||
this.toolStripMenuItem10,
|
this.toolStripMenuItem10,
|
||||||
this.mnuBringToFrontOnBreak,
|
this.mnuBringToFrontOnBreak,
|
||||||
|
@ -657,10 +666,10 @@
|
||||||
this.mnuBreakOnWdm.Size = new System.Drawing.Size(261, 22);
|
this.mnuBreakOnWdm.Size = new System.Drawing.Size(261, 22);
|
||||||
this.mnuBreakOnWdm.Text = "Break on WDM";
|
this.mnuBreakOnWdm.Text = "Break on WDM";
|
||||||
//
|
//
|
||||||
// toolStripMenuItem11
|
// sepBreakOnUnitRead
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem11.Name = "toolStripMenuItem11";
|
this.sepBreakOnUnitRead.Name = "sepBreakOnUnitRead";
|
||||||
this.toolStripMenuItem11.Size = new System.Drawing.Size(258, 6);
|
this.sepBreakOnUnitRead.Size = new System.Drawing.Size(258, 6);
|
||||||
//
|
//
|
||||||
// mnuBreakOnUnitRead
|
// mnuBreakOnUnitRead
|
||||||
//
|
//
|
||||||
|
@ -1039,7 +1048,7 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnBrk;
|
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnBrk;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnCop;
|
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnCop;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnWdm;
|
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnWdm;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem11;
|
private System.Windows.Forms.ToolStripSeparator sepBreakOnUnitRead;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnUnitRead;
|
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnUnitRead;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnOpen;
|
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnOpen;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem10;
|
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem10;
|
||||||
|
@ -1057,5 +1066,6 @@
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem13;
|
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem13;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuExit;
|
private System.Windows.Forms.ToolStripMenuItem mnuExit;
|
||||||
private Controls.ctrlGsuStatus ctrlGsuStatus;
|
private Controls.ctrlGsuStatus ctrlGsuStatus;
|
||||||
}
|
private System.Windows.Forms.ToolStripMenuItem mnuUseAltSpcOpNames;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -44,6 +44,8 @@ namespace Mesen.GUI.Debugger
|
||||||
_notifListener = new NotificationListener();
|
_notifListener = new NotificationListener();
|
||||||
_notifListener.OnNotification += OnNotificationReceived;
|
_notifListener.OnNotification += OnNotificationReceived;
|
||||||
|
|
||||||
|
mnuUseAltSpcOpNames.Visible = false;
|
||||||
|
|
||||||
switch(_cpuType) {
|
switch(_cpuType) {
|
||||||
case CpuType.Cpu:
|
case CpuType.Cpu:
|
||||||
ctrlDisassemblyView.Initialize(new CpuDisassemblyManager(), new CpuLineStyleProvider());
|
ctrlDisassemblyView.Initialize(new CpuDisassemblyManager(), new CpuLineStyleProvider());
|
||||||
|
@ -54,6 +56,11 @@ namespace Mesen.GUI.Debugger
|
||||||
case CpuType.Spc:
|
case CpuType.Spc:
|
||||||
ctrlDisassemblyView.Initialize(new SpcDisassemblyManager(), new SpcLineStyleProvider());
|
ctrlDisassemblyView.Initialize(new SpcDisassemblyManager(), new SpcLineStyleProvider());
|
||||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.SpcDebuggerEnabled, true);
|
ConfigApi.SetDebuggerFlag(DebuggerFlags.SpcDebuggerEnabled, true);
|
||||||
|
mnuBreakOnWdm.Visible = false;
|
||||||
|
mnuBreakOnCop.Visible = false;
|
||||||
|
mnuBreakOnUnitRead.Visible = false;
|
||||||
|
sepBreakOnUnitRead.Visible = false;
|
||||||
|
mnuUseAltSpcOpNames.Visible = true;
|
||||||
this.Text = "SPC Debugger";
|
this.Text = "SPC Debugger";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -73,6 +80,13 @@ namespace Mesen.GUI.Debugger
|
||||||
mnuStepOut.Visible = false;
|
mnuStepOut.Visible = false;
|
||||||
mnuStepInto.Text = "Step";
|
mnuStepInto.Text = "Step";
|
||||||
tlpBottomPanel.ColumnCount = 2;
|
tlpBottomPanel.ColumnCount = 2;
|
||||||
|
|
||||||
|
mnuBreakOnWdm.Visible = false;
|
||||||
|
mnuBreakOnCop.Visible = false;
|
||||||
|
mnuBreakOnStp.Visible = false;
|
||||||
|
mnuBreakOnBrk.Visible = false;
|
||||||
|
sepBreakOnUnitRead.Visible = false;
|
||||||
|
mnuBreakOnUnitRead.Visible = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,8 +296,14 @@ namespace Mesen.GUI.Debugger
|
||||||
DebuggerInfo cfg = ConfigManager.Config.Debug.Debugger;
|
DebuggerInfo cfg = ConfigManager.Config.Debug.Debugger;
|
||||||
_entityBinder.Entity = cfg;
|
_entityBinder.Entity = cfg;
|
||||||
_entityBinder.AddBinding(nameof(cfg.ShowByteCode), mnuShowByteCode);
|
_entityBinder.AddBinding(nameof(cfg.ShowByteCode), mnuShowByteCode);
|
||||||
|
_entityBinder.AddBinding(nameof(cfg.UseAltSpcOpNames), mnuUseAltSpcOpNames);
|
||||||
|
|
||||||
mnuShowByteCode.CheckedChanged += (s, e) => { ctrlDisassemblyView.CodeViewer.ShowContentNotes = mnuShowByteCode.Checked; };
|
mnuShowByteCode.CheckedChanged += (s, e) => { ctrlDisassemblyView.CodeViewer.ShowContentNotes = mnuShowByteCode.Checked; };
|
||||||
|
mnuUseAltSpcOpNames.CheckedChanged += (s, e) => {
|
||||||
|
_entityBinder.UpdateObject();
|
||||||
|
cfg.ApplyConfig();
|
||||||
|
RefreshDisassembly();
|
||||||
|
};
|
||||||
|
|
||||||
_entityBinder.UpdateUI();
|
_entityBinder.UpdateUI();
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,8 @@ namespace Mesen.GUI
|
||||||
ShowUnidentifiedData = 0x400,
|
ShowUnidentifiedData = 0x400,
|
||||||
DisassembleUnidentifiedData = 0x800,
|
DisassembleUnidentifiedData = 0x800,
|
||||||
|
|
||||||
|
UseAltSpcOpNames = 0x1000,
|
||||||
|
|
||||||
GsuDebuggerEnabled = 0x10000000,
|
GsuDebuggerEnabled = 0x10000000,
|
||||||
Sa1DebuggerEnabled = 0x20000000,
|
Sa1DebuggerEnabled = 0x20000000,
|
||||||
SpcDebuggerEnabled = 0x40000000,
|
SpcDebuggerEnabled = 0x40000000,
|
||||||
|
|
Loading…
Add table
Reference in a new issue