mirror of
https://github.com/SourMesen/Mesen-S.git
synced 2024-06-23 06:41:55 -04:00
Debugger: Added several configuration options for debugger break behavior
This commit is contained in:
parent
70e595ff37
commit
87fddaa751
|
@ -191,12 +191,10 @@ void Console::Reset()
|
|||
//_cart->Reset();
|
||||
//_controlManager->Reset();
|
||||
|
||||
_notificationManager->SendNotification(ConsoleNotificationType::GameReset);
|
||||
|
||||
_memoryManager->IncrementMasterClockValue<166>();
|
||||
|
||||
if(debugger) {
|
||||
debugger->Step(1);
|
||||
}
|
||||
|
||||
Unlock();
|
||||
}
|
||||
|
||||
|
@ -258,11 +256,13 @@ bool Console::LoadRom(VirtualFile romFile, VirtualFile patchFile, bool stopRom)
|
|||
_debugger->Release();
|
||||
_debugger.reset();
|
||||
GetDebugger();
|
||||
_debugger->Step(1);
|
||||
}
|
||||
|
||||
_ppu->PowerOn();
|
||||
_cpu->PowerOn();
|
||||
|
||||
_notificationManager->SendNotification(ConsoleNotificationType::GameLoaded);
|
||||
|
||||
_memoryManager->IncrementMasterClockValue<166>();
|
||||
|
||||
_rewindManager.reset(new RewindManager(shared_from_this()));
|
||||
|
@ -273,7 +273,6 @@ bool Console::LoadRom(VirtualFile romFile, VirtualFile patchFile, bool stopRom)
|
|||
UpdateRegion();
|
||||
|
||||
_paused = false;
|
||||
_notificationManager->SendNotification(ConsoleNotificationType::GameLoaded);
|
||||
|
||||
string modelName = _region == ConsoleRegion::Pal ? "PAL" : "NTSC";
|
||||
string messageTitle = MessageManager::Localize("GameLoaded") + " (" + modelName + ")";
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "Spc.h"
|
||||
#include "BaseCartridge.h"
|
||||
#include "MemoryManager.h"
|
||||
#include "EmuSettings.h"
|
||||
#include "SoundMixer.h"
|
||||
#include "NotificationManager.h"
|
||||
#include "CpuTypes.h"
|
||||
|
@ -33,6 +34,7 @@ Debugger::Debugger(shared_ptr<Console> console)
|
|||
_cpu = console->GetCpu();
|
||||
_ppu = console->GetPpu();
|
||||
_spc = console->GetSpc();
|
||||
_settings = console->GetSettings();
|
||||
_memoryManager = console->GetMemoryManager();
|
||||
|
||||
_watchExpEval[(int)CpuType::Cpu].reset(new ExpressionEvaluator(this, CpuType::Cpu));
|
||||
|
@ -126,10 +128,20 @@ void Debugger::ProcessCpuRead(uint32_t addr, uint8_t value, MemoryOperationType
|
|||
_cpuStepCount--;
|
||||
}
|
||||
|
||||
/*if(value == 0x00 || value == 0xDB || value == 0x42) {
|
||||
//Break on BRK/STP/WDM
|
||||
_cpuStepCount = 0;
|
||||
}*/
|
||||
if(_settings->CheckDebuggerFlag(DebuggerFlags::CpuDebuggerEnabled)) {
|
||||
if(value == 0x00 || value == 0x02 || value == 0x42 || value == 0xDB) {
|
||||
//Break on BRK/STP/WDM/COP
|
||||
if(value == 0x00 && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnBrk)) {
|
||||
_cpuStepCount = 0;
|
||||
} else if(value == 0x02 && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnCop)) {
|
||||
_cpuStepCount = 0;
|
||||
} else if(value == 0x42 && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnWdm)) {
|
||||
_cpuStepCount = 0;
|
||||
} else if(value == 0xDB && _settings->CheckDebuggerFlag(DebuggerFlags::BreakOnStp)) {
|
||||
_cpuStepCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if(type == MemoryOperationType::ExecOperand) {
|
||||
if(addressInfo.Type == SnesMemoryType::PrgRom && addressInfo.Address >= 0) {
|
||||
_codeDataLogger->SetFlags(addressInfo.Address, CdlFlags::Code | (state.PS & (CdlFlags::IndexMode8 | CdlFlags::MemoryMode8)));
|
||||
|
|
|
@ -10,6 +10,7 @@ class Ppu;
|
|||
class Spc;
|
||||
class BaseCartridge;
|
||||
class MemoryManager;
|
||||
class EmuSettings;
|
||||
|
||||
class TraceLogger;
|
||||
class ExpressionEvaluator;
|
||||
|
@ -35,6 +36,8 @@ private:
|
|||
shared_ptr<Spc> _spc;
|
||||
shared_ptr<MemoryManager> _memoryManager;
|
||||
shared_ptr<BaseCartridge> _baseCartridge;
|
||||
|
||||
shared_ptr<EmuSettings> _settings;
|
||||
|
||||
shared_ptr<TraceLogger> _traceLogger;
|
||||
shared_ptr<MemoryDumper> _memoryDumper;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
EmuSettings::EmuSettings()
|
||||
{
|
||||
_flags = 0;
|
||||
_debuggerFlags = 0;
|
||||
_inputConfigVersion = 0;
|
||||
}
|
||||
|
||||
|
@ -225,4 +226,22 @@ void EmuSettings::ClearFlag(EmulationFlags flag)
|
|||
bool EmuSettings::CheckFlag(EmulationFlags flag)
|
||||
{
|
||||
return (_flags & (int)flag) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
void EmuSettings::SetDebuggerFlag(DebuggerFlags flag, bool enabled)
|
||||
{
|
||||
if(enabled) {
|
||||
if((_debuggerFlags & (int)flag) == 0) {
|
||||
_debuggerFlags |= (int)flag;
|
||||
}
|
||||
} else {
|
||||
if((_debuggerFlags & (int)flag) != 0) {
|
||||
_debuggerFlags &= ~(int)flag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool EmuSettings::CheckDebuggerFlag(DebuggerFlags flag)
|
||||
{
|
||||
return (_debuggerFlags & (int)flag) != 0;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@ private:
|
|||
atomic<uint32_t> _flags;
|
||||
atomic<uint32_t> _inputConfigVersion;
|
||||
|
||||
atomic<uint32_t> _debuggerFlags;
|
||||
|
||||
string _audioDevice;
|
||||
string _saveFolder;
|
||||
string _saveStateFolder;
|
||||
|
@ -60,4 +62,7 @@ public:
|
|||
void SetFlagState(EmulationFlags flag, bool enabled);
|
||||
void ClearFlag(EmulationFlags flag);
|
||||
bool CheckFlag(EmulationFlags flag);
|
||||
|
||||
void SetDebuggerFlag(DebuggerFlags flag, bool enabled);
|
||||
bool CheckDebuggerFlag(DebuggerFlags flags);
|
||||
};
|
|
@ -412,3 +412,21 @@ struct ShortcutKeyInfo
|
|||
EmulatorShortcut Shortcut;
|
||||
KeyCombination Keys;
|
||||
};
|
||||
|
||||
enum class DebuggerFlags : uint32_t
|
||||
{
|
||||
BreakOnBrk = 0x01,
|
||||
BreakOnCop = 0x02,
|
||||
BreakOnWdm = 0x04,
|
||||
BreakOnStp = 0x08,
|
||||
BreakOnUninitRead = 0x10,
|
||||
|
||||
ShowVerifiedData = 0x100,
|
||||
DisassembleVerifiedData = 0x200,
|
||||
|
||||
ShowUnidentifiedData = 0x400,
|
||||
DisassembleUnidentifiedData = 0x800,
|
||||
|
||||
SpcDebuggerEnabled = 0x40000000,
|
||||
CpuDebuggerEnabled = 0x80000000
|
||||
};
|
||||
|
|
|
@ -45,4 +45,9 @@ extern "C" {
|
|||
_returnString = _soundManager ? _soundManager->GetAvailableDevices() : "";
|
||||
return _returnString.c_str();
|
||||
}
|
||||
|
||||
DllExport void __stdcall SetDebuggerFlag(DebuggerFlags flag, bool enabled)
|
||||
{
|
||||
_console->GetSettings()->SetDebuggerFlag(flag, enabled);
|
||||
}
|
||||
}
|
|
@ -68,6 +68,7 @@ namespace Mesen.GUI.Config
|
|||
Input.ApplyConfig();
|
||||
Emulation.ApplyConfig();
|
||||
Preferences.ApplyConfig();
|
||||
Debug.Debugger.ApplyConfig();
|
||||
}
|
||||
|
||||
public void InitializeDefaults()
|
||||
|
|
|
@ -17,6 +17,18 @@ namespace Mesen.GUI.Config
|
|||
|
||||
public bool ShowByteCode = false;
|
||||
|
||||
public bool BreakOnBrk = false;
|
||||
public bool BreakOnCop = false;
|
||||
public bool BreakOnWdm = false;
|
||||
public bool BreakOnStp = false;
|
||||
public bool BreakOnUninitRead = false;
|
||||
|
||||
public bool BreakOnOpen = true;
|
||||
public bool BreakOnPowerCycleReset = true;
|
||||
|
||||
public bool BringToFrontOnBreak = true;
|
||||
public bool BringToFrontOnPause = false;
|
||||
|
||||
public int BreakOnValue = 0;
|
||||
public int BreakInCount = 1;
|
||||
public BreakInMetric BreakInMetric = BreakInMetric.CpuInstructions;
|
||||
|
@ -46,6 +58,15 @@ namespace Mesen.GUI.Config
|
|||
public XmlColor CodeWriteBreakpointColor = Color.FromArgb(40, 120, 80);
|
||||
public XmlColor CodeReadBreakpointColor = Color.FromArgb(40, 40, 200);
|
||||
public XmlColor CodeActiveStatementColor = Color.Yellow;
|
||||
|
||||
public void ApplyConfig()
|
||||
{
|
||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.BreakOnBrk, BreakOnBrk);
|
||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.BreakOnCop, BreakOnCop);
|
||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.BreakOnWdm, BreakOnWdm);
|
||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.BreakOnStp, BreakOnStp);
|
||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.BreakOnUninitRead, BreakOnUninitRead);
|
||||
}
|
||||
}
|
||||
|
||||
public enum BreakInMetric
|
||||
|
|
|
@ -17,17 +17,11 @@ namespace Mesen.GUI.Debugger
|
|||
{
|
||||
return new List<Form>(_openedWindows);
|
||||
}
|
||||
|
||||
public static Form OpenDebugWindow(DebugWindow window)
|
||||
{
|
||||
Form existingWindow = GetExistingSingleInstanceWindow(window);
|
||||
if(existingWindow != null) {
|
||||
existingWindow.BringToFront();
|
||||
if(existingWindow.WindowState == FormWindowState.Minimized) {
|
||||
//Unminimize window if it was minimized
|
||||
existingWindow.WindowState = FormWindowState.Normal;
|
||||
}
|
||||
existingWindow.Focus();
|
||||
BringToFront(existingWindow);
|
||||
return existingWindow;
|
||||
} else {
|
||||
BaseForm frm = null;
|
||||
|
@ -134,6 +128,16 @@ namespace Mesen.GUI.Debugger
|
|||
_openedWindows.Remove((Form)sender);
|
||||
CleanupDebugger();
|
||||
}
|
||||
|
||||
public static void BringToFront(Form form)
|
||||
{
|
||||
form.BringToFront();
|
||||
if(form.WindowState == FormWindowState.Minimized) {
|
||||
//Unminimize window if it was minimized
|
||||
form.WindowState = FormWindowState.Normal;
|
||||
}
|
||||
form.Focus();
|
||||
}
|
||||
}
|
||||
|
||||
public enum DebugWindow
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace Mesen.GUI.Debugger
|
|||
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenTilemapViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenTileViewer)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenSpriteViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenSpriteViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenPaletteViewer)),
|
||||
};
|
||||
|
||||
|
@ -108,14 +108,14 @@ namespace Mesen.GUI.Debugger
|
|||
//GetMember(nameof(DebuggerShortcutsConfig.FunctionList_EditLabel)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.FunctionList_AddBreakpoint)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.FunctionList_FindOccurrences)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_Add)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_Edit)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_Delete)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddBreakpoint)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddToWatch)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_Add)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_Edit)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_Delete)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddBreakpoint)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddToWatch)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_FindOccurrences)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInCpuMemory)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInMemoryType)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInCpuMemory)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInMemoryType)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_Add)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_Edit)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_GoToLocation)),
|
||||
|
|
255
UI/Debugger/frmDebugger.Designer.cs
generated
255
UI/Debugger/frmDebugger.Designer.cs
generated
|
@ -71,9 +71,31 @@
|
|||
this.mnuGoToBrkHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoToCopHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDisassemblyOptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuUnidentifiedData = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.hideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showDisassemblyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showAsDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuVerifiedData = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.hideToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showDisassemblyToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showAsDataToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuShowByteCode = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnPowerCycleReset = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnOpen = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuBreakOnBrk = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnCop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnWdm = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuBreakOnUnitRead = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuBringToFrontOnBreak = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBringToFrontOnPause = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.fontSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFontOptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuIncreaseFontSize = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDecreaseFontSize = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuResetFontSize = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -83,6 +105,7 @@
|
|||
this.mnuPreferences = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ctrlSplitContainer = new Mesen.GUI.Controls.ctrlSplitContainer();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.ctrlLabelList = new Mesen.GUI.Debugger.Controls.ctrlLabelList();
|
||||
this.ctrlPpuStatus = new Mesen.GUI.Debugger.Controls.ctrlPpuStatus();
|
||||
this.ctrlSpcStatus = new Mesen.GUI.Debugger.Controls.ctrlSpcStatus();
|
||||
this.ctrlCpuStatus = new Mesen.GUI.Debugger.Controls.ctrlCpuStatus();
|
||||
|
@ -95,7 +118,7 @@
|
|||
this.grpCallstack = new System.Windows.Forms.GroupBox();
|
||||
this.ctrlCallstack = new Mesen.GUI.Debugger.Controls.ctrlCallstack();
|
||||
this.tsToolbar = new Mesen.GUI.Controls.ctrlMesenToolStrip();
|
||||
this.ctrlLabelList = new Mesen.GUI.Debugger.Controls.ctrlLabelList();
|
||||
this.mnuBreakOnStp = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ctrlMesenMenuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainer)).BeginInit();
|
||||
this.ctrlSplitContainer.Panel1.SuspendLayout();
|
||||
|
@ -406,39 +429,203 @@
|
|||
// optionsToolStripMenuItem
|
||||
//
|
||||
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuShowByteCode,
|
||||
this.mnuDisassemblyOptions,
|
||||
this.mnuBreakOptions,
|
||||
this.toolStripMenuItem5,
|
||||
this.fontSizeToolStripMenuItem,
|
||||
this.mnuFontOptions,
|
||||
this.toolStripMenuItem4,
|
||||
this.mnuPreferences});
|
||||
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
|
||||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
|
||||
this.optionsToolStripMenuItem.Text = "Options";
|
||||
//
|
||||
// mnuDisassemblyOptions
|
||||
//
|
||||
this.mnuDisassemblyOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuUnidentifiedData,
|
||||
this.mnuVerifiedData,
|
||||
this.toolStripMenuItem6,
|
||||
this.mnuShowByteCode});
|
||||
this.mnuDisassemblyOptions.Name = "mnuDisassemblyOptions";
|
||||
this.mnuDisassemblyOptions.Size = new System.Drawing.Size(209, 22);
|
||||
this.mnuDisassemblyOptions.Text = "Disassembly Options";
|
||||
//
|
||||
// mnuUnidentifiedData
|
||||
//
|
||||
this.mnuUnidentifiedData.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.hideToolStripMenuItem,
|
||||
this.showDisassemblyToolStripMenuItem,
|
||||
this.showAsDataToolStripMenuItem});
|
||||
this.mnuUnidentifiedData.Image = global::Mesen.GUI.Properties.Resources.UnidentifiedData;
|
||||
this.mnuUnidentifiedData.Name = "mnuUnidentifiedData";
|
||||
this.mnuUnidentifiedData.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuUnidentifiedData.Text = "Unidentified Data";
|
||||
this.mnuUnidentifiedData.Visible = false;
|
||||
//
|
||||
// hideToolStripMenuItem
|
||||
//
|
||||
this.hideToolStripMenuItem.Name = "hideToolStripMenuItem";
|
||||
this.hideToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
|
||||
this.hideToolStripMenuItem.Text = "Hide";
|
||||
//
|
||||
// showDisassemblyToolStripMenuItem
|
||||
//
|
||||
this.showDisassemblyToolStripMenuItem.Name = "showDisassemblyToolStripMenuItem";
|
||||
this.showDisassemblyToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
|
||||
this.showDisassemblyToolStripMenuItem.Text = "Show disassembly";
|
||||
//
|
||||
// showAsDataToolStripMenuItem
|
||||
//
|
||||
this.showAsDataToolStripMenuItem.Name = "showAsDataToolStripMenuItem";
|
||||
this.showAsDataToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
|
||||
this.showAsDataToolStripMenuItem.Text = "Show as data";
|
||||
//
|
||||
// mnuVerifiedData
|
||||
//
|
||||
this.mnuVerifiedData.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.hideToolStripMenuItem1,
|
||||
this.showDisassemblyToolStripMenuItem1,
|
||||
this.showAsDataToolStripMenuItem1});
|
||||
this.mnuVerifiedData.Image = global::Mesen.GUI.Properties.Resources.VerifiedData;
|
||||
this.mnuVerifiedData.Name = "mnuVerifiedData";
|
||||
this.mnuVerifiedData.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuVerifiedData.Text = "Verified Data";
|
||||
this.mnuVerifiedData.Visible = false;
|
||||
//
|
||||
// hideToolStripMenuItem1
|
||||
//
|
||||
this.hideToolStripMenuItem1.Name = "hideToolStripMenuItem1";
|
||||
this.hideToolStripMenuItem1.Size = new System.Drawing.Size(170, 22);
|
||||
this.hideToolStripMenuItem1.Text = "Hide";
|
||||
//
|
||||
// showDisassemblyToolStripMenuItem1
|
||||
//
|
||||
this.showDisassemblyToolStripMenuItem1.Name = "showDisassemblyToolStripMenuItem1";
|
||||
this.showDisassemblyToolStripMenuItem1.Size = new System.Drawing.Size(170, 22);
|
||||
this.showDisassemblyToolStripMenuItem1.Text = "Show disassembly";
|
||||
//
|
||||
// showAsDataToolStripMenuItem1
|
||||
//
|
||||
this.showAsDataToolStripMenuItem1.Name = "showAsDataToolStripMenuItem1";
|
||||
this.showAsDataToolStripMenuItem1.Size = new System.Drawing.Size(170, 22);
|
||||
this.showAsDataToolStripMenuItem1.Text = "Show as data";
|
||||
//
|
||||
// toolStripMenuItem6
|
||||
//
|
||||
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
|
||||
this.toolStripMenuItem6.Size = new System.Drawing.Size(163, 6);
|
||||
this.toolStripMenuItem6.Visible = false;
|
||||
//
|
||||
// mnuShowByteCode
|
||||
//
|
||||
this.mnuShowByteCode.CheckOnClick = true;
|
||||
this.mnuShowByteCode.Name = "mnuShowByteCode";
|
||||
this.mnuShowByteCode.Size = new System.Drawing.Size(209, 22);
|
||||
this.mnuShowByteCode.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuShowByteCode.Text = "Show byte code";
|
||||
//
|
||||
// mnuBreakOptions
|
||||
//
|
||||
this.mnuBreakOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuBreakOnPowerCycleReset,
|
||||
this.mnuBreakOnOpen,
|
||||
this.toolStripMenuItem12,
|
||||
this.mnuBreakOnBrk,
|
||||
this.mnuBreakOnCop,
|
||||
this.mnuBreakOnStp,
|
||||
this.mnuBreakOnWdm,
|
||||
this.toolStripMenuItem11,
|
||||
this.mnuBreakOnUnitRead,
|
||||
this.toolStripMenuItem10,
|
||||
this.mnuBringToFrontOnBreak,
|
||||
this.mnuBringToFrontOnPause});
|
||||
this.mnuBreakOptions.Name = "mnuBreakOptions";
|
||||
this.mnuBreakOptions.Size = new System.Drawing.Size(209, 22);
|
||||
this.mnuBreakOptions.Text = "Break Options";
|
||||
this.mnuBreakOptions.DropDownOpening += new System.EventHandler(this.mnuBreakOptions_DropDownOpening);
|
||||
//
|
||||
// mnuBreakOnPowerCycleReset
|
||||
//
|
||||
this.mnuBreakOnPowerCycleReset.Name = "mnuBreakOnPowerCycleReset";
|
||||
this.mnuBreakOnPowerCycleReset.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnPowerCycleReset.Text = "Break on power/reset";
|
||||
//
|
||||
// mnuBreakOnOpen
|
||||
//
|
||||
this.mnuBreakOnOpen.Name = "mnuBreakOnOpen";
|
||||
this.mnuBreakOnOpen.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnOpen.Text = "Break when debugger is opened";
|
||||
//
|
||||
// toolStripMenuItem12
|
||||
//
|
||||
this.toolStripMenuItem12.Name = "toolStripMenuItem12";
|
||||
this.toolStripMenuItem12.Size = new System.Drawing.Size(258, 6);
|
||||
//
|
||||
// mnuBreakOnBrk
|
||||
//
|
||||
this.mnuBreakOnBrk.Name = "mnuBreakOnBrk";
|
||||
this.mnuBreakOnBrk.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnBrk.Text = "Break on BRK";
|
||||
//
|
||||
// mnuBreakOnCop
|
||||
//
|
||||
this.mnuBreakOnCop.Name = "mnuBreakOnCop";
|
||||
this.mnuBreakOnCop.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnCop.Text = "Break on COP";
|
||||
//
|
||||
// mnuBreakOnWdm
|
||||
//
|
||||
this.mnuBreakOnWdm.Name = "mnuBreakOnWdm";
|
||||
this.mnuBreakOnWdm.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnWdm.Text = "Break on WDM";
|
||||
//
|
||||
// toolStripMenuItem11
|
||||
//
|
||||
this.toolStripMenuItem11.Name = "toolStripMenuItem11";
|
||||
this.toolStripMenuItem11.Size = new System.Drawing.Size(258, 6);
|
||||
this.toolStripMenuItem11.Visible = false;
|
||||
//
|
||||
// mnuBreakOnUnitRead
|
||||
//
|
||||
this.mnuBreakOnUnitRead.Name = "mnuBreakOnUnitRead";
|
||||
this.mnuBreakOnUnitRead.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnUnitRead.Text = "Break on uninitialized memory read";
|
||||
this.mnuBreakOnUnitRead.Visible = false;
|
||||
//
|
||||
// toolStripMenuItem10
|
||||
//
|
||||
this.toolStripMenuItem10.Name = "toolStripMenuItem10";
|
||||
this.toolStripMenuItem10.Size = new System.Drawing.Size(258, 6);
|
||||
//
|
||||
// mnuBringToFrontOnBreak
|
||||
//
|
||||
this.mnuBringToFrontOnBreak.Name = "mnuBringToFrontOnBreak";
|
||||
this.mnuBringToFrontOnBreak.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBringToFrontOnBreak.Text = "Bring debugger to front on break";
|
||||
//
|
||||
// mnuBringToFrontOnPause
|
||||
//
|
||||
this.mnuBringToFrontOnPause.Name = "mnuBringToFrontOnPause";
|
||||
this.mnuBringToFrontOnPause.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBringToFrontOnPause.Text = "Bring debugger to front on pause";
|
||||
this.mnuBringToFrontOnPause.Visible = false;
|
||||
//
|
||||
// toolStripMenuItem5
|
||||
//
|
||||
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
|
||||
this.toolStripMenuItem5.Size = new System.Drawing.Size(206, 6);
|
||||
//
|
||||
// fontSizeToolStripMenuItem
|
||||
// mnuFontOptions
|
||||
//
|
||||
this.fontSizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuFontOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuIncreaseFontSize,
|
||||
this.mnuDecreaseFontSize,
|
||||
this.mnuResetFontSize,
|
||||
this.toolStripMenuItem21,
|
||||
this.mnuSelectFont});
|
||||
this.fontSizeToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.Font;
|
||||
this.fontSizeToolStripMenuItem.Name = "fontSizeToolStripMenuItem";
|
||||
this.fontSizeToolStripMenuItem.Size = new System.Drawing.Size(209, 22);
|
||||
this.fontSizeToolStripMenuItem.Text = "Font Options";
|
||||
this.mnuFontOptions.Image = global::Mesen.GUI.Properties.Resources.Font;
|
||||
this.mnuFontOptions.Name = "mnuFontOptions";
|
||||
this.mnuFontOptions.Size = new System.Drawing.Size(209, 22);
|
||||
this.mnuFontOptions.Text = "Font Options";
|
||||
//
|
||||
// mnuIncreaseFontSize
|
||||
//
|
||||
|
@ -518,6 +705,15 @@
|
|||
this.panel1.Size = new System.Drawing.Size(348, 421);
|
||||
this.panel1.TabIndex = 2;
|
||||
//
|
||||
// ctrlLabelList
|
||||
//
|
||||
this.ctrlLabelList.CpuType = Mesen.GUI.CpuType.Cpu;
|
||||
this.ctrlLabelList.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlLabelList.Location = new System.Drawing.Point(0, 315);
|
||||
this.ctrlLabelList.Name = "ctrlLabelList";
|
||||
this.ctrlLabelList.Size = new System.Drawing.Size(348, 106);
|
||||
this.ctrlLabelList.TabIndex = 4;
|
||||
//
|
||||
// ctrlPpuStatus
|
||||
//
|
||||
this.ctrlPpuStatus.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
|
@ -641,13 +837,11 @@
|
|||
this.tsToolbar.TabIndex = 3;
|
||||
this.tsToolbar.Text = "ctrlMesenToolStrip1";
|
||||
//
|
||||
// ctrlLabelList
|
||||
// mnuBreakOnStp
|
||||
//
|
||||
this.ctrlLabelList.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlLabelList.Location = new System.Drawing.Point(0, 315);
|
||||
this.ctrlLabelList.Name = "ctrlLabelList";
|
||||
this.ctrlLabelList.Size = new System.Drawing.Size(348, 106);
|
||||
this.ctrlLabelList.TabIndex = 4;
|
||||
this.mnuBreakOnStp.Name = "mnuBreakOnStp";
|
||||
this.mnuBreakOnStp.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnStp.Text = "Break on STP";
|
||||
//
|
||||
// frmDebugger
|
||||
//
|
||||
|
@ -730,18 +924,41 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuPreferences;
|
||||
private System.Windows.Forms.PictureBox picWatchHelp;
|
||||
private System.Windows.Forms.ToolStripMenuItem fontSizeToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFontOptions;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuIncreaseFontSize;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuDecreaseFontSize;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuResetFontSize;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem21;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuSelectFont;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowByteCode;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private Controls.ctrlPpuStatus ctrlPpuStatus;
|
||||
private Controls.ctrlSpcStatus ctrlSpcStatus;
|
||||
private Controls.ctrlLabelList ctrlLabelList;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuDisassemblyOptions;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuUnidentifiedData;
|
||||
private System.Windows.Forms.ToolStripMenuItem hideToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem showDisassemblyToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem showAsDataToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuVerifiedData;
|
||||
private System.Windows.Forms.ToolStripMenuItem hideToolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem showDisassemblyToolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem showAsDataToolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem6;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowByteCode;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOptions;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnBrk;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnCop;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnWdm;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem11;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnUnitRead;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnOpen;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem10;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBringToFrontOnBreak;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBringToFrontOnPause;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnPowerCycleReset;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem12;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnStp;
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@ namespace Mesen.GUI.Debugger
|
|||
private EntityBinder _entityBinder = new EntityBinder();
|
||||
private NotificationListener _notifListener;
|
||||
private CpuType _cpuType;
|
||||
private bool _firstBreak = true;
|
||||
|
||||
public CpuType CpuType { get { return _cpuType; } }
|
||||
|
||||
|
@ -56,7 +57,8 @@ namespace Mesen.GUI.Debugger
|
|||
LoadConfig();
|
||||
|
||||
toolTip.SetToolTip(picWatchHelp, ctrlWatch.GetTooltipText());
|
||||
|
||||
|
||||
ConfigApi.SetDebuggerFlag(_cpuType == CpuType.Cpu ? DebuggerFlags.CpuDebuggerEnabled : DebuggerFlags.SpcDebuggerEnabled, true);
|
||||
BreakpointManager.AddCpuType(_cpuType);
|
||||
DebugApi.Step(10000, StepType.CpuStep);
|
||||
}
|
||||
|
@ -65,12 +67,14 @@ namespace Mesen.GUI.Debugger
|
|||
{
|
||||
base.OnClosing(e);
|
||||
|
||||
|
||||
DebuggerInfo cfg = ConfigManager.Config.Debug.Debugger;
|
||||
cfg.WindowSize = this.WindowState != FormWindowState.Normal ? this.RestoreBounds.Size : this.Size;
|
||||
cfg.WindowLocation = this.WindowState != FormWindowState.Normal ? this.RestoreBounds.Location : this.Location;
|
||||
_entityBinder.UpdateObject();
|
||||
ConfigManager.ApplyChanges();
|
||||
|
||||
ConfigApi.SetDebuggerFlag(_cpuType == CpuType.Cpu ? DebuggerFlags.CpuDebuggerEnabled : DebuggerFlags.SpcDebuggerEnabled, false);
|
||||
BreakpointManager.RemoveCpuType(_cpuType);
|
||||
|
||||
if(this._notifListener != null) {
|
||||
|
@ -165,6 +169,37 @@ namespace Mesen.GUI.Debugger
|
|||
mnuIncreaseFontSize.Click += (s, e) => { ctrlDisassemblyView.CodeViewer.TextZoom += 10; };
|
||||
mnuDecreaseFontSize.Click += (s, e) => { ctrlDisassemblyView.CodeViewer.TextZoom -= 10; };
|
||||
mnuResetFontSize.Click += (s, e) => { ctrlDisassemblyView.CodeViewer.TextZoom = 100; };
|
||||
|
||||
mnuBreakOnBrk.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnBrk); };
|
||||
mnuBreakOnCop.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnCop); };
|
||||
mnuBreakOnStp.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnStp); };
|
||||
mnuBreakOnWdm.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnWdm); };
|
||||
mnuBreakOnOpen.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnOpen); };
|
||||
mnuBreakOnPowerCycleReset.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnPowerCycleReset); };
|
||||
mnuBreakOnUnitRead.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BreakOnUninitRead); };
|
||||
mnuBringToFrontOnBreak.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BringToFrontOnBreak); };
|
||||
mnuBringToFrontOnPause.Click += (s, e) => { InvertFlag(ref ConfigManager.Config.Debug.Debugger.BringToFrontOnPause); };
|
||||
}
|
||||
|
||||
private void InvertFlag(ref bool flag)
|
||||
{
|
||||
flag = !flag;
|
||||
ConfigManager.ApplyChanges();
|
||||
ConfigManager.Config.Debug.Debugger.ApplyConfig();
|
||||
}
|
||||
|
||||
private void mnuBreakOptions_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
DebuggerInfo cfg = ConfigManager.Config.Debug.Debugger;
|
||||
mnuBreakOnBrk.Checked = cfg.BreakOnBrk;
|
||||
mnuBreakOnCop.Checked = cfg.BreakOnCop;
|
||||
mnuBreakOnStp.Checked = cfg.BreakOnStp;
|
||||
mnuBreakOnWdm.Checked = cfg.BreakOnWdm;
|
||||
mnuBreakOnOpen.Checked = cfg.BreakOnOpen;
|
||||
mnuBreakOnPowerCycleReset.Checked = cfg.BreakOnPowerCycleReset;
|
||||
mnuBreakOnUnitRead.Checked = cfg.BreakOnUninitRead;
|
||||
mnuBringToFrontOnBreak.Checked = cfg.BringToFrontOnBreak;
|
||||
mnuBringToFrontOnPause.Checked = cfg.BringToFrontOnPause;
|
||||
}
|
||||
|
||||
private void InitToolbar()
|
||||
|
@ -264,6 +299,10 @@ namespace Mesen.GUI.Debugger
|
|||
{
|
||||
switch(e.NotificationType) {
|
||||
case ConsoleNotificationType.GameLoaded: {
|
||||
if(ConfigManager.Config.Debug.Debugger.BreakOnPowerCycleReset) {
|
||||
DebugApi.Step(1, StepType.PpuStep);
|
||||
}
|
||||
|
||||
DebugState state = DebugApi.GetState();
|
||||
this.BeginInvoke((MethodInvoker)(() => {
|
||||
DebugWorkspaceManager.ImportDbgFile();
|
||||
|
@ -274,6 +313,12 @@ namespace Mesen.GUI.Debugger
|
|||
break;
|
||||
}
|
||||
|
||||
case ConsoleNotificationType.GameReset:
|
||||
if(ConfigManager.Config.Debug.Debugger.BreakOnPowerCycleReset) {
|
||||
DebugApi.Step(1, StepType.PpuStep);
|
||||
}
|
||||
break;
|
||||
|
||||
case ConsoleNotificationType.PpuFrameDone:
|
||||
this.BeginInvoke((MethodInvoker)(() => {
|
||||
UpdateContinueAction();
|
||||
|
@ -285,8 +330,17 @@ namespace Mesen.GUI.Debugger
|
|||
int activeAddress = _cpuType == CpuType.Cpu ? (int)((state.Cpu.K << 16) | state.Cpu.PC) : (int)state.Spc.PC;
|
||||
|
||||
this.BeginInvoke((MethodInvoker)(() => {
|
||||
if(ConfigManager.Config.Debug.Debugger.BringToFrontOnBreak) {
|
||||
DebugWindowManager.BringToFront(this);
|
||||
}
|
||||
|
||||
UpdateContinueAction();
|
||||
UpdateDebugger(state, activeAddress);
|
||||
|
||||
if(_firstBreak && !ConfigManager.Config.Debug.Debugger.BreakOnOpen) {
|
||||
DebugApi.ResumeExecution();
|
||||
}
|
||||
_firstBreak = false;
|
||||
}));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -121,9 +121,9 @@
|
|||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="ctrlMesenMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 56</value>
|
||||
<value>107, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsToolbar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 95</value>
|
||||
<value>275, 17</value>
|
||||
</metadata>
|
||||
</root>
|
|
@ -25,10 +25,30 @@ namespace Mesen.GUI
|
|||
[DllImport(DllPath)] public static extern void SetPreferences(InteropPreferencesConfig config);
|
||||
[DllImport(DllPath)] public static extern void SetShortcutKeys([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]ShortcutKeyInfo[] shortcuts, UInt32 count);
|
||||
|
||||
[DllImport(DllPath)] public static extern void SetDebuggerFlag(DebuggerFlags flag, bool enabled);
|
||||
|
||||
[DllImport(DllPath, EntryPoint = "GetAudioDevices")] private static extern IntPtr GetAudioDevicesWrapper();
|
||||
public static List<string> GetAudioDevices()
|
||||
{
|
||||
return new List<string>(Utf8Marshaler.PtrToStringUtf8(ConfigApi.GetAudioDevicesWrapper()).Split(new string[1] { "||" }, StringSplitOptions.RemoveEmptyEntries));
|
||||
}
|
||||
}
|
||||
|
||||
public enum DebuggerFlags : UInt32
|
||||
{
|
||||
BreakOnBrk = 0x01,
|
||||
BreakOnCop = 0x02,
|
||||
BreakOnWdm = 0x04,
|
||||
BreakOnStp = 0x08,
|
||||
BreakOnUninitRead = 0x10,
|
||||
|
||||
ShowVerifiedData = 0x100,
|
||||
DisassembleVerifiedData = 0x200,
|
||||
|
||||
ShowUnidentifiedData = 0x400,
|
||||
DisassembleUnidentifiedData = 0x800,
|
||||
|
||||
SpcDebuggerEnabled = 0x40000000,
|
||||
CpuDebuggerEnabled = 0x80000000
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue