2015-07-01 23:17:14 -04:00
using System ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Drawing.Text ;
using System.IO ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows.Forms ;
2016-06-04 14:43:13 -04:00
using Mesen.GUI.Config ;
2016-12-09 00:12:38 -05:00
using Mesen.GUI.Debugger.Controls ;
2016-01-10 19:56:40 -05:00
using Mesen.GUI.Forms ;
2016-12-18 12:43:20 -05:00
using Mesen.GUI.Controls ;
2015-07-01 23:17:14 -04:00
namespace Mesen.GUI.Debugger
{
2016-01-10 19:56:40 -05:00
public partial class frmDebugger : BaseForm
2015-07-01 23:17:14 -04:00
{
2016-11-27 19:43:17 -05:00
private bool _debuggerInitialized = false ;
2016-12-04 09:37:01 -05:00
private bool _firstBreak = true ;
2017-08-05 18:00:59 -04:00
private int _previousCycle = 0 ;
2016-11-27 19:43:17 -05:00
2015-08-05 20:40:10 -04:00
private InteropEmu . NotificationListener _notifListener ;
private ctrlDebuggerCode _lastCodeWindow ;
2017-09-16 22:02:05 -04:00
private Size _minimumSize ;
2016-11-23 23:46:01 -05:00
2015-07-01 23:17:14 -04:00
public frmDebugger ( )
{
InitializeComponent ( ) ;
}
protected override void OnLoad ( EventArgs e )
{
base . OnLoad ( e ) ;
2017-09-16 22:02:05 -04:00
_minimumSize = this . MinimumSize ;
2017-03-24 15:11:38 -04:00
if ( Program . IsMono ) {
//This doesn't work in Mono (menu is blank) - hide it for now
mnuCode . Visible = false ;
}
2015-07-01 23:17:14 -04:00
2017-08-14 23:44:01 -04:00
bool debuggerAlreadyRunning = InteropEmu . DebugIsDebuggerRunning ( ) ;
2016-11-26 17:48:11 -05:00
ctrlConsoleStatus . OnStateChanged + = ctrlConsoleStatus_OnStateChanged ;
2016-11-23 23:46:01 -05:00
LabelManager . OnLabelUpdated + = LabelManager_OnLabelUpdated ;
BreakpointManager . BreakpointsChanged + = BreakpointManager_BreakpointsChanged ;
2016-12-09 00:12:38 -05:00
ctrlProfiler . OnFunctionSelected + = ctrlProfiler_OnFunctionSelected ;
2016-11-23 23:46:01 -05:00
this . UpdateWorkspace ( ) ;
2017-08-19 22:00:12 -04:00
this . AutoLoadCdlFiles ( ) ;
this . AutoLoadDbgFiles ( true ) ;
2016-11-23 23:46:01 -05:00
2016-06-25 22:06:22 -04:00
this . mnuSplitView . Checked = ConfigManager . Config . DebugInfo . SplitView ;
this . mnuPpuPartialDraw . Checked = ConfigManager . Config . DebugInfo . PpuPartialDraw ;
2016-11-19 19:21:28 -05:00
this . mnuShowEffectiveAddresses . Checked = ConfigManager . Config . DebugInfo . ShowEffectiveAddresses ;
2016-09-04 18:08:16 -04:00
this . mnuShowCpuMemoryMapping . Checked = ConfigManager . Config . DebugInfo . ShowCpuMemoryMapping ;
this . mnuShowPpuMemoryMapping . Checked = ConfigManager . Config . DebugInfo . ShowPpuMemoryMapping ;
2016-11-21 22:34:47 -05:00
this . mnuShowOnlyDisassembledCode . Checked = ConfigManager . Config . DebugInfo . ShowOnlyDisassembledCode ;
2016-11-27 19:43:17 -05:00
this . mnuHighlightUnexecutedCode . Checked = ConfigManager . Config . DebugInfo . HighlightUnexecutedCode ;
2016-12-01 21:43:32 -05:00
this . mnuAutoLoadDbgFiles . Checked = ConfigManager . Config . DebugInfo . AutoLoadDbgFiles ;
2017-08-19 22:00:12 -04:00
this . mnuAutoLoadCdlFiles . Checked = ConfigManager . Config . DebugInfo . AutoLoadCdlFiles ;
2016-12-08 19:34:43 -05:00
this . mnuBreakOnReset . Checked = ConfigManager . Config . DebugInfo . BreakOnReset ;
2016-12-04 09:37:01 -05:00
this . mnuBreakOnOpen . Checked = ConfigManager . Config . DebugInfo . BreakOnOpen ;
2017-03-04 16:18:28 -05:00
this . mnuBreakOnUnofficialOpcodes . Checked = ConfigManager . Config . DebugInfo . BreakOnUnofficialOpcodes ;
this . mnuBreakOnBrk . Checked = ConfigManager . Config . DebugInfo . BreakOnBrk ;
2017-11-10 18:01:28 -05:00
this . mnuBreakOnDebuggerFocus . Checked = ConfigManager . Config . DebugInfo . BreakOnDebuggerFocus ;
2016-12-04 11:16:44 -05:00
this . mnuDisplayOpCodesInLowerCase . Checked = ConfigManager . Config . DebugInfo . DisplayOpCodesInLowerCase ;
2016-12-05 23:35:07 -05:00
this . mnuDisassembleVerifiedCodeOnly . Checked = ConfigManager . Config . DebugInfo . DisassemblyType = = DisassemblyType . VerifiedCode ;
this . mnuDisassembleEverything . Checked = ConfigManager . Config . DebugInfo . DisassemblyType = = DisassemblyType . Everything ;
this . mnuDisassembleEverythingButData . Checked = ConfigManager . Config . DebugInfo . DisassemblyType = = DisassemblyType . EverythingButData ;
2017-06-29 13:47:49 -04:00
this . mnuRefreshWatchWhileRunning . Checked = ConfigManager . Config . DebugInfo . RefreshWatchWhileRunning ;
2016-11-21 22:34:47 -05:00
2016-12-06 22:50:27 -05:00
if ( ConfigManager . Config . DebugInfo . WindowWidth > - 1 ) {
this . Width = ConfigManager . Config . DebugInfo . WindowWidth ;
this . Height = ConfigManager . Config . DebugInfo . WindowHeight ;
}
2016-12-04 09:43:43 -05:00
ctrlCpuMemoryMapping . Visible = mnuShowCpuMemoryMapping . Checked ;
ctrlPpuMemoryMapping . Visible = mnuShowPpuMemoryMapping . Checked ;
2016-12-06 22:50:27 -05:00
if ( ConfigManager . Config . DebugInfo . LeftPanelWidth > 0 ) {
this . ctrlSplitContainerTop . SplitterDistance = ConfigManager . Config . DebugInfo . LeftPanelWidth ;
}
if ( ConfigManager . Config . DebugInfo . TopPanelHeight > 0 ) {
this . splitContainer . SplitterDistance = ConfigManager . Config . DebugInfo . TopPanelHeight ;
}
if ( ! ConfigManager . Config . DebugInfo . ShowRightPanel ) {
ctrlSplitContainerTop . CollapsePanel ( ) ;
2016-12-06 23:22:33 -05:00
} else {
mnuShowFunctionLabelLists . Checked = true ;
2016-12-06 22:50:27 -05:00
}
if ( ! ConfigManager . Config . DebugInfo . ShowBottomPanel ) {
splitContainer . CollapsePanel ( ) ;
2016-12-06 23:22:33 -05:00
} else {
mnuShowBottomPanel . Checked = true ;
2016-11-26 20:58:27 -05:00
}
2016-06-25 22:06:22 -04:00
_lastCodeWindow = ctrlDebuggerCode ;
this . ctrlDebuggerCode . SetConfig ( ConfigManager . Config . DebugInfo . LeftView ) ;
this . ctrlDebuggerCodeSplit . SetConfig ( ConfigManager . Config . DebugInfo . RightView ) ;
2017-08-05 12:13:53 -04:00
this . toolTip . SetToolTip ( this . picWatchHelp , frmBreakpoint . GetConditionTooltip ( true ) ) ;
2016-06-25 22:06:22 -04:00
2015-07-01 23:17:14 -04:00
_notifListener = new InteropEmu . NotificationListener ( ) ;
_notifListener . OnNotification + = _notifListener_OnNotification ;
InteropEmu . DebugInitialize ( ) ;
2016-11-27 19:43:17 -05:00
_debuggerInitialized = true ;
2016-12-04 09:37:01 -05:00
2017-08-05 18:00:59 -04:00
DebugState state = new DebugState ( ) ;
InteropEmu . DebugGetState ( ref state ) ;
_previousCycle = state . CPU . CycleCount ;
2016-12-04 09:37:01 -05:00
//Pause a few frames later to give the debugger a chance to disassemble some code
_firstBreak = true ;
2017-08-14 23:44:01 -04:00
if ( ! debuggerAlreadyRunning ) {
InteropEmu . SetFlag ( EmulationFlags . ForceMaxSpeed , true ) ;
InteropEmu . DebugStep ( 5000 ) ;
} else {
//Break once to show code and then resume execution
InteropEmu . DebugStep ( 1 ) ;
}
2017-10-03 17:24:29 -04:00
InteropEmu . SetFlag ( EmulationFlags . Paused , false ) ;
2015-08-17 19:32:10 -04:00
2017-08-14 23:44:01 -04:00
UpdateDebuggerFlags ( ) ;
2015-08-17 19:32:10 -04:00
UpdateCdlRatios ( ) ;
tmrCdlRatios . Start ( ) ;
}
2017-06-29 13:55:12 -04:00
protected override void OnActivated ( EventArgs e )
{
base . OnActivated ( e ) ;
2017-11-10 18:01:28 -05:00
if ( ConfigManager . Config . DebugInfo . BreakOnDebuggerFocus & & ! InteropEmu . DebugIsExecutionStopped ( ) ) {
2017-06-29 13:55:12 -04:00
InteropEmu . DebugStep ( 1 ) ;
}
}
2016-12-09 00:12:38 -05:00
private void ctrlProfiler_OnFunctionSelected ( object sender , EventArgs e )
{
int relativeAddress = InteropEmu . DebugGetRelativeAddress ( ( UInt32 ) sender , AddressType . PrgRom ) ;
if ( relativeAddress > = 0 ) {
BringToFront ( ) ;
_lastCodeWindow . ScrollToLineNumber ( relativeAddress ) ;
}
}
2017-08-21 23:11:14 -04:00
private void mnuFile_DropDownOpening ( object sender , EventArgs e )
{
UpdateFileOptions ( ) ;
}
private void UpdateFileOptions ( )
{
bool hasChanges = InteropEmu . DebugHasPrgChrChanges ( ) ;
RomInfo romInfo = InteropEmu . GetRomInfo ( ) ;
mnuSaveRom . Enabled = romInfo . Format = = RomFormat . iNes & & hasChanges & & ! romInfo . RomFile . Compressed ;
mnuSaveAsIps . Enabled = romInfo . Format = = RomFormat . iNes & & hasChanges ;
mnuRevertChanges . Enabled = hasChanges ;
mnuSaveRomAs . Enabled = romInfo . Format = = RomFormat . iNes ;
mnuEditHeader . Enabled = romInfo . Format = = RomFormat . iNes ;
}
2017-08-19 22:00:12 -04:00
private void AutoLoadCdlFiles ( )
{
if ( ConfigManager . Config . DebugInfo . AutoLoadCdlFiles ) {
//This loads CDL files that are next to the rom - useful when developing with a compiler that can produce a CDL file
RomInfo info = InteropEmu . GetRomInfo ( ) ;
string cdlPath = Path . Combine ( info . RomFile . Folder , info . GetRomName ( ) + ".cdl" ) ;
if ( File . Exists ( cdlPath ) ) {
if ( InteropEmu . DebugLoadCdlFile ( cdlPath ) ) {
2017-08-21 23:11:14 -04:00
UpdateDebugger ( false ) ;
2017-08-19 22:00:12 -04:00
}
}
}
}
private void AutoLoadDbgFiles ( bool silent )
2016-12-01 21:43:32 -05:00
{
if ( ConfigManager . Config . DebugInfo . AutoLoadDbgFiles ) {
2017-08-19 21:09:44 -04:00
RomInfo info = InteropEmu . GetRomInfo ( ) ;
string dbgPath = Path . Combine ( info . RomFile . Folder , info . GetRomName ( ) + ".dbg" ) ;
2016-12-01 21:43:32 -05:00
if ( File . Exists ( dbgPath ) ) {
Ld65DbgImporter dbgImporter = new Ld65DbgImporter ( ) ;
dbgImporter . Import ( dbgPath , silent ) ;
2017-08-19 21:09:44 -04:00
} else {
string mlbPath = Path . Combine ( info . RomFile . Folder , info . GetRomName ( ) + ".mlb" ) ;
if ( File . Exists ( mlbPath ) ) {
MesenLabelFile . Import ( mlbPath , silent ) ;
}
2016-12-01 21:43:32 -05:00
}
}
}
2016-11-24 00:18:07 -05:00
private void UpdateWorkspace ( )
{
2017-08-14 23:44:01 -04:00
DebugWorkspaceManager . SaveWorkspace ( ) ;
DebugWorkspace workspace = DebugWorkspaceManager . GetWorkspace ( ) ;
2016-11-23 23:46:01 -05:00
2016-11-26 14:15:50 -05:00
ctrlLabelList . UpdateLabelList ( ) ;
ctrlFunctionList . UpdateFunctionList ( true ) ;
2016-11-23 23:46:01 -05:00
ctrlBreakpoints . RefreshList ( ) ;
}
2015-08-17 19:32:10 -04:00
private void UpdateCdlRatios ( )
{
CdlRatios ratios = new CdlRatios ( ) ;
InteropEmu . DebugGetCdlRatios ( ref ratios ) ;
lblPrgAnalysisResult . Text = string . Format ( "{0:0.00}% (Code: {1:0.00}%, Data: {2:0.00}%, Unknown: {3:0.00}%)" , ratios . PrgRatio * 100 , ratios . CodeRatio * 100 , ratios . DataRatio * 100 , ( 1 - ratios . PrgRatio ) * 100 ) ;
if ( ratios . ChrRatio > = 0 ) {
lblChrAnalysisResult . Text = string . Format ( "{0:0.00}% (Drawn: {1:0.00}%, Read: {2:0.00}%, Unknown: {3:0.00}%)" , ratios . ChrRatio * 100 , ratios . ChrDrawnRatio * 100 , ratios . ChrReadRatio * 100 , ( 1 - ratios . ChrRatio ) * 100 ) ;
} else {
lblChrAnalysisResult . Text = "N/A (CHR RAM)" ;
}
2015-07-01 23:17:14 -04:00
}
2016-11-19 19:21:28 -05:00
private void UpdateDebuggerFlags ( )
{
DebuggerFlags flags = mnuPpuPartialDraw . Checked ? DebuggerFlags . PpuPartialDraw : DebuggerFlags . None ;
if ( mnuShowEffectiveAddresses . Checked ) {
flags | = DebuggerFlags . ShowEffectiveAddresses ;
}
2016-11-21 22:34:47 -05:00
if ( mnuShowOnlyDisassembledCode . Checked ) {
flags | = DebuggerFlags . ShowOnlyDisassembledCode ;
}
2016-12-04 11:16:44 -05:00
if ( mnuDisplayOpCodesInLowerCase . Checked ) {
flags | = DebuggerFlags . DisplayOpCodesInLowerCase ;
}
2016-12-05 23:35:07 -05:00
if ( mnuDisassembleEverything . Checked ) {
flags | = DebuggerFlags . DisassembleEverything ;
} else if ( mnuDisassembleEverythingButData . Checked ) {
flags | = DebuggerFlags . DisassembleEverythingButData ;
}
2017-03-04 16:18:28 -05:00
if ( mnuBreakOnUnofficialOpcodes . Checked ) {
flags | = DebuggerFlags . BreakOnUnofficialOpCode ;
}
if ( mnuBreakOnBrk . Checked ) {
flags | = DebuggerFlags . BreakOnBrk ;
}
2017-10-07 21:00:02 -04:00
InteropEmu . DebugSetFlags ( flags ) ;
InteropEmu . SetFlag ( EmulationFlags . DebuggerWindowEnabled , true ) ;
2016-11-19 19:21:28 -05:00
}
2015-08-08 22:36:39 -04:00
private void _notifListener_OnNotification ( InteropEmu . NotificationEventArgs e )
2015-07-01 23:17:14 -04:00
{
2016-06-04 08:55:52 -04:00
switch ( e . NotificationType ) {
2017-06-29 13:47:49 -04:00
case InteropEmu . ConsoleNotificationType . PpuFrameDone :
if ( ConfigManager . Config . DebugInfo . RefreshWatchWhileRunning ) {
this . BeginInvoke ( ( MethodInvoker ) ( ( ) = > ctrlWatch . UpdateWatch ( ) ) ) ;
}
break ;
2016-06-04 08:55:52 -04:00
case InteropEmu . ConsoleNotificationType . CodeBreak :
this . BeginInvoke ( ( MethodInvoker ) ( ( ) = > UpdateDebugger ( ) ) ) ;
BreakpointManager . SetBreakpoints ( ) ;
break ;
case InteropEmu . ConsoleNotificationType . GameReset :
case InteropEmu . ConsoleNotificationType . GameLoaded :
2016-11-23 23:46:01 -05:00
this . BeginInvoke ( ( MethodInvoker ) ( ( ) = > {
this . UpdateWorkspace ( ) ;
2017-08-19 22:00:12 -04:00
this . AutoLoadCdlFiles ( ) ;
this . AutoLoadDbgFiles ( true ) ;
2016-11-23 23:46:01 -05:00
UpdateDebugger ( ) ;
BreakpointManager . SetBreakpoints ( ) ;
2016-12-04 09:53:25 -05:00
if ( ! ConfigManager . Config . DebugInfo . BreakOnReset ) {
ClearActiveStatement ( ) ;
}
} ) ) ;
if ( ConfigManager . Config . DebugInfo . BreakOnReset ) {
InteropEmu . DebugStep ( 1 ) ;
}
2016-06-04 08:55:52 -04:00
break ;
2015-07-01 23:17:14 -04:00
}
}
private bool UpdateSplitView ( )
{
if ( mnuSplitView . Checked ) {
tlpTop . ColumnStyles [ 1 ] . SizeType = SizeType . Percent ;
2015-08-04 19:50:57 -04:00
tlpTop . ColumnStyles [ 0 ] . Width = 50f ;
2015-07-01 23:17:14 -04:00
tlpTop . ColumnStyles [ 1 ] . Width = 50f ;
2017-09-16 22:02:05 -04:00
this . MinimumSize = new Size ( _minimumSize . Width + 250 , _minimumSize . Height ) ;
2015-07-01 23:17:14 -04:00
} else {
tlpTop . ColumnStyles [ 1 ] . SizeType = SizeType . Absolute ;
tlpTop . ColumnStyles [ 1 ] . Width = 0f ;
2017-09-16 22:02:05 -04:00
this . MinimumSize = _minimumSize ;
2015-07-01 23:17:14 -04:00
}
2015-08-03 21:53:46 -04:00
ctrlDebuggerCodeSplit . Visible = mnuSplitView . Checked ;
2015-07-01 23:17:14 -04:00
return mnuSplitView . Checked ;
}
2016-11-21 22:43:59 -05:00
private void UpdateVectorAddresses ( )
{
2017-03-04 21:50:19 -05:00
int nmiHandler = InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFA ) | ( InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFB ) < < 8 ) ;
int resetHandler = InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFC ) | ( InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFD ) < < 8 ) ;
int irqHandler = InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFE ) | ( InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFF ) < < 8 ) ;
2016-11-21 22:43:59 -05:00
mnuGoToNmiHandler . Text = "NMI Handler ($" + nmiHandler . ToString ( "X4" ) + ")" ;
mnuGoToResetHandler . Text = "Reset Handler ($" + resetHandler . ToString ( "X4" ) + ")" ;
mnuGoToIrqHandler . Text = "IRQ Handler ($" + irqHandler . ToString ( "X4" ) + ")" ;
}
2017-08-14 23:44:01 -04:00
public void UpdateDebugger ( bool updateActiveAddress = true )
2015-07-01 23:17:14 -04:00
{
2016-11-27 19:43:17 -05:00
if ( ! _debuggerInitialized ) {
return ;
}
2017-08-03 21:30:44 -04:00
ctrlBreakpoints . RefreshListAddresses ( ) ;
2016-11-26 14:15:50 -05:00
ctrlLabelList . UpdateLabelListAddresses ( ) ;
ctrlFunctionList . UpdateFunctionList ( false ) ;
2016-11-19 19:21:28 -05:00
UpdateDebuggerFlags ( ) ;
2016-11-21 22:43:59 -05:00
UpdateVectorAddresses ( ) ;
2016-11-19 19:21:28 -05:00
2017-12-26 16:11:28 -05:00
string newCode = InteropEmu . DebugGetCode ( _firstBreak ) ;
2017-03-10 18:35:01 -05:00
if ( newCode ! = null ) {
ctrlDebuggerCode . Code = newCode ;
}
2015-07-01 23:17:14 -04:00
DebugState state = new DebugState ( ) ;
InteropEmu . DebugGetState ( ref state ) ;
2017-08-05 18:00:59 -04:00
lblCyclesElapsedCount . Text = ( state . CPU . CycleCount - _previousCycle ) . ToString ( ) ;
_previousCycle = state . CPU . CycleCount ;
2015-07-01 23:17:14 -04:00
if ( UpdateSplitView ( ) ) {
2017-03-10 18:35:01 -05:00
if ( newCode ! = null | | ctrlDebuggerCodeSplit . Code = = null ) {
ctrlDebuggerCodeSplit . Code = ctrlDebuggerCode . Code ;
}
2015-07-01 23:17:14 -04:00
ctrlDebuggerCodeSplit . UpdateCode ( true ) ;
2015-08-02 19:27:02 -04:00
} else {
_lastCodeWindow = ctrlDebuggerCode ;
2015-07-01 23:17:14 -04:00
}
2016-11-26 14:15:50 -05:00
ctrlDebuggerCode . SetActiveAddress ( state . CPU . DebugPC ) ;
ctrlDebuggerCodeSplit . SetActiveAddress ( state . CPU . DebugPC ) ;
2016-11-21 22:34:47 -05:00
if ( updateActiveAddress ) {
2016-11-26 14:15:50 -05:00
_lastCodeWindow . SelectActiveAddress ( state . CPU . DebugPC ) ;
2016-11-21 22:34:47 -05:00
}
2016-11-26 14:15:50 -05:00
2016-11-27 19:43:17 -05:00
UpdateLineColors ( ) ;
2015-08-02 19:27:02 -04:00
2015-07-01 23:17:14 -04:00
ctrlConsoleStatus . UpdateStatus ( ref state ) ;
ctrlWatch . UpdateWatch ( ) ;
2015-08-09 14:47:27 -04:00
ctrlCallstack . UpdateCallstack ( ) ;
2015-08-21 22:42:44 -04:00
2016-09-04 18:08:16 -04:00
ctrlCpuMemoryMapping . UpdateCpuRegions ( state . Cartridge ) ;
ctrlPpuMemoryMapping . UpdatePpuRegions ( state . Cartridge ) ;
2015-08-21 22:42:44 -04:00
this . BringToFront ( ) ;
2015-07-01 23:17:14 -04:00
2017-08-06 17:52:49 -04:00
if ( _firstBreak ) {
InteropEmu . SetFlag ( EmulationFlags . ForceMaxSpeed , false ) ;
if ( ! ConfigManager . Config . DebugInfo . BreakOnOpen ) {
ResumeExecution ( ) ;
}
_firstBreak = false ;
2016-12-04 09:37:01 -05:00
}
}
2015-08-02 19:27:02 -04:00
private void ClearActiveStatement ( )
{
ctrlDebuggerCode . ClearActiveAddress ( ) ;
2015-08-09 20:47:50 -04:00
ctrlDebuggerCodeSplit . ClearActiveAddress ( ) ;
2016-11-27 19:43:17 -05:00
UpdateLineColors ( ) ;
2015-08-02 19:27:02 -04:00
}
2016-01-09 13:15:43 -05:00
private void ToggleBreakpoint ( bool toggleEnabled )
2015-07-01 23:17:14 -04:00
{
2016-01-10 00:33:33 -05:00
BreakpointManager . ToggleBreakpoint ( _lastCodeWindow . GetCurrentLine ( ) , toggleEnabled ) ;
2015-08-02 19:27:02 -04:00
}
2016-11-27 19:43:17 -05:00
private void UpdateLineColors ( )
2015-08-02 19:27:02 -04:00
{
2016-11-27 19:43:17 -05:00
ctrlDebuggerCodeSplit . UpdateLineColors ( ) ;
ctrlDebuggerCode . UpdateLineColors ( ) ;
2015-07-01 23:17:14 -04:00
}
2016-12-04 09:37:01 -05:00
private void ResumeExecution ( )
2015-07-01 23:17:14 -04:00
{
2017-08-05 14:55:07 -04:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2015-08-02 19:27:02 -04:00
ClearActiveStatement ( ) ;
2017-03-04 16:18:28 -05:00
UpdateDebuggerFlags ( ) ;
2015-07-01 23:17:14 -04:00
InteropEmu . DebugRun ( ) ;
}
2016-12-04 09:37:01 -05:00
private void mnuContinue_Click ( object sender , EventArgs e )
{
ResumeExecution ( ) ;
}
2015-07-01 23:17:14 -04:00
private void mnuToggleBreakpoint_Click ( object sender , EventArgs e )
{
2016-01-09 13:15:43 -05:00
ToggleBreakpoint ( false ) ;
}
private void mnuDisableEnableBreakpoint_Click ( object sender , EventArgs e )
{
ToggleBreakpoint ( true ) ;
2015-07-01 23:17:14 -04:00
}
private void mnuBreak_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2015-07-01 23:17:14 -04:00
InteropEmu . DebugStep ( 1 ) ;
}
private void mnuStepInto_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2015-07-01 23:17:14 -04:00
InteropEmu . DebugStep ( 1 ) ;
}
private void mnuStepOut_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2015-07-01 23:17:14 -04:00
InteropEmu . DebugStepOut ( ) ;
}
private void mnuStepOver_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2015-07-01 23:17:14 -04:00
InteropEmu . DebugStepOver ( ) ;
}
2017-08-01 22:49:50 -04:00
private void mnuStepBack_Click ( object sender , EventArgs e )
{
ctrlConsoleStatus . ApplyChanges ( ) ;
InteropEmu . DebugStepBack ( ) ;
}
2016-06-05 10:29:54 -04:00
private void mnuRunPpuCycle_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2016-06-05 10:29:54 -04:00
InteropEmu . DebugPpuStep ( 1 ) ;
}
private void mnuRunScanline_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2016-06-05 10:29:54 -04:00
InteropEmu . DebugPpuStep ( 341 ) ;
}
2015-07-01 23:17:14 -04:00
private void mnuRunOneFrame_Click ( object sender , EventArgs e )
{
2016-12-06 19:03:29 -05:00
ctrlConsoleStatus . ApplyChanges ( ) ;
2016-06-05 10:29:54 -04:00
InteropEmu . DebugPpuStep ( 89341 ) ;
2015-07-01 23:17:14 -04:00
}
2015-08-17 21:59:22 -04:00
private void ctrlDebuggerCode_OnSetNextStatement ( AddressEventArgs args )
{
UInt16 addr = ( UInt16 ) args . Address ;
InteropEmu . DebugSetNextStatement ( addr ) ;
this . UpdateDebugger ( ) ;
}
2015-07-01 23:17:14 -04:00
private void mnuFind_Click ( object sender , EventArgs e )
{
2015-08-03 21:53:46 -04:00
_lastCodeWindow . OpenSearchBox ( ) ;
}
private void mnuFindNext_Click ( object sender , EventArgs e )
{
_lastCodeWindow . FindNext ( ) ;
}
2015-07-01 23:17:14 -04:00
2015-08-03 21:53:46 -04:00
private void mnuFindPrev_Click ( object sender , EventArgs e )
{
_lastCodeWindow . FindPrevious ( ) ;
2015-07-01 23:17:14 -04:00
}
private void mnuSplitView_Click ( object sender , EventArgs e )
{
2016-06-04 14:43:13 -04:00
ConfigManager . Config . DebugInfo . SplitView = this . mnuSplitView . Checked ;
ConfigManager . ApplyChanges ( ) ;
2016-11-21 22:34:47 -05:00
UpdateDebugger ( false ) ;
2015-07-01 23:17:14 -04:00
}
2015-08-02 19:27:02 -04:00
private void mnuMemoryViewer_Click ( object sender , EventArgs e )
{
2017-08-14 23:44:01 -04:00
DebugWindowManager . OpenDebugWindow ( DebugWindow . MemoryViewer ) ;
2015-08-02 19:27:02 -04:00
}
2016-01-10 00:33:33 -05:00
private void BreakpointManager_BreakpointsChanged ( object sender , EventArgs e )
2015-08-02 19:27:02 -04:00
{
2016-11-27 19:43:17 -05:00
UpdateLineColors ( ) ;
2015-08-02 19:27:02 -04:00
}
private void ctrlDebuggerCode_Enter ( object sender , EventArgs e )
{
_lastCodeWindow = ctrlDebuggerCode ;
}
private void ctrlDebuggerCodeSplit_Enter ( object sender , EventArgs e )
{
_lastCodeWindow = ctrlDebuggerCodeSplit ;
}
2015-08-02 22:19:12 -04:00
2016-01-10 09:21:07 -05:00
private void mnuGoToAddress_Click ( object sender , EventArgs e )
2015-08-02 22:19:12 -04:00
{
_lastCodeWindow . GoToAddress ( ) ;
}
2015-08-04 19:50:57 -04:00
2016-01-10 09:21:07 -05:00
private void mnuGoToIrqHandler_Click ( object sender , EventArgs e )
{
2017-03-04 21:50:19 -05:00
int address = ( InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFF ) < < 8 ) | InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFE ) ;
2016-01-10 09:21:07 -05:00
_lastCodeWindow . ScrollToLineNumber ( address ) ;
}
private void mnuGoToNmiHandler_Click ( object sender , EventArgs e )
{
2017-03-04 21:50:19 -05:00
int address = ( InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFB ) < < 8 ) | InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFA ) ;
2016-01-10 09:21:07 -05:00
_lastCodeWindow . ScrollToLineNumber ( address ) ;
}
private void mnuGoToResetHandler_Click ( object sender , EventArgs e )
{
2017-03-04 21:50:19 -05:00
int address = ( InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFD ) < < 8 ) | InteropEmu . DebugGetMemoryValue ( DebugMemoryType . CpuMemory , 0xFFFC ) ;
2016-01-10 09:21:07 -05:00
_lastCodeWindow . ScrollToLineNumber ( address ) ;
}
2015-08-04 19:50:57 -04:00
private void mnuIncreaseFontSize_Click ( object sender , EventArgs e )
{
_lastCodeWindow . FontSize + + ;
}
private void mnuDecreaseFontSize_Click ( object sender , EventArgs e )
{
_lastCodeWindow . FontSize - - ;
}
private void mnuResetFontSize_Click ( object sender , EventArgs e )
{
2016-12-18 12:43:20 -05:00
_lastCodeWindow . FontSize = BaseControl . DefaultFontSize ;
2015-08-04 19:50:57 -04:00
}
2015-08-05 20:40:10 -04:00
private void mnuClose_Click ( object sender , EventArgs e )
{
this . Close ( ) ;
}
2017-08-06 16:39:14 -04:00
protected override void OnFormClosing ( FormClosingEventArgs e )
2015-08-05 20:40:10 -04:00
{
2017-08-14 23:44:01 -04:00
tmrCdlRatios . Stop ( ) ;
2017-05-06 18:35:25 -04:00
2017-08-14 23:44:01 -04:00
LabelManager . OnLabelUpdated - = LabelManager_OnLabelUpdated ;
BreakpointManager . BreakpointsChanged - = BreakpointManager_BreakpointsChanged ;
ctrlConsoleStatus . OnStateChanged - = ctrlConsoleStatus_OnStateChanged ;
ctrlProfiler . OnFunctionSelected - = ctrlProfiler_OnFunctionSelected ;
2017-05-02 21:34:04 -04:00
2017-08-14 23:44:01 -04:00
if ( _notifListener ! = null ) {
_notifListener . Dispose ( ) ;
_notifListener = null ;
}
2017-05-02 21:34:04 -04:00
2017-08-14 23:44:01 -04:00
InteropEmu . DebugSetFlags ( 0 ) ;
2017-10-07 21:00:02 -04:00
InteropEmu . SetFlag ( EmulationFlags . DebuggerWindowEnabled , false ) ;
2017-08-14 23:44:01 -04:00
InteropEmu . DebugSetBreakpoints ( new InteropBreakpoint [ 0 ] , 0 ) ;
InteropEmu . DebugRun ( ) ;
2016-11-26 20:58:27 -05:00
2017-08-14 23:44:01 -04:00
ConfigManager . Config . DebugInfo . WindowWidth = this . WindowState = = FormWindowState . Maximized ? this . RestoreBounds . Width : this . Width ;
ConfigManager . Config . DebugInfo . WindowHeight = this . WindowState = = FormWindowState . Maximized ? this . RestoreBounds . Height : this . Height ;
ConfigManager . Config . DebugInfo . TopPanelHeight = this . splitContainer . GetSplitterDistance ( ) ;
ConfigManager . Config . DebugInfo . LeftPanelWidth = this . ctrlSplitContainerTop . GetSplitterDistance ( ) ;
ConfigManager . ApplyChanges ( ) ;
2016-11-24 00:18:07 -05:00
2017-08-14 23:44:01 -04:00
DebugWorkspaceManager . SaveWorkspace ( ) ;
2015-08-05 20:40:10 -04:00
}
2015-08-08 22:36:39 -04:00
private void mnuNametableViewer_Click ( object sender , EventArgs e )
{
2017-08-14 23:44:01 -04:00
DebugWindowManager . OpenDebugWindow ( DebugWindow . PpuViewer ) ;
2015-08-08 22:36:39 -04:00
}
2015-08-09 14:47:27 -04:00
private void ctrlCallstack_FunctionSelected ( object sender , EventArgs e )
{
_lastCodeWindow . ScrollToLineNumber ( ( int ) sender ) ;
}
2015-08-17 19:32:10 -04:00
2016-11-26 17:48:11 -05:00
private void ctrlConsoleStatus_OnStateChanged ( object sender , EventArgs e )
{
UpdateDebugger ( true ) ;
}
2015-08-17 19:32:10 -04:00
private void tmrCdlRatios_Tick ( object sender , EventArgs e )
{
this . UpdateCdlRatios ( ) ;
}
private void mnuLoadCdlFile_Click ( object sender , EventArgs e )
{
OpenFileDialog ofd = new OpenFileDialog ( ) ;
2016-12-12 23:25:20 -05:00
ofd . SetFilter ( "CDL files (*.cdl)|*.cdl" ) ;
2015-08-17 19:32:10 -04:00
if ( ofd . ShowDialog ( ) = = System . Windows . Forms . DialogResult . OK ) {
if ( ! InteropEmu . DebugLoadCdlFile ( ofd . FileName ) ) {
MessageBox . Show ( "Could not load CDL file. The file selected file is invalid." , "Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
}
}
private void mnuSaveAsCdlFile_Click ( object sender , EventArgs e )
{
SaveFileDialog sfd = new SaveFileDialog ( ) ;
2016-12-12 23:25:20 -05:00
sfd . SetFilter ( "CDL files (*.cdl)|*.cdl" ) ;
2015-08-17 19:32:10 -04:00
sfd . AddExtension = true ;
if ( sfd . ShowDialog ( ) = = System . Windows . Forms . DialogResult . OK ) {
if ( ! InteropEmu . DebugSaveCdlFile ( sfd . FileName ) ) {
MessageBox . Show ( "Error while trying to save CDL file." , "Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
}
}
private void mnuResetCdlLog_Click ( object sender , EventArgs e )
{
InteropEmu . DebugResetCdlLog ( ) ;
2017-08-21 23:11:14 -04:00
UpdateDebugger ( false ) ;
2015-08-17 19:32:10 -04:00
}
2016-01-10 00:33:33 -05:00
private void ctrlBreakpoints_BreakpointNavigation ( object sender , EventArgs e )
{
2017-08-03 21:30:44 -04:00
Breakpoint bp = ( Breakpoint ) sender ;
if ( bp . IsCpuBreakpoint ) {
_lastCodeWindow . ScrollToLineNumber ( bp . GetRelativeAddress ( ) ) ;
}
2016-01-10 00:33:33 -05:00
}
2016-01-10 19:56:40 -05:00
private void mnuTraceLogger_Click ( object sender , EventArgs e )
{
2017-08-14 23:44:01 -04:00
DebugWindowManager . OpenDebugWindow ( DebugWindow . TraceLogger ) ;
2016-01-10 19:56:40 -05:00
}
2016-06-04 15:38:48 -04:00
2016-06-05 10:26:05 -04:00
private void mnuPpuPartialDraw_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . PpuPartialDraw = mnuPpuPartialDraw . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-11-19 19:21:28 -05:00
2016-12-04 09:37:01 -05:00
private void mnuShowEffectiveAddresses_Click ( object sender , EventArgs e )
2016-11-19 19:21:28 -05:00
{
ConfigManager . Config . DebugInfo . ShowEffectiveAddresses = mnuShowEffectiveAddresses . Checked ;
ConfigManager . ApplyChanges ( ) ;
2016-11-21 22:34:47 -05:00
UpdateDebugger ( false ) ;
}
2016-12-04 09:37:01 -05:00
private void mnuShowOnlyDisassembledCode_Click ( object sender , EventArgs e )
2016-11-21 22:34:47 -05:00
{
ConfigManager . Config . DebugInfo . ShowOnlyDisassembledCode = mnuShowOnlyDisassembledCode . Checked ;
ConfigManager . ApplyChanges ( ) ;
UpdateDebugger ( false ) ;
2016-11-19 19:21:28 -05:00
}
2016-09-04 18:08:16 -04:00
2016-12-04 09:37:01 -05:00
private void mnuShowCpuMemoryMapping_Click ( object sender , EventArgs e )
2016-09-04 18:08:16 -04:00
{
ctrlCpuMemoryMapping . Visible = mnuShowCpuMemoryMapping . Checked ;
ConfigManager . Config . DebugInfo . ShowCpuMemoryMapping = mnuShowCpuMemoryMapping . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-12-04 09:37:01 -05:00
private void mnuShowPpuMemoryMapping_Click ( object sender , EventArgs e )
2016-09-04 18:08:16 -04:00
{
ctrlPpuMemoryMapping . Visible = mnuShowPpuMemoryMapping . Checked ;
ConfigManager . Config . DebugInfo . ShowPpuMemoryMapping = mnuShowPpuMemoryMapping . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-09-05 16:48:20 -04:00
2016-11-27 19:43:17 -05:00
private void mnuHighlightUnexecutedCode_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . HighlightUnexecutedCode = mnuHighlightUnexecutedCode . Checked ;
ConfigManager . ApplyChanges ( ) ;
ctrlDebuggerCode . UpdateLineColors ( ) ;
ctrlDebuggerCodeSplit . UpdateLineColors ( ) ;
}
2016-12-04 09:53:25 -05:00
private void mnuBreakOnReset_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BreakOnReset = mnuBreakOnReset . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-11-27 19:43:17 -05:00
2016-12-04 09:37:01 -05:00
private void mnuBreakOnOpen_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BreakOnOpen = mnuBreakOnOpen . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-12-04 09:43:43 -05:00
2017-03-04 16:18:28 -05:00
private void mnuBreakOnUnofficialOpcodes_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BreakOnUnofficialOpcodes = mnuBreakOnUnofficialOpcodes . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void mnuBreakOnBrk_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BreakOnBrk = mnuBreakOnBrk . Checked ;
ConfigManager . ApplyChanges ( ) ;
2017-06-29 13:55:12 -04:00
}
private void mnuBreakOnDebuggerFocus_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BreakOnDebuggerFocus = mnuBreakOnDebuggerFocus . Checked ;
ConfigManager . ApplyChanges ( ) ;
2017-03-04 16:18:28 -05:00
}
2017-06-29 13:47:49 -04:00
private void mnuRefreshWatchWhileRunning_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . RefreshWatchWhileRunning = mnuRefreshWatchWhileRunning . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-12-04 09:43:43 -05:00
private void mnuDisableDefaultLabels_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . DisableDefaultLabels = mnuDisableDefaultLabels . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-12-04 09:37:01 -05:00
2016-12-04 11:16:44 -05:00
private void mnuDisplayOpCodesInLowerCase_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . DisplayOpCodesInLowerCase = mnuDisplayOpCodesInLowerCase . Checked ;
ConfigManager . ApplyChanges ( ) ;
this . UpdateDebuggerFlags ( ) ;
this . UpdateDebugger ( false ) ;
}
2016-11-20 13:15:37 -05:00
private void ctrlFunctionList_OnFunctionSelected ( object relativeAddress , EventArgs e )
{
_lastCodeWindow . ScrollToLineNumber ( ( Int32 ) relativeAddress ) ;
}
2016-11-21 22:34:47 -05:00
private void LabelManager_OnLabelUpdated ( object sender , EventArgs e )
{
2017-08-14 23:44:01 -04:00
DebugWorkspaceManager . SaveWorkspace ( ) ;
2016-11-26 14:15:50 -05:00
ctrlLabelList . UpdateLabelList ( ) ;
ctrlFunctionList . UpdateFunctionList ( true ) ;
2016-11-21 22:34:47 -05:00
UpdateDebugger ( false ) ;
}
private void ctrlLabelList_OnLabelSelected ( object relativeAddress , EventArgs e )
{
_lastCodeWindow . ScrollToLineNumber ( ( Int32 ) relativeAddress ) ;
}
2016-11-24 00:18:07 -05:00
private void mnuResetWorkspace_Click ( object sender , EventArgs e )
{
if ( MessageBox . Show ( "This operation will empty the watch window, remove all breakpoints, and reset labels to their default state." + Environment . NewLine + "Are you sure?" , "" , MessageBoxButtons . OKCancel , MessageBoxIcon . Warning ) = = DialogResult . OK ) {
2017-08-14 23:44:01 -04:00
DebugWorkspaceManager . ResetWorkspace ( ) ;
2016-11-25 21:05:07 -05:00
LabelManager . ResetLabels ( ) ;
2016-11-24 00:18:07 -05:00
UpdateWorkspace ( ) ;
2016-12-04 11:16:44 -05:00
UpdateDebugger ( false ) ;
2016-11-24 00:18:07 -05:00
}
}
2016-11-25 21:05:07 -05:00
private void mnuImportLabels_Click ( object sender , EventArgs e )
{
OpenFileDialog ofd = new OpenFileDialog ( ) ;
2017-08-17 20:12:42 -04:00
ofd . SetFilter ( "All supported files (*.dbg, *.mlb)|*.dbg;*.mlb" ) ;
2016-11-25 21:05:07 -05:00
if ( ofd . ShowDialog ( ) = = DialogResult . OK ) {
2017-08-17 20:12:42 -04:00
string ext = Path . GetExtension ( ofd . FileName ) . ToLower ( ) ;
if ( ext = = ".mlb" ) {
MesenLabelFile . Import ( ofd . FileName ) ;
} else {
Ld65DbgImporter dbgImporter = new Ld65DbgImporter ( ) ;
dbgImporter . Import ( ofd . FileName ) ;
}
}
}
private void mnuExportLabels_Click ( object sender , EventArgs e )
{
SaveFileDialog sfd = new SaveFileDialog ( ) ;
sfd . SetFilter ( "All supported files (*.mlb)|*.mlb" ) ;
if ( sfd . ShowDialog ( ) = = DialogResult . OK ) {
MesenLabelFile . Export ( sfd . FileName ) ;
2016-11-25 21:05:07 -05:00
}
}
2016-11-27 10:56:37 -05:00
private void ctrlLabelList_OnFindOccurrence ( object sender , EventArgs e )
{
CodeLabel label = sender as CodeLabel ;
2016-12-01 20:45:13 -05:00
_lastCodeWindow . FindAllOccurrences ( label . Label , true , true ) ;
2016-11-27 10:56:37 -05:00
}
private void ctrlFunctionList_OnFindOccurrence ( object sender , EventArgs e )
{
2016-12-01 20:45:13 -05:00
_lastCodeWindow . FindAllOccurrences ( sender as string , true , true ) ;
2016-11-27 10:56:37 -05:00
}
2016-11-28 20:57:53 -05:00
private void mnuBreakIn_Click ( object sender , EventArgs e )
{
using ( frmBreakIn frm = new frmBreakIn ( ) ) {
frm . ShowDialog ( ) ;
}
}
2016-12-01 20:45:13 -05:00
private void mnuFindAllOccurrences_Click ( object sender , EventArgs e )
{
frmFindOccurrences frm = new Debugger . frmFindOccurrences ( ) ;
if ( frm . ShowDialog ( ) = = DialogResult . OK ) {
_lastCodeWindow . FindAllOccurrences ( frm . SearchString , frm . MatchWholeWord , frm . MatchCase ) ;
}
}
2016-12-01 21:43:32 -05:00
2016-12-04 09:37:01 -05:00
private void mnuAutoLoadDbgFiles_Click ( object sender , EventArgs e )
2016-12-01 21:43:32 -05:00
{
if ( _debuggerInitialized ) {
ConfigManager . Config . DebugInfo . AutoLoadDbgFiles = mnuAutoLoadDbgFiles . Checked ;
ConfigManager . ApplyChanges ( ) ;
2017-08-19 22:00:12 -04:00
AutoLoadDbgFiles ( false ) ;
}
}
2016-12-01 21:43:32 -05:00
2017-08-19 22:00:12 -04:00
private void mnuAutoLoadCdlFiles_Click ( object sender , EventArgs e )
{
if ( _debuggerInitialized ) {
ConfigManager . Config . DebugInfo . AutoLoadCdlFiles = mnuAutoLoadCdlFiles . Checked ;
ConfigManager . ApplyChanges ( ) ;
AutoLoadCdlFiles ( ) ;
2016-12-01 21:43:32 -05:00
}
}
2016-12-04 14:12:49 -05:00
private void ctrlConsoleStatus_OnGotoLocation ( object sender , EventArgs e )
{
_lastCodeWindow . ScrollToLineNumber ( ( int ) sender ) ;
}
2016-12-05 23:35:07 -05:00
private void SetDisassemblyType ( DisassemblyType type , ToolStripMenuItem item )
{
mnuDisassembleVerifiedCodeOnly . Checked = mnuDisassembleEverything . Checked = mnuDisassembleEverythingButData . Checked = false ;
item . Checked = true ;
ConfigManager . Config . DebugInfo . DisassemblyType = type ;
ConfigManager . ApplyChanges ( ) ;
UpdateDebuggerFlags ( ) ;
2017-08-21 23:11:14 -04:00
UpdateDebugger ( false ) ;
2016-12-05 23:35:07 -05:00
}
private void mnuDisassembleVerifiedCodeOnly_Click ( object sender , EventArgs e )
{
SetDisassemblyType ( DisassemblyType . VerifiedCode , sender as ToolStripMenuItem ) ;
}
private void mnuDisassembleEverything_Click ( object sender , EventArgs e )
{
SetDisassemblyType ( DisassemblyType . Everything , sender as ToolStripMenuItem ) ;
}
private void mnuDisassembleEverythingButData_Click ( object sender , EventArgs e )
{
SetDisassemblyType ( DisassemblyType . EverythingButData , sender as ToolStripMenuItem ) ;
}
2016-12-06 22:50:27 -05:00
private void ctrlSplitContainerTop_PanelCollapsed ( object sender , EventArgs e )
{
mnuShowFunctionLabelLists . Checked = false ;
ConfigManager . Config . DebugInfo . ShowRightPanel = mnuShowFunctionLabelLists . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void ctrlSplitContainerTop_PanelExpanded ( object sender , EventArgs e )
{
mnuShowFunctionLabelLists . Checked = true ;
ConfigManager . Config . DebugInfo . ShowRightPanel = mnuShowFunctionLabelLists . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void mnuShowFunctionLabelLists_Click ( object sender , EventArgs e )
{
if ( mnuShowFunctionLabelLists . Checked ) {
this . ctrlSplitContainerTop . ExpandPanel ( ) ;
} else {
this . ctrlSplitContainerTop . CollapsePanel ( ) ;
}
}
private void splitContainer_PanelCollapsed ( object sender , EventArgs e )
{
mnuShowBottomPanel . Checked = false ;
ConfigManager . Config . DebugInfo . ShowBottomPanel = mnuShowBottomPanel . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void splitContainer_PanelExpanded ( object sender , EventArgs e )
{
mnuShowBottomPanel . Checked = true ;
ConfigManager . Config . DebugInfo . ShowBottomPanel = mnuShowBottomPanel . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void mnuShowBottomPanel_Click ( object sender , EventArgs e )
{
if ( mnuShowBottomPanel . Checked ) {
splitContainer . ExpandPanel ( ) ;
} else {
splitContainer . CollapsePanel ( ) ;
}
}
2017-08-21 23:11:14 -04:00
2017-03-04 22:24:41 -05:00
private void mnuSaveRom_Click ( object sender , EventArgs e )
2017-08-21 23:11:14 -04:00
{
InteropEmu . DebugSaveRomToDisk ( InteropEmu . GetRomInfo ( ) . RomFile . Path ) ;
}
private void mnuSaveRomAs_Click ( object sender , EventArgs e )
2017-03-04 22:24:41 -05:00
{
using ( SaveFileDialog sfd = new SaveFileDialog ( ) ) {
2017-08-19 19:40:02 -04:00
sfd . SetFilter ( "NES roms (*.nes)|*.nes" ) ;
2017-03-04 22:24:41 -05:00
sfd . FileName = InteropEmu . GetRomInfo ( ) . GetRomName ( ) + "_Modified.nes" ;
sfd . InitialDirectory = ConfigManager . DebuggerFolder ;
if ( sfd . ShowDialog ( ) = = DialogResult . OK ) {
InteropEmu . DebugSaveRomToDisk ( sfd . FileName ) ;
}
}
}
2017-08-19 19:40:02 -04:00
private void mnuSaveAsIps_Click ( object sender , EventArgs e )
{
using ( SaveFileDialog sfd = new SaveFileDialog ( ) ) {
sfd . SetFilter ( "IPS patch files (*.ips)|*.ips" ) ;
sfd . FileName = InteropEmu . GetRomInfo ( ) . GetRomName ( ) + ".ips" ;
sfd . InitialDirectory = ConfigManager . DebuggerFolder ;
if ( sfd . ShowDialog ( ) = = DialogResult . OK ) {
InteropEmu . DebugSaveRomToDisk ( sfd . FileName , true ) ;
}
}
}
2017-03-07 17:51:14 -05:00
2017-08-21 23:11:14 -04:00
private void mnuRevertChanges_Click ( object sender , EventArgs e )
{
InteropEmu . DebugRevertPrgChrChanges ( ) ;
UpdateDebugger ( false ) ;
}
2017-08-12 16:52:45 -04:00
private void mnuEditHeader_Click ( object sender , EventArgs e )
{
using ( frmEditHeader frm = new frmEditHeader ( ) ) {
frm . ShowDialog ( sender , this ) ;
}
}
2017-08-30 18:31:27 -04:00
private void mnuScriptWindow_Click ( object sender , EventArgs e )
{
DebugWindowManager . OpenDebugWindow ( DebugWindow . ScriptWindow ) ;
}
2017-03-07 17:51:14 -05:00
private void mnuAssembler_Click ( object sender , EventArgs e )
{
2017-08-19 14:36:00 -04:00
DebugWindowManager . OpenDebugWindow ( DebugWindow . Assembler ) ;
2017-03-11 15:37:57 -05:00
}
private void ctrlDebuggerCode_OnEditCode ( AssemblerEventArgs args )
{
2017-08-19 14:36:00 -04:00
DebugWindowManager . OpenAssembler ( args . Code , args . StartAddress , args . BlockLength ) ;
2017-03-07 17:51:14 -05:00
}
2017-03-11 00:56:00 -05:00
private void mnuCode_DropDownOpening ( object sender , EventArgs e )
{
this . _lastCodeWindow . UpdateContextMenuItemVisibility ( false ) ;
mnuCode . DropDownItems . AddRange ( this . _lastCodeWindow . ContextMenuItems . ToArray ( ) ) ;
}
private void mnuCode_DropDownClosed ( object sender , EventArgs e )
{
List < ToolStripItem > items = new List < ToolStripItem > ( ) ;
foreach ( ToolStripItem item in mnuCode . DropDownItems ) {
items . Add ( item ) ;
}
this . _lastCodeWindow . ContextMenuItems = items ;
}
2015-07-01 23:17:14 -04:00
}
}