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 ;
2018-02-24 15:10:01 -05:00
private bool _wasPaused = false ;
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 ;
2018-03-18 19:57:56 -04:00
private ICodeViewer _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
2018-02-24 15:10:01 -05:00
_wasPaused = InteropEmu . IsPaused ( ) ;
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
2018-03-18 19:57:56 -04:00
ctrlDebuggerCode . CodeViewerActions . OnSetNextStatement + = ctrlDebuggerCode_OnSetNextStatement ;
ctrlDebuggerCode . CodeViewerActions . OnShowInSplitView + = ctrlDebuggerCode_OnShowInSplitView ;
ctrlDebuggerCode . CodeViewerActions . OnSwitchView + = ctrlDebuggerCode_OnSwitchView ;
ctrlDebuggerCodeSplit . CodeViewerActions . OnSetNextStatement + = ctrlDebuggerCode_OnSetNextStatement ;
ctrlDebuggerCodeSplit . CodeViewerActions . OnShowInSplitView + = ctrlDebuggerCode_OnShowInSplitView ;
ctrlDebuggerCodeSplit . CodeViewerActions . OnSwitchView + = ctrlDebuggerCode_OnSwitchView ;
ctrlSourceViewer . CodeViewerActions . OnSetNextStatement + = ctrlDebuggerCode_OnSetNextStatement ;
ctrlSourceViewer . CodeViewerActions . OnShowInSplitView + = ctrlDebuggerCode_OnShowInSplitView ;
ctrlSourceViewer . CodeViewerActions . OnSwitchView + = ctrlDebuggerCode_OnSwitchView ;
ctrlSourceViewerSplit . CodeViewerActions . OnSetNextStatement + = ctrlDebuggerCode_OnSetNextStatement ;
ctrlSourceViewerSplit . CodeViewerActions . OnShowInSplitView + = ctrlDebuggerCode_OnShowInSplitView ;
ctrlSourceViewerSplit . CodeViewerActions . OnSwitchView + = ctrlDebuggerCode_OnSwitchView ;
2018-03-03 10:41:59 -05:00
Font font = new Font ( ConfigManager . Config . DebugInfo . FontFamily , ConfigManager . Config . DebugInfo . FontSize , ConfigManager . Config . DebugInfo . FontStyle ) ;
2018-03-18 19:57:56 -04:00
ctrlDebuggerCode . CodeViewer . BaseFont = font ;
ctrlDebuggerCodeSplit . CodeViewer . BaseFont = font ;
ctrlSourceViewer . CodeViewer . BaseFont = font ;
ctrlSourceViewerSplit . CodeViewer . BaseFont = font ;
2018-03-03 10:41:59 -05:00
2018-03-10 09:58:24 -05:00
this . InitShortcuts ( ) ;
2018-02-16 18:05:48 -05:00
this . InitToolbar ( ) ;
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 ;
2018-03-06 20:34:15 -05:00
this . mnuCopyAddresses . Checked = ConfigManager . Config . DebugInfo . CopyAddresses ;
this . mnuCopyByteCode . Checked = ConfigManager . Config . DebugInfo . CopyByteCode ;
2018-03-22 18:59:00 -04:00
this . mnuCopyComments . Checked = ConfigManager . Config . DebugInfo . CopyComments ;
2016-06-25 22:06:22 -04:00
this . mnuPpuPartialDraw . Checked = ConfigManager . Config . DebugInfo . PpuPartialDraw ;
2018-02-16 20:05:15 -05:00
this . mnuPpuShowPreviousFrame . Checked = ConfigManager . Config . DebugInfo . PpuShowPreviousFrame ;
2018-03-03 13:11:45 -05:00
this . mnuHidePauseIcon . Checked = ConfigManager . Config . DebugInfo . HidePauseIcon ;
2016-11-19 19:21:28 -05:00
this . mnuShowEffectiveAddresses . Checked = ConfigManager . Config . DebugInfo . ShowEffectiveAddresses ;
2018-01-02 11:11:50 -05:00
this . mnuShowCodePreview . Checked = ConfigManager . Config . DebugInfo . ShowCodePreview ;
2018-02-16 18:05:48 -05:00
this . mnuShowToolbar . Checked = ConfigManager . Config . DebugInfo . ShowToolbar ;
2016-09-04 18:08:16 -04:00
this . mnuShowCpuMemoryMapping . Checked = ConfigManager . Config . DebugInfo . ShowCpuMemoryMapping ;
this . mnuShowPpuMemoryMapping . Checked = ConfigManager . Config . DebugInfo . ShowPpuMemoryMapping ;
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 ;
2018-02-20 21:59:56 -05:00
this . mnuBreakOnCrash . Checked = ConfigManager . Config . DebugInfo . BreakOnCrash ;
2017-11-10 18:01:28 -05:00
this . mnuBreakOnDebuggerFocus . Checked = ConfigManager . Config . DebugInfo . BreakOnDebuggerFocus ;
2018-02-24 11:07:27 -05:00
this . mnuBringToFrontOnBreak . Checked = ConfigManager . Config . DebugInfo . BringToFrontOnBreak ;
this . mnuBringToFrontOnPause . Checked = ConfigManager . Config . DebugInfo . BringToFrontOnPause ;
2016-12-04 11:16:44 -05:00
this . mnuDisplayOpCodesInLowerCase . Checked = ConfigManager . Config . DebugInfo . DisplayOpCodesInLowerCase ;
2018-01-03 18:48:16 -05:00
this . mnuDisassembleVerifiedData . Checked = ConfigManager . Config . DebugInfo . DisassembleVerifiedData ;
this . mnuDisassembleUnidentifiedData . Checked = ConfigManager . Config . DebugInfo . DisassembleUnidentifiedData ;
this . mnuShowVerifiedData . Checked = ConfigManager . Config . DebugInfo . ShowVerifiedData ;
this . mnuShowUnidentifiedData . Checked = ConfigManager . Config . DebugInfo . ShowUnidentifiedData ;
2017-06-29 13:47:49 -04:00
this . mnuRefreshWatchWhileRunning . Checked = ConfigManager . Config . DebugInfo . RefreshWatchWhileRunning ;
2018-02-14 21:09:43 -05:00
this . mnuShowMemoryValues . Checked = ConfigManager . Config . DebugInfo . ShowMemoryValuesInCodeWindow ;
ctrlDebuggerCode . ShowMemoryValues = mnuShowMemoryValues . Checked ;
ctrlDebuggerCodeSplit . ShowMemoryValues = mnuShowMemoryValues . Checked ;
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 ;
}
2018-02-16 18:05:48 -05:00
tsToolbar . Visible = mnuShowToolbar . Checked ;
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 ) ;
2018-03-18 19:57:56 -04:00
this . ctrlSourceViewer . SetConfig ( ConfigManager . Config . DebugInfo . LeftView ) ;
2016-06-25 22:06:22 -04:00
this . ctrlDebuggerCodeSplit . SetConfig ( ConfigManager . Config . DebugInfo . RightView ) ;
2018-03-18 19:57:56 -04:00
this . ctrlSourceViewerSplit . SetConfig ( ConfigManager . Config . DebugInfo . RightView ) ;
2016-06-25 22:06:22 -04:00
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 ) ;
2018-02-24 15:10:01 -05:00
InteropEmu . DebugStep ( ( uint ) ( _wasPaused ? 1 : 5000 ) ) ;
2017-08-14 23:44:01 -04:00
} 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 ( ) ;
2018-02-16 18:05:48 -05:00
UpdateFileOptions ( ) ;
2015-08-17 19:32:10 -04:00
tmrCdlRatios . Start ( ) ;
}
2018-03-10 09:58:24 -05:00
private void InitShortcuts ( )
{
mnuIncreaseFontSize . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . IncreaseFontSize ) ) ;
mnuDecreaseFontSize . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . DecreaseFontSize ) ) ;
mnuResetFontSize . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . ResetFontSize ) ) ;
mnuSaveRom . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . SaveRom ) ) ;
mnuSaveRomAs . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . SaveRomAs ) ) ;
mnuSaveAsIps . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . SaveEditAsIps ) ) ;
mnuRevertChanges . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . RevertPrgChrChanges ) ) ;
mnuContinue . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . Continue ) ) ;
mnuBreak . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . Break ) ) ;
mnuBreakIn . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . BreakIn ) ) ;
2018-03-15 18:34:00 -04:00
mnuBreakOn . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . BreakOn ) ) ;
2018-03-10 09:58:24 -05:00
mnuStepBack . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . StepBack ) ) ;
mnuStepOut . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . StepOut ) ) ;
mnuStepInto . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . StepInto ) ) ;
mnuStepOver . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . StepOver ) ) ;
mnuRunPpuCycle . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . RunPpuCycle ) ) ;
mnuRunScanline . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . RunPpuScanline ) ) ;
mnuRunOneFrame . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . RunPpuFrame ) ) ;
mnuGoToAddress . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . GoTo ) ) ;
mnuFind . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . Find ) ) ;
mnuFindNext . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . FindNext ) ) ;
mnuFindPrev . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . FindPrev ) ) ;
mnuFindAllOccurrences . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . FindOccurrences ) ) ;
mnuShowVerifiedData . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . ToggleVerifiedData ) ) ;
mnuShowUnidentifiedData . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . ToggleUnidentifiedCodeData ) ) ;
mnuApuViewer . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenApuViewer ) ) ;
mnuAssembler . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenAssembler ) ) ;
mnuEventViewer . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenEventViewer ) ) ;
mnuMemoryViewer . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenMemoryTools ) ) ;
mnuPpuViewer . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenPpuViewer ) ) ;
mnuScriptWindow . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenScriptWindow ) ) ;
mnuTraceLogger . InitShortcut ( this , nameof ( DebuggerShortcutsConfig . OpenTraceLogger ) ) ;
}
2018-02-16 18:05:48 -05:00
private void InitToolbar ( )
{
AddItemsToToolbar (
mnuSaveRom , mnuRevertChanges , null ,
mnuImportLabels , mnuExportLabels , null ,
mnuContinue , mnuBreak , null ,
mnuStepInto , mnuStepOver , mnuStepOut , mnuStepBack , null ,
mnuRunPpuCycle , mnuRunScanline , mnuRunOneFrame , null ,
mnuToggleBreakpoint , mnuDisableEnableBreakpoint , null ,
mnuFind , mnuFindPrev , mnuFindNext , null ,
2018-03-24 16:14:52 -04:00
mnuApuViewer , mnuAssembler , mnuEventViewer , mnuMemoryViewer , mnuPpuViewer , mnuScriptWindow , mnuTraceLogger , null ,
2018-03-18 19:57:56 -04:00
mnuEditHeader , null ,
mnuSplitView , null
2018-02-16 18:05:48 -05:00
) ;
2018-02-23 10:56:19 -05:00
AddItemToToolbar ( mnuShowVerifiedData , "Show Verified Data" ) ;
AddItemToToolbar ( mnuShowUnidentifiedData , "Show Unidentified Code/Data" ) ;
2018-03-15 18:34:00 -04:00
AddItemsToToolbar ( null , mnuBreakIn , null , mnuBreakOn ) ;
2018-02-23 10:56:19 -05:00
}
private void AddItemToToolbar ( ToolStripMenuItem item , string caption = null )
{
if ( item = = null ) {
tsToolbar . Items . Add ( "-" ) ;
} else {
ToolStripButton newItem = new ToolStripButton ( item . Image ) ;
if ( item . Image = = null ) {
newItem . Text = item . Text ;
}
2018-03-10 09:58:24 -05:00
newItem . ToolTipText = ( caption ? ? item . Text ) + ( item . ShortcutKeys ! = Keys . None ? $" ({DebuggerShortcutsConfig.GetShortcutDisplay(item.ShortcutKeys)})" : "" ) ;
2018-02-23 10:56:19 -05:00
newItem . Click + = ( s , e ) = > item . PerformClick ( ) ;
newItem . Checked = item . Checked ;
newItem . Enabled = item . Enabled ;
2018-03-10 09:58:24 -05:00
newItem . MouseEnter + = ( s , e ) = > newItem . ToolTipText = ( caption ? ? item . Text ) + ( item . ShortcutKeys ! = Keys . None ? $" ({DebuggerShortcutsConfig.GetShortcutDisplay(item.ShortcutKeys)})" : "" ) ;
2018-02-23 10:56:19 -05:00
item . EnabledChanged + = ( s , e ) = > newItem . Enabled = item . Enabled ;
item . CheckedChanged + = ( s , e ) = > newItem . Checked = item . Checked ;
item . VisibleChanged + = ( s , e ) = > newItem . Visible = item . Visible ;
tsToolbar . Items . Add ( newItem ) ;
}
2018-02-16 18:05:48 -05:00
}
private void AddItemsToToolbar ( params ToolStripMenuItem [ ] items )
{
foreach ( ToolStripMenuItem item in items ) {
2018-02-23 10:56:19 -05:00
AddItemToToolbar ( item ) ;
2018-02-16 18:05:48 -05:00
}
}
2018-03-10 15:47:13 -05:00
protected override bool ProcessCmdKey ( ref Message msg , Keys keyData )
{
if ( keyData = = ConfigManager . Config . DebugInfo . Shortcuts . ToggleBreakContinue ) {
if ( mnuBreak . Enabled ) {
ctrlConsoleStatus . ApplyChanges ( ) ;
InteropEmu . DebugStep ( 1 ) ;
} else {
ResumeExecution ( ) ;
}
return true ;
}
return base . ProcessCmdKey ( ref msg , keyData ) ;
}
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 ;
2018-01-01 12:09:33 -05:00
mnuCdlStripUnusedData . Enabled = romInfo . Format = = RomFormat . iNes ;
mnuCdlStripUsedData . Enabled = romInfo . Format = = RomFormat . iNes ;
2017-08-21 23:11:14 -04:00
}
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-12-28 16:31:29 -05:00
UpdateDebugger ( false , false ) ;
2017-08-19 22:00:12 -04:00
}
}
}
}
private void AutoLoadDbgFiles ( bool silent )
2016-12-01 21:43:32 -05:00
{
2018-03-18 19:57:56 -04:00
ctrlSourceViewer . SymbolProvider = null ;
ctrlSourceViewerSplit . SymbolProvider = null ;
ctrlDebuggerCode . SymbolProvider = null ;
ctrlDebuggerCodeSplit . SymbolProvider = null ;
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 ) ) {
2018-03-18 19:57:56 -04:00
ImportDbgFile ( 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
}
}
2018-03-18 19:57:56 -04:00
if ( ctrlSourceViewer . SymbolProvider = = null ) {
ctrlSourceViewer . Visible = false ;
ctrlSourceViewerSplit . Visible = false ;
ctrlDebuggerCode . Visible = true ;
ctrlDebuggerCodeSplit . Visible = true ;
ctrlDebuggerCode . Focus ( ) ;
}
}
private void ImportDbgFile ( string dbgPath , bool silent )
{
Ld65DbgImporter dbgImporter = new Ld65DbgImporter ( ) ;
dbgImporter . Import ( dbgPath , silent ) ;
ctrlDebuggerCode . SymbolProvider = dbgImporter ;
ctrlDebuggerCodeSplit . SymbolProvider = dbgImporter ;
ctrlSourceViewer . SymbolProvider = dbgImporter ;
ctrlSourceViewerSplit . SymbolProvider = dbgImporter ;
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
}
2018-02-11 14:30:48 -05:00
private void SetFlag ( DebuggerFlags flag , bool enabled )
2016-11-19 19:21:28 -05:00
{
2018-02-11 14:30:48 -05:00
if ( enabled ) {
DebugWorkspaceManager . SetFlags ( flag ) ;
} else {
DebugWorkspaceManager . ClearFlags ( flag ) ;
2017-03-04 16:18:28 -05:00
}
2018-02-11 14:30:48 -05:00
}
2018-01-15 22:20:51 -05:00
2018-02-11 14:30:48 -05:00
private void UpdateDebuggerFlags ( )
{
SetFlag ( DebuggerFlags . PpuPartialDraw , mnuPpuPartialDraw . Checked ) ;
2018-02-16 20:05:15 -05:00
SetFlag ( DebuggerFlags . PpuShowPreviousFrame , mnuPpuShowPreviousFrame . Checked ) ;
2018-02-11 14:30:48 -05:00
SetFlag ( DebuggerFlags . ShowEffectiveAddresses , mnuShowEffectiveAddresses . Checked ) ;
SetFlag ( DebuggerFlags . DisplayOpCodesInLowerCase , mnuDisplayOpCodesInLowerCase . Checked ) ;
SetFlag ( DebuggerFlags . DisassembleVerifiedData , mnuDisassembleVerifiedData . Checked ) ;
SetFlag ( DebuggerFlags . DisassembleUnidentifiedData , mnuDisassembleUnidentifiedData . Checked ) ;
SetFlag ( DebuggerFlags . ShowVerifiedData , mnuShowVerifiedData . Checked ) ;
SetFlag ( DebuggerFlags . ShowUnidentifiedData , mnuShowUnidentifiedData . Checked ) ;
SetFlag ( DebuggerFlags . BreakOnUnofficialOpCode , mnuBreakOnUnofficialOpcodes . Checked ) ;
SetFlag ( DebuggerFlags . BreakOnBrk , mnuBreakOnBrk . Checked ) ;
2018-03-03 13:11:45 -05:00
SetFlag ( DebuggerFlags . HidePauseIcon , mnuHidePauseIcon . Checked ) ;
2017-10-07 21:00:02 -04:00
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 :
2018-02-16 18:05:48 -05:00
this . BeginInvoke ( ( MethodInvoker ) ( ( ) = > {
2018-02-24 11:07:27 -05:00
BreakSource source = ( BreakSource ) e . Parameter . ToInt32 ( ) ;
bool bringToFront = (
source = = BreakSource . Break & & ConfigManager . Config . DebugInfo . BringToFrontOnBreak | |
source = = BreakSource . Pause & & ConfigManager . Config . DebugInfo . BringToFrontOnPause
) ;
UpdateDebugger ( true , bringToFront ) ;
2018-02-16 18:05:48 -05:00
mnuContinue . Enabled = true ;
mnuBreak . Enabled = false ;
} ) ) ;
2016-06-04 08:55:52 -04:00
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 ) ;
2017-12-28 16:31:29 -05:00
UpdateDebugger ( true , false ) ;
2016-11-23 23:46:01 -05:00
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-12-28 16:31:29 -05:00
public void UpdateDebugger ( bool updateActiveAddress = true , bool bringToFront = 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 {
2018-03-18 19:57:56 -04:00
_lastCodeWindow = ctrlSourceViewer . Visible ? ( ICodeViewer ) ctrlSourceViewer : ( ICodeViewer ) ctrlDebuggerCode ;
2015-07-01 23:17:14 -04:00
}
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
2018-02-11 15:58:23 -05:00
ctrlDebuggerCode . SetActiveAddress ( state . CPU . DebugPC ) ;
2018-03-18 19:57:56 -04:00
ctrlSourceViewer . SetActiveAddress ( state . CPU . DebugPC ) ;
2018-02-11 15:58:23 -05:00
ctrlDebuggerCode . UpdateLineColors ( ) ;
if ( UpdateSplitView ( ) ) {
ctrlDebuggerCodeSplit . SetActiveAddress ( state . CPU . DebugPC ) ;
2018-03-18 19:57:56 -04:00
ctrlSourceViewerSplit . SetActiveAddress ( state . CPU . DebugPC ) ;
2018-02-11 15:58:23 -05:00
ctrlDebuggerCodeSplit . 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 ) ;
2018-02-24 11:07:27 -05:00
if ( bringToFront ) {
2017-12-28 16:31:29 -05: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 ) ;
2018-02-24 15:10:01 -05:00
if ( ! _wasPaused & & ! ConfigManager . Config . DebugInfo . BreakOnOpen ) {
2017-08-06 17:52:49 -04:00
ResumeExecution ( ) ;
}
_firstBreak = false ;
2016-12-04 09:37:01 -05:00
}
}
2018-02-11 15:58:23 -05:00
2015-08-02 19:27:02 -04:00
private void ClearActiveStatement ( )
{
ctrlDebuggerCode . ClearActiveAddress ( ) ;
2018-02-11 15:58:23 -05:00
ctrlDebuggerCode . UpdateLineColors ( ) ;
2015-08-09 20:47:50 -04:00
ctrlDebuggerCodeSplit . ClearActiveAddress ( ) ;
2018-02-11 15:58:23 -05:00
ctrlDebuggerCodeSplit . UpdateLineColors ( ) ;
2018-03-18 19:57:56 -04:00
ctrlSourceViewer . ClearActiveAddress ( ) ;
ctrlSourceViewerSplit . ClearActiveAddress ( ) ;
2015-08-02 19:27:02 -04:00
}
2018-02-23 09:28:11 -05:00
public void TogglePause ( )
{
if ( mnuBreak . Enabled ) {
ctrlConsoleStatus . ApplyChanges ( ) ;
2018-02-24 11:07:27 -05:00
InteropEmu . DebugBreakOnScanline ( 241 ) ;
2018-02-23 09:28:11 -05:00
} else {
ResumeExecution ( ) ;
}
}
2016-01-09 13:15:43 -05:00
private void ToggleBreakpoint ( bool toggleEnabled )
2015-07-01 23:17:14 -04:00
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewerActions . ToggleBreakpoint ( toggleEnabled ) ;
2015-08-02 19:27:02 -04:00
}
2016-12-04 09:37:01 -05:00
private void ResumeExecution ( )
2015-07-01 23:17:14 -04:00
{
2018-02-16 18:05:48 -05:00
mnuContinue . Enabled = false ;
mnuBreak . Enabled = true ;
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
}
2018-01-02 14:44:28 -05:00
2018-03-18 19:57:56 -04:00
private void ctrlDebuggerCode_OnShowInSplitView ( ICodeViewer sender , AddressEventArgs args )
2018-01-02 14:44:28 -05:00
{
2018-03-18 19:57:56 -04:00
if ( ! ConfigManager . Config . DebugInfo . SplitView ) {
mnuSplitView . Checked = true ;
ConfigManager . Config . DebugInfo . SplitView = true ;
ConfigManager . ApplyChanges ( ) ;
UpdateDebugger ( false ) ;
}
2018-01-02 14:44:28 -05:00
UInt16 addr = ( UInt16 ) args . Address ;
2018-03-18 19:57:56 -04:00
if ( sender = = ctrlDebuggerCode | | sender = = ctrlSourceViewer ) {
if ( ctrlSourceViewerSplit . Visible ) {
ctrlSourceViewerSplit . ScrollToLineNumber ( addr ) ;
} else {
ctrlDebuggerCodeSplit . ScrollToLineNumber ( addr ) ;
2018-01-02 14:44:28 -05:00
}
} else {
2018-03-18 19:57:56 -04:00
if ( ctrlSourceViewer . Visible ) {
ctrlSourceViewer . ScrollToLineNumber ( addr ) ;
} else {
ctrlDebuggerCode . ScrollToLineNumber ( addr ) ;
}
2018-01-02 14:44:28 -05:00
}
}
2015-07-01 23:17:14 -04:00
2018-03-18 19:57:56 -04:00
private void ctrlDebuggerCode_OnSetNextStatement ( AddressEventArgs args )
2015-08-17 21:59:22 -04:00
{
UInt16 addr = ( UInt16 ) args . Address ;
InteropEmu . DebugSetNextStatement ( addr ) ;
this . UpdateDebugger ( ) ;
}
2018-03-18 19:57:56 -04:00
private void ctrlDebuggerCode_OnSwitchView ( ICodeViewer sender )
{
if ( ctrlDebuggerCode = = sender ) {
ctrlDebuggerCode . Visible = false ;
ctrlSourceViewer . Visible = true ;
if ( ctrlDebuggerCode . CodeViewer . CurrentLine > = 0 ) {
ctrlSourceViewer . ScrollToLineNumber ( ctrlDebuggerCode . CodeViewer . CurrentLine ) ;
}
ctrlSourceViewer . Focus ( ) ;
ctrlSourceViewer . SetConfig ( ConfigManager . Config . DebugInfo . LeftView ) ;
} else if ( ctrlSourceViewer = = sender ) {
ctrlSourceViewer . Visible = false ;
ctrlDebuggerCode . Visible = true ;
if ( ctrlDebuggerCode . CodeViewer . CurrentLine > = 0 ) {
ctrlDebuggerCode . ScrollToLineNumber ( ctrlDebuggerCode . CodeViewer . CurrentLine ) ;
}
ctrlDebuggerCode . Focus ( ) ;
ctrlDebuggerCode . SetConfig ( ConfigManager . Config . DebugInfo . LeftView ) ;
} else if ( ctrlSourceViewerSplit = = sender ) {
ctrlSourceViewerSplit . Visible = false ;
ctrlDebuggerCodeSplit . Visible = true ;
if ( ctrlSourceViewerSplit . CodeViewer . CurrentLine > = 0 ) {
ctrlDebuggerCodeSplit . ScrollToLineNumber ( ctrlSourceViewerSplit . CodeViewer . CurrentLine ) ;
}
ctrlDebuggerCodeSplit . Focus ( ) ;
ctrlDebuggerCodeSplit . SetConfig ( ConfigManager . Config . DebugInfo . RightView ) ;
} else {
ctrlDebuggerCodeSplit . Visible = false ;
ctrlSourceViewerSplit . Visible = true ;
if ( ctrlDebuggerCodeSplit . CodeViewer . CurrentLine > = 0 ) {
ctrlSourceViewerSplit . ScrollToLineNumber ( ctrlDebuggerCodeSplit . CodeViewer . CurrentLine ) ;
}
ctrlSourceViewerSplit . Focus ( ) ;
ctrlSourceViewerSplit . SetConfig ( ConfigManager . Config . DebugInfo . RightView ) ;
}
}
2015-07-01 23:17:14 -04:00
private void mnuFind_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . OpenSearchBox ( ) ;
2015-08-03 21:53:46 -04:00
}
private void mnuFindNext_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . FindNext ( ) ;
2015-08-03 21:53:46 -04:00
}
2015-07-01 23:17:14 -04:00
2015-08-03 21:53:46 -04:00
private void mnuFindPrev_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . 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
}
2018-02-18 22:41:50 -05:00
private void mnuEventViewer_Click ( object sender , EventArgs e )
{
DebugWindowManager . OpenDebugWindow ( DebugWindow . EventViewer ) ;
}
2016-01-10 00:33:33 -05:00
private void BreakpointManager_BreakpointsChanged ( object sender , EventArgs e )
2015-08-02 19:27:02 -04:00
{
2018-02-11 15:58:23 -05:00
ctrlDebuggerCodeSplit . UpdateLineColors ( ) ;
ctrlDebuggerCode . UpdateLineColors ( ) ;
2015-08-02 19:27:02 -04:00
2018-03-18 19:57:56 -04:00
ctrlSourceViewer . RefreshViewer ( ) ;
ctrlSourceViewerSplit . RefreshViewer ( ) ;
2015-08-02 19:27:02 -04:00
}
2018-03-18 19:57:56 -04:00
private void ctrlDebuggerCode_Enter ( object sender , EventArgs e )
2015-08-02 19:27:02 -04:00
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow = ( ICodeViewer ) sender ;
2015-08-02 19:27:02 -04:00
}
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
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . GoToAddress ( ) ;
2015-08-02 22:19:12 -04:00
}
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 ) ;
}
2018-03-03 10:53:38 -05:00
private void mnuGoToProgramCount_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewerActions . ScrollToActiveAddress ( ) ;
2018-03-03 10:53:38 -05:00
}
2016-01-10 09:21:07 -05:00
2015-08-04 19:50:57 -04:00
private void mnuIncreaseFontSize_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . TextZoom + = 10 ;
2015-08-04 19:50:57 -04:00
}
private void mnuDecreaseFontSize_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . TextZoom - = 10 ;
2015-08-04 19:50:57 -04:00
}
private void mnuResetFontSize_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
_lastCodeWindow . CodeViewer . TextZoom = 100 ;
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 ) ;
2018-02-19 23:23:26 -05:00
BreakpointManager . SetBreakpoints ( ) ;
2018-02-24 15:10:01 -05:00
if ( _wasPaused ) {
InteropEmu . SetFlag ( EmulationFlags . Paused , true ) ;
}
2017-08-14 23:44:01 -04:00
InteropEmu . DebugRun ( ) ;
2016-11-26 20:58:27 -05:00
2018-03-18 19:57:56 -04:00
ConfigManager . Config . DebugInfo . FontFamily = ctrlDebuggerCode . CodeViewer . BaseFont . FontFamily . Name ;
ConfigManager . Config . DebugInfo . FontStyle = ctrlDebuggerCode . CodeViewer . BaseFont . Style ;
ConfigManager . Config . DebugInfo . FontSize = ctrlDebuggerCode . CodeViewer . BaseFont . Size ;
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
}
2018-01-01 23:23:18 -05:00
private void mnuApuViewer_Click ( object sender , EventArgs e )
{
DebugWindowManager . OpenDebugWindow ( DebugWindow . ApuViewer ) ;
}
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 )
{
2017-12-28 16:31:29 -05:00
UpdateDebugger ( true , false ) ;
2016-11-26 17:48:11 -05:00
}
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 ) {
2018-02-10 21:23:22 -05:00
int relAddress = bp . GetRelativeAddress ( ) ;
if ( relAddress > = 0 ) {
_lastCodeWindow . ScrollToLineNumber ( relAddress ) ;
}
2017-08-03 21:30:44 -04:00
}
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
2018-03-06 20:34:15 -05:00
private void mnuCopyAddresses_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . CopyAddresses = mnuCopyAddresses . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void mnuCopyByteCode_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . CopyByteCode = mnuCopyByteCode . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2018-03-22 18:59:00 -04:00
private void mnuCopyComments_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . CopyComments = mnuCopyComments . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2018-03-06 20:34:15 -05:00
2018-03-03 13:11:45 -05:00
private void mnuHidePauseIcon_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . HidePauseIcon = mnuHidePauseIcon . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-06-05 10:26:05 -04:00
private void mnuPpuPartialDraw_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . PpuPartialDraw = mnuPpuPartialDraw . Checked ;
ConfigManager . ApplyChanges ( ) ;
2018-02-16 20:05:15 -05:00
mnuPpuShowPreviousFrame . Enabled = mnuPpuPartialDraw . Checked ;
2016-06-05 10:26:05 -04:00
}
2016-11-19 19:21:28 -05:00
2018-02-16 20:05:15 -05:00
private void mnuShowPreviousFrame_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . PpuShowPreviousFrame = mnuPpuShowPreviousFrame . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
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 ) ;
}
2018-02-16 18:05:48 -05:00
private void mnuShowToolbar_Click ( object sender , EventArgs e )
{
tsToolbar . Visible = mnuShowToolbar . Checked ;
ConfigManager . Config . DebugInfo . ShowToolbar = mnuShowToolbar . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
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 ( ) ;
}
2018-01-02 11:11:50 -05:00
private void mnuShowCodePreview_CheckedChanged ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . ShowCodePreview = mnuShowCodePreview . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
2016-09-05 16:48:20 -04:00
2018-01-02 22:32:17 -05:00
private void mnuShowOpCodeTooltips_CheckedChanged ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . ShowOpCodeTooltips = mnuShowOpCodeTooltips . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
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
}
2018-02-20 21:59:56 -05:00
private void mnuBreakOnCrash_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BreakOnCrash = mnuBreakOnCrash . Checked ;
ConfigManager . ApplyChanges ( ) ;
DebugInfo . ApplyConfig ( ) ;
}
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
}
2018-02-24 11:07:27 -05:00
private void mnuBringToFrontOnPause_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BringToFrontOnPause = mnuBringToFrontOnPause . Checked ;
ConfigManager . ApplyChanges ( ) ;
}
private void mnuBringToFrontOnBreak_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . BringToFrontOnBreak = mnuBringToFrontOnBreak . 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 ( ) ;
}
2018-02-14 21:09:43 -05:00
private void mnuShowMemoryValues_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . ShowMemoryValuesInCodeWindow = mnuShowMemoryValues . Checked ;
ConfigManager . ApplyChanges ( ) ;
ctrlDebuggerCode . ShowMemoryValues = mnuShowMemoryValues . Checked ;
ctrlDebuggerCodeSplit . ShowMemoryValues = mnuShowMemoryValues . Checked ;
}
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 ) ;
2017-12-28 16:31:29 -05:00
UpdateDebugger ( false , false ) ;
2016-11-21 22:34:47 -05:00
}
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 ( ) ;
2018-03-03 15:40:11 -05:00
UpdateWorkspace ( ) ;
UpdateDebugger ( false ) ;
}
}
private void mnuResetLabels_Click ( object sender , EventArgs e )
{
if ( MessageBox . Show ( "This operation will reset labels to their default state." + Environment . NewLine + "Are you sure?" , "" , MessageBoxButtons . OKCancel , MessageBoxIcon . Warning ) = = DialogResult . OK ) {
2016-11-25 21:05:07 -05:00
LabelManager . ResetLabels ( ) ;
2018-03-03 15:40:11 -05:00
if ( ! ConfigManager . Config . DebugInfo . DisableDefaultLabels ) {
LabelManager . SetDefaultLabels ( InteropEmu . GetRomInfo ( ) . MapperId ) ;
}
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 {
2018-03-18 19:57:56 -04:00
ImportDbgFile ( ofd . FileName , false ) ;
2017-08-17 20:12:42 -04:00
}
}
}
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 ( ) ;
}
}
2018-03-15 18:34:00 -04:00
private void mnuBreakOn_Click ( object sender , EventArgs e )
{
using ( frmBreakOn frm = new frmBreakOn ( ) ) {
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
2018-01-03 18:48:16 -05:00
private void UpdateDisassembleFlags ( )
2016-12-05 23:35:07 -05:00
{
ConfigManager . ApplyChanges ( ) ;
UpdateDebuggerFlags ( ) ;
2017-08-21 23:11:14 -04:00
UpdateDebugger ( false ) ;
2016-12-05 23:35:07 -05:00
}
2018-01-03 18:48:16 -05:00
private void mnuDisassembleVerifiedData_Click ( object sender , EventArgs e )
2016-12-05 23:35:07 -05:00
{
2018-01-03 18:48:16 -05:00
ConfigManager . Config . DebugInfo . DisassembleVerifiedData = mnuDisassembleVerifiedData . Checked ;
UpdateDisassembleFlags ( ) ;
2016-12-05 23:35:07 -05:00
}
2018-01-03 18:48:16 -05:00
private void mnuDisassembleUnidentifiedData_Click ( object sender , EventArgs e )
2016-12-05 23:35:07 -05:00
{
2018-01-03 18:48:16 -05:00
ConfigManager . Config . DebugInfo . DisassembleUnidentifiedData = mnuDisassembleUnidentifiedData . Checked ;
UpdateDisassembleFlags ( ) ;
2016-12-05 23:35:07 -05:00
}
2018-01-03 18:48:16 -05:00
private void mnuShowVerifiedData_Click ( object sender , EventArgs e )
2016-12-05 23:35:07 -05:00
{
2018-01-03 18:48:16 -05:00
ConfigManager . Config . DebugInfo . ShowVerifiedData = mnuShowVerifiedData . Checked ;
UpdateDisassembleFlags ( ) ;
}
private void mnuShowUnidentifiedData_Click ( object sender , EventArgs e )
{
ConfigManager . Config . DebugInfo . ShowUnidentifiedData = mnuShowUnidentifiedData . Checked ;
UpdateDisassembleFlags ( ) ;
2016-12-05 23:35:07 -05:00
}
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 ) ;
}
}
}
2018-01-01 12:09:33 -05:00
private void SaveRomWithCdlStripping ( CdlStripFlag cdlStripFlag )
{
using ( SaveFileDialog sfd = new SaveFileDialog ( ) ) {
sfd . SetFilter ( "NES roms (*.nes)|*.nes" ) ;
sfd . FileName = InteropEmu . GetRomInfo ( ) . GetRomName ( ) + ( cdlStripFlag = = CdlStripFlag . StripUnused ? "_StripUnusedData.nes" : "_StripUsedData.nes" ) ;
sfd . InitialDirectory = ConfigManager . DebuggerFolder ;
if ( sfd . ShowDialog ( ) = = DialogResult . OK ) {
InteropEmu . DebugSaveRomToDisk ( sfd . FileName , false , null , cdlStripFlag ) ;
}
}
}
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 )
{
2018-03-18 19:57:56 -04:00
this . _lastCodeWindow . CodeViewerActions . UpdateContextMenuItemVisibility ( false ) ;
List < ToolStripItem > items = new List < ToolStripItem > ( ) ;
foreach ( ToolStripItem item in this . _lastCodeWindow . CodeViewerActions . contextMenu . Items ) {
items . Add ( item ) ;
}
mnuCode . DropDownItems . AddRange ( items . ToArray ( ) ) ;
2017-03-11 00:56:00 -05:00
}
private void mnuCode_DropDownClosed ( object sender , EventArgs e )
{
List < ToolStripItem > items = new List < ToolStripItem > ( ) ;
foreach ( ToolStripItem item in mnuCode . DropDownItems ) {
items . Add ( item ) ;
}
2018-03-18 19:57:56 -04:00
this . _lastCodeWindow . CodeViewerActions . contextMenu . Items . AddRange ( items . ToArray ( ) ) ;
2017-03-11 00:56:00 -05:00
}
2018-01-01 12:09:33 -05:00
private void mnuCdlStripUsedData_Click ( object sender , EventArgs e )
{
SaveRomWithCdlStripping ( CdlStripFlag . StripUsed ) ;
}
private void mnuCdlStripUnusedData_Click ( object sender , EventArgs e )
{
SaveRomWithCdlStripping ( CdlStripFlag . StripUnused ) ;
}
2018-01-03 18:48:16 -05:00
private void mnuConfigureColors_Click ( object sender , EventArgs e )
{
using ( frmDebuggerColors frm = new frmDebuggerColors ( ) ) {
if ( frm . ShowDialog ( this , this ) = = DialogResult . OK ) {
this . UpdateDebugger ( false , true ) ;
}
}
}
2018-03-03 10:41:59 -05:00
private void mnuSelectFont_Click ( object sender , EventArgs e )
{
2018-03-18 19:57:56 -04:00
ctrlDebuggerCode . CodeViewer . BaseFont = FontDialogHelper . SelectFont ( ctrlDebuggerCode . CodeViewer . BaseFont ) ;
ctrlDebuggerCodeSplit . CodeViewer . BaseFont = ctrlDebuggerCode . CodeViewer . BaseFont ;
ctrlSourceViewer . CodeViewer . BaseFont = ctrlDebuggerCode . CodeViewer . BaseFont ;
ctrlSourceViewerSplit . CodeViewer . BaseFont = ctrlDebuggerCode . CodeViewer . BaseFont ;
2018-03-03 10:41:59 -05:00
}
2018-03-10 09:58:24 -05:00
private void mnuPreferences_Click ( object sender , EventArgs e )
{
using ( frmDbgPreferences frm = new frmDbgPreferences ( ) ) {
frm . ShowDialog ( sender , this ) ;
}
}
2018-03-27 19:46:15 -04:00
private void mnuImportSettings_Click ( object sender , EventArgs e )
{
using ( frmImportSettings frm = new frmImportSettings ( ) ) {
frm . ShowDialog ( sender , this ) ;
}
}
2015-07-01 23:17:14 -04:00
}
}