Debugger: Improved usability and added shortcuts/features
This commit is contained in:
parent
fd0aefd130
commit
4402be3c52
15 changed files with 456 additions and 105 deletions
|
@ -171,12 +171,13 @@ void Console::Stop(bool sendNotification)
|
|||
|
||||
void Console::Reset()
|
||||
{
|
||||
Lock();
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
if(debugger) {
|
||||
debugger->Run();
|
||||
}
|
||||
|
||||
Lock();
|
||||
|
||||
_dmaController->Reset();
|
||||
_internalRegisters->Reset();
|
||||
_memoryManager->Reset();
|
||||
|
@ -196,6 +197,11 @@ void Console::PowerCycle()
|
|||
{
|
||||
shared_ptr<BaseCartridge> cart = _cart;
|
||||
if(cart) {
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
if(debugger) {
|
||||
debugger->Run();
|
||||
}
|
||||
|
||||
RomInfo info = cart->GetRomInfo();
|
||||
Lock();
|
||||
LoadRom(info.RomFile, info.PatchFile, false);
|
||||
|
|
|
@ -203,10 +203,17 @@ uint32_t Disassembler::GetLineCount()
|
|||
uint32_t Disassembler::GetLineIndex(uint32_t cpuAddress)
|
||||
{
|
||||
auto lock = _disassemblyLock.AcquireSafe();
|
||||
for(int i = 0; i < _disassembly.size(); i++) {
|
||||
if(_disassembly[i].CpuAddress == cpuAddress) {
|
||||
return i;
|
||||
uint32_t lastAddress = 0;
|
||||
for(int i = 1; i < _disassembly.size(); i++) {
|
||||
if(_disassembly[i].CpuAddress < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(cpuAddress >= lastAddress && cpuAddress < (uint32_t)_disassembly[i].CpuAddress) {
|
||||
return i - 1;
|
||||
}
|
||||
|
||||
lastAddress = _disassembly[i].CpuAddress;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "stdafx.h"
|
||||
#include "BaseControlDevice.h"
|
||||
#include "Console.h"
|
||||
#include "Debugger.h"
|
||||
|
||||
class SystemActionManager : public BaseControlDevice
|
||||
{
|
||||
|
@ -46,6 +47,11 @@ public:
|
|||
bool Reset()
|
||||
{
|
||||
if(!_needReset) {
|
||||
shared_ptr<Debugger> debugger = _console->GetDebugger(false);
|
||||
if(debugger) {
|
||||
debugger->Run();
|
||||
}
|
||||
|
||||
_needReset = true;
|
||||
return true;
|
||||
}
|
||||
|
@ -55,6 +61,11 @@ public:
|
|||
bool PowerCycle()
|
||||
{
|
||||
if(!_needPowerCycle) {
|
||||
shared_ptr<Debugger> debugger = _console->GetDebugger(false);
|
||||
if(debugger) {
|
||||
debugger->Run();
|
||||
}
|
||||
|
||||
_needPowerCycle = true;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,8 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
{
|
||||
public partial class ctrlBreakpoints : BaseControl
|
||||
{
|
||||
public event EventHandler BreakpointNavigation;
|
||||
public delegate void BreakpointNavigationHandler(Breakpoint bp);
|
||||
public event BreakpointNavigationHandler BreakpointNavigation;
|
||||
private Font _markedColumnFont;
|
||||
|
||||
public ctrlBreakpoints()
|
||||
|
@ -125,7 +126,7 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
if(BreakpointNavigation != null) {
|
||||
Breakpoint bp = lstBreakpoints.SelectedItems[0].Tag as Breakpoint;
|
||||
if(bp.IsCpuBreakpoint && bp.GetRelativeAddress() >= 0) {
|
||||
BreakpointNavigation(bp, null);
|
||||
BreakpointNavigation(bp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(146, 6);
|
||||
this.toolStripMenuItem2.Visible = false;
|
||||
//
|
||||
// mnuShowLabels
|
||||
//
|
||||
|
@ -106,6 +107,7 @@
|
|||
this.mnuShowLabels.Name = "mnuShowLabels";
|
||||
this.mnuShowLabels.Size = new System.Drawing.Size(149, 22);
|
||||
this.mnuShowLabels.Text = "Show Labels";
|
||||
this.mnuShowLabels.Visible = false;
|
||||
//
|
||||
// lstBreakpoints
|
||||
//
|
||||
|
|
|
@ -28,5 +28,16 @@ namespace Mesen.GUI.Debugger.Code
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void EnableDisableBreakpoint(int lineIndex)
|
||||
{
|
||||
int address = this._provider.GetLineAddress(lineIndex);
|
||||
if(address >= 0) {
|
||||
BreakpointManager.EnableDisableBreakpoint(new AddressInfo() {
|
||||
Address = address,
|
||||
Type = SnesMemoryType.CpuMemory
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,5 +13,6 @@ namespace Mesen.GUI.Debugger.Code
|
|||
|
||||
void RefreshCode();
|
||||
void ToggleBreakpoint(int lineIndex);
|
||||
void EnableDisableBreakpoint(int lineIndex);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,12 +91,36 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
ctrlCode.ScrollToLineIndex(lineIndex, eHistoryType.None, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuToggleBreakpoint_Click(object sender, EventArgs e)
|
||||
|
||||
public ctrlScrollableTextbox CodeViewer { get { return ctrlCode; } }
|
||||
|
||||
public void GoToAddress(int address)
|
||||
{
|
||||
ctrlCode.ScrollToAddress(address);
|
||||
}
|
||||
|
||||
public void GoToActiveAddress()
|
||||
{
|
||||
if(_styleProvider.ActiveAddress.HasValue) {
|
||||
ctrlCode.ScrollToAddress(_styleProvider.ActiveAddress.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public void ToggleBreakpoint()
|
||||
{
|
||||
_manager.ToggleBreakpoint(ctrlCode.SelectedLine);
|
||||
}
|
||||
|
||||
public void EnableDisableBreakpoint()
|
||||
{
|
||||
_manager.EnableDisableBreakpoint(ctrlCode.SelectedLine);
|
||||
}
|
||||
|
||||
private void mnuToggleBreakpoint_Click(object sender, EventArgs e)
|
||||
{
|
||||
ToggleBreakpoint();
|
||||
}
|
||||
|
||||
private void ctrlCode_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if(e.X < 20) {
|
||||
|
|
|
@ -61,6 +61,11 @@ namespace Mesen.GUI.Debugger
|
|||
}));
|
||||
}
|
||||
break;
|
||||
|
||||
case ConsoleNotificationType.GameLoaded:
|
||||
//Configuration is lost when debugger is restarted (when switching game or power cycling)
|
||||
ctrlScanlineCycleSelect.RefreshSettings();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -77,6 +77,11 @@ namespace Mesen.GUI.Debugger
|
|||
}));
|
||||
}
|
||||
break;
|
||||
|
||||
case ConsoleNotificationType.GameLoaded:
|
||||
//Configuration is lost when debugger is restarted (when switching game or power cycling)
|
||||
ctrlScanlineCycleSelect.RefreshSettings();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -83,6 +83,11 @@ namespace Mesen.GUI.Debugger
|
|||
}));
|
||||
}
|
||||
break;
|
||||
|
||||
case ConsoleNotificationType.GameLoaded:
|
||||
//Configuration is lost when debugger is restarted (when switching game or power cycling)
|
||||
ctrlScanlineCycleSelect.RefreshSettings();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,32 +35,32 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.Paste)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.SelectAll)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.Refresh)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MarkAsCode)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MarkAsData)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MarkAsUnidentified)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.GoToAll)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.MarkAsCode)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.MarkAsData)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.MarkAsUnidentified)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.GoToAll)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInDisassembly)),
|
||||
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenApuViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenAssembler)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenApuViewer)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenAssembler)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenDebugger)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenEventViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenMemoryTools)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenProfiler)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenScriptWindow)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenTextHooker)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenProfiler)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenScriptWindow)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenTextHooker)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenTraceLogger)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenWatchWindow)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenWatchWindow)),
|
||||
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenTilemapViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenTileViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenSpriteViewer)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.OpenSpriteViewer)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenPaletteViewer)),
|
||||
};
|
||||
|
||||
ctrlDbgShortcutsMemoryViewer.Shortcuts = new FieldInfo[] {
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Freeze)),
|
||||
/*GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Freeze)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Unfreeze)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_AddToWatch)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_EditBreakpoint)),
|
||||
|
@ -68,15 +68,15 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Import)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Export)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInCpuMemory)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInMemoryType))
|
||||
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInMemoryType))*/
|
||||
};
|
||||
|
||||
ctrlDbgShortcutsScriptWindow.Shortcuts = new FieldInfo[] {
|
||||
/*ctrlDbgShortcutsScriptWindow.Shortcuts = new FieldInfo[] {
|
||||
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_OpenScript)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_SaveScript)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_RunScript)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_StopScript))
|
||||
};
|
||||
};*/
|
||||
|
||||
ctrlDbgShortcutsDebugger.Shortcuts = new FieldInfo[] {
|
||||
GetMember(nameof(DebuggerShortcutsConfig.Reset)),
|
||||
|
@ -87,35 +87,35 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.StepInto)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.StepOver)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.StepOut)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.StepBack)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.StepBack)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.RunPpuCycle)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.RunPpuScanline)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.RunPpuFrame)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.BreakIn)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.BreakOn)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.FindOccurrences)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.BreakIn)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.BreakOn)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.FindOccurrences)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.GoToProgramCounter)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SetNextStatement)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSubroutine)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSelectedCode)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSourceFile)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditLabel)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateBack)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateForward)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SetNextStatement)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSubroutine)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSelectedCode)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSourceFile)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditLabel)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateBack)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateForward)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_ToggleBreakpoint)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_DisableEnableBreakpoint)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SwitchView)),
|
||||
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_FindOccurrences)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInCpuMemory)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInMemoryType)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SwitchView)),
|
||||
//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_FindOccurrences)),
|
||||
//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)),
|
||||
|
@ -123,12 +123,12 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.WatchList_Delete)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.WatchList_MoveUp)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.WatchList_MoveDown)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.SaveRom)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.SaveRomAs)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.SaveEditAsIps)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.RevertPrgChrChanges)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.ToggleVerifiedData)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.ToggleUnidentifiedCodeData))
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.SaveRom)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.SaveRomAs)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.SaveEditAsIps)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.RevertPrgChrChanges)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.ToggleVerifiedData)),
|
||||
//GetMember(nameof(DebuggerShortcutsConfig.ToggleUnidentifiedCodeData))
|
||||
};
|
||||
}
|
||||
|
||||
|
|
250
UI/Debugger/frmDebugger.Designer.cs
generated
250
UI/Debugger/frmDebugger.Designer.cs
generated
|
@ -46,16 +46,32 @@
|
|||
this.mnuPowerCycle = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem24 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuToggleBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDisableEnableBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuEnableDisableBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuRunCpuCycle = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRun1000Instructions = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRunPpuCycle = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRunScanline = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRunOneFrame = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuBreakIn = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOn = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFind = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFindNext = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFindPrev = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuFindAllOccurrences = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoTo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoToAddress = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem23 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuGoToProgramCounter = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem22 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuGoToResetHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoToIrqHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoToNmiHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoToBrkHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoToCopHandler = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuPreferences = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ctrlSplitContainer = new Mesen.GUI.Controls.ctrlSplitContainer();
|
||||
this.ctrlStatus = new Mesen.GUI.Debugger.Controls.ctrlConsoleStatus();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
|
@ -88,7 +104,9 @@
|
|||
// ctrlMesenMenuStrip1
|
||||
//
|
||||
this.ctrlMesenMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.debugToolStripMenuItem});
|
||||
this.debugToolStripMenuItem,
|
||||
this.searchToolStripMenuItem,
|
||||
this.optionsToolStripMenuItem});
|
||||
this.ctrlMesenMenuStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.ctrlMesenMenuStrip1.Name = "ctrlMesenMenuStrip1";
|
||||
this.ctrlMesenMenuStrip1.Size = new System.Drawing.Size(832, 24);
|
||||
|
@ -110,10 +128,8 @@
|
|||
this.mnuPowerCycle,
|
||||
this.toolStripMenuItem24,
|
||||
this.mnuToggleBreakpoint,
|
||||
this.mnuDisableEnableBreakpoint,
|
||||
this.mnuEnableDisableBreakpoint,
|
||||
this.toolStripMenuItem2,
|
||||
this.mnuRunCpuCycle,
|
||||
this.mnuRun1000Instructions,
|
||||
this.mnuRunPpuCycle,
|
||||
this.mnuRunScanline,
|
||||
this.mnuRunOneFrame,
|
||||
|
@ -128,7 +144,7 @@
|
|||
//
|
||||
this.mnuContinue.Image = global::Mesen.GUI.Properties.Resources.MediaPlay;
|
||||
this.mnuContinue.Name = "mnuContinue";
|
||||
this.mnuContinue.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuContinue.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuContinue.Text = "Continue";
|
||||
//
|
||||
// mnuBreak
|
||||
|
@ -137,135 +153,258 @@
|
|||
this.mnuBreak.Image = global::Mesen.GUI.Properties.Resources.MediaPause;
|
||||
this.mnuBreak.Name = "mnuBreak";
|
||||
this.mnuBreak.ShortcutKeyDisplayString = "";
|
||||
this.mnuBreak.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuBreak.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuBreak.Text = "Break";
|
||||
//
|
||||
// toolStripMenuItem3
|
||||
//
|
||||
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
|
||||
this.toolStripMenuItem3.Size = new System.Drawing.Size(210, 6);
|
||||
this.toolStripMenuItem3.Size = new System.Drawing.Size(209, 6);
|
||||
//
|
||||
// mnuStepInto
|
||||
//
|
||||
this.mnuStepInto.Image = global::Mesen.GUI.Properties.Resources.StepInto;
|
||||
this.mnuStepInto.Name = "mnuStepInto";
|
||||
this.mnuStepInto.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuStepInto.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuStepInto.Text = "Step Into";
|
||||
//
|
||||
// mnuStepOver
|
||||
//
|
||||
this.mnuStepOver.Image = global::Mesen.GUI.Properties.Resources.StepOver;
|
||||
this.mnuStepOver.Name = "mnuStepOver";
|
||||
this.mnuStepOver.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuStepOver.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuStepOver.Text = "Step Over";
|
||||
//
|
||||
// mnuStepOut
|
||||
//
|
||||
this.mnuStepOut.Image = global::Mesen.GUI.Properties.Resources.StepOut;
|
||||
this.mnuStepOut.Name = "mnuStepOut";
|
||||
this.mnuStepOut.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuStepOut.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuStepOut.Text = "Step Out";
|
||||
//
|
||||
// mnuStepBack
|
||||
//
|
||||
this.mnuStepBack.Image = global::Mesen.GUI.Properties.Resources.StepBack;
|
||||
this.mnuStepBack.Name = "mnuStepBack";
|
||||
this.mnuStepBack.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuStepBack.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuStepBack.Text = "Step Back";
|
||||
this.mnuStepBack.Visible = false;
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(210, 6);
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(209, 6);
|
||||
//
|
||||
// mnuReset
|
||||
//
|
||||
this.mnuReset.Image = global::Mesen.GUI.Properties.Resources.Refresh;
|
||||
this.mnuReset.Name = "mnuReset";
|
||||
this.mnuReset.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuReset.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuReset.Text = "Reset";
|
||||
//
|
||||
// mnuPowerCycle
|
||||
//
|
||||
this.mnuPowerCycle.Image = global::Mesen.GUI.Properties.Resources.PowerCycle;
|
||||
this.mnuPowerCycle.Name = "mnuPowerCycle";
|
||||
this.mnuPowerCycle.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuPowerCycle.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuPowerCycle.Text = "Power Cycle";
|
||||
//
|
||||
// toolStripMenuItem24
|
||||
//
|
||||
this.toolStripMenuItem24.Name = "toolStripMenuItem24";
|
||||
this.toolStripMenuItem24.Size = new System.Drawing.Size(210, 6);
|
||||
this.toolStripMenuItem24.Size = new System.Drawing.Size(209, 6);
|
||||
//
|
||||
// mnuToggleBreakpoint
|
||||
//
|
||||
this.mnuToggleBreakpoint.Image = global::Mesen.GUI.Properties.Resources.Breakpoint;
|
||||
this.mnuToggleBreakpoint.Name = "mnuToggleBreakpoint";
|
||||
this.mnuToggleBreakpoint.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuToggleBreakpoint.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuToggleBreakpoint.Text = "Toggle Breakpoint";
|
||||
//
|
||||
// mnuDisableEnableBreakpoint
|
||||
// mnuEnableDisableBreakpoint
|
||||
//
|
||||
this.mnuDisableEnableBreakpoint.Image = global::Mesen.GUI.Properties.Resources.BreakpointDisabled;
|
||||
this.mnuDisableEnableBreakpoint.Name = "mnuDisableEnableBreakpoint";
|
||||
this.mnuDisableEnableBreakpoint.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuDisableEnableBreakpoint.Text = "Disable/Enable Breakpoint";
|
||||
this.mnuEnableDisableBreakpoint.Image = global::Mesen.GUI.Properties.Resources.BreakpointDisabled;
|
||||
this.mnuEnableDisableBreakpoint.Name = "mnuEnableDisableBreakpoint";
|
||||
this.mnuEnableDisableBreakpoint.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuEnableDisableBreakpoint.Text = "Disable/Enable Breakpoint";
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(210, 6);
|
||||
//
|
||||
// mnuRunCpuCycle
|
||||
//
|
||||
this.mnuRunCpuCycle.Image = global::Mesen.GUI.Properties.Resources.JumpTarget;
|
||||
this.mnuRunCpuCycle.Name = "mnuRunCpuCycle";
|
||||
this.mnuRunCpuCycle.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuRunCpuCycle.Text = "Run one CPU cycle";
|
||||
//
|
||||
// mnuRun1000Instructions
|
||||
//
|
||||
this.mnuRun1000Instructions.Name = "mnuRun1000Instructions";
|
||||
this.mnuRun1000Instructions.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuRun1000Instructions.Text = "Run 1000 CPU instructions";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(209, 6);
|
||||
//
|
||||
// mnuRunPpuCycle
|
||||
//
|
||||
this.mnuRunPpuCycle.Image = global::Mesen.GUI.Properties.Resources.RunPpuCycle;
|
||||
this.mnuRunPpuCycle.Name = "mnuRunPpuCycle";
|
||||
this.mnuRunPpuCycle.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuRunPpuCycle.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuRunPpuCycle.Text = "Run one PPU cycle";
|
||||
//
|
||||
// mnuRunScanline
|
||||
//
|
||||
this.mnuRunScanline.Image = global::Mesen.GUI.Properties.Resources.RunPpuScanline;
|
||||
this.mnuRunScanline.Name = "mnuRunScanline";
|
||||
this.mnuRunScanline.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuRunScanline.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuRunScanline.Text = "Run one scanline";
|
||||
//
|
||||
// mnuRunOneFrame
|
||||
//
|
||||
this.mnuRunOneFrame.Image = global::Mesen.GUI.Properties.Resources.RunPpuFrame;
|
||||
this.mnuRunOneFrame.Name = "mnuRunOneFrame";
|
||||
this.mnuRunOneFrame.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuRunOneFrame.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuRunOneFrame.Text = "Run one frame";
|
||||
//
|
||||
// toolStripMenuItem8
|
||||
//
|
||||
this.toolStripMenuItem8.Name = "toolStripMenuItem8";
|
||||
this.toolStripMenuItem8.Size = new System.Drawing.Size(210, 6);
|
||||
this.toolStripMenuItem8.Size = new System.Drawing.Size(209, 6);
|
||||
this.toolStripMenuItem8.Visible = false;
|
||||
//
|
||||
// mnuBreakIn
|
||||
//
|
||||
this.mnuBreakIn.Name = "mnuBreakIn";
|
||||
this.mnuBreakIn.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuBreakIn.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuBreakIn.Text = "Break in...";
|
||||
this.mnuBreakIn.Visible = false;
|
||||
//
|
||||
// mnuBreakOn
|
||||
//
|
||||
this.mnuBreakOn.Name = "mnuBreakOn";
|
||||
this.mnuBreakOn.Size = new System.Drawing.Size(213, 22);
|
||||
this.mnuBreakOn.Size = new System.Drawing.Size(212, 22);
|
||||
this.mnuBreakOn.Text = "Break on...";
|
||||
this.mnuBreakOn.Visible = false;
|
||||
//
|
||||
// searchToolStripMenuItem
|
||||
//
|
||||
this.searchToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuFind,
|
||||
this.mnuFindNext,
|
||||
this.mnuFindPrev,
|
||||
this.toolStripMenuItem9,
|
||||
this.mnuFindAllOccurrences,
|
||||
this.mnuGoTo});
|
||||
this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
|
||||
this.searchToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
|
||||
this.searchToolStripMenuItem.Text = "Search";
|
||||
//
|
||||
// mnuFind
|
||||
//
|
||||
this.mnuFind.Image = global::Mesen.GUI.Properties.Resources.Find;
|
||||
this.mnuFind.Name = "mnuFind";
|
||||
this.mnuFind.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuFind.Text = "Find...";
|
||||
//
|
||||
// mnuFindNext
|
||||
//
|
||||
this.mnuFindNext.Image = global::Mesen.GUI.Properties.Resources.NextArrow;
|
||||
this.mnuFindNext.Name = "mnuFindNext";
|
||||
this.mnuFindNext.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuFindNext.Text = "Find Next";
|
||||
//
|
||||
// mnuFindPrev
|
||||
//
|
||||
this.mnuFindPrev.Image = global::Mesen.GUI.Properties.Resources.PreviousArrow;
|
||||
this.mnuFindPrev.Name = "mnuFindPrev";
|
||||
this.mnuFindPrev.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuFindPrev.Text = "Find Previous";
|
||||
//
|
||||
// toolStripMenuItem9
|
||||
//
|
||||
this.toolStripMenuItem9.Name = "toolStripMenuItem9";
|
||||
this.toolStripMenuItem9.Size = new System.Drawing.Size(180, 6);
|
||||
//
|
||||
// mnuFindAllOccurrences
|
||||
//
|
||||
this.mnuFindAllOccurrences.Name = "mnuFindAllOccurrences";
|
||||
this.mnuFindAllOccurrences.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuFindAllOccurrences.Text = "Find All Occurrences";
|
||||
this.mnuFindAllOccurrences.Visible = false;
|
||||
//
|
||||
// mnuGoTo
|
||||
//
|
||||
this.mnuGoTo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuGoToAddress,
|
||||
this.toolStripMenuItem23,
|
||||
this.mnuGoToProgramCounter,
|
||||
this.toolStripMenuItem22,
|
||||
this.mnuGoToResetHandler,
|
||||
this.mnuGoToIrqHandler,
|
||||
this.mnuGoToNmiHandler,
|
||||
this.mnuGoToBrkHandler,
|
||||
this.mnuGoToCopHandler});
|
||||
this.mnuGoTo.Name = "mnuGoTo";
|
||||
this.mnuGoTo.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuGoTo.Text = "Go To...";
|
||||
this.mnuGoTo.DropDownOpening += new System.EventHandler(this.mnuGoTo_DropDownOpening);
|
||||
//
|
||||
// mnuGoToAddress
|
||||
//
|
||||
this.mnuGoToAddress.Name = "mnuGoToAddress";
|
||||
this.mnuGoToAddress.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToAddress.Text = "Address";
|
||||
//
|
||||
// toolStripMenuItem23
|
||||
//
|
||||
this.toolStripMenuItem23.Name = "toolStripMenuItem23";
|
||||
this.toolStripMenuItem23.Size = new System.Drawing.Size(163, 6);
|
||||
//
|
||||
// mnuGoToProgramCounter
|
||||
//
|
||||
this.mnuGoToProgramCounter.Name = "mnuGoToProgramCounter";
|
||||
this.mnuGoToProgramCounter.ShortcutKeyDisplayString = "";
|
||||
this.mnuGoToProgramCounter.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToProgramCounter.Text = "Program Counter";
|
||||
//
|
||||
// toolStripMenuItem22
|
||||
//
|
||||
this.toolStripMenuItem22.Name = "toolStripMenuItem22";
|
||||
this.toolStripMenuItem22.Size = new System.Drawing.Size(163, 6);
|
||||
//
|
||||
// mnuGoToResetHandler
|
||||
//
|
||||
this.mnuGoToResetHandler.Name = "mnuGoToResetHandler";
|
||||
this.mnuGoToResetHandler.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToResetHandler.Text = "Reset Handler";
|
||||
//
|
||||
// mnuGoToIrqHandler
|
||||
//
|
||||
this.mnuGoToIrqHandler.Name = "mnuGoToIrqHandler";
|
||||
this.mnuGoToIrqHandler.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToIrqHandler.Text = "IRQ Handler";
|
||||
//
|
||||
// mnuGoToNmiHandler
|
||||
//
|
||||
this.mnuGoToNmiHandler.Name = "mnuGoToNmiHandler";
|
||||
this.mnuGoToNmiHandler.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToNmiHandler.Text = "NMI Handler";
|
||||
//
|
||||
// mnuGoToBrkHandler
|
||||
//
|
||||
this.mnuGoToBrkHandler.Name = "mnuGoToBrkHandler";
|
||||
this.mnuGoToBrkHandler.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToBrkHandler.Text = "BRK Handler";
|
||||
//
|
||||
// mnuGoToCopHandler
|
||||
//
|
||||
this.mnuGoToCopHandler.Name = "mnuGoToCopHandler";
|
||||
this.mnuGoToCopHandler.Size = new System.Drawing.Size(166, 22);
|
||||
this.mnuGoToCopHandler.Text = "COP Handler";
|
||||
//
|
||||
// optionsToolStripMenuItem
|
||||
//
|
||||
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuPreferences});
|
||||
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
|
||||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
|
||||
this.optionsToolStripMenuItem.Text = "Options";
|
||||
//
|
||||
// mnuPreferences
|
||||
//
|
||||
this.mnuPreferences.Image = global::Mesen.GUI.Properties.Resources.Settings;
|
||||
this.mnuPreferences.Name = "mnuPreferences";
|
||||
this.mnuPreferences.Size = new System.Drawing.Size(209, 22);
|
||||
this.mnuPreferences.Text = "Configure shortcut keys...";
|
||||
this.mnuPreferences.Click += new System.EventHandler(this.mnuPreferences_Click);
|
||||
//
|
||||
// ctrlSplitContainer
|
||||
//
|
||||
|
@ -350,6 +489,7 @@
|
|||
this.ctrlBreakpoints.Name = "ctrlBreakpoints";
|
||||
this.ctrlBreakpoints.Size = new System.Drawing.Size(265, 145);
|
||||
this.ctrlBreakpoints.TabIndex = 0;
|
||||
this.ctrlBreakpoints.BreakpointNavigation += new Mesen.GUI.Debugger.Controls.ctrlBreakpoints.BreakpointNavigationHandler(this.ctrlBreakpoints_BreakpointNavigation);
|
||||
//
|
||||
// grpCallstack
|
||||
//
|
||||
|
@ -421,9 +561,8 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem mnuPowerCycle;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem24;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuToggleBreakpoint;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuDisableEnableBreakpoint;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuEnableDisableBreakpoint;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRunCpuCycle;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRunPpuCycle;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRunScanline;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRunOneFrame;
|
||||
|
@ -437,9 +576,26 @@
|
|||
private System.Windows.Forms.GroupBox grpBreakpoints;
|
||||
private Controls.ctrlBreakpoints ctrlBreakpoints;
|
||||
private Controls.ctrlConsoleStatus ctrlStatus;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRun1000Instructions;
|
||||
private GUI.Controls.ctrlMesenToolStrip tsToolbar;
|
||||
private System.Windows.Forms.GroupBox grpCallstack;
|
||||
private Controls.ctrlCallstack ctrlCallstack;
|
||||
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFind;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFindNext;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFindPrev;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem9;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFindAllOccurrences;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoTo;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToAddress;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem23;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToProgramCounter;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem22;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToResetHandler;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToIrqHandler;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToNmiHandler;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToBrkHandler;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToCopHandler;
|
||||
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuPreferences;
|
||||
}
|
||||
}
|
|
@ -47,6 +47,20 @@ namespace Mesen.GUI.Debugger
|
|||
}
|
||||
}
|
||||
|
||||
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
{
|
||||
if(keyData == ConfigManager.Config.Debug.Shortcuts.ToggleBreakContinue) {
|
||||
if(EmuApi.IsPaused()) {
|
||||
DebugApi.ResumeExecution();
|
||||
} else {
|
||||
DebugApi.Step(1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.ProcessCmdKey(ref msg, keyData);
|
||||
}
|
||||
|
||||
private void InitShortcuts()
|
||||
{
|
||||
mnuReset.InitShortcut(this, nameof(DebuggerShortcutsConfig.Reset));
|
||||
|
@ -62,41 +76,113 @@ namespace Mesen.GUI.Debugger
|
|||
mnuStepInto.InitShortcut(this, nameof(DebuggerShortcutsConfig.StepInto));
|
||||
mnuStepOver.InitShortcut(this, nameof(DebuggerShortcutsConfig.StepOver));
|
||||
|
||||
mnuRunCpuCycle.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunCpuCycle));
|
||||
mnuRunPpuCycle.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuCycle));
|
||||
mnuRunScanline.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuScanline));
|
||||
mnuRunOneFrame.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuFrame));
|
||||
|
||||
mnuToggleBreakpoint.InitShortcut(this, nameof(DebuggerShortcutsConfig.CodeWindow_ToggleBreakpoint));
|
||||
mnuEnableDisableBreakpoint.InitShortcut(this, nameof(DebuggerShortcutsConfig.CodeWindow_DisableEnableBreakpoint));
|
||||
|
||||
mnuReset.InitShortcut(this, nameof(DebuggerShortcutsConfig.Reset));
|
||||
mnuPowerCycle.InitShortcut(this, nameof(DebuggerShortcutsConfig.PowerCycle));
|
||||
|
||||
mnuGoToAddress.InitShortcut(this, nameof(DebuggerShortcutsConfig.GoTo));
|
||||
mnuGoToProgramCounter.InitShortcut(this, nameof(DebuggerShortcutsConfig.GoToProgramCounter));
|
||||
|
||||
mnuFind.InitShortcut(this, nameof(DebuggerShortcutsConfig.Find));
|
||||
mnuFindNext.InitShortcut(this, nameof(DebuggerShortcutsConfig.FindNext));
|
||||
mnuFindPrev.InitShortcut(this, nameof(DebuggerShortcutsConfig.FindPrev));
|
||||
|
||||
mnuStepInto.Click += (s, e) => { DebugApi.Step(1); };
|
||||
mnuStepOver.Click += (s, e) => { DebugApi.Step(1, StepType.CpuStepOver); };
|
||||
mnuStepOut.Click += (s, e) => { DebugApi.Step(1, StepType.CpuStepOut); };
|
||||
mnuRun1000Instructions.Click += (s, e) => { DebugApi.Step(1000); };
|
||||
mnuRunPpuCycle.Click += (s, e) => { DebugApi.Step(1, StepType.PpuStep); };
|
||||
mnuRunScanline.Click += (s, e) => { DebugApi.Step(341, StepType.PpuStep); };
|
||||
mnuRunOneFrame.Click += (s, e) => { DebugApi.Step(341*262, StepType.PpuStep); }; //TODO ntsc/pal
|
||||
mnuContinue.Click += (s, e) => { DebugApi.ResumeExecution(); };
|
||||
mnuBreak.Click += (s, e) => { DebugApi.Step(1); };
|
||||
|
||||
mnuReset.Click += (s, e) => { EmuApi.Reset(); };
|
||||
mnuPowerCycle.Click += (s, e) => { EmuApi.PowerCycle(); };
|
||||
|
||||
mnuToggleBreakpoint.Click += (s, e) => { ctrlDisassemblyView.ToggleBreakpoint(); };
|
||||
mnuEnableDisableBreakpoint.Click += (s, e) => { ctrlDisassemblyView.EnableDisableBreakpoint(); };
|
||||
|
||||
mnuGoToAddress.Click += (s, e) => { GoToAddress(); };
|
||||
mnuGoToNmiHandler.Click += (s, e) => { GoToVector(CpuVector.Nmi); };
|
||||
mnuGoToIrqHandler.Click += (s, e) => { GoToVector(CpuVector.Irq); };
|
||||
mnuGoToResetHandler.Click += (s, e) => { GoToVector(CpuVector.Reset); };
|
||||
mnuGoToBrkHandler.Click += (s, e) => { GoToVector(CpuVector.Brk); };
|
||||
mnuGoToCopHandler.Click += (s, e) => { GoToVector(CpuVector.Cop); };
|
||||
mnuGoToProgramCounter.Click += (s, e) => { ctrlDisassemblyView.GoToActiveAddress(); };
|
||||
|
||||
mnuFind.Click += (s, e) => { ctrlDisassemblyView.CodeViewer.OpenSearchBox(); };
|
||||
mnuFindNext.Click += (s, e) => { ctrlDisassemblyView.CodeViewer.FindNext(); };
|
||||
mnuFindPrev.Click += (s, e) => { ctrlDisassemblyView.CodeViewer.FindPrevious(); };
|
||||
}
|
||||
|
||||
private void InitToolbar()
|
||||
{
|
||||
tsToolbar.AddItemsToToolbar(
|
||||
mnuContinue, mnuBreak, null,
|
||||
mnuStepInto, mnuStepOver, mnuStepOut, mnuStepBack, null,
|
||||
mnuRunCpuCycle, null,
|
||||
mnuStepInto, mnuStepOver, mnuStepOut, null,
|
||||
mnuRunPpuCycle, mnuRunScanline, mnuRunOneFrame, null,
|
||||
mnuToggleBreakpoint, mnuDisableEnableBreakpoint, null,
|
||||
mnuToggleBreakpoint, mnuEnableDisableBreakpoint, null,
|
||||
mnuBreakIn, null, mnuBreakOn
|
||||
);
|
||||
}
|
||||
|
||||
private void UpdateContinueAction()
|
||||
{
|
||||
bool paused = EmuApi.IsPaused();
|
||||
mnuContinue.Enabled = paused;
|
||||
mnuBreak.Enabled = !paused;
|
||||
|
||||
if(!paused) {
|
||||
ctrlDisassemblyView.SetActiveAddress(null);
|
||||
}
|
||||
}
|
||||
|
||||
private void GoToAddress()
|
||||
{
|
||||
GoToAddress address = new GoToAddress();
|
||||
using(frmGoToLine frm = new frmGoToLine(address, 6)) {
|
||||
frm.StartPosition = FormStartPosition.CenterParent;
|
||||
if(frm.ShowDialog(ctrlDisassemblyView) == DialogResult.OK) {
|
||||
ctrlDisassemblyView.GoToAddress((int)address.Address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int GetVectorAddress(CpuVector vector)
|
||||
{
|
||||
uint address = (uint)vector;
|
||||
byte lsb = DebugApi.GetMemoryValue(SnesMemoryType.CpuMemory, address);
|
||||
byte msb = DebugApi.GetMemoryValue(SnesMemoryType.CpuMemory, address + 1);
|
||||
return (msb << 8) | lsb;
|
||||
}
|
||||
|
||||
private void GoToVector(CpuVector vector)
|
||||
{
|
||||
ctrlDisassemblyView.GoToAddress(GetVectorAddress(vector));
|
||||
}
|
||||
|
||||
private void OnNotificationReceived(NotificationEventArgs e)
|
||||
{
|
||||
switch(e.NotificationType) {
|
||||
case ConsoleNotificationType.PpuFrameDone:
|
||||
this.BeginInvoke((MethodInvoker)(() => {
|
||||
UpdateContinueAction();
|
||||
}));
|
||||
break;
|
||||
|
||||
case ConsoleNotificationType.CodeBreak:
|
||||
DebugState state = DebugApi.GetState();
|
||||
int activeAddress = (int)((state.Cpu.K << 16) | state.Cpu.PC);
|
||||
|
||||
this.BeginInvoke((MethodInvoker)(() => {
|
||||
UpdateContinueAction();
|
||||
|
||||
ctrlStatus.UpdateStatus(state);
|
||||
ctrlDisassemblyView.SetActiveAddress(activeAddress);
|
||||
ctrlWatch.UpdateWatch(true);
|
||||
|
@ -110,5 +196,35 @@ namespace Mesen.GUI.Debugger
|
|||
{
|
||||
ctrlDisassemblyView.ScrollToAddress(address);
|
||||
}
|
||||
|
||||
private void mnuPreferences_Click(object sender, EventArgs e)
|
||||
{
|
||||
using(frmDbgPreferences frm = new frmDbgPreferences()) {
|
||||
frm.ShowDialog(sender, this);
|
||||
}
|
||||
}
|
||||
|
||||
private void ctrlBreakpoints_BreakpointNavigation(Breakpoint bp)
|
||||
{
|
||||
ctrlDisassemblyView.GoToAddress(bp.GetRelativeAddress());
|
||||
}
|
||||
|
||||
private void mnuGoTo_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
mnuGoToNmiHandler.Text = "NMI Handler ($" + GetVectorAddress(CpuVector.Nmi).ToString("X4") + ")";
|
||||
mnuGoToIrqHandler.Text = "IRQ Handler ($" + GetVectorAddress(CpuVector.Irq).ToString("X4") + ")";
|
||||
mnuGoToResetHandler.Text = "Reset Handler ($" + GetVectorAddress(CpuVector.Reset).ToString("X4") + ")";
|
||||
mnuGoToBrkHandler.Text = "BRK Handler ($" + GetVectorAddress(CpuVector.Brk).ToString("X4") + ")";
|
||||
mnuGoToCopHandler.Text = "COP Handler ($" + GetVectorAddress(CpuVector.Cop).ToString("X4") + ")";
|
||||
}
|
||||
}
|
||||
|
||||
public enum CpuVector
|
||||
{
|
||||
Reset = 0xFFFC,
|
||||
Nmi = 0xFFEA,
|
||||
Irq = 0xFFEE,
|
||||
Brk = 0xFFE6,
|
||||
Cop = 0xFFE4,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ using System.Threading.Tasks;
|
|||
using System.Windows.Forms;
|
||||
using System.Xml.Serialization;
|
||||
using Mesen.GUI.Config;
|
||||
using Mesen.GUI.Debugger.Workspace;
|
||||
using Mesen.GUI.Forms;
|
||||
using Mesen.GUI.Utilities;
|
||||
|
||||
|
@ -46,7 +47,7 @@ namespace Mesen.GUI
|
|||
Task.Run(() => {
|
||||
//Cache deserializers in another thread
|
||||
new XmlSerializer(typeof(Configuration));
|
||||
//new XmlSerializer(typeof(DebugWorkspace));
|
||||
new XmlSerializer(typeof(DebugWorkspace));
|
||||
});
|
||||
|
||||
if(Type.GetType("Mono.Runtime") != null) {
|
||||
|
|
Loading…
Add table
Reference in a new issue