2018-02-18 22:41:50 -05:00
|
|
|
|
using Mesen.GUI.Config;
|
2019-11-20 19:12:08 -05:00
|
|
|
|
using Mesen.GUI.Debugger.Controls;
|
2018-02-18 22:41:50 -05:00
|
|
|
|
using Mesen.GUI.Forms;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace Mesen.GUI.Debugger
|
|
|
|
|
{
|
2019-11-20 19:12:08 -05:00
|
|
|
|
public partial class frmEventViewer : BaseForm, IRefresh
|
2018-02-18 22:41:50 -05:00
|
|
|
|
{
|
2019-11-20 19:12:08 -05:00
|
|
|
|
private WindowRefreshManager _refreshManager;
|
2018-02-18 22:41:50 -05:00
|
|
|
|
private InteropEmu.NotificationListener _notifListener;
|
2019-11-13 22:25:23 -05:00
|
|
|
|
private EntityBinder _binder = new EntityBinder();
|
2018-06-14 20:05:07 -04:00
|
|
|
|
private bool _inListViewTab = false;
|
2019-12-23 14:19:21 -05:00
|
|
|
|
private DebugInfo _config;
|
2019-11-20 19:12:08 -05:00
|
|
|
|
|
|
|
|
|
public ctrlScanlineCycleSelect ScanlineCycleSelect => null;
|
2018-02-18 22:41:50 -05:00
|
|
|
|
|
|
|
|
|
public frmEventViewer()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2019-12-23 14:19:21 -05:00
|
|
|
|
_config = ConfigManager.Config.DebugInfo;
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
|
|
|
|
if(!this.DesignMode) {
|
2019-12-23 14:19:21 -05:00
|
|
|
|
_binder.Entity = _config;
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
2019-12-23 14:19:21 -05:00
|
|
|
|
mnuRefreshOnBreak.Checked = _config.EventViewerRefreshOnBreak;
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2000), chkWrite2000);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2001), chkWrite2001);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2003), chkWrite2003);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2004), chkWrite2004);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2005), chkWrite2005);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2006), chkWrite2006);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuWrite2007), chkWrite2007);
|
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuRead2002), chkRead2002);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuRead2004), chkRead2004);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPpuRead2007), chkRead2007);
|
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowIrq), chkShowIrq);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowNmi), chkShowNmi);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowSpriteZeroHit), chkShowSpriteZero);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowMapperRegisterWrites), chkShowMapperRegisterWrites);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowMapperRegisterReads), chkShowMapperRegisterReads);
|
2020-04-24 18:17:03 -04:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowApuRegisterWrites), chkShowApuRegisterWrites);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowApuRegisterReads), chkShowApuRegisterReads);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowControlRegisterWrites), chkShowControlRegisterWrites);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowControlRegisterReads), chkShowControlRegisterReads);
|
2019-11-13 22:50:52 -05:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowDmcDmaReads), chkShowDmcDmaRead);
|
2019-11-13 22:25:23 -05:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowMarkedBreakpoints), chkBreakpoints);
|
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2000Color), picWrite2000);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2001Color), picWrite2001);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2003Color), picWrite2003);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2004Color), picWrite2004);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2005Color), picWrite2005);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2006Color), picWrite2006);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterWrite2007Color), picWrite2007);
|
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterRead2002Color), picRead2002);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterRead2004Color), picRead2004);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerPpuRegisterRead2007Color), picRead2007);
|
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerMapperRegisterWriteColor), picMapperWrite);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerMapperRegisterReadColor), picMapperRead);
|
2020-04-24 18:17:03 -04:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerApuRegisterWriteColor), picApuWrite);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerApuRegisterReadColor), picApuRead);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerControlRegisterWriteColor), picControlWrite);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerControlRegisterReadColor), picControlRead);
|
2019-11-13 22:25:23 -05:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerNmiColor), picNmi);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerIrqColor), picIrq);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerSpriteZeroHitColor), picSpriteZeroHit);
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerBreakpointColor), picBreakpoint);
|
2019-11-13 22:50:52 -05:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerDmcDmaReadColor), picDmcDmaRead);
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowPreviousFrameEvents), chkShowPreviousFrameEvents);
|
2019-11-19 22:28:45 -05:00
|
|
|
|
_binder.AddBinding(nameof(DebugInfo.EventViewerShowNtscBorders), chkShowNtscBorders);
|
2019-02-02 00:25:47 -05:00
|
|
|
|
|
2019-12-23 14:19:21 -05:00
|
|
|
|
RestoreLocation(_config.EventViewerLocation, _config.EventViewerSize);
|
2018-02-19 23:23:26 -05:00
|
|
|
|
|
2019-12-23 14:19:21 -05:00
|
|
|
|
mnuAutoRefresh.Checked = _config.EventViewerAutoRefresh;
|
2019-11-20 19:12:08 -05:00
|
|
|
|
mnuAutoRefreshLow.Click += (s, evt) => _refreshManager.AutoRefreshSpeed = RefreshSpeed.Low;
|
|
|
|
|
mnuAutoRefreshNormal.Click += (s, evt) => _refreshManager.AutoRefreshSpeed = RefreshSpeed.Normal;
|
|
|
|
|
mnuAutoRefreshHigh.Click += (s, evt) => _refreshManager.AutoRefreshSpeed = RefreshSpeed.High;
|
|
|
|
|
mnuAutoRefreshSpeed.DropDownOpening += (s, evt) => UpdateRefreshSpeedMenu();
|
|
|
|
|
|
|
|
|
|
this.RefreshData();
|
|
|
|
|
_binder.UpdateUI();
|
|
|
|
|
this.RefreshViewer();
|
|
|
|
|
|
2020-01-24 22:37:34 -05:00
|
|
|
|
_refreshManager = new WindowRefreshManager(this);
|
|
|
|
|
_refreshManager.AutoRefresh = _config.EventViewerAutoRefresh;
|
|
|
|
|
_refreshManager.AutoRefreshSpeed = _config.EventViewerAutoRefreshSpeed;
|
|
|
|
|
|
|
|
|
|
this._notifListener = new InteropEmu.NotificationListener(_config.DebugConsoleId);
|
|
|
|
|
this._notifListener.OnNotification += this._notifListener_OnNotification;
|
|
|
|
|
|
2019-11-19 22:28:45 -05:00
|
|
|
|
InitShortcuts();
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-19 22:28:45 -05:00
|
|
|
|
private void InitShortcuts()
|
|
|
|
|
{
|
2019-11-20 19:12:08 -05:00
|
|
|
|
mnuRefresh.InitShortcut(this, nameof(DebuggerShortcutsConfig.Refresh));
|
2019-11-19 22:28:45 -05:00
|
|
|
|
mnuZoomIn.InitShortcut(this, nameof(DebuggerShortcutsConfig.ZoomIn));
|
|
|
|
|
mnuZoomOut.InitShortcut(this, nameof(DebuggerShortcutsConfig.ZoomOut));
|
|
|
|
|
|
|
|
|
|
mnuZoomIn.Click += (s, evt) => ctrlEventViewerPpuView.ZoomIn();
|
|
|
|
|
mnuZoomOut.Click += (s, evt) => ctrlEventViewerPpuView.ZoomOut();
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-18 22:41:50 -05:00
|
|
|
|
protected override void OnFormClosing(FormClosingEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
base.OnFormClosing(e);
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
2018-02-18 22:41:50 -05:00
|
|
|
|
this._notifListener.OnNotification -= this._notifListener_OnNotification;
|
2019-11-20 19:12:08 -05:00
|
|
|
|
_notifListener?.Dispose();
|
|
|
|
|
_refreshManager?.Dispose();
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
|
|
|
|
_binder.UpdateObject();
|
2019-12-23 14:19:21 -05:00
|
|
|
|
_config.EventViewerAutoRefresh = _refreshManager.AutoRefresh;
|
|
|
|
|
_config.EventViewerAutoRefreshSpeed = _refreshManager.AutoRefreshSpeed;
|
|
|
|
|
_config.EventViewerLocation = this.WindowState != FormWindowState.Normal ? this.RestoreBounds.Location : this.Location;
|
|
|
|
|
_config.EventViewerSize = this.WindowState != FormWindowState.Normal ? this.RestoreBounds.Size : this.Size;
|
|
|
|
|
ConfigManager.Config.DebugInfo = _config;
|
2019-11-13 22:25:23 -05:00
|
|
|
|
ConfigManager.ApplyChanges();
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
2019-11-19 22:28:45 -05:00
|
|
|
|
|
2018-02-18 22:41:50 -05:00
|
|
|
|
private void _notifListener_OnNotification(InteropEmu.NotificationEventArgs e)
|
|
|
|
|
{
|
2018-03-15 20:24:08 -04:00
|
|
|
|
switch(e.NotificationType) {
|
|
|
|
|
case InteropEmu.ConsoleNotificationType.CodeBreak:
|
|
|
|
|
case InteropEmu.ConsoleNotificationType.GamePaused:
|
2019-12-23 14:19:21 -05:00
|
|
|
|
if(_config.EventViewerRefreshOnBreak) {
|
2019-11-20 19:12:08 -05:00
|
|
|
|
this.RefreshData();
|
2018-03-15 20:24:08 -04:00
|
|
|
|
this.BeginInvoke((MethodInvoker)(() => this.RefreshViewer()));
|
|
|
|
|
}
|
|
|
|
|
break;
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-20 19:12:08 -05:00
|
|
|
|
public void RefreshData()
|
2018-02-18 22:41:50 -05:00
|
|
|
|
{
|
2018-06-14 20:05:07 -04:00
|
|
|
|
if(_inListViewTab) {
|
|
|
|
|
ctrlEventViewerListView.GetData();
|
|
|
|
|
} else {
|
|
|
|
|
ctrlEventViewerPpuView.GetData();
|
|
|
|
|
}
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
|
|
|
|
|
2019-11-20 19:12:08 -05:00
|
|
|
|
public void RefreshViewer()
|
2018-02-18 22:41:50 -05:00
|
|
|
|
{
|
2019-11-13 22:25:23 -05:00
|
|
|
|
if(_binder.Updating) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-24 17:26:03 -04:00
|
|
|
|
//Update target for entitybinder (to prevent issues after rejecting changes in another form)
|
|
|
|
|
_config = ConfigManager.Config.DebugInfo;
|
|
|
|
|
_binder.Entity = _config;
|
2019-11-13 22:25:23 -05:00
|
|
|
|
_binder.UpdateObject();
|
2018-02-18 22:41:50 -05:00
|
|
|
|
ctrlEventViewerPpuView.RefreshViewer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void mnuClose_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tabMain_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2018-06-14 20:05:07 -04:00
|
|
|
|
_inListViewTab = tabMain.SelectedTab == tpgListView;
|
2019-11-20 19:12:08 -05:00
|
|
|
|
RefreshData();
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
|
|
|
|
|
2018-03-15 17:40:58 -04:00
|
|
|
|
private void mnuRefreshOnBreak_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-12-23 14:19:21 -05:00
|
|
|
|
_config.EventViewerRefreshOnBreak = this.mnuRefreshOnBreak.Checked;
|
2018-03-15 17:40:58 -04:00
|
|
|
|
}
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
2018-07-26 21:29:56 -04:00
|
|
|
|
private void chkShowPreviousFrameEvents_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2019-12-23 14:19:21 -05:00
|
|
|
|
_config.EventViewerShowPreviousFrameEvents = chkShowPreviousFrameEvents.Checked;
|
2018-07-26 21:29:56 -04:00
|
|
|
|
if(InteropEmu.DebugIsExecutionStopped()) {
|
2019-11-20 19:12:08 -05:00
|
|
|
|
this.RefreshData();
|
2018-07-26 21:29:56 -04:00
|
|
|
|
this.RefreshViewer();
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-11-13 22:25:23 -05:00
|
|
|
|
|
|
|
|
|
private void picColor_BackColorChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RefreshViewer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void chkShowHide_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RefreshViewer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void mnuResetColors_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
picWrite2000.BackColor = ColorTranslator.FromHtml("#FF5E5E");
|
|
|
|
|
picWrite2001.BackColor = ColorTranslator.FromHtml("#8E33FF");
|
|
|
|
|
picWrite2003.BackColor = ColorTranslator.FromHtml("#FF84E0");
|
|
|
|
|
picWrite2004.BackColor = ColorTranslator.FromHtml("#FAFF39");
|
|
|
|
|
picWrite2005.BackColor = ColorTranslator.FromHtml("#2EFF28");
|
|
|
|
|
picWrite2006.BackColor = ColorTranslator.FromHtml("#3D2DFF");
|
|
|
|
|
picWrite2007.BackColor = ColorTranslator.FromHtml("#FF060D");
|
|
|
|
|
|
|
|
|
|
picRead2002.BackColor = ColorTranslator.FromHtml("#FF8224");
|
|
|
|
|
picRead2004.BackColor = ColorTranslator.FromHtml("#24A672");
|
|
|
|
|
picRead2007.BackColor = ColorTranslator.FromHtml("#6AF0FF");
|
|
|
|
|
|
|
|
|
|
picMapperRead.BackColor = ColorTranslator.FromHtml("#C92929");
|
|
|
|
|
picMapperWrite.BackColor = ColorTranslator.FromHtml("#007597");
|
|
|
|
|
|
2020-04-24 18:17:03 -04:00
|
|
|
|
picApuWrite.BackColor = ColorTranslator.FromHtml("#977500");
|
|
|
|
|
picApuRead.BackColor = ColorTranslator.FromHtml("#F47522");
|
|
|
|
|
picControlWrite.BackColor = ColorTranslator.FromHtml("#009775");
|
|
|
|
|
picControlRead.BackColor = ColorTranslator.FromHtml("#29F929");
|
|
|
|
|
|
2019-11-13 22:25:23 -05:00
|
|
|
|
picNmi.BackColor = ColorTranslator.FromHtml("#ABADAC");
|
|
|
|
|
picIrq.BackColor = ColorTranslator.FromHtml("#F9FEAC");
|
|
|
|
|
picSpriteZeroHit.BackColor = ColorTranslator.FromHtml("#9F93C6");
|
|
|
|
|
picBreakpoint.BackColor = ColorTranslator.FromHtml("#1898E4");
|
2019-11-13 22:50:52 -05:00
|
|
|
|
picDmcDmaRead.BackColor = ColorTranslator.FromHtml("#A9FEFC");
|
2019-11-13 22:25:23 -05:00
|
|
|
|
}
|
2019-11-20 19:12:08 -05:00
|
|
|
|
|
|
|
|
|
private void mnuRefresh_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RefreshData();
|
|
|
|
|
RefreshViewer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void mnuAutoRefresh_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
_refreshManager.AutoRefresh = mnuAutoRefresh.Checked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UpdateRefreshSpeedMenu()
|
|
|
|
|
{
|
|
|
|
|
mnuAutoRefreshLow.Checked = _refreshManager.AutoRefreshSpeed == RefreshSpeed.Low;
|
|
|
|
|
mnuAutoRefreshNormal.Checked = _refreshManager.AutoRefreshSpeed == RefreshSpeed.Normal;
|
|
|
|
|
mnuAutoRefreshHigh.Checked = _refreshManager.AutoRefreshSpeed == RefreshSpeed.High;
|
|
|
|
|
}
|
2018-02-18 22:41:50 -05:00
|
|
|
|
}
|
|
|
|
|
}
|