Debugger: Event Viewer - Add list view (+ misc event viewer bug fixes)

This commit is contained in:
Sour 2019-12-10 19:13:30 -05:00
parent ac7c2e9953
commit a1853f15bc
17 changed files with 1484 additions and 726 deletions

View file

@ -9,7 +9,7 @@ class MemoryManager;
class DmaController final : public ISerializable
{
private:
static constexpr uint8_t HdmaChannelFlag = 0x80;
static constexpr uint8_t HdmaChannelFlag = 0x40;
bool _needToProcess = false;
bool _hdmaPending = false;

View file

@ -26,7 +26,7 @@ EventManager::~EventManager()
void EventManager::AddEvent(DebugEventType type, MemoryOperationInfo &operation, int32_t breakpointId)
{
DebugEventInfo evt;
DebugEventInfo evt = {};
evt.Type = type;
evt.Operation = operation;
evt.Scanline = _ppu->GetScanline();
@ -35,7 +35,9 @@ void EventManager::AddEvent(DebugEventType type, MemoryOperationInfo &operation,
if(operation.Type == MemoryOperationType::DmaRead || operation.Type == MemoryOperationType::DmaWrite) {
evt.DmaChannel = _dmaController->GetActiveChannel();
evt.DmaChannelInfo = _dmaController->GetChannelConfig(evt.DmaChannel);
evt.DmaChannelInfo = _dmaController->GetChannelConfig(evt.DmaChannel & 0x07);
} else {
evt.DmaChannel = -1;
}
CpuState state = _cpu->GetState();
@ -50,6 +52,8 @@ void EventManager::AddEvent(DebugEventType type)
evt.Type = type;
evt.Scanline = _ppu->GetScanline();
evt.Cycle = _ppu->GetCycle();
evt.BreakpointId = -1;
evt.DmaChannel = -1;
CpuState state = _cpu->GetState();
evt.ProgramCounter = (state.K << 16) | state.PC;
@ -57,13 +61,11 @@ void EventManager::AddEvent(DebugEventType type)
_debugEvents.push_back(evt);
}
void EventManager::GetEvents(DebugEventInfo *eventArray, uint32_t &maxEventCount, bool getPreviousFrameData)
void EventManager::GetEvents(DebugEventInfo *eventArray, uint32_t &maxEventCount)
{
DebugBreakHelper breakHelper(_debugger);
vector<DebugEventInfo> &events = getPreviousFrameData ? _prevDebugEvents : _debugEvents;
uint32_t eventCount = std::min(maxEventCount, (uint32_t)events.size());
memcpy(eventArray, events.data(), eventCount * sizeof(DebugEventInfo));
auto lock = _lock.AcquireSafe();
uint32_t eventCount = std::min(maxEventCount, (uint32_t)_sentEvents.size());
memcpy(eventArray, _sentEvents.data(), eventCount * sizeof(DebugEventInfo));
maxEventCount = eventCount;
}
@ -82,10 +84,11 @@ DebugEventInfo EventManager::GetEvent(uint16_t scanline, uint16_t cycle, EventVi
return empty;
}
uint32_t EventManager::GetEventCount(bool getPreviousFrameData)
uint32_t EventManager::GetEventCount(EventViewerDisplayOptions options)
{
DebugBreakHelper breakHelper(_debugger);
return (uint32_t)(getPreviousFrameData ? _prevDebugEvents.size() : _debugEvents.size());
auto lock = _lock.AcquireSafe();
FilterEvents(options);
return (uint32_t)_sentEvents.size();
}
void EventManager::ClearFrameEvents()
@ -94,47 +97,81 @@ void EventManager::ClearFrameEvents()
_debugEvents.clear();
}
void EventManager::FilterEvents(EventViewerDisplayOptions &options)
{
auto lock = _lock.AcquireSafe();
_sentEvents.clear();
vector<DebugEventInfo> events = _snapshot;
if(options.ShowPreviousFrameEvents && _snapshotScanline != 0) {
uint32_t key = (_snapshotScanline << 9) + _snapshotCycle;
for(DebugEventInfo &evt : _prevDebugEvents) {
uint32_t evtKey = (evt.Scanline << 9) + evt.Cycle;
if(evtKey > key) {
events.push_back(evt);
}
}
}
for(DebugEventInfo &evt : events) {
bool isWrite = evt.Operation.Type == MemoryOperationType::Write || evt.Operation.Type == MemoryOperationType::DmaWrite;
bool isDma = evt.Operation.Type == MemoryOperationType::DmaWrite || evt.Operation.Type == MemoryOperationType::DmaRead;
bool showEvent = false;
uint32_t color = 0;
switch(evt.Type) {
case DebugEventType::Breakpoint: showEvent = options.ShowMarkedBreakpoints;break;
case DebugEventType::Irq: showEvent = options.ShowIrq; break;
case DebugEventType::Nmi: showEvent = options.ShowNmi; break;
case DebugEventType::Register:
if(isDma && !options.ShowDmaChannels[evt.DmaChannel & 0x07]) {
showEvent = false;
break;
}
uint16_t reg = evt.Operation.Address & 0xFFFF;
if(reg <= 0x213F) {
showEvent = isWrite ? options.ShowPpuRegisterWrites : options.ShowPpuRegisterReads;
} else if(reg <= 0x217F) {
showEvent = isWrite ? options.ShowApuRegisterWrites : options.ShowApuRegisterReads;
} else if(reg <= 0x2183) {
showEvent = isWrite ? options.ShowWorkRamRegisterWrites : options.ShowWorkRamRegisterReads;
} else if(reg >= 0x4000) {
showEvent = isWrite ? options.ShowCpuRegisterWrites : options.ShowCpuRegisterReads;
}
break;
}
if(showEvent) {
_sentEvents.push_back(evt);
}
}
}
void EventManager::DrawEvent(DebugEventInfo &evt, bool drawBackground, uint32_t *buffer, EventViewerDisplayOptions &options)
{
bool isWrite = evt.Operation.Type == MemoryOperationType::Write || evt.Operation.Type == MemoryOperationType::DmaWrite;
bool isDma = evt.Operation.Type == MemoryOperationType::DmaWrite || evt.Operation.Type == MemoryOperationType::DmaRead;
bool showEvent = false;
uint32_t color = 0;
switch(evt.Type) {
case DebugEventType::Breakpoint: showEvent = options.ShowMarkedBreakpoints; color = options.BreakpointColor; break;
case DebugEventType::Irq: showEvent = options.ShowIrq; color = options.IrqColor; break;
case DebugEventType::Nmi: showEvent = options.ShowNmi; color = options.NmiColor; break;
case DebugEventType::Breakpoint: color = options.BreakpointColor; break;
case DebugEventType::Irq: color = options.IrqColor; break;
case DebugEventType::Nmi: color = options.NmiColor; break;
case DebugEventType::Register:
if(isDma && !options.ShowDmaChannels[evt.DmaChannel]) {
showEvent = false;
break;
}
uint16_t reg = evt.Operation.Address & 0xFFFF;
if(reg <= 0x213F) {
showEvent = isWrite ? options.ShowPpuRegisterWrites : options.ShowPpuRegisterReads;
color = isWrite ? options.PpuRegisterWriteColor : options.PpuRegisterReadColor;
} else if(reg <= 0x217F) {
showEvent = isWrite ? options.ShowApuRegisterWrites : options.ShowApuRegisterReads;
color = isWrite ? options.ApuRegisterWriteColor : options.ApuRegisterReadColor;
} else if(reg <= 0x2183) {
showEvent = isWrite ? options.ShowWorkRamRegisterWrites : options.ShowWorkRamRegisterReads;
color = isWrite ? options.WorkRamRegisterWriteColor : options.WorkRamRegisterReadColor;
} else if(reg >= 0x4000) {
showEvent = isWrite ? options.ShowCpuRegisterWrites : options.ShowCpuRegisterReads;
color = isWrite ? options.CpuRegisterWriteColor : options.CpuRegisterReadColor;
}
break;
}
if(!showEvent) {
return;
}
if(drawBackground){
color = 0xFF000000 | ((color >> 1) & 0x7F7F7F);
} else {
_sentEvents.push_back(evt);
color |= 0xFF000000;
}
@ -180,16 +217,8 @@ uint32_t EventManager::TakeEventSnapshot(EventViewerDisplayOptions options)
}
_snapshot = _debugEvents;
_snapshotScanline = _ppu->GetRealScanline();
if(options.ShowPreviousFrameEvents && scanline != 0) {
for(DebugEventInfo &evt : _prevDebugEvents) {
uint32_t evtKey = (evt.Scanline << 9) + evt.Cycle;
if(evtKey > key) {
_snapshot.push_back(evt);
}
}
}
_snapshotScanline = scanline;
_snapshotCycle = cycle;
_scanlineCount = _ppu->GetVblankEndScanline() + 1;
return _scanlineCount;
}
@ -197,7 +226,6 @@ uint32_t EventManager::TakeEventSnapshot(EventViewerDisplayOptions options)
void EventManager::GetDisplayBuffer(uint32_t *buffer, EventViewerDisplayOptions options)
{
auto lock = _lock.AcquireSafe();
_sentEvents.clear();
for(int i = 0; i < 340 * 2 * (int)_scanlineCount * 2; i++) {
buffer[i] = 0xFF555555;
@ -226,10 +254,11 @@ void EventManager::GetDisplayBuffer(uint32_t *buffer, EventViewerDisplayOptions
}
}
for(DebugEventInfo &evt : _snapshot) {
FilterEvents(options);
for(DebugEventInfo &evt : _sentEvents) {
DrawEvent(evt, true, buffer, options);
}
for(DebugEventInfo &evt : _snapshot) {
for(DebugEventInfo &evt : _sentEvents) {
DrawEvent(evt, false, buffer, options);
}
}

View file

@ -25,6 +25,7 @@ private:
vector<DebugEventInfo> _snapshot;
uint16_t _snapshotScanline;
uint16_t _snapshotCycle;
SimpleLock _lock;
bool _overscanMode = false;
@ -33,6 +34,7 @@ private:
uint16_t *_ppuBuffer;
void DrawEvent(DebugEventInfo &evt, bool drawBackground, uint32_t *buffer, EventViewerDisplayOptions &options);
void FilterEvents(EventViewerDisplayOptions &options);
public:
EventManager(Debugger *debugger, Cpu *cpu, Ppu *ppu, DmaController *dmaController);
@ -41,8 +43,8 @@ public:
void AddEvent(DebugEventType type, MemoryOperationInfo &operation, int32_t breakpointId = -1);
void AddEvent(DebugEventType type);
void GetEvents(DebugEventInfo *eventArray, uint32_t &maxEventCount, bool getPreviousFrameData);
uint32_t GetEventCount(bool getPreviousFrameData);
void GetEvents(DebugEventInfo *eventArray, uint32_t &maxEventCount);
uint32_t GetEventCount(EventViewerDisplayOptions options);
void ClearFrameEvents();
uint32_t TakeEventSnapshot(EventViewerDisplayOptions options);
@ -66,7 +68,7 @@ struct DebugEventInfo
uint16_t Scanline;
uint16_t Cycle;
int16_t BreakpointId;
uint8_t DmaChannel;
int8_t DmaChannel;
DmaChannelConfig DmaChannelInfo;
};

View file

@ -86,8 +86,8 @@ extern "C"
DllExport void __stdcall GetSpritePreview(GetSpritePreviewOptions options, PpuState state, uint8_t* vram, uint8_t *oamRam, uint8_t *cgram, uint32_t *buffer) { GetDebugger()->GetPpuTools()->GetSpritePreview(options, state, vram, oamRam, cgram, buffer); }
DllExport void __stdcall SetViewerUpdateTiming(uint32_t viewerId, uint16_t scanline, uint16_t cycle) { GetDebugger()->GetPpuTools()->SetViewerUpdateTiming(viewerId, scanline, cycle); }
DllExport void __stdcall GetDebugEvents(DebugEventInfo *infoArray, uint32_t &maxEventCount, bool getPreviousFrameData) { GetDebugger()->GetEventManager()->GetEvents(infoArray, maxEventCount, getPreviousFrameData); }
DllExport uint32_t __stdcall GetDebugEventCount(bool getPreviousFrameData) { return GetDebugger()->GetEventManager()->GetEventCount(getPreviousFrameData); }
DllExport void __stdcall GetDebugEvents(DebugEventInfo *infoArray, uint32_t &maxEventCount) { GetDebugger()->GetEventManager()->GetEvents(infoArray, maxEventCount); }
DllExport uint32_t __stdcall GetDebugEventCount(EventViewerDisplayOptions options) { return GetDebugger()->GetEventManager()->GetEventCount(options); }
DllExport void __stdcall GetEventViewerOutput(uint32_t *buffer, EventViewerDisplayOptions options) { GetDebugger()->GetEventManager()->GetDisplayBuffer(buffer, options); }
DllExport void __stdcall GetEventViewerEvent(DebugEventInfo *evtInfo, uint16_t scanline, uint16_t cycle, EventViewerDisplayOptions options) { *evtInfo = GetDebugger()->GetEventManager()->GetEvent(scanline, cycle, options); }
DllExport uint32_t __stdcall TakeEventSnapshot(EventViewerDisplayOptions options) { return GetDebugger()->GetEventManager()->TakeEventSnapshot(options); }

View file

@ -12,6 +12,7 @@ namespace Mesen.GUI.Debugger
public ctrlColorPicker() : base()
{
this.BorderStyle = BorderStyle.FixedSingle;
this.Cursor = Cursors.Hand;
}
protected override void OnClick(EventArgs e)

View file

@ -0,0 +1,631 @@
namespace Mesen.GUI.Debugger
{
partial class ctrlEventViewerFilters
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.grpOptions = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.picNmi = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowNmi = new System.Windows.Forms.CheckBox();
this.picIrq = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowIrq = new System.Windows.Forms.CheckBox();
this.label4 = new System.Windows.Forms.Label();
this.picWramWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowWorkRamRegisterWrites = new System.Windows.Forms.CheckBox();
this.picWramReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowWorkRamRegisterReads = new System.Windows.Forms.CheckBox();
this.label3 = new System.Windows.Forms.Label();
this.picCpuWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowCpuRegisterWrites = new System.Windows.Forms.CheckBox();
this.picCpuReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowCpuRegisterReads = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.picApuWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowApuRegisterWrites = new System.Windows.Forms.CheckBox();
this.picApuReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowApuRegisterReads = new System.Windows.Forms.CheckBox();
this.label1 = new System.Windows.Forms.Label();
this.picPpuWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowPpuRegisterWrites = new System.Windows.Forms.CheckBox();
this.chkShowPpuRegisterReads = new System.Windows.Forms.CheckBox();
this.lblPpuRegisters = new System.Windows.Forms.Label();
this.picPpuReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowMarkedBreakpoints = new System.Windows.Forms.CheckBox();
this.picMarkedBreakpoints = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowPreviousFrameEvents = new System.Windows.Forms.CheckBox();
this.grpDmaFilters = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.chkDmaChannel0 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel1 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel2 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel3 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel4 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel5 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel6 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel7 = new System.Windows.Forms.CheckBox();
this.grpOptions.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picNmi)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picIrq)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picWramWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picWramReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picApuWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picApuReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picMarkedBreakpoints)).BeginInit();
this.grpDmaFilters.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.SuspendLayout();
//
// grpOptions
//
this.grpOptions.Controls.Add(this.tableLayoutPanel1);
this.grpOptions.Dock = System.Windows.Forms.DockStyle.Fill;
this.grpOptions.Location = new System.Drawing.Point(0, 0);
this.grpOptions.Name = "grpOptions";
this.grpOptions.Size = new System.Drawing.Size(260, 302);
this.grpOptions.TabIndex = 3;
this.grpOptions.TabStop = false;
this.grpOptions.Text = "Show...";
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 6;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 15F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.picNmi, 5, 4);
this.tableLayoutPanel1.Controls.Add(this.chkShowNmi, 4, 4);
this.tableLayoutPanel1.Controls.Add(this.picIrq, 2, 4);
this.tableLayoutPanel1.Controls.Add(this.chkShowIrq, 1, 4);
this.tableLayoutPanel1.Controls.Add(this.label4, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.picWramWrites, 5, 3);
this.tableLayoutPanel1.Controls.Add(this.chkShowWorkRamRegisterWrites, 4, 3);
this.tableLayoutPanel1.Controls.Add(this.picWramReads, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.chkShowWorkRamRegisterReads, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.picCpuWrites, 5, 2);
this.tableLayoutPanel1.Controls.Add(this.chkShowCpuRegisterWrites, 4, 2);
this.tableLayoutPanel1.Controls.Add(this.picCpuReads, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.chkShowCpuRegisterReads, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.picApuWrites, 5, 1);
this.tableLayoutPanel1.Controls.Add(this.chkShowApuRegisterWrites, 4, 1);
this.tableLayoutPanel1.Controls.Add(this.picApuReads, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.chkShowApuRegisterReads, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.picPpuWrites, 5, 0);
this.tableLayoutPanel1.Controls.Add(this.chkShowPpuRegisterWrites, 4, 0);
this.tableLayoutPanel1.Controls.Add(this.chkShowPpuRegisterReads, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.lblPpuRegisters, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.picPpuReads, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.chkShowMarkedBreakpoints, 0, 5);
this.tableLayoutPanel1.Controls.Add(this.picMarkedBreakpoints, 2, 5);
this.tableLayoutPanel1.Controls.Add(this.chkShowPreviousFrameEvents, 0, 6);
this.tableLayoutPanel1.Controls.Add(this.grpDmaFilters, 0, 7);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 16);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 8;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(254, 283);
this.tableLayoutPanel1.TabIndex = 0;
//
// picNmi
//
this.picNmi.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picNmi.Location = new System.Drawing.Point(238, 95);
this.picNmi.Name = "picNmi";
this.picNmi.Size = new System.Drawing.Size(14, 14);
this.picNmi.TabIndex = 25;
this.picNmi.TabStop = false;
//
// chkShowNmi
//
this.chkShowNmi.AutoSize = true;
this.chkShowNmi.Location = new System.Drawing.Point(181, 95);
this.chkShowNmi.Name = "chkShowNmi";
this.chkShowNmi.Size = new System.Drawing.Size(46, 17);
this.chkShowNmi.TabIndex = 24;
this.chkShowNmi.Text = "NMI";
this.chkShowNmi.UseVisualStyleBackColor = true;
this.chkShowNmi.Click += new System.EventHandler(this.chkOption_Click);
//
// picIrq
//
this.picIrq.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picIrq.Location = new System.Drawing.Point(146, 95);
this.picIrq.Name = "picIrq";
this.picIrq.Size = new System.Drawing.Size(14, 14);
this.picIrq.TabIndex = 23;
this.picIrq.TabStop = false;
//
// chkShowIrq
//
this.chkShowIrq.AutoSize = true;
this.chkShowIrq.Location = new System.Drawing.Point(88, 95);
this.chkShowIrq.Name = "chkShowIrq";
this.chkShowIrq.Size = new System.Drawing.Size(45, 17);
this.chkShowIrq.TabIndex = 22;
this.chkShowIrq.Text = "IRQ";
this.chkShowIrq.UseVisualStyleBackColor = true;
this.chkShowIrq.Click += new System.EventHandler(this.chkOption_Click);
//
// label4
//
this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(3, 97);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(51, 13);
this.label4.TabIndex = 21;
this.label4.Text = "Interrupts";
//
// picWramWrites
//
this.picWramWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picWramWrites.Location = new System.Drawing.Point(238, 72);
this.picWramWrites.Name = "picWramWrites";
this.picWramWrites.Size = new System.Drawing.Size(14, 14);
this.picWramWrites.TabIndex = 20;
this.picWramWrites.TabStop = false;
//
// chkShowWorkRamRegisterWrites
//
this.chkShowWorkRamRegisterWrites.AutoSize = true;
this.chkShowWorkRamRegisterWrites.Location = new System.Drawing.Point(181, 72);
this.chkShowWorkRamRegisterWrites.Name = "chkShowWorkRamRegisterWrites";
this.chkShowWorkRamRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowWorkRamRegisterWrites.TabIndex = 19;
this.chkShowWorkRamRegisterWrites.Text = "Write";
this.chkShowWorkRamRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowWorkRamRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// picWramReads
//
this.picWramReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picWramReads.Location = new System.Drawing.Point(146, 72);
this.picWramReads.Name = "picWramReads";
this.picWramReads.Size = new System.Drawing.Size(14, 14);
this.picWramReads.TabIndex = 18;
this.picWramReads.TabStop = false;
//
// chkShowWorkRamRegisterReads
//
this.chkShowWorkRamRegisterReads.AutoSize = true;
this.chkShowWorkRamRegisterReads.Location = new System.Drawing.Point(88, 72);
this.chkShowWorkRamRegisterReads.Name = "chkShowWorkRamRegisterReads";
this.chkShowWorkRamRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowWorkRamRegisterReads.TabIndex = 17;
this.chkShowWorkRamRegisterReads.Text = "Read";
this.chkShowWorkRamRegisterReads.UseVisualStyleBackColor = true;
this.chkShowWorkRamRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// label3
//
this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(3, 74);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(73, 13);
this.label3.TabIndex = 16;
this.label3.Text = "WRAM Regs:";
//
// picCpuWrites
//
this.picCpuWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picCpuWrites.Location = new System.Drawing.Point(238, 49);
this.picCpuWrites.Name = "picCpuWrites";
this.picCpuWrites.Size = new System.Drawing.Size(14, 14);
this.picCpuWrites.TabIndex = 15;
this.picCpuWrites.TabStop = false;
//
// chkShowCpuRegisterWrites
//
this.chkShowCpuRegisterWrites.AutoSize = true;
this.chkShowCpuRegisterWrites.Location = new System.Drawing.Point(181, 49);
this.chkShowCpuRegisterWrites.Name = "chkShowCpuRegisterWrites";
this.chkShowCpuRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowCpuRegisterWrites.TabIndex = 14;
this.chkShowCpuRegisterWrites.Text = "Write";
this.chkShowCpuRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowCpuRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// picCpuReads
//
this.picCpuReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picCpuReads.Location = new System.Drawing.Point(146, 49);
this.picCpuReads.Name = "picCpuReads";
this.picCpuReads.Size = new System.Drawing.Size(14, 14);
this.picCpuReads.TabIndex = 13;
this.picCpuReads.TabStop = false;
//
// chkShowCpuRegisterReads
//
this.chkShowCpuRegisterReads.AutoSize = true;
this.chkShowCpuRegisterReads.Location = new System.Drawing.Point(88, 49);
this.chkShowCpuRegisterReads.Name = "chkShowCpuRegisterReads";
this.chkShowCpuRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowCpuRegisterReads.TabIndex = 12;
this.chkShowCpuRegisterReads.Text = "Read";
this.chkShowCpuRegisterReads.UseVisualStyleBackColor = true;
this.chkShowCpuRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// label2
//
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 51);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(79, 13);
this.label2.TabIndex = 11;
this.label2.Text = "CPU Registers:";
//
// picApuWrites
//
this.picApuWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picApuWrites.Location = new System.Drawing.Point(238, 26);
this.picApuWrites.Name = "picApuWrites";
this.picApuWrites.Size = new System.Drawing.Size(14, 14);
this.picApuWrites.TabIndex = 10;
this.picApuWrites.TabStop = false;
//
// chkShowApuRegisterWrites
//
this.chkShowApuRegisterWrites.AutoSize = true;
this.chkShowApuRegisterWrites.Location = new System.Drawing.Point(181, 26);
this.chkShowApuRegisterWrites.Name = "chkShowApuRegisterWrites";
this.chkShowApuRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowApuRegisterWrites.TabIndex = 9;
this.chkShowApuRegisterWrites.Text = "Write";
this.chkShowApuRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowApuRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// picApuReads
//
this.picApuReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picApuReads.Location = new System.Drawing.Point(146, 26);
this.picApuReads.Name = "picApuReads";
this.picApuReads.Size = new System.Drawing.Size(14, 14);
this.picApuReads.TabIndex = 8;
this.picApuReads.TabStop = false;
//
// chkShowApuRegisterReads
//
this.chkShowApuRegisterReads.AutoSize = true;
this.chkShowApuRegisterReads.Location = new System.Drawing.Point(88, 26);
this.chkShowApuRegisterReads.Name = "chkShowApuRegisterReads";
this.chkShowApuRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowApuRegisterReads.TabIndex = 7;
this.chkShowApuRegisterReads.Text = "Read";
this.chkShowApuRegisterReads.UseVisualStyleBackColor = true;
this.chkShowApuRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// label1
//
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 28);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(79, 13);
this.label1.TabIndex = 6;
this.label1.Text = "APU Registers:";
//
// picPpuWrites
//
this.picPpuWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picPpuWrites.Location = new System.Drawing.Point(238, 3);
this.picPpuWrites.Name = "picPpuWrites";
this.picPpuWrites.Size = new System.Drawing.Size(14, 14);
this.picPpuWrites.TabIndex = 5;
this.picPpuWrites.TabStop = false;
//
// chkShowPpuRegisterWrites
//
this.chkShowPpuRegisterWrites.AutoSize = true;
this.chkShowPpuRegisterWrites.Location = new System.Drawing.Point(181, 3);
this.chkShowPpuRegisterWrites.Name = "chkShowPpuRegisterWrites";
this.chkShowPpuRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowPpuRegisterWrites.TabIndex = 2;
this.chkShowPpuRegisterWrites.Text = "Write";
this.chkShowPpuRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowPpuRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// chkShowPpuRegisterReads
//
this.chkShowPpuRegisterReads.AutoSize = true;
this.chkShowPpuRegisterReads.Location = new System.Drawing.Point(88, 3);
this.chkShowPpuRegisterReads.Name = "chkShowPpuRegisterReads";
this.chkShowPpuRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowPpuRegisterReads.TabIndex = 0;
this.chkShowPpuRegisterReads.Text = "Read";
this.chkShowPpuRegisterReads.UseVisualStyleBackColor = true;
this.chkShowPpuRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// lblPpuRegisters
//
this.lblPpuRegisters.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblPpuRegisters.AutoSize = true;
this.lblPpuRegisters.Location = new System.Drawing.Point(3, 5);
this.lblPpuRegisters.Name = "lblPpuRegisters";
this.lblPpuRegisters.Size = new System.Drawing.Size(79, 13);
this.lblPpuRegisters.TabIndex = 3;
this.lblPpuRegisters.Text = "PPU Registers:";
//
// picPpuReads
//
this.picPpuReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picPpuReads.Location = new System.Drawing.Point(146, 3);
this.picPpuReads.Name = "picPpuReads";
this.picPpuReads.Size = new System.Drawing.Size(14, 14);
this.picPpuReads.TabIndex = 4;
this.picPpuReads.TabStop = false;
//
// chkShowMarkedBreakpoints
//
this.chkShowMarkedBreakpoints.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.chkShowMarkedBreakpoints, 2);
this.chkShowMarkedBreakpoints.Location = new System.Drawing.Point(3, 118);
this.chkShowMarkedBreakpoints.Name = "chkShowMarkedBreakpoints";
this.chkShowMarkedBreakpoints.Size = new System.Drawing.Size(121, 17);
this.chkShowMarkedBreakpoints.TabIndex = 26;
this.chkShowMarkedBreakpoints.Text = "Marked Breakpoints";
this.chkShowMarkedBreakpoints.UseVisualStyleBackColor = true;
this.chkShowMarkedBreakpoints.Click += new System.EventHandler(this.chkOption_Click);
//
// picMarkedBreakpoints
//
this.picMarkedBreakpoints.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picMarkedBreakpoints.Location = new System.Drawing.Point(146, 118);
this.picMarkedBreakpoints.Name = "picMarkedBreakpoints";
this.picMarkedBreakpoints.Size = new System.Drawing.Size(14, 14);
this.picMarkedBreakpoints.TabIndex = 27;
this.picMarkedBreakpoints.TabStop = false;
//
// chkShowPreviousFrameEvents
//
this.chkShowPreviousFrameEvents.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.chkShowPreviousFrameEvents, 6);
this.chkShowPreviousFrameEvents.Location = new System.Drawing.Point(3, 148);
this.chkShowPreviousFrameEvents.Margin = new System.Windows.Forms.Padding(3, 10, 3, 3);
this.chkShowPreviousFrameEvents.Name = "chkShowPreviousFrameEvents";
this.chkShowPreviousFrameEvents.Size = new System.Drawing.Size(167, 17);
this.chkShowPreviousFrameEvents.TabIndex = 28;
this.chkShowPreviousFrameEvents.Text = "Show previous frame\'s events";
this.chkShowPreviousFrameEvents.UseVisualStyleBackColor = true;
this.chkShowPreviousFrameEvents.Click += new System.EventHandler(this.chkOption_Click);
//
// grpDmaFilters
//
this.tableLayoutPanel1.SetColumnSpan(this.grpDmaFilters, 6);
this.grpDmaFilters.Controls.Add(this.tableLayoutPanel2);
this.grpDmaFilters.Dock = System.Windows.Forms.DockStyle.Top;
this.grpDmaFilters.Location = new System.Drawing.Point(3, 171);
this.grpDmaFilters.Name = "grpDmaFilters";
this.grpDmaFilters.Size = new System.Drawing.Size(249, 108);
this.grpDmaFilters.TabIndex = 29;
this.grpDmaFilters.TabStop = false;
this.grpDmaFilters.Text = "DMA Filters";
//
// tableLayoutPanel2
//
this.tableLayoutPanel2.ColumnCount = 2;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel0, 0, 0);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel1, 0, 1);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel2, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel3, 0, 3);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel4, 1, 0);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel5, 1, 1);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel6, 1, 2);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel7, 1, 3);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 5;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(243, 89);
this.tableLayoutPanel2.TabIndex = 0;
//
// chkDmaChannel0
//
this.chkDmaChannel0.AutoSize = true;
this.chkDmaChannel0.Location = new System.Drawing.Point(3, 3);
this.chkDmaChannel0.Name = "chkDmaChannel0";
this.chkDmaChannel0.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel0.TabIndex = 0;
this.chkDmaChannel0.Text = "Channel 0";
this.chkDmaChannel0.UseVisualStyleBackColor = true;
this.chkDmaChannel0.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel1
//
this.chkDmaChannel1.AutoSize = true;
this.chkDmaChannel1.Location = new System.Drawing.Point(3, 26);
this.chkDmaChannel1.Name = "chkDmaChannel1";
this.chkDmaChannel1.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel1.TabIndex = 2;
this.chkDmaChannel1.Text = "Channel 1";
this.chkDmaChannel1.UseVisualStyleBackColor = true;
this.chkDmaChannel1.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel2
//
this.chkDmaChannel2.AutoSize = true;
this.chkDmaChannel2.Location = new System.Drawing.Point(3, 49);
this.chkDmaChannel2.Name = "chkDmaChannel2";
this.chkDmaChannel2.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel2.TabIndex = 4;
this.chkDmaChannel2.Text = "Channel 2";
this.chkDmaChannel2.UseVisualStyleBackColor = true;
this.chkDmaChannel2.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel3
//
this.chkDmaChannel3.AutoSize = true;
this.chkDmaChannel3.Location = new System.Drawing.Point(3, 72);
this.chkDmaChannel3.Name = "chkDmaChannel3";
this.chkDmaChannel3.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel3.TabIndex = 6;
this.chkDmaChannel3.Text = "Channel 3";
this.chkDmaChannel3.UseVisualStyleBackColor = true;
this.chkDmaChannel3.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel4
//
this.chkDmaChannel4.AutoSize = true;
this.chkDmaChannel4.Location = new System.Drawing.Point(124, 3);
this.chkDmaChannel4.Name = "chkDmaChannel4";
this.chkDmaChannel4.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel4.TabIndex = 1;
this.chkDmaChannel4.Text = "Channel 4";
this.chkDmaChannel4.UseVisualStyleBackColor = true;
this.chkDmaChannel4.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel5
//
this.chkDmaChannel5.AutoSize = true;
this.chkDmaChannel5.Location = new System.Drawing.Point(124, 26);
this.chkDmaChannel5.Name = "chkDmaChannel5";
this.chkDmaChannel5.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel5.TabIndex = 3;
this.chkDmaChannel5.Text = "Channel 5";
this.chkDmaChannel5.UseVisualStyleBackColor = true;
this.chkDmaChannel5.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel6
//
this.chkDmaChannel6.AutoSize = true;
this.chkDmaChannel6.Location = new System.Drawing.Point(124, 49);
this.chkDmaChannel6.Name = "chkDmaChannel6";
this.chkDmaChannel6.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel6.TabIndex = 5;
this.chkDmaChannel6.Text = "Channel 6";
this.chkDmaChannel6.UseVisualStyleBackColor = true;
this.chkDmaChannel6.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel7
//
this.chkDmaChannel7.AutoSize = true;
this.chkDmaChannel7.Location = new System.Drawing.Point(124, 72);
this.chkDmaChannel7.Name = "chkDmaChannel7";
this.chkDmaChannel7.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel7.TabIndex = 7;
this.chkDmaChannel7.Text = "Channel 7";
this.chkDmaChannel7.UseVisualStyleBackColor = true;
this.chkDmaChannel7.Click += new System.EventHandler(this.chkOption_Click);
//
// ctrlEventViewerFilters
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.grpOptions);
this.Name = "ctrlEventViewerFilters";
this.Size = new System.Drawing.Size(260, 302);
this.grpOptions.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picNmi)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picIrq)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picWramWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picWramReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picApuWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picApuReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picMarkedBreakpoints)).EndInit();
this.grpDmaFilters.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel2.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox grpOptions;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private ctrlColorPicker picNmi;
private System.Windows.Forms.CheckBox chkShowNmi;
private ctrlColorPicker picIrq;
private System.Windows.Forms.CheckBox chkShowIrq;
private System.Windows.Forms.Label label4;
private ctrlColorPicker picWramWrites;
private System.Windows.Forms.CheckBox chkShowWorkRamRegisterWrites;
private ctrlColorPicker picWramReads;
private System.Windows.Forms.CheckBox chkShowWorkRamRegisterReads;
private System.Windows.Forms.Label label3;
private ctrlColorPicker picCpuWrites;
private System.Windows.Forms.CheckBox chkShowCpuRegisterWrites;
private ctrlColorPicker picCpuReads;
private System.Windows.Forms.CheckBox chkShowCpuRegisterReads;
private System.Windows.Forms.Label label2;
private ctrlColorPicker picApuWrites;
private System.Windows.Forms.CheckBox chkShowApuRegisterWrites;
private ctrlColorPicker picApuReads;
private System.Windows.Forms.CheckBox chkShowApuRegisterReads;
private System.Windows.Forms.Label label1;
private ctrlColorPicker picPpuWrites;
private System.Windows.Forms.CheckBox chkShowPpuRegisterWrites;
private System.Windows.Forms.CheckBox chkShowPpuRegisterReads;
private System.Windows.Forms.Label lblPpuRegisters;
private ctrlColorPicker picPpuReads;
private System.Windows.Forms.CheckBox chkShowMarkedBreakpoints;
private ctrlColorPicker picMarkedBreakpoints;
private System.Windows.Forms.CheckBox chkShowPreviousFrameEvents;
private System.Windows.Forms.GroupBox grpDmaFilters;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.CheckBox chkDmaChannel0;
private System.Windows.Forms.CheckBox chkDmaChannel1;
private System.Windows.Forms.CheckBox chkDmaChannel2;
private System.Windows.Forms.CheckBox chkDmaChannel3;
private System.Windows.Forms.CheckBox chkDmaChannel4;
private System.Windows.Forms.CheckBox chkDmaChannel5;
private System.Windows.Forms.CheckBox chkDmaChannel6;
private System.Windows.Forms.CheckBox chkDmaChannel7;
}
}

View file

@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Mesen.GUI.Forms;
using Mesen.GUI.Config;
using Mesen.GUI.Controls;
namespace Mesen.GUI.Debugger
{
public partial class ctrlEventViewerFilters : BaseControl
{
public event EventHandler OptionsChanged;
private EntityBinder _entityBinder = new EntityBinder();
public ctrlEventViewerFilters()
{
InitializeComponent();
}
public void Init()
{
_entityBinder.Entity = ConfigManager.Config.Debug.EventViewer;
_entityBinder.AddBinding(nameof(EventViewerConfig.ApuRegisterReadColor), picApuReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ApuRegisterWriteColor), picApuWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.CpuRegisterReadColor), picCpuReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.CpuRegisterWriteColor), picCpuWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.IrqColor), picIrq);
_entityBinder.AddBinding(nameof(EventViewerConfig.BreakpointColor), picMarkedBreakpoints);
_entityBinder.AddBinding(nameof(EventViewerConfig.NmiColor), picNmi);
_entityBinder.AddBinding(nameof(EventViewerConfig.PpuRegisterReadColor), picPpuReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.PpuRegisterWriteColor), picPpuWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.WorkRamRegisterReadColor), picWramReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.WorkRamRegisterWriteColor), picWramWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowApuRegisterReads), chkShowApuRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowApuRegisterWrites), chkShowApuRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowCpuRegisterReads), chkShowCpuRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowCpuRegisterWrites), chkShowCpuRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowIrq), chkShowIrq);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowMarkedBreakpoints), chkShowMarkedBreakpoints);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowNmi), chkShowNmi);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowPpuRegisterReads), chkShowPpuRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowPpuRegisterWrites), chkShowPpuRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowWorkRamRegisterReads), chkShowWorkRamRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowWorkRamRegisterWrites), chkShowWorkRamRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel0), chkDmaChannel0);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel1), chkDmaChannel1);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel2), chkDmaChannel2);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel3), chkDmaChannel3);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel4), chkDmaChannel4);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel5), chkDmaChannel5);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel6), chkDmaChannel6);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel7), chkDmaChannel7);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowPreviousFrameEvents), chkShowPreviousFrameEvents);
_entityBinder.UpdateUI();
}
protected override void OnHandleDestroyed(EventArgs e)
{
if(!IsDesignMode) {
_entityBinder.UpdateObject();
ConfigManager.ApplyChanges();
}
base.OnHandleDestroyed(e);
}
private void chkOption_Click(object sender, EventArgs e)
{
_entityBinder.UpdateObject();
this.OptionsChanged?.Invoke(this, e);
}
}
}

View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View file

@ -0,0 +1,141 @@
namespace Mesen.GUI.Debugger
{
partial class ctrlEventViewerListView
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lstEvents = new Mesen.GUI.Controls.DoubleBufferedListView();
this.colProgramCounter = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colScanline = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colCycle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colEventType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colDetails = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ctxMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.mnuCopy = new System.Windows.Forms.ToolStripMenuItem();
this.ctxMenu.SuspendLayout();
this.SuspendLayout();
//
// lstEvents
//
this.lstEvents.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colProgramCounter,
this.colScanline,
this.colCycle,
this.colEventType,
this.colAddress,
this.colValue,
this.colDetails});
this.lstEvents.ContextMenuStrip = this.ctxMenu;
this.lstEvents.Dock = System.Windows.Forms.DockStyle.Fill;
this.lstEvents.FullRowSelect = true;
this.lstEvents.Location = new System.Drawing.Point(0, 0);
this.lstEvents.Name = "lstEvents";
this.lstEvents.Size = new System.Drawing.Size(749, 205);
this.lstEvents.TabIndex = 0;
this.lstEvents.UseCompatibleStateImageBehavior = false;
this.lstEvents.View = System.Windows.Forms.View.Details;
this.lstEvents.VirtualMode = true;
this.lstEvents.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lstEvents_ColumnClick);
this.lstEvents.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.lstEvents_RetrieveVirtualItem);
//
// colProgramCounter
//
this.colProgramCounter.Text = "PC";
this.colProgramCounter.Width = 50;
//
// colScanline
//
this.colScanline.Text = "Scanline";
//
// colCycle
//
this.colCycle.Text = "Cycle";
this.colCycle.Width = 45;
//
// colEventType
//
this.colEventType.Text = "Type";
this.colEventType.Width = 135;
//
// colAddress
//
this.colAddress.Text = "Address";
this.colAddress.Width = 65;
//
// colValue
//
this.colValue.Text = "Value";
this.colValue.Width = 51;
//
// colDetails
//
this.colDetails.Text = "Details";
this.colDetails.Width = 289;
//
// ctxMenu
//
this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuCopy});
this.ctxMenu.Name = "ctxMenu";
this.ctxMenu.Size = new System.Drawing.Size(170, 48);
//
// mnuCopy
//
this.mnuCopy.Image = global::Mesen.GUI.Properties.Resources.Copy;
this.mnuCopy.Name = "mnuCopy";
this.mnuCopy.Size = new System.Drawing.Size(169, 22);
this.mnuCopy.Text = "Copy List Content";
this.mnuCopy.Click += new System.EventHandler(this.mnuCopy_Click);
//
// ctrlEventViewerListView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lstEvents);
this.Name = "ctrlEventViewerListView";
this.Size = new System.Drawing.Size(749, 205);
this.ctxMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private GUI.Controls.DoubleBufferedListView lstEvents;
private System.Windows.Forms.ColumnHeader colScanline;
private System.Windows.Forms.ColumnHeader colCycle;
private System.Windows.Forms.ColumnHeader colEventType;
private System.Windows.Forms.ColumnHeader colDetails;
private System.Windows.Forms.ColumnHeader colAddress;
private System.Windows.Forms.ColumnHeader colValue;
private System.Windows.Forms.ColumnHeader colProgramCounter;
private System.Windows.Forms.ContextMenuStrip ctxMenu;
private System.Windows.Forms.ToolStripMenuItem mnuCopy;
}
}

View file

@ -0,0 +1,172 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Mesen.GUI.Controls;
using Mesen.GUI.Forms;
using Mesen.GUI.Config;
using System.Collections.ObjectModel;
namespace Mesen.GUI.Debugger
{
public partial class ctrlEventViewerListView : BaseControl
{
private List<DebugEventInfo> _debugEvents = new List<DebugEventInfo>();
private ReadOnlyCollection<Breakpoint> _breakpoints = null;
private eSortColumn _sortColumn = eSortColumn.Scanline;
private bool _sortAscending = true;
public ctrlEventViewerListView()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if(!IsDesignMode) {
mnuCopy.InitShortcut(this, nameof(DebuggerShortcutsConfig.Copy));
}
}
public void RefreshViewer()
{
_breakpoints = BreakpointManager.Breakpoints;
EventViewerDisplayOptions options = ConfigManager.Config.Debug.EventViewer.GetInteropOptions();
DebugEventInfo[] eventInfoArray = DebugApi.GetDebugEvents(options);
lstEvents.BeginUpdate();
_debugEvents = new List<DebugEventInfo>(eventInfoArray);
SortData();
lstEvents.VirtualListSize = _debugEvents.Count;
lstEvents.EndUpdate();
}
private ListViewItem CreateListViewItem(int index)
{
DebugEventInfo evt = _debugEvents[index];
bool isDma = evt.Operation.Type == MemoryOperationType.DmaWrite || evt.Operation.Type == MemoryOperationType.DmaRead;
string details = "";
if(evt.Type == DebugEventType.Breakpoint) {
if(evt.BreakpointId >= 0 && evt.BreakpointId < _breakpoints.Count) {
Breakpoint bp = _breakpoints[evt.BreakpointId];
details += " Type: " + bp.ToReadableType();
details += " Addresses: " + bp.GetAddressString(true);
if(bp.Condition.Length > 0) {
details += " Condition: " + bp.Condition;
}
}
}
if(isDma) {
bool indirectHdma = false;
if((evt.DmaChannel & ctrlEventViewerPpuView.HdmaChannelFlag) != 0) {
indirectHdma = evt.DmaChannelInfo.HdmaIndirectAddressing;
details += "HDMA #" + (evt.DmaChannel & 0x07).ToString();
details += indirectHdma ? " (indirect)" : "";
} else {
details += "DMA #" + (evt.DmaChannel & 0x07).ToString();
}
int aBusAddress;
if(indirectHdma) {
aBusAddress = (evt.DmaChannelInfo.SrcBank << 16) | evt.DmaChannelInfo.TransferSize;
} else {
aBusAddress = (evt.DmaChannelInfo.SrcBank << 16) | evt.DmaChannelInfo.SrcAddress;
}
if(!evt.DmaChannelInfo.InvertDirection) {
details += " - $" + aBusAddress.ToString("X4") + " -> $" + (0x2100 | evt.DmaChannelInfo.DestAddress).ToString("X4");
} else {
details += " - $" + aBusAddress.ToString("X4") + " <- $" + (0x2100 | evt.DmaChannelInfo.DestAddress).ToString("X4");
}
}
return new ListViewItem(new string[] {
evt.ProgramCounter.ToString("X4"),
evt.Scanline.ToString(),
evt.Cycle.ToString(),
evt.Type.ToString(),
evt.Type == DebugEventType.Register ? ("$" + evt.Operation.Address.ToString("X4")) : "",
evt.Type == DebugEventType.Register ? ("$" + evt.Operation.Value.ToString("X2")) : "",
details
});
}
private void lstEvents_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = CreateListViewItem(e.ItemIndex);
}
private void lstEvents_ColumnClick(object sender, ColumnClickEventArgs e)
{
eSortColumn sortColumn = (eSortColumn)e.Column;
if(sortColumn == _sortColumn) {
_sortAscending = !_sortAscending;
} else {
_sortColumn = sortColumn;
_sortAscending = true;
}
lstEvents.BeginUpdate();
SortData();
lstEvents.VirtualListSize = _debugEvents.Count;
lstEvents.EndUpdate();
}
private void SortData()
{
_debugEvents.Sort((DebugEventInfo a, DebugEventInfo b) => {
int result = 0;
switch(_sortColumn) {
case eSortColumn.PC: result = ((int)a.ProgramCounter - (int)b.ProgramCounter); break;
case eSortColumn.Scanline: result = ((int)a.Scanline - (int)b.Scanline); break;
case eSortColumn.Cycle: result = ((int)a.Cycle - (int)b.Cycle); break;
case eSortColumn.Type: result = ((int)a.Type - (int)b.Type); break;
case eSortColumn.Address: result = ((int)a.Operation.Address - (int)b.Operation.Address); break;
case eSortColumn.Value: result = ((int)a.Operation.Value - (int)b.Operation.Value); break;
}
if(result == 0) {
result = ((int)a.Cycle - (int)b.Cycle);
}
return _sortAscending ? result : -result;
});
}
private void CopyList()
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < _debugEvents.Count; i++) {
foreach(ListViewItem.ListViewSubItem subItem in CreateListViewItem(i).SubItems) {
sb.Append(subItem.Text);
sb.Append("\t");
}
sb.AppendLine();
}
Clipboard.SetText(sb.ToString());
}
private void mnuCopy_Click(object sender, EventArgs e)
{
CopyList();
}
private enum eSortColumn
{
PC,
Scanline,
Cycle,
Type,
Address,
Value
}
}
}

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ctxMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -31,62 +31,7 @@ namespace Mesen.GUI.Debugger
{
this.components = new System.ComponentModel.Container();
this.tmrOverlay = new System.Windows.Forms.Timer(this.components);
this.grpOptions = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.picNmi = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowNmi = new System.Windows.Forms.CheckBox();
this.picIrq = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowIrq = new System.Windows.Forms.CheckBox();
this.label4 = new System.Windows.Forms.Label();
this.picWramWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowWorkRamRegisterWrites = new System.Windows.Forms.CheckBox();
this.picWramReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowWorkRamRegisterReads = new System.Windows.Forms.CheckBox();
this.label3 = new System.Windows.Forms.Label();
this.picCpuWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowCpuRegisterWrites = new System.Windows.Forms.CheckBox();
this.picCpuReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowCpuRegisterReads = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.picApuWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowApuRegisterWrites = new System.Windows.Forms.CheckBox();
this.picApuReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowApuRegisterReads = new System.Windows.Forms.CheckBox();
this.label1 = new System.Windows.Forms.Label();
this.picPpuWrites = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowPpuRegisterWrites = new System.Windows.Forms.CheckBox();
this.chkShowPpuRegisterReads = new System.Windows.Forms.CheckBox();
this.lblPpuRegisters = new System.Windows.Forms.Label();
this.picPpuReads = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowMarkedBreakpoints = new System.Windows.Forms.CheckBox();
this.picMarkedBreakpoints = new Mesen.GUI.Debugger.ctrlColorPicker();
this.chkShowPreviousFrameEvents = new System.Windows.Forms.CheckBox();
this.grpDmaFilters = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.chkDmaChannel0 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel1 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel2 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel3 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel4 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel5 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel6 = new System.Windows.Forms.CheckBox();
this.chkDmaChannel7 = new System.Windows.Forms.CheckBox();
this.picViewer = new Mesen.GUI.Debugger.PpuViewer.ctrlImagePanel();
this.grpOptions.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picNmi)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picIrq)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picWramWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picWramReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picApuWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picApuReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuWrites)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuReads)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.picMarkedBreakpoints)).BeginInit();
this.grpDmaFilters.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.SuspendLayout();
//
// tmrOverlay
@ -94,479 +39,6 @@ namespace Mesen.GUI.Debugger
this.tmrOverlay.Interval = 50;
this.tmrOverlay.Tick += new System.EventHandler(this.tmrOverlay_Tick);
//
// grpOptions
//
this.grpOptions.Controls.Add(this.tableLayoutPanel1);
this.grpOptions.Dock = System.Windows.Forms.DockStyle.Right;
this.grpOptions.Location = new System.Drawing.Point(669, 0);
this.grpOptions.Name = "grpOptions";
this.grpOptions.Size = new System.Drawing.Size(278, 529);
this.grpOptions.TabIndex = 2;
this.grpOptions.TabStop = false;
this.grpOptions.Text = "Show...";
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 6;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 15F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.picNmi, 5, 4);
this.tableLayoutPanel1.Controls.Add(this.chkShowNmi, 4, 4);
this.tableLayoutPanel1.Controls.Add(this.picIrq, 2, 4);
this.tableLayoutPanel1.Controls.Add(this.chkShowIrq, 1, 4);
this.tableLayoutPanel1.Controls.Add(this.label4, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.picWramWrites, 5, 3);
this.tableLayoutPanel1.Controls.Add(this.chkShowWorkRamRegisterWrites, 4, 3);
this.tableLayoutPanel1.Controls.Add(this.picWramReads, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.chkShowWorkRamRegisterReads, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.picCpuWrites, 5, 2);
this.tableLayoutPanel1.Controls.Add(this.chkShowCpuRegisterWrites, 4, 2);
this.tableLayoutPanel1.Controls.Add(this.picCpuReads, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.chkShowCpuRegisterReads, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.picApuWrites, 5, 1);
this.tableLayoutPanel1.Controls.Add(this.chkShowApuRegisterWrites, 4, 1);
this.tableLayoutPanel1.Controls.Add(this.picApuReads, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.chkShowApuRegisterReads, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.picPpuWrites, 5, 0);
this.tableLayoutPanel1.Controls.Add(this.chkShowPpuRegisterWrites, 4, 0);
this.tableLayoutPanel1.Controls.Add(this.chkShowPpuRegisterReads, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.lblPpuRegisters, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.picPpuReads, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.chkShowMarkedBreakpoints, 0, 5);
this.tableLayoutPanel1.Controls.Add(this.picMarkedBreakpoints, 2, 5);
this.tableLayoutPanel1.Controls.Add(this.chkShowPreviousFrameEvents, 0, 6);
this.tableLayoutPanel1.Controls.Add(this.grpDmaFilters, 0, 7);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 16);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 8;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(272, 510);
this.tableLayoutPanel1.TabIndex = 0;
//
// picNmi
//
this.picNmi.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picNmi.Location = new System.Drawing.Point(238, 95);
this.picNmi.Name = "picNmi";
this.picNmi.Size = new System.Drawing.Size(14, 14);
this.picNmi.TabIndex = 25;
this.picNmi.TabStop = false;
//
// chkShowNmi
//
this.chkShowNmi.AutoSize = true;
this.chkShowNmi.Location = new System.Drawing.Point(181, 95);
this.chkShowNmi.Name = "chkShowNmi";
this.chkShowNmi.Size = new System.Drawing.Size(46, 17);
this.chkShowNmi.TabIndex = 24;
this.chkShowNmi.Text = "NMI";
this.chkShowNmi.UseVisualStyleBackColor = true;
this.chkShowNmi.Click += new System.EventHandler(this.chkOption_Click);
//
// picIrq
//
this.picIrq.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picIrq.Location = new System.Drawing.Point(146, 95);
this.picIrq.Name = "picIrq";
this.picIrq.Size = new System.Drawing.Size(14, 14);
this.picIrq.TabIndex = 23;
this.picIrq.TabStop = false;
//
// chkShowIrq
//
this.chkShowIrq.AutoSize = true;
this.chkShowIrq.Location = new System.Drawing.Point(88, 95);
this.chkShowIrq.Name = "chkShowIrq";
this.chkShowIrq.Size = new System.Drawing.Size(45, 17);
this.chkShowIrq.TabIndex = 22;
this.chkShowIrq.Text = "IRQ";
this.chkShowIrq.UseVisualStyleBackColor = true;
this.chkShowIrq.Click += new System.EventHandler(this.chkOption_Click);
//
// label4
//
this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(3, 97);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(51, 13);
this.label4.TabIndex = 21;
this.label4.Text = "Interrupts";
//
// picWramWrites
//
this.picWramWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picWramWrites.Location = new System.Drawing.Point(238, 72);
this.picWramWrites.Name = "picWramWrites";
this.picWramWrites.Size = new System.Drawing.Size(14, 14);
this.picWramWrites.TabIndex = 20;
this.picWramWrites.TabStop = false;
//
// chkShowWorkRamRegisterWrites
//
this.chkShowWorkRamRegisterWrites.AutoSize = true;
this.chkShowWorkRamRegisterWrites.Location = new System.Drawing.Point(181, 72);
this.chkShowWorkRamRegisterWrites.Name = "chkShowWorkRamRegisterWrites";
this.chkShowWorkRamRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowWorkRamRegisterWrites.TabIndex = 19;
this.chkShowWorkRamRegisterWrites.Text = "Write";
this.chkShowWorkRamRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowWorkRamRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// picWramReads
//
this.picWramReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picWramReads.Location = new System.Drawing.Point(146, 72);
this.picWramReads.Name = "picWramReads";
this.picWramReads.Size = new System.Drawing.Size(14, 14);
this.picWramReads.TabIndex = 18;
this.picWramReads.TabStop = false;
//
// chkShowWorkRamRegisterReads
//
this.chkShowWorkRamRegisterReads.AutoSize = true;
this.chkShowWorkRamRegisterReads.Location = new System.Drawing.Point(88, 72);
this.chkShowWorkRamRegisterReads.Name = "chkShowWorkRamRegisterReads";
this.chkShowWorkRamRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowWorkRamRegisterReads.TabIndex = 17;
this.chkShowWorkRamRegisterReads.Text = "Read";
this.chkShowWorkRamRegisterReads.UseVisualStyleBackColor = true;
this.chkShowWorkRamRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// label3
//
this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(3, 74);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(73, 13);
this.label3.TabIndex = 16;
this.label3.Text = "WRAM Regs:";
//
// picCpuWrites
//
this.picCpuWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picCpuWrites.Location = new System.Drawing.Point(238, 49);
this.picCpuWrites.Name = "picCpuWrites";
this.picCpuWrites.Size = new System.Drawing.Size(14, 14);
this.picCpuWrites.TabIndex = 15;
this.picCpuWrites.TabStop = false;
//
// chkShowCpuRegisterWrites
//
this.chkShowCpuRegisterWrites.AutoSize = true;
this.chkShowCpuRegisterWrites.Location = new System.Drawing.Point(181, 49);
this.chkShowCpuRegisterWrites.Name = "chkShowCpuRegisterWrites";
this.chkShowCpuRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowCpuRegisterWrites.TabIndex = 14;
this.chkShowCpuRegisterWrites.Text = "Write";
this.chkShowCpuRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowCpuRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// picCpuReads
//
this.picCpuReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picCpuReads.Location = new System.Drawing.Point(146, 49);
this.picCpuReads.Name = "picCpuReads";
this.picCpuReads.Size = new System.Drawing.Size(14, 14);
this.picCpuReads.TabIndex = 13;
this.picCpuReads.TabStop = false;
//
// chkShowCpuRegisterReads
//
this.chkShowCpuRegisterReads.AutoSize = true;
this.chkShowCpuRegisterReads.Location = new System.Drawing.Point(88, 49);
this.chkShowCpuRegisterReads.Name = "chkShowCpuRegisterReads";
this.chkShowCpuRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowCpuRegisterReads.TabIndex = 12;
this.chkShowCpuRegisterReads.Text = "Read";
this.chkShowCpuRegisterReads.UseVisualStyleBackColor = true;
this.chkShowCpuRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// label2
//
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 51);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(79, 13);
this.label2.TabIndex = 11;
this.label2.Text = "CPU Registers:";
//
// picApuWrites
//
this.picApuWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picApuWrites.Location = new System.Drawing.Point(238, 26);
this.picApuWrites.Name = "picApuWrites";
this.picApuWrites.Size = new System.Drawing.Size(14, 14);
this.picApuWrites.TabIndex = 10;
this.picApuWrites.TabStop = false;
//
// chkShowApuRegisterWrites
//
this.chkShowApuRegisterWrites.AutoSize = true;
this.chkShowApuRegisterWrites.Location = new System.Drawing.Point(181, 26);
this.chkShowApuRegisterWrites.Name = "chkShowApuRegisterWrites";
this.chkShowApuRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowApuRegisterWrites.TabIndex = 9;
this.chkShowApuRegisterWrites.Text = "Write";
this.chkShowApuRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowApuRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// picApuReads
//
this.picApuReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picApuReads.Location = new System.Drawing.Point(146, 26);
this.picApuReads.Name = "picApuReads";
this.picApuReads.Size = new System.Drawing.Size(14, 14);
this.picApuReads.TabIndex = 8;
this.picApuReads.TabStop = false;
//
// chkShowApuRegisterReads
//
this.chkShowApuRegisterReads.AutoSize = true;
this.chkShowApuRegisterReads.Location = new System.Drawing.Point(88, 26);
this.chkShowApuRegisterReads.Name = "chkShowApuRegisterReads";
this.chkShowApuRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowApuRegisterReads.TabIndex = 7;
this.chkShowApuRegisterReads.Text = "Read";
this.chkShowApuRegisterReads.UseVisualStyleBackColor = true;
this.chkShowApuRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// label1
//
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 28);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(79, 13);
this.label1.TabIndex = 6;
this.label1.Text = "APU Registers:";
//
// picPpuWrites
//
this.picPpuWrites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picPpuWrites.Location = new System.Drawing.Point(238, 3);
this.picPpuWrites.Name = "picPpuWrites";
this.picPpuWrites.Size = new System.Drawing.Size(14, 14);
this.picPpuWrites.TabIndex = 5;
this.picPpuWrites.TabStop = false;
//
// chkShowPpuRegisterWrites
//
this.chkShowPpuRegisterWrites.AutoSize = true;
this.chkShowPpuRegisterWrites.Location = new System.Drawing.Point(181, 3);
this.chkShowPpuRegisterWrites.Name = "chkShowPpuRegisterWrites";
this.chkShowPpuRegisterWrites.Size = new System.Drawing.Size(51, 17);
this.chkShowPpuRegisterWrites.TabIndex = 2;
this.chkShowPpuRegisterWrites.Text = "Write";
this.chkShowPpuRegisterWrites.UseVisualStyleBackColor = true;
this.chkShowPpuRegisterWrites.Click += new System.EventHandler(this.chkOption_Click);
//
// chkShowPpuRegisterReads
//
this.chkShowPpuRegisterReads.AutoSize = true;
this.chkShowPpuRegisterReads.Location = new System.Drawing.Point(88, 3);
this.chkShowPpuRegisterReads.Name = "chkShowPpuRegisterReads";
this.chkShowPpuRegisterReads.Size = new System.Drawing.Size(52, 17);
this.chkShowPpuRegisterReads.TabIndex = 0;
this.chkShowPpuRegisterReads.Text = "Read";
this.chkShowPpuRegisterReads.UseVisualStyleBackColor = true;
this.chkShowPpuRegisterReads.Click += new System.EventHandler(this.chkOption_Click);
//
// lblPpuRegisters
//
this.lblPpuRegisters.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.lblPpuRegisters.AutoSize = true;
this.lblPpuRegisters.Location = new System.Drawing.Point(3, 5);
this.lblPpuRegisters.Name = "lblPpuRegisters";
this.lblPpuRegisters.Size = new System.Drawing.Size(79, 13);
this.lblPpuRegisters.TabIndex = 3;
this.lblPpuRegisters.Text = "PPU Registers:";
//
// picPpuReads
//
this.picPpuReads.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picPpuReads.Location = new System.Drawing.Point(146, 3);
this.picPpuReads.Name = "picPpuReads";
this.picPpuReads.Size = new System.Drawing.Size(14, 14);
this.picPpuReads.TabIndex = 4;
this.picPpuReads.TabStop = false;
//
// chkShowMarkedBreakpoints
//
this.chkShowMarkedBreakpoints.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.chkShowMarkedBreakpoints, 2);
this.chkShowMarkedBreakpoints.Location = new System.Drawing.Point(3, 118);
this.chkShowMarkedBreakpoints.Name = "chkShowMarkedBreakpoints";
this.chkShowMarkedBreakpoints.Size = new System.Drawing.Size(121, 17);
this.chkShowMarkedBreakpoints.TabIndex = 26;
this.chkShowMarkedBreakpoints.Text = "Marked Breakpoints";
this.chkShowMarkedBreakpoints.UseVisualStyleBackColor = true;
this.chkShowMarkedBreakpoints.Click += new System.EventHandler(this.chkOption_Click);
//
// picMarkedBreakpoints
//
this.picMarkedBreakpoints.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picMarkedBreakpoints.Location = new System.Drawing.Point(146, 118);
this.picMarkedBreakpoints.Name = "picMarkedBreakpoints";
this.picMarkedBreakpoints.Size = new System.Drawing.Size(14, 14);
this.picMarkedBreakpoints.TabIndex = 27;
this.picMarkedBreakpoints.TabStop = false;
//
// chkShowPreviousFrameEvents
//
this.chkShowPreviousFrameEvents.AutoSize = true;
this.tableLayoutPanel1.SetColumnSpan(this.chkShowPreviousFrameEvents, 6);
this.chkShowPreviousFrameEvents.Location = new System.Drawing.Point(3, 148);
this.chkShowPreviousFrameEvents.Margin = new System.Windows.Forms.Padding(3, 10, 3, 3);
this.chkShowPreviousFrameEvents.Name = "chkShowPreviousFrameEvents";
this.chkShowPreviousFrameEvents.Size = new System.Drawing.Size(167, 17);
this.chkShowPreviousFrameEvents.TabIndex = 28;
this.chkShowPreviousFrameEvents.Text = "Show previous frame\'s events";
this.chkShowPreviousFrameEvents.UseVisualStyleBackColor = true;
this.chkShowPreviousFrameEvents.Click += new System.EventHandler(this.chkOption_Click);
//
// grpDmaFilters
//
this.tableLayoutPanel1.SetColumnSpan(this.grpDmaFilters, 6);
this.grpDmaFilters.Controls.Add(this.tableLayoutPanel2);
this.grpDmaFilters.Dock = System.Windows.Forms.DockStyle.Fill;
this.grpDmaFilters.Location = new System.Drawing.Point(3, 171);
this.grpDmaFilters.Name = "grpDmaFilters";
this.grpDmaFilters.Size = new System.Drawing.Size(266, 336);
this.grpDmaFilters.TabIndex = 29;
this.grpDmaFilters.TabStop = false;
this.grpDmaFilters.Text = "DMA Filters";
//
// tableLayoutPanel2
//
this.tableLayoutPanel2.ColumnCount = 2;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel0, 0, 0);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel1, 0, 1);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel2, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel3, 0, 3);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel4, 1, 0);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel5, 1, 1);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel6, 1, 2);
this.tableLayoutPanel2.Controls.Add(this.chkDmaChannel7, 1, 3);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top;
this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 5;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(260, 94);
this.tableLayoutPanel2.TabIndex = 0;
//
// chkDmaChannel0
//
this.chkDmaChannel0.AutoSize = true;
this.chkDmaChannel0.Location = new System.Drawing.Point(3, 3);
this.chkDmaChannel0.Name = "chkDmaChannel0";
this.chkDmaChannel0.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel0.TabIndex = 0;
this.chkDmaChannel0.Text = "Channel 0";
this.chkDmaChannel0.UseVisualStyleBackColor = true;
this.chkDmaChannel0.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel1
//
this.chkDmaChannel1.AutoSize = true;
this.chkDmaChannel1.Location = new System.Drawing.Point(3, 26);
this.chkDmaChannel1.Name = "chkDmaChannel1";
this.chkDmaChannel1.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel1.TabIndex = 2;
this.chkDmaChannel1.Text = "Channel 1";
this.chkDmaChannel1.UseVisualStyleBackColor = true;
this.chkDmaChannel1.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel2
//
this.chkDmaChannel2.AutoSize = true;
this.chkDmaChannel2.Location = new System.Drawing.Point(3, 49);
this.chkDmaChannel2.Name = "chkDmaChannel2";
this.chkDmaChannel2.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel2.TabIndex = 4;
this.chkDmaChannel2.Text = "Channel 2";
this.chkDmaChannel2.UseVisualStyleBackColor = true;
this.chkDmaChannel2.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel3
//
this.chkDmaChannel3.AutoSize = true;
this.chkDmaChannel3.Location = new System.Drawing.Point(3, 72);
this.chkDmaChannel3.Name = "chkDmaChannel3";
this.chkDmaChannel3.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel3.TabIndex = 6;
this.chkDmaChannel3.Text = "Channel 3";
this.chkDmaChannel3.UseVisualStyleBackColor = true;
this.chkDmaChannel3.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel4
//
this.chkDmaChannel4.AutoSize = true;
this.chkDmaChannel4.Location = new System.Drawing.Point(133, 3);
this.chkDmaChannel4.Name = "chkDmaChannel4";
this.chkDmaChannel4.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel4.TabIndex = 1;
this.chkDmaChannel4.Text = "Channel 4";
this.chkDmaChannel4.UseVisualStyleBackColor = true;
this.chkDmaChannel4.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel5
//
this.chkDmaChannel5.AutoSize = true;
this.chkDmaChannel5.Location = new System.Drawing.Point(133, 26);
this.chkDmaChannel5.Name = "chkDmaChannel5";
this.chkDmaChannel5.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel5.TabIndex = 3;
this.chkDmaChannel5.Text = "Channel 5";
this.chkDmaChannel5.UseVisualStyleBackColor = true;
this.chkDmaChannel5.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel6
//
this.chkDmaChannel6.AutoSize = true;
this.chkDmaChannel6.Location = new System.Drawing.Point(133, 49);
this.chkDmaChannel6.Name = "chkDmaChannel6";
this.chkDmaChannel6.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel6.TabIndex = 5;
this.chkDmaChannel6.Text = "Channel 6";
this.chkDmaChannel6.UseVisualStyleBackColor = true;
this.chkDmaChannel6.Click += new System.EventHandler(this.chkOption_Click);
//
// chkDmaChannel7
//
this.chkDmaChannel7.AutoSize = true;
this.chkDmaChannel7.Location = new System.Drawing.Point(133, 72);
this.chkDmaChannel7.Name = "chkDmaChannel7";
this.chkDmaChannel7.Size = new System.Drawing.Size(74, 17);
this.chkDmaChannel7.TabIndex = 7;
this.chkDmaChannel7.Text = "Channel 7";
this.chkDmaChannel7.UseVisualStyleBackColor = true;
this.chkDmaChannel7.Click += new System.EventHandler(this.chkOption_Click);
//
// picViewer
//
this.picViewer.Dock = System.Windows.Forms.DockStyle.Fill;
@ -580,7 +52,7 @@ namespace Mesen.GUI.Debugger
this.picViewer.Overlay = new System.Drawing.Rectangle(0, 0, 0, 0);
this.picViewer.Selection = new System.Drawing.Rectangle(0, 0, 0, 0);
this.picViewer.SelectionWrapPosition = 0;
this.picViewer.Size = new System.Drawing.Size(669, 529);
this.picViewer.Size = new System.Drawing.Size(947, 529);
this.picViewer.TabIndex = 3;
this.picViewer.MouseLeave += new System.EventHandler(this.picPicture_MouseLeave);
this.picViewer.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picPicture_MouseMove);
@ -590,72 +62,14 @@ namespace Mesen.GUI.Debugger
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.picViewer);
this.Controls.Add(this.grpOptions);
this.Name = "ctrlEventViewerPpuView";
this.Size = new System.Drawing.Size(947, 529);
this.grpOptions.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picNmi)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picIrq)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picWramWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picWramReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picCpuReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picApuWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picApuReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuWrites)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picPpuReads)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picMarkedBreakpoints)).EndInit();
this.grpDmaFilters.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel2.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Timer tmrOverlay;
private System.Windows.Forms.GroupBox grpOptions;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private ctrlColorPicker picNmi;
private System.Windows.Forms.CheckBox chkShowNmi;
private ctrlColorPicker picIrq;
private System.Windows.Forms.CheckBox chkShowIrq;
private System.Windows.Forms.Label label4;
private ctrlColorPicker picWramWrites;
private System.Windows.Forms.CheckBox chkShowWorkRamRegisterWrites;
private ctrlColorPicker picWramReads;
private System.Windows.Forms.CheckBox chkShowWorkRamRegisterReads;
private System.Windows.Forms.Label label3;
private ctrlColorPicker picCpuWrites;
private System.Windows.Forms.CheckBox chkShowCpuRegisterWrites;
private ctrlColorPicker picCpuReads;
private System.Windows.Forms.CheckBox chkShowCpuRegisterReads;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.CheckBox chkShowApuRegisterWrites;
private ctrlColorPicker picApuReads;
private System.Windows.Forms.CheckBox chkShowApuRegisterReads;
private System.Windows.Forms.Label label1;
private ctrlColorPicker picPpuWrites;
private System.Windows.Forms.CheckBox chkShowPpuRegisterWrites;
private System.Windows.Forms.CheckBox chkShowPpuRegisterReads;
private System.Windows.Forms.Label lblPpuRegisters;
private ctrlColorPicker picPpuReads;
private ctrlColorPicker picApuWrites;
private System.Windows.Forms.CheckBox chkShowMarkedBreakpoints;
private ctrlColorPicker picMarkedBreakpoints;
private System.Windows.Forms.CheckBox chkShowPreviousFrameEvents;
private PpuViewer.ctrlImagePanel picViewer;
private System.Windows.Forms.GroupBox grpDmaFilters;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.CheckBox chkDmaChannel0;
private System.Windows.Forms.CheckBox chkDmaChannel1;
private System.Windows.Forms.CheckBox chkDmaChannel2;
private System.Windows.Forms.CheckBox chkDmaChannel3;
private System.Windows.Forms.CheckBox chkDmaChannel4;
private System.Windows.Forms.CheckBox chkDmaChannel5;
private System.Windows.Forms.CheckBox chkDmaChannel6;
private System.Windows.Forms.CheckBox chkDmaChannel7;
}
}

View file

@ -19,11 +19,10 @@ namespace Mesen.GUI.Debugger
{
public partial class ctrlEventViewerPpuView : BaseControl
{
private const int HdmaChannelFlag = 0x80;
public const int HdmaChannelFlag = 0x40;
private int _baseWidth = 340 * 2;
private EntityBinder _entityBinder = new EntityBinder();
private Point _lastPos = new Point(-1, -1);
private bool _needUpdate = false;
private Bitmap _screenBitmap = null;
@ -31,8 +30,8 @@ namespace Mesen.GUI.Debugger
private Bitmap _displayBitmap = null;
private byte[] _pictureData = null;
private Font _overlayFont;
private UInt32 _scanlineCount = 262;
public UInt32 ScanlineCount { get; set; } = 262;
public int ImageScale { get { return picViewer.ImageScale; } set { picViewer.ImageScale = value; } }
public ctrlEventViewerPpuView()
@ -47,77 +46,15 @@ namespace Mesen.GUI.Debugger
if(!IsDesignMode) {
tmrOverlay.Start();
_overlayFont = new Font(BaseControl.MonospaceFontFamily, 10);
_entityBinder.Entity = ConfigManager.Config.Debug.EventViewer;
_entityBinder.AddBinding(nameof(EventViewerConfig.ApuRegisterReadColor), picApuReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ApuRegisterWriteColor), picApuWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.CpuRegisterReadColor), picCpuReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.CpuRegisterWriteColor), picCpuWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.IrqColor), picIrq);
_entityBinder.AddBinding(nameof(EventViewerConfig.BreakpointColor), picMarkedBreakpoints);
_entityBinder.AddBinding(nameof(EventViewerConfig.NmiColor), picNmi);
_entityBinder.AddBinding(nameof(EventViewerConfig.PpuRegisterReadColor), picPpuReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.PpuRegisterWriteColor), picPpuWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.WorkRamRegisterReadColor), picWramReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.WorkRamRegisterWriteColor), picWramWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowApuRegisterReads), chkShowApuRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowApuRegisterWrites), chkShowApuRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowCpuRegisterReads), chkShowCpuRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowCpuRegisterWrites), chkShowCpuRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowIrq), chkShowIrq);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowMarkedBreakpoints), chkShowMarkedBreakpoints);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowNmi), chkShowNmi);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowPpuRegisterReads), chkShowPpuRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowPpuRegisterWrites), chkShowPpuRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowWorkRamRegisterReads), chkShowWorkRamRegisterReads);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowWorkRamRegisterWrites), chkShowWorkRamRegisterWrites);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel0), chkDmaChannel0);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel1), chkDmaChannel1);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel2), chkDmaChannel2);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel3), chkDmaChannel3);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel4), chkDmaChannel4);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel5), chkDmaChannel5);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel6), chkDmaChannel6);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowDmaChannel7), chkDmaChannel7);
_entityBinder.AddBinding(nameof(EventViewerConfig.ShowPreviousFrameEvents), chkShowPreviousFrameEvents);
_entityBinder.UpdateUI();
RefreshData();
RefreshViewer();
}
}
protected override void OnHandleDestroyed(EventArgs e)
{
if(!IsDesignMode) {
_entityBinder.UpdateObject();
ConfigManager.ApplyChanges();
}
base.OnHandleDestroyed(e);
}
public void RefreshData()
{
this.BeginInvoke((Action)(() => {
_entityBinder.UpdateObject();
}));
EventViewerDisplayOptions options = ConfigManager.Config.Debug.EventViewer.GetInteropOptions();
_scanlineCount = DebugApi.TakeEventSnapshot(options);
}
public void RefreshViewer()
{
_entityBinder.UpdateObject();
EventViewerDisplayOptions options = ConfigManager.Config.Debug.EventViewer.GetInteropOptions();
_pictureData = DebugApi.GetEventViewerOutput(_scanlineCount, options);
_pictureData = DebugApi.GetEventViewerOutput(ScanlineCount, options);
int picHeight = (int)_scanlineCount*2;
int picHeight = (int)ScanlineCount*2;
if(_screenBitmap == null || _screenBitmap.Height != picHeight) {
_screenBitmap = new Bitmap(_baseWidth, picHeight, PixelFormat.Format32bppPArgb);
_overlayBitmap = new Bitmap(_baseWidth, picHeight, PixelFormat.Format32bppPArgb);
@ -126,7 +63,7 @@ namespace Mesen.GUI.Debugger
GCHandle handle = GCHandle.Alloc(this._pictureData, GCHandleType.Pinned);
try {
Bitmap source = new Bitmap(_baseWidth, (int)_scanlineCount*2, _baseWidth*4, PixelFormat.Format32bppPArgb, handle.AddrOfPinnedObject());
Bitmap source = new Bitmap(_baseWidth, (int)ScanlineCount*2, _baseWidth*4, PixelFormat.Format32bppPArgb, handle.AddrOfPinnedObject());
using(Graphics g = Graphics.FromImage(_screenBitmap)) {
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
@ -167,7 +104,7 @@ namespace Mesen.GUI.Debugger
}
}
picViewer.ImageSize = new Size(_baseWidth, (int)_scanlineCount*2);
picViewer.ImageSize = new Size(_baseWidth, (int)ScanlineCount*2);
picViewer.Image = _displayBitmap;
_needUpdate = false;
}
@ -310,11 +247,6 @@ namespace Mesen.GUI.Debugger
{
UpdateDisplay(false);
}
private void chkOption_Click(object sender, EventArgs e)
{
RefreshViewer();
}
public void ZoomIn()
{

View file

@ -43,16 +43,26 @@
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
this.mnuZoomIn = new System.Windows.Forms.ToolStripMenuItem();
this.mnuZoomOut = new System.Windows.Forms.ToolStripMenuItem();
this.tabMain = new System.Windows.Forms.TabControl();
this.tpgPpuView = new System.Windows.Forms.TabPage();
this.tpgListView = new System.Windows.Forms.TabPage();
this.ctrlListView = new Mesen.GUI.Debugger.ctrlEventViewerListView();
this.ctrlFilters = new Mesen.GUI.Debugger.ctrlEventViewerFilters();
this.mnuMain.SuspendLayout();
this.tabMain.SuspendLayout();
this.tpgPpuView.SuspendLayout();
this.tpgListView.SuspendLayout();
this.SuspendLayout();
//
// ctrlPpuView
//
this.ctrlPpuView.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlPpuView.ImageScale = 1;
this.ctrlPpuView.Location = new System.Drawing.Point(0, 24);
this.ctrlPpuView.Location = new System.Drawing.Point(0, 0);
this.ctrlPpuView.Margin = new System.Windows.Forms.Padding(0);
this.ctrlPpuView.Name = "ctrlPpuView";
this.ctrlPpuView.Size = new System.Drawing.Size(945, 531);
this.ctrlPpuView.ScanlineCount = ((uint)(262u));
this.ctrlPpuView.Size = new System.Drawing.Size(675, 541);
this.ctrlPpuView.TabIndex = 0;
//
// mnuMain
@ -62,7 +72,7 @@
this.mnuView});
this.mnuMain.Location = new System.Drawing.Point(0, 0);
this.mnuMain.Name = "mnuMain";
this.mnuMain.Size = new System.Drawing.Size(945, 24);
this.mnuMain.Size = new System.Drawing.Size(946, 24);
this.mnuMain.TabIndex = 10;
this.mnuMain.Text = "ctrlMesenMenuStrip1";
//
@ -173,19 +183,78 @@
this.mnuZoomOut.Size = new System.Drawing.Size(198, 22);
this.mnuZoomOut.Text = "Zoom Out";
//
// tabMain
//
this.tabMain.Controls.Add(this.tpgPpuView);
this.tabMain.Controls.Add(this.tpgListView);
this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabMain.Location = new System.Drawing.Point(0, 24);
this.tabMain.Margin = new System.Windows.Forms.Padding(0);
this.tabMain.Name = "tabMain";
this.tabMain.SelectedIndex = 0;
this.tabMain.Size = new System.Drawing.Size(683, 567);
this.tabMain.TabIndex = 11;
this.tabMain.SelectedIndexChanged += new System.EventHandler(this.tabMain_SelectedIndexChanged);
//
// tpgPpuView
//
this.tpgPpuView.Controls.Add(this.ctrlPpuView);
this.tpgPpuView.Location = new System.Drawing.Point(4, 22);
this.tpgPpuView.Margin = new System.Windows.Forms.Padding(0);
this.tpgPpuView.Name = "tpgPpuView";
this.tpgPpuView.Size = new System.Drawing.Size(675, 541);
this.tpgPpuView.TabIndex = 0;
this.tpgPpuView.Text = "PPU View";
this.tpgPpuView.UseVisualStyleBackColor = true;
//
// tpgListView
//
this.tpgListView.Controls.Add(this.ctrlListView);
this.tpgListView.Location = new System.Drawing.Point(4, 22);
this.tpgListView.Margin = new System.Windows.Forms.Padding(0);
this.tpgListView.Name = "tpgListView";
this.tpgListView.Size = new System.Drawing.Size(678, 541);
this.tpgListView.TabIndex = 1;
this.tpgListView.Text = "List View";
this.tpgListView.UseVisualStyleBackColor = true;
//
// ctrlListView
//
this.ctrlListView.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlListView.Location = new System.Drawing.Point(0, 0);
this.ctrlListView.Margin = new System.Windows.Forms.Padding(0);
this.ctrlListView.Name = "ctrlListView";
this.ctrlListView.Size = new System.Drawing.Size(678, 541);
this.ctrlListView.TabIndex = 2;
//
// ctrlFilters
//
this.ctrlFilters.Dock = System.Windows.Forms.DockStyle.Right;
this.ctrlFilters.Location = new System.Drawing.Point(683, 24);
this.ctrlFilters.Name = "ctrlFilters";
this.ctrlFilters.Padding = new System.Windows.Forms.Padding(0, 0, 2, 0);
this.ctrlFilters.Size = new System.Drawing.Size(263, 567);
this.ctrlFilters.TabIndex = 12;
this.ctrlFilters.OptionsChanged += new System.EventHandler(this.ctrlFilters_OptionsChanged);
//
// frmEventViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(945, 555);
this.Controls.Add(this.ctrlPpuView);
this.ClientSize = new System.Drawing.Size(946, 591);
this.Controls.Add(this.tabMain);
this.Controls.Add(this.ctrlFilters);
this.Controls.Add(this.mnuMain);
this.Name = "frmEventViewer";
this.Text = "Event Viewer";
this.Controls.SetChildIndex(this.mnuMain, 0);
this.Controls.SetChildIndex(this.ctrlPpuView, 0);
this.Controls.SetChildIndex(this.ctrlFilters, 0);
this.Controls.SetChildIndex(this.tabMain, 0);
this.mnuMain.ResumeLayout(false);
this.mnuMain.PerformLayout();
this.tabMain.ResumeLayout(false);
this.tpgPpuView.ResumeLayout(false);
this.tpgListView.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -209,5 +278,10 @@
private System.Windows.Forms.ToolStripMenuItem mnuAutoRefreshNormal;
private System.Windows.Forms.ToolStripMenuItem mnuAutoRefreshHigh;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
private System.Windows.Forms.TabControl tabMain;
private System.Windows.Forms.TabPage tpgPpuView;
private System.Windows.Forms.TabPage tpgListView;
private ctrlEventViewerFilters ctrlFilters;
private ctrlEventViewerListView ctrlListView;
}
}

View file

@ -49,6 +49,8 @@ namespace Mesen.GUI.Debugger
mnuAutoRefreshNormal.Click += (s, evt) => _refreshManager.AutoRefreshSpeed = RefreshSpeed.Normal;
mnuAutoRefreshHigh.Click += (s, evt) => _refreshManager.AutoRefreshSpeed = RefreshSpeed.High;
mnuAutoRefreshSpeed.DropDownOpening += (s, evt) => UpdateRefreshSpeedMenu();
ctrlFilters.Init();
}
}
@ -80,12 +82,17 @@ namespace Mesen.GUI.Debugger
public void RefreshData()
{
ctrlPpuView.RefreshData();
EventViewerDisplayOptions options = ConfigManager.Config.Debug.EventViewer.GetInteropOptions();
ctrlPpuView.ScanlineCount = DebugApi.TakeEventSnapshot(options);
}
public void RefreshViewer()
{
ctrlPpuView.RefreshViewer();
if(tabMain.SelectedTab == tpgPpuView) {
ctrlPpuView.RefreshViewer();
} else {
ctrlListView.RefreshViewer();
}
}
private void OnNotificationReceived(NotificationEventArgs e)
@ -93,9 +100,9 @@ namespace Mesen.GUI.Debugger
switch(e.NotificationType) {
case ConsoleNotificationType.CodeBreak:
if(ConfigManager.Config.Debug.EventViewer.RefreshOnBreakPause) {
ctrlPpuView.RefreshData();
RefreshData();
this.BeginInvoke((Action)(() => {
ctrlPpuView.RefreshViewer();
RefreshViewer();
}));
}
break;
@ -125,5 +132,15 @@ namespace Mesen.GUI.Debugger
mnuAutoRefreshNormal.Checked = _refreshManager.AutoRefreshSpeed == RefreshSpeed.Normal;
mnuAutoRefreshHigh.Checked = _refreshManager.AutoRefreshSpeed == RefreshSpeed.High;
}
private void ctrlFilters_OptionsChanged(object sender, EventArgs e)
{
RefreshViewer();
}
private void tabMain_SelectedIndexChanged(object sender, EventArgs e)
{
RefreshViewer();
}
}
}

View file

@ -91,14 +91,14 @@ namespace Mesen.GUI
[DllImport(DllPath)] public static extern void SetViewerUpdateTiming(Int32 viewerId, Int32 scanline, Int32 cycle);
[DllImport(DllPath)] private static extern UInt32 GetDebugEventCount([MarshalAs(UnmanagedType.I1)]bool getPreviousFrameData);
[DllImport(DllPath, EntryPoint = "GetDebugEvents")] private static extern void GetDebugEventsWrapper([In, Out]DebugEventInfo[] eventArray, ref UInt32 maxEventCount, [MarshalAs(UnmanagedType.I1)]bool getPreviousFrameData);
public static DebugEventInfo[] GetDebugEvents(bool getPreviousFrameData)
[DllImport(DllPath)] private static extern UInt32 GetDebugEventCount(EventViewerDisplayOptions options);
[DllImport(DllPath, EntryPoint = "GetDebugEvents")] private static extern void GetDebugEventsWrapper([In, Out]DebugEventInfo[] eventArray, ref UInt32 maxEventCount);
public static DebugEventInfo[] GetDebugEvents(EventViewerDisplayOptions options)
{
UInt32 maxEventCount = GetDebugEventCount(getPreviousFrameData);
UInt32 maxEventCount = GetDebugEventCount(options);
DebugEventInfo[] debugEvents = new DebugEventInfo[maxEventCount];
DebugApi.GetDebugEventsWrapper(debugEvents, ref maxEventCount, getPreviousFrameData);
DebugApi.GetDebugEventsWrapper(debugEvents, ref maxEventCount);
if(maxEventCount < debugEvents.Length) {
//Remove the excess from the array if needed
Array.Resize(ref debugEvents, (int)maxEventCount);
@ -302,7 +302,7 @@ namespace Mesen.GUI
public UInt32 ProgramCounter;
public UInt16 Scanline;
public UInt16 Cycle;
public UInt16 BreakpointId;
public Int16 BreakpointId;
public byte DmaChannel;
public DmaChannelConfig DmaChannelInfo;
};

View file

@ -297,6 +297,18 @@
<Compile Include="Debugger\Controls\ctrlSpcStatus.Designer.cs">
<DependentUpon>ctrlSpcStatus.cs</DependentUpon>
</Compile>
<Compile Include="Debugger\EventViewer\ctrlEventViewerFilters.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Debugger\EventViewer\ctrlEventViewerFilters.Designer.cs">
<DependentUpon>ctrlEventViewerFilters.cs</DependentUpon>
</Compile>
<Compile Include="Debugger\EventViewer\ctrlEventViewerListView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Debugger\EventViewer\ctrlEventViewerListView.Designer.cs">
<DependentUpon>ctrlEventViewerListView.cs</DependentUpon>
</Compile>
<Compile Include="Debugger\frmBreakIn.cs">
<SubType>Form</SubType>
</Compile>
@ -979,6 +991,12 @@
<EmbeddedResource Include="Debugger\Controls\ctrlDisassemblyView.resx">
<DependentUpon>ctrlDisassemblyView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Debugger\EventViewer\ctrlEventViewerFilters.resx">
<DependentUpon>ctrlEventViewerFilters.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Debugger\EventViewer\ctrlEventViewerListView.resx">
<DependentUpon>ctrlEventViewerListView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Debugger\frmBreakIn.resx">
<DependentUpon>frmBreakIn.cs</DependentUpon>
</EmbeddedResource>