Debugger: Option to display opcodes in lower case

This commit is contained in:
Souryo 2016-12-04 11:16:44 -05:00
parent 29a3ac45e4
commit 33ca8cb3f5
8 changed files with 51 additions and 7 deletions

View file

@ -79,7 +79,11 @@ void Debugger::Resume()
void Debugger::SetFlags(uint32_t flags)
{
bool needUpdate = ((flags ^ _flags) & (int)DebuggerFlags::DisplayOpCodesInLowerCase) != 0;
_flags = flags;
if(needUpdate) {
_disassembler->BuildOpCodeTables(CheckFlag(DebuggerFlags::DisplayOpCodesInLowerCase));
}
}
bool Debugger::CheckFlag(DebuggerFlags flag)

View file

@ -4,7 +4,8 @@ enum class DebuggerFlags
{
PpuPartialDraw = 1,
ShowEffectiveAddresses = 2,
ShowOnlyDisassembledCode = 4
ShowOnlyDisassembledCode = 4,
DisplayOpCodesInLowerCase = 8
};
enum class AddressType

View file

@ -25,6 +25,15 @@ Disassembler::Disassembler(uint8_t* internalRam, uint8_t* prgRom, uint32_t prgSi
_disassembleMemoryCache.push_back(shared_ptr<DisassemblyInfo>(nullptr));
}
BuildOpCodeTables(false);
}
Disassembler::~Disassembler()
{
}
void Disassembler::BuildOpCodeTables(bool useLowerCase)
{
string opName[256] = {
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
"BRK", "ORA", "", "SLO*", "NOP", "ORA", "ASL", "SLO*", "PHP", "ORA", "ASL", "ANC*", "NOP", "ORA", "ASL", "SLO*", //0
@ -65,7 +74,14 @@ Disassembler::Disassembler(uint8_t* internalRam, uint8_t* prgRom, uint32_t prgSi
};
for(int i = 0; i < 256; i++) {
DisassemblyInfo::OPName[i] = opName[i];
if(useLowerCase) {
string name = opName[i];
std::transform(name.begin(), name.end(), name.begin(), std::tolower);
DisassemblyInfo::OPName[i] = name;
} else {
DisassemblyInfo::OPName[i] = opName[i];
}
DisassemblyInfo::OPMode[i] = opMode[i];
switch(DisassemblyInfo::OPMode[i]) {
case AddrMode::Abs:
@ -95,10 +111,6 @@ Disassembler::Disassembler(uint8_t* internalRam, uint8_t* prgRom, uint32_t prgSi
}
}
Disassembler::~Disassembler()
{
}
bool Disassembler::IsJump(uint8_t opCode)
{
return opCode == 0x10 || opCode == 0x30|| opCode == 0x50 || opCode == 0x70 || opCode == 0x90 || opCode == 0xB0 || opCode == 0xD0 || opCode == 0xF0 || opCode == 0x4C || opCode == 0x20;

View file

@ -29,6 +29,8 @@ private:
public:
Disassembler(uint8_t* internalRam, uint8_t* prgRom, uint32_t prgSize, uint8_t* prgRam, uint32_t prgRamSize, Debugger* debugger);
~Disassembler();
void BuildOpCodeTables(bool useLowerCase);
uint32_t BuildCache(int32_t absoluteAddr, int32_t absoluteRamAddr, uint16_t memoryAddr, bool isSubEntryPoint);
void InvalidateCache(uint16_t memoryAddr, int32_t absoluteRamAddr);

View file

@ -74,6 +74,7 @@ namespace Mesen.GUI.Config
public bool SplitView = false;
public bool HexDisplay = true;
public bool DisplayOpCodesInLowerCase = false;
public bool PpuAutoRefresh = true;
public bool PpuPartialDraw = false;

View file

@ -127,6 +127,7 @@
this.lblChrAnalysisResult = new System.Windows.Forms.ToolStripStatusLabel();
this.ctrlPpuMemoryMapping = new Mesen.GUI.Debugger.Controls.ctrlMemoryMapping();
this.ctrlCpuMemoryMapping = new Mesen.GUI.Debugger.Controls.ctrlMemoryMapping();
this.mnuDisplayOpCodesInLowerCase = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
this.splitContainer.Panel1.SuspendLayout();
this.splitContainer.Panel2.SuspendLayout();
@ -680,6 +681,7 @@
this.mnuOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuSplitView,
this.fontSizeToolStripMenuItem,
this.mnuDisplayOpCodesInLowerCase,
this.toolStripMenuItem5,
this.mnuBreakOnReset,
this.mnuBreakOnOpen,
@ -996,6 +998,14 @@
this.ctrlCpuMemoryMapping.Text = "ctrlMemoryMapping1";
this.ctrlCpuMemoryMapping.Visible = false;
//
// mnuDisplayOpCodesInLowerCase
//
this.mnuDisplayOpCodesInLowerCase.CheckOnClick = true;
this.mnuDisplayOpCodesInLowerCase.Name = "mnuDisplayOpCodesInLowerCase";
this.mnuDisplayOpCodesInLowerCase.Size = new System.Drawing.Size(243, 22);
this.mnuDisplayOpCodesInLowerCase.Text = "Display OP codes in lower case";
this.mnuDisplayOpCodesInLowerCase.Click += new System.EventHandler(this.mnuDisplayOpCodesInLowerCase_Click);
//
// frmDebugger
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1130,5 +1140,6 @@
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem11;
private System.Windows.Forms.ToolStripMenuItem mnuDisableDefaultLabels;
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnReset;
private System.Windows.Forms.ToolStripMenuItem mnuDisplayOpCodesInLowerCase;
}
}

View file

@ -51,6 +51,7 @@ namespace Mesen.GUI.Debugger
this.mnuHighlightUnexecutedCode.Checked = ConfigManager.Config.DebugInfo.HighlightUnexecutedCode;
this.mnuAutoLoadDbgFiles.Checked = ConfigManager.Config.DebugInfo.AutoLoadDbgFiles;
this.mnuBreakOnOpen.Checked = ConfigManager.Config.DebugInfo.BreakOnOpen;
this.mnuDisplayOpCodesInLowerCase.Checked = ConfigManager.Config.DebugInfo.DisplayOpCodesInLowerCase;
ctrlCpuMemoryMapping.Visible = mnuShowCpuMemoryMapping.Checked;
ctrlPpuMemoryMapping.Visible = mnuShowPpuMemoryMapping.Checked;
@ -172,6 +173,9 @@ namespace Mesen.GUI.Debugger
if(mnuShowOnlyDisassembledCode.Checked) {
flags |= DebuggerFlags.ShowOnlyDisassembledCode;
}
if(mnuDisplayOpCodesInLowerCase.Checked) {
flags |= DebuggerFlags.DisplayOpCodesInLowerCase;
}
InteropEmu.DebugSetFlags(flags);
}
@ -621,6 +625,14 @@ namespace Mesen.GUI.Debugger
ConfigManager.ApplyChanges();
}
private void mnuDisplayOpCodesInLowerCase_Click(object sender, EventArgs e)
{
ConfigManager.Config.DebugInfo.DisplayOpCodesInLowerCase = mnuDisplayOpCodesInLowerCase.Checked;
ConfigManager.ApplyChanges();
this.UpdateDebuggerFlags();
this.UpdateDebugger(false);
}
private void frmDebugger_Resize(object sender, EventArgs e)
{
ctrlCpuMemoryMapping.Invalidate();
@ -655,7 +667,7 @@ namespace Mesen.GUI.Debugger
_workspace = null;
LabelManager.ResetLabels();
UpdateWorkspace();
UpdateDebugger();
UpdateDebugger(false);
}
}

View file

@ -816,6 +816,7 @@ namespace Mesen.GUI
PpuPartialDraw = 1,
ShowEffectiveAddresses = 2,
ShowOnlyDisassembledCode = 4,
DisplayOpCodesInLowerCase = 8,
}
public struct InteropRomInfo