Debugger: Improved usability and added shortcuts/features

This commit is contained in:
Sour 2019-03-30 21:47:30 -04:00
parent fd0aefd130
commit 4402be3c52
15 changed files with 456 additions and 105 deletions

View file

@ -171,12 +171,13 @@ void Console::Stop(bool sendNotification)
void Console::Reset() void Console::Reset()
{ {
Lock();
shared_ptr<Debugger> debugger = _debugger; shared_ptr<Debugger> debugger = _debugger;
if(debugger) { if(debugger) {
debugger->Run(); debugger->Run();
} }
Lock();
_dmaController->Reset(); _dmaController->Reset();
_internalRegisters->Reset(); _internalRegisters->Reset();
_memoryManager->Reset(); _memoryManager->Reset();
@ -196,6 +197,11 @@ void Console::PowerCycle()
{ {
shared_ptr<BaseCartridge> cart = _cart; shared_ptr<BaseCartridge> cart = _cart;
if(cart) { if(cart) {
shared_ptr<Debugger> debugger = _debugger;
if(debugger) {
debugger->Run();
}
RomInfo info = cart->GetRomInfo(); RomInfo info = cart->GetRomInfo();
Lock(); Lock();
LoadRom(info.RomFile, info.PatchFile, false); LoadRom(info.RomFile, info.PatchFile, false);

View file

@ -203,10 +203,17 @@ uint32_t Disassembler::GetLineCount()
uint32_t Disassembler::GetLineIndex(uint32_t cpuAddress) uint32_t Disassembler::GetLineIndex(uint32_t cpuAddress)
{ {
auto lock = _disassemblyLock.AcquireSafe(); auto lock = _disassemblyLock.AcquireSafe();
for(int i = 0; i < _disassembly.size(); i++) { uint32_t lastAddress = 0;
if(_disassembly[i].CpuAddress == cpuAddress) { for(int i = 1; i < _disassembly.size(); i++) {
return 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; return 0;
} }

View file

@ -2,6 +2,7 @@
#include "stdafx.h" #include "stdafx.h"
#include "BaseControlDevice.h" #include "BaseControlDevice.h"
#include "Console.h" #include "Console.h"
#include "Debugger.h"
class SystemActionManager : public BaseControlDevice class SystemActionManager : public BaseControlDevice
{ {
@ -46,6 +47,11 @@ public:
bool Reset() bool Reset()
{ {
if(!_needReset) { if(!_needReset) {
shared_ptr<Debugger> debugger = _console->GetDebugger(false);
if(debugger) {
debugger->Run();
}
_needReset = true; _needReset = true;
return true; return true;
} }
@ -55,6 +61,11 @@ public:
bool PowerCycle() bool PowerCycle()
{ {
if(!_needPowerCycle) { if(!_needPowerCycle) {
shared_ptr<Debugger> debugger = _console->GetDebugger(false);
if(debugger) {
debugger->Run();
}
_needPowerCycle = true; _needPowerCycle = true;
return true; return true;
} }

View file

@ -15,7 +15,8 @@ namespace Mesen.GUI.Debugger.Controls
{ {
public partial class ctrlBreakpoints : BaseControl public partial class ctrlBreakpoints : BaseControl
{ {
public event EventHandler BreakpointNavigation; public delegate void BreakpointNavigationHandler(Breakpoint bp);
public event BreakpointNavigationHandler BreakpointNavigation;
private Font _markedColumnFont; private Font _markedColumnFont;
public ctrlBreakpoints() public ctrlBreakpoints()
@ -125,7 +126,7 @@ namespace Mesen.GUI.Debugger.Controls
if(BreakpointNavigation != null) { if(BreakpointNavigation != null) {
Breakpoint bp = lstBreakpoints.SelectedItems[0].Tag as Breakpoint; Breakpoint bp = lstBreakpoints.SelectedItems[0].Tag as Breakpoint;
if(bp.IsCpuBreakpoint && bp.GetRelativeAddress() >= 0) { if(bp.IsCpuBreakpoint && bp.GetRelativeAddress() >= 0) {
BreakpointNavigation(bp, null); BreakpointNavigation(bp);
} }
} }
} }

View file

@ -99,6 +99,7 @@
// //
this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(146, 6); this.toolStripMenuItem2.Size = new System.Drawing.Size(146, 6);
this.toolStripMenuItem2.Visible = false;
// //
// mnuShowLabels // mnuShowLabels
// //
@ -106,6 +107,7 @@
this.mnuShowLabels.Name = "mnuShowLabels"; this.mnuShowLabels.Name = "mnuShowLabels";
this.mnuShowLabels.Size = new System.Drawing.Size(149, 22); this.mnuShowLabels.Size = new System.Drawing.Size(149, 22);
this.mnuShowLabels.Text = "Show Labels"; this.mnuShowLabels.Text = "Show Labels";
this.mnuShowLabels.Visible = false;
// //
// lstBreakpoints // lstBreakpoints
// //

View file

@ -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
});
}
}
} }
} }

View file

@ -13,5 +13,6 @@ namespace Mesen.GUI.Debugger.Code
void RefreshCode(); void RefreshCode();
void ToggleBreakpoint(int lineIndex); void ToggleBreakpoint(int lineIndex);
void EnableDisableBreakpoint(int lineIndex);
} }
} }

View file

@ -91,12 +91,36 @@ namespace Mesen.GUI.Debugger.Controls
ctrlCode.ScrollToLineIndex(lineIndex, eHistoryType.None, false, true); 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); _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) private void ctrlCode_MouseDown(object sender, MouseEventArgs e)
{ {
if(e.X < 20) { if(e.X < 20) {

View file

@ -61,6 +61,11 @@ namespace Mesen.GUI.Debugger
})); }));
} }
break; break;
case ConsoleNotificationType.GameLoaded:
//Configuration is lost when debugger is restarted (when switching game or power cycling)
ctrlScanlineCycleSelect.RefreshSettings();
break;
} }
} }

View file

@ -77,6 +77,11 @@ namespace Mesen.GUI.Debugger
})); }));
} }
break; break;
case ConsoleNotificationType.GameLoaded:
//Configuration is lost when debugger is restarted (when switching game or power cycling)
ctrlScanlineCycleSelect.RefreshSettings();
break;
} }
} }

View file

@ -83,6 +83,11 @@ namespace Mesen.GUI.Debugger
})); }));
} }
break; break;
case ConsoleNotificationType.GameLoaded:
//Configuration is lost when debugger is restarted (when switching game or power cycling)
ctrlScanlineCycleSelect.RefreshSettings();
break;
} }
} }

View file

@ -35,32 +35,32 @@ namespace Mesen.GUI.Debugger
GetMember(nameof(DebuggerShortcutsConfig.Paste)), GetMember(nameof(DebuggerShortcutsConfig.Paste)),
GetMember(nameof(DebuggerShortcutsConfig.SelectAll)), GetMember(nameof(DebuggerShortcutsConfig.SelectAll)),
GetMember(nameof(DebuggerShortcutsConfig.Refresh)), GetMember(nameof(DebuggerShortcutsConfig.Refresh)),
GetMember(nameof(DebuggerShortcutsConfig.MarkAsCode)), //GetMember(nameof(DebuggerShortcutsConfig.MarkAsCode)),
GetMember(nameof(DebuggerShortcutsConfig.MarkAsData)), //GetMember(nameof(DebuggerShortcutsConfig.MarkAsData)),
GetMember(nameof(DebuggerShortcutsConfig.MarkAsUnidentified)), //GetMember(nameof(DebuggerShortcutsConfig.MarkAsUnidentified)),
GetMember(nameof(DebuggerShortcutsConfig.GoToAll)), //GetMember(nameof(DebuggerShortcutsConfig.GoToAll)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)), GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditInMemoryViewer)),
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInDisassembly)), GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInDisassembly)),
GetMember(nameof(DebuggerShortcutsConfig.OpenApuViewer)), //GetMember(nameof(DebuggerShortcutsConfig.OpenApuViewer)),
GetMember(nameof(DebuggerShortcutsConfig.OpenAssembler)), //GetMember(nameof(DebuggerShortcutsConfig.OpenAssembler)),
GetMember(nameof(DebuggerShortcutsConfig.OpenDebugger)), GetMember(nameof(DebuggerShortcutsConfig.OpenDebugger)),
GetMember(nameof(DebuggerShortcutsConfig.OpenEventViewer)), GetMember(nameof(DebuggerShortcutsConfig.OpenEventViewer)),
GetMember(nameof(DebuggerShortcutsConfig.OpenMemoryTools)), GetMember(nameof(DebuggerShortcutsConfig.OpenMemoryTools)),
GetMember(nameof(DebuggerShortcutsConfig.OpenProfiler)), //GetMember(nameof(DebuggerShortcutsConfig.OpenProfiler)),
GetMember(nameof(DebuggerShortcutsConfig.OpenScriptWindow)), //GetMember(nameof(DebuggerShortcutsConfig.OpenScriptWindow)),
GetMember(nameof(DebuggerShortcutsConfig.OpenTextHooker)), //GetMember(nameof(DebuggerShortcutsConfig.OpenTextHooker)),
GetMember(nameof(DebuggerShortcutsConfig.OpenTraceLogger)), GetMember(nameof(DebuggerShortcutsConfig.OpenTraceLogger)),
GetMember(nameof(DebuggerShortcutsConfig.OpenWatchWindow)), //GetMember(nameof(DebuggerShortcutsConfig.OpenWatchWindow)),
GetMember(nameof(DebuggerShortcutsConfig.OpenTilemapViewer)), GetMember(nameof(DebuggerShortcutsConfig.OpenTilemapViewer)),
GetMember(nameof(DebuggerShortcutsConfig.OpenTileViewer)), GetMember(nameof(DebuggerShortcutsConfig.OpenTileViewer)),
GetMember(nameof(DebuggerShortcutsConfig.OpenSpriteViewer)), //GetMember(nameof(DebuggerShortcutsConfig.OpenSpriteViewer)),
GetMember(nameof(DebuggerShortcutsConfig.OpenPaletteViewer)), GetMember(nameof(DebuggerShortcutsConfig.OpenPaletteViewer)),
}; };
ctrlDbgShortcutsMemoryViewer.Shortcuts = new FieldInfo[] { ctrlDbgShortcutsMemoryViewer.Shortcuts = new FieldInfo[] {
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Freeze)), /*GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Freeze)),
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Unfreeze)), GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Unfreeze)),
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_AddToWatch)), GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_AddToWatch)),
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_EditBreakpoint)), GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_EditBreakpoint)),
@ -68,15 +68,15 @@ namespace Mesen.GUI.Debugger
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Import)), GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Import)),
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Export)), GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_Export)),
GetMember(nameof(DebuggerShortcutsConfig.MemoryViewer_ViewInCpuMemory)), 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_OpenScript)),
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_SaveScript)), GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_SaveScript)),
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_RunScript)), GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_RunScript)),
GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_StopScript)) GetMember(nameof(DebuggerShortcutsConfig.ScriptWindow_StopScript))
}; };*/
ctrlDbgShortcutsDebugger.Shortcuts = new FieldInfo[] { ctrlDbgShortcutsDebugger.Shortcuts = new FieldInfo[] {
GetMember(nameof(DebuggerShortcutsConfig.Reset)), GetMember(nameof(DebuggerShortcutsConfig.Reset)),
@ -87,35 +87,35 @@ namespace Mesen.GUI.Debugger
GetMember(nameof(DebuggerShortcutsConfig.StepInto)), GetMember(nameof(DebuggerShortcutsConfig.StepInto)),
GetMember(nameof(DebuggerShortcutsConfig.StepOver)), GetMember(nameof(DebuggerShortcutsConfig.StepOver)),
GetMember(nameof(DebuggerShortcutsConfig.StepOut)), GetMember(nameof(DebuggerShortcutsConfig.StepOut)),
GetMember(nameof(DebuggerShortcutsConfig.StepBack)), //GetMember(nameof(DebuggerShortcutsConfig.StepBack)),
GetMember(nameof(DebuggerShortcutsConfig.RunPpuCycle)), GetMember(nameof(DebuggerShortcutsConfig.RunPpuCycle)),
GetMember(nameof(DebuggerShortcutsConfig.RunPpuScanline)), GetMember(nameof(DebuggerShortcutsConfig.RunPpuScanline)),
GetMember(nameof(DebuggerShortcutsConfig.RunPpuFrame)), GetMember(nameof(DebuggerShortcutsConfig.RunPpuFrame)),
GetMember(nameof(DebuggerShortcutsConfig.BreakIn)), //GetMember(nameof(DebuggerShortcutsConfig.BreakIn)),
GetMember(nameof(DebuggerShortcutsConfig.BreakOn)), //GetMember(nameof(DebuggerShortcutsConfig.BreakOn)),
GetMember(nameof(DebuggerShortcutsConfig.FindOccurrences)), //GetMember(nameof(DebuggerShortcutsConfig.FindOccurrences)),
GetMember(nameof(DebuggerShortcutsConfig.GoToProgramCounter)), GetMember(nameof(DebuggerShortcutsConfig.GoToProgramCounter)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SetNextStatement)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SetNextStatement)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSubroutine)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSubroutine)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSelectedCode)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSelectedCode)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSourceFile)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditSourceFile)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditLabel)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_EditLabel)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateBack)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateBack)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateForward)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_NavigateForward)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_ToggleBreakpoint)), GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_ToggleBreakpoint)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_DisableEnableBreakpoint)), GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_DisableEnableBreakpoint)),
GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SwitchView)), //GetMember(nameof(DebuggerShortcutsConfig.CodeWindow_SwitchView)),
GetMember(nameof(DebuggerShortcutsConfig.FunctionList_EditLabel)), //GetMember(nameof(DebuggerShortcutsConfig.FunctionList_EditLabel)),
GetMember(nameof(DebuggerShortcutsConfig.FunctionList_AddBreakpoint)), //GetMember(nameof(DebuggerShortcutsConfig.FunctionList_AddBreakpoint)),
GetMember(nameof(DebuggerShortcutsConfig.FunctionList_FindOccurrences)), //GetMember(nameof(DebuggerShortcutsConfig.FunctionList_FindOccurrences)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_Add)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_Add)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_Edit)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_Edit)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_Delete)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_Delete)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddBreakpoint)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddBreakpoint)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddToWatch)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_AddToWatch)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_FindOccurrences)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_FindOccurrences)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInCpuMemory)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInCpuMemory)),
GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInMemoryType)), //GetMember(nameof(DebuggerShortcutsConfig.LabelList_ViewInMemoryType)),
GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_Add)), GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_Add)),
GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_Edit)), GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_Edit)),
GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_GoToLocation)), GetMember(nameof(DebuggerShortcutsConfig.BreakpointList_GoToLocation)),
@ -123,12 +123,12 @@ namespace Mesen.GUI.Debugger
GetMember(nameof(DebuggerShortcutsConfig.WatchList_Delete)), GetMember(nameof(DebuggerShortcutsConfig.WatchList_Delete)),
GetMember(nameof(DebuggerShortcutsConfig.WatchList_MoveUp)), GetMember(nameof(DebuggerShortcutsConfig.WatchList_MoveUp)),
GetMember(nameof(DebuggerShortcutsConfig.WatchList_MoveDown)), GetMember(nameof(DebuggerShortcutsConfig.WatchList_MoveDown)),
GetMember(nameof(DebuggerShortcutsConfig.SaveRom)), //GetMember(nameof(DebuggerShortcutsConfig.SaveRom)),
GetMember(nameof(DebuggerShortcutsConfig.SaveRomAs)), //GetMember(nameof(DebuggerShortcutsConfig.SaveRomAs)),
GetMember(nameof(DebuggerShortcutsConfig.SaveEditAsIps)), //GetMember(nameof(DebuggerShortcutsConfig.SaveEditAsIps)),
GetMember(nameof(DebuggerShortcutsConfig.RevertPrgChrChanges)), //GetMember(nameof(DebuggerShortcutsConfig.RevertPrgChrChanges)),
GetMember(nameof(DebuggerShortcutsConfig.ToggleVerifiedData)), //GetMember(nameof(DebuggerShortcutsConfig.ToggleVerifiedData)),
GetMember(nameof(DebuggerShortcutsConfig.ToggleUnidentifiedCodeData)) //GetMember(nameof(DebuggerShortcutsConfig.ToggleUnidentifiedCodeData))
}; };
} }

View file

@ -46,16 +46,32 @@
this.mnuPowerCycle = new System.Windows.Forms.ToolStripMenuItem(); this.mnuPowerCycle = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem24 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem24 = new System.Windows.Forms.ToolStripSeparator();
this.mnuToggleBreakpoint = new System.Windows.Forms.ToolStripMenuItem(); 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.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.mnuRunPpuCycle = new System.Windows.Forms.ToolStripMenuItem();
this.mnuRunScanline = new System.Windows.Forms.ToolStripMenuItem(); this.mnuRunScanline = new System.Windows.Forms.ToolStripMenuItem();
this.mnuRunOneFrame = new System.Windows.Forms.ToolStripMenuItem(); this.mnuRunOneFrame = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
this.mnuBreakIn = new System.Windows.Forms.ToolStripMenuItem(); this.mnuBreakIn = new System.Windows.Forms.ToolStripMenuItem();
this.mnuBreakOn = 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.ctrlSplitContainer = new Mesen.GUI.Controls.ctrlSplitContainer();
this.ctrlStatus = new Mesen.GUI.Debugger.Controls.ctrlConsoleStatus(); this.ctrlStatus = new Mesen.GUI.Debugger.Controls.ctrlConsoleStatus();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
@ -88,7 +104,9 @@
// ctrlMesenMenuStrip1 // ctrlMesenMenuStrip1
// //
this.ctrlMesenMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 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.Location = new System.Drawing.Point(0, 0);
this.ctrlMesenMenuStrip1.Name = "ctrlMesenMenuStrip1"; this.ctrlMesenMenuStrip1.Name = "ctrlMesenMenuStrip1";
this.ctrlMesenMenuStrip1.Size = new System.Drawing.Size(832, 24); this.ctrlMesenMenuStrip1.Size = new System.Drawing.Size(832, 24);
@ -110,10 +128,8 @@
this.mnuPowerCycle, this.mnuPowerCycle,
this.toolStripMenuItem24, this.toolStripMenuItem24,
this.mnuToggleBreakpoint, this.mnuToggleBreakpoint,
this.mnuDisableEnableBreakpoint, this.mnuEnableDisableBreakpoint,
this.toolStripMenuItem2, this.toolStripMenuItem2,
this.mnuRunCpuCycle,
this.mnuRun1000Instructions,
this.mnuRunPpuCycle, this.mnuRunPpuCycle,
this.mnuRunScanline, this.mnuRunScanline,
this.mnuRunOneFrame, this.mnuRunOneFrame,
@ -128,7 +144,7 @@
// //
this.mnuContinue.Image = global::Mesen.GUI.Properties.Resources.MediaPlay; this.mnuContinue.Image = global::Mesen.GUI.Properties.Resources.MediaPlay;
this.mnuContinue.Name = "mnuContinue"; 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"; this.mnuContinue.Text = "Continue";
// //
// mnuBreak // mnuBreak
@ -137,135 +153,258 @@
this.mnuBreak.Image = global::Mesen.GUI.Properties.Resources.MediaPause; this.mnuBreak.Image = global::Mesen.GUI.Properties.Resources.MediaPause;
this.mnuBreak.Name = "mnuBreak"; this.mnuBreak.Name = "mnuBreak";
this.mnuBreak.ShortcutKeyDisplayString = ""; 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"; this.mnuBreak.Text = "Break";
// //
// toolStripMenuItem3 // toolStripMenuItem3
// //
this.toolStripMenuItem3.Name = "toolStripMenuItem3"; this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(210, 6); this.toolStripMenuItem3.Size = new System.Drawing.Size(209, 6);
// //
// mnuStepInto // mnuStepInto
// //
this.mnuStepInto.Image = global::Mesen.GUI.Properties.Resources.StepInto; this.mnuStepInto.Image = global::Mesen.GUI.Properties.Resources.StepInto;
this.mnuStepInto.Name = "mnuStepInto"; 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"; this.mnuStepInto.Text = "Step Into";
// //
// mnuStepOver // mnuStepOver
// //
this.mnuStepOver.Image = global::Mesen.GUI.Properties.Resources.StepOver; this.mnuStepOver.Image = global::Mesen.GUI.Properties.Resources.StepOver;
this.mnuStepOver.Name = "mnuStepOver"; 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"; this.mnuStepOver.Text = "Step Over";
// //
// mnuStepOut // mnuStepOut
// //
this.mnuStepOut.Image = global::Mesen.GUI.Properties.Resources.StepOut; this.mnuStepOut.Image = global::Mesen.GUI.Properties.Resources.StepOut;
this.mnuStepOut.Name = "mnuStepOut"; 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"; this.mnuStepOut.Text = "Step Out";
// //
// mnuStepBack // mnuStepBack
// //
this.mnuStepBack.Image = global::Mesen.GUI.Properties.Resources.StepBack; this.mnuStepBack.Image = global::Mesen.GUI.Properties.Resources.StepBack;
this.mnuStepBack.Name = "mnuStepBack"; 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.Text = "Step Back";
this.mnuStepBack.Visible = false;
// //
// toolStripMenuItem1 // toolStripMenuItem1
// //
this.toolStripMenuItem1.Name = "toolStripMenuItem1"; this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(210, 6); this.toolStripMenuItem1.Size = new System.Drawing.Size(209, 6);
// //
// mnuReset // mnuReset
// //
this.mnuReset.Image = global::Mesen.GUI.Properties.Resources.Refresh; this.mnuReset.Image = global::Mesen.GUI.Properties.Resources.Refresh;
this.mnuReset.Name = "mnuReset"; 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"; this.mnuReset.Text = "Reset";
// //
// mnuPowerCycle // mnuPowerCycle
// //
this.mnuPowerCycle.Image = global::Mesen.GUI.Properties.Resources.PowerCycle; this.mnuPowerCycle.Image = global::Mesen.GUI.Properties.Resources.PowerCycle;
this.mnuPowerCycle.Name = "mnuPowerCycle"; 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"; this.mnuPowerCycle.Text = "Power Cycle";
// //
// toolStripMenuItem24 // toolStripMenuItem24
// //
this.toolStripMenuItem24.Name = "toolStripMenuItem24"; this.toolStripMenuItem24.Name = "toolStripMenuItem24";
this.toolStripMenuItem24.Size = new System.Drawing.Size(210, 6); this.toolStripMenuItem24.Size = new System.Drawing.Size(209, 6);
// //
// mnuToggleBreakpoint // mnuToggleBreakpoint
// //
this.mnuToggleBreakpoint.Image = global::Mesen.GUI.Properties.Resources.Breakpoint; this.mnuToggleBreakpoint.Image = global::Mesen.GUI.Properties.Resources.Breakpoint;
this.mnuToggleBreakpoint.Name = "mnuToggleBreakpoint"; 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"; this.mnuToggleBreakpoint.Text = "Toggle Breakpoint";
// //
// mnuDisableEnableBreakpoint // mnuEnableDisableBreakpoint
// //
this.mnuDisableEnableBreakpoint.Image = global::Mesen.GUI.Properties.Resources.BreakpointDisabled; this.mnuEnableDisableBreakpoint.Image = global::Mesen.GUI.Properties.Resources.BreakpointDisabled;
this.mnuDisableEnableBreakpoint.Name = "mnuDisableEnableBreakpoint"; this.mnuEnableDisableBreakpoint.Name = "mnuEnableDisableBreakpoint";
this.mnuDisableEnableBreakpoint.Size = new System.Drawing.Size(213, 22); this.mnuEnableDisableBreakpoint.Size = new System.Drawing.Size(212, 22);
this.mnuDisableEnableBreakpoint.Text = "Disable/Enable Breakpoint"; this.mnuEnableDisableBreakpoint.Text = "Disable/Enable Breakpoint";
// //
// toolStripMenuItem2 // toolStripMenuItem2
// //
this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(210, 6); this.toolStripMenuItem2.Size = new System.Drawing.Size(209, 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";
// //
// mnuRunPpuCycle // mnuRunPpuCycle
// //
this.mnuRunPpuCycle.Image = global::Mesen.GUI.Properties.Resources.RunPpuCycle; this.mnuRunPpuCycle.Image = global::Mesen.GUI.Properties.Resources.RunPpuCycle;
this.mnuRunPpuCycle.Name = "mnuRunPpuCycle"; 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"; this.mnuRunPpuCycle.Text = "Run one PPU cycle";
// //
// mnuRunScanline // mnuRunScanline
// //
this.mnuRunScanline.Image = global::Mesen.GUI.Properties.Resources.RunPpuScanline; this.mnuRunScanline.Image = global::Mesen.GUI.Properties.Resources.RunPpuScanline;
this.mnuRunScanline.Name = "mnuRunScanline"; 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"; this.mnuRunScanline.Text = "Run one scanline";
// //
// mnuRunOneFrame // mnuRunOneFrame
// //
this.mnuRunOneFrame.Image = global::Mesen.GUI.Properties.Resources.RunPpuFrame; this.mnuRunOneFrame.Image = global::Mesen.GUI.Properties.Resources.RunPpuFrame;
this.mnuRunOneFrame.Name = "mnuRunOneFrame"; 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"; this.mnuRunOneFrame.Text = "Run one frame";
// //
// toolStripMenuItem8 // toolStripMenuItem8
// //
this.toolStripMenuItem8.Name = "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 // mnuBreakIn
// //
this.mnuBreakIn.Name = "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.Text = "Break in...";
this.mnuBreakIn.Visible = false;
// //
// mnuBreakOn // mnuBreakOn
// //
this.mnuBreakOn.Name = "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.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 // ctrlSplitContainer
// //
@ -350,6 +489,7 @@
this.ctrlBreakpoints.Name = "ctrlBreakpoints"; this.ctrlBreakpoints.Name = "ctrlBreakpoints";
this.ctrlBreakpoints.Size = new System.Drawing.Size(265, 145); this.ctrlBreakpoints.Size = new System.Drawing.Size(265, 145);
this.ctrlBreakpoints.TabIndex = 0; this.ctrlBreakpoints.TabIndex = 0;
this.ctrlBreakpoints.BreakpointNavigation += new Mesen.GUI.Debugger.Controls.ctrlBreakpoints.BreakpointNavigationHandler(this.ctrlBreakpoints_BreakpointNavigation);
// //
// grpCallstack // grpCallstack
// //
@ -421,9 +561,8 @@
private System.Windows.Forms.ToolStripMenuItem mnuPowerCycle; private System.Windows.Forms.ToolStripMenuItem mnuPowerCycle;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem24; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem24;
private System.Windows.Forms.ToolStripMenuItem mnuToggleBreakpoint; 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.ToolStripSeparator toolStripMenuItem2;
private System.Windows.Forms.ToolStripMenuItem mnuRunCpuCycle;
private System.Windows.Forms.ToolStripMenuItem mnuRunPpuCycle; private System.Windows.Forms.ToolStripMenuItem mnuRunPpuCycle;
private System.Windows.Forms.ToolStripMenuItem mnuRunScanline; private System.Windows.Forms.ToolStripMenuItem mnuRunScanline;
private System.Windows.Forms.ToolStripMenuItem mnuRunOneFrame; private System.Windows.Forms.ToolStripMenuItem mnuRunOneFrame;
@ -437,9 +576,26 @@
private System.Windows.Forms.GroupBox grpBreakpoints; private System.Windows.Forms.GroupBox grpBreakpoints;
private Controls.ctrlBreakpoints ctrlBreakpoints; private Controls.ctrlBreakpoints ctrlBreakpoints;
private Controls.ctrlConsoleStatus ctrlStatus; private Controls.ctrlConsoleStatus ctrlStatus;
private System.Windows.Forms.ToolStripMenuItem mnuRun1000Instructions;
private GUI.Controls.ctrlMesenToolStrip tsToolbar; private GUI.Controls.ctrlMesenToolStrip tsToolbar;
private System.Windows.Forms.GroupBox grpCallstack; private System.Windows.Forms.GroupBox grpCallstack;
private Controls.ctrlCallstack ctrlCallstack; 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;
} }
} }

View file

@ -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() private void InitShortcuts()
{ {
mnuReset.InitShortcut(this, nameof(DebuggerShortcutsConfig.Reset)); mnuReset.InitShortcut(this, nameof(DebuggerShortcutsConfig.Reset));
@ -62,41 +76,113 @@ namespace Mesen.GUI.Debugger
mnuStepInto.InitShortcut(this, nameof(DebuggerShortcutsConfig.StepInto)); mnuStepInto.InitShortcut(this, nameof(DebuggerShortcutsConfig.StepInto));
mnuStepOver.InitShortcut(this, nameof(DebuggerShortcutsConfig.StepOver)); mnuStepOver.InitShortcut(this, nameof(DebuggerShortcutsConfig.StepOver));
mnuRunCpuCycle.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunCpuCycle));
mnuRunPpuCycle.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuCycle)); mnuRunPpuCycle.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuCycle));
mnuRunScanline.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuScanline)); mnuRunScanline.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuScanline));
mnuRunOneFrame.InitShortcut(this, nameof(DebuggerShortcutsConfig.RunPpuFrame)); 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); }; mnuStepInto.Click += (s, e) => { DebugApi.Step(1); };
mnuStepOver.Click += (s, e) => { DebugApi.Step(1, StepType.CpuStepOver); }; mnuStepOver.Click += (s, e) => { DebugApi.Step(1, StepType.CpuStepOver); };
mnuStepOut.Click += (s, e) => { DebugApi.Step(1, StepType.CpuStepOut); }; 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); }; mnuRunPpuCycle.Click += (s, e) => { DebugApi.Step(1, StepType.PpuStep); };
mnuRunScanline.Click += (s, e) => { DebugApi.Step(341, StepType.PpuStep); }; mnuRunScanline.Click += (s, e) => { DebugApi.Step(341, StepType.PpuStep); };
mnuRunOneFrame.Click += (s, e) => { DebugApi.Step(341*262, StepType.PpuStep); }; //TODO ntsc/pal mnuRunOneFrame.Click += (s, e) => { DebugApi.Step(341*262, StepType.PpuStep); }; //TODO ntsc/pal
mnuContinue.Click += (s, e) => { DebugApi.ResumeExecution(); }; 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() private void InitToolbar()
{ {
tsToolbar.AddItemsToToolbar( tsToolbar.AddItemsToToolbar(
mnuContinue, mnuBreak, null, mnuContinue, mnuBreak, null,
mnuStepInto, mnuStepOver, mnuStepOut, mnuStepBack, null, mnuStepInto, mnuStepOver, mnuStepOut, null,
mnuRunCpuCycle, null,
mnuRunPpuCycle, mnuRunScanline, mnuRunOneFrame, null, mnuRunPpuCycle, mnuRunScanline, mnuRunOneFrame, null,
mnuToggleBreakpoint, mnuDisableEnableBreakpoint, null, mnuToggleBreakpoint, mnuEnableDisableBreakpoint, null,
mnuBreakIn, null, mnuBreakOn 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) private void OnNotificationReceived(NotificationEventArgs e)
{ {
switch(e.NotificationType) { switch(e.NotificationType) {
case ConsoleNotificationType.PpuFrameDone:
this.BeginInvoke((MethodInvoker)(() => {
UpdateContinueAction();
}));
break;
case ConsoleNotificationType.CodeBreak: case ConsoleNotificationType.CodeBreak:
DebugState state = DebugApi.GetState(); DebugState state = DebugApi.GetState();
int activeAddress = (int)((state.Cpu.K << 16) | state.Cpu.PC); int activeAddress = (int)((state.Cpu.K << 16) | state.Cpu.PC);
this.BeginInvoke((MethodInvoker)(() => { this.BeginInvoke((MethodInvoker)(() => {
UpdateContinueAction();
ctrlStatus.UpdateStatus(state); ctrlStatus.UpdateStatus(state);
ctrlDisassemblyView.SetActiveAddress(activeAddress); ctrlDisassemblyView.SetActiveAddress(activeAddress);
ctrlWatch.UpdateWatch(true); ctrlWatch.UpdateWatch(true);
@ -110,5 +196,35 @@ namespace Mesen.GUI.Debugger
{ {
ctrlDisassemblyView.ScrollToAddress(address); 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,
} }
} }

View file

@ -11,6 +11,7 @@ using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml.Serialization; using System.Xml.Serialization;
using Mesen.GUI.Config; using Mesen.GUI.Config;
using Mesen.GUI.Debugger.Workspace;
using Mesen.GUI.Forms; using Mesen.GUI.Forms;
using Mesen.GUI.Utilities; using Mesen.GUI.Utilities;
@ -46,7 +47,7 @@ namespace Mesen.GUI
Task.Run(() => { Task.Run(() => {
//Cache deserializers in another thread //Cache deserializers in another thread
new XmlSerializer(typeof(Configuration)); new XmlSerializer(typeof(Configuration));
//new XmlSerializer(typeof(DebugWorkspace)); new XmlSerializer(typeof(DebugWorkspace));
}); });
if(Type.GetType("Mono.Runtime") != null) { if(Type.GetType("Mono.Runtime") != null) {