diff --git a/Core/Debugger.cpp b/Core/Debugger.cpp index 346c5224..63dea80b 100644 --- a/Core/Debugger.cpp +++ b/Core/Debugger.cpp @@ -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) diff --git a/Core/DebuggerTypes.h b/Core/DebuggerTypes.h index 85918f85..556b3fab 100644 --- a/Core/DebuggerTypes.h +++ b/Core/DebuggerTypes.h @@ -4,7 +4,8 @@ enum class DebuggerFlags { PpuPartialDraw = 1, ShowEffectiveAddresses = 2, - ShowOnlyDisassembledCode = 4 + ShowOnlyDisassembledCode = 4, + DisplayOpCodesInLowerCase = 8 }; enum class AddressType diff --git a/Core/Disassembler.cpp b/Core/Disassembler.cpp index ea2a9896..239fa3a0 100644 --- a/Core/Disassembler.cpp +++ b/Core/Disassembler.cpp @@ -25,6 +25,15 @@ Disassembler::Disassembler(uint8_t* internalRam, uint8_t* prgRom, uint32_t prgSi _disassembleMemoryCache.push_back(shared_ptr(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; diff --git a/Core/Disassembler.h b/Core/Disassembler.h index 48b0faf6..46e32d8c 100644 --- a/Core/Disassembler.h +++ b/Core/Disassembler.h @@ -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); diff --git a/GUI.NET/Config/DebugInfo.cs b/GUI.NET/Config/DebugInfo.cs index 6376aac7..5fa1b8d2 100644 --- a/GUI.NET/Config/DebugInfo.cs +++ b/GUI.NET/Config/DebugInfo.cs @@ -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; diff --git a/GUI.NET/Debugger/frmDebugger.Designer.cs b/GUI.NET/Debugger/frmDebugger.Designer.cs index da3d01f4..ba53031b 100644 --- a/GUI.NET/Debugger/frmDebugger.Designer.cs +++ b/GUI.NET/Debugger/frmDebugger.Designer.cs @@ -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; } } \ No newline at end of file diff --git a/GUI.NET/Debugger/frmDebugger.cs b/GUI.NET/Debugger/frmDebugger.cs index 00d2a56c..84d27b49 100644 --- a/GUI.NET/Debugger/frmDebugger.cs +++ b/GUI.NET/Debugger/frmDebugger.cs @@ -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); } } diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index f034c1fb..209ff083 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -816,6 +816,7 @@ namespace Mesen.GUI PpuPartialDraw = 1, ShowEffectiveAddresses = 2, ShowOnlyDisassembledCode = 4, + DisplayOpCodesInLowerCase = 8, } public struct InteropRomInfo