From 6a4359b9ba8fcc5fe231c31f394a3a6394cdc5e7 Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Wed, 14 Jul 2021 12:10:14 +0800 Subject: [PATCH 1/8] Fix bug when exporting sprite tiles in screen data --- Core/HdPackBuilder.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Core/HdPackBuilder.cpp b/Core/HdPackBuilder.cpp index 2da8630e..5242385b 100644 --- a/Core/HdPackBuilder.cpp +++ b/Core/HdPackBuilder.cpp @@ -273,22 +273,24 @@ void HdPackBuilder::ProcessTile(uint32_t x, uint32_t y, uint16_t tileAddr, HdPpu } } - if ((x == 0 || ((tile.OffsetX & 0x07) == 0)) && (y == 0 || ((tile.OffsetY & 0x07) == 0))) { + if ((x == 0 || ((tile.OffsetX & 0x07) == 0)) && (y == 0 || (((tile.OffsetY & 0x07) == 0) && !tile.VerticalMirroring) || (((tile.OffsetY & 0x07) == 0x07) && tile.VerticalMirroring))) { HdScreenTileInfo t; t.IsChrRamTile = tile.IsChrRamTile; t.PaletteColors = tile.PaletteColors; - t.ScreenX = x - tile.OffsetX; - t.ScreenY = y - tile.OffsetY - (tile.IsSpriteTile() ? 1 : 0); memcpy(t.TileData, tile.TileData, 16); t.TileIndex = tile.TileIndex; t.IsNew = isNew; if (tile.IsSpriteTile()) { + t.ScreenX = x; + t.ScreenY = y; t.BackgroundPriority = tile.BackgroundPriority; t.HorizontalMirroring = tile.HorizontalMirroring; t.VerticalMirroring = tile.VerticalMirroring; spritesOnScreen.push_back(t); } else { + t.ScreenX = x - tile.OffsetX; + t.ScreenY = y - tile.OffsetY; bgTilesOnScreen.push_back(t); } } From 4e07e8481cc6c994a87bfb7578d98481ffda05a2 Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Wed, 14 Jul 2021 12:11:41 +0800 Subject: [PATCH 2/8] Change Sprite Viewer to show Y as OAM byte 0 +1 --- .../Controls/ctrlSpriteViewer.Designer.cs | 1103 +++++++++-------- GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs | 2 +- 2 files changed, 559 insertions(+), 546 deletions(-) diff --git a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs index 0f951224..c9665d8e 100644 --- a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs +++ b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.Designer.cs @@ -29,188 +29,190 @@ namespace Mesen.GUI.Debugger.Controls /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.grpSpriteInfo = new System.Windows.Forms.GroupBox(); - this.tlpInfo = new System.Windows.Forms.TableLayoutPanel(); - this.txtSpriteIndex = new System.Windows.Forms.TextBox(); - this.lblSpriteIndex = new System.Windows.Forms.Label(); - this.picPreview = new Mesen.GUI.Controls.ctrlMesenPictureBox(); - this.ctxMenu = new Mesen.GUI.Controls.ctrlMesenContextMenuStrip(this.components); - this.mnuEditInMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowInChrViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuCopyHdPack = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCopyAllSpritesHdPack = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); - this.lblScreenPreview = new System.Windows.Forms.Label(); - this.lblTileIndex = new System.Windows.Forms.Label(); - this.txtTileIndex = new System.Windows.Forms.TextBox(); - this.lblTile = new System.Windows.Forms.Label(); - this.picTile = new System.Windows.Forms.PictureBox(); - this.chkDisplaySpriteOutlines = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.chkHorizontalMirroring = new System.Windows.Forms.CheckBox(); - this.chkVerticalMirroring = new System.Windows.Forms.CheckBox(); - this.chkBackgroundPriority = new System.Windows.Forms.CheckBox(); - this.lblPosition = new System.Windows.Forms.Label(); - this.lblPalette = new System.Windows.Forms.Label(); - this.txtPosition = new System.Windows.Forms.TextBox(); - this.ctrlTilePalette = new Mesen.GUI.Debugger.Controls.ctrlTilePalette(); - this.lblTileAddress = new System.Windows.Forms.Label(); - this.lblPaletteAddr = new System.Windows.Forms.Label(); - this.txtTileAddress = new System.Windows.Forms.TextBox(); - this.txtPaletteAddress = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.radCpuPage = new System.Windows.Forms.RadioButton(); - this.label1 = new System.Windows.Forms.Label(); - this.radSpriteRam = new System.Windows.Forms.RadioButton(); - this.nudCpuPage = new System.Windows.Forms.NumericUpDown(); - this.picSprites = new Mesen.GUI.Controls.ctrlMesenPictureBox(); - this.tlpMain.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.grpSpriteInfo.SuspendLayout(); - this.tlpInfo.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picPreview)).BeginInit(); - this.ctxMenu.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picTile)).BeginInit(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudCpuPage)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.picSprites)).BeginInit(); - this.SuspendLayout(); - // - // tlpMain - // - this.tlpMain.ColumnCount = 2; - this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpMain.Controls.Add(this.tableLayoutPanel2, 1, 0); - this.tlpMain.Controls.Add(this.picSprites, 0, 0); - this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpMain.Location = new System.Drawing.Point(0, 0); - this.tlpMain.Name = "tlpMain"; - this.tlpMain.RowCount = 3; - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpMain.Size = new System.Drawing.Size(682, 527); - this.tlpMain.TabIndex = 3; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.grpSpriteInfo, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(266, 0); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 2; - this.tlpMain.SetRowSpan(this.tableLayoutPanel2, 3); - 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(416, 527); - this.tableLayoutPanel2.TabIndex = 28; - // - // grpSpriteInfo - // - this.grpSpriteInfo.Controls.Add(this.tlpInfo); - this.grpSpriteInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpSpriteInfo.Location = new System.Drawing.Point(3, 28); - this.grpSpriteInfo.Name = "grpSpriteInfo"; - this.grpSpriteInfo.Size = new System.Drawing.Size(410, 496); - this.grpSpriteInfo.TabIndex = 4; - this.grpSpriteInfo.TabStop = false; - this.grpSpriteInfo.Text = "Sprite Info"; - // - // tlpInfo - // - this.tlpInfo.ColumnCount = 5; - this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpInfo.Controls.Add(this.txtSpriteIndex, 1, 0); - this.tlpInfo.Controls.Add(this.lblSpriteIndex, 0, 0); - this.tlpInfo.Controls.Add(this.picPreview, 1, 5); - this.tlpInfo.Controls.Add(this.lblScreenPreview, 0, 5); - this.tlpInfo.Controls.Add(this.lblTileIndex, 0, 1); - this.tlpInfo.Controls.Add(this.txtTileIndex, 1, 1); - this.tlpInfo.Controls.Add(this.lblTile, 0, 2); - this.tlpInfo.Controls.Add(this.picTile, 1, 2); - this.tlpInfo.Controls.Add(this.chkDisplaySpriteOutlines, 0, 6); - this.tlpInfo.Controls.Add(this.tableLayoutPanel1, 2, 4); - this.tlpInfo.Controls.Add(this.lblPosition, 2, 3); - this.tlpInfo.Controls.Add(this.lblPalette, 2, 2); - this.tlpInfo.Controls.Add(this.txtPosition, 3, 3); - this.tlpInfo.Controls.Add(this.ctrlTilePalette, 3, 2); - this.tlpInfo.Controls.Add(this.lblTileAddress, 2, 0); - this.tlpInfo.Controls.Add(this.lblPaletteAddr, 2, 1); - this.tlpInfo.Controls.Add(this.txtTileAddress, 3, 0); - this.tlpInfo.Controls.Add(this.txtPaletteAddress, 3, 1); - this.tlpInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpInfo.Location = new System.Drawing.Point(3, 16); - this.tlpInfo.Name = "tlpInfo"; - this.tlpInfo.RowCount = 7; - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tlpInfo.Size = new System.Drawing.Size(404, 477); - this.tlpInfo.TabIndex = 0; - // - // txtSpriteIndex - // - this.txtSpriteIndex.BackColor = System.Drawing.SystemColors.Window; - this.txtSpriteIndex.Location = new System.Drawing.Point(75, 3); - this.txtSpriteIndex.Name = "txtSpriteIndex"; - this.txtSpriteIndex.ReadOnly = true; - this.txtSpriteIndex.Size = new System.Drawing.Size(26, 20); - this.txtSpriteIndex.TabIndex = 23; - // - // lblSpriteIndex - // - this.lblSpriteIndex.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblSpriteIndex.AutoSize = true; - this.lblSpriteIndex.Location = new System.Drawing.Point(3, 6); - this.lblSpriteIndex.Name = "lblSpriteIndex"; - this.lblSpriteIndex.Size = new System.Drawing.Size(66, 13); - this.lblSpriteIndex.TabIndex = 22; - this.lblSpriteIndex.Text = "Sprite Index:"; - // - // picPreview - // - this.picPreview.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.picPreview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tlpInfo.SetColumnSpan(this.picPreview, 4); - this.picPreview.ContextMenuStrip = this.ctxMenu; - this.picPreview.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; - this.picPreview.Location = new System.Drawing.Point(76, 192); - this.picPreview.Margin = new System.Windows.Forms.Padding(4); - this.picPreview.Name = "picPreview"; - this.picPreview.Size = new System.Drawing.Size(258, 242); - this.picPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.picPreview.TabIndex = 21; - this.picPreview.TabStop = false; - this.picPreview.DoubleClick += new System.EventHandler(this.picSprites_DoubleClick); - this.picPreview.MouseEnter += new System.EventHandler(this.picPreview_MouseEnter); - this.picPreview.MouseLeave += new System.EventHandler(this.picPreview_MouseLeave); - this.picPreview.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picPreview_MouseMove); - // - // ctxMenu - // - this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.components = new System.ComponentModel.Container(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.grpSpriteInfo = new System.Windows.Forms.GroupBox(); + this.tlpInfo = new System.Windows.Forms.TableLayoutPanel(); + this.txtSpriteIndex = new System.Windows.Forms.TextBox(); + this.lblSpriteIndex = new System.Windows.Forms.Label(); + this.picPreview = new Mesen.GUI.Controls.ctrlMesenPictureBox(); + this.ctxMenu = new Mesen.GUI.Controls.ctrlMesenContextMenuStrip(this.components); + this.mnuEditInMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowInChrViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuCopyHdPack = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCopyAllSpritesHdPack = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem(); + this.lblScreenPreview = new System.Windows.Forms.Label(); + this.lblTileIndex = new System.Windows.Forms.Label(); + this.txtTileIndex = new System.Windows.Forms.TextBox(); + this.lblTile = new System.Windows.Forms.Label(); + this.picTile = new System.Windows.Forms.PictureBox(); + this.chkDisplaySpriteOutlines = new System.Windows.Forms.CheckBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.chkHorizontalMirroring = new System.Windows.Forms.CheckBox(); + this.chkVerticalMirroring = new System.Windows.Forms.CheckBox(); + this.chkBackgroundPriority = new System.Windows.Forms.CheckBox(); + this.lblPosition = new System.Windows.Forms.Label(); + this.lblPalette = new System.Windows.Forms.Label(); + this.txtPosition = new System.Windows.Forms.TextBox(); + this.ctrlTilePalette = new Mesen.GUI.Debugger.Controls.ctrlTilePalette(); + this.lblTileAddress = new System.Windows.Forms.Label(); + this.lblPaletteAddr = new System.Windows.Forms.Label(); + this.txtTileAddress = new System.Windows.Forms.TextBox(); + this.txtPaletteAddress = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.radCpuPage = new System.Windows.Forms.RadioButton(); + this.label1 = new System.Windows.Forms.Label(); + this.radSpriteRam = new System.Windows.Forms.RadioButton(); + this.nudCpuPage = new System.Windows.Forms.NumericUpDown(); + this.picSprites = new Mesen.GUI.Controls.ctrlMesenPictureBox(); + this.tlpMain.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.grpSpriteInfo.SuspendLayout(); + this.tlpInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picPreview)).BeginInit(); + this.ctxMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picTile)).BeginInit(); + this.tableLayoutPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudCpuPage)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picSprites)).BeginInit(); + this.SuspendLayout(); + // + // tlpMain + // + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel2, 1, 0); + this.tlpMain.Controls.Add(this.picSprites, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 3; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(682, 486); + this.tlpMain.TabIndex = 3; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.grpSpriteInfo, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(266, 0); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tlpMain.SetRowSpan(this.tableLayoutPanel2, 3); + 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(416, 486); + this.tableLayoutPanel2.TabIndex = 28; + // + // grpSpriteInfo + // + this.grpSpriteInfo.Controls.Add(this.tlpInfo); + this.grpSpriteInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpSpriteInfo.Location = new System.Drawing.Point(3, 26); + this.grpSpriteInfo.Name = "grpSpriteInfo"; + this.grpSpriteInfo.Size = new System.Drawing.Size(410, 458); + this.grpSpriteInfo.TabIndex = 4; + this.grpSpriteInfo.TabStop = false; + this.grpSpriteInfo.Text = "Sprite Info"; + // + // tlpInfo + // + this.tlpInfo.ColumnCount = 5; + this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpInfo.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpInfo.Controls.Add(this.txtSpriteIndex, 1, 0); + this.tlpInfo.Controls.Add(this.lblSpriteIndex, 0, 0); + this.tlpInfo.Controls.Add(this.picPreview, 1, 5); + this.tlpInfo.Controls.Add(this.lblScreenPreview, 0, 5); + this.tlpInfo.Controls.Add(this.lblTileIndex, 0, 1); + this.tlpInfo.Controls.Add(this.txtTileIndex, 1, 1); + this.tlpInfo.Controls.Add(this.lblTile, 0, 2); + this.tlpInfo.Controls.Add(this.picTile, 1, 2); + this.tlpInfo.Controls.Add(this.chkDisplaySpriteOutlines, 0, 6); + this.tlpInfo.Controls.Add(this.tableLayoutPanel1, 2, 4); + this.tlpInfo.Controls.Add(this.lblPosition, 2, 3); + this.tlpInfo.Controls.Add(this.lblPalette, 2, 2); + this.tlpInfo.Controls.Add(this.txtPosition, 3, 3); + this.tlpInfo.Controls.Add(this.ctrlTilePalette, 3, 2); + this.tlpInfo.Controls.Add(this.lblTileAddress, 2, 0); + this.tlpInfo.Controls.Add(this.lblPaletteAddr, 2, 1); + this.tlpInfo.Controls.Add(this.txtTileAddress, 3, 0); + this.tlpInfo.Controls.Add(this.txtPaletteAddress, 3, 1); + this.tlpInfo.Controls.Add(this.label2, 4, 3); + this.tlpInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpInfo.Location = new System.Drawing.Point(3, 18); + this.tlpInfo.Name = "tlpInfo"; + this.tlpInfo.RowCount = 7; + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpInfo.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 18F)); + this.tlpInfo.Size = new System.Drawing.Size(404, 437); + this.tlpInfo.TabIndex = 0; + // + // txtSpriteIndex + // + this.txtSpriteIndex.BackColor = System.Drawing.SystemColors.Window; + this.txtSpriteIndex.Location = new System.Drawing.Point(74, 3); + this.txtSpriteIndex.Name = "txtSpriteIndex"; + this.txtSpriteIndex.ReadOnly = true; + this.txtSpriteIndex.Size = new System.Drawing.Size(26, 22); + this.txtSpriteIndex.TabIndex = 23; + // + // lblSpriteIndex + // + this.lblSpriteIndex.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblSpriteIndex.AutoSize = true; + this.lblSpriteIndex.Location = new System.Drawing.Point(3, 8); + this.lblSpriteIndex.Name = "lblSpriteIndex"; + this.lblSpriteIndex.Size = new System.Drawing.Size(65, 12); + this.lblSpriteIndex.TabIndex = 22; + this.lblSpriteIndex.Text = "Sprite Index:"; + // + // picPreview + // + this.picPreview.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.picPreview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tlpInfo.SetColumnSpan(this.picPreview, 4); + this.picPreview.ContextMenuStrip = this.ctxMenu; + this.picPreview.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; + this.picPreview.Location = new System.Drawing.Point(75, 186); + this.picPreview.Margin = new System.Windows.Forms.Padding(4); + this.picPreview.Name = "picPreview"; + this.picPreview.Size = new System.Drawing.Size(258, 224); + this.picPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.picPreview.TabIndex = 21; + this.picPreview.TabStop = false; + this.picPreview.DoubleClick += new System.EventHandler(this.picSprites_DoubleClick); + this.picPreview.MouseEnter += new System.EventHandler(this.picPreview_MouseEnter); + this.picPreview.MouseLeave += new System.EventHandler(this.picPreview_MouseLeave); + this.picPreview.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picPreview_MouseMove); + // + // ctxMenu + // + this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuEditInMemoryViewer, this.mnuShowInChrViewer, this.toolStripMenuItem1, @@ -219,373 +221,383 @@ namespace Mesen.GUI.Debugger.Controls this.toolStripMenuItem2, this.mnuCopyToClipboard, this.mnuExportToPng}); - this.ctxMenu.Name = "ctxMenu"; - this.ctxMenu.Size = new System.Drawing.Size(255, 148); - this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening); - // - // mnuEditInMemoryViewer - // - this.mnuEditInMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; - this.mnuEditInMemoryViewer.Name = "mnuEditInMemoryViewer"; - this.mnuEditInMemoryViewer.Size = new System.Drawing.Size(254, 22); - this.mnuEditInMemoryViewer.Text = "Edit in Memory Viewer"; - this.mnuEditInMemoryViewer.Click += new System.EventHandler(this.mnuEditInMemoryViewer_Click); - // - // mnuShowInChrViewer - // - this.mnuShowInChrViewer.Image = global::Mesen.GUI.Properties.Resources.NextArrow; - this.mnuShowInChrViewer.Name = "mnuShowInChrViewer"; - this.mnuShowInChrViewer.ShortcutKeyDisplayString = "Dbl-Click"; - this.mnuShowInChrViewer.Size = new System.Drawing.Size(254, 22); - this.mnuShowInChrViewer.Text = "View in CHR viewer"; - this.mnuShowInChrViewer.Click += new System.EventHandler(this.mnuShowInChrViewer_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(251, 6); - // - // mnuCopyHdPack - // - this.mnuCopyHdPack.Name = "mnuCopyHdPack"; - this.mnuCopyHdPack.Size = new System.Drawing.Size(254, 22); - this.mnuCopyHdPack.Text = "Copy Tile (HD Pack Format)"; - this.mnuCopyHdPack.Click += new System.EventHandler(this.mnuCopyHdPack_Click); - // - // mnuCopyAllSpritesHdPack - // - this.mnuCopyAllSpritesHdPack.Name = "mnuCopyAllSpritesHdPack"; - this.mnuCopyAllSpritesHdPack.Size = new System.Drawing.Size(254, 22); - this.mnuCopyAllSpritesHdPack.Text = "Copy All Sprites (HD Pack Format)"; - this.mnuCopyAllSpritesHdPack.Click += new System.EventHandler(this.mnuCopyAllSpritesHdPack_Click); - // - // toolStripMenuItem2 - // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(251, 6); - // - // mnuCopyToClipboard - // - this.mnuCopyToClipboard.Image = global::Mesen.GUI.Properties.Resources.Copy; - this.mnuCopyToClipboard.Name = "mnuCopyToClipboard"; - this.mnuCopyToClipboard.Size = new System.Drawing.Size(254, 22); - this.mnuCopyToClipboard.Text = "Copy image to clipboard"; - this.mnuCopyToClipboard.Click += new System.EventHandler(this.mnuCopyToClipboard_Click); - // - // mnuExportToPng - // - this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; - this.mnuExportToPng.Name = "mnuExportToPng"; - this.mnuExportToPng.Size = new System.Drawing.Size(254, 22); - this.mnuExportToPng.Text = "Export image to PNG"; - this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); - // - // lblScreenPreview - // - this.lblScreenPreview.AutoSize = true; - this.lblScreenPreview.Location = new System.Drawing.Point(3, 193); - this.lblScreenPreview.Margin = new System.Windows.Forms.Padding(3, 5, 3, 0); - this.lblScreenPreview.Name = "lblScreenPreview"; - this.lblScreenPreview.Size = new System.Drawing.Size(48, 13); - this.lblScreenPreview.TabIndex = 20; - this.lblScreenPreview.Text = "Preview:"; - // - // lblTileIndex - // - this.lblTileIndex.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblTileIndex.AutoSize = true; - this.lblTileIndex.Location = new System.Drawing.Point(3, 32); - this.lblTileIndex.Name = "lblTileIndex"; - this.lblTileIndex.Size = new System.Drawing.Size(56, 13); - this.lblTileIndex.TabIndex = 0; - this.lblTileIndex.Text = "Tile Index:"; - // - // txtTileIndex - // - this.txtTileIndex.BackColor = System.Drawing.SystemColors.Window; - this.txtTileIndex.Location = new System.Drawing.Point(75, 29); - this.txtTileIndex.Name = "txtTileIndex"; - this.txtTileIndex.ReadOnly = true; - this.txtTileIndex.Size = new System.Drawing.Size(26, 20); - this.txtTileIndex.TabIndex = 7; - // - // lblTile - // - this.lblTile.AutoSize = true; - this.lblTile.Location = new System.Drawing.Point(3, 57); - this.lblTile.Margin = new System.Windows.Forms.Padding(3, 5, 3, 0); - this.lblTile.Name = "lblTile"; - this.lblTile.Size = new System.Drawing.Size(27, 13); - this.lblTile.TabIndex = 6; - this.lblTile.Text = "Tile:"; - // - // picTile - // - this.picTile.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.picTile.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.picTile.Location = new System.Drawing.Point(75, 55); - this.picTile.Name = "picTile"; - this.tlpInfo.SetRowSpan(this.picTile, 3); - this.picTile.Size = new System.Drawing.Size(66, 130); - this.picTile.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.picTile.TabIndex = 12; - this.picTile.TabStop = false; - // - // chkDisplaySpriteOutlines - // - this.chkDisplaySpriteOutlines.AutoSize = true; - this.tlpInfo.SetColumnSpan(this.chkDisplaySpriteOutlines, 4); - this.chkDisplaySpriteOutlines.Location = new System.Drawing.Point(3, 441); - this.chkDisplaySpriteOutlines.Name = "chkDisplaySpriteOutlines"; - this.chkDisplaySpriteOutlines.Size = new System.Drawing.Size(227, 17); - this.chkDisplaySpriteOutlines.TabIndex = 27; - this.chkDisplaySpriteOutlines.Text = "Display outline around all sprites in preview"; - this.chkDisplaySpriteOutlines.UseVisualStyleBackColor = true; - this.chkDisplaySpriteOutlines.Click += new System.EventHandler(this.chkDisplaySpriteOutlines_Click); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 1; - this.tlpInfo.SetColumnSpan(this.tableLayoutPanel1, 2); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.chkHorizontalMirroring, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.chkVerticalMirroring, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.chkBackgroundPriority, 0, 2); - this.tableLayoutPanel1.Location = new System.Drawing.Point(144, 118); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(3); - this.tableLayoutPanel1.RowCount = 3; - 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.Size = new System.Drawing.Size(130, 57); - this.tableLayoutPanel1.TabIndex = 24; - // - // chkHorizontalMirroring - // - this.chkHorizontalMirroring.AutoCheck = false; - this.chkHorizontalMirroring.AutoSize = true; - this.chkHorizontalMirroring.Location = new System.Drawing.Point(6, 3); - this.chkHorizontalMirroring.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.chkHorizontalMirroring.Name = "chkHorizontalMirroring"; - this.chkHorizontalMirroring.Size = new System.Drawing.Size(89, 17); - this.chkHorizontalMirroring.TabIndex = 13; - this.chkHorizontalMirroring.Text = "Horizontal flip"; - this.chkHorizontalMirroring.UseVisualStyleBackColor = true; - // - // chkVerticalMirroring - // - this.chkVerticalMirroring.AutoCheck = false; - this.chkVerticalMirroring.AutoSize = true; - this.chkVerticalMirroring.Location = new System.Drawing.Point(6, 20); - this.chkVerticalMirroring.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.chkVerticalMirroring.Name = "chkVerticalMirroring"; - this.chkVerticalMirroring.Size = new System.Drawing.Size(77, 17); - this.chkVerticalMirroring.TabIndex = 14; - this.chkVerticalMirroring.Text = "Vertical flip"; - this.chkVerticalMirroring.UseVisualStyleBackColor = true; - // - // chkBackgroundPriority - // - this.chkBackgroundPriority.AutoCheck = false; - this.chkBackgroundPriority.AutoSize = true; - this.chkBackgroundPriority.Location = new System.Drawing.Point(6, 37); - this.chkBackgroundPriority.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.chkBackgroundPriority.Name = "chkBackgroundPriority"; - this.chkBackgroundPriority.Size = new System.Drawing.Size(118, 17); - this.chkBackgroundPriority.TabIndex = 19; - this.chkBackgroundPriority.Text = "Background Priority"; - this.chkBackgroundPriority.UseVisualStyleBackColor = true; - // - // lblPosition - // - this.lblPosition.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblPosition.AutoSize = true; - this.lblPosition.Location = new System.Drawing.Point(147, 98); - this.lblPosition.Name = "lblPosition"; - this.lblPosition.Size = new System.Drawing.Size(73, 13); - this.lblPosition.TabIndex = 16; - this.lblPosition.Text = "Position (X,Y):"; - // - // lblPalette - // - this.lblPalette.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblPalette.AutoSize = true; - this.lblPalette.Location = new System.Drawing.Point(147, 68); - this.lblPalette.Margin = new System.Windows.Forms.Padding(3, 5, 3, 0); - this.lblPalette.Name = "lblPalette"; - this.lblPalette.Size = new System.Drawing.Size(43, 13); - this.lblPalette.TabIndex = 26; - this.lblPalette.Text = "Palette:"; - // - // txtPosition - // - this.txtPosition.BackColor = System.Drawing.SystemColors.Window; - this.txtPosition.Location = new System.Drawing.Point(237, 95); - this.txtPosition.Name = "txtPosition"; - this.txtPosition.ReadOnly = true; - this.txtPosition.Size = new System.Drawing.Size(66, 20); - this.txtPosition.TabIndex = 18; - // - // ctrlTilePalette - // - this.ctrlTilePalette.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.tlpInfo.SetColumnSpan(this.ctrlTilePalette, 2); - this.ctrlTilePalette.DisplayIndexes = false; - this.ctrlTilePalette.HighlightMouseOver = false; - this.ctrlTilePalette.Location = new System.Drawing.Point(237, 55); - this.ctrlTilePalette.Name = "ctrlTilePalette"; - this.ctrlTilePalette.Size = new System.Drawing.Size(130, 34); - this.ctrlTilePalette.TabIndex = 25; - // - // lblTileAddress - // - this.lblTileAddress.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblTileAddress.AutoSize = true; - this.lblTileAddress.Location = new System.Drawing.Point(147, 6); - this.lblTileAddress.Name = "lblTileAddress"; - this.lblTileAddress.Size = new System.Drawing.Size(68, 13); - this.lblTileAddress.TabIndex = 1; - this.lblTileAddress.Text = "Tile Address:"; - // - // lblPaletteAddr - // - this.lblPaletteAddr.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblPaletteAddr.AutoSize = true; - this.lblPaletteAddr.Location = new System.Drawing.Point(147, 32); - this.lblPaletteAddr.Name = "lblPaletteAddr"; - this.lblPaletteAddr.Size = new System.Drawing.Size(84, 13); - this.lblPaletteAddr.TabIndex = 15; - this.lblPaletteAddr.Text = "Palette Address:"; - // - // txtTileAddress - // - this.txtTileAddress.BackColor = System.Drawing.SystemColors.Window; - this.txtTileAddress.Location = new System.Drawing.Point(237, 3); - this.txtTileAddress.Name = "txtTileAddress"; - this.txtTileAddress.ReadOnly = true; - this.txtTileAddress.Size = new System.Drawing.Size(42, 20); - this.txtTileAddress.TabIndex = 8; - // - // txtPaletteAddress - // - this.txtPaletteAddress.BackColor = System.Drawing.SystemColors.Window; - this.txtPaletteAddress.Location = new System.Drawing.Point(237, 29); - this.txtPaletteAddress.Name = "txtPaletteAddress"; - this.txtPaletteAddress.ReadOnly = true; - this.txtPaletteAddress.Size = new System.Drawing.Size(42, 20); - this.txtPaletteAddress.TabIndex = 17; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.ColumnCount = 5; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Controls.Add(this.radCpuPage, 2, 0); - this.tableLayoutPanel3.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.radSpriteRam, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.nudCpuPage, 3, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 1; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(416, 25); - this.tableLayoutPanel3.TabIndex = 5; - // - // radCpuPage - // - this.radCpuPage.AutoSize = true; - this.radCpuPage.Location = new System.Drawing.Point(164, 3); - this.radCpuPage.Name = "radCpuPage"; - this.radCpuPage.Size = new System.Drawing.Size(85, 17); - this.radCpuPage.TabIndex = 2; - this.radCpuPage.Text = "CPU Page #"; - this.radCpuPage.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(3, 6); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(70, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Data Source:"; - // - // radSpriteRam - // - this.radSpriteRam.AutoSize = true; - this.radSpriteRam.Checked = true; - this.radSpriteRam.Location = new System.Drawing.Point(79, 3); - this.radSpriteRam.Name = "radSpriteRam"; - this.radSpriteRam.Size = new System.Drawing.Size(79, 17); - this.radSpriteRam.TabIndex = 1; - this.radSpriteRam.TabStop = true; - this.radSpriteRam.Text = "Sprite RAM"; - this.radSpriteRam.UseVisualStyleBackColor = true; - // - // nudCpuPage - // - this.nudCpuPage.Hexadecimal = true; - this.nudCpuPage.Location = new System.Drawing.Point(255, 3); - this.nudCpuPage.Maximum = new decimal(new int[] { + this.ctxMenu.Name = "ctxMenu"; + this.ctxMenu.Size = new System.Drawing.Size(264, 148); + this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening); + // + // mnuEditInMemoryViewer + // + this.mnuEditInMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; + this.mnuEditInMemoryViewer.Name = "mnuEditInMemoryViewer"; + this.mnuEditInMemoryViewer.Size = new System.Drawing.Size(263, 22); + this.mnuEditInMemoryViewer.Text = "Edit in Memory Viewer"; + this.mnuEditInMemoryViewer.Click += new System.EventHandler(this.mnuEditInMemoryViewer_Click); + // + // mnuShowInChrViewer + // + this.mnuShowInChrViewer.Image = global::Mesen.GUI.Properties.Resources.NextArrow; + this.mnuShowInChrViewer.Name = "mnuShowInChrViewer"; + this.mnuShowInChrViewer.ShortcutKeyDisplayString = "Dbl-Click"; + this.mnuShowInChrViewer.Size = new System.Drawing.Size(263, 22); + this.mnuShowInChrViewer.Text = "View in CHR viewer"; + this.mnuShowInChrViewer.Click += new System.EventHandler(this.mnuShowInChrViewer_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(260, 6); + // + // mnuCopyHdPack + // + this.mnuCopyHdPack.Name = "mnuCopyHdPack"; + this.mnuCopyHdPack.Size = new System.Drawing.Size(263, 22); + this.mnuCopyHdPack.Text = "Copy Tile (HD Pack Format)"; + this.mnuCopyHdPack.Click += new System.EventHandler(this.mnuCopyHdPack_Click); + // + // mnuCopyAllSpritesHdPack + // + this.mnuCopyAllSpritesHdPack.Name = "mnuCopyAllSpritesHdPack"; + this.mnuCopyAllSpritesHdPack.Size = new System.Drawing.Size(263, 22); + this.mnuCopyAllSpritesHdPack.Text = "Copy All Sprites (HD Pack Format)"; + this.mnuCopyAllSpritesHdPack.Click += new System.EventHandler(this.mnuCopyAllSpritesHdPack_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(260, 6); + // + // mnuCopyToClipboard + // + this.mnuCopyToClipboard.Image = global::Mesen.GUI.Properties.Resources.Copy; + this.mnuCopyToClipboard.Name = "mnuCopyToClipboard"; + this.mnuCopyToClipboard.Size = new System.Drawing.Size(263, 22); + this.mnuCopyToClipboard.Text = "Copy image to clipboard"; + this.mnuCopyToClipboard.Click += new System.EventHandler(this.mnuCopyToClipboard_Click); + // + // mnuExportToPng + // + this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export; + this.mnuExportToPng.Name = "mnuExportToPng"; + this.mnuExportToPng.Size = new System.Drawing.Size(263, 22); + this.mnuExportToPng.Text = "Export image to PNG"; + this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click); + // + // lblScreenPreview + // + this.lblScreenPreview.AutoSize = true; + this.lblScreenPreview.Location = new System.Drawing.Point(3, 187); + this.lblScreenPreview.Margin = new System.Windows.Forms.Padding(3, 5, 3, 0); + this.lblScreenPreview.Name = "lblScreenPreview"; + this.lblScreenPreview.Size = new System.Drawing.Size(45, 12); + this.lblScreenPreview.TabIndex = 20; + this.lblScreenPreview.Text = "Preview:"; + // + // lblTileIndex + // + this.lblTileIndex.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblTileIndex.AutoSize = true; + this.lblTileIndex.Location = new System.Drawing.Point(3, 36); + this.lblTileIndex.Name = "lblTileIndex"; + this.lblTileIndex.Size = new System.Drawing.Size(56, 12); + this.lblTileIndex.TabIndex = 0; + this.lblTileIndex.Text = "Tile Index:"; + // + // txtTileIndex + // + this.txtTileIndex.BackColor = System.Drawing.SystemColors.Window; + this.txtTileIndex.Location = new System.Drawing.Point(74, 31); + this.txtTileIndex.Name = "txtTileIndex"; + this.txtTileIndex.ReadOnly = true; + this.txtTileIndex.Size = new System.Drawing.Size(26, 22); + this.txtTileIndex.TabIndex = 7; + // + // lblTile + // + this.lblTile.AutoSize = true; + this.lblTile.Location = new System.Drawing.Point(3, 61); + this.lblTile.Margin = new System.Windows.Forms.Padding(3, 5, 3, 0); + this.lblTile.Name = "lblTile"; + this.lblTile.Size = new System.Drawing.Size(26, 12); + this.lblTile.TabIndex = 6; + this.lblTile.Text = "Tile:"; + // + // picTile + // + this.picTile.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.picTile.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picTile.Location = new System.Drawing.Point(74, 59); + this.picTile.Name = "picTile"; + this.tlpInfo.SetRowSpan(this.picTile, 3); + this.picTile.Size = new System.Drawing.Size(66, 120); + this.picTile.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.picTile.TabIndex = 12; + this.picTile.TabStop = false; + // + // chkDisplaySpriteOutlines + // + this.chkDisplaySpriteOutlines.AutoSize = true; + this.tlpInfo.SetColumnSpan(this.chkDisplaySpriteOutlines, 4); + this.chkDisplaySpriteOutlines.Location = new System.Drawing.Point(3, 417); + this.chkDisplaySpriteOutlines.Name = "chkDisplaySpriteOutlines"; + this.chkDisplaySpriteOutlines.Size = new System.Drawing.Size(228, 16); + this.chkDisplaySpriteOutlines.TabIndex = 27; + this.chkDisplaySpriteOutlines.Text = "Display outline around all sprites in preview"; + this.chkDisplaySpriteOutlines.UseVisualStyleBackColor = true; + this.chkDisplaySpriteOutlines.Click += new System.EventHandler(this.chkDisplaySpriteOutlines_Click); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel1.ColumnCount = 1; + this.tlpInfo.SetColumnSpan(this.tableLayoutPanel1, 2); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.chkHorizontalMirroring, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.chkVerticalMirroring, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.chkBackgroundPriority, 0, 2); + this.tableLayoutPanel1.Location = new System.Drawing.Point(143, 121); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(3); + this.tableLayoutPanel1.RowCount = 3; + 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.Size = new System.Drawing.Size(132, 54); + this.tableLayoutPanel1.TabIndex = 24; + // + // chkHorizontalMirroring + // + this.chkHorizontalMirroring.AutoCheck = false; + this.chkHorizontalMirroring.AutoSize = true; + this.chkHorizontalMirroring.Location = new System.Drawing.Point(6, 3); + this.chkHorizontalMirroring.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.chkHorizontalMirroring.Name = "chkHorizontalMirroring"; + this.chkHorizontalMirroring.Size = new System.Drawing.Size(92, 16); + this.chkHorizontalMirroring.TabIndex = 13; + this.chkHorizontalMirroring.Text = "Horizontal flip"; + this.chkHorizontalMirroring.UseVisualStyleBackColor = true; + // + // chkVerticalMirroring + // + this.chkVerticalMirroring.AutoCheck = false; + this.chkVerticalMirroring.AutoSize = true; + this.chkVerticalMirroring.Location = new System.Drawing.Point(6, 19); + this.chkVerticalMirroring.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.chkVerticalMirroring.Name = "chkVerticalMirroring"; + this.chkVerticalMirroring.Size = new System.Drawing.Size(79, 16); + this.chkVerticalMirroring.TabIndex = 14; + this.chkVerticalMirroring.Text = "Vertical flip"; + this.chkVerticalMirroring.UseVisualStyleBackColor = true; + // + // chkBackgroundPriority + // + this.chkBackgroundPriority.AutoCheck = false; + this.chkBackgroundPriority.AutoSize = true; + this.chkBackgroundPriority.Location = new System.Drawing.Point(6, 35); + this.chkBackgroundPriority.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.chkBackgroundPriority.Name = "chkBackgroundPriority"; + this.chkBackgroundPriority.Size = new System.Drawing.Size(120, 16); + this.chkBackgroundPriority.TabIndex = 19; + this.chkBackgroundPriority.Text = "Background Priority"; + this.chkBackgroundPriority.UseVisualStyleBackColor = true; + // + // lblPosition + // + this.lblPosition.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblPosition.AutoSize = true; + this.lblPosition.Location = new System.Drawing.Point(146, 101); + this.lblPosition.Name = "lblPosition"; + this.lblPosition.Size = new System.Drawing.Size(75, 12); + this.lblPosition.TabIndex = 16; + this.lblPosition.Text = "Position (X,Y):"; + // + // lblPalette + // + this.lblPalette.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblPalette.AutoSize = true; + this.lblPalette.Location = new System.Drawing.Point(146, 71); + this.lblPalette.Margin = new System.Windows.Forms.Padding(3, 5, 3, 0); + this.lblPalette.Name = "lblPalette"; + this.lblPalette.Size = new System.Drawing.Size(38, 12); + this.lblPalette.TabIndex = 26; + this.lblPalette.Text = "Palette:"; + // + // txtPosition + // + this.txtPosition.BackColor = System.Drawing.SystemColors.Window; + this.txtPosition.Location = new System.Drawing.Point(230, 96); + this.txtPosition.Name = "txtPosition"; + this.txtPosition.ReadOnly = true; + this.txtPosition.Size = new System.Drawing.Size(66, 22); + this.txtPosition.TabIndex = 18; + // + // ctrlTilePalette + // + this.ctrlTilePalette.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.tlpInfo.SetColumnSpan(this.ctrlTilePalette, 2); + this.ctrlTilePalette.DisplayIndexes = false; + this.ctrlTilePalette.HighlightMouseOver = false; + this.ctrlTilePalette.Location = new System.Drawing.Point(230, 59); + this.ctrlTilePalette.Name = "ctrlTilePalette"; + this.ctrlTilePalette.Size = new System.Drawing.Size(130, 31); + this.ctrlTilePalette.TabIndex = 25; + // + // lblTileAddress + // + this.lblTileAddress.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblTileAddress.AutoSize = true; + this.lblTileAddress.Location = new System.Drawing.Point(146, 8); + this.lblTileAddress.Name = "lblTileAddress"; + this.lblTileAddress.Size = new System.Drawing.Size(66, 12); + this.lblTileAddress.TabIndex = 1; + this.lblTileAddress.Text = "Tile Address:"; + // + // lblPaletteAddr + // + this.lblPaletteAddr.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblPaletteAddr.AutoSize = true; + this.lblPaletteAddr.Location = new System.Drawing.Point(146, 36); + this.lblPaletteAddr.Name = "lblPaletteAddr"; + this.lblPaletteAddr.Size = new System.Drawing.Size(78, 12); + this.lblPaletteAddr.TabIndex = 15; + this.lblPaletteAddr.Text = "Palette Address:"; + // + // txtTileAddress + // + this.txtTileAddress.BackColor = System.Drawing.SystemColors.Window; + this.txtTileAddress.Location = new System.Drawing.Point(230, 3); + this.txtTileAddress.Name = "txtTileAddress"; + this.txtTileAddress.ReadOnly = true; + this.txtTileAddress.Size = new System.Drawing.Size(42, 22); + this.txtTileAddress.TabIndex = 8; + // + // txtPaletteAddress + // + this.txtPaletteAddress.BackColor = System.Drawing.SystemColors.Window; + this.txtPaletteAddress.Location = new System.Drawing.Point(230, 31); + this.txtPaletteAddress.Name = "txtPaletteAddress"; + this.txtPaletteAddress.ReadOnly = true; + this.txtPaletteAddress.Size = new System.Drawing.Size(42, 22); + this.txtPaletteAddress.TabIndex = 17; + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(302, 101); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(88, 12); + this.label2.TabIndex = 28; + this.label2.Text = "(Y = OAM[0] +1)"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 5; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.radCpuPage, 2, 0); + this.tableLayoutPanel3.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.radSpriteRam, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.nudCpuPage, 3, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(416, 23); + this.tableLayoutPanel3.TabIndex = 5; + // + // radCpuPage + // + this.radCpuPage.AutoSize = true; + this.radCpuPage.Location = new System.Drawing.Point(158, 3); + this.radCpuPage.Name = "radCpuPage"; + this.radCpuPage.Size = new System.Drawing.Size(79, 16); + this.radCpuPage.TabIndex = 2; + this.radCpuPage.Text = "CPU Page #"; + this.radCpuPage.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(64, 12); + this.label1.TabIndex = 0; + this.label1.Text = "Data Source:"; + // + // radSpriteRam + // + this.radSpriteRam.AutoSize = true; + this.radSpriteRam.Checked = true; + this.radSpriteRam.Location = new System.Drawing.Point(73, 3); + this.radSpriteRam.Name = "radSpriteRam"; + this.radSpriteRam.Size = new System.Drawing.Size(79, 16); + this.radSpriteRam.TabIndex = 1; + this.radSpriteRam.TabStop = true; + this.radSpriteRam.Text = "Sprite RAM"; + this.radSpriteRam.UseVisualStyleBackColor = true; + // + // nudCpuPage + // + this.nudCpuPage.Hexadecimal = true; + this.nudCpuPage.Location = new System.Drawing.Point(243, 3); + this.nudCpuPage.Maximum = new decimal(new int[] { 255, 0, 0, 0}); - this.nudCpuPage.Name = "nudCpuPage"; - this.nudCpuPage.Size = new System.Drawing.Size(42, 20); - this.nudCpuPage.TabIndex = 3; - this.nudCpuPage.Click += new System.EventHandler(this.nudCpuPage_Click); - // - // picSprites - // - this.picSprites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.picSprites.ContextMenuStrip = this.ctxMenu; - this.picSprites.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; - this.picSprites.Location = new System.Drawing.Point(4, 4); - this.picSprites.Margin = new System.Windows.Forms.Padding(4); - this.picSprites.Name = "picSprites"; - this.tlpMain.SetRowSpan(this.picSprites, 2); - this.picSprites.Size = new System.Drawing.Size(258, 514); - this.picSprites.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.picSprites.TabIndex = 0; - this.picSprites.TabStop = false; - this.picSprites.DoubleClick += new System.EventHandler(this.picSprites_DoubleClick); - this.picSprites.MouseEnter += new System.EventHandler(this.picSprites_MouseEnter); - this.picSprites.MouseLeave += new System.EventHandler(this.picSprites_MouseLeave); - this.picSprites.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picSprites_MouseMove); - // - // ctrlSpriteViewer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.tlpMain); - this.Name = "ctrlSpriteViewer"; - this.Size = new System.Drawing.Size(682, 527); - this.tlpMain.ResumeLayout(false); - this.tableLayoutPanel2.ResumeLayout(false); - this.grpSpriteInfo.ResumeLayout(false); - this.tlpInfo.ResumeLayout(false); - this.tlpInfo.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picPreview)).EndInit(); - this.ctxMenu.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.picTile)).EndInit(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudCpuPage)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.picSprites)).EndInit(); - this.ResumeLayout(false); + this.nudCpuPage.Name = "nudCpuPage"; + this.nudCpuPage.Size = new System.Drawing.Size(42, 22); + this.nudCpuPage.TabIndex = 3; + this.nudCpuPage.Click += new System.EventHandler(this.nudCpuPage_Click); + // + // picSprites + // + this.picSprites.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picSprites.ContextMenuStrip = this.ctxMenu; + this.picSprites.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default; + this.picSprites.Location = new System.Drawing.Point(4, 4); + this.picSprites.Margin = new System.Windows.Forms.Padding(4); + this.picSprites.Name = "picSprites"; + this.tlpMain.SetRowSpan(this.picSprites, 2); + this.picSprites.Size = new System.Drawing.Size(258, 475); + this.picSprites.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.picSprites.TabIndex = 0; + this.picSprites.TabStop = false; + this.picSprites.DoubleClick += new System.EventHandler(this.picSprites_DoubleClick); + this.picSprites.MouseEnter += new System.EventHandler(this.picSprites_MouseEnter); + this.picSprites.MouseLeave += new System.EventHandler(this.picSprites_MouseLeave); + this.picSprites.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picSprites_MouseMove); + // + // ctrlSpriteViewer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tlpMain); + this.Name = "ctrlSpriteViewer"; + this.Size = new System.Drawing.Size(682, 486); + this.tlpMain.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.grpSpriteInfo.ResumeLayout(false); + this.tlpInfo.ResumeLayout(false); + this.tlpInfo.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picPreview)).EndInit(); + this.ctxMenu.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picTile)).EndInit(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudCpuPage)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picSprites)).EndInit(); + this.ResumeLayout(false); } @@ -631,5 +643,6 @@ namespace Mesen.GUI.Debugger.Controls private System.Windows.Forms.Label label1; private System.Windows.Forms.RadioButton radSpriteRam; private System.Windows.Forms.NumericUpDown nudCpuPage; + private System.Windows.Forms.Label label2; } } diff --git a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs index ab741916..55be6965 100644 --- a/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs +++ b/GUI.NET/Debugger/Controls/ctrlSpriteViewer.cs @@ -319,7 +319,7 @@ namespace Mesen.GUI.Debugger.Controls _forceRefresh = false; _selectedSprite = ramAddr / 4; - int spriteY = _spriteRam[ramAddr]; + int spriteY = _spriteRam[ramAddr] + 1; int tileIndex = _spriteRam[ramAddr + 1]; int attributes = _spriteRam[ramAddr + 2]; int spriteX = _spriteRam[ramAddr + 3]; From 708a13b1c7c48b89dd4e89352f13894db6913f34 Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Wed, 14 Jul 2021 16:08:34 +0800 Subject: [PATCH 3/8] Split the Exclusive Refresh Rate in to 2 settings --- Core/EmulationSettings.h | 25 + GUI.NET/Config/VideoInfo.cs | 2 + GUI.NET/Dependencies/resources.ca.xml | 3 +- GUI.NET/Dependencies/resources.en.xml | 3 +- .../Forms/Config/frmVideoConfig.Designer.cs | 3842 +++++++++-------- GUI.NET/Forms/Config/frmVideoConfig.cs | 1 + GUI.NET/Forms/Config/frmVideoConfig.resx | 10 +- GUI.NET/InteropEmu.cs | 1 + InteropDLL/ConsoleWrapper.cpp | 1 + Windows/Renderer.cpp | 2 +- 10 files changed, 1979 insertions(+), 1911 deletions(-) diff --git a/Core/EmulationSettings.h b/Core/EmulationSettings.h index 25160a9a..faa85e60 100644 --- a/Core/EmulationSettings.h +++ b/Core/EmulationSettings.h @@ -698,6 +698,7 @@ private: bool _spritesEnabled = true; uint32_t _screenRotation = 0; uint32_t _exclusiveRefreshRate = 60; + uint32_t _exclusiveRefreshRate2 = 50; ConsoleType _consoleType = ConsoleType::Nes; ExpansionPortDevice _expansionDevice = ExpansionPortDevice::None; @@ -1281,6 +1282,30 @@ public: return _exclusiveRefreshRate; } + void SetExclusiveRefreshRate2(uint32_t refreshRate) + { + _exclusiveRefreshRate2 = refreshRate; + } + + uint32_t GetExclusiveRefreshRate2() + { + return _exclusiveRefreshRate2; + } + + uint32_t GetExclusiveRefreshRateByModel(NesModel m) + { + switch (m) { + case NesModel::NTSC: + return _exclusiveRefreshRate; + break; + case NesModel::PAL: + case NesModel::Dendy: + return _exclusiveRefreshRate2; + break; + } + return _exclusiveRefreshRate; + } + void SetExpansionDevice(ExpansionPortDevice expansionDevice) { _expansionDevice = expansionDevice; diff --git a/GUI.NET/Config/VideoInfo.cs b/GUI.NET/Config/VideoInfo.cs index 696455c6..37558f0b 100644 --- a/GUI.NET/Config/VideoInfo.cs +++ b/GUI.NET/Config/VideoInfo.cs @@ -57,6 +57,7 @@ namespace Mesen.GUI.Config public bool UseExclusiveFullscreen = false; public string FullscreenResolution = ""; public VideoRefreshRates ExclusiveFullscreenRefreshRate = VideoRefreshRates._60; + public VideoRefreshRates ExclusiveFullscreenRefreshRate2 = VideoRefreshRates._50; public bool UseCustomVsPalette = false; public bool ShowColorIndexes = true; @@ -100,6 +101,7 @@ namespace Mesen.GUI.Config InteropEmu.SetScreenRotation((UInt32)videoInfo.ScreenRotation); InteropEmu.SetExclusiveRefreshRate((UInt32)videoInfo.ExclusiveFullscreenRefreshRate); + InteropEmu.SetExclusiveRefreshRate2((UInt32)videoInfo.ExclusiveFullscreenRefreshRate2); InteropEmu.SetVideoFilter(videoInfo.VideoFilter); InteropEmu.SetVideoResizeFilter(videoInfo.UseBilinearInterpolation ? VideoResizeFilter.Bilinear : VideoResizeFilter.NearestNeighbor); diff --git a/GUI.NET/Dependencies/resources.ca.xml b/GUI.NET/Dependencies/resources.ca.xml index bf2bc39a..9a258191 100644 --- a/GUI.NET/Dependencies/resources.ca.xml +++ b/GUI.NET/Dependencies/resources.ca.xml @@ -244,7 +244,8 @@ Fes servir els paquets d'alta resolució d'HDNes Fes servir el mode de pantalla completa exclusiva Fullscreen Resolution: - Requested Refresh Rate: + Requested Refresh Rate NTSC: + PAL / Dendy: Sobreescaneig Global Game-Specific diff --git a/GUI.NET/Dependencies/resources.en.xml b/GUI.NET/Dependencies/resources.en.xml index f02a978c..bfcb21d5 100644 --- a/GUI.NET/Dependencies/resources.en.xml +++ b/GUI.NET/Dependencies/resources.en.xml @@ -244,7 +244,8 @@ Use HDNes HD packs Use exclusive fullscreen mode Fullscreen Resolution: - Requested Refresh Rate: + Requested Refresh Rate NTSC: + PAL / Dendy: Overscan Global Game-Specific diff --git a/GUI.NET/Forms/Config/frmVideoConfig.Designer.cs b/GUI.NET/Forms/Config/frmVideoConfig.Designer.cs index 5f4177eb..9a07ee71 100644 --- a/GUI.NET/Forms/Config/frmVideoConfig.Designer.cs +++ b/GUI.NET/Forms/Config/frmVideoConfig.Designer.cs @@ -29,249 +29,251 @@ namespace Mesen.GUI.Forms.Config /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmVideoConfig)); - this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); - this.flpResolution = new System.Windows.Forms.FlowLayoutPanel(); - this.lblFullscreenResolution = new System.Windows.Forms.Label(); - this.cboFullscreenResolution = new System.Windows.Forms.ComboBox(); - this.chkUseExclusiveFullscreen = new System.Windows.Forms.CheckBox(); - this.lblVideoScale = new System.Windows.Forms.Label(); - this.chkVerticalSync = new System.Windows.Forms.CheckBox(); - this.lblDisplayRatio = new System.Windows.Forms.Label(); - this.flowLayoutPanel7 = new System.Windows.Forms.FlowLayoutPanel(); - this.chkUseHdPacks = new System.Windows.Forms.CheckBox(); - this.picHdNesTooltip = new System.Windows.Forms.PictureBox(); - this.nudScale = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel(); - this.cboAspectRatio = new System.Windows.Forms.ComboBox(); - this.lblCustomRatio = new System.Windows.Forms.Label(); - this.nudCustomRatio = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.chkFullscreenForceIntegerScale = new System.Windows.Forms.CheckBox(); - this.chkShowFps = new System.Windows.Forms.CheckBox(); - this.chkIntegerFpsMode = new System.Windows.Forms.CheckBox(); - this.flpRefreshRate = new System.Windows.Forms.FlowLayoutPanel(); - this.lblRequestedRefreshRate = new System.Windows.Forms.Label(); - this.cboRefreshRate = new System.Windows.Forms.ComboBox(); - this.tabMain = new System.Windows.Forms.TabControl(); - this.tpgGeneral = new System.Windows.Forms.TabPage(); - this.tpgPicture = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); - this.btnSelectPreset = new System.Windows.Forms.Button(); - this.btnResetPictureSettings = new System.Windows.Forms.Button(); - this.grpNtscFilter = new System.Windows.Forms.GroupBox(); - this.tlpNtscFilter2 = new System.Windows.Forms.TableLayoutPanel(); - this.trkYFilterLength = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkIFilterLength = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkQFilterLength = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.tlpNtscFilter1 = new System.Windows.Forms.TableLayoutPanel(); - this.trkArtifacts = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkBleed = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkFringing = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkGamma = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkResolution = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkSharpness = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); - this.chkMergeFields = new System.Windows.Forms.CheckBox(); - this.chkVerticalBlend = new System.Windows.Forms.CheckBox(); - this.grpCommon = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.chkBilinearInterpolation = new System.Windows.Forms.CheckBox(); - this.trkBrightness = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkContrast = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkHue = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.trkSaturation = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.grpScanlines = new System.Windows.Forms.GroupBox(); - this.trkScanlines = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); - this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); - this.cboFilter = new System.Windows.Forms.ComboBox(); - this.lblVideoFilter = new System.Windows.Forms.Label(); - this.tpgOverscan = new System.Windows.Forms.TabPage(); - this.tabOverscan = new System.Windows.Forms.TabControl(); - this.tpgOverscanGlobal = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.picOverscan = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel(); - this.nudOverscanTop = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblTop = new System.Windows.Forms.Label(); - this.tableLayoutPanel12 = new System.Windows.Forms.TableLayoutPanel(); - this.nudOverscanBottom = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblBottom = new System.Windows.Forms.Label(); - this.tableLayoutPanel13 = new System.Windows.Forms.TableLayoutPanel(); - this.nudOverscanRight = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblRight = new System.Windows.Forms.Label(); - this.tableLayoutPanel14 = new System.Windows.Forms.TableLayoutPanel(); - this.nudOverscanLeft = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblLeft = new System.Windows.Forms.Label(); - this.tpgOverscanGameSpecific = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); - this.picGameSpecificOverscan = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel15 = new System.Windows.Forms.TableLayoutPanel(); - this.nudGameSpecificOverscanTop = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblGameSpecificOverscanTop = new System.Windows.Forms.Label(); - this.tableLayoutPanel16 = new System.Windows.Forms.TableLayoutPanel(); - this.nudGameSpecificOverscanBottom = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblGameSpecificOverscanBottom = new System.Windows.Forms.Label(); - this.tableLayoutPanel17 = new System.Windows.Forms.TableLayoutPanel(); - this.nudGameSpecificOverscanRight = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblGameSpecificOverscanRight = new System.Windows.Forms.Label(); - this.tableLayoutPanel18 = new System.Windows.Forms.TableLayoutPanel(); - this.nudGameSpecificOverscanLeft = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblGameSpecificOverscanLeft = new System.Windows.Forms.Label(); - this.chkEnableGameSpecificOverscan = new System.Windows.Forms.CheckBox(); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.tpgPalette = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.btnExportPalette = new System.Windows.Forms.Button(); - this.btnSelectPalette = new System.Windows.Forms.Button(); - this.btnLoadPalFile = new System.Windows.Forms.Button(); - this.chkShowColorIndexes = new System.Windows.Forms.CheckBox(); - this.chkUseCustomVsPalette = new System.Windows.Forms.CheckBox(); - this.ctrlPaletteDisplay = new Mesen.GUI.Debugger.ctrlPaletteDisplay(); - this.tpgAdvanced = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel9 = new System.Windows.Forms.TableLayoutPanel(); - this.chkDisableBackground = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkDisableSprites = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkForceBackgroundFirstColumn = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkForceSpritesFirstColumn = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.lblScreenRotation = new System.Windows.Forms.Label(); - this.cboScreenRotation = new System.Windows.Forms.ComboBox(); - this.chkRemoveSpriteLimit = new System.Windows.Forms.CheckBox(); - this.chkAdaptiveSpriteLimit = new System.Windows.Forms.CheckBox(); - this.contextPicturePresets = new System.Windows.Forms.ContextMenuStrip(this.components); - this.mnuPresetComposite = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPresetSVideo = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPresetRgb = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPresetMonochrome = new System.Windows.Forms.ToolStripMenuItem(); - this.colorDialog = new System.Windows.Forms.ColorDialog(); - this.contextPaletteList = new System.Windows.Forms.ContextMenuStrip(this.components); - this.mnuDefaultPalette = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuPaletteCompositeDirect = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPaletteNesClassic = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPaletteNestopiaRgb = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPaletteOriginalHardware = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPalettePvmStyle = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPaletteSonyCxa2025As = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPaletteUnsaturated = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPaletteYuv = new System.Windows.Forms.ToolStripMenuItem(); - this.tlpMain.SuspendLayout(); - this.flpResolution.SuspendLayout(); - this.flowLayoutPanel7.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picHdNesTooltip)).BeginInit(); - this.flowLayoutPanel6.SuspendLayout(); - this.flpRefreshRate.SuspendLayout(); - this.tabMain.SuspendLayout(); - this.tpgGeneral.SuspendLayout(); - this.tpgPicture.SuspendLayout(); - this.tableLayoutPanel5.SuspendLayout(); - this.tableLayoutPanel7.SuspendLayout(); - this.grpNtscFilter.SuspendLayout(); - this.tlpNtscFilter2.SuspendLayout(); - this.tlpNtscFilter1.SuspendLayout(); - this.tableLayoutPanel6.SuspendLayout(); - this.grpCommon.SuspendLayout(); - this.tableLayoutPanel4.SuspendLayout(); - this.grpScanlines.SuspendLayout(); - this.tableLayoutPanel8.SuspendLayout(); - this.tpgOverscan.SuspendLayout(); - this.tabOverscan.SuspendLayout(); - this.tpgOverscanGlobal.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picOverscan)).BeginInit(); - this.tableLayoutPanel11.SuspendLayout(); - this.tableLayoutPanel12.SuspendLayout(); - this.tableLayoutPanel13.SuspendLayout(); - this.tableLayoutPanel14.SuspendLayout(); - this.tpgOverscanGameSpecific.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.tableLayoutPanel10.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picGameSpecificOverscan)).BeginInit(); - this.tableLayoutPanel15.SuspendLayout(); - this.tableLayoutPanel16.SuspendLayout(); - this.tableLayoutPanel17.SuspendLayout(); - this.tableLayoutPanel18.SuspendLayout(); - this.tpgPalette.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.tpgAdvanced.SuspendLayout(); - this.tableLayoutPanel9.SuspendLayout(); - this.contextPicturePresets.SuspendLayout(); - this.contextPaletteList.SuspendLayout(); - this.SuspendLayout(); - // - // baseConfigPanel - // - this.baseConfigPanel.Location = new System.Drawing.Point(0, 428); - this.baseConfigPanel.Size = new System.Drawing.Size(535, 29); - // - // tlpMain - // - this.tlpMain.ColumnCount = 2; - this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpMain.Controls.Add(this.flpResolution, 0, 5); - this.tlpMain.Controls.Add(this.chkUseExclusiveFullscreen, 0, 4); - this.tlpMain.Controls.Add(this.lblVideoScale, 0, 0); - this.tlpMain.Controls.Add(this.chkVerticalSync, 0, 3); - this.tlpMain.Controls.Add(this.lblDisplayRatio, 0, 1); - this.tlpMain.Controls.Add(this.flowLayoutPanel7, 0, 8); - this.tlpMain.Controls.Add(this.nudScale, 1, 0); - this.tlpMain.Controls.Add(this.flowLayoutPanel6, 1, 1); - this.tlpMain.Controls.Add(this.chkFullscreenForceIntegerScale, 0, 7); - this.tlpMain.Controls.Add(this.chkShowFps, 0, 9); - this.tlpMain.Controls.Add(this.chkIntegerFpsMode, 0, 2); - this.tlpMain.Controls.Add(this.flpRefreshRate, 0, 6); - this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpMain.Location = new System.Drawing.Point(3, 3); - this.tlpMain.Margin = new System.Windows.Forms.Padding(0); - this.tlpMain.Name = "tlpMain"; - this.tlpMain.RowCount = 11; - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpMain.Size = new System.Drawing.Size(521, 396); - this.tlpMain.TabIndex = 1; - // - // flpResolution - // - this.tlpMain.SetColumnSpan(this.flpResolution, 2); - this.flpResolution.Controls.Add(this.lblFullscreenResolution); - this.flpResolution.Controls.Add(this.cboFullscreenResolution); - this.flpResolution.Dock = System.Windows.Forms.DockStyle.Fill; - this.flpResolution.Location = new System.Drawing.Point(30, 116); - this.flpResolution.Margin = new System.Windows.Forms.Padding(30, 0, 0, 0); - this.flpResolution.Name = "flpResolution"; - this.flpResolution.Size = new System.Drawing.Size(491, 27); - this.flpResolution.TabIndex = 27; - this.flpResolution.Visible = false; - // - // lblFullscreenResolution - // - this.lblFullscreenResolution.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.lblFullscreenResolution.AutoSize = true; - this.lblFullscreenResolution.Location = new System.Drawing.Point(3, 7); - this.lblFullscreenResolution.Name = "lblFullscreenResolution"; - this.lblFullscreenResolution.Size = new System.Drawing.Size(111, 13); - this.lblFullscreenResolution.TabIndex = 17; - this.lblFullscreenResolution.Text = "Fullscreen Resolution:"; - // - // cboFullscreenResolution - // - this.cboFullscreenResolution.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboFullscreenResolution.FormattingEnabled = true; - this.cboFullscreenResolution.Items.AddRange(new object[] { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmVideoConfig)); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.flpResolution = new System.Windows.Forms.FlowLayoutPanel(); + this.lblFullscreenResolution = new System.Windows.Forms.Label(); + this.cboFullscreenResolution = new System.Windows.Forms.ComboBox(); + this.chkUseExclusiveFullscreen = new System.Windows.Forms.CheckBox(); + this.lblVideoScale = new System.Windows.Forms.Label(); + this.chkVerticalSync = new System.Windows.Forms.CheckBox(); + this.lblDisplayRatio = new System.Windows.Forms.Label(); + this.flowLayoutPanel7 = new System.Windows.Forms.FlowLayoutPanel(); + this.chkUseHdPacks = new System.Windows.Forms.CheckBox(); + this.picHdNesTooltip = new System.Windows.Forms.PictureBox(); + this.nudScale = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel(); + this.cboAspectRatio = new System.Windows.Forms.ComboBox(); + this.lblCustomRatio = new System.Windows.Forms.Label(); + this.nudCustomRatio = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.chkFullscreenForceIntegerScale = new System.Windows.Forms.CheckBox(); + this.chkShowFps = new System.Windows.Forms.CheckBox(); + this.chkIntegerFpsMode = new System.Windows.Forms.CheckBox(); + this.flpRefreshRate = new System.Windows.Forms.FlowLayoutPanel(); + this.lblRequestedRefreshRate = new System.Windows.Forms.Label(); + this.cboRefreshRate = new System.Windows.Forms.ComboBox(); + this.lblRequestedRefreshRate2 = new System.Windows.Forms.Label(); + this.cboRefreshRate2 = new System.Windows.Forms.ComboBox(); + this.tabMain = new System.Windows.Forms.TabControl(); + this.tpgGeneral = new System.Windows.Forms.TabPage(); + this.tpgPicture = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); + this.btnSelectPreset = new System.Windows.Forms.Button(); + this.btnResetPictureSettings = new System.Windows.Forms.Button(); + this.grpNtscFilter = new System.Windows.Forms.GroupBox(); + this.tlpNtscFilter2 = new System.Windows.Forms.TableLayoutPanel(); + this.trkYFilterLength = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkIFilterLength = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkQFilterLength = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.tlpNtscFilter1 = new System.Windows.Forms.TableLayoutPanel(); + this.trkArtifacts = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkBleed = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkFringing = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkGamma = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkResolution = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkSharpness = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); + this.chkMergeFields = new System.Windows.Forms.CheckBox(); + this.chkVerticalBlend = new System.Windows.Forms.CheckBox(); + this.grpCommon = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.chkBilinearInterpolation = new System.Windows.Forms.CheckBox(); + this.trkBrightness = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkContrast = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkHue = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.trkSaturation = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.grpScanlines = new System.Windows.Forms.GroupBox(); + this.trkScanlines = new Mesen.GUI.Controls.ctrlHorizontalTrackbar(); + this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); + this.cboFilter = new System.Windows.Forms.ComboBox(); + this.lblVideoFilter = new System.Windows.Forms.Label(); + this.tpgOverscan = new System.Windows.Forms.TabPage(); + this.tabOverscan = new System.Windows.Forms.TabControl(); + this.tpgOverscanGlobal = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.picOverscan = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel(); + this.nudOverscanTop = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblTop = new System.Windows.Forms.Label(); + this.tableLayoutPanel12 = new System.Windows.Forms.TableLayoutPanel(); + this.nudOverscanBottom = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblBottom = new System.Windows.Forms.Label(); + this.tableLayoutPanel13 = new System.Windows.Forms.TableLayoutPanel(); + this.nudOverscanRight = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblRight = new System.Windows.Forms.Label(); + this.tableLayoutPanel14 = new System.Windows.Forms.TableLayoutPanel(); + this.nudOverscanLeft = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblLeft = new System.Windows.Forms.Label(); + this.tpgOverscanGameSpecific = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); + this.picGameSpecificOverscan = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel15 = new System.Windows.Forms.TableLayoutPanel(); + this.nudGameSpecificOverscanTop = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblGameSpecificOverscanTop = new System.Windows.Forms.Label(); + this.tableLayoutPanel16 = new System.Windows.Forms.TableLayoutPanel(); + this.nudGameSpecificOverscanBottom = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblGameSpecificOverscanBottom = new System.Windows.Forms.Label(); + this.tableLayoutPanel17 = new System.Windows.Forms.TableLayoutPanel(); + this.nudGameSpecificOverscanRight = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblGameSpecificOverscanRight = new System.Windows.Forms.Label(); + this.tableLayoutPanel18 = new System.Windows.Forms.TableLayoutPanel(); + this.nudGameSpecificOverscanLeft = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblGameSpecificOverscanLeft = new System.Windows.Forms.Label(); + this.chkEnableGameSpecificOverscan = new System.Windows.Forms.CheckBox(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.tpgPalette = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.btnExportPalette = new System.Windows.Forms.Button(); + this.btnSelectPalette = new System.Windows.Forms.Button(); + this.btnLoadPalFile = new System.Windows.Forms.Button(); + this.chkShowColorIndexes = new System.Windows.Forms.CheckBox(); + this.chkUseCustomVsPalette = new System.Windows.Forms.CheckBox(); + this.ctrlPaletteDisplay = new Mesen.GUI.Debugger.ctrlPaletteDisplay(); + this.tpgAdvanced = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel9 = new System.Windows.Forms.TableLayoutPanel(); + this.chkDisableBackground = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkDisableSprites = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkForceBackgroundFirstColumn = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkForceSpritesFirstColumn = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.lblScreenRotation = new System.Windows.Forms.Label(); + this.cboScreenRotation = new System.Windows.Forms.ComboBox(); + this.chkRemoveSpriteLimit = new System.Windows.Forms.CheckBox(); + this.chkAdaptiveSpriteLimit = new System.Windows.Forms.CheckBox(); + this.contextPicturePresets = new System.Windows.Forms.ContextMenuStrip(this.components); + this.mnuPresetComposite = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPresetSVideo = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPresetRgb = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPresetMonochrome = new System.Windows.Forms.ToolStripMenuItem(); + this.colorDialog = new System.Windows.Forms.ColorDialog(); + this.contextPaletteList = new System.Windows.Forms.ContextMenuStrip(this.components); + this.mnuDefaultPalette = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuPaletteCompositeDirect = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPaletteNesClassic = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPaletteNestopiaRgb = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPaletteOriginalHardware = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPalettePvmStyle = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPaletteSonyCxa2025As = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPaletteUnsaturated = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPaletteYuv = new System.Windows.Forms.ToolStripMenuItem(); + this.tlpMain.SuspendLayout(); + this.flpResolution.SuspendLayout(); + this.flowLayoutPanel7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picHdNesTooltip)).BeginInit(); + this.flowLayoutPanel6.SuspendLayout(); + this.flpRefreshRate.SuspendLayout(); + this.tabMain.SuspendLayout(); + this.tpgGeneral.SuspendLayout(); + this.tpgPicture.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.tableLayoutPanel7.SuspendLayout(); + this.grpNtscFilter.SuspendLayout(); + this.tlpNtscFilter2.SuspendLayout(); + this.tlpNtscFilter1.SuspendLayout(); + this.tableLayoutPanel6.SuspendLayout(); + this.grpCommon.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.grpScanlines.SuspendLayout(); + this.tableLayoutPanel8.SuspendLayout(); + this.tpgOverscan.SuspendLayout(); + this.tabOverscan.SuspendLayout(); + this.tpgOverscanGlobal.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picOverscan)).BeginInit(); + this.tableLayoutPanel11.SuspendLayout(); + this.tableLayoutPanel12.SuspendLayout(); + this.tableLayoutPanel13.SuspendLayout(); + this.tableLayoutPanel14.SuspendLayout(); + this.tpgOverscanGameSpecific.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.tableLayoutPanel10.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picGameSpecificOverscan)).BeginInit(); + this.tableLayoutPanel15.SuspendLayout(); + this.tableLayoutPanel16.SuspendLayout(); + this.tableLayoutPanel17.SuspendLayout(); + this.tableLayoutPanel18.SuspendLayout(); + this.tpgPalette.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tpgAdvanced.SuspendLayout(); + this.tableLayoutPanel9.SuspendLayout(); + this.contextPicturePresets.SuspendLayout(); + this.contextPaletteList.SuspendLayout(); + this.SuspendLayout(); + // + // baseConfigPanel + // + this.baseConfigPanel.Location = new System.Drawing.Point(0, 428); + this.baseConfigPanel.Size = new System.Drawing.Size(535, 29); + // + // tlpMain + // + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.flpResolution, 0, 5); + this.tlpMain.Controls.Add(this.chkUseExclusiveFullscreen, 0, 4); + this.tlpMain.Controls.Add(this.lblVideoScale, 0, 0); + this.tlpMain.Controls.Add(this.chkVerticalSync, 0, 3); + this.tlpMain.Controls.Add(this.lblDisplayRatio, 0, 1); + this.tlpMain.Controls.Add(this.flowLayoutPanel7, 0, 8); + this.tlpMain.Controls.Add(this.nudScale, 1, 0); + this.tlpMain.Controls.Add(this.flowLayoutPanel6, 1, 1); + this.tlpMain.Controls.Add(this.chkFullscreenForceIntegerScale, 0, 7); + this.tlpMain.Controls.Add(this.chkShowFps, 0, 9); + this.tlpMain.Controls.Add(this.chkIntegerFpsMode, 0, 2); + this.tlpMain.Controls.Add(this.flpRefreshRate, 0, 6); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(3, 3); + this.tlpMain.Margin = new System.Windows.Forms.Padding(0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 11; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(521, 396); + this.tlpMain.TabIndex = 1; + // + // flpResolution + // + this.tlpMain.SetColumnSpan(this.flpResolution, 2); + this.flpResolution.Controls.Add(this.lblFullscreenResolution); + this.flpResolution.Controls.Add(this.cboFullscreenResolution); + this.flpResolution.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpResolution.Location = new System.Drawing.Point(30, 116); + this.flpResolution.Margin = new System.Windows.Forms.Padding(30, 0, 0, 0); + this.flpResolution.Name = "flpResolution"; + this.flpResolution.Size = new System.Drawing.Size(491, 27); + this.flpResolution.TabIndex = 27; + this.flpResolution.Visible = false; + // + // lblFullscreenResolution + // + this.lblFullscreenResolution.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.lblFullscreenResolution.AutoSize = true; + this.lblFullscreenResolution.Location = new System.Drawing.Point(3, 7); + this.lblFullscreenResolution.Name = "lblFullscreenResolution"; + this.lblFullscreenResolution.Size = new System.Drawing.Size(111, 13); + this.lblFullscreenResolution.TabIndex = 17; + this.lblFullscreenResolution.Text = "Fullscreen Resolution:"; + // + // cboFullscreenResolution + // + this.cboFullscreenResolution.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboFullscreenResolution.FormattingEnabled = true; + this.cboFullscreenResolution.Items.AddRange(new object[] { "3840x2160", "2560x1440", "2160x1200", @@ -293,1689 +295,1720 @@ namespace Mesen.GUI.Forms.Config "1024x768", "800x600", "640x480"}); - this.cboFullscreenResolution.Location = new System.Drawing.Point(120, 3); - this.cboFullscreenResolution.Name = "cboFullscreenResolution"; - this.cboFullscreenResolution.Size = new System.Drawing.Size(85, 21); - this.cboFullscreenResolution.TabIndex = 25; - // - // chkUseExclusiveFullscreen - // - this.chkUseExclusiveFullscreen.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkUseExclusiveFullscreen.AutoSize = true; - this.tlpMain.SetColumnSpan(this.chkUseExclusiveFullscreen, 2); - this.chkUseExclusiveFullscreen.Location = new System.Drawing.Point(3, 96); - this.chkUseExclusiveFullscreen.Name = "chkUseExclusiveFullscreen"; - this.chkUseExclusiveFullscreen.Size = new System.Drawing.Size(169, 17); - this.chkUseExclusiveFullscreen.TabIndex = 24; - this.chkUseExclusiveFullscreen.Text = "Use exclusive fullscreen mode"; - this.chkUseExclusiveFullscreen.UseVisualStyleBackColor = true; - this.chkUseExclusiveFullscreen.CheckedChanged += new System.EventHandler(this.chkUseExclusiveFullscreen_CheckedChanged); - // - // lblVideoScale - // - this.lblVideoScale.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblVideoScale.AutoSize = true; - this.lblVideoScale.Location = new System.Drawing.Point(3, 4); - this.lblVideoScale.Name = "lblVideoScale"; - this.lblVideoScale.Size = new System.Drawing.Size(37, 13); - this.lblVideoScale.TabIndex = 11; - this.lblVideoScale.Text = "Scale:"; - // - // chkVerticalSync - // - this.chkVerticalSync.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkVerticalSync.AutoSize = true; - this.tlpMain.SetColumnSpan(this.chkVerticalSync, 2); - this.chkVerticalSync.Location = new System.Drawing.Point(3, 73); - this.chkVerticalSync.Name = "chkVerticalSync"; - this.chkVerticalSync.Size = new System.Drawing.Size(121, 17); - this.chkVerticalSync.TabIndex = 15; - this.chkVerticalSync.Text = "Enable vertical sync"; - this.chkVerticalSync.UseVisualStyleBackColor = true; - // - // lblDisplayRatio - // - this.lblDisplayRatio.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblDisplayRatio.AutoSize = true; - this.lblDisplayRatio.Location = new System.Drawing.Point(3, 27); - this.lblDisplayRatio.Name = "lblDisplayRatio"; - this.lblDisplayRatio.Size = new System.Drawing.Size(71, 13); - this.lblDisplayRatio.TabIndex = 17; - this.lblDisplayRatio.Text = "Aspect Ratio:"; - // - // flowLayoutPanel7 - // - this.tlpMain.SetColumnSpan(this.flowLayoutPanel7, 2); - this.flowLayoutPanel7.Controls.Add(this.chkUseHdPacks); - this.flowLayoutPanel7.Controls.Add(this.picHdNesTooltip); - this.flowLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel7.Location = new System.Drawing.Point(0, 193); - this.flowLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel7.Name = "flowLayoutPanel7"; - this.flowLayoutPanel7.Size = new System.Drawing.Size(521, 23); - this.flowLayoutPanel7.TabIndex = 20; - // - // chkUseHdPacks - // - this.chkUseHdPacks.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkUseHdPacks.AutoSize = true; - this.chkUseHdPacks.Location = new System.Drawing.Point(3, 3); - this.chkUseHdPacks.Name = "chkUseHdPacks"; - this.chkUseHdPacks.Size = new System.Drawing.Size(134, 17); - this.chkUseHdPacks.TabIndex = 19; - this.chkUseHdPacks.Text = "Use HDNes HD packs"; - this.chkUseHdPacks.UseVisualStyleBackColor = true; - // - // picHdNesTooltip - // - this.picHdNesTooltip.BackgroundImage = global::Mesen.GUI.Properties.Resources.Help; - this.picHdNesTooltip.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.picHdNesTooltip.Location = new System.Drawing.Point(143, 3); - this.picHdNesTooltip.Name = "picHdNesTooltip"; - this.picHdNesTooltip.Size = new System.Drawing.Size(17, 17); - this.picHdNesTooltip.TabIndex = 21; - this.picHdNesTooltip.TabStop = false; - // - // nudScale - // - this.nudScale.DecimalPlaces = 2; - this.nudScale.Increment = new decimal(new int[] { + this.cboFullscreenResolution.Location = new System.Drawing.Point(120, 3); + this.cboFullscreenResolution.Name = "cboFullscreenResolution"; + this.cboFullscreenResolution.Size = new System.Drawing.Size(85, 21); + this.cboFullscreenResolution.TabIndex = 25; + // + // chkUseExclusiveFullscreen + // + this.chkUseExclusiveFullscreen.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkUseExclusiveFullscreen.AutoSize = true; + this.tlpMain.SetColumnSpan(this.chkUseExclusiveFullscreen, 2); + this.chkUseExclusiveFullscreen.Location = new System.Drawing.Point(3, 96); + this.chkUseExclusiveFullscreen.Name = "chkUseExclusiveFullscreen"; + this.chkUseExclusiveFullscreen.Size = new System.Drawing.Size(169, 17); + this.chkUseExclusiveFullscreen.TabIndex = 24; + this.chkUseExclusiveFullscreen.Text = "Use exclusive fullscreen mode"; + this.chkUseExclusiveFullscreen.UseVisualStyleBackColor = true; + this.chkUseExclusiveFullscreen.CheckedChanged += new System.EventHandler(this.chkUseExclusiveFullscreen_CheckedChanged); + // + // lblVideoScale + // + this.lblVideoScale.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblVideoScale.AutoSize = true; + this.lblVideoScale.Location = new System.Drawing.Point(3, 4); + this.lblVideoScale.Name = "lblVideoScale"; + this.lblVideoScale.Size = new System.Drawing.Size(37, 13); + this.lblVideoScale.TabIndex = 11; + this.lblVideoScale.Text = "Scale:"; + // + // chkVerticalSync + // + this.chkVerticalSync.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkVerticalSync.AutoSize = true; + this.tlpMain.SetColumnSpan(this.chkVerticalSync, 2); + this.chkVerticalSync.Location = new System.Drawing.Point(3, 73); + this.chkVerticalSync.Name = "chkVerticalSync"; + this.chkVerticalSync.Size = new System.Drawing.Size(121, 17); + this.chkVerticalSync.TabIndex = 15; + this.chkVerticalSync.Text = "Enable vertical sync"; + this.chkVerticalSync.UseVisualStyleBackColor = true; + // + // lblDisplayRatio + // + this.lblDisplayRatio.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblDisplayRatio.AutoSize = true; + this.lblDisplayRatio.Location = new System.Drawing.Point(3, 27); + this.lblDisplayRatio.Name = "lblDisplayRatio"; + this.lblDisplayRatio.Size = new System.Drawing.Size(71, 13); + this.lblDisplayRatio.TabIndex = 17; + this.lblDisplayRatio.Text = "Aspect Ratio:"; + // + // flowLayoutPanel7 + // + this.tlpMain.SetColumnSpan(this.flowLayoutPanel7, 2); + this.flowLayoutPanel7.Controls.Add(this.chkUseHdPacks); + this.flowLayoutPanel7.Controls.Add(this.picHdNesTooltip); + this.flowLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel7.Location = new System.Drawing.Point(0, 193); + this.flowLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel7.Name = "flowLayoutPanel7"; + this.flowLayoutPanel7.Size = new System.Drawing.Size(521, 23); + this.flowLayoutPanel7.TabIndex = 20; + // + // chkUseHdPacks + // + this.chkUseHdPacks.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkUseHdPacks.AutoSize = true; + this.chkUseHdPacks.Location = new System.Drawing.Point(3, 3); + this.chkUseHdPacks.Name = "chkUseHdPacks"; + this.chkUseHdPacks.Size = new System.Drawing.Size(134, 17); + this.chkUseHdPacks.TabIndex = 19; + this.chkUseHdPacks.Text = "Use HDNes HD packs"; + this.chkUseHdPacks.UseVisualStyleBackColor = true; + // + // picHdNesTooltip + // + this.picHdNesTooltip.BackgroundImage = global::Mesen.GUI.Properties.Resources.Help; + this.picHdNesTooltip.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.picHdNesTooltip.Location = new System.Drawing.Point(143, 3); + this.picHdNesTooltip.Name = "picHdNesTooltip"; + this.picHdNesTooltip.Size = new System.Drawing.Size(17, 17); + this.picHdNesTooltip.TabIndex = 21; + this.picHdNesTooltip.TabStop = false; + // + // nudScale + // + this.nudScale.DecimalPlaces = 2; + this.nudScale.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudScale.Location = new System.Drawing.Point(77, 0); - this.nudScale.Margin = new System.Windows.Forms.Padding(0); - this.nudScale.Maximum = new decimal(new int[] { + this.nudScale.IsHex = false; + this.nudScale.Location = new System.Drawing.Point(77, 0); + this.nudScale.Margin = new System.Windows.Forms.Padding(0); + this.nudScale.Maximum = new decimal(new int[] { 10, 0, 0, 0}); - this.nudScale.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudScale.Minimum = new decimal(new int[] { + this.nudScale.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudScale.Minimum = new decimal(new int[] { 5, 0, 0, 65536}); - this.nudScale.MinimumSize = new System.Drawing.Size(0, 21); - this.nudScale.Name = "nudScale"; - this.nudScale.Size = new System.Drawing.Size(48, 21); - this.nudScale.TabIndex = 21; - this.nudScale.Value = new decimal(new int[] { + this.nudScale.MinimumSize = new System.Drawing.Size(0, 21); + this.nudScale.Name = "nudScale"; + this.nudScale.Size = new System.Drawing.Size(48, 21); + this.nudScale.TabIndex = 21; + this.nudScale.Value = new decimal(new int[] { 1, 0, 0, 0}); - // - // flowLayoutPanel6 - // - this.flowLayoutPanel6.Controls.Add(this.cboAspectRatio); - this.flowLayoutPanel6.Controls.Add(this.lblCustomRatio); - this.flowLayoutPanel6.Controls.Add(this.nudCustomRatio); - this.flowLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel6.Location = new System.Drawing.Point(77, 21); - this.flowLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel6.Name = "flowLayoutPanel6"; - this.flowLayoutPanel6.Size = new System.Drawing.Size(444, 26); - this.flowLayoutPanel6.TabIndex = 22; - // - // cboAspectRatio - // - this.cboAspectRatio.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboAspectRatio.FormattingEnabled = true; - this.cboAspectRatio.Items.AddRange(new object[] { + // + // flowLayoutPanel6 + // + this.flowLayoutPanel6.Controls.Add(this.cboAspectRatio); + this.flowLayoutPanel6.Controls.Add(this.lblCustomRatio); + this.flowLayoutPanel6.Controls.Add(this.nudCustomRatio); + this.flowLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel6.Location = new System.Drawing.Point(77, 21); + this.flowLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel6.Name = "flowLayoutPanel6"; + this.flowLayoutPanel6.Size = new System.Drawing.Size(444, 26); + this.flowLayoutPanel6.TabIndex = 22; + // + // cboAspectRatio + // + this.cboAspectRatio.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboAspectRatio.FormattingEnabled = true; + this.cboAspectRatio.Items.AddRange(new object[] { "Auto", "NTSC (8:7)", "PAL (18:13)", "Standard (4:3)", "Widescreen (16:9)"}); - this.cboAspectRatio.Location = new System.Drawing.Point(3, 3); - this.cboAspectRatio.Name = "cboAspectRatio"; - this.cboAspectRatio.Size = new System.Drawing.Size(197, 21); - this.cboAspectRatio.TabIndex = 16; - this.cboAspectRatio.SelectedIndexChanged += new System.EventHandler(this.cboAspectRatio_SelectedIndexChanged); - // - // lblCustomRatio - // - this.lblCustomRatio.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblCustomRatio.AutoSize = true; - this.lblCustomRatio.Location = new System.Drawing.Point(206, 7); - this.lblCustomRatio.Name = "lblCustomRatio"; - this.lblCustomRatio.Size = new System.Drawing.Size(76, 13); - this.lblCustomRatio.TabIndex = 17; - this.lblCustomRatio.Text = "Custom Ratio: "; - this.lblCustomRatio.Visible = false; - // - // nudCustomRatio - // - this.nudCustomRatio.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.nudCustomRatio.DecimalPlaces = 3; - this.nudCustomRatio.Increment = new decimal(new int[] { + this.cboAspectRatio.Location = new System.Drawing.Point(3, 3); + this.cboAspectRatio.Name = "cboAspectRatio"; + this.cboAspectRatio.Size = new System.Drawing.Size(197, 21); + this.cboAspectRatio.TabIndex = 16; + this.cboAspectRatio.SelectedIndexChanged += new System.EventHandler(this.cboAspectRatio_SelectedIndexChanged); + // + // lblCustomRatio + // + this.lblCustomRatio.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblCustomRatio.AutoSize = true; + this.lblCustomRatio.Location = new System.Drawing.Point(206, 7); + this.lblCustomRatio.Name = "lblCustomRatio"; + this.lblCustomRatio.Size = new System.Drawing.Size(76, 13); + this.lblCustomRatio.TabIndex = 17; + this.lblCustomRatio.Text = "Custom Ratio: "; + this.lblCustomRatio.Visible = false; + // + // nudCustomRatio + // + this.nudCustomRatio.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.nudCustomRatio.DecimalPlaces = 3; + this.nudCustomRatio.Increment = new decimal(new int[] { 1, 0, 0, 65536}); - this.nudCustomRatio.Location = new System.Drawing.Point(285, 3); - this.nudCustomRatio.Margin = new System.Windows.Forms.Padding(0); - this.nudCustomRatio.Maximum = new decimal(new int[] { + this.nudCustomRatio.IsHex = false; + this.nudCustomRatio.Location = new System.Drawing.Point(285, 3); + this.nudCustomRatio.Margin = new System.Windows.Forms.Padding(0); + this.nudCustomRatio.Maximum = new decimal(new int[] { 5, 0, 0, 0}); - this.nudCustomRatio.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudCustomRatio.Minimum = new decimal(new int[] { + this.nudCustomRatio.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudCustomRatio.Minimum = new decimal(new int[] { 1, 0, 0, 65536}); - this.nudCustomRatio.MinimumSize = new System.Drawing.Size(0, 21); - this.nudCustomRatio.Name = "nudCustomRatio"; - this.nudCustomRatio.Size = new System.Drawing.Size(48, 21); - this.nudCustomRatio.TabIndex = 22; - this.nudCustomRatio.Value = new decimal(new int[] { + this.nudCustomRatio.MinimumSize = new System.Drawing.Size(0, 21); + this.nudCustomRatio.Name = "nudCustomRatio"; + this.nudCustomRatio.Size = new System.Drawing.Size(48, 21); + this.nudCustomRatio.TabIndex = 22; + this.nudCustomRatio.Value = new decimal(new int[] { 1, 0, 0, 65536}); - this.nudCustomRatio.Visible = false; - // - // chkFullscreenForceIntegerScale - // - this.chkFullscreenForceIntegerScale.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkFullscreenForceIntegerScale.AutoSize = true; - this.tlpMain.SetColumnSpan(this.chkFullscreenForceIntegerScale, 2); - this.chkFullscreenForceIntegerScale.Location = new System.Drawing.Point(3, 173); - this.chkFullscreenForceIntegerScale.Name = "chkFullscreenForceIntegerScale"; - this.chkFullscreenForceIntegerScale.Size = new System.Drawing.Size(289, 17); - this.chkFullscreenForceIntegerScale.TabIndex = 23; - this.chkFullscreenForceIntegerScale.Text = "Use integer scale values when entering fullscreen mode"; - this.chkFullscreenForceIntegerScale.UseVisualStyleBackColor = true; - // - // chkShowFps - // - this.chkShowFps.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkShowFps.AutoSize = true; - this.tlpMain.SetColumnSpan(this.chkShowFps, 2); - this.chkShowFps.Location = new System.Drawing.Point(3, 219); - this.chkShowFps.Name = "chkShowFps"; - this.chkShowFps.Size = new System.Drawing.Size(76, 17); - this.chkShowFps.TabIndex = 9; - this.chkShowFps.Text = "Show FPS"; - this.chkShowFps.UseVisualStyleBackColor = true; - // - // chkIntegerFpsMode - // - this.chkIntegerFpsMode.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkIntegerFpsMode.AutoSize = true; - this.tlpMain.SetColumnSpan(this.chkIntegerFpsMode, 2); - this.chkIntegerFpsMode.Location = new System.Drawing.Point(3, 50); - this.chkIntegerFpsMode.Name = "chkIntegerFpsMode"; - this.chkIntegerFpsMode.Size = new System.Drawing.Size(308, 17); - this.chkIntegerFpsMode.TabIndex = 24; - this.chkIntegerFpsMode.Text = "Enable integer FPS mode (e.g: run at 60 fps instead of 60.1)"; - this.chkIntegerFpsMode.UseVisualStyleBackColor = true; - // - // flpRefreshRate - // - this.tlpMain.SetColumnSpan(this.flpRefreshRate, 2); - this.flpRefreshRate.Controls.Add(this.lblRequestedRefreshRate); - this.flpRefreshRate.Controls.Add(this.cboRefreshRate); - this.flpRefreshRate.Dock = System.Windows.Forms.DockStyle.Fill; - this.flpRefreshRate.Location = new System.Drawing.Point(30, 143); - this.flpRefreshRate.Margin = new System.Windows.Forms.Padding(30, 0, 0, 0); - this.flpRefreshRate.Name = "flpRefreshRate"; - this.flpRefreshRate.Size = new System.Drawing.Size(491, 27); - this.flpRefreshRate.TabIndex = 26; - this.flpRefreshRate.Visible = false; - // - // lblRequestedRefreshRate - // - this.lblRequestedRefreshRate.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.lblRequestedRefreshRate.AutoSize = true; - this.lblRequestedRefreshRate.Location = new System.Drawing.Point(3, 7); - this.lblRequestedRefreshRate.Name = "lblRequestedRefreshRate"; - this.lblRequestedRefreshRate.Size = new System.Drawing.Size(128, 13); - this.lblRequestedRefreshRate.TabIndex = 17; - this.lblRequestedRefreshRate.Text = "Requested Refresh Rate:"; - // - // cboRefreshRate - // - this.cboRefreshRate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboRefreshRate.FormattingEnabled = true; - this.cboRefreshRate.Location = new System.Drawing.Point(137, 3); - this.cboRefreshRate.Name = "cboRefreshRate"; - this.cboRefreshRate.Size = new System.Drawing.Size(68, 21); - this.cboRefreshRate.TabIndex = 25; - // - // tabMain - // - this.tabMain.Controls.Add(this.tpgGeneral); - this.tabMain.Controls.Add(this.tpgPicture); - this.tabMain.Controls.Add(this.tpgOverscan); - this.tabMain.Controls.Add(this.tpgPalette); - this.tabMain.Controls.Add(this.tpgAdvanced); - this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabMain.Location = new System.Drawing.Point(0, 0); - this.tabMain.Name = "tabMain"; - this.tabMain.SelectedIndex = 0; - this.tabMain.Size = new System.Drawing.Size(535, 428); - this.tabMain.TabIndex = 2; - // - // tpgGeneral - // - this.tpgGeneral.Controls.Add(this.tlpMain); - this.tpgGeneral.Location = new System.Drawing.Point(4, 22); - this.tpgGeneral.Name = "tpgGeneral"; - this.tpgGeneral.Padding = new System.Windows.Forms.Padding(3); - this.tpgGeneral.Size = new System.Drawing.Size(527, 402); - this.tpgGeneral.TabIndex = 0; - this.tpgGeneral.Text = "General"; - this.tpgGeneral.UseVisualStyleBackColor = true; - // - // tpgPicture - // - this.tpgPicture.Controls.Add(this.tableLayoutPanel5); - this.tpgPicture.Location = new System.Drawing.Point(4, 22); - this.tpgPicture.Name = "tpgPicture"; - this.tpgPicture.Padding = new System.Windows.Forms.Padding(3); - this.tpgPicture.Size = new System.Drawing.Size(527, 402); - this.tpgPicture.TabIndex = 3; - this.tpgPicture.Text = "Picture"; - this.tpgPicture.UseVisualStyleBackColor = true; - // - // tableLayoutPanel5 - // - this.tableLayoutPanel5.ColumnCount = 2; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanel7, 0, 3); - this.tableLayoutPanel5.Controls.Add(this.grpNtscFilter, 1, 1); - this.tableLayoutPanel5.Controls.Add(this.grpCommon, 0, 1); - this.tableLayoutPanel5.Controls.Add(this.grpScanlines, 0, 2); - this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanel8, 0, 0); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 4; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel5.Size = new System.Drawing.Size(521, 396); - this.tableLayoutPanel5.TabIndex = 5; - // - // tableLayoutPanel7 - // - this.tableLayoutPanel7.ColumnCount = 2; - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 36.92308F)); - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.07692F)); - this.tableLayoutPanel7.Controls.Add(this.btnSelectPreset, 1, 0); - this.tableLayoutPanel7.Controls.Add(this.btnResetPictureSettings, 0, 0); - this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel7.Location = new System.Drawing.Point(0, 341); - this.tableLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel7.Name = "tableLayoutPanel7"; - this.tableLayoutPanel7.RowCount = 1; - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel7.Size = new System.Drawing.Size(260, 55); - this.tableLayoutPanel7.TabIndex = 3; - // - // btnSelectPreset - // - this.btnSelectPreset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnSelectPreset.AutoSize = true; - this.btnSelectPreset.Image = global::Mesen.GUI.Properties.Resources.DownArrow; - this.btnSelectPreset.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; - this.btnSelectPreset.Location = new System.Drawing.Point(158, 29); - this.btnSelectPreset.Name = "btnSelectPreset"; - this.btnSelectPreset.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0); - this.btnSelectPreset.Size = new System.Drawing.Size(99, 23); - this.btnSelectPreset.TabIndex = 3; - this.btnSelectPreset.Text = "Select Preset..."; - this.btnSelectPreset.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; - this.btnSelectPreset.UseVisualStyleBackColor = true; - this.btnSelectPreset.Click += new System.EventHandler(this.btnSelectPreset_Click); - // - // btnResetPictureSettings - // - this.btnResetPictureSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.btnResetPictureSettings.AutoSize = true; - this.btnResetPictureSettings.Location = new System.Drawing.Point(3, 29); - this.btnResetPictureSettings.Name = "btnResetPictureSettings"; - this.btnResetPictureSettings.Size = new System.Drawing.Size(75, 23); - this.btnResetPictureSettings.TabIndex = 3; - this.btnResetPictureSettings.Text = "Reset"; - this.btnResetPictureSettings.UseVisualStyleBackColor = true; - this.btnResetPictureSettings.Click += new System.EventHandler(this.btnResetPictureSettings_Click); - // - // grpNtscFilter - // - this.grpNtscFilter.Controls.Add(this.tlpNtscFilter2); - this.grpNtscFilter.Controls.Add(this.tlpNtscFilter1); - this.grpNtscFilter.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpNtscFilter.Location = new System.Drawing.Point(262, 27); - this.grpNtscFilter.Margin = new System.Windows.Forms.Padding(2, 0, 0, 0); - this.grpNtscFilter.Name = "grpNtscFilter"; - this.tableLayoutPanel5.SetRowSpan(this.grpNtscFilter, 3); - this.grpNtscFilter.Size = new System.Drawing.Size(259, 369); - this.grpNtscFilter.TabIndex = 4; - this.grpNtscFilter.TabStop = false; - this.grpNtscFilter.Text = "NTSC Filter"; - // - // tlpNtscFilter2 - // - this.tlpNtscFilter2.ColumnCount = 1; - this.tlpNtscFilter2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpNtscFilter2.Controls.Add(this.trkYFilterLength, 0, 0); - this.tlpNtscFilter2.Controls.Add(this.trkIFilterLength, 0, 1); - this.tlpNtscFilter2.Controls.Add(this.trkQFilterLength, 0, 2); - this.tlpNtscFilter2.Dock = System.Windows.Forms.DockStyle.Top; - this.tlpNtscFilter2.Location = new System.Drawing.Point(3, 16); - this.tlpNtscFilter2.Margin = new System.Windows.Forms.Padding(0); - this.tlpNtscFilter2.Name = "tlpNtscFilter2"; - this.tlpNtscFilter2.RowCount = 7; - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpNtscFilter2.Size = new System.Drawing.Size(253, 298); - this.tlpNtscFilter2.TabIndex = 6; - // - // trkYFilterLength - // - this.trkYFilterLength.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkYFilterLength.Location = new System.Drawing.Point(0, 0); - this.trkYFilterLength.Margin = new System.Windows.Forms.Padding(0); - this.trkYFilterLength.Maximum = 400; - this.trkYFilterLength.MaximumSize = new System.Drawing.Size(0, 60); - this.trkYFilterLength.Minimum = -50; - this.trkYFilterLength.MinimumSize = new System.Drawing.Size(206, 50); - this.trkYFilterLength.Name = "trkYFilterLength"; - this.trkYFilterLength.Size = new System.Drawing.Size(253, 50); - this.trkYFilterLength.TabIndex = 24; - this.trkYFilterLength.Text = "Y Filter (Horizontal Blur)"; - this.trkYFilterLength.Value = 0; - // - // trkIFilterLength - // - this.trkIFilterLength.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkIFilterLength.Location = new System.Drawing.Point(0, 50); - this.trkIFilterLength.Margin = new System.Windows.Forms.Padding(0); - this.trkIFilterLength.Maximum = 400; - this.trkIFilterLength.MaximumSize = new System.Drawing.Size(400, 55); - this.trkIFilterLength.Minimum = 0; - this.trkIFilterLength.MinimumSize = new System.Drawing.Size(206, 50); - this.trkIFilterLength.Name = "trkIFilterLength"; - this.trkIFilterLength.Size = new System.Drawing.Size(253, 50); - this.trkIFilterLength.TabIndex = 25; - this.trkIFilterLength.Text = "I Filter (Horizontal Bleed)"; - this.trkIFilterLength.Value = 0; - // - // trkQFilterLength - // - this.trkQFilterLength.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkQFilterLength.Location = new System.Drawing.Point(0, 100); - this.trkQFilterLength.Margin = new System.Windows.Forms.Padding(0); - this.trkQFilterLength.Maximum = 400; - this.trkQFilterLength.MaximumSize = new System.Drawing.Size(0, 41); - this.trkQFilterLength.Minimum = 0; - this.trkQFilterLength.MinimumSize = new System.Drawing.Size(206, 50); - this.trkQFilterLength.Name = "trkQFilterLength"; - this.trkQFilterLength.Size = new System.Drawing.Size(253, 50); - this.trkQFilterLength.TabIndex = 26; - this.trkQFilterLength.Text = "Q Filter (Horizontal Bleed)"; - this.trkQFilterLength.Value = 0; - // - // tlpNtscFilter1 - // - this.tlpNtscFilter1.ColumnCount = 1; - this.tlpNtscFilter1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpNtscFilter1.Controls.Add(this.trkArtifacts, 0, 0); - this.tlpNtscFilter1.Controls.Add(this.trkBleed, 0, 1); - this.tlpNtscFilter1.Controls.Add(this.trkFringing, 0, 2); - this.tlpNtscFilter1.Controls.Add(this.trkGamma, 0, 3); - this.tlpNtscFilter1.Controls.Add(this.trkResolution, 0, 4); - this.tlpNtscFilter1.Controls.Add(this.trkSharpness, 0, 5); - this.tlpNtscFilter1.Controls.Add(this.tableLayoutPanel6, 0, 6); - this.tlpNtscFilter1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpNtscFilter1.Location = new System.Drawing.Point(3, 16); - this.tlpNtscFilter1.Margin = new System.Windows.Forms.Padding(0); - this.tlpNtscFilter1.Name = "tlpNtscFilter1"; - this.tlpNtscFilter1.RowCount = 7; - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpNtscFilter1.Size = new System.Drawing.Size(253, 350); - this.tlpNtscFilter1.TabIndex = 5; - // - // trkArtifacts - // - this.trkArtifacts.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkArtifacts.Location = new System.Drawing.Point(0, 0); - this.trkArtifacts.Margin = new System.Windows.Forms.Padding(0); - this.trkArtifacts.Maximum = 100; - this.trkArtifacts.MaximumSize = new System.Drawing.Size(0, 60); - this.trkArtifacts.Minimum = -100; - this.trkArtifacts.MinimumSize = new System.Drawing.Size(206, 50); - this.trkArtifacts.Name = "trkArtifacts"; - this.trkArtifacts.Size = new System.Drawing.Size(253, 50); - this.trkArtifacts.TabIndex = 24; - this.trkArtifacts.Text = "Artifacts"; - this.trkArtifacts.Value = 0; - // - // trkBleed - // - this.trkBleed.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkBleed.Location = new System.Drawing.Point(0, 50); - this.trkBleed.Margin = new System.Windows.Forms.Padding(0); - this.trkBleed.Maximum = 100; - this.trkBleed.MaximumSize = new System.Drawing.Size(400, 55); - this.trkBleed.Minimum = -100; - this.trkBleed.MinimumSize = new System.Drawing.Size(206, 50); - this.trkBleed.Name = "trkBleed"; - this.trkBleed.Size = new System.Drawing.Size(253, 50); - this.trkBleed.TabIndex = 25; - this.trkBleed.Text = "Bleed"; - this.trkBleed.Value = 0; - // - // trkFringing - // - this.trkFringing.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkFringing.Location = new System.Drawing.Point(0, 100); - this.trkFringing.Margin = new System.Windows.Forms.Padding(0); - this.trkFringing.Maximum = 100; - this.trkFringing.MaximumSize = new System.Drawing.Size(0, 41); - this.trkFringing.Minimum = -100; - this.trkFringing.MinimumSize = new System.Drawing.Size(206, 50); - this.trkFringing.Name = "trkFringing"; - this.trkFringing.Size = new System.Drawing.Size(253, 50); - this.trkFringing.TabIndex = 26; - this.trkFringing.Text = "Fringing"; - this.trkFringing.Value = 0; - // - // trkGamma - // - this.trkGamma.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkGamma.Location = new System.Drawing.Point(0, 150); - this.trkGamma.Margin = new System.Windows.Forms.Padding(0); - this.trkGamma.Maximum = 100; - this.trkGamma.MaximumSize = new System.Drawing.Size(0, 41); - this.trkGamma.Minimum = -100; - this.trkGamma.MinimumSize = new System.Drawing.Size(206, 50); - this.trkGamma.Name = "trkGamma"; - this.trkGamma.Size = new System.Drawing.Size(253, 50); - this.trkGamma.TabIndex = 27; - this.trkGamma.Text = "Gamma"; - this.trkGamma.Value = 0; - // - // trkResolution - // - this.trkResolution.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkResolution.Location = new System.Drawing.Point(0, 200); - this.trkResolution.Margin = new System.Windows.Forms.Padding(0); - this.trkResolution.Maximum = 100; - this.trkResolution.MaximumSize = new System.Drawing.Size(0, 41); - this.trkResolution.Minimum = -100; - this.trkResolution.MinimumSize = new System.Drawing.Size(206, 50); - this.trkResolution.Name = "trkResolution"; - this.trkResolution.Size = new System.Drawing.Size(253, 50); - this.trkResolution.TabIndex = 28; - this.trkResolution.Text = "Resolution"; - this.trkResolution.Value = 0; - // - // trkSharpness - // - this.trkSharpness.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkSharpness.Location = new System.Drawing.Point(0, 250); - this.trkSharpness.Margin = new System.Windows.Forms.Padding(0); - this.trkSharpness.Maximum = 100; - this.trkSharpness.MaximumSize = new System.Drawing.Size(0, 41); - this.trkSharpness.Minimum = -100; - this.trkSharpness.MinimumSize = new System.Drawing.Size(206, 50); - this.trkSharpness.Name = "trkSharpness"; - this.trkSharpness.Size = new System.Drawing.Size(253, 50); - this.trkSharpness.TabIndex = 29; - this.trkSharpness.Text = "Sharpness"; - this.trkSharpness.Value = 0; - // - // tableLayoutPanel6 - // - this.tableLayoutPanel6.ColumnCount = 2; - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel6.Controls.Add(this.chkMergeFields, 0, 0); - this.tableLayoutPanel6.Controls.Add(this.chkVerticalBlend, 0, 1); - this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel6.Location = new System.Drawing.Point(0, 300); - this.tableLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel6.Name = "tableLayoutPanel6"; - this.tableLayoutPanel6.RowCount = 2; - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel6.Size = new System.Drawing.Size(253, 50); - this.tableLayoutPanel6.TabIndex = 30; - // - // chkMergeFields - // - this.chkMergeFields.AutoSize = true; - this.chkMergeFields.Location = new System.Drawing.Point(3, 3); - this.chkMergeFields.Name = "chkMergeFields"; - this.chkMergeFields.Size = new System.Drawing.Size(86, 17); - this.chkMergeFields.TabIndex = 30; - this.chkMergeFields.Text = "Merge Fields"; - this.chkMergeFields.UseVisualStyleBackColor = true; - // - // chkVerticalBlend - // - this.chkVerticalBlend.AutoSize = true; - this.chkVerticalBlend.Location = new System.Drawing.Point(3, 28); - this.chkVerticalBlend.Name = "chkVerticalBlend"; - this.chkVerticalBlend.Size = new System.Drawing.Size(134, 17); - this.chkVerticalBlend.TabIndex = 31; - this.chkVerticalBlend.Text = "Apply Vertical Blending"; - this.chkVerticalBlend.UseVisualStyleBackColor = true; - // - // grpCommon - // - this.grpCommon.Controls.Add(this.tableLayoutPanel4); - this.grpCommon.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpCommon.Location = new System.Drawing.Point(0, 27); - this.grpCommon.Margin = new System.Windows.Forms.Padding(0, 0, 2, 0); - this.grpCommon.Name = "grpCommon"; - this.grpCommon.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.grpCommon.Size = new System.Drawing.Size(258, 242); - this.grpCommon.TabIndex = 3; - this.grpCommon.TabStop = false; - this.grpCommon.Text = "Common Settings"; - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.ColumnCount = 1; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel4.Controls.Add(this.chkBilinearInterpolation, 0, 4); - this.tableLayoutPanel4.Controls.Add(this.trkBrightness, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.trkContrast, 0, 1); - this.tableLayoutPanel4.Controls.Add(this.trkHue, 0, 2); - this.tableLayoutPanel4.Controls.Add(this.trkSaturation, 0, 3); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 15); - this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.RowCount = 5; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Size = new System.Drawing.Size(252, 225); - this.tableLayoutPanel4.TabIndex = 4; - // - // chkBilinearInterpolation - // - this.chkBilinearInterpolation.AutoSize = true; - this.tableLayoutPanel4.SetColumnSpan(this.chkBilinearInterpolation, 2); - this.chkBilinearInterpolation.Location = new System.Drawing.Point(3, 203); - this.chkBilinearInterpolation.Name = "chkBilinearInterpolation"; - this.chkBilinearInterpolation.Size = new System.Drawing.Size(206, 17); - this.chkBilinearInterpolation.TabIndex = 28; - this.chkBilinearInterpolation.Text = "Use bilinear interpolation when scaling"; - this.chkBilinearInterpolation.UseVisualStyleBackColor = true; - // - // trkBrightness - // - this.trkBrightness.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkBrightness.Location = new System.Drawing.Point(0, 0); - this.trkBrightness.Margin = new System.Windows.Forms.Padding(0); - this.trkBrightness.Maximum = 100; - this.trkBrightness.MaximumSize = new System.Drawing.Size(0, 60); - this.trkBrightness.Minimum = -100; - this.trkBrightness.MinimumSize = new System.Drawing.Size(206, 50); - this.trkBrightness.Name = "trkBrightness"; - this.trkBrightness.Size = new System.Drawing.Size(252, 50); - this.trkBrightness.TabIndex = 24; - this.trkBrightness.Text = "Brightness"; - this.trkBrightness.Value = 0; - // - // trkContrast - // - this.trkContrast.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkContrast.Location = new System.Drawing.Point(0, 50); - this.trkContrast.Margin = new System.Windows.Forms.Padding(0); - this.trkContrast.Maximum = 100; - this.trkContrast.MaximumSize = new System.Drawing.Size(400, 55); - this.trkContrast.Minimum = -100; - this.trkContrast.MinimumSize = new System.Drawing.Size(206, 50); - this.trkContrast.Name = "trkContrast"; - this.trkContrast.Size = new System.Drawing.Size(252, 50); - this.trkContrast.TabIndex = 25; - this.trkContrast.Text = "Contrast"; - this.trkContrast.Value = 0; - // - // trkHue - // - this.trkHue.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkHue.Location = new System.Drawing.Point(0, 100); - this.trkHue.Margin = new System.Windows.Forms.Padding(0); - this.trkHue.Maximum = 100; - this.trkHue.MaximumSize = new System.Drawing.Size(0, 41); - this.trkHue.Minimum = -100; - this.trkHue.MinimumSize = new System.Drawing.Size(206, 50); - this.trkHue.Name = "trkHue"; - this.trkHue.Size = new System.Drawing.Size(252, 50); - this.trkHue.TabIndex = 26; - this.trkHue.Text = "Hue"; - this.trkHue.Value = 0; - // - // trkSaturation - // - this.trkSaturation.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkSaturation.Location = new System.Drawing.Point(0, 150); - this.trkSaturation.Margin = new System.Windows.Forms.Padding(0); - this.trkSaturation.Maximum = 100; - this.trkSaturation.MaximumSize = new System.Drawing.Size(0, 41); - this.trkSaturation.Minimum = -100; - this.trkSaturation.MinimumSize = new System.Drawing.Size(206, 50); - this.trkSaturation.Name = "trkSaturation"; - this.trkSaturation.Size = new System.Drawing.Size(252, 50); - this.trkSaturation.TabIndex = 27; - this.trkSaturation.Text = "Saturation"; - this.trkSaturation.Value = 0; - // - // grpScanlines - // - this.grpScanlines.Controls.Add(this.trkScanlines); - this.grpScanlines.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpScanlines.Location = new System.Drawing.Point(0, 269); - this.grpScanlines.Margin = new System.Windows.Forms.Padding(0, 0, 2, 0); - this.grpScanlines.Name = "grpScanlines"; - this.grpScanlines.Size = new System.Drawing.Size(258, 72); - this.grpScanlines.TabIndex = 5; - this.grpScanlines.TabStop = false; - this.grpScanlines.Text = "Scanlines"; - // - // trkScanlines - // - this.trkScanlines.Dock = System.Windows.Forms.DockStyle.Fill; - this.trkScanlines.Location = new System.Drawing.Point(3, 16); - this.trkScanlines.Margin = new System.Windows.Forms.Padding(0); - this.trkScanlines.Maximum = 100; - this.trkScanlines.MaximumSize = new System.Drawing.Size(0, 41); - this.trkScanlines.Minimum = 0; - this.trkScanlines.MinimumSize = new System.Drawing.Size(206, 50); - this.trkScanlines.Name = "trkScanlines"; - this.trkScanlines.Size = new System.Drawing.Size(252, 50); - this.trkScanlines.TabIndex = 28; - this.trkScanlines.Text = "Scanlines"; - this.trkScanlines.Value = 0; - // - // tableLayoutPanel8 - // - this.tableLayoutPanel8.ColumnCount = 2; - this.tableLayoutPanel5.SetColumnSpan(this.tableLayoutPanel8, 2); - this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel8.Controls.Add(this.cboFilter, 1, 0); - this.tableLayoutPanel8.Controls.Add(this.lblVideoFilter, 0, 0); - this.tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel8.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel8.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel8.Name = "tableLayoutPanel8"; - this.tableLayoutPanel8.RowCount = 1; - this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); - this.tableLayoutPanel8.Size = new System.Drawing.Size(521, 27); - this.tableLayoutPanel8.TabIndex = 6; - // - // cboFilter - // - this.cboFilter.Dock = System.Windows.Forms.DockStyle.Fill; - this.cboFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboFilter.FormattingEnabled = true; - this.cboFilter.Items.AddRange(new object[] { + this.nudCustomRatio.Visible = false; + // + // chkFullscreenForceIntegerScale + // + this.chkFullscreenForceIntegerScale.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkFullscreenForceIntegerScale.AutoSize = true; + this.tlpMain.SetColumnSpan(this.chkFullscreenForceIntegerScale, 2); + this.chkFullscreenForceIntegerScale.Location = new System.Drawing.Point(3, 173); + this.chkFullscreenForceIntegerScale.Name = "chkFullscreenForceIntegerScale"; + this.chkFullscreenForceIntegerScale.Size = new System.Drawing.Size(289, 17); + this.chkFullscreenForceIntegerScale.TabIndex = 23; + this.chkFullscreenForceIntegerScale.Text = "Use integer scale values when entering fullscreen mode"; + this.chkFullscreenForceIntegerScale.UseVisualStyleBackColor = true; + // + // chkShowFps + // + this.chkShowFps.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkShowFps.AutoSize = true; + this.tlpMain.SetColumnSpan(this.chkShowFps, 2); + this.chkShowFps.Location = new System.Drawing.Point(3, 219); + this.chkShowFps.Name = "chkShowFps"; + this.chkShowFps.Size = new System.Drawing.Size(76, 17); + this.chkShowFps.TabIndex = 9; + this.chkShowFps.Text = "Show FPS"; + this.chkShowFps.UseVisualStyleBackColor = true; + // + // chkIntegerFpsMode + // + this.chkIntegerFpsMode.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkIntegerFpsMode.AutoSize = true; + this.tlpMain.SetColumnSpan(this.chkIntegerFpsMode, 2); + this.chkIntegerFpsMode.Location = new System.Drawing.Point(3, 50); + this.chkIntegerFpsMode.Name = "chkIntegerFpsMode"; + this.chkIntegerFpsMode.Size = new System.Drawing.Size(308, 17); + this.chkIntegerFpsMode.TabIndex = 24; + this.chkIntegerFpsMode.Text = "Enable integer FPS mode (e.g: run at 60 fps instead of 60.1)"; + this.chkIntegerFpsMode.UseVisualStyleBackColor = true; + // + // flpRefreshRate + // + this.tlpMain.SetColumnSpan(this.flpRefreshRate, 2); + this.flpRefreshRate.Controls.Add(this.lblRequestedRefreshRate); + this.flpRefreshRate.Controls.Add(this.cboRefreshRate); + this.flpRefreshRate.Controls.Add(this.lblRequestedRefreshRate2); + this.flpRefreshRate.Controls.Add(this.cboRefreshRate2); + this.flpRefreshRate.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpRefreshRate.Location = new System.Drawing.Point(30, 143); + this.flpRefreshRate.Margin = new System.Windows.Forms.Padding(30, 0, 0, 0); + this.flpRefreshRate.Name = "flpRefreshRate"; + this.flpRefreshRate.Size = new System.Drawing.Size(491, 27); + this.flpRefreshRate.TabIndex = 26; + this.flpRefreshRate.Visible = false; + // + // lblRequestedRefreshRate + // + this.lblRequestedRefreshRate.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.lblRequestedRefreshRate.AutoSize = true; + this.lblRequestedRefreshRate.Location = new System.Drawing.Point(3, 7); + this.lblRequestedRefreshRate.Name = "lblRequestedRefreshRate"; + this.lblRequestedRefreshRate.Size = new System.Drawing.Size(160, 13); + this.lblRequestedRefreshRate.TabIndex = 17; + this.lblRequestedRefreshRate.Text = "Requested Refresh Rate NTSC:"; + // + // cboRefreshRate + // + this.cboRefreshRate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboRefreshRate.FormattingEnabled = true; + this.cboRefreshRate.Location = new System.Drawing.Point(169, 3); + this.cboRefreshRate.Name = "cboRefreshRate"; + this.cboRefreshRate.Size = new System.Drawing.Size(68, 21); + this.cboRefreshRate.TabIndex = 25; + // + // lblRequestedRefreshRate2 + // + this.lblRequestedRefreshRate2.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.lblRequestedRefreshRate2.AutoSize = true; + this.lblRequestedRefreshRate2.Location = new System.Drawing.Point(243, 7); + this.lblRequestedRefreshRate2.Name = "lblRequestedRefreshRate2"; + this.lblRequestedRefreshRate2.Size = new System.Drawing.Size(72, 13); + this.lblRequestedRefreshRate2.TabIndex = 26; + this.lblRequestedRefreshRate2.Text = "PAL / Dendy:"; + // + // cboRefreshRate2 + // + this.cboRefreshRate2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboRefreshRate2.FormattingEnabled = true; + this.cboRefreshRate2.Location = new System.Drawing.Point(321, 3); + this.cboRefreshRate2.Name = "cboRefreshRate2"; + this.cboRefreshRate2.Size = new System.Drawing.Size(68, 21); + this.cboRefreshRate2.TabIndex = 27; + // + // tabMain + // + this.tabMain.Controls.Add(this.tpgGeneral); + this.tabMain.Controls.Add(this.tpgPicture); + this.tabMain.Controls.Add(this.tpgOverscan); + this.tabMain.Controls.Add(this.tpgPalette); + this.tabMain.Controls.Add(this.tpgAdvanced); + this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabMain.Location = new System.Drawing.Point(0, 0); + this.tabMain.Name = "tabMain"; + this.tabMain.SelectedIndex = 0; + this.tabMain.Size = new System.Drawing.Size(535, 428); + this.tabMain.TabIndex = 2; + // + // tpgGeneral + // + this.tpgGeneral.Controls.Add(this.tlpMain); + this.tpgGeneral.Location = new System.Drawing.Point(4, 22); + this.tpgGeneral.Name = "tpgGeneral"; + this.tpgGeneral.Padding = new System.Windows.Forms.Padding(3); + this.tpgGeneral.Size = new System.Drawing.Size(527, 402); + this.tpgGeneral.TabIndex = 0; + this.tpgGeneral.Text = "General"; + this.tpgGeneral.UseVisualStyleBackColor = true; + // + // tpgPicture + // + this.tpgPicture.Controls.Add(this.tableLayoutPanel5); + this.tpgPicture.Location = new System.Drawing.Point(4, 22); + this.tpgPicture.Name = "tpgPicture"; + this.tpgPicture.Padding = new System.Windows.Forms.Padding(3); + this.tpgPicture.Size = new System.Drawing.Size(527, 402); + this.tpgPicture.TabIndex = 3; + this.tpgPicture.Text = "Picture"; + this.tpgPicture.UseVisualStyleBackColor = true; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.ColumnCount = 2; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanel7, 0, 3); + this.tableLayoutPanel5.Controls.Add(this.grpNtscFilter, 1, 1); + this.tableLayoutPanel5.Controls.Add(this.grpCommon, 0, 1); + this.tableLayoutPanel5.Controls.Add(this.grpScanlines, 0, 2); + this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanel8, 0, 0); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 4; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel5.Size = new System.Drawing.Size(521, 396); + this.tableLayoutPanel5.TabIndex = 5; + // + // tableLayoutPanel7 + // + this.tableLayoutPanel7.ColumnCount = 2; + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 36.92308F)); + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.07692F)); + this.tableLayoutPanel7.Controls.Add(this.btnSelectPreset, 1, 0); + this.tableLayoutPanel7.Controls.Add(this.btnResetPictureSettings, 0, 0); + this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel7.Location = new System.Drawing.Point(0, 341); + this.tableLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel7.Name = "tableLayoutPanel7"; + this.tableLayoutPanel7.RowCount = 1; + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel7.Size = new System.Drawing.Size(260, 55); + this.tableLayoutPanel7.TabIndex = 3; + // + // btnSelectPreset + // + this.btnSelectPreset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSelectPreset.AutoSize = true; + this.btnSelectPreset.Image = global::Mesen.GUI.Properties.Resources.DownArrow; + this.btnSelectPreset.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.btnSelectPreset.Location = new System.Drawing.Point(158, 29); + this.btnSelectPreset.Name = "btnSelectPreset"; + this.btnSelectPreset.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0); + this.btnSelectPreset.Size = new System.Drawing.Size(99, 23); + this.btnSelectPreset.TabIndex = 3; + this.btnSelectPreset.Text = "Select Preset..."; + this.btnSelectPreset.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + this.btnSelectPreset.UseVisualStyleBackColor = true; + this.btnSelectPreset.Click += new System.EventHandler(this.btnSelectPreset_Click); + // + // btnResetPictureSettings + // + this.btnResetPictureSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnResetPictureSettings.AutoSize = true; + this.btnResetPictureSettings.Location = new System.Drawing.Point(3, 29); + this.btnResetPictureSettings.Name = "btnResetPictureSettings"; + this.btnResetPictureSettings.Size = new System.Drawing.Size(75, 23); + this.btnResetPictureSettings.TabIndex = 3; + this.btnResetPictureSettings.Text = "Reset"; + this.btnResetPictureSettings.UseVisualStyleBackColor = true; + this.btnResetPictureSettings.Click += new System.EventHandler(this.btnResetPictureSettings_Click); + // + // grpNtscFilter + // + this.grpNtscFilter.Controls.Add(this.tlpNtscFilter2); + this.grpNtscFilter.Controls.Add(this.tlpNtscFilter1); + this.grpNtscFilter.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpNtscFilter.Location = new System.Drawing.Point(262, 27); + this.grpNtscFilter.Margin = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.grpNtscFilter.Name = "grpNtscFilter"; + this.tableLayoutPanel5.SetRowSpan(this.grpNtscFilter, 3); + this.grpNtscFilter.Size = new System.Drawing.Size(259, 369); + this.grpNtscFilter.TabIndex = 4; + this.grpNtscFilter.TabStop = false; + this.grpNtscFilter.Text = "NTSC Filter"; + // + // tlpNtscFilter2 + // + this.tlpNtscFilter2.ColumnCount = 1; + this.tlpNtscFilter2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpNtscFilter2.Controls.Add(this.trkYFilterLength, 0, 0); + this.tlpNtscFilter2.Controls.Add(this.trkIFilterLength, 0, 1); + this.tlpNtscFilter2.Controls.Add(this.trkQFilterLength, 0, 2); + this.tlpNtscFilter2.Dock = System.Windows.Forms.DockStyle.Top; + this.tlpNtscFilter2.Location = new System.Drawing.Point(3, 16); + this.tlpNtscFilter2.Margin = new System.Windows.Forms.Padding(0); + this.tlpNtscFilter2.Name = "tlpNtscFilter2"; + this.tlpNtscFilter2.RowCount = 7; + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpNtscFilter2.Size = new System.Drawing.Size(253, 298); + this.tlpNtscFilter2.TabIndex = 6; + // + // trkYFilterLength + // + this.trkYFilterLength.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkYFilterLength.Location = new System.Drawing.Point(0, 0); + this.trkYFilterLength.Margin = new System.Windows.Forms.Padding(0); + this.trkYFilterLength.Maximum = 400; + this.trkYFilterLength.MaximumSize = new System.Drawing.Size(0, 60); + this.trkYFilterLength.Minimum = -50; + this.trkYFilterLength.MinimumSize = new System.Drawing.Size(206, 50); + this.trkYFilterLength.Name = "trkYFilterLength"; + this.trkYFilterLength.Size = new System.Drawing.Size(253, 50); + this.trkYFilterLength.TabIndex = 24; + this.trkYFilterLength.Text = "Y Filter (Horizontal Blur)"; + this.trkYFilterLength.Value = 0; + // + // trkIFilterLength + // + this.trkIFilterLength.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkIFilterLength.Location = new System.Drawing.Point(0, 50); + this.trkIFilterLength.Margin = new System.Windows.Forms.Padding(0); + this.trkIFilterLength.Maximum = 400; + this.trkIFilterLength.MaximumSize = new System.Drawing.Size(400, 55); + this.trkIFilterLength.Minimum = 0; + this.trkIFilterLength.MinimumSize = new System.Drawing.Size(206, 50); + this.trkIFilterLength.Name = "trkIFilterLength"; + this.trkIFilterLength.Size = new System.Drawing.Size(253, 50); + this.trkIFilterLength.TabIndex = 25; + this.trkIFilterLength.Text = "I Filter (Horizontal Bleed)"; + this.trkIFilterLength.Value = 0; + // + // trkQFilterLength + // + this.trkQFilterLength.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkQFilterLength.Location = new System.Drawing.Point(0, 100); + this.trkQFilterLength.Margin = new System.Windows.Forms.Padding(0); + this.trkQFilterLength.Maximum = 400; + this.trkQFilterLength.MaximumSize = new System.Drawing.Size(0, 41); + this.trkQFilterLength.Minimum = 0; + this.trkQFilterLength.MinimumSize = new System.Drawing.Size(206, 50); + this.trkQFilterLength.Name = "trkQFilterLength"; + this.trkQFilterLength.Size = new System.Drawing.Size(253, 50); + this.trkQFilterLength.TabIndex = 26; + this.trkQFilterLength.Text = "Q Filter (Horizontal Bleed)"; + this.trkQFilterLength.Value = 0; + // + // tlpNtscFilter1 + // + this.tlpNtscFilter1.ColumnCount = 1; + this.tlpNtscFilter1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpNtscFilter1.Controls.Add(this.trkArtifacts, 0, 0); + this.tlpNtscFilter1.Controls.Add(this.trkBleed, 0, 1); + this.tlpNtscFilter1.Controls.Add(this.trkFringing, 0, 2); + this.tlpNtscFilter1.Controls.Add(this.trkGamma, 0, 3); + this.tlpNtscFilter1.Controls.Add(this.trkResolution, 0, 4); + this.tlpNtscFilter1.Controls.Add(this.trkSharpness, 0, 5); + this.tlpNtscFilter1.Controls.Add(this.tableLayoutPanel6, 0, 6); + this.tlpNtscFilter1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpNtscFilter1.Location = new System.Drawing.Point(3, 16); + this.tlpNtscFilter1.Margin = new System.Windows.Forms.Padding(0); + this.tlpNtscFilter1.Name = "tlpNtscFilter1"; + this.tlpNtscFilter1.RowCount = 7; + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpNtscFilter1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpNtscFilter1.Size = new System.Drawing.Size(253, 350); + this.tlpNtscFilter1.TabIndex = 5; + // + // trkArtifacts + // + this.trkArtifacts.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkArtifacts.Location = new System.Drawing.Point(0, 0); + this.trkArtifacts.Margin = new System.Windows.Forms.Padding(0); + this.trkArtifacts.Maximum = 100; + this.trkArtifacts.MaximumSize = new System.Drawing.Size(0, 60); + this.trkArtifacts.Minimum = -100; + this.trkArtifacts.MinimumSize = new System.Drawing.Size(206, 50); + this.trkArtifacts.Name = "trkArtifacts"; + this.trkArtifacts.Size = new System.Drawing.Size(253, 50); + this.trkArtifacts.TabIndex = 24; + this.trkArtifacts.Text = "Artifacts"; + this.trkArtifacts.Value = 0; + // + // trkBleed + // + this.trkBleed.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkBleed.Location = new System.Drawing.Point(0, 50); + this.trkBleed.Margin = new System.Windows.Forms.Padding(0); + this.trkBleed.Maximum = 100; + this.trkBleed.MaximumSize = new System.Drawing.Size(400, 55); + this.trkBleed.Minimum = -100; + this.trkBleed.MinimumSize = new System.Drawing.Size(206, 50); + this.trkBleed.Name = "trkBleed"; + this.trkBleed.Size = new System.Drawing.Size(253, 50); + this.trkBleed.TabIndex = 25; + this.trkBleed.Text = "Bleed"; + this.trkBleed.Value = 0; + // + // trkFringing + // + this.trkFringing.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkFringing.Location = new System.Drawing.Point(0, 100); + this.trkFringing.Margin = new System.Windows.Forms.Padding(0); + this.trkFringing.Maximum = 100; + this.trkFringing.MaximumSize = new System.Drawing.Size(0, 41); + this.trkFringing.Minimum = -100; + this.trkFringing.MinimumSize = new System.Drawing.Size(206, 50); + this.trkFringing.Name = "trkFringing"; + this.trkFringing.Size = new System.Drawing.Size(253, 50); + this.trkFringing.TabIndex = 26; + this.trkFringing.Text = "Fringing"; + this.trkFringing.Value = 0; + // + // trkGamma + // + this.trkGamma.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkGamma.Location = new System.Drawing.Point(0, 150); + this.trkGamma.Margin = new System.Windows.Forms.Padding(0); + this.trkGamma.Maximum = 100; + this.trkGamma.MaximumSize = new System.Drawing.Size(0, 41); + this.trkGamma.Minimum = -100; + this.trkGamma.MinimumSize = new System.Drawing.Size(206, 50); + this.trkGamma.Name = "trkGamma"; + this.trkGamma.Size = new System.Drawing.Size(253, 50); + this.trkGamma.TabIndex = 27; + this.trkGamma.Text = "Gamma"; + this.trkGamma.Value = 0; + // + // trkResolution + // + this.trkResolution.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkResolution.Location = new System.Drawing.Point(0, 200); + this.trkResolution.Margin = new System.Windows.Forms.Padding(0); + this.trkResolution.Maximum = 100; + this.trkResolution.MaximumSize = new System.Drawing.Size(0, 41); + this.trkResolution.Minimum = -100; + this.trkResolution.MinimumSize = new System.Drawing.Size(206, 50); + this.trkResolution.Name = "trkResolution"; + this.trkResolution.Size = new System.Drawing.Size(253, 50); + this.trkResolution.TabIndex = 28; + this.trkResolution.Text = "Resolution"; + this.trkResolution.Value = 0; + // + // trkSharpness + // + this.trkSharpness.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkSharpness.Location = new System.Drawing.Point(0, 250); + this.trkSharpness.Margin = new System.Windows.Forms.Padding(0); + this.trkSharpness.Maximum = 100; + this.trkSharpness.MaximumSize = new System.Drawing.Size(0, 41); + this.trkSharpness.Minimum = -100; + this.trkSharpness.MinimumSize = new System.Drawing.Size(206, 50); + this.trkSharpness.Name = "trkSharpness"; + this.trkSharpness.Size = new System.Drawing.Size(253, 50); + this.trkSharpness.TabIndex = 29; + this.trkSharpness.Text = "Sharpness"; + this.trkSharpness.Value = 0; + // + // tableLayoutPanel6 + // + this.tableLayoutPanel6.ColumnCount = 2; + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel6.Controls.Add(this.chkMergeFields, 0, 0); + this.tableLayoutPanel6.Controls.Add(this.chkVerticalBlend, 0, 1); + this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel6.Location = new System.Drawing.Point(0, 300); + this.tableLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel6.Name = "tableLayoutPanel6"; + this.tableLayoutPanel6.RowCount = 2; + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel6.Size = new System.Drawing.Size(253, 50); + this.tableLayoutPanel6.TabIndex = 30; + // + // chkMergeFields + // + this.chkMergeFields.AutoSize = true; + this.chkMergeFields.Location = new System.Drawing.Point(3, 3); + this.chkMergeFields.Name = "chkMergeFields"; + this.chkMergeFields.Size = new System.Drawing.Size(86, 17); + this.chkMergeFields.TabIndex = 30; + this.chkMergeFields.Text = "Merge Fields"; + this.chkMergeFields.UseVisualStyleBackColor = true; + // + // chkVerticalBlend + // + this.chkVerticalBlend.AutoSize = true; + this.chkVerticalBlend.Location = new System.Drawing.Point(3, 28); + this.chkVerticalBlend.Name = "chkVerticalBlend"; + this.chkVerticalBlend.Size = new System.Drawing.Size(134, 17); + this.chkVerticalBlend.TabIndex = 31; + this.chkVerticalBlend.Text = "Apply Vertical Blending"; + this.chkVerticalBlend.UseVisualStyleBackColor = true; + // + // grpCommon + // + this.grpCommon.Controls.Add(this.tableLayoutPanel4); + this.grpCommon.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpCommon.Location = new System.Drawing.Point(0, 27); + this.grpCommon.Margin = new System.Windows.Forms.Padding(0, 0, 2, 0); + this.grpCommon.Name = "grpCommon"; + this.grpCommon.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.grpCommon.Size = new System.Drawing.Size(258, 242); + this.grpCommon.TabIndex = 3; + this.grpCommon.TabStop = false; + this.grpCommon.Text = "Common Settings"; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel4.Controls.Add(this.chkBilinearInterpolation, 0, 4); + this.tableLayoutPanel4.Controls.Add(this.trkBrightness, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.trkContrast, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.trkHue, 0, 2); + this.tableLayoutPanel4.Controls.Add(this.trkSaturation, 0, 3); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 15); + this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 5; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(252, 225); + this.tableLayoutPanel4.TabIndex = 4; + // + // chkBilinearInterpolation + // + this.chkBilinearInterpolation.AutoSize = true; + this.tableLayoutPanel4.SetColumnSpan(this.chkBilinearInterpolation, 2); + this.chkBilinearInterpolation.Location = new System.Drawing.Point(3, 203); + this.chkBilinearInterpolation.Name = "chkBilinearInterpolation"; + this.chkBilinearInterpolation.Size = new System.Drawing.Size(206, 17); + this.chkBilinearInterpolation.TabIndex = 28; + this.chkBilinearInterpolation.Text = "Use bilinear interpolation when scaling"; + this.chkBilinearInterpolation.UseVisualStyleBackColor = true; + // + // trkBrightness + // + this.trkBrightness.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkBrightness.Location = new System.Drawing.Point(0, 0); + this.trkBrightness.Margin = new System.Windows.Forms.Padding(0); + this.trkBrightness.Maximum = 100; + this.trkBrightness.MaximumSize = new System.Drawing.Size(0, 60); + this.trkBrightness.Minimum = -100; + this.trkBrightness.MinimumSize = new System.Drawing.Size(206, 50); + this.trkBrightness.Name = "trkBrightness"; + this.trkBrightness.Size = new System.Drawing.Size(252, 50); + this.trkBrightness.TabIndex = 24; + this.trkBrightness.Text = "Brightness"; + this.trkBrightness.Value = 0; + // + // trkContrast + // + this.trkContrast.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkContrast.Location = new System.Drawing.Point(0, 50); + this.trkContrast.Margin = new System.Windows.Forms.Padding(0); + this.trkContrast.Maximum = 100; + this.trkContrast.MaximumSize = new System.Drawing.Size(400, 55); + this.trkContrast.Minimum = -100; + this.trkContrast.MinimumSize = new System.Drawing.Size(206, 50); + this.trkContrast.Name = "trkContrast"; + this.trkContrast.Size = new System.Drawing.Size(252, 50); + this.trkContrast.TabIndex = 25; + this.trkContrast.Text = "Contrast"; + this.trkContrast.Value = 0; + // + // trkHue + // + this.trkHue.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkHue.Location = new System.Drawing.Point(0, 100); + this.trkHue.Margin = new System.Windows.Forms.Padding(0); + this.trkHue.Maximum = 100; + this.trkHue.MaximumSize = new System.Drawing.Size(0, 41); + this.trkHue.Minimum = -100; + this.trkHue.MinimumSize = new System.Drawing.Size(206, 50); + this.trkHue.Name = "trkHue"; + this.trkHue.Size = new System.Drawing.Size(252, 50); + this.trkHue.TabIndex = 26; + this.trkHue.Text = "Hue"; + this.trkHue.Value = 0; + // + // trkSaturation + // + this.trkSaturation.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkSaturation.Location = new System.Drawing.Point(0, 150); + this.trkSaturation.Margin = new System.Windows.Forms.Padding(0); + this.trkSaturation.Maximum = 100; + this.trkSaturation.MaximumSize = new System.Drawing.Size(0, 41); + this.trkSaturation.Minimum = -100; + this.trkSaturation.MinimumSize = new System.Drawing.Size(206, 50); + this.trkSaturation.Name = "trkSaturation"; + this.trkSaturation.Size = new System.Drawing.Size(252, 50); + this.trkSaturation.TabIndex = 27; + this.trkSaturation.Text = "Saturation"; + this.trkSaturation.Value = 0; + // + // grpScanlines + // + this.grpScanlines.Controls.Add(this.trkScanlines); + this.grpScanlines.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpScanlines.Location = new System.Drawing.Point(0, 269); + this.grpScanlines.Margin = new System.Windows.Forms.Padding(0, 0, 2, 0); + this.grpScanlines.Name = "grpScanlines"; + this.grpScanlines.Size = new System.Drawing.Size(258, 72); + this.grpScanlines.TabIndex = 5; + this.grpScanlines.TabStop = false; + this.grpScanlines.Text = "Scanlines"; + // + // trkScanlines + // + this.trkScanlines.Dock = System.Windows.Forms.DockStyle.Fill; + this.trkScanlines.Location = new System.Drawing.Point(3, 16); + this.trkScanlines.Margin = new System.Windows.Forms.Padding(0); + this.trkScanlines.Maximum = 100; + this.trkScanlines.MaximumSize = new System.Drawing.Size(0, 41); + this.trkScanlines.Minimum = 0; + this.trkScanlines.MinimumSize = new System.Drawing.Size(206, 50); + this.trkScanlines.Name = "trkScanlines"; + this.trkScanlines.Size = new System.Drawing.Size(252, 50); + this.trkScanlines.TabIndex = 28; + this.trkScanlines.Text = "Scanlines"; + this.trkScanlines.Value = 0; + // + // tableLayoutPanel8 + // + this.tableLayoutPanel8.ColumnCount = 2; + this.tableLayoutPanel5.SetColumnSpan(this.tableLayoutPanel8, 2); + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel8.Controls.Add(this.cboFilter, 1, 0); + this.tableLayoutPanel8.Controls.Add(this.lblVideoFilter, 0, 0); + this.tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel8.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel8.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel8.Name = "tableLayoutPanel8"; + this.tableLayoutPanel8.RowCount = 1; + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel8.Size = new System.Drawing.Size(521, 27); + this.tableLayoutPanel8.TabIndex = 6; + // + // cboFilter + // + this.cboFilter.Dock = System.Windows.Forms.DockStyle.Fill; + this.cboFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboFilter.FormattingEnabled = true; + this.cboFilter.Items.AddRange(new object[] { "None", "NTSC"}); - this.cboFilter.Location = new System.Drawing.Point(41, 3); - this.cboFilter.Name = "cboFilter"; - this.cboFilter.Size = new System.Drawing.Size(477, 21); - this.cboFilter.TabIndex = 15; - // - // lblVideoFilter - // - this.lblVideoFilter.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblVideoFilter.AutoSize = true; - this.lblVideoFilter.Location = new System.Drawing.Point(3, 7); - this.lblVideoFilter.Name = "lblVideoFilter"; - this.lblVideoFilter.Size = new System.Drawing.Size(32, 13); - this.lblVideoFilter.TabIndex = 13; - this.lblVideoFilter.Text = "Filter:"; - // - // tpgOverscan - // - this.tpgOverscan.Controls.Add(this.tabOverscan); - this.tpgOverscan.Location = new System.Drawing.Point(4, 22); - this.tpgOverscan.Name = "tpgOverscan"; - this.tpgOverscan.Padding = new System.Windows.Forms.Padding(3); - this.tpgOverscan.Size = new System.Drawing.Size(527, 402); - this.tpgOverscan.TabIndex = 1; - this.tpgOverscan.Text = "Overscan"; - this.tpgOverscan.UseVisualStyleBackColor = true; - // - // tabOverscan - // - this.tabOverscan.Controls.Add(this.tpgOverscanGlobal); - this.tabOverscan.Controls.Add(this.tpgOverscanGameSpecific); - this.tabOverscan.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabOverscan.ImageList = this.imageList; - this.tabOverscan.Location = new System.Drawing.Point(3, 3); - this.tabOverscan.Name = "tabOverscan"; - this.tabOverscan.SelectedIndex = 0; - this.tabOverscan.Size = new System.Drawing.Size(521, 396); - this.tabOverscan.TabIndex = 1; - // - // tpgOverscanGlobal - // - this.tpgOverscanGlobal.Controls.Add(this.tableLayoutPanel1); - this.tpgOverscanGlobal.Location = new System.Drawing.Point(4, 23); - this.tpgOverscanGlobal.Name = "tpgOverscanGlobal"; - this.tpgOverscanGlobal.Padding = new System.Windows.Forms.Padding(3); - this.tpgOverscanGlobal.Size = new System.Drawing.Size(513, 369); - this.tpgOverscanGlobal.TabIndex = 0; - this.tpgOverscanGlobal.Text = "Global"; - this.tpgOverscanGlobal.UseVisualStyleBackColor = true; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 262F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.Controls.Add(this.picOverscan, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel11, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel12, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel13, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel14, 0, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 246F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(507, 363); - this.tableLayoutPanel1.TabIndex = 0; - // - // picOverscan - // - this.picOverscan.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.picOverscan.Dock = System.Windows.Forms.DockStyle.Fill; - this.picOverscan.Location = new System.Drawing.Point(125, 61); - this.picOverscan.Name = "picOverscan"; - this.picOverscan.Size = new System.Drawing.Size(256, 240); - this.picOverscan.TabIndex = 1; - this.picOverscan.TabStop = false; - // - // tableLayoutPanel11 - // - this.tableLayoutPanel11.ColumnCount = 1; - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel11.Controls.Add(this.nudOverscanTop, 0, 1); - this.tableLayoutPanel11.Controls.Add(this.lblTop, 0, 0); - this.tableLayoutPanel11.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel11.Location = new System.Drawing.Point(122, 0); - this.tableLayoutPanel11.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel11.Name = "tableLayoutPanel11"; - this.tableLayoutPanel11.RowCount = 2; - this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel11.Size = new System.Drawing.Size(262, 58); - this.tableLayoutPanel11.TabIndex = 4; - // - // nudOverscanTop - // - this.nudOverscanTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.nudOverscanTop.DecimalPlaces = 0; - this.nudOverscanTop.Increment = new decimal(new int[] { + this.cboFilter.Location = new System.Drawing.Point(41, 3); + this.cboFilter.Name = "cboFilter"; + this.cboFilter.Size = new System.Drawing.Size(477, 21); + this.cboFilter.TabIndex = 15; + // + // lblVideoFilter + // + this.lblVideoFilter.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblVideoFilter.AutoSize = true; + this.lblVideoFilter.Location = new System.Drawing.Point(3, 7); + this.lblVideoFilter.Name = "lblVideoFilter"; + this.lblVideoFilter.Size = new System.Drawing.Size(32, 13); + this.lblVideoFilter.TabIndex = 13; + this.lblVideoFilter.Text = "Filter:"; + // + // tpgOverscan + // + this.tpgOverscan.Controls.Add(this.tabOverscan); + this.tpgOverscan.Location = new System.Drawing.Point(4, 22); + this.tpgOverscan.Name = "tpgOverscan"; + this.tpgOverscan.Padding = new System.Windows.Forms.Padding(3); + this.tpgOverscan.Size = new System.Drawing.Size(527, 402); + this.tpgOverscan.TabIndex = 1; + this.tpgOverscan.Text = "Overscan"; + this.tpgOverscan.UseVisualStyleBackColor = true; + // + // tabOverscan + // + this.tabOverscan.Controls.Add(this.tpgOverscanGlobal); + this.tabOverscan.Controls.Add(this.tpgOverscanGameSpecific); + this.tabOverscan.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabOverscan.ImageList = this.imageList; + this.tabOverscan.Location = new System.Drawing.Point(3, 3); + this.tabOverscan.Name = "tabOverscan"; + this.tabOverscan.SelectedIndex = 0; + this.tabOverscan.Size = new System.Drawing.Size(521, 396); + this.tabOverscan.TabIndex = 1; + // + // tpgOverscanGlobal + // + this.tpgOverscanGlobal.Controls.Add(this.tableLayoutPanel1); + this.tpgOverscanGlobal.Location = new System.Drawing.Point(4, 23); + this.tpgOverscanGlobal.Name = "tpgOverscanGlobal"; + this.tpgOverscanGlobal.Padding = new System.Windows.Forms.Padding(3); + this.tpgOverscanGlobal.Size = new System.Drawing.Size(513, 369); + this.tpgOverscanGlobal.TabIndex = 0; + this.tpgOverscanGlobal.Text = "Global"; + this.tpgOverscanGlobal.UseVisualStyleBackColor = true; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 262F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.picOverscan, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel11, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel12, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel13, 2, 1); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel14, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 246F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(507, 363); + this.tableLayoutPanel1.TabIndex = 0; + // + // picOverscan + // + this.picOverscan.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picOverscan.Dock = System.Windows.Forms.DockStyle.Fill; + this.picOverscan.Location = new System.Drawing.Point(125, 61); + this.picOverscan.Name = "picOverscan"; + this.picOverscan.Size = new System.Drawing.Size(256, 240); + this.picOverscan.TabIndex = 1; + this.picOverscan.TabStop = false; + // + // tableLayoutPanel11 + // + this.tableLayoutPanel11.ColumnCount = 1; + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel11.Controls.Add(this.nudOverscanTop, 0, 1); + this.tableLayoutPanel11.Controls.Add(this.lblTop, 0, 0); + this.tableLayoutPanel11.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel11.Location = new System.Drawing.Point(122, 0); + this.tableLayoutPanel11.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel11.Name = "tableLayoutPanel11"; + this.tableLayoutPanel11.RowCount = 2; + this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel11.Size = new System.Drawing.Size(262, 58); + this.tableLayoutPanel11.TabIndex = 4; + // + // nudOverscanTop + // + this.nudOverscanTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.nudOverscanTop.DecimalPlaces = 0; + this.nudOverscanTop.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudOverscanTop.Location = new System.Drawing.Point(110, 37); - this.nudOverscanTop.Margin = new System.Windows.Forms.Padding(0); - this.nudOverscanTop.Maximum = new decimal(new int[] { + this.nudOverscanTop.IsHex = false; + this.nudOverscanTop.Location = new System.Drawing.Point(110, 37); + this.nudOverscanTop.Margin = new System.Windows.Forms.Padding(0); + this.nudOverscanTop.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudOverscanTop.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudOverscanTop.Minimum = new decimal(new int[] { + this.nudOverscanTop.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudOverscanTop.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanTop.MinimumSize = new System.Drawing.Size(0, 21); - this.nudOverscanTop.Name = "nudOverscanTop"; - this.nudOverscanTop.Size = new System.Drawing.Size(41, 21); - this.nudOverscanTop.TabIndex = 2; - this.nudOverscanTop.Value = new decimal(new int[] { + this.nudOverscanTop.MinimumSize = new System.Drawing.Size(0, 21); + this.nudOverscanTop.Name = "nudOverscanTop"; + this.nudOverscanTop.Size = new System.Drawing.Size(41, 21); + this.nudOverscanTop.TabIndex = 2; + this.nudOverscanTop.Value = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanTop.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); - // - // lblTop - // - this.lblTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.lblTop.AutoSize = true; - this.lblTop.Location = new System.Drawing.Point(118, 24); - this.lblTop.Name = "lblTop"; - this.lblTop.Size = new System.Drawing.Size(26, 13); - this.lblTop.TabIndex = 0; - this.lblTop.Text = "Top"; - this.lblTop.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tableLayoutPanel12 - // - this.tableLayoutPanel12.ColumnCount = 1; - this.tableLayoutPanel12.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel12.Controls.Add(this.nudOverscanBottom, 0, 1); - this.tableLayoutPanel12.Controls.Add(this.lblBottom, 0, 0); - this.tableLayoutPanel12.Location = new System.Drawing.Point(122, 304); - this.tableLayoutPanel12.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel12.Name = "tableLayoutPanel12"; - this.tableLayoutPanel12.RowCount = 2; - this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel12.Size = new System.Drawing.Size(262, 58); - this.tableLayoutPanel12.TabIndex = 5; - // - // nudOverscanBottom - // - this.nudOverscanBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.nudOverscanBottom.DecimalPlaces = 0; - this.nudOverscanBottom.Increment = new decimal(new int[] { + this.nudOverscanTop.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); + // + // lblTop + // + this.lblTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.lblTop.AutoSize = true; + this.lblTop.Location = new System.Drawing.Point(118, 24); + this.lblTop.Name = "lblTop"; + this.lblTop.Size = new System.Drawing.Size(26, 13); + this.lblTop.TabIndex = 0; + this.lblTop.Text = "Top"; + this.lblTop.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tableLayoutPanel12 + // + this.tableLayoutPanel12.ColumnCount = 1; + this.tableLayoutPanel12.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel12.Controls.Add(this.nudOverscanBottom, 0, 1); + this.tableLayoutPanel12.Controls.Add(this.lblBottom, 0, 0); + this.tableLayoutPanel12.Location = new System.Drawing.Point(122, 304); + this.tableLayoutPanel12.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel12.Name = "tableLayoutPanel12"; + this.tableLayoutPanel12.RowCount = 2; + this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel12.Size = new System.Drawing.Size(262, 58); + this.tableLayoutPanel12.TabIndex = 5; + // + // nudOverscanBottom + // + this.nudOverscanBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.nudOverscanBottom.DecimalPlaces = 0; + this.nudOverscanBottom.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudOverscanBottom.Location = new System.Drawing.Point(110, 13); - this.nudOverscanBottom.Margin = new System.Windows.Forms.Padding(0); - this.nudOverscanBottom.Maximum = new decimal(new int[] { + this.nudOverscanBottom.IsHex = false; + this.nudOverscanBottom.Location = new System.Drawing.Point(110, 13); + this.nudOverscanBottom.Margin = new System.Windows.Forms.Padding(0); + this.nudOverscanBottom.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudOverscanBottom.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudOverscanBottom.Minimum = new decimal(new int[] { + this.nudOverscanBottom.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudOverscanBottom.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanBottom.MinimumSize = new System.Drawing.Size(0, 21); - this.nudOverscanBottom.Name = "nudOverscanBottom"; - this.nudOverscanBottom.Size = new System.Drawing.Size(41, 21); - this.nudOverscanBottom.TabIndex = 2; - this.nudOverscanBottom.Value = new decimal(new int[] { + this.nudOverscanBottom.MinimumSize = new System.Drawing.Size(0, 21); + this.nudOverscanBottom.Name = "nudOverscanBottom"; + this.nudOverscanBottom.Size = new System.Drawing.Size(41, 21); + this.nudOverscanBottom.TabIndex = 2; + this.nudOverscanBottom.Value = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanBottom.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); - // - // lblBottom - // - this.lblBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lblBottom.AutoSize = true; - this.lblBottom.Location = new System.Drawing.Point(111, 0); - this.lblBottom.Name = "lblBottom"; - this.lblBottom.Size = new System.Drawing.Size(40, 13); - this.lblBottom.TabIndex = 0; - this.lblBottom.Text = "Bottom"; - this.lblBottom.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tableLayoutPanel13 - // - this.tableLayoutPanel13.ColumnCount = 2; - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel13.Controls.Add(this.nudOverscanRight, 0, 2); - this.tableLayoutPanel13.Controls.Add(this.lblRight, 0, 1); - this.tableLayoutPanel13.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel13.Location = new System.Drawing.Point(384, 58); - this.tableLayoutPanel13.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel13.Name = "tableLayoutPanel13"; - this.tableLayoutPanel13.RowCount = 4; - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel13.Size = new System.Drawing.Size(123, 246); - this.tableLayoutPanel13.TabIndex = 6; - // - // nudOverscanRight - // - this.nudOverscanRight.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.nudOverscanRight.DecimalPlaces = 0; - this.nudOverscanRight.Increment = new decimal(new int[] { + this.nudOverscanBottom.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); + // + // lblBottom + // + this.lblBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lblBottom.AutoSize = true; + this.lblBottom.Location = new System.Drawing.Point(111, 0); + this.lblBottom.Name = "lblBottom"; + this.lblBottom.Size = new System.Drawing.Size(40, 13); + this.lblBottom.TabIndex = 0; + this.lblBottom.Text = "Bottom"; + this.lblBottom.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tableLayoutPanel13 + // + this.tableLayoutPanel13.ColumnCount = 2; + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel13.Controls.Add(this.nudOverscanRight, 0, 2); + this.tableLayoutPanel13.Controls.Add(this.lblRight, 0, 1); + this.tableLayoutPanel13.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel13.Location = new System.Drawing.Point(384, 58); + this.tableLayoutPanel13.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel13.Name = "tableLayoutPanel13"; + this.tableLayoutPanel13.RowCount = 4; + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel13.Size = new System.Drawing.Size(123, 246); + this.tableLayoutPanel13.TabIndex = 6; + // + // nudOverscanRight + // + this.nudOverscanRight.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.nudOverscanRight.DecimalPlaces = 0; + this.nudOverscanRight.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudOverscanRight.Location = new System.Drawing.Point(0, 119); - this.nudOverscanRight.Margin = new System.Windows.Forms.Padding(0); - this.nudOverscanRight.Maximum = new decimal(new int[] { + this.nudOverscanRight.IsHex = false; + this.nudOverscanRight.Location = new System.Drawing.Point(0, 119); + this.nudOverscanRight.Margin = new System.Windows.Forms.Padding(0); + this.nudOverscanRight.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudOverscanRight.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudOverscanRight.Minimum = new decimal(new int[] { + this.nudOverscanRight.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudOverscanRight.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanRight.MinimumSize = new System.Drawing.Size(0, 21); - this.nudOverscanRight.Name = "nudOverscanRight"; - this.nudOverscanRight.Size = new System.Drawing.Size(41, 21); - this.nudOverscanRight.TabIndex = 1; - this.nudOverscanRight.Value = new decimal(new int[] { + this.nudOverscanRight.MinimumSize = new System.Drawing.Size(0, 21); + this.nudOverscanRight.Name = "nudOverscanRight"; + this.nudOverscanRight.Size = new System.Drawing.Size(41, 21); + this.nudOverscanRight.TabIndex = 1; + this.nudOverscanRight.Value = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanRight.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); - // - // lblRight - // - this.lblRight.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lblRight.AutoSize = true; - this.lblRight.Location = new System.Drawing.Point(4, 106); - this.lblRight.Name = "lblRight"; - this.lblRight.Size = new System.Drawing.Size(32, 13); - this.lblRight.TabIndex = 0; - this.lblRight.Text = "Right"; - this.lblRight.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tableLayoutPanel14 - // - this.tableLayoutPanel14.ColumnCount = 2; - this.tableLayoutPanel14.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel14.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel14.Controls.Add(this.nudOverscanLeft, 1, 2); - this.tableLayoutPanel14.Controls.Add(this.lblLeft, 1, 1); - this.tableLayoutPanel14.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel14.Location = new System.Drawing.Point(0, 58); - this.tableLayoutPanel14.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel14.Name = "tableLayoutPanel14"; - this.tableLayoutPanel14.RowCount = 4; - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel14.Size = new System.Drawing.Size(122, 246); - this.tableLayoutPanel14.TabIndex = 7; - // - // nudOverscanLeft - // - this.nudOverscanLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.nudOverscanLeft.DecimalPlaces = 0; - this.nudOverscanLeft.Increment = new decimal(new int[] { + this.nudOverscanRight.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); + // + // lblRight + // + this.lblRight.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lblRight.AutoSize = true; + this.lblRight.Location = new System.Drawing.Point(4, 106); + this.lblRight.Name = "lblRight"; + this.lblRight.Size = new System.Drawing.Size(32, 13); + this.lblRight.TabIndex = 0; + this.lblRight.Text = "Right"; + this.lblRight.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tableLayoutPanel14 + // + this.tableLayoutPanel14.ColumnCount = 2; + this.tableLayoutPanel14.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel14.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel14.Controls.Add(this.nudOverscanLeft, 1, 2); + this.tableLayoutPanel14.Controls.Add(this.lblLeft, 1, 1); + this.tableLayoutPanel14.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel14.Location = new System.Drawing.Point(0, 58); + this.tableLayoutPanel14.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel14.Name = "tableLayoutPanel14"; + this.tableLayoutPanel14.RowCount = 4; + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel14.Size = new System.Drawing.Size(122, 246); + this.tableLayoutPanel14.TabIndex = 7; + // + // nudOverscanLeft + // + this.nudOverscanLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.nudOverscanLeft.DecimalPlaces = 0; + this.nudOverscanLeft.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudOverscanLeft.Location = new System.Drawing.Point(81, 119); - this.nudOverscanLeft.Margin = new System.Windows.Forms.Padding(0); - this.nudOverscanLeft.Maximum = new decimal(new int[] { + this.nudOverscanLeft.IsHex = false; + this.nudOverscanLeft.Location = new System.Drawing.Point(81, 119); + this.nudOverscanLeft.Margin = new System.Windows.Forms.Padding(0); + this.nudOverscanLeft.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudOverscanLeft.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudOverscanLeft.Minimum = new decimal(new int[] { + this.nudOverscanLeft.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudOverscanLeft.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanLeft.MinimumSize = new System.Drawing.Size(0, 21); - this.nudOverscanLeft.Name = "nudOverscanLeft"; - this.nudOverscanLeft.Size = new System.Drawing.Size(41, 21); - this.nudOverscanLeft.TabIndex = 2; - this.nudOverscanLeft.Value = new decimal(new int[] { + this.nudOverscanLeft.MinimumSize = new System.Drawing.Size(0, 21); + this.nudOverscanLeft.Name = "nudOverscanLeft"; + this.nudOverscanLeft.Size = new System.Drawing.Size(41, 21); + this.nudOverscanLeft.TabIndex = 2; + this.nudOverscanLeft.Value = new decimal(new int[] { 0, 0, 0, 0}); - this.nudOverscanLeft.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); - // - // lblLeft - // - this.lblLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lblLeft.AutoSize = true; - this.lblLeft.Location = new System.Drawing.Point(89, 106); - this.lblLeft.Name = "lblLeft"; - this.lblLeft.Size = new System.Drawing.Size(25, 13); - this.lblLeft.TabIndex = 0; - this.lblLeft.Text = "Left"; - this.lblLeft.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tpgOverscanGameSpecific - // - this.tpgOverscanGameSpecific.Controls.Add(this.groupBox1); - this.tpgOverscanGameSpecific.Location = new System.Drawing.Point(4, 23); - this.tpgOverscanGameSpecific.Name = "tpgOverscanGameSpecific"; - this.tpgOverscanGameSpecific.Padding = new System.Windows.Forms.Padding(3); - this.tpgOverscanGameSpecific.Size = new System.Drawing.Size(513, 369); - this.tpgOverscanGameSpecific.TabIndex = 1; - this.tpgOverscanGameSpecific.Text = "Game-Specific"; - this.tpgOverscanGameSpecific.UseVisualStyleBackColor = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.tableLayoutPanel10); - this.groupBox1.Controls.Add(this.chkEnableGameSpecificOverscan); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(3, 3); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 5, 3, 3); - this.groupBox1.Size = new System.Drawing.Size(507, 363); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - // - // tableLayoutPanel10 - // - this.tableLayoutPanel10.ColumnCount = 3; - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 262F)); - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel10.Controls.Add(this.picGameSpecificOverscan, 1, 1); - this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel15, 1, 0); - this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel16, 1, 2); - this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel17, 2, 1); - this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel18, 0, 1); - this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel10.Location = new System.Drawing.Point(3, 18); - this.tableLayoutPanel10.Name = "tableLayoutPanel10"; - this.tableLayoutPanel10.RowCount = 3; - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 246F)); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel10.Size = new System.Drawing.Size(501, 342); - this.tableLayoutPanel10.TabIndex = 1; - // - // picGameSpecificOverscan - // - this.picGameSpecificOverscan.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.picGameSpecificOverscan.Dock = System.Windows.Forms.DockStyle.Fill; - this.picGameSpecificOverscan.Location = new System.Drawing.Point(122, 51); - this.picGameSpecificOverscan.Name = "picGameSpecificOverscan"; - this.picGameSpecificOverscan.Size = new System.Drawing.Size(256, 240); - this.picGameSpecificOverscan.TabIndex = 1; - this.picGameSpecificOverscan.TabStop = false; - // - // tableLayoutPanel15 - // - this.tableLayoutPanel15.ColumnCount = 1; - this.tableLayoutPanel15.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel15.Controls.Add(this.nudGameSpecificOverscanTop, 0, 1); - this.tableLayoutPanel15.Controls.Add(this.lblGameSpecificOverscanTop, 0, 0); - this.tableLayoutPanel15.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel15.Location = new System.Drawing.Point(119, 0); - this.tableLayoutPanel15.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel15.Name = "tableLayoutPanel15"; - this.tableLayoutPanel15.RowCount = 2; - this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel15.Size = new System.Drawing.Size(262, 48); - this.tableLayoutPanel15.TabIndex = 4; - // - // nudGameSpecificOverscanTop - // - this.nudGameSpecificOverscanTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.nudGameSpecificOverscanTop.DecimalPlaces = 0; - this.nudGameSpecificOverscanTop.Increment = new decimal(new int[] { + this.nudOverscanLeft.ValueChanged += new System.EventHandler(this.nudOverscan_ValueChanged); + // + // lblLeft + // + this.lblLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lblLeft.AutoSize = true; + this.lblLeft.Location = new System.Drawing.Point(89, 106); + this.lblLeft.Name = "lblLeft"; + this.lblLeft.Size = new System.Drawing.Size(25, 13); + this.lblLeft.TabIndex = 0; + this.lblLeft.Text = "Left"; + this.lblLeft.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tpgOverscanGameSpecific + // + this.tpgOverscanGameSpecific.Controls.Add(this.groupBox1); + this.tpgOverscanGameSpecific.Location = new System.Drawing.Point(4, 23); + this.tpgOverscanGameSpecific.Name = "tpgOverscanGameSpecific"; + this.tpgOverscanGameSpecific.Padding = new System.Windows.Forms.Padding(3); + this.tpgOverscanGameSpecific.Size = new System.Drawing.Size(513, 369); + this.tpgOverscanGameSpecific.TabIndex = 1; + this.tpgOverscanGameSpecific.Text = "Game-Specific"; + this.tpgOverscanGameSpecific.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.tableLayoutPanel10); + this.groupBox1.Controls.Add(this.chkEnableGameSpecificOverscan); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(3, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 5, 3, 3); + this.groupBox1.Size = new System.Drawing.Size(507, 363); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + // + // tableLayoutPanel10 + // + this.tableLayoutPanel10.ColumnCount = 3; + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 262F)); + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel10.Controls.Add(this.picGameSpecificOverscan, 1, 1); + this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel15, 1, 0); + this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel16, 1, 2); + this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel17, 2, 1); + this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel18, 0, 1); + this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel10.Location = new System.Drawing.Point(3, 18); + this.tableLayoutPanel10.Name = "tableLayoutPanel10"; + this.tableLayoutPanel10.RowCount = 3; + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 246F)); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel10.Size = new System.Drawing.Size(501, 342); + this.tableLayoutPanel10.TabIndex = 1; + // + // picGameSpecificOverscan + // + this.picGameSpecificOverscan.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picGameSpecificOverscan.Dock = System.Windows.Forms.DockStyle.Fill; + this.picGameSpecificOverscan.Location = new System.Drawing.Point(122, 51); + this.picGameSpecificOverscan.Name = "picGameSpecificOverscan"; + this.picGameSpecificOverscan.Size = new System.Drawing.Size(256, 240); + this.picGameSpecificOverscan.TabIndex = 1; + this.picGameSpecificOverscan.TabStop = false; + // + // tableLayoutPanel15 + // + this.tableLayoutPanel15.ColumnCount = 1; + this.tableLayoutPanel15.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel15.Controls.Add(this.nudGameSpecificOverscanTop, 0, 1); + this.tableLayoutPanel15.Controls.Add(this.lblGameSpecificOverscanTop, 0, 0); + this.tableLayoutPanel15.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel15.Location = new System.Drawing.Point(119, 0); + this.tableLayoutPanel15.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel15.Name = "tableLayoutPanel15"; + this.tableLayoutPanel15.RowCount = 2; + this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel15.Size = new System.Drawing.Size(262, 48); + this.tableLayoutPanel15.TabIndex = 4; + // + // nudGameSpecificOverscanTop + // + this.nudGameSpecificOverscanTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.nudGameSpecificOverscanTop.DecimalPlaces = 0; + this.nudGameSpecificOverscanTop.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudGameSpecificOverscanTop.Location = new System.Drawing.Point(110, 27); - this.nudGameSpecificOverscanTop.Margin = new System.Windows.Forms.Padding(0); - this.nudGameSpecificOverscanTop.Maximum = new decimal(new int[] { + this.nudGameSpecificOverscanTop.IsHex = false; + this.nudGameSpecificOverscanTop.Location = new System.Drawing.Point(110, 27); + this.nudGameSpecificOverscanTop.Margin = new System.Windows.Forms.Padding(0); + this.nudGameSpecificOverscanTop.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudGameSpecificOverscanTop.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudGameSpecificOverscanTop.Minimum = new decimal(new int[] { + this.nudGameSpecificOverscanTop.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudGameSpecificOverscanTop.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudGameSpecificOverscanTop.MinimumSize = new System.Drawing.Size(0, 21); - this.nudGameSpecificOverscanTop.Name = "nudGameSpecificOverscanTop"; - this.nudGameSpecificOverscanTop.Size = new System.Drawing.Size(41, 21); - this.nudGameSpecificOverscanTop.TabIndex = 2; - this.nudGameSpecificOverscanTop.Value = new decimal(new int[] { + this.nudGameSpecificOverscanTop.MinimumSize = new System.Drawing.Size(0, 21); + this.nudGameSpecificOverscanTop.Name = "nudGameSpecificOverscanTop"; + this.nudGameSpecificOverscanTop.Size = new System.Drawing.Size(41, 21); + this.nudGameSpecificOverscanTop.TabIndex = 2; + this.nudGameSpecificOverscanTop.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblGameSpecificOverscanTop - // - this.lblGameSpecificOverscanTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.lblGameSpecificOverscanTop.AutoSize = true; - this.lblGameSpecificOverscanTop.Location = new System.Drawing.Point(118, 14); - this.lblGameSpecificOverscanTop.Name = "lblGameSpecificOverscanTop"; - this.lblGameSpecificOverscanTop.Size = new System.Drawing.Size(26, 13); - this.lblGameSpecificOverscanTop.TabIndex = 0; - this.lblGameSpecificOverscanTop.Text = "Top"; - this.lblGameSpecificOverscanTop.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tableLayoutPanel16 - // - this.tableLayoutPanel16.ColumnCount = 1; - this.tableLayoutPanel16.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel16.Controls.Add(this.nudGameSpecificOverscanBottom, 0, 1); - this.tableLayoutPanel16.Controls.Add(this.lblGameSpecificOverscanBottom, 0, 0); - this.tableLayoutPanel16.Location = new System.Drawing.Point(119, 294); - this.tableLayoutPanel16.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel16.Name = "tableLayoutPanel16"; - this.tableLayoutPanel16.RowCount = 2; - this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel16.Size = new System.Drawing.Size(262, 48); - this.tableLayoutPanel16.TabIndex = 5; - // - // nudGameSpecificOverscanBottom - // - this.nudGameSpecificOverscanBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.nudGameSpecificOverscanBottom.DecimalPlaces = 0; - this.nudGameSpecificOverscanBottom.Increment = new decimal(new int[] { + // + // lblGameSpecificOverscanTop + // + this.lblGameSpecificOverscanTop.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.lblGameSpecificOverscanTop.AutoSize = true; + this.lblGameSpecificOverscanTop.Location = new System.Drawing.Point(118, 14); + this.lblGameSpecificOverscanTop.Name = "lblGameSpecificOverscanTop"; + this.lblGameSpecificOverscanTop.Size = new System.Drawing.Size(26, 13); + this.lblGameSpecificOverscanTop.TabIndex = 0; + this.lblGameSpecificOverscanTop.Text = "Top"; + this.lblGameSpecificOverscanTop.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tableLayoutPanel16 + // + this.tableLayoutPanel16.ColumnCount = 1; + this.tableLayoutPanel16.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel16.Controls.Add(this.nudGameSpecificOverscanBottom, 0, 1); + this.tableLayoutPanel16.Controls.Add(this.lblGameSpecificOverscanBottom, 0, 0); + this.tableLayoutPanel16.Location = new System.Drawing.Point(119, 294); + this.tableLayoutPanel16.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel16.Name = "tableLayoutPanel16"; + this.tableLayoutPanel16.RowCount = 2; + this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel16.Size = new System.Drawing.Size(262, 48); + this.tableLayoutPanel16.TabIndex = 5; + // + // nudGameSpecificOverscanBottom + // + this.nudGameSpecificOverscanBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.nudGameSpecificOverscanBottom.DecimalPlaces = 0; + this.nudGameSpecificOverscanBottom.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudGameSpecificOverscanBottom.Location = new System.Drawing.Point(110, 13); - this.nudGameSpecificOverscanBottom.Margin = new System.Windows.Forms.Padding(0); - this.nudGameSpecificOverscanBottom.Maximum = new decimal(new int[] { + this.nudGameSpecificOverscanBottom.IsHex = false; + this.nudGameSpecificOverscanBottom.Location = new System.Drawing.Point(110, 13); + this.nudGameSpecificOverscanBottom.Margin = new System.Windows.Forms.Padding(0); + this.nudGameSpecificOverscanBottom.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudGameSpecificOverscanBottom.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudGameSpecificOverscanBottom.Minimum = new decimal(new int[] { + this.nudGameSpecificOverscanBottom.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudGameSpecificOverscanBottom.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudGameSpecificOverscanBottom.MinimumSize = new System.Drawing.Size(0, 21); - this.nudGameSpecificOverscanBottom.Name = "nudGameSpecificOverscanBottom"; - this.nudGameSpecificOverscanBottom.Size = new System.Drawing.Size(41, 21); - this.nudGameSpecificOverscanBottom.TabIndex = 2; - this.nudGameSpecificOverscanBottom.Value = new decimal(new int[] { + this.nudGameSpecificOverscanBottom.MinimumSize = new System.Drawing.Size(0, 21); + this.nudGameSpecificOverscanBottom.Name = "nudGameSpecificOverscanBottom"; + this.nudGameSpecificOverscanBottom.Size = new System.Drawing.Size(41, 21); + this.nudGameSpecificOverscanBottom.TabIndex = 2; + this.nudGameSpecificOverscanBottom.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblGameSpecificOverscanBottom - // - this.lblGameSpecificOverscanBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lblGameSpecificOverscanBottom.AutoSize = true; - this.lblGameSpecificOverscanBottom.Location = new System.Drawing.Point(111, 0); - this.lblGameSpecificOverscanBottom.Name = "lblGameSpecificOverscanBottom"; - this.lblGameSpecificOverscanBottom.Size = new System.Drawing.Size(40, 13); - this.lblGameSpecificOverscanBottom.TabIndex = 0; - this.lblGameSpecificOverscanBottom.Text = "Bottom"; - this.lblGameSpecificOverscanBottom.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tableLayoutPanel17 - // - this.tableLayoutPanel17.ColumnCount = 2; - this.tableLayoutPanel17.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel17.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel17.Controls.Add(this.nudGameSpecificOverscanRight, 0, 2); - this.tableLayoutPanel17.Controls.Add(this.lblGameSpecificOverscanRight, 0, 1); - this.tableLayoutPanel17.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel17.Location = new System.Drawing.Point(381, 48); - this.tableLayoutPanel17.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel17.Name = "tableLayoutPanel17"; - this.tableLayoutPanel17.RowCount = 4; - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel17.Size = new System.Drawing.Size(120, 246); - this.tableLayoutPanel17.TabIndex = 6; - // - // nudGameSpecificOverscanRight - // - this.nudGameSpecificOverscanRight.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.nudGameSpecificOverscanRight.DecimalPlaces = 0; - this.nudGameSpecificOverscanRight.Increment = new decimal(new int[] { + // + // lblGameSpecificOverscanBottom + // + this.lblGameSpecificOverscanBottom.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lblGameSpecificOverscanBottom.AutoSize = true; + this.lblGameSpecificOverscanBottom.Location = new System.Drawing.Point(111, 0); + this.lblGameSpecificOverscanBottom.Name = "lblGameSpecificOverscanBottom"; + this.lblGameSpecificOverscanBottom.Size = new System.Drawing.Size(40, 13); + this.lblGameSpecificOverscanBottom.TabIndex = 0; + this.lblGameSpecificOverscanBottom.Text = "Bottom"; + this.lblGameSpecificOverscanBottom.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tableLayoutPanel17 + // + this.tableLayoutPanel17.ColumnCount = 2; + this.tableLayoutPanel17.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel17.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel17.Controls.Add(this.nudGameSpecificOverscanRight, 0, 2); + this.tableLayoutPanel17.Controls.Add(this.lblGameSpecificOverscanRight, 0, 1); + this.tableLayoutPanel17.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel17.Location = new System.Drawing.Point(381, 48); + this.tableLayoutPanel17.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel17.Name = "tableLayoutPanel17"; + this.tableLayoutPanel17.RowCount = 4; + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel17.Size = new System.Drawing.Size(120, 246); + this.tableLayoutPanel17.TabIndex = 6; + // + // nudGameSpecificOverscanRight + // + this.nudGameSpecificOverscanRight.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.nudGameSpecificOverscanRight.DecimalPlaces = 0; + this.nudGameSpecificOverscanRight.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudGameSpecificOverscanRight.Location = new System.Drawing.Point(0, 119); - this.nudGameSpecificOverscanRight.Margin = new System.Windows.Forms.Padding(0); - this.nudGameSpecificOverscanRight.Maximum = new decimal(new int[] { + this.nudGameSpecificOverscanRight.IsHex = false; + this.nudGameSpecificOverscanRight.Location = new System.Drawing.Point(0, 119); + this.nudGameSpecificOverscanRight.Margin = new System.Windows.Forms.Padding(0); + this.nudGameSpecificOverscanRight.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudGameSpecificOverscanRight.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudGameSpecificOverscanRight.Minimum = new decimal(new int[] { + this.nudGameSpecificOverscanRight.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudGameSpecificOverscanRight.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudGameSpecificOverscanRight.MinimumSize = new System.Drawing.Size(0, 21); - this.nudGameSpecificOverscanRight.Name = "nudGameSpecificOverscanRight"; - this.nudGameSpecificOverscanRight.Size = new System.Drawing.Size(41, 21); - this.nudGameSpecificOverscanRight.TabIndex = 1; - this.nudGameSpecificOverscanRight.Value = new decimal(new int[] { + this.nudGameSpecificOverscanRight.MinimumSize = new System.Drawing.Size(0, 21); + this.nudGameSpecificOverscanRight.Name = "nudGameSpecificOverscanRight"; + this.nudGameSpecificOverscanRight.Size = new System.Drawing.Size(41, 21); + this.nudGameSpecificOverscanRight.TabIndex = 1; + this.nudGameSpecificOverscanRight.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblGameSpecificOverscanRight - // - this.lblGameSpecificOverscanRight.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lblGameSpecificOverscanRight.AutoSize = true; - this.lblGameSpecificOverscanRight.Location = new System.Drawing.Point(4, 106); - this.lblGameSpecificOverscanRight.Name = "lblGameSpecificOverscanRight"; - this.lblGameSpecificOverscanRight.Size = new System.Drawing.Size(32, 13); - this.lblGameSpecificOverscanRight.TabIndex = 0; - this.lblGameSpecificOverscanRight.Text = "Right"; - this.lblGameSpecificOverscanRight.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // tableLayoutPanel18 - // - this.tableLayoutPanel18.ColumnCount = 2; - this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel18.Controls.Add(this.nudGameSpecificOverscanLeft, 1, 2); - this.tableLayoutPanel18.Controls.Add(this.lblGameSpecificOverscanLeft, 1, 1); - this.tableLayoutPanel18.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel18.Location = new System.Drawing.Point(0, 48); - this.tableLayoutPanel18.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel18.Name = "tableLayoutPanel18"; - this.tableLayoutPanel18.RowCount = 4; - this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel18.Size = new System.Drawing.Size(119, 246); - this.tableLayoutPanel18.TabIndex = 7; - // - // nudGameSpecificOverscanLeft - // - this.nudGameSpecificOverscanLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.nudGameSpecificOverscanLeft.DecimalPlaces = 0; - this.nudGameSpecificOverscanLeft.Increment = new decimal(new int[] { + // + // lblGameSpecificOverscanRight + // + this.lblGameSpecificOverscanRight.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lblGameSpecificOverscanRight.AutoSize = true; + this.lblGameSpecificOverscanRight.Location = new System.Drawing.Point(4, 106); + this.lblGameSpecificOverscanRight.Name = "lblGameSpecificOverscanRight"; + this.lblGameSpecificOverscanRight.Size = new System.Drawing.Size(32, 13); + this.lblGameSpecificOverscanRight.TabIndex = 0; + this.lblGameSpecificOverscanRight.Text = "Right"; + this.lblGameSpecificOverscanRight.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tableLayoutPanel18 + // + this.tableLayoutPanel18.ColumnCount = 2; + this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel18.Controls.Add(this.nudGameSpecificOverscanLeft, 1, 2); + this.tableLayoutPanel18.Controls.Add(this.lblGameSpecificOverscanLeft, 1, 1); + this.tableLayoutPanel18.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel18.Location = new System.Drawing.Point(0, 48); + this.tableLayoutPanel18.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel18.Name = "tableLayoutPanel18"; + this.tableLayoutPanel18.RowCount = 4; + this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel18.Size = new System.Drawing.Size(119, 246); + this.tableLayoutPanel18.TabIndex = 7; + // + // nudGameSpecificOverscanLeft + // + this.nudGameSpecificOverscanLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.nudGameSpecificOverscanLeft.DecimalPlaces = 0; + this.nudGameSpecificOverscanLeft.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudGameSpecificOverscanLeft.Location = new System.Drawing.Point(78, 119); - this.nudGameSpecificOverscanLeft.Margin = new System.Windows.Forms.Padding(0); - this.nudGameSpecificOverscanLeft.Maximum = new decimal(new int[] { + this.nudGameSpecificOverscanLeft.IsHex = false; + this.nudGameSpecificOverscanLeft.Location = new System.Drawing.Point(78, 119); + this.nudGameSpecificOverscanLeft.Margin = new System.Windows.Forms.Padding(0); + this.nudGameSpecificOverscanLeft.Maximum = new decimal(new int[] { 100, 0, 0, 0}); - this.nudGameSpecificOverscanLeft.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudGameSpecificOverscanLeft.Minimum = new decimal(new int[] { + this.nudGameSpecificOverscanLeft.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudGameSpecificOverscanLeft.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudGameSpecificOverscanLeft.MinimumSize = new System.Drawing.Size(0, 21); - this.nudGameSpecificOverscanLeft.Name = "nudGameSpecificOverscanLeft"; - this.nudGameSpecificOverscanLeft.Size = new System.Drawing.Size(41, 21); - this.nudGameSpecificOverscanLeft.TabIndex = 2; - this.nudGameSpecificOverscanLeft.Value = new decimal(new int[] { + this.nudGameSpecificOverscanLeft.MinimumSize = new System.Drawing.Size(0, 21); + this.nudGameSpecificOverscanLeft.Name = "nudGameSpecificOverscanLeft"; + this.nudGameSpecificOverscanLeft.Size = new System.Drawing.Size(41, 21); + this.nudGameSpecificOverscanLeft.TabIndex = 2; + this.nudGameSpecificOverscanLeft.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblGameSpecificOverscanLeft - // - this.lblGameSpecificOverscanLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lblGameSpecificOverscanLeft.AutoSize = true; - this.lblGameSpecificOverscanLeft.Location = new System.Drawing.Point(86, 106); - this.lblGameSpecificOverscanLeft.Name = "lblGameSpecificOverscanLeft"; - this.lblGameSpecificOverscanLeft.Size = new System.Drawing.Size(25, 13); - this.lblGameSpecificOverscanLeft.TabIndex = 0; - this.lblGameSpecificOverscanLeft.Text = "Left"; - this.lblGameSpecificOverscanLeft.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // chkEnableGameSpecificOverscan - // - this.chkEnableGameSpecificOverscan.AutoSize = true; - this.chkEnableGameSpecificOverscan.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.chkEnableGameSpecificOverscan.Location = new System.Drawing.Point(6, -1); - this.chkEnableGameSpecificOverscan.Name = "chkEnableGameSpecificOverscan"; - this.chkEnableGameSpecificOverscan.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); - this.chkEnableGameSpecificOverscan.Size = new System.Drawing.Size(218, 17); - this.chkEnableGameSpecificOverscan.TabIndex = 0; - this.chkEnableGameSpecificOverscan.Text = "Enable game-specific overscan settings"; - this.chkEnableGameSpecificOverscan.UseVisualStyleBackColor = false; - this.chkEnableGameSpecificOverscan.CheckedChanged += new System.EventHandler(this.chkEnableGameSpecificOverscan_CheckedChanged); - // - // imageList - // - this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); - this.imageList.TransparentColor = System.Drawing.Color.Transparent; - this.imageList.Images.SetKeyName(0, "Exclamation.png"); - // - // tpgPalette - // - this.tpgPalette.Controls.Add(this.tableLayoutPanel3); - this.tpgPalette.Location = new System.Drawing.Point(4, 22); - this.tpgPalette.Name = "tpgPalette"; - this.tpgPalette.Padding = new System.Windows.Forms.Padding(3); - this.tpgPalette.Size = new System.Drawing.Size(527, 402); - this.tpgPalette.TabIndex = 2; - this.tpgPalette.Text = "Palette"; - this.tpgPalette.UseVisualStyleBackColor = true; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.ColumnCount = 2; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel2, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.chkUseCustomVsPalette, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.ctrlPaletteDisplay, 0, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 2; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(521, 396); - this.tableLayoutPanel3.TabIndex = 4; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + // + // lblGameSpecificOverscanLeft + // + this.lblGameSpecificOverscanLeft.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lblGameSpecificOverscanLeft.AutoSize = true; + this.lblGameSpecificOverscanLeft.Location = new System.Drawing.Point(86, 106); + this.lblGameSpecificOverscanLeft.Name = "lblGameSpecificOverscanLeft"; + this.lblGameSpecificOverscanLeft.Size = new System.Drawing.Size(25, 13); + this.lblGameSpecificOverscanLeft.TabIndex = 0; + this.lblGameSpecificOverscanLeft.Text = "Left"; + this.lblGameSpecificOverscanLeft.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // chkEnableGameSpecificOverscan + // + this.chkEnableGameSpecificOverscan.AutoSize = true; + this.chkEnableGameSpecificOverscan.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.chkEnableGameSpecificOverscan.Location = new System.Drawing.Point(6, -1); + this.chkEnableGameSpecificOverscan.Name = "chkEnableGameSpecificOverscan"; + this.chkEnableGameSpecificOverscan.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); + this.chkEnableGameSpecificOverscan.Size = new System.Drawing.Size(218, 17); + this.chkEnableGameSpecificOverscan.TabIndex = 0; + this.chkEnableGameSpecificOverscan.Text = "Enable game-specific overscan settings"; + this.chkEnableGameSpecificOverscan.UseVisualStyleBackColor = false; + this.chkEnableGameSpecificOverscan.CheckedChanged += new System.EventHandler(this.chkEnableGameSpecificOverscan_CheckedChanged); + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Transparent; + this.imageList.Images.SetKeyName(0, "Exclamation.png"); + // + // tpgPalette + // + this.tpgPalette.Controls.Add(this.tableLayoutPanel3); + this.tpgPalette.Location = new System.Drawing.Point(4, 22); + this.tpgPalette.Name = "tpgPalette"; + this.tpgPalette.Padding = new System.Windows.Forms.Padding(3); + this.tpgPalette.Size = new System.Drawing.Size(527, 402); + this.tpgPalette.TabIndex = 2; + this.tpgPalette.Text = "Palette"; + this.tpgPalette.UseVisualStyleBackColor = true; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel2, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.chkUseCustomVsPalette, 0, 1); + this.tableLayoutPanel3.Controls.Add(this.ctrlPaletteDisplay, 0, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(521, 396); + this.tableLayoutPanel3.TabIndex = 4; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.btnExportPalette, 0, 2); - this.tableLayoutPanel2.Controls.Add(this.btnSelectPalette, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.btnLoadPalFile, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.chkShowColorIndexes, 0, 3); - this.tableLayoutPanel2.Location = new System.Drawing.Point(344, 0); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 4; - 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(181, 344); - this.tableLayoutPanel2.TabIndex = 1; - // - // btnExportPalette - // - this.btnExportPalette.AutoSize = true; - this.btnExportPalette.Dock = System.Windows.Forms.DockStyle.Top; - this.btnExportPalette.Location = new System.Drawing.Point(3, 61); - this.btnExportPalette.Name = "btnExportPalette"; - this.btnExportPalette.Size = new System.Drawing.Size(175, 23); - this.btnExportPalette.TabIndex = 3; - this.btnExportPalette.Text = "Export Palette"; - this.btnExportPalette.UseVisualStyleBackColor = true; - this.btnExportPalette.Click += new System.EventHandler(this.btnExportPalette_Click); - // - // btnSelectPalette - // - this.btnSelectPalette.AutoSize = true; - this.btnSelectPalette.Dock = System.Windows.Forms.DockStyle.Top; - this.btnSelectPalette.Image = global::Mesen.GUI.Properties.Resources.DownArrow; - this.btnSelectPalette.Location = new System.Drawing.Point(3, 3); - this.btnSelectPalette.Name = "btnSelectPalette"; - this.btnSelectPalette.Size = new System.Drawing.Size(175, 23); - this.btnSelectPalette.TabIndex = 2; - this.btnSelectPalette.Text = "Load Preset Palette..."; - this.btnSelectPalette.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; - this.btnSelectPalette.UseVisualStyleBackColor = true; - this.btnSelectPalette.Click += new System.EventHandler(this.btnSelectPalette_Click); - // - // btnLoadPalFile - // - this.btnLoadPalFile.AutoSize = true; - this.btnLoadPalFile.Dock = System.Windows.Forms.DockStyle.Top; - this.btnLoadPalFile.Location = new System.Drawing.Point(3, 32); - this.btnLoadPalFile.Name = "btnLoadPalFile"; - this.btnLoadPalFile.Size = new System.Drawing.Size(175, 23); - this.btnLoadPalFile.TabIndex = 0; - this.btnLoadPalFile.Text = "Load Palette File"; - this.btnLoadPalFile.UseVisualStyleBackColor = true; - this.btnLoadPalFile.Click += new System.EventHandler(this.btnLoadPalFile_Click); - // - // chkShowColorIndexes - // - this.chkShowColorIndexes.AutoSize = true; - this.chkShowColorIndexes.Location = new System.Drawing.Point(3, 90); - this.chkShowColorIndexes.Name = "chkShowColorIndexes"; - this.chkShowColorIndexes.Size = new System.Drawing.Size(118, 17); - this.chkShowColorIndexes.TabIndex = 4; - this.chkShowColorIndexes.Text = "Show color indexes"; - this.chkShowColorIndexes.UseVisualStyleBackColor = true; - this.chkShowColorIndexes.CheckedChanged += new System.EventHandler(this.chkShowColorIndexes_CheckedChanged); - // - // chkUseCustomVsPalette - // - this.chkUseCustomVsPalette.AutoSize = true; - this.tableLayoutPanel3.SetColumnSpan(this.chkUseCustomVsPalette, 2); - this.chkUseCustomVsPalette.Location = new System.Drawing.Point(3, 347); - this.chkUseCustomVsPalette.Name = "chkUseCustomVsPalette"; - this.chkUseCustomVsPalette.Size = new System.Drawing.Size(202, 17); - this.chkUseCustomVsPalette.TabIndex = 2; - this.chkUseCustomVsPalette.Text = "Use this palette for VS System games"; - this.chkUseCustomVsPalette.UseVisualStyleBackColor = true; - // - // ctrlPaletteDisplay - // - this.ctrlPaletteDisplay.Location = new System.Drawing.Point(3, 3); - this.ctrlPaletteDisplay.Name = "ctrlPaletteDisplay"; - this.ctrlPaletteDisplay.Size = new System.Drawing.Size(338, 338); - this.ctrlPaletteDisplay.TabIndex = 3; - this.ctrlPaletteDisplay.ColorClick += new Mesen.GUI.Debugger.ctrlPaletteDisplay.PaletteClickHandler(this.ctrlPaletteDisplay_ColorClick); - // - // tpgAdvanced - // - this.tpgAdvanced.Controls.Add(this.tableLayoutPanel9); - this.tpgAdvanced.Location = new System.Drawing.Point(4, 22); - this.tpgAdvanced.Name = "tpgAdvanced"; - this.tpgAdvanced.Padding = new System.Windows.Forms.Padding(3); - this.tpgAdvanced.Size = new System.Drawing.Size(527, 402); - this.tpgAdvanced.TabIndex = 4; - this.tpgAdvanced.Text = "Advanced"; - this.tpgAdvanced.UseVisualStyleBackColor = true; - // - // tableLayoutPanel9 - // - this.tableLayoutPanel9.ColumnCount = 2; - this.tableLayoutPanel9.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel9.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel9.Controls.Add(this.chkDisableBackground, 0, 3); - this.tableLayoutPanel9.Controls.Add(this.chkDisableSprites, 0, 4); - this.tableLayoutPanel9.Controls.Add(this.chkForceBackgroundFirstColumn, 0, 5); - this.tableLayoutPanel9.Controls.Add(this.chkForceSpritesFirstColumn, 0, 6); - this.tableLayoutPanel9.Controls.Add(this.lblScreenRotation, 0, 7); - this.tableLayoutPanel9.Controls.Add(this.cboScreenRotation, 1, 7); - this.tableLayoutPanel9.Controls.Add(this.chkRemoveSpriteLimit, 0, 0); - this.tableLayoutPanel9.Controls.Add(this.chkAdaptiveSpriteLimit, 0, 1); - this.tableLayoutPanel9.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel9.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel9.Name = "tableLayoutPanel9"; - this.tableLayoutPanel9.RowCount = 9; - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel9.Size = new System.Drawing.Size(521, 396); - this.tableLayoutPanel9.TabIndex = 0; - // - // chkDisableBackground - // - this.chkDisableBackground.Checked = false; - this.tableLayoutPanel9.SetColumnSpan(this.chkDisableBackground, 2); - this.chkDisableBackground.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkDisableBackground.Location = new System.Drawing.Point(0, 46); - this.chkDisableBackground.MinimumSize = new System.Drawing.Size(0, 21); - this.chkDisableBackground.Name = "chkDisableBackground"; - this.chkDisableBackground.Size = new System.Drawing.Size(521, 23); - this.chkDisableBackground.TabIndex = 0; - this.chkDisableBackground.Text = "Disable background"; - // - // chkDisableSprites - // - this.chkDisableSprites.Checked = false; - this.tableLayoutPanel9.SetColumnSpan(this.chkDisableSprites, 2); - this.chkDisableSprites.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkDisableSprites.Location = new System.Drawing.Point(0, 69); - this.chkDisableSprites.MinimumSize = new System.Drawing.Size(0, 21); - this.chkDisableSprites.Name = "chkDisableSprites"; - this.chkDisableSprites.Size = new System.Drawing.Size(521, 23); - this.chkDisableSprites.TabIndex = 1; - this.chkDisableSprites.Text = "Disable sprites"; - // - // chkForceBackgroundFirstColumn - // - this.chkForceBackgroundFirstColumn.Checked = false; - this.tableLayoutPanel9.SetColumnSpan(this.chkForceBackgroundFirstColumn, 2); - this.chkForceBackgroundFirstColumn.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkForceBackgroundFirstColumn.Location = new System.Drawing.Point(0, 92); - this.chkForceBackgroundFirstColumn.MinimumSize = new System.Drawing.Size(0, 21); - this.chkForceBackgroundFirstColumn.Name = "chkForceBackgroundFirstColumn"; - this.chkForceBackgroundFirstColumn.Size = new System.Drawing.Size(521, 23); - this.chkForceBackgroundFirstColumn.TabIndex = 2; - this.chkForceBackgroundFirstColumn.Text = "Force background display in first column"; - // - // chkForceSpritesFirstColumn - // - this.chkForceSpritesFirstColumn.Checked = false; - this.tableLayoutPanel9.SetColumnSpan(this.chkForceSpritesFirstColumn, 2); - this.chkForceSpritesFirstColumn.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkForceSpritesFirstColumn.Location = new System.Drawing.Point(0, 115); - this.chkForceSpritesFirstColumn.MinimumSize = new System.Drawing.Size(0, 21); - this.chkForceSpritesFirstColumn.Name = "chkForceSpritesFirstColumn"; - this.chkForceSpritesFirstColumn.Size = new System.Drawing.Size(521, 23); - this.chkForceSpritesFirstColumn.TabIndex = 3; - this.chkForceSpritesFirstColumn.Text = "Force sprite display in first column"; - // - // lblScreenRotation - // - this.lblScreenRotation.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblScreenRotation.AutoSize = true; - this.lblScreenRotation.Location = new System.Drawing.Point(3, 145); - this.lblScreenRotation.Name = "lblScreenRotation"; - this.lblScreenRotation.Size = new System.Drawing.Size(87, 13); - this.lblScreenRotation.TabIndex = 4; - this.lblScreenRotation.Text = "Screen Rotation:"; - // - // cboScreenRotation - // - this.cboScreenRotation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboScreenRotation.FormattingEnabled = true; - this.cboScreenRotation.Location = new System.Drawing.Point(96, 141); - this.cboScreenRotation.Name = "cboScreenRotation"; - this.cboScreenRotation.Size = new System.Drawing.Size(77, 21); - this.cboScreenRotation.TabIndex = 5; - // - // chkRemoveSpriteLimit - // - this.chkRemoveSpriteLimit.AutoSize = true; - this.tableLayoutPanel9.SetColumnSpan(this.chkRemoveSpriteLimit, 2); - this.chkRemoveSpriteLimit.Location = new System.Drawing.Point(3, 3); - this.chkRemoveSpriteLimit.Name = "chkRemoveSpriteLimit"; - this.chkRemoveSpriteLimit.Size = new System.Drawing.Size(205, 17); - this.chkRemoveSpriteLimit.TabIndex = 6; - this.chkRemoveSpriteLimit.Text = "Remove sprite limit (Reduces flashing)"; - this.chkRemoveSpriteLimit.UseVisualStyleBackColor = true; - this.chkRemoveSpriteLimit.CheckedChanged += new System.EventHandler(this.chkRemoveSpriteLimit_CheckedChanged); - // - // chkAdaptiveSpriteLimit - // - this.chkAdaptiveSpriteLimit.AutoSize = true; - this.tableLayoutPanel9.SetColumnSpan(this.chkAdaptiveSpriteLimit, 2); - this.chkAdaptiveSpriteLimit.Enabled = false; - this.chkAdaptiveSpriteLimit.Location = new System.Drawing.Point(18, 26); - this.chkAdaptiveSpriteLimit.Margin = new System.Windows.Forms.Padding(18, 3, 3, 3); - this.chkAdaptiveSpriteLimit.Name = "chkAdaptiveSpriteLimit"; - this.chkAdaptiveSpriteLimit.Size = new System.Drawing.Size(442, 17); - this.chkAdaptiveSpriteLimit.TabIndex = 11; - this.chkAdaptiveSpriteLimit.Text = "Automatically re-enable sprite limit as needed to prevent graphical glitches when" + + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.btnExportPalette, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.btnSelectPalette, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.btnLoadPalFile, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.chkShowColorIndexes, 0, 3); + this.tableLayoutPanel2.Location = new System.Drawing.Point(344, 0); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 4; + 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(181, 344); + this.tableLayoutPanel2.TabIndex = 1; + // + // btnExportPalette + // + this.btnExportPalette.AutoSize = true; + this.btnExportPalette.Dock = System.Windows.Forms.DockStyle.Top; + this.btnExportPalette.Location = new System.Drawing.Point(3, 61); + this.btnExportPalette.Name = "btnExportPalette"; + this.btnExportPalette.Size = new System.Drawing.Size(175, 23); + this.btnExportPalette.TabIndex = 3; + this.btnExportPalette.Text = "Export Palette"; + this.btnExportPalette.UseVisualStyleBackColor = true; + this.btnExportPalette.Click += new System.EventHandler(this.btnExportPalette_Click); + // + // btnSelectPalette + // + this.btnSelectPalette.AutoSize = true; + this.btnSelectPalette.Dock = System.Windows.Forms.DockStyle.Top; + this.btnSelectPalette.Image = global::Mesen.GUI.Properties.Resources.DownArrow; + this.btnSelectPalette.Location = new System.Drawing.Point(3, 3); + this.btnSelectPalette.Name = "btnSelectPalette"; + this.btnSelectPalette.Size = new System.Drawing.Size(175, 23); + this.btnSelectPalette.TabIndex = 2; + this.btnSelectPalette.Text = "Load Preset Palette..."; + this.btnSelectPalette.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + this.btnSelectPalette.UseVisualStyleBackColor = true; + this.btnSelectPalette.Click += new System.EventHandler(this.btnSelectPalette_Click); + // + // btnLoadPalFile + // + this.btnLoadPalFile.AutoSize = true; + this.btnLoadPalFile.Dock = System.Windows.Forms.DockStyle.Top; + this.btnLoadPalFile.Location = new System.Drawing.Point(3, 32); + this.btnLoadPalFile.Name = "btnLoadPalFile"; + this.btnLoadPalFile.Size = new System.Drawing.Size(175, 23); + this.btnLoadPalFile.TabIndex = 0; + this.btnLoadPalFile.Text = "Load Palette File"; + this.btnLoadPalFile.UseVisualStyleBackColor = true; + this.btnLoadPalFile.Click += new System.EventHandler(this.btnLoadPalFile_Click); + // + // chkShowColorIndexes + // + this.chkShowColorIndexes.AutoSize = true; + this.chkShowColorIndexes.Location = new System.Drawing.Point(3, 90); + this.chkShowColorIndexes.Name = "chkShowColorIndexes"; + this.chkShowColorIndexes.Size = new System.Drawing.Size(118, 17); + this.chkShowColorIndexes.TabIndex = 4; + this.chkShowColorIndexes.Text = "Show color indexes"; + this.chkShowColorIndexes.UseVisualStyleBackColor = true; + this.chkShowColorIndexes.CheckedChanged += new System.EventHandler(this.chkShowColorIndexes_CheckedChanged); + // + // chkUseCustomVsPalette + // + this.chkUseCustomVsPalette.AutoSize = true; + this.tableLayoutPanel3.SetColumnSpan(this.chkUseCustomVsPalette, 2); + this.chkUseCustomVsPalette.Location = new System.Drawing.Point(3, 347); + this.chkUseCustomVsPalette.Name = "chkUseCustomVsPalette"; + this.chkUseCustomVsPalette.Size = new System.Drawing.Size(202, 17); + this.chkUseCustomVsPalette.TabIndex = 2; + this.chkUseCustomVsPalette.Text = "Use this palette for VS System games"; + this.chkUseCustomVsPalette.UseVisualStyleBackColor = true; + // + // ctrlPaletteDisplay + // + this.ctrlPaletteDisplay.Location = new System.Drawing.Point(3, 3); + this.ctrlPaletteDisplay.Name = "ctrlPaletteDisplay"; + this.ctrlPaletteDisplay.Size = new System.Drawing.Size(338, 338); + this.ctrlPaletteDisplay.TabIndex = 3; + this.ctrlPaletteDisplay.ColorClick += new Mesen.GUI.Debugger.ctrlPaletteDisplay.PaletteClickHandler(this.ctrlPaletteDisplay_ColorClick); + // + // tpgAdvanced + // + this.tpgAdvanced.Controls.Add(this.tableLayoutPanel9); + this.tpgAdvanced.Location = new System.Drawing.Point(4, 22); + this.tpgAdvanced.Name = "tpgAdvanced"; + this.tpgAdvanced.Padding = new System.Windows.Forms.Padding(3); + this.tpgAdvanced.Size = new System.Drawing.Size(527, 402); + this.tpgAdvanced.TabIndex = 4; + this.tpgAdvanced.Text = "Advanced"; + this.tpgAdvanced.UseVisualStyleBackColor = true; + // + // tableLayoutPanel9 + // + this.tableLayoutPanel9.ColumnCount = 2; + this.tableLayoutPanel9.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel9.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel9.Controls.Add(this.chkDisableBackground, 0, 3); + this.tableLayoutPanel9.Controls.Add(this.chkDisableSprites, 0, 4); + this.tableLayoutPanel9.Controls.Add(this.chkForceBackgroundFirstColumn, 0, 5); + this.tableLayoutPanel9.Controls.Add(this.chkForceSpritesFirstColumn, 0, 6); + this.tableLayoutPanel9.Controls.Add(this.lblScreenRotation, 0, 7); + this.tableLayoutPanel9.Controls.Add(this.cboScreenRotation, 1, 7); + this.tableLayoutPanel9.Controls.Add(this.chkRemoveSpriteLimit, 0, 0); + this.tableLayoutPanel9.Controls.Add(this.chkAdaptiveSpriteLimit, 0, 1); + this.tableLayoutPanel9.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel9.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel9.Name = "tableLayoutPanel9"; + this.tableLayoutPanel9.RowCount = 9; + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel9.Size = new System.Drawing.Size(521, 396); + this.tableLayoutPanel9.TabIndex = 0; + // + // chkDisableBackground + // + this.chkDisableBackground.Checked = false; + this.tableLayoutPanel9.SetColumnSpan(this.chkDisableBackground, 2); + this.chkDisableBackground.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkDisableBackground.Location = new System.Drawing.Point(0, 46); + this.chkDisableBackground.MinimumSize = new System.Drawing.Size(0, 21); + this.chkDisableBackground.Name = "chkDisableBackground"; + this.chkDisableBackground.Size = new System.Drawing.Size(521, 23); + this.chkDisableBackground.TabIndex = 0; + this.chkDisableBackground.Text = "Disable background"; + // + // chkDisableSprites + // + this.chkDisableSprites.Checked = false; + this.tableLayoutPanel9.SetColumnSpan(this.chkDisableSprites, 2); + this.chkDisableSprites.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkDisableSprites.Location = new System.Drawing.Point(0, 69); + this.chkDisableSprites.MinimumSize = new System.Drawing.Size(0, 21); + this.chkDisableSprites.Name = "chkDisableSprites"; + this.chkDisableSprites.Size = new System.Drawing.Size(521, 23); + this.chkDisableSprites.TabIndex = 1; + this.chkDisableSprites.Text = "Disable sprites"; + // + // chkForceBackgroundFirstColumn + // + this.chkForceBackgroundFirstColumn.Checked = false; + this.tableLayoutPanel9.SetColumnSpan(this.chkForceBackgroundFirstColumn, 2); + this.chkForceBackgroundFirstColumn.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkForceBackgroundFirstColumn.Location = new System.Drawing.Point(0, 92); + this.chkForceBackgroundFirstColumn.MinimumSize = new System.Drawing.Size(0, 21); + this.chkForceBackgroundFirstColumn.Name = "chkForceBackgroundFirstColumn"; + this.chkForceBackgroundFirstColumn.Size = new System.Drawing.Size(521, 23); + this.chkForceBackgroundFirstColumn.TabIndex = 2; + this.chkForceBackgroundFirstColumn.Text = "Force background display in first column"; + // + // chkForceSpritesFirstColumn + // + this.chkForceSpritesFirstColumn.Checked = false; + this.tableLayoutPanel9.SetColumnSpan(this.chkForceSpritesFirstColumn, 2); + this.chkForceSpritesFirstColumn.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkForceSpritesFirstColumn.Location = new System.Drawing.Point(0, 115); + this.chkForceSpritesFirstColumn.MinimumSize = new System.Drawing.Size(0, 21); + this.chkForceSpritesFirstColumn.Name = "chkForceSpritesFirstColumn"; + this.chkForceSpritesFirstColumn.Size = new System.Drawing.Size(521, 23); + this.chkForceSpritesFirstColumn.TabIndex = 3; + this.chkForceSpritesFirstColumn.Text = "Force sprite display in first column"; + // + // lblScreenRotation + // + this.lblScreenRotation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblScreenRotation.AutoSize = true; + this.lblScreenRotation.Location = new System.Drawing.Point(3, 145); + this.lblScreenRotation.Name = "lblScreenRotation"; + this.lblScreenRotation.Size = new System.Drawing.Size(87, 13); + this.lblScreenRotation.TabIndex = 4; + this.lblScreenRotation.Text = "Screen Rotation:"; + // + // cboScreenRotation + // + this.cboScreenRotation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboScreenRotation.FormattingEnabled = true; + this.cboScreenRotation.Location = new System.Drawing.Point(96, 141); + this.cboScreenRotation.Name = "cboScreenRotation"; + this.cboScreenRotation.Size = new System.Drawing.Size(77, 21); + this.cboScreenRotation.TabIndex = 5; + // + // chkRemoveSpriteLimit + // + this.chkRemoveSpriteLimit.AutoSize = true; + this.tableLayoutPanel9.SetColumnSpan(this.chkRemoveSpriteLimit, 2); + this.chkRemoveSpriteLimit.Location = new System.Drawing.Point(3, 3); + this.chkRemoveSpriteLimit.Name = "chkRemoveSpriteLimit"; + this.chkRemoveSpriteLimit.Size = new System.Drawing.Size(205, 17); + this.chkRemoveSpriteLimit.TabIndex = 6; + this.chkRemoveSpriteLimit.Text = "Remove sprite limit (Reduces flashing)"; + this.chkRemoveSpriteLimit.UseVisualStyleBackColor = true; + this.chkRemoveSpriteLimit.CheckedChanged += new System.EventHandler(this.chkRemoveSpriteLimit_CheckedChanged); + // + // chkAdaptiveSpriteLimit + // + this.chkAdaptiveSpriteLimit.AutoSize = true; + this.tableLayoutPanel9.SetColumnSpan(this.chkAdaptiveSpriteLimit, 2); + this.chkAdaptiveSpriteLimit.Enabled = false; + this.chkAdaptiveSpriteLimit.Location = new System.Drawing.Point(18, 26); + this.chkAdaptiveSpriteLimit.Margin = new System.Windows.Forms.Padding(18, 3, 3, 3); + this.chkAdaptiveSpriteLimit.Name = "chkAdaptiveSpriteLimit"; + this.chkAdaptiveSpriteLimit.Size = new System.Drawing.Size(442, 17); + this.chkAdaptiveSpriteLimit.TabIndex = 11; + this.chkAdaptiveSpriteLimit.Text = "Automatically re-enable sprite limit as needed to prevent graphical glitches when" + " possible"; - this.chkAdaptiveSpriteLimit.UseVisualStyleBackColor = true; - // - // contextPicturePresets - // - this.contextPicturePresets.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.chkAdaptiveSpriteLimit.UseVisualStyleBackColor = true; + // + // contextPicturePresets + // + this.contextPicturePresets.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuPresetComposite, this.mnuPresetSVideo, this.mnuPresetRgb, this.mnuPresetMonochrome}); - this.contextPicturePresets.Name = "contextPicturePresets"; - this.contextPicturePresets.Size = new System.Drawing.Size(148, 92); - // - // mnuPresetComposite - // - this.mnuPresetComposite.Name = "mnuPresetComposite"; - this.mnuPresetComposite.Size = new System.Drawing.Size(147, 22); - this.mnuPresetComposite.Text = "Composite"; - this.mnuPresetComposite.Click += new System.EventHandler(this.mnuPresetComposite_Click); - // - // mnuPresetSVideo - // - this.mnuPresetSVideo.Name = "mnuPresetSVideo"; - this.mnuPresetSVideo.Size = new System.Drawing.Size(147, 22); - this.mnuPresetSVideo.Text = "S-Video"; - this.mnuPresetSVideo.Click += new System.EventHandler(this.mnuPresetSVideo_Click); - // - // mnuPresetRgb - // - this.mnuPresetRgb.Name = "mnuPresetRgb"; - this.mnuPresetRgb.Size = new System.Drawing.Size(147, 22); - this.mnuPresetRgb.Text = "RGB"; - this.mnuPresetRgb.Click += new System.EventHandler(this.mnuPresetRgb_Click); - // - // mnuPresetMonochrome - // - this.mnuPresetMonochrome.Name = "mnuPresetMonochrome"; - this.mnuPresetMonochrome.Size = new System.Drawing.Size(147, 22); - this.mnuPresetMonochrome.Text = "Monochrome"; - this.mnuPresetMonochrome.Click += new System.EventHandler(this.mnuPresetMonochrome_Click); - // - // contextPaletteList - // - this.contextPaletteList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextPicturePresets.Name = "contextPicturePresets"; + this.contextPicturePresets.Size = new System.Drawing.Size(153, 92); + // + // mnuPresetComposite + // + this.mnuPresetComposite.Name = "mnuPresetComposite"; + this.mnuPresetComposite.Size = new System.Drawing.Size(152, 22); + this.mnuPresetComposite.Text = "Composite"; + this.mnuPresetComposite.Click += new System.EventHandler(this.mnuPresetComposite_Click); + // + // mnuPresetSVideo + // + this.mnuPresetSVideo.Name = "mnuPresetSVideo"; + this.mnuPresetSVideo.Size = new System.Drawing.Size(152, 22); + this.mnuPresetSVideo.Text = "S-Video"; + this.mnuPresetSVideo.Click += new System.EventHandler(this.mnuPresetSVideo_Click); + // + // mnuPresetRgb + // + this.mnuPresetRgb.Name = "mnuPresetRgb"; + this.mnuPresetRgb.Size = new System.Drawing.Size(152, 22); + this.mnuPresetRgb.Text = "RGB"; + this.mnuPresetRgb.Click += new System.EventHandler(this.mnuPresetRgb_Click); + // + // mnuPresetMonochrome + // + this.mnuPresetMonochrome.Name = "mnuPresetMonochrome"; + this.mnuPresetMonochrome.Size = new System.Drawing.Size(152, 22); + this.mnuPresetMonochrome.Text = "Monochrome"; + this.mnuPresetMonochrome.Click += new System.EventHandler(this.mnuPresetMonochrome_Click); + // + // contextPaletteList + // + this.contextPaletteList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuDefaultPalette, this.toolStripMenuItem1, this.mnuPaletteCompositeDirect, @@ -1986,157 +2019,158 @@ namespace Mesen.GUI.Forms.Config this.mnuPaletteSonyCxa2025As, this.mnuPaletteUnsaturated, this.mnuPaletteYuv}); - this.contextPaletteList.Name = "contextPicturePresets"; - this.contextPaletteList.Size = new System.Drawing.Size(255, 208); - this.contextPaletteList.Opening += new System.ComponentModel.CancelEventHandler(this.contextPaletteList_Opening); - // - // mnuDefaultPalette - // - this.mnuDefaultPalette.Name = "mnuDefaultPalette"; - this.mnuDefaultPalette.Size = new System.Drawing.Size(254, 22); - this.mnuDefaultPalette.Text = "Default (NTSC)"; - this.mnuDefaultPalette.Click += new System.EventHandler(this.mnuDefaultPalette_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(251, 6); - // - // mnuPaletteCompositeDirect - // - this.mnuPaletteCompositeDirect.Name = "mnuPaletteCompositeDirect"; - this.mnuPaletteCompositeDirect.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteCompositeDirect.Text = "Composite Direct (by FirebrandX)"; - this.mnuPaletteCompositeDirect.Click += new System.EventHandler(this.mnuPaletteCompositeDirect_Click); - // - // mnuPaletteNesClassic - // - this.mnuPaletteNesClassic.Name = "mnuPaletteNesClassic"; - this.mnuPaletteNesClassic.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteNesClassic.Text = "NES Classic (by FirebrandX)"; - this.mnuPaletteNesClassic.Click += new System.EventHandler(this.mnuPaletteNesClassic_Click); - // - // mnuPaletteNestopiaRgb - // - this.mnuPaletteNestopiaRgb.Name = "mnuPaletteNestopiaRgb"; - this.mnuPaletteNestopiaRgb.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteNestopiaRgb.Text = "Nestopia (RGB)"; - this.mnuPaletteNestopiaRgb.Click += new System.EventHandler(this.mnuPaletteNestopiaRgb_Click); - // - // mnuPaletteOriginalHardware - // - this.mnuPaletteOriginalHardware.Name = "mnuPaletteOriginalHardware"; - this.mnuPaletteOriginalHardware.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteOriginalHardware.Text = "Original Hardware (by FirebrandX)"; - this.mnuPaletteOriginalHardware.Click += new System.EventHandler(this.mnuPaletteOriginalHardware_Click); - // - // mnuPalettePvmStyle - // - this.mnuPalettePvmStyle.Name = "mnuPalettePvmStyle"; - this.mnuPalettePvmStyle.Size = new System.Drawing.Size(254, 22); - this.mnuPalettePvmStyle.Text = "PVM Style (by FirebrandX)"; - this.mnuPalettePvmStyle.Click += new System.EventHandler(this.mnuPalettePvmStyle_Click); - // - // mnuPaletteSonyCxa2025As - // - this.mnuPaletteSonyCxa2025As.Name = "mnuPaletteSonyCxa2025As"; - this.mnuPaletteSonyCxa2025As.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteSonyCxa2025As.Text = "Sony CXA2025AS"; - this.mnuPaletteSonyCxa2025As.Click += new System.EventHandler(this.mnuPaletteSonyCxa2025As_Click); - // - // mnuPaletteUnsaturated - // - this.mnuPaletteUnsaturated.Name = "mnuPaletteUnsaturated"; - this.mnuPaletteUnsaturated.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteUnsaturated.Text = "Unsaturated v6 (by FirebrandX)"; - this.mnuPaletteUnsaturated.Click += new System.EventHandler(this.mnuPaletteUnsaturated_Click); - // - // mnuPaletteYuv - // - this.mnuPaletteYuv.Name = "mnuPaletteYuv"; - this.mnuPaletteYuv.Size = new System.Drawing.Size(254, 22); - this.mnuPaletteYuv.Text = "YUV v3 (by FirebrandX)"; - this.mnuPaletteYuv.Click += new System.EventHandler(this.mnuPaletteYuv_Click); - // - // frmVideoConfig - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(535, 457); - this.Controls.Add(this.tabMain); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "frmVideoConfig"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Video Options"; - this.Controls.SetChildIndex(this.baseConfigPanel, 0); - this.Controls.SetChildIndex(this.tabMain, 0); - this.tlpMain.ResumeLayout(false); - this.tlpMain.PerformLayout(); - this.flpResolution.ResumeLayout(false); - this.flpResolution.PerformLayout(); - this.flowLayoutPanel7.ResumeLayout(false); - this.flowLayoutPanel7.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picHdNesTooltip)).EndInit(); - this.flowLayoutPanel6.ResumeLayout(false); - this.flowLayoutPanel6.PerformLayout(); - this.flpRefreshRate.ResumeLayout(false); - this.flpRefreshRate.PerformLayout(); - this.tabMain.ResumeLayout(false); - this.tpgGeneral.ResumeLayout(false); - this.tpgPicture.ResumeLayout(false); - this.tableLayoutPanel5.ResumeLayout(false); - this.tableLayoutPanel7.ResumeLayout(false); - this.tableLayoutPanel7.PerformLayout(); - this.grpNtscFilter.ResumeLayout(false); - this.tlpNtscFilter2.ResumeLayout(false); - this.tlpNtscFilter1.ResumeLayout(false); - this.tableLayoutPanel6.ResumeLayout(false); - this.tableLayoutPanel6.PerformLayout(); - this.grpCommon.ResumeLayout(false); - this.tableLayoutPanel4.ResumeLayout(false); - this.tableLayoutPanel4.PerformLayout(); - this.grpScanlines.ResumeLayout(false); - this.tableLayoutPanel8.ResumeLayout(false); - this.tableLayoutPanel8.PerformLayout(); - this.tpgOverscan.ResumeLayout(false); - this.tabOverscan.ResumeLayout(false); - this.tpgOverscanGlobal.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.picOverscan)).EndInit(); - this.tableLayoutPanel11.ResumeLayout(false); - this.tableLayoutPanel11.PerformLayout(); - this.tableLayoutPanel12.ResumeLayout(false); - this.tableLayoutPanel12.PerformLayout(); - this.tableLayoutPanel13.ResumeLayout(false); - this.tableLayoutPanel13.PerformLayout(); - this.tableLayoutPanel14.ResumeLayout(false); - this.tableLayoutPanel14.PerformLayout(); - this.tpgOverscanGameSpecific.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.tableLayoutPanel10.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.picGameSpecificOverscan)).EndInit(); - this.tableLayoutPanel15.ResumeLayout(false); - this.tableLayoutPanel15.PerformLayout(); - this.tableLayoutPanel16.ResumeLayout(false); - this.tableLayoutPanel16.PerformLayout(); - this.tableLayoutPanel17.ResumeLayout(false); - this.tableLayoutPanel17.PerformLayout(); - this.tableLayoutPanel18.ResumeLayout(false); - this.tableLayoutPanel18.PerformLayout(); - this.tpgPalette.ResumeLayout(false); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tpgAdvanced.ResumeLayout(false); - this.tableLayoutPanel9.ResumeLayout(false); - this.tableLayoutPanel9.PerformLayout(); - this.contextPicturePresets.ResumeLayout(false); - this.contextPaletteList.ResumeLayout(false); - this.ResumeLayout(false); + this.contextPaletteList.Name = "contextPicturePresets"; + this.contextPaletteList.Size = new System.Drawing.Size(268, 208); + this.contextPaletteList.Opening += new System.ComponentModel.CancelEventHandler(this.contextPaletteList_Opening); + // + // mnuDefaultPalette + // + this.mnuDefaultPalette.Name = "mnuDefaultPalette"; + this.mnuDefaultPalette.Size = new System.Drawing.Size(267, 22); + this.mnuDefaultPalette.Text = "Default (NTSC)"; + this.mnuDefaultPalette.Click += new System.EventHandler(this.mnuDefaultPalette_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(264, 6); + // + // mnuPaletteCompositeDirect + // + this.mnuPaletteCompositeDirect.Name = "mnuPaletteCompositeDirect"; + this.mnuPaletteCompositeDirect.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteCompositeDirect.Text = "Composite Direct (by FirebrandX)"; + this.mnuPaletteCompositeDirect.Click += new System.EventHandler(this.mnuPaletteCompositeDirect_Click); + // + // mnuPaletteNesClassic + // + this.mnuPaletteNesClassic.Name = "mnuPaletteNesClassic"; + this.mnuPaletteNesClassic.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteNesClassic.Text = "NES Classic (by FirebrandX)"; + this.mnuPaletteNesClassic.Click += new System.EventHandler(this.mnuPaletteNesClassic_Click); + // + // mnuPaletteNestopiaRgb + // + this.mnuPaletteNestopiaRgb.Name = "mnuPaletteNestopiaRgb"; + this.mnuPaletteNestopiaRgb.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteNestopiaRgb.Text = "Nestopia (RGB)"; + this.mnuPaletteNestopiaRgb.Click += new System.EventHandler(this.mnuPaletteNestopiaRgb_Click); + // + // mnuPaletteOriginalHardware + // + this.mnuPaletteOriginalHardware.Name = "mnuPaletteOriginalHardware"; + this.mnuPaletteOriginalHardware.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteOriginalHardware.Text = "Original Hardware (by FirebrandX)"; + this.mnuPaletteOriginalHardware.Click += new System.EventHandler(this.mnuPaletteOriginalHardware_Click); + // + // mnuPalettePvmStyle + // + this.mnuPalettePvmStyle.Name = "mnuPalettePvmStyle"; + this.mnuPalettePvmStyle.Size = new System.Drawing.Size(267, 22); + this.mnuPalettePvmStyle.Text = "PVM Style (by FirebrandX)"; + this.mnuPalettePvmStyle.Click += new System.EventHandler(this.mnuPalettePvmStyle_Click); + // + // mnuPaletteSonyCxa2025As + // + this.mnuPaletteSonyCxa2025As.Name = "mnuPaletteSonyCxa2025As"; + this.mnuPaletteSonyCxa2025As.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteSonyCxa2025As.Text = "Sony CXA2025AS"; + this.mnuPaletteSonyCxa2025As.Click += new System.EventHandler(this.mnuPaletteSonyCxa2025As_Click); + // + // mnuPaletteUnsaturated + // + this.mnuPaletteUnsaturated.Name = "mnuPaletteUnsaturated"; + this.mnuPaletteUnsaturated.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteUnsaturated.Text = "Unsaturated v6 (by FirebrandX)"; + this.mnuPaletteUnsaturated.Click += new System.EventHandler(this.mnuPaletteUnsaturated_Click); + // + // mnuPaletteYuv + // + this.mnuPaletteYuv.Name = "mnuPaletteYuv"; + this.mnuPaletteYuv.Size = new System.Drawing.Size(267, 22); + this.mnuPaletteYuv.Text = "YUV v3 (by FirebrandX)"; + this.mnuPaletteYuv.Click += new System.EventHandler(this.mnuPaletteYuv_Click); + // + // frmVideoConfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(535, 457); + this.Controls.Add(this.tabMain); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "frmVideoConfig"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Video Options"; + this.Controls.SetChildIndex(this.baseConfigPanel, 0); + this.Controls.SetChildIndex(this.tabMain, 0); + this.tlpMain.ResumeLayout(false); + this.tlpMain.PerformLayout(); + this.flpResolution.ResumeLayout(false); + this.flpResolution.PerformLayout(); + this.flowLayoutPanel7.ResumeLayout(false); + this.flowLayoutPanel7.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picHdNesTooltip)).EndInit(); + this.flowLayoutPanel6.ResumeLayout(false); + this.flowLayoutPanel6.PerformLayout(); + this.flpRefreshRate.ResumeLayout(false); + this.flpRefreshRate.PerformLayout(); + this.tabMain.ResumeLayout(false); + this.tpgGeneral.ResumeLayout(false); + this.tpgPicture.ResumeLayout(false); + this.tableLayoutPanel5.ResumeLayout(false); + this.tableLayoutPanel7.ResumeLayout(false); + this.tableLayoutPanel7.PerformLayout(); + this.grpNtscFilter.ResumeLayout(false); + this.tlpNtscFilter2.ResumeLayout(false); + this.tlpNtscFilter1.ResumeLayout(false); + this.tableLayoutPanel6.ResumeLayout(false); + this.tableLayoutPanel6.PerformLayout(); + this.grpCommon.ResumeLayout(false); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.grpScanlines.ResumeLayout(false); + this.tableLayoutPanel8.ResumeLayout(false); + this.tableLayoutPanel8.PerformLayout(); + this.tpgOverscan.ResumeLayout(false); + this.tabOverscan.ResumeLayout(false); + this.tpgOverscanGlobal.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picOverscan)).EndInit(); + this.tableLayoutPanel11.ResumeLayout(false); + this.tableLayoutPanel11.PerformLayout(); + this.tableLayoutPanel12.ResumeLayout(false); + this.tableLayoutPanel12.PerformLayout(); + this.tableLayoutPanel13.ResumeLayout(false); + this.tableLayoutPanel13.PerformLayout(); + this.tableLayoutPanel14.ResumeLayout(false); + this.tableLayoutPanel14.PerformLayout(); + this.tpgOverscanGameSpecific.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.tableLayoutPanel10.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picGameSpecificOverscan)).EndInit(); + this.tableLayoutPanel15.ResumeLayout(false); + this.tableLayoutPanel15.PerformLayout(); + this.tableLayoutPanel16.ResumeLayout(false); + this.tableLayoutPanel16.PerformLayout(); + this.tableLayoutPanel17.ResumeLayout(false); + this.tableLayoutPanel17.PerformLayout(); + this.tableLayoutPanel18.ResumeLayout(false); + this.tableLayoutPanel18.PerformLayout(); + this.tpgPalette.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tpgAdvanced.ResumeLayout(false); + this.tableLayoutPanel9.ResumeLayout(false); + this.tableLayoutPanel9.PerformLayout(); + this.contextPicturePresets.ResumeLayout(false); + this.contextPaletteList.ResumeLayout(false); + this.ResumeLayout(false); } @@ -2269,5 +2303,7 @@ namespace Mesen.GUI.Forms.Config private System.Windows.Forms.FlowLayoutPanel flpResolution; private System.Windows.Forms.Label lblFullscreenResolution; private System.Windows.Forms.ComboBox cboFullscreenResolution; + private System.Windows.Forms.Label lblRequestedRefreshRate2; + private System.Windows.Forms.ComboBox cboRefreshRate2; } } \ No newline at end of file diff --git a/GUI.NET/Forms/Config/frmVideoConfig.cs b/GUI.NET/Forms/Config/frmVideoConfig.cs index 1947916a..f893e3b2 100644 --- a/GUI.NET/Forms/Config/frmVideoConfig.cs +++ b/GUI.NET/Forms/Config/frmVideoConfig.cs @@ -36,6 +36,7 @@ namespace Mesen.GUI.Forms.Config AddBinding("FullscreenForceIntegerScale", chkFullscreenForceIntegerScale); AddBinding("UseExclusiveFullscreen", chkUseExclusiveFullscreen); AddBinding("ExclusiveFullscreenRefreshRate", cboRefreshRate); + AddBinding("ExclusiveFullscreenRefreshRate2", cboRefreshRate2); AddBinding("VideoScale", nudScale); AddBinding("AspectRatio", cboAspectRatio); diff --git a/GUI.NET/Forms/Config/frmVideoConfig.resx b/GUI.NET/Forms/Config/frmVideoConfig.resx index 8a01bf0f..015d70f0 100644 --- a/GUI.NET/Forms/Config/frmVideoConfig.resx +++ b/GUI.NET/Forms/Config/frmVideoConfig.resx @@ -121,14 +121,14 @@ 17, 17 - 537, 17 + 561, 17 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACs - BQAAAk1TRnQBSQFMAwEBAAFIAQABSAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA + BQAAAk1TRnQBSQFMAwEBAAFYAQABWAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA ARADAAEBAQABGAYAAQweAAH5AvgB1QHBAbsBqAFyAWEBkAFHATABkAFHATABpgFuAVwB0gG8AbUB+AL2 pQAB1QHAAbkBlgFNATIBqgFaASwBuwFkASsBwAFpASkBwAFpASkBuwFlASwBqwFbAS0BmAFMATAB0wG9 AbWfAAHRAbgBrwGlAVgBMgHAAW0BLgHCAW0BLQHCAW0BLQHCAW0BLQHCAW0BLQHCAW0BLQHCAW0BLQHA @@ -156,12 +156,12 @@ - 221, 17 + 229, 17 - 107, 17 + 110, 17 - 389, 17 + 406, 17 \ No newline at end of file diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index d5492cc4..0e5f8184 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -226,6 +226,7 @@ namespace Mesen.GUI [DllImport(DLLPath)] public static extern void SetVideoScale(double scale, ConsoleId consoleId = ConsoleId.Master); [DllImport(DLLPath)] public static extern void SetScreenRotation(UInt32 angle); [DllImport(DLLPath)] public static extern void SetExclusiveRefreshRate(UInt32 refreshRate); + [DllImport(DLLPath)] public static extern void SetExclusiveRefreshRate2(UInt32 refreshRate); [DllImport(DLLPath)] public static extern void SetVideoAspectRatio(VideoAspectRatio aspectRatio, double customRatio); [DllImport(DLLPath)] public static extern void SetVideoFilter(VideoFilterType filter); [DllImport(DLLPath)] public static extern void SetVideoResizeFilter(VideoResizeFilter filter); diff --git a/InteropDLL/ConsoleWrapper.cpp b/InteropDLL/ConsoleWrapper.cpp index f1bc536c..7d3e8ab1 100644 --- a/InteropDLL/ConsoleWrapper.cpp +++ b/InteropDLL/ConsoleWrapper.cpp @@ -654,6 +654,7 @@ namespace InteropEmu { DllExport void __stdcall SetVideoScale(double scale, ConsoleId consoleId) { GetConsoleById(consoleId)->GetSettings()->SetVideoScale(scale); } DllExport void __stdcall SetScreenRotation(uint32_t angle) { _settings->SetScreenRotation(angle); } DllExport void __stdcall SetExclusiveRefreshRate(uint32_t angle) { _settings->SetExclusiveRefreshRate(angle); } + DllExport void __stdcall SetExclusiveRefreshRate2(uint32_t angle) { _settings->SetExclusiveRefreshRate2(angle); } DllExport void __stdcall SetVideoAspectRatio(VideoAspectRatio aspectRatio, double customRatio) { _settings->SetVideoAspectRatio(aspectRatio, customRatio); } DllExport void __stdcall SetVideoFilter(VideoFilterType filter) { _settings->SetVideoFilterType(filter); } DllExport void __stdcall SetVideoResizeFilter(VideoResizeFilter filter) { _settings->SetVideoResizeFilter(filter); } diff --git a/Windows/Renderer.cpp b/Windows/Renderer.cpp index 0cf7a85b..b0a2f988 100644 --- a/Windows/Renderer.cpp +++ b/Windows/Renderer.cpp @@ -288,7 +288,7 @@ HRESULT Renderer::InitDevice() sd.BufferDesc.Width = _realScreenWidth; sd.BufferDesc.Height = _realScreenHeight; sd.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; - sd.BufferDesc.RefreshRate.Numerator = _console->GetSettings()->GetExclusiveRefreshRate(); + sd.BufferDesc.RefreshRate.Numerator = _console->GetSettings()->GetExclusiveRefreshRateByModel(_console->GetModel()); sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.Flags = _fullscreen ? DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH : 0; From 739d1ba04187d814a0c9ded556b5c88d9a176d18 Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Wed, 14 Jul 2021 23:04:42 +0800 Subject: [PATCH 4/8] Add debugger option to break on unlogged code --- Core/CodeDataLogger.cpp | 6 + Core/CodeDataLogger.h | 1 + Core/Debugger.cpp | 4 + Core/DebuggerTypes.h | 4 +- GUI.NET/Config/DebugInfo.cs | 1 + GUI.NET/Debugger/frmDebugger.Designer.cs | 3727 +++++++++++----------- GUI.NET/Debugger/frmDebugger.cs | 9 + GUI.NET/Debugger/frmDebugger.resx | 6 +- GUI.NET/Dependencies/resources.en.xml | 1 + GUI.NET/InteropEmu.cs | 1 + 10 files changed, 1899 insertions(+), 1861 deletions(-) diff --git a/Core/CodeDataLogger.cpp b/Core/CodeDataLogger.cpp index bc979b3d..6c3aa0f1 100644 --- a/Core/CodeDataLogger.cpp +++ b/Core/CodeDataLogger.cpp @@ -146,6 +146,12 @@ CdlRatios CodeDataLogger::GetRatios() return ratios; } +bool CodeDataLogger::IsNone(uint32_t absoluteAddr) +{ + return _cdlData[absoluteAddr] == (uint8_t)CdlPrgFlags::None; +} + + bool CodeDataLogger::IsCode(uint32_t absoluteAddr) { return (_cdlData[absoluteAddr] & (uint8_t)CdlPrgFlags::Code) == (uint8_t)CdlPrgFlags::Code; diff --git a/Core/CodeDataLogger.h b/Core/CodeDataLogger.h index 3a317951..0d7e69da 100644 --- a/Core/CodeDataLogger.h +++ b/Core/CodeDataLogger.h @@ -80,6 +80,7 @@ public: CdlRatios GetRatios(); + bool IsNone(uint32_t absoluteAddr); bool IsCode(uint32_t absoluteAddr); bool IsJumpTarget(uint32_t absoluteAddr); bool IsSubEntryPoint(uint32_t absoluteAddr); diff --git a/Core/Debugger.cpp b/Core/Debugger.cpp index dc733b52..d1f95942 100644 --- a/Core/Debugger.cpp +++ b/Core/Debugger.cpp @@ -767,6 +767,7 @@ bool Debugger::ProcessRamOperation(MemoryOperationType type, uint16_t &addr, uin AddressTypeInfo addressInfo; GetAbsoluteAddressAndType(addr, &addressInfo); int32_t absoluteAddr = addressInfo.Type == AddressType::PrgRom ? addressInfo.Address : -1; + bool isUnlogged = absoluteAddr >= 0 ? _codeDataLogger->IsNone(absoluteAddr) : false; if(addressInfo.Type == AddressType::PrgRom && addressInfo.Address >= 0 && type != MemoryOperationType::DummyRead && type != MemoryOperationType::DummyWrite && _runToCycle == -1) { if(type == MemoryOperationType::ExecOperand) { _codeDataLogger->SetFlag(absoluteAddr, CdlPrgFlags::Code); @@ -820,6 +821,9 @@ bool Debugger::ProcessRamOperation(MemoryOperationType type, uint16_t &addr, uin } else if(CheckFlag(DebuggerFlags::BreakOnUnofficialOpCode) && _disassembler->IsUnofficialOpCode(value)) { Step(1); breakSource = BreakSource::BreakOnUnofficialOpCode; + } else if(CheckFlag(DebuggerFlags::BreakOnUnlogged) && isUnlogged && type == MemoryOperationType::ExecOpCode && absoluteAddr >= 0) { + Step(1); + breakSource = BreakSource::BreakOnUnlogged; } if(_runToCycle != -1) { diff --git a/Core/DebuggerTypes.h b/Core/DebuggerTypes.h index 5f5e7a17..0669785b 100644 --- a/Core/DebuggerTypes.h +++ b/Core/DebuggerTypes.h @@ -43,6 +43,7 @@ enum class DebuggerFlags BreakOnPpu2006ScrollGlitch = 0x20000, BreakOnBusConflict = 0x40000, + BreakOnUnlogged = 0x80000, }; enum class BreakSource @@ -61,7 +62,8 @@ enum class BreakSource Pause = 10, BreakAfterSuspend = 11, BreakOnPpu2006ScrollGlitch = 12, - BreakOnBusConflict = 13 + BreakOnBusConflict = 13, + BreakOnUnlogged = 14 }; enum class AddressType diff --git a/GUI.NET/Config/DebugInfo.cs b/GUI.NET/Config/DebugInfo.cs index 3f814600..dbbfa27f 100644 --- a/GUI.NET/Config/DebugInfo.cs +++ b/GUI.NET/Config/DebugInfo.cs @@ -354,6 +354,7 @@ namespace Mesen.GUI.Config public bool BreakOnInit = true; public bool BreakOnPlay = false; public bool BreakOnFirstCycle = true; + public bool BreakOnUnlogged = false; public bool BringToFrontOnPause = false; public bool BringToFrontOnBreak = true; diff --git a/GUI.NET/Debugger/frmDebugger.Designer.cs b/GUI.NET/Debugger/frmDebugger.Designer.cs index bc27f7af..fb3985b9 100644 --- a/GUI.NET/Debugger/frmDebugger.Designer.cs +++ b/GUI.NET/Debugger/frmDebugger.Designer.cs @@ -29,573 +29,574 @@ namespace Mesen.GUI.Debugger /// private void InitializeComponent() { - this.splitContainer = new Mesen.GUI.Controls.ctrlSplitContainer(); - this.ctrlSplitContainerTop = new Mesen.GUI.Controls.ctrlSplitContainer(); - this.tlpTop = new System.Windows.Forms.TableLayoutPanel(); - this.panel1 = new System.Windows.Forms.Panel(); - this.ctrlSourceViewer = new Mesen.GUI.Debugger.Controls.ctrlSourceViewer(); - this.ctrlDebuggerCode = new Mesen.GUI.Debugger.ctrlDebuggerCode(); - this.panel2 = new System.Windows.Forms.Panel(); - this.ctrlSourceViewerSplit = new Mesen.GUI.Debugger.Controls.ctrlSourceViewer(); - this.ctrlDebuggerCodeSplit = new Mesen.GUI.Debugger.ctrlDebuggerCode(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.ctrlConsoleStatus = new Mesen.GUI.Debugger.ctrlConsoleStatus(); - this.tlpVerticalLayout = new System.Windows.Forms.TableLayoutPanel(); - this.tlpFunctionLabelLists = new System.Windows.Forms.TableLayoutPanel(); - this.grpLabels = new System.Windows.Forms.GroupBox(); - this.ctrlLabelList = new Mesen.GUI.Debugger.Controls.ctrlLabelList(); - this.grpFunctions = new System.Windows.Forms.GroupBox(); - this.ctrlFunctionList = new Mesen.GUI.Debugger.Controls.ctrlFunctionList(); - this.picWatchHelp = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); - this.grpWatch = new System.Windows.Forms.GroupBox(); - this.ctrlWatch = new Mesen.GUI.Debugger.ctrlWatch(); - this.grpBreakpoints = new System.Windows.Forms.GroupBox(); - this.ctrlBreakpoints = new Mesen.GUI.Debugger.Controls.ctrlBreakpoints(); - this.grpCallstack = new System.Windows.Forms.GroupBox(); - this.ctrlCallstack = new Mesen.GUI.Debugger.Controls.ctrlCallstack(); - this.menuStrip = new Mesen.GUI.Controls.ctrlMesenMenuStrip(); - this.mnuFile = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuSaveRom = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuSaveRomAs = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuSaveAsIps = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuRevertChanges = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuWorkspace = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuImportLabels = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuExportLabels = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuImportSettings = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuResetWorkspace = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuResetLabels = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuAutoLoadDbgFiles = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuAutoLoadCdlFiles = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisableDefaultLabels = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuClose = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCode = new System.Windows.Forms.ToolStripMenuItem(); - this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuContinue = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreak = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuStepInto = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuStepOver = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuStepOut = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuStepBack = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuReset = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPowerCycle = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem24 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuToggleBreakpoint = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisableEnableBreakpoint = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuRunCpuCycle = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuRunPpuCycle = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuRunScanline = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuRunOneFrame = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuBreakIn = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOn = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuSearch = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuGoToAll = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuGoToAddress = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuGoTo = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem29 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuFind = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuFindNext = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuFindPrev = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuFindAllOccurrences = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuOptions = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisassemblyOptions = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisassemble = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisassembleVerifiedCode = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisassembleVerifiedData = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDisassembleUnidentifiedData = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShow = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowVerifiedCode = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowVerifiedData = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowUnidentifiedData = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuDisplayOpCodesInLowerCase = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowEffectiveAddresses = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowMemoryValues = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOptions = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnReset = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnUnofficialOpcodes = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnBrk = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnCrash = new System.Windows.Forms.ToolStripMenuItem(); - this.sepBreakNsfOptions = new System.Windows.Forms.ToolStripSeparator(); - this.mnuBreakOnInit = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnPlay = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem26 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuBreakOnBusConflict = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnDecayedOamRead = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnPpu2006ScrollGlitch = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnUninitMemoryRead = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuBreakOnOpen = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBreakOnDebuggerFocus = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem20 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuBringToFrontOnBreak = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuBringToFrontOnPause = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem28 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuEnableSubInstructionBreakpoints = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuShowOptions = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowToolbar = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowCpuMemoryMapping = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowPpuMemoryMapping = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowFunctionLabelLists = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowBottomPanel = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuTooltipOptions = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowCodePreview = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowOpCodeTooltips = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem18 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuOnlyShowTooltipOnShift = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCopyOptions = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCopyAddresses = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCopyByteCode = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCopyComments = new System.Windows.Forms.ToolStripMenuItem(); - this.fontSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuIncreaseFontSize = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDecreaseFontSize = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuResetFontSize = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem21 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuSelectFont = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuConfigureColors = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuSplitView = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuUseVerticalLayout = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuAutoCreateJumpLabels = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem25 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuHidePauseIcon = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPpuPartialDraw = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPpuShowPreviousFrame = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem19 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuShowBreakNotifications = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowInstructionProgression = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuShowSelectionLength = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem27 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuAlwaysScrollToCenter = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuRefreshWhileRunning = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuReloadRomOnPowerCycle = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuConfigureExternalEditor = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPreferences = new System.Windows.Forms.ToolStripMenuItem(); - this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuApuViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuAssembler = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuEventViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuProfiler = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuPpuViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuScriptWindow = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuTextHooker = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuTraceLogger = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuWatchWindow = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator(); - this.pPUViewerCompactToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuOpenNametableViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuOpenChrViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuOpenSpriteViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuOpenPaletteViewer = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem17 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuEditHeader = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem30 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuCodeDataLogger = new System.Windows.Forms.ToolStripMenuItem(); - this.autoLoadsaveCDLFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuLoadCdlFile = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuSaveAsCdlFile = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuResetCdlLog = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuCdlGenerateRom = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCdlStripUnusedData = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuCdlStripUsedData = new System.Windows.Forms.ToolStripMenuItem(); - this.statusStrip = new System.Windows.Forms.StatusStrip(); - this.lblPrgAnalysis = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblPrgAnalysisResult = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblChrAnalysis = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblChrAnalysisResult = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblCyclesElapsedCount = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblCyclesElapsed = new System.Windows.Forms.ToolStripStatusLabel(); - this.ctrlPpuMemoryMapping = new Mesen.GUI.Debugger.Controls.ctrlMemoryMapping(); - this.ctrlCpuMemoryMapping = new Mesen.GUI.Debugger.Controls.ctrlMemoryMapping(); - this.tsToolbar = new Mesen.GUI.Controls.ctrlMesenToolStrip(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); - this.splitContainer.Panel1.SuspendLayout(); - this.splitContainer.Panel2.SuspendLayout(); - this.splitContainer.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainerTop)).BeginInit(); - this.ctrlSplitContainerTop.Panel1.SuspendLayout(); - this.ctrlSplitContainerTop.Panel2.SuspendLayout(); - this.ctrlSplitContainerTop.SuspendLayout(); - this.tlpTop.SuspendLayout(); - this.panel1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.tlpFunctionLabelLists.SuspendLayout(); - this.grpLabels.SuspendLayout(); - this.grpFunctions.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picWatchHelp)).BeginInit(); - this.tableLayoutPanel10.SuspendLayout(); - this.grpWatch.SuspendLayout(); - this.grpBreakpoints.SuspendLayout(); - this.grpCallstack.SuspendLayout(); - this.menuStrip.SuspendLayout(); - this.statusStrip.SuspendLayout(); - this.SuspendLayout(); - // - // splitContainer - // - this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer.HidePanel2 = false; - this.splitContainer.Location = new System.Drawing.Point(0, 24); - this.splitContainer.Name = "splitContainer"; - this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer.Panel1 - // - this.splitContainer.Panel1.Controls.Add(this.ctrlSplitContainerTop); - this.splitContainer.Panel1MinSize = 400; - // - // splitContainer.Panel2 - // - this.splitContainer.Panel2.Controls.Add(this.picWatchHelp); - this.splitContainer.Panel2.Controls.Add(this.tableLayoutPanel10); - this.splitContainer.Panel2MinSize = 100; - this.splitContainer.Size = new System.Drawing.Size(1075, 570); - this.splitContainer.SplitterDistance = 407; - this.splitContainer.SplitterWidth = 7; - this.splitContainer.TabIndex = 1; - this.splitContainer.TabStop = false; - this.splitContainer.PanelCollapsed += new System.EventHandler(this.splitContainer_PanelCollapsed); - this.splitContainer.PanelExpanded += new System.EventHandler(this.splitContainer_PanelExpanded); - // - // ctrlSplitContainerTop - // - this.ctrlSplitContainerTop.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlSplitContainerTop.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.ctrlSplitContainerTop.HidePanel2 = false; - this.ctrlSplitContainerTop.Location = new System.Drawing.Point(0, 0); - this.ctrlSplitContainerTop.Name = "ctrlSplitContainerTop"; - // - // ctrlSplitContainerTop.Panel1 - // - this.ctrlSplitContainerTop.Panel1.Controls.Add(this.tlpTop); - this.ctrlSplitContainerTop.Panel1MinSize = 750; - // - // ctrlSplitContainerTop.Panel2 - // - this.ctrlSplitContainerTop.Panel2.Controls.Add(this.tlpFunctionLabelLists); - this.ctrlSplitContainerTop.Panel2MinSize = 150; - this.ctrlSplitContainerTop.Size = new System.Drawing.Size(1075, 407); - this.ctrlSplitContainerTop.SplitterDistance = 821; - this.ctrlSplitContainerTop.SplitterWidth = 7; - this.ctrlSplitContainerTop.TabIndex = 3; - this.ctrlSplitContainerTop.PanelCollapsed += new System.EventHandler(this.ctrlSplitContainerTop_PanelCollapsed); - this.ctrlSplitContainerTop.PanelExpanded += new System.EventHandler(this.ctrlSplitContainerTop_PanelExpanded); - // - // tlpTop - // - this.tlpTop.ColumnCount = 3; - this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 0F)); - this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tlpTop.Controls.Add(this.panel1, 0, 0); - this.tlpTop.Controls.Add(this.panel2, 1, 0); - this.tlpTop.Controls.Add(this.tableLayoutPanel1, 2, 0); - this.tlpTop.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpTop.Location = new System.Drawing.Point(0, 0); - this.tlpTop.Name = "tlpTop"; - this.tlpTop.RowCount = 1; - this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 407F)); - this.tlpTop.Size = new System.Drawing.Size(821, 407); - this.tlpTop.TabIndex = 2; - // - // panel1 - // - this.panel1.Controls.Add(this.ctrlSourceViewer); - this.panel1.Controls.Add(this.ctrlDebuggerCode); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(3, 0); - this.panel1.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(357, 407); - this.panel1.TabIndex = 5; - // - // ctrlSourceViewer - // - this.ctrlSourceViewer.CurrentFile = null; - this.ctrlSourceViewer.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlSourceViewer.Location = new System.Drawing.Point(0, 0); - this.ctrlSourceViewer.Name = "ctrlSourceViewer"; - this.ctrlSourceViewer.Size = new System.Drawing.Size(357, 407); - this.ctrlSourceViewer.SymbolProvider = null; - this.ctrlSourceViewer.TabIndex = 7; - this.ctrlSourceViewer.Visible = false; - this.ctrlSourceViewer.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); - // - // ctrlDebuggerCode - // - this.ctrlDebuggerCode.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlDebuggerCode.HideSelection = false; - this.ctrlDebuggerCode.Location = new System.Drawing.Point(0, 0); - this.ctrlDebuggerCode.Name = "ctrlDebuggerCode"; - this.ctrlDebuggerCode.ShowMemoryValues = false; - this.ctrlDebuggerCode.Size = new System.Drawing.Size(357, 407); - this.ctrlDebuggerCode.SymbolProvider = null; - this.ctrlDebuggerCode.TabIndex = 2; - this.ctrlDebuggerCode.OnEditCode += new Mesen.GUI.Debugger.ctrlDebuggerCode.AssemblerEventHandler(this.ctrlDebuggerCode_OnEditCode); - this.ctrlDebuggerCode.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); - // - // panel2 - // - this.panel2.Controls.Add(this.ctrlSourceViewerSplit); - this.panel2.Controls.Add(this.ctrlDebuggerCodeSplit); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(363, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(1, 407); - this.panel2.TabIndex = 6; - // - // ctrlSourceViewerSplit - // - this.ctrlSourceViewerSplit.CurrentFile = null; - this.ctrlSourceViewerSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlSourceViewerSplit.Location = new System.Drawing.Point(0, 0); - this.ctrlSourceViewerSplit.Name = "ctrlSourceViewerSplit"; - this.ctrlSourceViewerSplit.Size = new System.Drawing.Size(1, 407); - this.ctrlSourceViewerSplit.SymbolProvider = null; - this.ctrlSourceViewerSplit.TabIndex = 8; - this.ctrlSourceViewerSplit.Visible = false; - this.ctrlSourceViewerSplit.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); - // - // ctrlDebuggerCodeSplit - // - this.ctrlDebuggerCodeSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlDebuggerCodeSplit.HideSelection = false; - this.ctrlDebuggerCodeSplit.Location = new System.Drawing.Point(0, 0); - this.ctrlDebuggerCodeSplit.Name = "ctrlDebuggerCodeSplit"; - this.ctrlDebuggerCodeSplit.ShowMemoryValues = false; - this.ctrlDebuggerCodeSplit.Size = new System.Drawing.Size(1, 407); - this.ctrlDebuggerCodeSplit.SymbolProvider = null; - this.ctrlDebuggerCodeSplit.TabIndex = 4; - this.ctrlDebuggerCodeSplit.Visible = false; - this.ctrlDebuggerCodeSplit.OnEditCode += new Mesen.GUI.Debugger.ctrlDebuggerCode.AssemblerEventHandler(this.ctrlDebuggerCode_OnEditCode); - this.ctrlDebuggerCodeSplit.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 1; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.ctrlConsoleStatus, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.tlpVerticalLayout, 0, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(363, 0); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 2; - 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(458, 407); - this.tableLayoutPanel1.TabIndex = 7; - // - // ctrlConsoleStatus - // - this.ctrlConsoleStatus.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlConsoleStatus.Location = new System.Drawing.Point(0, 0); - this.ctrlConsoleStatus.Margin = new System.Windows.Forms.Padding(0); - this.ctrlConsoleStatus.Name = "ctrlConsoleStatus"; - this.ctrlConsoleStatus.Size = new System.Drawing.Size(458, 400); - this.ctrlConsoleStatus.TabIndex = 3; - this.ctrlConsoleStatus.OnGotoLocation += new System.EventHandler(this.ctrlConsoleStatus_OnGotoLocation); - // - // tlpVerticalLayout - // - this.tlpVerticalLayout.ColumnCount = 2; - this.tlpVerticalLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tlpVerticalLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tlpVerticalLayout.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpVerticalLayout.Location = new System.Drawing.Point(0, 400); - this.tlpVerticalLayout.Margin = new System.Windows.Forms.Padding(0); - this.tlpVerticalLayout.Name = "tlpVerticalLayout"; - this.tlpVerticalLayout.RowCount = 1; - this.tlpVerticalLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tlpVerticalLayout.Size = new System.Drawing.Size(458, 7); - this.tlpVerticalLayout.TabIndex = 4; - // - // tlpFunctionLabelLists - // - this.tlpFunctionLabelLists.ColumnCount = 1; - this.tlpFunctionLabelLists.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tlpFunctionLabelLists.Controls.Add(this.grpLabels, 0, 1); - this.tlpFunctionLabelLists.Controls.Add(this.grpFunctions, 0, 0); - this.tlpFunctionLabelLists.Dock = System.Windows.Forms.DockStyle.Fill; - this.tlpFunctionLabelLists.Location = new System.Drawing.Point(0, 0); - this.tlpFunctionLabelLists.Margin = new System.Windows.Forms.Padding(0); - this.tlpFunctionLabelLists.Name = "tlpFunctionLabelLists"; - this.tlpFunctionLabelLists.RowCount = 2; - this.tlpFunctionLabelLists.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tlpFunctionLabelLists.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tlpFunctionLabelLists.Size = new System.Drawing.Size(247, 407); - this.tlpFunctionLabelLists.TabIndex = 5; - // - // grpLabels - // - this.grpLabels.Controls.Add(this.ctrlLabelList); - this.grpLabels.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpLabels.Location = new System.Drawing.Point(3, 206); - this.grpLabels.Name = "grpLabels"; - this.grpLabels.Size = new System.Drawing.Size(241, 198); - this.grpLabels.TabIndex = 6; - this.grpLabels.TabStop = false; - this.grpLabels.Text = "Labels"; - // - // ctrlLabelList - // - this.ctrlLabelList.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlLabelList.Location = new System.Drawing.Point(3, 16); - this.ctrlLabelList.Name = "ctrlLabelList"; - this.ctrlLabelList.Size = new System.Drawing.Size(235, 179); - this.ctrlLabelList.TabIndex = 0; - this.ctrlLabelList.OnFindOccurrence += new System.EventHandler(this.ctrlLabelList_OnFindOccurrence); - this.ctrlLabelList.OnLabelSelected += new Mesen.GUI.Debugger.GoToDestinationEventHandler(this.ctrlLabelList_OnLabelSelected); - // - // grpFunctions - // - this.grpFunctions.Controls.Add(this.ctrlFunctionList); - this.grpFunctions.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpFunctions.Location = new System.Drawing.Point(3, 3); - this.grpFunctions.Name = "grpFunctions"; - this.grpFunctions.Size = new System.Drawing.Size(241, 197); - this.grpFunctions.TabIndex = 5; - this.grpFunctions.TabStop = false; - this.grpFunctions.Text = "Functions"; - // - // ctrlFunctionList - // - this.ctrlFunctionList.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlFunctionList.Location = new System.Drawing.Point(3, 16); - this.ctrlFunctionList.Name = "ctrlFunctionList"; - this.ctrlFunctionList.Size = new System.Drawing.Size(235, 178); - this.ctrlFunctionList.TabIndex = 0; - this.ctrlFunctionList.OnFindOccurrence += new System.EventHandler(this.ctrlFunctionList_OnFindOccurrence); - this.ctrlFunctionList.OnFunctionSelected += new Mesen.GUI.Debugger.GoToDestinationEventHandler(this.ctrlFunctionList_OnFunctionSelected); - // - // picWatchHelp - // - this.picWatchHelp.Image = global::Mesen.GUI.Properties.Resources.Help; - this.picWatchHelp.Location = new System.Drawing.Point(50, 2); - this.picWatchHelp.Name = "picWatchHelp"; - this.picWatchHelp.Size = new System.Drawing.Size(16, 16); - this.picWatchHelp.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.picWatchHelp.TabIndex = 1; - this.picWatchHelp.TabStop = false; - // - // tableLayoutPanel10 - // - this.tableLayoutPanel10.ColumnCount = 3; - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.tableLayoutPanel10.Controls.Add(this.grpWatch, 0, 0); - this.tableLayoutPanel10.Controls.Add(this.grpBreakpoints, 1, 0); - this.tableLayoutPanel10.Controls.Add(this.grpCallstack, 2, 0); - this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel10.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel10.Name = "tableLayoutPanel10"; - this.tableLayoutPanel10.RowCount = 3; - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel10.Size = new System.Drawing.Size(1075, 156); - this.tableLayoutPanel10.TabIndex = 0; - // - // grpWatch - // - this.grpWatch.Controls.Add(this.ctrlWatch); - this.grpWatch.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpWatch.Location = new System.Drawing.Point(3, 3); - this.grpWatch.Name = "grpWatch"; - this.grpWatch.Size = new System.Drawing.Size(352, 150); - this.grpWatch.TabIndex = 2; - this.grpWatch.TabStop = false; - this.grpWatch.Text = "Watch"; - // - // ctrlWatch - // - this.ctrlWatch.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlWatch.Location = new System.Drawing.Point(3, 16); - this.ctrlWatch.Name = "ctrlWatch"; - this.ctrlWatch.Size = new System.Drawing.Size(346, 131); - this.ctrlWatch.TabIndex = 0; - // - // grpBreakpoints - // - this.grpBreakpoints.Controls.Add(this.ctrlBreakpoints); - this.grpBreakpoints.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpBreakpoints.Location = new System.Drawing.Point(361, 3); - this.grpBreakpoints.Name = "grpBreakpoints"; - this.grpBreakpoints.Size = new System.Drawing.Size(352, 150); - this.grpBreakpoints.TabIndex = 3; - this.grpBreakpoints.TabStop = false; - this.grpBreakpoints.Text = "Breakpoints"; - // - // ctrlBreakpoints - // - this.ctrlBreakpoints.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlBreakpoints.Location = new System.Drawing.Point(3, 16); - this.ctrlBreakpoints.Name = "ctrlBreakpoints"; - this.ctrlBreakpoints.Size = new System.Drawing.Size(346, 131); - this.ctrlBreakpoints.TabIndex = 0; - this.ctrlBreakpoints.BreakpointNavigation += new System.EventHandler(this.ctrlBreakpoints_BreakpointNavigation); - // - // grpCallstack - // - this.grpCallstack.Controls.Add(this.ctrlCallstack); - this.grpCallstack.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpCallstack.Location = new System.Drawing.Point(719, 3); - this.grpCallstack.Name = "grpCallstack"; - this.grpCallstack.Size = new System.Drawing.Size(353, 150); - this.grpCallstack.TabIndex = 4; - this.grpCallstack.TabStop = false; - this.grpCallstack.Text = "Call Stack"; - // - // ctrlCallstack - // - this.ctrlCallstack.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlCallstack.Location = new System.Drawing.Point(3, 16); - this.ctrlCallstack.Name = "ctrlCallstack"; - this.ctrlCallstack.Size = new System.Drawing.Size(347, 131); - this.ctrlCallstack.TabIndex = 0; - this.ctrlCallstack.FunctionSelected += new System.EventHandler(this.ctrlCallstack_FunctionSelected); - // - // menuStrip - // - this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.splitContainer = new Mesen.GUI.Controls.ctrlSplitContainer(); + this.ctrlSplitContainerTop = new Mesen.GUI.Controls.ctrlSplitContainer(); + this.tlpTop = new System.Windows.Forms.TableLayoutPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.ctrlSourceViewer = new Mesen.GUI.Debugger.Controls.ctrlSourceViewer(); + this.ctrlDebuggerCode = new Mesen.GUI.Debugger.ctrlDebuggerCode(); + this.panel2 = new System.Windows.Forms.Panel(); + this.ctrlSourceViewerSplit = new Mesen.GUI.Debugger.Controls.ctrlSourceViewer(); + this.ctrlDebuggerCodeSplit = new Mesen.GUI.Debugger.ctrlDebuggerCode(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.ctrlConsoleStatus = new Mesen.GUI.Debugger.ctrlConsoleStatus(); + this.tlpVerticalLayout = new System.Windows.Forms.TableLayoutPanel(); + this.tlpFunctionLabelLists = new System.Windows.Forms.TableLayoutPanel(); + this.grpLabels = new System.Windows.Forms.GroupBox(); + this.ctrlLabelList = new Mesen.GUI.Debugger.Controls.ctrlLabelList(); + this.grpFunctions = new System.Windows.Forms.GroupBox(); + this.ctrlFunctionList = new Mesen.GUI.Debugger.Controls.ctrlFunctionList(); + this.picWatchHelp = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); + this.grpWatch = new System.Windows.Forms.GroupBox(); + this.ctrlWatch = new Mesen.GUI.Debugger.ctrlWatch(); + this.grpBreakpoints = new System.Windows.Forms.GroupBox(); + this.ctrlBreakpoints = new Mesen.GUI.Debugger.Controls.ctrlBreakpoints(); + this.grpCallstack = new System.Windows.Forms.GroupBox(); + this.ctrlCallstack = new Mesen.GUI.Debugger.Controls.ctrlCallstack(); + this.menuStrip = new Mesen.GUI.Controls.ctrlMesenMenuStrip(); + this.mnuFile = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuSaveRom = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuSaveRomAs = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuSaveAsIps = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuRevertChanges = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuWorkspace = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuImportLabels = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuExportLabels = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuImportSettings = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuResetWorkspace = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuResetLabels = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuAutoLoadDbgFiles = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuAutoLoadCdlFiles = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisableDefaultLabels = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuClose = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCode = new System.Windows.Forms.ToolStripMenuItem(); + this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuContinue = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreak = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuStepInto = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuStepOver = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuStepOut = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuStepBack = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuReset = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPowerCycle = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem24 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuToggleBreakpoint = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisableEnableBreakpoint = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuRunCpuCycle = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuRunPpuCycle = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuRunScanline = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuRunOneFrame = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuBreakIn = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOn = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuSearch = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuGoToAll = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuGoToAddress = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuGoTo = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem29 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuFind = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuFindNext = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuFindPrev = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuFindAllOccurrences = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisassemblyOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisassemble = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisassembleVerifiedCode = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisassembleVerifiedData = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDisassembleUnidentifiedData = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShow = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowVerifiedCode = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowVerifiedData = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowUnidentifiedData = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuDisplayOpCodesInLowerCase = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowEffectiveAddresses = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowMemoryValues = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnReset = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnUnofficialOpcodes = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnBrk = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnCrash = new System.Windows.Forms.ToolStripMenuItem(); + this.sepBreakNsfOptions = new System.Windows.Forms.ToolStripSeparator(); + this.mnuBreakOnInit = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnPlay = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem26 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuBreakOnBusConflict = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnDecayedOamRead = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnPpu2006ScrollGlitch = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnUninitMemoryRead = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuBreakOnOpen = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBreakOnDebuggerFocus = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem20 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuBringToFrontOnBreak = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuBringToFrontOnPause = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem28 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuEnableSubInstructionBreakpoints = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuShowOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowToolbar = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowCpuMemoryMapping = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowPpuMemoryMapping = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowFunctionLabelLists = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowBottomPanel = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuTooltipOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowCodePreview = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowOpCodeTooltips = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem18 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuOnlyShowTooltipOnShift = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCopyOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCopyAddresses = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCopyByteCode = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCopyComments = new System.Windows.Forms.ToolStripMenuItem(); + this.fontSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuIncreaseFontSize = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuDecreaseFontSize = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuResetFontSize = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem21 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuSelectFont = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuConfigureColors = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuSplitView = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuUseVerticalLayout = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuAutoCreateJumpLabels = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem25 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuHidePauseIcon = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPpuPartialDraw = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPpuShowPreviousFrame = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem19 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuShowBreakNotifications = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowInstructionProgression = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuShowSelectionLength = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem27 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuAlwaysScrollToCenter = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuRefreshWhileRunning = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuReloadRomOnPowerCycle = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuConfigureExternalEditor = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPreferences = new System.Windows.Forms.ToolStripMenuItem(); + this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuApuViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuAssembler = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuEventViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuMemoryViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuProfiler = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuPpuViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuScriptWindow = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuTextHooker = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuTraceLogger = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuWatchWindow = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator(); + this.pPUViewerCompactToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuOpenNametableViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuOpenChrViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuOpenSpriteViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuOpenPaletteViewer = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem17 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuEditHeader = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem30 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuCodeDataLogger = new System.Windows.Forms.ToolStripMenuItem(); + this.autoLoadsaveCDLFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuLoadCdlFile = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuSaveAsCdlFile = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuResetCdlLog = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuCdlGenerateRom = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCdlStripUnusedData = new System.Windows.Forms.ToolStripMenuItem(); + this.mnuCdlStripUsedData = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lblPrgAnalysis = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblPrgAnalysisResult = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblChrAnalysis = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblChrAnalysisResult = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblCyclesElapsedCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblCyclesElapsed = new System.Windows.Forms.ToolStripStatusLabel(); + this.ctrlPpuMemoryMapping = new Mesen.GUI.Debugger.Controls.ctrlMemoryMapping(); + this.ctrlCpuMemoryMapping = new Mesen.GUI.Debugger.Controls.ctrlMemoryMapping(); + this.tsToolbar = new Mesen.GUI.Controls.ctrlMesenToolStrip(); + this.mnuBreakOnUnlogged = new System.Windows.Forms.ToolStripMenuItem(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainerTop)).BeginInit(); + this.ctrlSplitContainerTop.Panel1.SuspendLayout(); + this.ctrlSplitContainerTop.Panel2.SuspendLayout(); + this.ctrlSplitContainerTop.SuspendLayout(); + this.tlpTop.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.tlpFunctionLabelLists.SuspendLayout(); + this.grpLabels.SuspendLayout(); + this.grpFunctions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picWatchHelp)).BeginInit(); + this.tableLayoutPanel10.SuspendLayout(); + this.grpWatch.SuspendLayout(); + this.grpBreakpoints.SuspendLayout(); + this.grpCallstack.SuspendLayout(); + this.menuStrip.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer.HidePanel2 = false; + this.splitContainer.Location = new System.Drawing.Point(0, 24); + this.splitContainer.Name = "splitContainer"; + this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.ctrlSplitContainerTop); + this.splitContainer.Panel1MinSize = 400; + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.picWatchHelp); + this.splitContainer.Panel2.Controls.Add(this.tableLayoutPanel10); + this.splitContainer.Panel2MinSize = 100; + this.splitContainer.Size = new System.Drawing.Size(1075, 570); + this.splitContainer.SplitterDistance = 404; + this.splitContainer.SplitterWidth = 7; + this.splitContainer.TabIndex = 1; + this.splitContainer.TabStop = false; + this.splitContainer.PanelCollapsed += new System.EventHandler(this.splitContainer_PanelCollapsed); + this.splitContainer.PanelExpanded += new System.EventHandler(this.splitContainer_PanelExpanded); + // + // ctrlSplitContainerTop + // + this.ctrlSplitContainerTop.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlSplitContainerTop.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.ctrlSplitContainerTop.HidePanel2 = false; + this.ctrlSplitContainerTop.Location = new System.Drawing.Point(0, 0); + this.ctrlSplitContainerTop.Name = "ctrlSplitContainerTop"; + // + // ctrlSplitContainerTop.Panel1 + // + this.ctrlSplitContainerTop.Panel1.Controls.Add(this.tlpTop); + this.ctrlSplitContainerTop.Panel1MinSize = 750; + // + // ctrlSplitContainerTop.Panel2 + // + this.ctrlSplitContainerTop.Panel2.Controls.Add(this.tlpFunctionLabelLists); + this.ctrlSplitContainerTop.Panel2MinSize = 150; + this.ctrlSplitContainerTop.Size = new System.Drawing.Size(1075, 404); + this.ctrlSplitContainerTop.SplitterDistance = 818; + this.ctrlSplitContainerTop.SplitterWidth = 7; + this.ctrlSplitContainerTop.TabIndex = 3; + this.ctrlSplitContainerTop.PanelCollapsed += new System.EventHandler(this.ctrlSplitContainerTop_PanelCollapsed); + this.ctrlSplitContainerTop.PanelExpanded += new System.EventHandler(this.ctrlSplitContainerTop_PanelExpanded); + // + // tlpTop + // + this.tlpTop.ColumnCount = 3; + this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 0F)); + this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpTop.Controls.Add(this.panel1, 0, 0); + this.tlpTop.Controls.Add(this.panel2, 1, 0); + this.tlpTop.Controls.Add(this.tableLayoutPanel1, 2, 0); + this.tlpTop.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpTop.Location = new System.Drawing.Point(0, 0); + this.tlpTop.Name = "tlpTop"; + this.tlpTop.RowCount = 1; + this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 404F)); + this.tlpTop.Size = new System.Drawing.Size(818, 404); + this.tlpTop.TabIndex = 2; + // + // panel1 + // + this.panel1.Controls.Add(this.ctrlSourceViewer); + this.panel1.Controls.Add(this.ctrlDebuggerCode); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(3, 0); + this.panel1.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(354, 404); + this.panel1.TabIndex = 5; + // + // ctrlSourceViewer + // + this.ctrlSourceViewer.CurrentFile = null; + this.ctrlSourceViewer.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlSourceViewer.Location = new System.Drawing.Point(0, 0); + this.ctrlSourceViewer.Name = "ctrlSourceViewer"; + this.ctrlSourceViewer.Size = new System.Drawing.Size(354, 404); + this.ctrlSourceViewer.SymbolProvider = null; + this.ctrlSourceViewer.TabIndex = 7; + this.ctrlSourceViewer.Visible = false; + this.ctrlSourceViewer.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); + // + // ctrlDebuggerCode + // + this.ctrlDebuggerCode.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlDebuggerCode.HideSelection = false; + this.ctrlDebuggerCode.Location = new System.Drawing.Point(0, 0); + this.ctrlDebuggerCode.Name = "ctrlDebuggerCode"; + this.ctrlDebuggerCode.ShowMemoryValues = false; + this.ctrlDebuggerCode.Size = new System.Drawing.Size(354, 404); + this.ctrlDebuggerCode.SymbolProvider = null; + this.ctrlDebuggerCode.TabIndex = 2; + this.ctrlDebuggerCode.OnEditCode += new Mesen.GUI.Debugger.ctrlDebuggerCode.AssemblerEventHandler(this.ctrlDebuggerCode_OnEditCode); + this.ctrlDebuggerCode.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); + // + // panel2 + // + this.panel2.Controls.Add(this.ctrlSourceViewerSplit); + this.panel2.Controls.Add(this.ctrlDebuggerCodeSplit); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(360, 0); + this.panel2.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1, 404); + this.panel2.TabIndex = 6; + // + // ctrlSourceViewerSplit + // + this.ctrlSourceViewerSplit.CurrentFile = null; + this.ctrlSourceViewerSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlSourceViewerSplit.Location = new System.Drawing.Point(0, 0); + this.ctrlSourceViewerSplit.Name = "ctrlSourceViewerSplit"; + this.ctrlSourceViewerSplit.Size = new System.Drawing.Size(1, 404); + this.ctrlSourceViewerSplit.SymbolProvider = null; + this.ctrlSourceViewerSplit.TabIndex = 8; + this.ctrlSourceViewerSplit.Visible = false; + this.ctrlSourceViewerSplit.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); + // + // ctrlDebuggerCodeSplit + // + this.ctrlDebuggerCodeSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlDebuggerCodeSplit.HideSelection = false; + this.ctrlDebuggerCodeSplit.Location = new System.Drawing.Point(0, 0); + this.ctrlDebuggerCodeSplit.Name = "ctrlDebuggerCodeSplit"; + this.ctrlDebuggerCodeSplit.ShowMemoryValues = false; + this.ctrlDebuggerCodeSplit.Size = new System.Drawing.Size(1, 404); + this.ctrlDebuggerCodeSplit.SymbolProvider = null; + this.ctrlDebuggerCodeSplit.TabIndex = 4; + this.ctrlDebuggerCodeSplit.Visible = false; + this.ctrlDebuggerCodeSplit.OnEditCode += new Mesen.GUI.Debugger.ctrlDebuggerCode.AssemblerEventHandler(this.ctrlDebuggerCode_OnEditCode); + this.ctrlDebuggerCodeSplit.Enter += new System.EventHandler(this.ctrlDebuggerCode_Enter); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.ctrlConsoleStatus, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.tlpVerticalLayout, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(360, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + 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(458, 404); + this.tableLayoutPanel1.TabIndex = 7; + // + // ctrlConsoleStatus + // + this.ctrlConsoleStatus.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlConsoleStatus.Location = new System.Drawing.Point(0, 0); + this.ctrlConsoleStatus.Margin = new System.Windows.Forms.Padding(0); + this.ctrlConsoleStatus.Name = "ctrlConsoleStatus"; + this.ctrlConsoleStatus.Size = new System.Drawing.Size(458, 400); + this.ctrlConsoleStatus.TabIndex = 3; + this.ctrlConsoleStatus.OnGotoLocation += new System.EventHandler(this.ctrlConsoleStatus_OnGotoLocation); + // + // tlpVerticalLayout + // + this.tlpVerticalLayout.ColumnCount = 2; + this.tlpVerticalLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpVerticalLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpVerticalLayout.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpVerticalLayout.Location = new System.Drawing.Point(0, 400); + this.tlpVerticalLayout.Margin = new System.Windows.Forms.Padding(0); + this.tlpVerticalLayout.Name = "tlpVerticalLayout"; + this.tlpVerticalLayout.RowCount = 1; + this.tlpVerticalLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpVerticalLayout.Size = new System.Drawing.Size(458, 4); + this.tlpVerticalLayout.TabIndex = 4; + // + // tlpFunctionLabelLists + // + this.tlpFunctionLabelLists.ColumnCount = 1; + this.tlpFunctionLabelLists.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpFunctionLabelLists.Controls.Add(this.grpLabels, 0, 1); + this.tlpFunctionLabelLists.Controls.Add(this.grpFunctions, 0, 0); + this.tlpFunctionLabelLists.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpFunctionLabelLists.Location = new System.Drawing.Point(0, 0); + this.tlpFunctionLabelLists.Margin = new System.Windows.Forms.Padding(0); + this.tlpFunctionLabelLists.Name = "tlpFunctionLabelLists"; + this.tlpFunctionLabelLists.RowCount = 2; + this.tlpFunctionLabelLists.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpFunctionLabelLists.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpFunctionLabelLists.Size = new System.Drawing.Size(250, 404); + this.tlpFunctionLabelLists.TabIndex = 5; + // + // grpLabels + // + this.grpLabels.Controls.Add(this.ctrlLabelList); + this.grpLabels.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpLabels.Location = new System.Drawing.Point(3, 205); + this.grpLabels.Name = "grpLabels"; + this.grpLabels.Size = new System.Drawing.Size(244, 196); + this.grpLabels.TabIndex = 6; + this.grpLabels.TabStop = false; + this.grpLabels.Text = "Labels"; + // + // ctrlLabelList + // + this.ctrlLabelList.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlLabelList.Location = new System.Drawing.Point(3, 16); + this.ctrlLabelList.Name = "ctrlLabelList"; + this.ctrlLabelList.Size = new System.Drawing.Size(238, 177); + this.ctrlLabelList.TabIndex = 0; + this.ctrlLabelList.OnFindOccurrence += new System.EventHandler(this.ctrlLabelList_OnFindOccurrence); + this.ctrlLabelList.OnLabelSelected += new Mesen.GUI.Debugger.GoToDestinationEventHandler(this.ctrlLabelList_OnLabelSelected); + // + // grpFunctions + // + this.grpFunctions.Controls.Add(this.ctrlFunctionList); + this.grpFunctions.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpFunctions.Location = new System.Drawing.Point(3, 3); + this.grpFunctions.Name = "grpFunctions"; + this.grpFunctions.Size = new System.Drawing.Size(244, 196); + this.grpFunctions.TabIndex = 5; + this.grpFunctions.TabStop = false; + this.grpFunctions.Text = "Functions"; + // + // ctrlFunctionList + // + this.ctrlFunctionList.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlFunctionList.Location = new System.Drawing.Point(3, 16); + this.ctrlFunctionList.Name = "ctrlFunctionList"; + this.ctrlFunctionList.Size = new System.Drawing.Size(238, 177); + this.ctrlFunctionList.TabIndex = 0; + this.ctrlFunctionList.OnFindOccurrence += new System.EventHandler(this.ctrlFunctionList_OnFindOccurrence); + this.ctrlFunctionList.OnFunctionSelected += new Mesen.GUI.Debugger.GoToDestinationEventHandler(this.ctrlFunctionList_OnFunctionSelected); + // + // picWatchHelp + // + this.picWatchHelp.Image = global::Mesen.GUI.Properties.Resources.Help; + this.picWatchHelp.Location = new System.Drawing.Point(50, 2); + this.picWatchHelp.Name = "picWatchHelp"; + this.picWatchHelp.Size = new System.Drawing.Size(16, 16); + this.picWatchHelp.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.picWatchHelp.TabIndex = 1; + this.picWatchHelp.TabStop = false; + // + // tableLayoutPanel10 + // + this.tableLayoutPanel10.ColumnCount = 3; + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.tableLayoutPanel10.Controls.Add(this.grpWatch, 0, 0); + this.tableLayoutPanel10.Controls.Add(this.grpBreakpoints, 1, 0); + this.tableLayoutPanel10.Controls.Add(this.grpCallstack, 2, 0); + this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel10.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel10.Name = "tableLayoutPanel10"; + this.tableLayoutPanel10.RowCount = 3; + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel10.Size = new System.Drawing.Size(1075, 159); + this.tableLayoutPanel10.TabIndex = 0; + // + // grpWatch + // + this.grpWatch.Controls.Add(this.ctrlWatch); + this.grpWatch.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpWatch.Location = new System.Drawing.Point(3, 3); + this.grpWatch.Name = "grpWatch"; + this.grpWatch.Size = new System.Drawing.Size(352, 153); + this.grpWatch.TabIndex = 2; + this.grpWatch.TabStop = false; + this.grpWatch.Text = "Watch"; + // + // ctrlWatch + // + this.ctrlWatch.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlWatch.Location = new System.Drawing.Point(3, 16); + this.ctrlWatch.Name = "ctrlWatch"; + this.ctrlWatch.Size = new System.Drawing.Size(346, 134); + this.ctrlWatch.TabIndex = 0; + // + // grpBreakpoints + // + this.grpBreakpoints.Controls.Add(this.ctrlBreakpoints); + this.grpBreakpoints.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpBreakpoints.Location = new System.Drawing.Point(361, 3); + this.grpBreakpoints.Name = "grpBreakpoints"; + this.grpBreakpoints.Size = new System.Drawing.Size(352, 153); + this.grpBreakpoints.TabIndex = 3; + this.grpBreakpoints.TabStop = false; + this.grpBreakpoints.Text = "Breakpoints"; + // + // ctrlBreakpoints + // + this.ctrlBreakpoints.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlBreakpoints.Location = new System.Drawing.Point(3, 16); + this.ctrlBreakpoints.Name = "ctrlBreakpoints"; + this.ctrlBreakpoints.Size = new System.Drawing.Size(346, 134); + this.ctrlBreakpoints.TabIndex = 0; + this.ctrlBreakpoints.BreakpointNavigation += new System.EventHandler(this.ctrlBreakpoints_BreakpointNavigation); + // + // grpCallstack + // + this.grpCallstack.Controls.Add(this.ctrlCallstack); + this.grpCallstack.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpCallstack.Location = new System.Drawing.Point(719, 3); + this.grpCallstack.Name = "grpCallstack"; + this.grpCallstack.Size = new System.Drawing.Size(353, 153); + this.grpCallstack.TabIndex = 4; + this.grpCallstack.TabStop = false; + this.grpCallstack.Text = "Call Stack"; + // + // ctrlCallstack + // + this.ctrlCallstack.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlCallstack.Location = new System.Drawing.Point(3, 16); + this.ctrlCallstack.Name = "ctrlCallstack"; + this.ctrlCallstack.Size = new System.Drawing.Size(347, 134); + this.ctrlCallstack.TabIndex = 0; + this.ctrlCallstack.FunctionSelected += new System.EventHandler(this.ctrlCallstack_FunctionSelected); + // + // menuStrip + // + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuFile, this.mnuCode, this.debugToolStripMenuItem, this.mnuSearch, this.mnuOptions, this.toolsToolStripMenuItem}); - this.menuStrip.Location = new System.Drawing.Point(0, 0); - this.menuStrip.Name = "menuStrip"; - this.menuStrip.Size = new System.Drawing.Size(1075, 24); - this.menuStrip.TabIndex = 2; - this.menuStrip.Text = "menuStrip1"; - // - // mnuFile - // - this.mnuFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(1075, 24); + this.menuStrip.TabIndex = 2; + this.menuStrip.Text = "menuStrip1"; + // + // mnuFile + // + this.mnuFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuSaveRom, this.mnuSaveRomAs, this.mnuSaveAsIps, @@ -604,49 +605,49 @@ namespace Mesen.GUI.Debugger this.mnuWorkspace, this.toolStripMenuItem3, this.mnuClose}); - this.mnuFile.Name = "mnuFile"; - this.mnuFile.Size = new System.Drawing.Size(37, 20); - this.mnuFile.Text = "File"; - this.mnuFile.DropDownOpening += new System.EventHandler(this.mnuFile_DropDownOpening); - // - // mnuSaveRom - // - this.mnuSaveRom.Image = global::Mesen.GUI.Properties.Resources.Floppy; - this.mnuSaveRom.Name = "mnuSaveRom"; - this.mnuSaveRom.Size = new System.Drawing.Size(208, 22); - this.mnuSaveRom.Text = "Save ROM"; - this.mnuSaveRom.Click += new System.EventHandler(this.mnuSaveRom_Click); - // - // mnuSaveRomAs - // - this.mnuSaveRomAs.Name = "mnuSaveRomAs"; - this.mnuSaveRomAs.Size = new System.Drawing.Size(208, 22); - this.mnuSaveRomAs.Text = "Save ROM as..."; - this.mnuSaveRomAs.Click += new System.EventHandler(this.mnuSaveRomAs_Click); - // - // mnuSaveAsIps - // - this.mnuSaveAsIps.Name = "mnuSaveAsIps"; - this.mnuSaveAsIps.Size = new System.Drawing.Size(208, 22); - this.mnuSaveAsIps.Text = "Save edits as IPS"; - this.mnuSaveAsIps.Click += new System.EventHandler(this.mnuSaveAsIps_Click); - // - // mnuRevertChanges - // - this.mnuRevertChanges.Image = global::Mesen.GUI.Properties.Resources.Undo; - this.mnuRevertChanges.Name = "mnuRevertChanges"; - this.mnuRevertChanges.Size = new System.Drawing.Size(208, 22); - this.mnuRevertChanges.Text = "Revert PRG/CHR changes"; - this.mnuRevertChanges.Click += new System.EventHandler(this.mnuRevertChanges_Click); - // - // toolStripMenuItem14 - // - this.toolStripMenuItem14.Name = "toolStripMenuItem14"; - this.toolStripMenuItem14.Size = new System.Drawing.Size(205, 6); - // - // mnuWorkspace - // - this.mnuWorkspace.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuFile.Name = "mnuFile"; + this.mnuFile.Size = new System.Drawing.Size(38, 20); + this.mnuFile.Text = "File"; + this.mnuFile.DropDownOpening += new System.EventHandler(this.mnuFile_DropDownOpening); + // + // mnuSaveRom + // + this.mnuSaveRom.Image = global::Mesen.GUI.Properties.Resources.Floppy; + this.mnuSaveRom.Name = "mnuSaveRom"; + this.mnuSaveRom.Size = new System.Drawing.Size(217, 22); + this.mnuSaveRom.Text = "Save ROM"; + this.mnuSaveRom.Click += new System.EventHandler(this.mnuSaveRom_Click); + // + // mnuSaveRomAs + // + this.mnuSaveRomAs.Name = "mnuSaveRomAs"; + this.mnuSaveRomAs.Size = new System.Drawing.Size(217, 22); + this.mnuSaveRomAs.Text = "Save ROM as..."; + this.mnuSaveRomAs.Click += new System.EventHandler(this.mnuSaveRomAs_Click); + // + // mnuSaveAsIps + // + this.mnuSaveAsIps.Name = "mnuSaveAsIps"; + this.mnuSaveAsIps.Size = new System.Drawing.Size(217, 22); + this.mnuSaveAsIps.Text = "Save edits as IPS"; + this.mnuSaveAsIps.Click += new System.EventHandler(this.mnuSaveAsIps_Click); + // + // mnuRevertChanges + // + this.mnuRevertChanges.Image = global::Mesen.GUI.Properties.Resources.Undo; + this.mnuRevertChanges.Name = "mnuRevertChanges"; + this.mnuRevertChanges.Size = new System.Drawing.Size(217, 22); + this.mnuRevertChanges.Text = "Revert PRG/CHR changes"; + this.mnuRevertChanges.Click += new System.EventHandler(this.mnuRevertChanges_Click); + // + // toolStripMenuItem14 + // + this.toolStripMenuItem14.Name = "toolStripMenuItem14"; + this.toolStripMenuItem14.Size = new System.Drawing.Size(214, 6); + // + // mnuWorkspace + // + this.mnuWorkspace.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuImportLabels, this.mnuExportLabels, this.mnuImportSettings, @@ -657,106 +658,106 @@ namespace Mesen.GUI.Debugger this.mnuAutoLoadDbgFiles, this.mnuAutoLoadCdlFiles, this.mnuDisableDefaultLabels}); - this.mnuWorkspace.Name = "mnuWorkspace"; - this.mnuWorkspace.Size = new System.Drawing.Size(208, 22); - this.mnuWorkspace.Text = "Workspace"; - // - // mnuImportLabels - // - this.mnuImportLabels.Image = global::Mesen.GUI.Properties.Resources.Import; - this.mnuImportLabels.Name = "mnuImportLabels"; - this.mnuImportLabels.Size = new System.Drawing.Size(207, 22); - this.mnuImportLabels.Text = "Import Labels"; - this.mnuImportLabels.Click += new System.EventHandler(this.mnuImportLabels_Click); - // - // mnuExportLabels - // - this.mnuExportLabels.Image = global::Mesen.GUI.Properties.Resources.Export; - this.mnuExportLabels.Name = "mnuExportLabels"; - this.mnuExportLabels.Size = new System.Drawing.Size(207, 22); - this.mnuExportLabels.Text = "Export Labels"; - this.mnuExportLabels.Click += new System.EventHandler(this.mnuExportLabels_Click); - // - // mnuImportSettings - // - this.mnuImportSettings.Image = global::Mesen.GUI.Properties.Resources.Cog; - this.mnuImportSettings.Name = "mnuImportSettings"; - this.mnuImportSettings.Size = new System.Drawing.Size(207, 22); - this.mnuImportSettings.Text = "Import Settings"; - this.mnuImportSettings.Click += new System.EventHandler(this.mnuImportSettings_Click); - // - // toolStripMenuItem16 - // - this.toolStripMenuItem16.Name = "toolStripMenuItem16"; - this.toolStripMenuItem16.Size = new System.Drawing.Size(204, 6); - // - // mnuResetWorkspace - // - this.mnuResetWorkspace.Image = global::Mesen.GUI.Properties.Resources.Reset; - this.mnuResetWorkspace.Name = "mnuResetWorkspace"; - this.mnuResetWorkspace.Size = new System.Drawing.Size(207, 22); - this.mnuResetWorkspace.Text = "Reset Workspace"; - this.mnuResetWorkspace.Click += new System.EventHandler(this.mnuResetWorkspace_Click); - // - // mnuResetLabels - // - this.mnuResetLabels.Name = "mnuResetLabels"; - this.mnuResetLabels.Size = new System.Drawing.Size(207, 22); - this.mnuResetLabels.Text = "Reset Labels"; - this.mnuResetLabels.Click += new System.EventHandler(this.mnuResetLabels_Click); - // - // toolStripMenuItem10 - // - this.toolStripMenuItem10.Name = "toolStripMenuItem10"; - this.toolStripMenuItem10.Size = new System.Drawing.Size(204, 6); - // - // mnuAutoLoadDbgFiles - // - this.mnuAutoLoadDbgFiles.CheckOnClick = true; - this.mnuAutoLoadDbgFiles.Name = "mnuAutoLoadDbgFiles"; - this.mnuAutoLoadDbgFiles.Size = new System.Drawing.Size(207, 22); - this.mnuAutoLoadDbgFiles.Text = "Auto-load DBG/MLB files"; - this.mnuAutoLoadDbgFiles.Click += new System.EventHandler(this.mnuAutoLoadDbgFiles_Click); - // - // mnuAutoLoadCdlFiles - // - this.mnuAutoLoadCdlFiles.CheckOnClick = true; - this.mnuAutoLoadCdlFiles.Name = "mnuAutoLoadCdlFiles"; - this.mnuAutoLoadCdlFiles.Size = new System.Drawing.Size(207, 22); - this.mnuAutoLoadCdlFiles.Text = "Auto-load CDL files"; - this.mnuAutoLoadCdlFiles.Click += new System.EventHandler(this.mnuAutoLoadCdlFiles_Click); - // - // mnuDisableDefaultLabels - // - this.mnuDisableDefaultLabels.CheckOnClick = true; - this.mnuDisableDefaultLabels.Name = "mnuDisableDefaultLabels"; - this.mnuDisableDefaultLabels.Size = new System.Drawing.Size(207, 22); - this.mnuDisableDefaultLabels.Text = "Disable default labels"; - this.mnuDisableDefaultLabels.Click += new System.EventHandler(this.mnuDisableDefaultLabels_Click); - // - // toolStripMenuItem3 - // - this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(205, 6); - // - // mnuClose - // - this.mnuClose.Image = global::Mesen.GUI.Properties.Resources.Exit; - this.mnuClose.Name = "mnuClose"; - this.mnuClose.Size = new System.Drawing.Size(208, 22); - this.mnuClose.Text = "Close"; - this.mnuClose.Click += new System.EventHandler(this.mnuClose_Click); - // - // mnuCode - // - this.mnuCode.Name = "mnuCode"; - this.mnuCode.Size = new System.Drawing.Size(47, 20); - this.mnuCode.Text = "Code"; - this.mnuCode.DropDownOpening += new System.EventHandler(this.mnuCode_DropDownOpening); - // - // debugToolStripMenuItem - // - this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuWorkspace.Name = "mnuWorkspace"; + this.mnuWorkspace.Size = new System.Drawing.Size(217, 22); + this.mnuWorkspace.Text = "Workspace"; + // + // mnuImportLabels + // + this.mnuImportLabels.Image = global::Mesen.GUI.Properties.Resources.Import; + this.mnuImportLabels.Name = "mnuImportLabels"; + this.mnuImportLabels.Size = new System.Drawing.Size(215, 22); + this.mnuImportLabels.Text = "Import Labels"; + this.mnuImportLabels.Click += new System.EventHandler(this.mnuImportLabels_Click); + // + // mnuExportLabels + // + this.mnuExportLabels.Image = global::Mesen.GUI.Properties.Resources.Export; + this.mnuExportLabels.Name = "mnuExportLabels"; + this.mnuExportLabels.Size = new System.Drawing.Size(215, 22); + this.mnuExportLabels.Text = "Export Labels"; + this.mnuExportLabels.Click += new System.EventHandler(this.mnuExportLabels_Click); + // + // mnuImportSettings + // + this.mnuImportSettings.Image = global::Mesen.GUI.Properties.Resources.Cog; + this.mnuImportSettings.Name = "mnuImportSettings"; + this.mnuImportSettings.Size = new System.Drawing.Size(215, 22); + this.mnuImportSettings.Text = "Import Settings"; + this.mnuImportSettings.Click += new System.EventHandler(this.mnuImportSettings_Click); + // + // toolStripMenuItem16 + // + this.toolStripMenuItem16.Name = "toolStripMenuItem16"; + this.toolStripMenuItem16.Size = new System.Drawing.Size(212, 6); + // + // mnuResetWorkspace + // + this.mnuResetWorkspace.Image = global::Mesen.GUI.Properties.Resources.Reset; + this.mnuResetWorkspace.Name = "mnuResetWorkspace"; + this.mnuResetWorkspace.Size = new System.Drawing.Size(215, 22); + this.mnuResetWorkspace.Text = "Reset Workspace"; + this.mnuResetWorkspace.Click += new System.EventHandler(this.mnuResetWorkspace_Click); + // + // mnuResetLabels + // + this.mnuResetLabels.Name = "mnuResetLabels"; + this.mnuResetLabels.Size = new System.Drawing.Size(215, 22); + this.mnuResetLabels.Text = "Reset Labels"; + this.mnuResetLabels.Click += new System.EventHandler(this.mnuResetLabels_Click); + // + // toolStripMenuItem10 + // + this.toolStripMenuItem10.Name = "toolStripMenuItem10"; + this.toolStripMenuItem10.Size = new System.Drawing.Size(212, 6); + // + // mnuAutoLoadDbgFiles + // + this.mnuAutoLoadDbgFiles.CheckOnClick = true; + this.mnuAutoLoadDbgFiles.Name = "mnuAutoLoadDbgFiles"; + this.mnuAutoLoadDbgFiles.Size = new System.Drawing.Size(215, 22); + this.mnuAutoLoadDbgFiles.Text = "Auto-load DBG/MLB files"; + this.mnuAutoLoadDbgFiles.Click += new System.EventHandler(this.mnuAutoLoadDbgFiles_Click); + // + // mnuAutoLoadCdlFiles + // + this.mnuAutoLoadCdlFiles.CheckOnClick = true; + this.mnuAutoLoadCdlFiles.Name = "mnuAutoLoadCdlFiles"; + this.mnuAutoLoadCdlFiles.Size = new System.Drawing.Size(215, 22); + this.mnuAutoLoadCdlFiles.Text = "Auto-load CDL files"; + this.mnuAutoLoadCdlFiles.Click += new System.EventHandler(this.mnuAutoLoadCdlFiles_Click); + // + // mnuDisableDefaultLabels + // + this.mnuDisableDefaultLabels.CheckOnClick = true; + this.mnuDisableDefaultLabels.Name = "mnuDisableDefaultLabels"; + this.mnuDisableDefaultLabels.Size = new System.Drawing.Size(215, 22); + this.mnuDisableDefaultLabels.Text = "Disable default labels"; + this.mnuDisableDefaultLabels.Click += new System.EventHandler(this.mnuDisableDefaultLabels_Click); + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Size = new System.Drawing.Size(214, 6); + // + // mnuClose + // + this.mnuClose.Image = global::Mesen.GUI.Properties.Resources.Exit; + this.mnuClose.Name = "mnuClose"; + this.mnuClose.Size = new System.Drawing.Size(217, 22); + this.mnuClose.Text = "Close"; + this.mnuClose.Click += new System.EventHandler(this.mnuClose_Click); + // + // mnuCode + // + this.mnuCode.Name = "mnuCode"; + this.mnuCode.Size = new System.Drawing.Size(50, 20); + this.mnuCode.Text = "Code"; + this.mnuCode.DropDownOpening += new System.EventHandler(this.mnuCode_DropDownOpening); + // + // debugToolStripMenuItem + // + this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuContinue, this.mnuBreak, this.mnuStepInto, @@ -777,162 +778,162 @@ namespace Mesen.GUI.Debugger this.toolStripMenuItem8, this.mnuBreakIn, this.mnuBreakOn}); - this.debugToolStripMenuItem.Name = "debugToolStripMenuItem"; - this.debugToolStripMenuItem.Size = new System.Drawing.Size(54, 20); - this.debugToolStripMenuItem.Text = "Debug"; - // - // mnuContinue - // - this.mnuContinue.Enabled = false; - this.mnuContinue.Image = global::Mesen.GUI.Properties.Resources.Play; - this.mnuContinue.Name = "mnuContinue"; - this.mnuContinue.Size = new System.Drawing.Size(212, 22); - this.mnuContinue.Text = "Continue"; - this.mnuContinue.Click += new System.EventHandler(this.mnuContinue_Click); - // - // mnuBreak - // - this.mnuBreak.Enabled = false; - this.mnuBreak.Image = global::Mesen.GUI.Properties.Resources.Pause; - this.mnuBreak.Name = "mnuBreak"; - this.mnuBreak.ShortcutKeyDisplayString = ""; - this.mnuBreak.Size = new System.Drawing.Size(212, 22); - this.mnuBreak.Text = "Break"; - this.mnuBreak.Click += new System.EventHandler(this.mnuBreak_Click); - // - // mnuStepInto - // - this.mnuStepInto.Image = global::Mesen.GUI.Properties.Resources.StepInto; - this.mnuStepInto.Name = "mnuStepInto"; - this.mnuStepInto.Size = new System.Drawing.Size(212, 22); - this.mnuStepInto.Text = "Step Into"; - this.mnuStepInto.Click += new System.EventHandler(this.mnuStepInto_Click); - // - // mnuStepOver - // - this.mnuStepOver.Image = global::Mesen.GUI.Properties.Resources.StepOver; - this.mnuStepOver.Name = "mnuStepOver"; - this.mnuStepOver.Size = new System.Drawing.Size(212, 22); - this.mnuStepOver.Text = "Step Over"; - this.mnuStepOver.Click += new System.EventHandler(this.mnuStepOver_Click); - // - // mnuStepOut - // - this.mnuStepOut.Image = global::Mesen.GUI.Properties.Resources.StepOut; - this.mnuStepOut.Name = "mnuStepOut"; - this.mnuStepOut.Size = new System.Drawing.Size(212, 22); - this.mnuStepOut.Text = "Step Out"; - this.mnuStepOut.Click += new System.EventHandler(this.mnuStepOut_Click); - // - // mnuStepBack - // - this.mnuStepBack.Image = global::Mesen.GUI.Properties.Resources.StepBack; - this.mnuStepBack.Name = "mnuStepBack"; - this.mnuStepBack.Size = new System.Drawing.Size(212, 22); - this.mnuStepBack.Text = "Step Back"; - this.mnuStepBack.Click += new System.EventHandler(this.mnuStepBack_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(209, 6); - // - // mnuReset - // - this.mnuReset.Image = global::Mesen.GUI.Properties.Resources.Reset; - this.mnuReset.Name = "mnuReset"; - this.mnuReset.Size = new System.Drawing.Size(212, 22); - this.mnuReset.Text = "Reset"; - this.mnuReset.Click += new System.EventHandler(this.mnuReset_Click); - // - // mnuPowerCycle - // - this.mnuPowerCycle.Image = global::Mesen.GUI.Properties.Resources.PowerCycle; - this.mnuPowerCycle.Name = "mnuPowerCycle"; - this.mnuPowerCycle.Size = new System.Drawing.Size(212, 22); - this.mnuPowerCycle.Text = "Power Cycle"; - this.mnuPowerCycle.Click += new System.EventHandler(this.mnuPowerCycle_Click); - // - // toolStripMenuItem24 - // - this.toolStripMenuItem24.Name = "toolStripMenuItem24"; - this.toolStripMenuItem24.Size = new System.Drawing.Size(209, 6); - // - // mnuToggleBreakpoint - // - this.mnuToggleBreakpoint.Image = global::Mesen.GUI.Properties.Resources.Breakpoint; - this.mnuToggleBreakpoint.Name = "mnuToggleBreakpoint"; - this.mnuToggleBreakpoint.Size = new System.Drawing.Size(212, 22); - this.mnuToggleBreakpoint.Text = "Toggle Breakpoint"; - this.mnuToggleBreakpoint.Click += new System.EventHandler(this.mnuToggleBreakpoint_Click); - // - // mnuDisableEnableBreakpoint - // - this.mnuDisableEnableBreakpoint.Image = global::Mesen.GUI.Properties.Resources.BreakpointDisabled; - this.mnuDisableEnableBreakpoint.Name = "mnuDisableEnableBreakpoint"; - this.mnuDisableEnableBreakpoint.Size = new System.Drawing.Size(212, 22); - this.mnuDisableEnableBreakpoint.Text = "Disable/Enable Breakpoint"; - this.mnuDisableEnableBreakpoint.Click += new System.EventHandler(this.mnuDisableEnableBreakpoint_Click); - // - // toolStripMenuItem2 - // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(209, 6); - // - // mnuRunCpuCycle - // - this.mnuRunCpuCycle.Image = global::Mesen.GUI.Properties.Resources.JumpTarget; - this.mnuRunCpuCycle.Name = "mnuRunCpuCycle"; - this.mnuRunCpuCycle.Size = new System.Drawing.Size(212, 22); - this.mnuRunCpuCycle.Text = "Run one CPU cycle"; - this.mnuRunCpuCycle.Click += new System.EventHandler(this.mnuRunCpuCycle_Click); - // - // mnuRunPpuCycle - // - this.mnuRunPpuCycle.Image = global::Mesen.GUI.Properties.Resources.RunPpuCycle; - this.mnuRunPpuCycle.Name = "mnuRunPpuCycle"; - this.mnuRunPpuCycle.Size = new System.Drawing.Size(212, 22); - this.mnuRunPpuCycle.Text = "Run one PPU cycle"; - this.mnuRunPpuCycle.Click += new System.EventHandler(this.mnuRunPpuCycle_Click); - // - // mnuRunScanline - // - this.mnuRunScanline.Image = global::Mesen.GUI.Properties.Resources.RunPpuScanline; - this.mnuRunScanline.Name = "mnuRunScanline"; - this.mnuRunScanline.Size = new System.Drawing.Size(212, 22); - this.mnuRunScanline.Text = "Run one scanline"; - this.mnuRunScanline.Click += new System.EventHandler(this.mnuRunScanline_Click); - // - // mnuRunOneFrame - // - this.mnuRunOneFrame.Image = global::Mesen.GUI.Properties.Resources.RunPpuFrame; - this.mnuRunOneFrame.Name = "mnuRunOneFrame"; - this.mnuRunOneFrame.Size = new System.Drawing.Size(212, 22); - this.mnuRunOneFrame.Text = "Run one frame"; - this.mnuRunOneFrame.Click += new System.EventHandler(this.mnuRunOneFrame_Click); - // - // toolStripMenuItem8 - // - this.toolStripMenuItem8.Name = "toolStripMenuItem8"; - this.toolStripMenuItem8.Size = new System.Drawing.Size(209, 6); - // - // mnuBreakIn - // - this.mnuBreakIn.Name = "mnuBreakIn"; - this.mnuBreakIn.Size = new System.Drawing.Size(212, 22); - this.mnuBreakIn.Text = "Break in..."; - this.mnuBreakIn.Click += new System.EventHandler(this.mnuBreakIn_Click); - // - // mnuBreakOn - // - this.mnuBreakOn.Name = "mnuBreakOn"; - this.mnuBreakOn.Size = new System.Drawing.Size(212, 22); - this.mnuBreakOn.Text = "Break on..."; - this.mnuBreakOn.Click += new System.EventHandler(this.mnuBreakOn_Click); - // - // mnuSearch - // - this.mnuSearch.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.debugToolStripMenuItem.Name = "debugToolStripMenuItem"; + this.debugToolStripMenuItem.Size = new System.Drawing.Size(58, 20); + this.debugToolStripMenuItem.Text = "Debug"; + // + // mnuContinue + // + this.mnuContinue.Enabled = false; + this.mnuContinue.Image = global::Mesen.GUI.Properties.Resources.Play; + this.mnuContinue.Name = "mnuContinue"; + this.mnuContinue.Size = new System.Drawing.Size(224, 22); + this.mnuContinue.Text = "Continue"; + this.mnuContinue.Click += new System.EventHandler(this.mnuContinue_Click); + // + // mnuBreak + // + this.mnuBreak.Enabled = false; + this.mnuBreak.Image = global::Mesen.GUI.Properties.Resources.Pause; + this.mnuBreak.Name = "mnuBreak"; + this.mnuBreak.ShortcutKeyDisplayString = ""; + this.mnuBreak.Size = new System.Drawing.Size(224, 22); + this.mnuBreak.Text = "Break"; + this.mnuBreak.Click += new System.EventHandler(this.mnuBreak_Click); + // + // mnuStepInto + // + this.mnuStepInto.Image = global::Mesen.GUI.Properties.Resources.StepInto; + this.mnuStepInto.Name = "mnuStepInto"; + this.mnuStepInto.Size = new System.Drawing.Size(224, 22); + this.mnuStepInto.Text = "Step Into"; + this.mnuStepInto.Click += new System.EventHandler(this.mnuStepInto_Click); + // + // mnuStepOver + // + this.mnuStepOver.Image = global::Mesen.GUI.Properties.Resources.StepOver; + this.mnuStepOver.Name = "mnuStepOver"; + this.mnuStepOver.Size = new System.Drawing.Size(224, 22); + this.mnuStepOver.Text = "Step Over"; + this.mnuStepOver.Click += new System.EventHandler(this.mnuStepOver_Click); + // + // mnuStepOut + // + this.mnuStepOut.Image = global::Mesen.GUI.Properties.Resources.StepOut; + this.mnuStepOut.Name = "mnuStepOut"; + this.mnuStepOut.Size = new System.Drawing.Size(224, 22); + this.mnuStepOut.Text = "Step Out"; + this.mnuStepOut.Click += new System.EventHandler(this.mnuStepOut_Click); + // + // mnuStepBack + // + this.mnuStepBack.Image = global::Mesen.GUI.Properties.Resources.StepBack; + this.mnuStepBack.Name = "mnuStepBack"; + this.mnuStepBack.Size = new System.Drawing.Size(224, 22); + this.mnuStepBack.Text = "Step Back"; + this.mnuStepBack.Click += new System.EventHandler(this.mnuStepBack_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(221, 6); + // + // mnuReset + // + this.mnuReset.Image = global::Mesen.GUI.Properties.Resources.Reset; + this.mnuReset.Name = "mnuReset"; + this.mnuReset.Size = new System.Drawing.Size(224, 22); + this.mnuReset.Text = "Reset"; + this.mnuReset.Click += new System.EventHandler(this.mnuReset_Click); + // + // mnuPowerCycle + // + this.mnuPowerCycle.Image = global::Mesen.GUI.Properties.Resources.PowerCycle; + this.mnuPowerCycle.Name = "mnuPowerCycle"; + this.mnuPowerCycle.Size = new System.Drawing.Size(224, 22); + this.mnuPowerCycle.Text = "Power Cycle"; + this.mnuPowerCycle.Click += new System.EventHandler(this.mnuPowerCycle_Click); + // + // toolStripMenuItem24 + // + this.toolStripMenuItem24.Name = "toolStripMenuItem24"; + this.toolStripMenuItem24.Size = new System.Drawing.Size(221, 6); + // + // mnuToggleBreakpoint + // + this.mnuToggleBreakpoint.Image = global::Mesen.GUI.Properties.Resources.Breakpoint; + this.mnuToggleBreakpoint.Name = "mnuToggleBreakpoint"; + this.mnuToggleBreakpoint.Size = new System.Drawing.Size(224, 22); + this.mnuToggleBreakpoint.Text = "Toggle Breakpoint"; + this.mnuToggleBreakpoint.Click += new System.EventHandler(this.mnuToggleBreakpoint_Click); + // + // mnuDisableEnableBreakpoint + // + this.mnuDisableEnableBreakpoint.Image = global::Mesen.GUI.Properties.Resources.BreakpointDisabled; + this.mnuDisableEnableBreakpoint.Name = "mnuDisableEnableBreakpoint"; + this.mnuDisableEnableBreakpoint.Size = new System.Drawing.Size(224, 22); + this.mnuDisableEnableBreakpoint.Text = "Disable/Enable Breakpoint"; + this.mnuDisableEnableBreakpoint.Click += new System.EventHandler(this.mnuDisableEnableBreakpoint_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(221, 6); + // + // mnuRunCpuCycle + // + this.mnuRunCpuCycle.Image = global::Mesen.GUI.Properties.Resources.JumpTarget; + this.mnuRunCpuCycle.Name = "mnuRunCpuCycle"; + this.mnuRunCpuCycle.Size = new System.Drawing.Size(224, 22); + this.mnuRunCpuCycle.Text = "Run one CPU cycle"; + this.mnuRunCpuCycle.Click += new System.EventHandler(this.mnuRunCpuCycle_Click); + // + // mnuRunPpuCycle + // + this.mnuRunPpuCycle.Image = global::Mesen.GUI.Properties.Resources.RunPpuCycle; + this.mnuRunPpuCycle.Name = "mnuRunPpuCycle"; + this.mnuRunPpuCycle.Size = new System.Drawing.Size(224, 22); + this.mnuRunPpuCycle.Text = "Run one PPU cycle"; + this.mnuRunPpuCycle.Click += new System.EventHandler(this.mnuRunPpuCycle_Click); + // + // mnuRunScanline + // + this.mnuRunScanline.Image = global::Mesen.GUI.Properties.Resources.RunPpuScanline; + this.mnuRunScanline.Name = "mnuRunScanline"; + this.mnuRunScanline.Size = new System.Drawing.Size(224, 22); + this.mnuRunScanline.Text = "Run one scanline"; + this.mnuRunScanline.Click += new System.EventHandler(this.mnuRunScanline_Click); + // + // mnuRunOneFrame + // + this.mnuRunOneFrame.Image = global::Mesen.GUI.Properties.Resources.RunPpuFrame; + this.mnuRunOneFrame.Name = "mnuRunOneFrame"; + this.mnuRunOneFrame.Size = new System.Drawing.Size(224, 22); + this.mnuRunOneFrame.Text = "Run one frame"; + this.mnuRunOneFrame.Click += new System.EventHandler(this.mnuRunOneFrame_Click); + // + // toolStripMenuItem8 + // + this.toolStripMenuItem8.Name = "toolStripMenuItem8"; + this.toolStripMenuItem8.Size = new System.Drawing.Size(221, 6); + // + // mnuBreakIn + // + this.mnuBreakIn.Name = "mnuBreakIn"; + this.mnuBreakIn.Size = new System.Drawing.Size(224, 22); + this.mnuBreakIn.Text = "Break in..."; + this.mnuBreakIn.Click += new System.EventHandler(this.mnuBreakIn_Click); + // + // mnuBreakOn + // + this.mnuBreakOn.Name = "mnuBreakOn"; + this.mnuBreakOn.Size = new System.Drawing.Size(224, 22); + this.mnuBreakOn.Text = "Break on..."; + this.mnuBreakOn.Click += new System.EventHandler(this.mnuBreakOn_Click); + // + // mnuSearch + // + this.mnuSearch.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuGoToAll, this.mnuGoToAddress, this.mnuGoTo, @@ -942,75 +943,75 @@ namespace Mesen.GUI.Debugger this.mnuFindPrev, this.toolStripMenuItem9, this.mnuFindAllOccurrences}); - this.mnuSearch.Name = "mnuSearch"; - this.mnuSearch.Size = new System.Drawing.Size(54, 20); - this.mnuSearch.Text = "Search"; - this.mnuSearch.DropDownOpening += new System.EventHandler(this.mnuSearch_DropDownOpening); - // - // mnuGoToAll - // - this.mnuGoToAll.Name = "mnuGoToAll"; - this.mnuGoToAll.Size = new System.Drawing.Size(183, 22); - this.mnuGoToAll.Text = "Go to All"; - this.mnuGoToAll.Click += new System.EventHandler(this.mnuGoToAll_Click); - // - // mnuGoToAddress - // - this.mnuGoToAddress.Name = "mnuGoToAddress"; - this.mnuGoToAddress.Size = new System.Drawing.Size(183, 22); - this.mnuGoToAddress.Text = "Go to Address"; - this.mnuGoToAddress.Click += new System.EventHandler(this.mnuGoToAddress_Click); - // - // mnuGoTo - // - this.mnuGoTo.Name = "mnuGoTo"; - this.mnuGoTo.Size = new System.Drawing.Size(183, 22); - this.mnuGoTo.Text = "Go to..."; - // - // toolStripMenuItem29 - // - this.toolStripMenuItem29.Name = "toolStripMenuItem29"; - this.toolStripMenuItem29.Size = new System.Drawing.Size(180, 6); - // - // mnuFind - // - this.mnuFind.Image = global::Mesen.GUI.Properties.Resources.Find; - this.mnuFind.Name = "mnuFind"; - this.mnuFind.Size = new System.Drawing.Size(183, 22); - this.mnuFind.Text = "Find..."; - this.mnuFind.Click += new System.EventHandler(this.mnuFind_Click); - // - // mnuFindNext - // - this.mnuFindNext.Image = global::Mesen.GUI.Properties.Resources.NextArrow; - this.mnuFindNext.Name = "mnuFindNext"; - this.mnuFindNext.Size = new System.Drawing.Size(183, 22); - this.mnuFindNext.Text = "Find Next"; - this.mnuFindNext.Click += new System.EventHandler(this.mnuFindNext_Click); - // - // mnuFindPrev - // - this.mnuFindPrev.Image = global::Mesen.GUI.Properties.Resources.PreviousArrow; - this.mnuFindPrev.Name = "mnuFindPrev"; - this.mnuFindPrev.Size = new System.Drawing.Size(183, 22); - this.mnuFindPrev.Text = "Find Previous"; - this.mnuFindPrev.Click += new System.EventHandler(this.mnuFindPrev_Click); - // - // toolStripMenuItem9 - // - this.toolStripMenuItem9.Name = "toolStripMenuItem9"; - this.toolStripMenuItem9.Size = new System.Drawing.Size(180, 6); - // - // mnuFindAllOccurrences - // - this.mnuFindAllOccurrences.Name = "mnuFindAllOccurrences"; - this.mnuFindAllOccurrences.Size = new System.Drawing.Size(183, 22); - this.mnuFindAllOccurrences.Text = "Find All Occurrences"; - this.mnuFindAllOccurrences.Click += new System.EventHandler(this.mnuFindAllOccurrences_Click); - // - // mnuOptions - // - this.mnuOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuSearch.Name = "mnuSearch"; + this.mnuSearch.Size = new System.Drawing.Size(57, 20); + this.mnuSearch.Text = "Search"; + this.mnuSearch.DropDownOpening += new System.EventHandler(this.mnuSearch_DropDownOpening); + // + // mnuGoToAll + // + this.mnuGoToAll.Name = "mnuGoToAll"; + this.mnuGoToAll.Size = new System.Drawing.Size(187, 22); + this.mnuGoToAll.Text = "Go to All"; + this.mnuGoToAll.Click += new System.EventHandler(this.mnuGoToAll_Click); + // + // mnuGoToAddress + // + this.mnuGoToAddress.Name = "mnuGoToAddress"; + this.mnuGoToAddress.Size = new System.Drawing.Size(187, 22); + this.mnuGoToAddress.Text = "Go to Address"; + this.mnuGoToAddress.Click += new System.EventHandler(this.mnuGoToAddress_Click); + // + // mnuGoTo + // + this.mnuGoTo.Name = "mnuGoTo"; + this.mnuGoTo.Size = new System.Drawing.Size(187, 22); + this.mnuGoTo.Text = "Go to..."; + // + // toolStripMenuItem29 + // + this.toolStripMenuItem29.Name = "toolStripMenuItem29"; + this.toolStripMenuItem29.Size = new System.Drawing.Size(184, 6); + // + // mnuFind + // + this.mnuFind.Image = global::Mesen.GUI.Properties.Resources.Find; + this.mnuFind.Name = "mnuFind"; + this.mnuFind.Size = new System.Drawing.Size(187, 22); + this.mnuFind.Text = "Find..."; + this.mnuFind.Click += new System.EventHandler(this.mnuFind_Click); + // + // mnuFindNext + // + this.mnuFindNext.Image = global::Mesen.GUI.Properties.Resources.NextArrow; + this.mnuFindNext.Name = "mnuFindNext"; + this.mnuFindNext.Size = new System.Drawing.Size(187, 22); + this.mnuFindNext.Text = "Find Next"; + this.mnuFindNext.Click += new System.EventHandler(this.mnuFindNext_Click); + // + // mnuFindPrev + // + this.mnuFindPrev.Image = global::Mesen.GUI.Properties.Resources.PreviousArrow; + this.mnuFindPrev.Name = "mnuFindPrev"; + this.mnuFindPrev.Size = new System.Drawing.Size(187, 22); + this.mnuFindPrev.Text = "Find Previous"; + this.mnuFindPrev.Click += new System.EventHandler(this.mnuFindPrev_Click); + // + // toolStripMenuItem9 + // + this.toolStripMenuItem9.Name = "toolStripMenuItem9"; + this.toolStripMenuItem9.Size = new System.Drawing.Size(184, 6); + // + // mnuFindAllOccurrences + // + this.mnuFindAllOccurrences.Name = "mnuFindAllOccurrences"; + this.mnuFindAllOccurrences.Size = new System.Drawing.Size(187, 22); + this.mnuFindAllOccurrences.Text = "Find All Occurrences"; + this.mnuFindAllOccurrences.Click += new System.EventHandler(this.mnuFindAllOccurrences_Click); + // + // mnuOptions + // + this.mnuOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuDisassemblyOptions, this.mnuBreakOptions, this.toolStripMenuItem12, @@ -1040,131 +1041,132 @@ namespace Mesen.GUI.Debugger this.toolStripSeparator2, this.mnuConfigureExternalEditor, this.mnuPreferences}); - this.mnuOptions.Name = "mnuOptions"; - this.mnuOptions.Size = new System.Drawing.Size(61, 20); - this.mnuOptions.Text = "Options"; - // - // mnuDisassemblyOptions - // - this.mnuDisassemblyOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuOptions.Name = "mnuOptions"; + this.mnuOptions.Size = new System.Drawing.Size(64, 20); + this.mnuOptions.Text = "Options"; + // + // mnuDisassemblyOptions + // + this.mnuDisassemblyOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuDisassemble, this.mnuShow, this.toolStripMenuItem7, this.mnuDisplayOpCodesInLowerCase, this.mnuShowEffectiveAddresses, this.mnuShowMemoryValues}); - this.mnuDisassemblyOptions.Name = "mnuDisassemblyOptions"; - this.mnuDisassemblyOptions.Size = new System.Drawing.Size(266, 22); - this.mnuDisassemblyOptions.Text = "Disassembly Options"; - // - // mnuDisassemble - // - this.mnuDisassemble.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuDisassemblyOptions.Name = "mnuDisassemblyOptions"; + this.mnuDisassemblyOptions.Size = new System.Drawing.Size(277, 22); + this.mnuDisassemblyOptions.Text = "Disassembly Options"; + // + // mnuDisassemble + // + this.mnuDisassemble.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuDisassembleVerifiedCode, this.mnuDisassembleVerifiedData, this.mnuDisassembleUnidentifiedData}); - this.mnuDisassemble.Name = "mnuDisassemble"; - this.mnuDisassemble.Size = new System.Drawing.Size(236, 22); - this.mnuDisassemble.Text = "Disassemble..."; - // - // mnuDisassembleVerifiedCode - // - this.mnuDisassembleVerifiedCode.Checked = true; - this.mnuDisassembleVerifiedCode.CheckState = System.Windows.Forms.CheckState.Checked; - this.mnuDisassembleVerifiedCode.Enabled = false; - this.mnuDisassembleVerifiedCode.Name = "mnuDisassembleVerifiedCode"; - this.mnuDisassembleVerifiedCode.Size = new System.Drawing.Size(250, 22); - this.mnuDisassembleVerifiedCode.Text = "Verified Code"; - // - // mnuDisassembleVerifiedData - // - this.mnuDisassembleVerifiedData.CheckOnClick = true; - this.mnuDisassembleVerifiedData.Name = "mnuDisassembleVerifiedData"; - this.mnuDisassembleVerifiedData.Size = new System.Drawing.Size(250, 22); - this.mnuDisassembleVerifiedData.Text = "Verified Data (not recommended)"; - this.mnuDisassembleVerifiedData.Click += new System.EventHandler(this.mnuDisassembleVerifiedData_Click); - // - // mnuDisassembleUnidentifiedData - // - this.mnuDisassembleUnidentifiedData.CheckOnClick = true; - this.mnuDisassembleUnidentifiedData.Name = "mnuDisassembleUnidentifiedData"; - this.mnuDisassembleUnidentifiedData.Size = new System.Drawing.Size(250, 22); - this.mnuDisassembleUnidentifiedData.Text = "Unidentified Code/Data"; - this.mnuDisassembleUnidentifiedData.Click += new System.EventHandler(this.mnuDisassembleUnidentifiedData_Click); - // - // mnuShow - // - this.mnuShow.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuDisassemble.Name = "mnuDisassemble"; + this.mnuDisassemble.Size = new System.Drawing.Size(247, 22); + this.mnuDisassemble.Text = "Disassemble..."; + // + // mnuDisassembleVerifiedCode + // + this.mnuDisassembleVerifiedCode.Checked = true; + this.mnuDisassembleVerifiedCode.CheckState = System.Windows.Forms.CheckState.Checked; + this.mnuDisassembleVerifiedCode.Enabled = false; + this.mnuDisassembleVerifiedCode.Name = "mnuDisassembleVerifiedCode"; + this.mnuDisassembleVerifiedCode.Size = new System.Drawing.Size(265, 22); + this.mnuDisassembleVerifiedCode.Text = "Verified Code"; + // + // mnuDisassembleVerifiedData + // + this.mnuDisassembleVerifiedData.CheckOnClick = true; + this.mnuDisassembleVerifiedData.Name = "mnuDisassembleVerifiedData"; + this.mnuDisassembleVerifiedData.Size = new System.Drawing.Size(265, 22); + this.mnuDisassembleVerifiedData.Text = "Verified Data (not recommended)"; + this.mnuDisassembleVerifiedData.Click += new System.EventHandler(this.mnuDisassembleVerifiedData_Click); + // + // mnuDisassembleUnidentifiedData + // + this.mnuDisassembleUnidentifiedData.CheckOnClick = true; + this.mnuDisassembleUnidentifiedData.Name = "mnuDisassembleUnidentifiedData"; + this.mnuDisassembleUnidentifiedData.Size = new System.Drawing.Size(265, 22); + this.mnuDisassembleUnidentifiedData.Text = "Unidentified Code/Data"; + this.mnuDisassembleUnidentifiedData.Click += new System.EventHandler(this.mnuDisassembleUnidentifiedData_Click); + // + // mnuShow + // + this.mnuShow.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuShowVerifiedCode, this.mnuShowVerifiedData, this.mnuShowUnidentifiedData}); - this.mnuShow.Name = "mnuShow"; - this.mnuShow.Size = new System.Drawing.Size(236, 22); - this.mnuShow.Text = "Show..."; - // - // mnuShowVerifiedCode - // - this.mnuShowVerifiedCode.Checked = true; - this.mnuShowVerifiedCode.CheckState = System.Windows.Forms.CheckState.Checked; - this.mnuShowVerifiedCode.Enabled = false; - this.mnuShowVerifiedCode.Name = "mnuShowVerifiedCode"; - this.mnuShowVerifiedCode.Size = new System.Drawing.Size(199, 22); - this.mnuShowVerifiedCode.Text = "Verified Code"; - // - // mnuShowVerifiedData - // - this.mnuShowVerifiedData.CheckOnClick = true; - this.mnuShowVerifiedData.Image = global::Mesen.GUI.Properties.Resources.VerifiedData; - this.mnuShowVerifiedData.Name = "mnuShowVerifiedData"; - this.mnuShowVerifiedData.Size = new System.Drawing.Size(199, 22); - this.mnuShowVerifiedData.Text = "Verified Data"; - this.mnuShowVerifiedData.Click += new System.EventHandler(this.mnuShowVerifiedData_Click); - // - // mnuShowUnidentifiedData - // - this.mnuShowUnidentifiedData.CheckOnClick = true; - this.mnuShowUnidentifiedData.Image = global::Mesen.GUI.Properties.Resources.UnidentifiedData; - this.mnuShowUnidentifiedData.Name = "mnuShowUnidentifiedData"; - this.mnuShowUnidentifiedData.Size = new System.Drawing.Size(199, 22); - this.mnuShowUnidentifiedData.Text = "Unidentified Code/Data"; - this.mnuShowUnidentifiedData.Click += new System.EventHandler(this.mnuShowUnidentifiedData_Click); - // - // toolStripMenuItem7 - // - this.toolStripMenuItem7.Name = "toolStripMenuItem7"; - this.toolStripMenuItem7.Size = new System.Drawing.Size(233, 6); - // - // mnuDisplayOpCodesInLowerCase - // - this.mnuDisplayOpCodesInLowerCase.CheckOnClick = true; - this.mnuDisplayOpCodesInLowerCase.Name = "mnuDisplayOpCodesInLowerCase"; - this.mnuDisplayOpCodesInLowerCase.Size = new System.Drawing.Size(236, 22); - this.mnuDisplayOpCodesInLowerCase.Text = "Display OP codes in lower case"; - this.mnuDisplayOpCodesInLowerCase.Click += new System.EventHandler(this.mnuDisplayOpCodesInLowerCase_Click); - // - // mnuShowEffectiveAddresses - // - this.mnuShowEffectiveAddresses.CheckOnClick = true; - this.mnuShowEffectiveAddresses.Name = "mnuShowEffectiveAddresses"; - this.mnuShowEffectiveAddresses.Size = new System.Drawing.Size(236, 22); - this.mnuShowEffectiveAddresses.Text = "Show Effective Addresses"; - this.mnuShowEffectiveAddresses.Click += new System.EventHandler(this.mnuShowEffectiveAddresses_Click); - // - // mnuShowMemoryValues - // - this.mnuShowMemoryValues.CheckOnClick = true; - this.mnuShowMemoryValues.Name = "mnuShowMemoryValues"; - this.mnuShowMemoryValues.Size = new System.Drawing.Size(236, 22); - this.mnuShowMemoryValues.Text = "Show Memory Values"; - this.mnuShowMemoryValues.Click += new System.EventHandler(this.mnuShowMemoryValues_Click); - // - // mnuBreakOptions - // - this.mnuBreakOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuShow.Name = "mnuShow"; + this.mnuShow.Size = new System.Drawing.Size(247, 22); + this.mnuShow.Text = "Show..."; + // + // mnuShowVerifiedCode + // + this.mnuShowVerifiedCode.Checked = true; + this.mnuShowVerifiedCode.CheckState = System.Windows.Forms.CheckState.Checked; + this.mnuShowVerifiedCode.Enabled = false; + this.mnuShowVerifiedCode.Name = "mnuShowVerifiedCode"; + this.mnuShowVerifiedCode.Size = new System.Drawing.Size(210, 22); + this.mnuShowVerifiedCode.Text = "Verified Code"; + // + // mnuShowVerifiedData + // + this.mnuShowVerifiedData.CheckOnClick = true; + this.mnuShowVerifiedData.Image = global::Mesen.GUI.Properties.Resources.VerifiedData; + this.mnuShowVerifiedData.Name = "mnuShowVerifiedData"; + this.mnuShowVerifiedData.Size = new System.Drawing.Size(210, 22); + this.mnuShowVerifiedData.Text = "Verified Data"; + this.mnuShowVerifiedData.Click += new System.EventHandler(this.mnuShowVerifiedData_Click); + // + // mnuShowUnidentifiedData + // + this.mnuShowUnidentifiedData.CheckOnClick = true; + this.mnuShowUnidentifiedData.Image = global::Mesen.GUI.Properties.Resources.UnidentifiedData; + this.mnuShowUnidentifiedData.Name = "mnuShowUnidentifiedData"; + this.mnuShowUnidentifiedData.Size = new System.Drawing.Size(210, 22); + this.mnuShowUnidentifiedData.Text = "Unidentified Code/Data"; + this.mnuShowUnidentifiedData.Click += new System.EventHandler(this.mnuShowUnidentifiedData_Click); + // + // toolStripMenuItem7 + // + this.toolStripMenuItem7.Name = "toolStripMenuItem7"; + this.toolStripMenuItem7.Size = new System.Drawing.Size(244, 6); + // + // mnuDisplayOpCodesInLowerCase + // + this.mnuDisplayOpCodesInLowerCase.CheckOnClick = true; + this.mnuDisplayOpCodesInLowerCase.Name = "mnuDisplayOpCodesInLowerCase"; + this.mnuDisplayOpCodesInLowerCase.Size = new System.Drawing.Size(247, 22); + this.mnuDisplayOpCodesInLowerCase.Text = "Display OP codes in lower case"; + this.mnuDisplayOpCodesInLowerCase.Click += new System.EventHandler(this.mnuDisplayOpCodesInLowerCase_Click); + // + // mnuShowEffectiveAddresses + // + this.mnuShowEffectiveAddresses.CheckOnClick = true; + this.mnuShowEffectiveAddresses.Name = "mnuShowEffectiveAddresses"; + this.mnuShowEffectiveAddresses.Size = new System.Drawing.Size(247, 22); + this.mnuShowEffectiveAddresses.Text = "Show Effective Addresses"; + this.mnuShowEffectiveAddresses.Click += new System.EventHandler(this.mnuShowEffectiveAddresses_Click); + // + // mnuShowMemoryValues + // + this.mnuShowMemoryValues.CheckOnClick = true; + this.mnuShowMemoryValues.Name = "mnuShowMemoryValues"; + this.mnuShowMemoryValues.Size = new System.Drawing.Size(247, 22); + this.mnuShowMemoryValues.Text = "Show Memory Values"; + this.mnuShowMemoryValues.Click += new System.EventHandler(this.mnuShowMemoryValues_Click); + // + // mnuBreakOptions + // + this.mnuBreakOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuBreakOnReset, this.mnuBreakOnUnofficialOpcodes, this.mnuBreakOnBrk, this.mnuBreakOnCrash, + this.mnuBreakOnUnlogged, this.sepBreakNsfOptions, this.mnuBreakOnInit, this.mnuBreakOnPlay, @@ -1181,499 +1183,499 @@ namespace Mesen.GUI.Debugger this.mnuBringToFrontOnPause, this.toolStripMenuItem28, this.mnuEnableSubInstructionBreakpoints}); - this.mnuBreakOptions.Name = "mnuBreakOptions"; - this.mnuBreakOptions.Size = new System.Drawing.Size(266, 22); - this.mnuBreakOptions.Text = "Break Options"; - this.mnuBreakOptions.DropDownOpening += new System.EventHandler(this.mnuBreakOptions_DropDownOpening); - // - // mnuBreakOnReset - // - this.mnuBreakOnReset.CheckOnClick = true; - this.mnuBreakOnReset.Name = "mnuBreakOnReset"; - this.mnuBreakOnReset.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnReset.Text = "Break on power/reset"; - this.mnuBreakOnReset.Click += new System.EventHandler(this.mnuBreakOnReset_Click); - // - // mnuBreakOnUnofficialOpcodes - // - this.mnuBreakOnUnofficialOpcodes.CheckOnClick = true; - this.mnuBreakOnUnofficialOpcodes.Name = "mnuBreakOnUnofficialOpcodes"; - this.mnuBreakOnUnofficialOpcodes.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnUnofficialOpcodes.Text = "Break on unofficial opcodes"; - this.mnuBreakOnUnofficialOpcodes.Click += new System.EventHandler(this.mnuBreakOnUnofficialOpcodes_Click); - // - // mnuBreakOnBrk - // - this.mnuBreakOnBrk.CheckOnClick = true; - this.mnuBreakOnBrk.Name = "mnuBreakOnBrk"; - this.mnuBreakOnBrk.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnBrk.Text = "Break on BRK"; - this.mnuBreakOnBrk.Click += new System.EventHandler(this.mnuBreakOnBrk_Click); - // - // mnuBreakOnCrash - // - this.mnuBreakOnCrash.CheckOnClick = true; - this.mnuBreakOnCrash.Name = "mnuBreakOnCrash"; - this.mnuBreakOnCrash.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnCrash.Text = "Break on CPU crash"; - this.mnuBreakOnCrash.Click += new System.EventHandler(this.mnuBreakOnCrash_Click); - // - // sepBreakNsfOptions - // - this.sepBreakNsfOptions.Name = "sepBreakNsfOptions"; - this.sepBreakNsfOptions.Size = new System.Drawing.Size(258, 6); - // - // mnuBreakOnInit - // - this.mnuBreakOnInit.CheckOnClick = true; - this.mnuBreakOnInit.Name = "mnuBreakOnInit"; - this.mnuBreakOnInit.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnInit.Text = "Break on Init (NSF)"; - this.mnuBreakOnInit.Click += new System.EventHandler(this.mnuBreakOnInit_Click); - // - // mnuBreakOnPlay - // - this.mnuBreakOnPlay.CheckOnClick = true; - this.mnuBreakOnPlay.Name = "mnuBreakOnPlay"; - this.mnuBreakOnPlay.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnPlay.Text = "Break on Play (NSF)"; - this.mnuBreakOnPlay.Click += new System.EventHandler(this.mnuBreakOnPlay_Click); - // - // toolStripMenuItem26 - // - this.toolStripMenuItem26.Name = "toolStripMenuItem26"; - this.toolStripMenuItem26.Size = new System.Drawing.Size(258, 6); - // - // mnuBreakOnBusConflict - // - this.mnuBreakOnBusConflict.CheckOnClick = true; - this.mnuBreakOnBusConflict.Name = "mnuBreakOnBusConflict"; - this.mnuBreakOnBusConflict.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnBusConflict.Text = "Break on bus conflict"; - this.mnuBreakOnBusConflict.Click += new System.EventHandler(this.mnuBreakOnBusConflict_Click); - // - // mnuBreakOnDecayedOamRead - // - this.mnuBreakOnDecayedOamRead.CheckOnClick = true; - this.mnuBreakOnDecayedOamRead.Name = "mnuBreakOnDecayedOamRead"; - this.mnuBreakOnDecayedOamRead.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnDecayedOamRead.Text = "Break on decayed OAM read"; - this.mnuBreakOnDecayedOamRead.Click += new System.EventHandler(this.mnuBreakOnDecayedOamRead_Click); - // - // mnuBreakOnPpu2006ScrollGlitch - // - this.mnuBreakOnPpu2006ScrollGlitch.CheckOnClick = true; - this.mnuBreakOnPpu2006ScrollGlitch.Name = "mnuBreakOnPpu2006ScrollGlitch"; - this.mnuBreakOnPpu2006ScrollGlitch.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnPpu2006ScrollGlitch.Text = "Break on PPU $2006 scroll glitch"; - this.mnuBreakOnPpu2006ScrollGlitch.Click += new System.EventHandler(this.mnuBreakOnPpu2006ScrollGlitch_Click); - // - // mnuBreakOnUninitMemoryRead - // - this.mnuBreakOnUninitMemoryRead.CheckOnClick = true; - this.mnuBreakOnUninitMemoryRead.Name = "mnuBreakOnUninitMemoryRead"; - this.mnuBreakOnUninitMemoryRead.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnUninitMemoryRead.Text = "Break on uninitialized memory read"; - this.mnuBreakOnUninitMemoryRead.Click += new System.EventHandler(this.mnuBreakOnUninitMemoryRead_Click); - // - // toolStripMenuItem15 - // - this.toolStripMenuItem15.Name = "toolStripMenuItem15"; - this.toolStripMenuItem15.Size = new System.Drawing.Size(258, 6); - // - // mnuBreakOnOpen - // - this.mnuBreakOnOpen.CheckOnClick = true; - this.mnuBreakOnOpen.Name = "mnuBreakOnOpen"; - this.mnuBreakOnOpen.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnOpen.Text = "Break when debugger is opened"; - this.mnuBreakOnOpen.Click += new System.EventHandler(this.mnuBreakOnOpen_Click); - // - // mnuBreakOnDebuggerFocus - // - this.mnuBreakOnDebuggerFocus.CheckOnClick = true; - this.mnuBreakOnDebuggerFocus.Name = "mnuBreakOnDebuggerFocus"; - this.mnuBreakOnDebuggerFocus.Size = new System.Drawing.Size(261, 22); - this.mnuBreakOnDebuggerFocus.Text = "Break on debugger focus"; - this.mnuBreakOnDebuggerFocus.Click += new System.EventHandler(this.mnuBreakOnDebuggerFocus_Click); - // - // toolStripMenuItem20 - // - this.toolStripMenuItem20.Name = "toolStripMenuItem20"; - this.toolStripMenuItem20.Size = new System.Drawing.Size(258, 6); - // - // mnuBringToFrontOnBreak - // - this.mnuBringToFrontOnBreak.CheckOnClick = true; - this.mnuBringToFrontOnBreak.Name = "mnuBringToFrontOnBreak"; - this.mnuBringToFrontOnBreak.Size = new System.Drawing.Size(261, 22); - this.mnuBringToFrontOnBreak.Text = "Bring debugger to front on break"; - this.mnuBringToFrontOnBreak.Click += new System.EventHandler(this.mnuBringToFrontOnBreak_Click); - // - // mnuBringToFrontOnPause - // - this.mnuBringToFrontOnPause.CheckOnClick = true; - this.mnuBringToFrontOnPause.Name = "mnuBringToFrontOnPause"; - this.mnuBringToFrontOnPause.Size = new System.Drawing.Size(261, 22); - this.mnuBringToFrontOnPause.Text = "Bring debugger to front on pause"; - this.mnuBringToFrontOnPause.Click += new System.EventHandler(this.mnuBringToFrontOnPause_Click); - // - // toolStripMenuItem28 - // - this.toolStripMenuItem28.Name = "toolStripMenuItem28"; - this.toolStripMenuItem28.Size = new System.Drawing.Size(258, 6); - // - // mnuEnableSubInstructionBreakpoints - // - this.mnuEnableSubInstructionBreakpoints.CheckOnClick = true; - this.mnuEnableSubInstructionBreakpoints.Name = "mnuEnableSubInstructionBreakpoints"; - this.mnuEnableSubInstructionBreakpoints.Size = new System.Drawing.Size(261, 22); - this.mnuEnableSubInstructionBreakpoints.Text = "Enable sub-instruction breakpoints"; - this.mnuEnableSubInstructionBreakpoints.Click += new System.EventHandler(this.mnuBreakOnFirstCycle_Click); - // - // toolStripMenuItem12 - // - this.toolStripMenuItem12.Name = "toolStripMenuItem12"; - this.toolStripMenuItem12.Size = new System.Drawing.Size(263, 6); - // - // mnuShowOptions - // - this.mnuShowOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuBreakOptions.Name = "mnuBreakOptions"; + this.mnuBreakOptions.Size = new System.Drawing.Size(277, 22); + this.mnuBreakOptions.Text = "Break Options"; + this.mnuBreakOptions.DropDownOpening += new System.EventHandler(this.mnuBreakOptions_DropDownOpening); + // + // mnuBreakOnReset + // + this.mnuBreakOnReset.CheckOnClick = true; + this.mnuBreakOnReset.Name = "mnuBreakOnReset"; + this.mnuBreakOnReset.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnReset.Text = "Break on power/reset"; + this.mnuBreakOnReset.Click += new System.EventHandler(this.mnuBreakOnReset_Click); + // + // mnuBreakOnUnofficialOpcodes + // + this.mnuBreakOnUnofficialOpcodes.CheckOnClick = true; + this.mnuBreakOnUnofficialOpcodes.Name = "mnuBreakOnUnofficialOpcodes"; + this.mnuBreakOnUnofficialOpcodes.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnUnofficialOpcodes.Text = "Break on unofficial opcodes"; + this.mnuBreakOnUnofficialOpcodes.Click += new System.EventHandler(this.mnuBreakOnUnofficialOpcodes_Click); + // + // mnuBreakOnBrk + // + this.mnuBreakOnBrk.CheckOnClick = true; + this.mnuBreakOnBrk.Name = "mnuBreakOnBrk"; + this.mnuBreakOnBrk.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnBrk.Text = "Break on BRK"; + this.mnuBreakOnBrk.Click += new System.EventHandler(this.mnuBreakOnBrk_Click); + // + // mnuBreakOnCrash + // + this.mnuBreakOnCrash.CheckOnClick = true; + this.mnuBreakOnCrash.Name = "mnuBreakOnCrash"; + this.mnuBreakOnCrash.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnCrash.Text = "Break on CPU crash"; + this.mnuBreakOnCrash.Click += new System.EventHandler(this.mnuBreakOnCrash_Click); + // + // sepBreakNsfOptions + // + this.sepBreakNsfOptions.Name = "sepBreakNsfOptions"; + this.sepBreakNsfOptions.Size = new System.Drawing.Size(270, 6); + // + // mnuBreakOnInit + // + this.mnuBreakOnInit.CheckOnClick = true; + this.mnuBreakOnInit.Name = "mnuBreakOnInit"; + this.mnuBreakOnInit.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnInit.Text = "Break on Init (NSF)"; + this.mnuBreakOnInit.Click += new System.EventHandler(this.mnuBreakOnInit_Click); + // + // mnuBreakOnPlay + // + this.mnuBreakOnPlay.CheckOnClick = true; + this.mnuBreakOnPlay.Name = "mnuBreakOnPlay"; + this.mnuBreakOnPlay.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnPlay.Text = "Break on Play (NSF)"; + this.mnuBreakOnPlay.Click += new System.EventHandler(this.mnuBreakOnPlay_Click); + // + // toolStripMenuItem26 + // + this.toolStripMenuItem26.Name = "toolStripMenuItem26"; + this.toolStripMenuItem26.Size = new System.Drawing.Size(270, 6); + // + // mnuBreakOnBusConflict + // + this.mnuBreakOnBusConflict.CheckOnClick = true; + this.mnuBreakOnBusConflict.Name = "mnuBreakOnBusConflict"; + this.mnuBreakOnBusConflict.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnBusConflict.Text = "Break on bus conflict"; + this.mnuBreakOnBusConflict.Click += new System.EventHandler(this.mnuBreakOnBusConflict_Click); + // + // mnuBreakOnDecayedOamRead + // + this.mnuBreakOnDecayedOamRead.CheckOnClick = true; + this.mnuBreakOnDecayedOamRead.Name = "mnuBreakOnDecayedOamRead"; + this.mnuBreakOnDecayedOamRead.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnDecayedOamRead.Text = "Break on decayed OAM read"; + this.mnuBreakOnDecayedOamRead.Click += new System.EventHandler(this.mnuBreakOnDecayedOamRead_Click); + // + // mnuBreakOnPpu2006ScrollGlitch + // + this.mnuBreakOnPpu2006ScrollGlitch.CheckOnClick = true; + this.mnuBreakOnPpu2006ScrollGlitch.Name = "mnuBreakOnPpu2006ScrollGlitch"; + this.mnuBreakOnPpu2006ScrollGlitch.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnPpu2006ScrollGlitch.Text = "Break on PPU $2006 scroll glitch"; + this.mnuBreakOnPpu2006ScrollGlitch.Click += new System.EventHandler(this.mnuBreakOnPpu2006ScrollGlitch_Click); + // + // mnuBreakOnUninitMemoryRead + // + this.mnuBreakOnUninitMemoryRead.CheckOnClick = true; + this.mnuBreakOnUninitMemoryRead.Name = "mnuBreakOnUninitMemoryRead"; + this.mnuBreakOnUninitMemoryRead.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnUninitMemoryRead.Text = "Break on uninitialized memory read"; + this.mnuBreakOnUninitMemoryRead.Click += new System.EventHandler(this.mnuBreakOnUninitMemoryRead_Click); + // + // toolStripMenuItem15 + // + this.toolStripMenuItem15.Name = "toolStripMenuItem15"; + this.toolStripMenuItem15.Size = new System.Drawing.Size(270, 6); + // + // mnuBreakOnOpen + // + this.mnuBreakOnOpen.CheckOnClick = true; + this.mnuBreakOnOpen.Name = "mnuBreakOnOpen"; + this.mnuBreakOnOpen.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnOpen.Text = "Break when debugger is opened"; + this.mnuBreakOnOpen.Click += new System.EventHandler(this.mnuBreakOnOpen_Click); + // + // mnuBreakOnDebuggerFocus + // + this.mnuBreakOnDebuggerFocus.CheckOnClick = true; + this.mnuBreakOnDebuggerFocus.Name = "mnuBreakOnDebuggerFocus"; + this.mnuBreakOnDebuggerFocus.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnDebuggerFocus.Text = "Break on debugger focus"; + this.mnuBreakOnDebuggerFocus.Click += new System.EventHandler(this.mnuBreakOnDebuggerFocus_Click); + // + // toolStripMenuItem20 + // + this.toolStripMenuItem20.Name = "toolStripMenuItem20"; + this.toolStripMenuItem20.Size = new System.Drawing.Size(270, 6); + // + // mnuBringToFrontOnBreak + // + this.mnuBringToFrontOnBreak.CheckOnClick = true; + this.mnuBringToFrontOnBreak.Name = "mnuBringToFrontOnBreak"; + this.mnuBringToFrontOnBreak.Size = new System.Drawing.Size(273, 22); + this.mnuBringToFrontOnBreak.Text = "Bring debugger to front on break"; + this.mnuBringToFrontOnBreak.Click += new System.EventHandler(this.mnuBringToFrontOnBreak_Click); + // + // mnuBringToFrontOnPause + // + this.mnuBringToFrontOnPause.CheckOnClick = true; + this.mnuBringToFrontOnPause.Name = "mnuBringToFrontOnPause"; + this.mnuBringToFrontOnPause.Size = new System.Drawing.Size(273, 22); + this.mnuBringToFrontOnPause.Text = "Bring debugger to front on pause"; + this.mnuBringToFrontOnPause.Click += new System.EventHandler(this.mnuBringToFrontOnPause_Click); + // + // toolStripMenuItem28 + // + this.toolStripMenuItem28.Name = "toolStripMenuItem28"; + this.toolStripMenuItem28.Size = new System.Drawing.Size(270, 6); + // + // mnuEnableSubInstructionBreakpoints + // + this.mnuEnableSubInstructionBreakpoints.CheckOnClick = true; + this.mnuEnableSubInstructionBreakpoints.Name = "mnuEnableSubInstructionBreakpoints"; + this.mnuEnableSubInstructionBreakpoints.Size = new System.Drawing.Size(273, 22); + this.mnuEnableSubInstructionBreakpoints.Text = "Enable sub-instruction breakpoints"; + this.mnuEnableSubInstructionBreakpoints.Click += new System.EventHandler(this.mnuBreakOnFirstCycle_Click); + // + // toolStripMenuItem12 + // + this.toolStripMenuItem12.Name = "toolStripMenuItem12"; + this.toolStripMenuItem12.Size = new System.Drawing.Size(274, 6); + // + // mnuShowOptions + // + this.mnuShowOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuShowToolbar, this.mnuShowCpuMemoryMapping, this.mnuShowPpuMemoryMapping, this.mnuShowFunctionLabelLists, this.mnuShowBottomPanel}); - this.mnuShowOptions.Image = global::Mesen.GUI.Properties.Resources.DipSwitches; - this.mnuShowOptions.Name = "mnuShowOptions"; - this.mnuShowOptions.Size = new System.Drawing.Size(266, 22); - this.mnuShowOptions.Text = "Show..."; - // - // mnuShowToolbar - // - this.mnuShowToolbar.CheckOnClick = true; - this.mnuShowToolbar.Name = "mnuShowToolbar"; - this.mnuShowToolbar.Size = new System.Drawing.Size(263, 22); - this.mnuShowToolbar.Text = "Show Toolbar"; - this.mnuShowToolbar.Click += new System.EventHandler(this.mnuShowToolbar_Click); - // - // mnuShowCpuMemoryMapping - // - this.mnuShowCpuMemoryMapping.CheckOnClick = true; - this.mnuShowCpuMemoryMapping.Name = "mnuShowCpuMemoryMapping"; - this.mnuShowCpuMemoryMapping.Size = new System.Drawing.Size(263, 22); - this.mnuShowCpuMemoryMapping.Text = "Show CPU Memory Mapping"; - this.mnuShowCpuMemoryMapping.Click += new System.EventHandler(this.mnuShowCpuMemoryMapping_Click); - // - // mnuShowPpuMemoryMapping - // - this.mnuShowPpuMemoryMapping.CheckOnClick = true; - this.mnuShowPpuMemoryMapping.Name = "mnuShowPpuMemoryMapping"; - this.mnuShowPpuMemoryMapping.Size = new System.Drawing.Size(263, 22); - this.mnuShowPpuMemoryMapping.Text = "Show PPU Memory Mapping"; - this.mnuShowPpuMemoryMapping.Click += new System.EventHandler(this.mnuShowPpuMemoryMapping_Click); - // - // mnuShowFunctionLabelLists - // - this.mnuShowFunctionLabelLists.CheckOnClick = true; - this.mnuShowFunctionLabelLists.Name = "mnuShowFunctionLabelLists"; - this.mnuShowFunctionLabelLists.Size = new System.Drawing.Size(263, 22); - this.mnuShowFunctionLabelLists.Text = "Show Function/Label Lists"; - this.mnuShowFunctionLabelLists.Click += new System.EventHandler(this.mnuShowFunctionLabelLists_Click); - // - // mnuShowBottomPanel - // - this.mnuShowBottomPanel.CheckOnClick = true; - this.mnuShowBottomPanel.Name = "mnuShowBottomPanel"; - this.mnuShowBottomPanel.Size = new System.Drawing.Size(263, 22); - this.mnuShowBottomPanel.Text = "Show Watch/Breakpoints/Call Stack"; - this.mnuShowBottomPanel.Click += new System.EventHandler(this.mnuShowBottomPanel_Click); - // - // mnuTooltipOptions - // - this.mnuTooltipOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuShowOptions.Image = global::Mesen.GUI.Properties.Resources.DipSwitches; + this.mnuShowOptions.Name = "mnuShowOptions"; + this.mnuShowOptions.Size = new System.Drawing.Size(277, 22); + this.mnuShowOptions.Text = "Show..."; + // + // mnuShowToolbar + // + this.mnuShowToolbar.CheckOnClick = true; + this.mnuShowToolbar.Name = "mnuShowToolbar"; + this.mnuShowToolbar.Size = new System.Drawing.Size(274, 22); + this.mnuShowToolbar.Text = "Show Toolbar"; + this.mnuShowToolbar.Click += new System.EventHandler(this.mnuShowToolbar_Click); + // + // mnuShowCpuMemoryMapping + // + this.mnuShowCpuMemoryMapping.CheckOnClick = true; + this.mnuShowCpuMemoryMapping.Name = "mnuShowCpuMemoryMapping"; + this.mnuShowCpuMemoryMapping.Size = new System.Drawing.Size(274, 22); + this.mnuShowCpuMemoryMapping.Text = "Show CPU Memory Mapping"; + this.mnuShowCpuMemoryMapping.Click += new System.EventHandler(this.mnuShowCpuMemoryMapping_Click); + // + // mnuShowPpuMemoryMapping + // + this.mnuShowPpuMemoryMapping.CheckOnClick = true; + this.mnuShowPpuMemoryMapping.Name = "mnuShowPpuMemoryMapping"; + this.mnuShowPpuMemoryMapping.Size = new System.Drawing.Size(274, 22); + this.mnuShowPpuMemoryMapping.Text = "Show PPU Memory Mapping"; + this.mnuShowPpuMemoryMapping.Click += new System.EventHandler(this.mnuShowPpuMemoryMapping_Click); + // + // mnuShowFunctionLabelLists + // + this.mnuShowFunctionLabelLists.CheckOnClick = true; + this.mnuShowFunctionLabelLists.Name = "mnuShowFunctionLabelLists"; + this.mnuShowFunctionLabelLists.Size = new System.Drawing.Size(274, 22); + this.mnuShowFunctionLabelLists.Text = "Show Function/Label Lists"; + this.mnuShowFunctionLabelLists.Click += new System.EventHandler(this.mnuShowFunctionLabelLists_Click); + // + // mnuShowBottomPanel + // + this.mnuShowBottomPanel.CheckOnClick = true; + this.mnuShowBottomPanel.Name = "mnuShowBottomPanel"; + this.mnuShowBottomPanel.Size = new System.Drawing.Size(274, 22); + this.mnuShowBottomPanel.Text = "Show Watch/Breakpoints/Call Stack"; + this.mnuShowBottomPanel.Click += new System.EventHandler(this.mnuShowBottomPanel_Click); + // + // mnuTooltipOptions + // + this.mnuTooltipOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuShowCodePreview, this.mnuShowOpCodeTooltips, this.toolStripMenuItem18, this.mnuOnlyShowTooltipOnShift}); - this.mnuTooltipOptions.Image = global::Mesen.GUI.Properties.Resources.Comment; - this.mnuTooltipOptions.Name = "mnuTooltipOptions"; - this.mnuTooltipOptions.Size = new System.Drawing.Size(266, 22); - this.mnuTooltipOptions.Text = "Tooltip Options"; - // - // mnuShowCodePreview - // - this.mnuShowCodePreview.CheckOnClick = true; - this.mnuShowCodePreview.Name = "mnuShowCodePreview"; - this.mnuShowCodePreview.Size = new System.Drawing.Size(307, 22); - this.mnuShowCodePreview.Text = "Show Code Preview in Tooltips"; - this.mnuShowCodePreview.CheckedChanged += new System.EventHandler(this.mnuShowCodePreview_CheckedChanged); - // - // mnuShowOpCodeTooltips - // - this.mnuShowOpCodeTooltips.CheckOnClick = true; - this.mnuShowOpCodeTooltips.Name = "mnuShowOpCodeTooltips"; - this.mnuShowOpCodeTooltips.Size = new System.Drawing.Size(307, 22); - this.mnuShowOpCodeTooltips.Text = "Show OP Code Info Tooltips"; - this.mnuShowOpCodeTooltips.CheckedChanged += new System.EventHandler(this.mnuShowOpCodeTooltips_CheckedChanged); - // - // toolStripMenuItem18 - // - this.toolStripMenuItem18.Name = "toolStripMenuItem18"; - this.toolStripMenuItem18.Size = new System.Drawing.Size(304, 6); - // - // mnuOnlyShowTooltipOnShift - // - this.mnuOnlyShowTooltipOnShift.CheckOnClick = true; - this.mnuOnlyShowTooltipOnShift.Name = "mnuOnlyShowTooltipOnShift"; - this.mnuOnlyShowTooltipOnShift.Size = new System.Drawing.Size(307, 22); - this.mnuOnlyShowTooltipOnShift.Text = "Only show tooltips when Shift key is pressed"; - this.mnuOnlyShowTooltipOnShift.CheckedChanged += new System.EventHandler(this.mnuTooltipShowOnShift_CheckedChanged); - // - // mnuCopyOptions - // - this.mnuCopyOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuTooltipOptions.Image = global::Mesen.GUI.Properties.Resources.Comment; + this.mnuTooltipOptions.Name = "mnuTooltipOptions"; + this.mnuTooltipOptions.Size = new System.Drawing.Size(277, 22); + this.mnuTooltipOptions.Text = "Tooltip Options"; + // + // mnuShowCodePreview + // + this.mnuShowCodePreview.CheckOnClick = true; + this.mnuShowCodePreview.Name = "mnuShowCodePreview"; + this.mnuShowCodePreview.Size = new System.Drawing.Size(319, 22); + this.mnuShowCodePreview.Text = "Show Code Preview in Tooltips"; + this.mnuShowCodePreview.CheckedChanged += new System.EventHandler(this.mnuShowCodePreview_CheckedChanged); + // + // mnuShowOpCodeTooltips + // + this.mnuShowOpCodeTooltips.CheckOnClick = true; + this.mnuShowOpCodeTooltips.Name = "mnuShowOpCodeTooltips"; + this.mnuShowOpCodeTooltips.Size = new System.Drawing.Size(319, 22); + this.mnuShowOpCodeTooltips.Text = "Show OP Code Info Tooltips"; + this.mnuShowOpCodeTooltips.CheckedChanged += new System.EventHandler(this.mnuShowOpCodeTooltips_CheckedChanged); + // + // toolStripMenuItem18 + // + this.toolStripMenuItem18.Name = "toolStripMenuItem18"; + this.toolStripMenuItem18.Size = new System.Drawing.Size(316, 6); + // + // mnuOnlyShowTooltipOnShift + // + this.mnuOnlyShowTooltipOnShift.CheckOnClick = true; + this.mnuOnlyShowTooltipOnShift.Name = "mnuOnlyShowTooltipOnShift"; + this.mnuOnlyShowTooltipOnShift.Size = new System.Drawing.Size(319, 22); + this.mnuOnlyShowTooltipOnShift.Text = "Only show tooltips when Shift key is pressed"; + this.mnuOnlyShowTooltipOnShift.CheckedChanged += new System.EventHandler(this.mnuTooltipShowOnShift_CheckedChanged); + // + // mnuCopyOptions + // + this.mnuCopyOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuCopyAddresses, this.mnuCopyByteCode, this.mnuCopyComments}); - this.mnuCopyOptions.Image = global::Mesen.GUI.Properties.Resources.Copy; - this.mnuCopyOptions.Name = "mnuCopyOptions"; - this.mnuCopyOptions.Size = new System.Drawing.Size(266, 22); - this.mnuCopyOptions.Text = "Copy Options"; - // - // mnuCopyAddresses - // - this.mnuCopyAddresses.CheckOnClick = true; - this.mnuCopyAddresses.Name = "mnuCopyAddresses"; - this.mnuCopyAddresses.Size = new System.Drawing.Size(164, 22); - this.mnuCopyAddresses.Text = "Copy Addresses"; - this.mnuCopyAddresses.Click += new System.EventHandler(this.mnuCopyAddresses_Click); - // - // mnuCopyByteCode - // - this.mnuCopyByteCode.CheckOnClick = true; - this.mnuCopyByteCode.Name = "mnuCopyByteCode"; - this.mnuCopyByteCode.Size = new System.Drawing.Size(164, 22); - this.mnuCopyByteCode.Text = "Copy Byte Code"; - this.mnuCopyByteCode.Click += new System.EventHandler(this.mnuCopyByteCode_Click); - // - // mnuCopyComments - // - this.mnuCopyComments.CheckOnClick = true; - this.mnuCopyComments.Name = "mnuCopyComments"; - this.mnuCopyComments.Size = new System.Drawing.Size(164, 22); - this.mnuCopyComments.Text = "Copy Comments"; - this.mnuCopyComments.Click += new System.EventHandler(this.mnuCopyComments_Click); - // - // fontSizeToolStripMenuItem - // - this.fontSizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuCopyOptions.Image = global::Mesen.GUI.Properties.Resources.Copy; + this.mnuCopyOptions.Name = "mnuCopyOptions"; + this.mnuCopyOptions.Size = new System.Drawing.Size(277, 22); + this.mnuCopyOptions.Text = "Copy Options"; + // + // mnuCopyAddresses + // + this.mnuCopyAddresses.CheckOnClick = true; + this.mnuCopyAddresses.Name = "mnuCopyAddresses"; + this.mnuCopyAddresses.Size = new System.Drawing.Size(168, 22); + this.mnuCopyAddresses.Text = "Copy Addresses"; + this.mnuCopyAddresses.Click += new System.EventHandler(this.mnuCopyAddresses_Click); + // + // mnuCopyByteCode + // + this.mnuCopyByteCode.CheckOnClick = true; + this.mnuCopyByteCode.Name = "mnuCopyByteCode"; + this.mnuCopyByteCode.Size = new System.Drawing.Size(168, 22); + this.mnuCopyByteCode.Text = "Copy Byte Code"; + this.mnuCopyByteCode.Click += new System.EventHandler(this.mnuCopyByteCode_Click); + // + // mnuCopyComments + // + this.mnuCopyComments.CheckOnClick = true; + this.mnuCopyComments.Name = "mnuCopyComments"; + this.mnuCopyComments.Size = new System.Drawing.Size(168, 22); + this.mnuCopyComments.Text = "Copy Comments"; + this.mnuCopyComments.Click += new System.EventHandler(this.mnuCopyComments_Click); + // + // fontSizeToolStripMenuItem + // + this.fontSizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuIncreaseFontSize, this.mnuDecreaseFontSize, this.mnuResetFontSize, this.toolStripMenuItem21, this.mnuSelectFont}); - this.fontSizeToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.Font; - this.fontSizeToolStripMenuItem.Name = "fontSizeToolStripMenuItem"; - this.fontSizeToolStripMenuItem.Size = new System.Drawing.Size(266, 22); - this.fontSizeToolStripMenuItem.Text = "Font Options"; - // - // mnuIncreaseFontSize - // - this.mnuIncreaseFontSize.Name = "mnuIncreaseFontSize"; - this.mnuIncreaseFontSize.ShortcutKeyDisplayString = ""; - this.mnuIncreaseFontSize.Size = new System.Drawing.Size(157, 22); - this.mnuIncreaseFontSize.Text = "Increase Size"; - this.mnuIncreaseFontSize.Click += new System.EventHandler(this.mnuIncreaseFontSize_Click); - // - // mnuDecreaseFontSize - // - this.mnuDecreaseFontSize.Name = "mnuDecreaseFontSize"; - this.mnuDecreaseFontSize.ShortcutKeyDisplayString = ""; - this.mnuDecreaseFontSize.Size = new System.Drawing.Size(157, 22); - this.mnuDecreaseFontSize.Text = "Decrease Size"; - this.mnuDecreaseFontSize.Click += new System.EventHandler(this.mnuDecreaseFontSize_Click); - // - // mnuResetFontSize - // - this.mnuResetFontSize.Name = "mnuResetFontSize"; - this.mnuResetFontSize.ShortcutKeyDisplayString = ""; - this.mnuResetFontSize.Size = new System.Drawing.Size(157, 22); - this.mnuResetFontSize.Text = "Reset to Default"; - this.mnuResetFontSize.Click += new System.EventHandler(this.mnuResetFontSize_Click); - // - // toolStripMenuItem21 - // - this.toolStripMenuItem21.Name = "toolStripMenuItem21"; - this.toolStripMenuItem21.Size = new System.Drawing.Size(154, 6); - // - // mnuSelectFont - // - this.mnuSelectFont.Name = "mnuSelectFont"; - this.mnuSelectFont.Size = new System.Drawing.Size(157, 22); - this.mnuSelectFont.Text = "Select Font..."; - this.mnuSelectFont.Click += new System.EventHandler(this.mnuSelectFont_Click); - // - // mnuConfigureColors - // - this.mnuConfigureColors.Image = global::Mesen.GUI.Properties.Resources.PipetteSmall; - this.mnuConfigureColors.Name = "mnuConfigureColors"; - this.mnuConfigureColors.Size = new System.Drawing.Size(266, 22); - this.mnuConfigureColors.Text = "Configure Colors"; - this.mnuConfigureColors.Click += new System.EventHandler(this.mnuConfigureColors_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(263, 6); - // - // mnuSplitView - // - this.mnuSplitView.CheckOnClick = true; - this.mnuSplitView.Image = global::Mesen.GUI.Properties.Resources.SplitView; - this.mnuSplitView.Name = "mnuSplitView"; - this.mnuSplitView.Size = new System.Drawing.Size(266, 22); - this.mnuSplitView.Text = "Split View"; - this.mnuSplitView.Click += new System.EventHandler(this.mnuSplitView_Click); - // - // mnuUseVerticalLayout - // - this.mnuUseVerticalLayout.CheckOnClick = true; - this.mnuUseVerticalLayout.Image = global::Mesen.GUI.Properties.Resources.VerticalLayout; - this.mnuUseVerticalLayout.Name = "mnuUseVerticalLayout"; - this.mnuUseVerticalLayout.Size = new System.Drawing.Size(266, 22); - this.mnuUseVerticalLayout.Text = "Use Vertical Layout"; - this.mnuUseVerticalLayout.CheckedChanged += new System.EventHandler(this.mnuUseVerticalLayout_CheckedChanged); - // - // toolStripMenuItem11 - // - this.toolStripMenuItem11.Name = "toolStripMenuItem11"; - this.toolStripMenuItem11.Size = new System.Drawing.Size(263, 6); - // - // mnuAutoCreateJumpLabels - // - this.mnuAutoCreateJumpLabels.CheckOnClick = true; - this.mnuAutoCreateJumpLabels.Name = "mnuAutoCreateJumpLabels"; - this.mnuAutoCreateJumpLabels.Size = new System.Drawing.Size(266, 22); - this.mnuAutoCreateJumpLabels.Text = "Auto-create jump labels"; - this.mnuAutoCreateJumpLabels.Click += new System.EventHandler(this.mnuAutoCreateJumpLabels_Click); - // - // toolStripMenuItem25 - // - this.toolStripMenuItem25.Name = "toolStripMenuItem25"; - this.toolStripMenuItem25.Size = new System.Drawing.Size(263, 6); - // - // mnuHidePauseIcon - // - this.mnuHidePauseIcon.CheckOnClick = true; - this.mnuHidePauseIcon.Name = "mnuHidePauseIcon"; - this.mnuHidePauseIcon.Size = new System.Drawing.Size(266, 22); - this.mnuHidePauseIcon.Text = "Hide Pause Icon"; - this.mnuHidePauseIcon.Click += new System.EventHandler(this.mnuHidePauseIcon_Click); - // - // mnuPpuPartialDraw - // - this.mnuPpuPartialDraw.CheckOnClick = true; - this.mnuPpuPartialDraw.Name = "mnuPpuPartialDraw"; - this.mnuPpuPartialDraw.Size = new System.Drawing.Size(266, 22); - this.mnuPpuPartialDraw.Text = "Draw Partial Frame"; - this.mnuPpuPartialDraw.Click += new System.EventHandler(this.mnuPpuPartialDraw_Click); - // - // mnuPpuShowPreviousFrame - // - this.mnuPpuShowPreviousFrame.CheckOnClick = true; - this.mnuPpuShowPreviousFrame.Name = "mnuPpuShowPreviousFrame"; - this.mnuPpuShowPreviousFrame.Size = new System.Drawing.Size(266, 22); - this.mnuPpuShowPreviousFrame.Text = "Show previous frame behind current"; - this.mnuPpuShowPreviousFrame.Click += new System.EventHandler(this.mnuShowPreviousFrame_Click); - // - // toolStripMenuItem19 - // - this.toolStripMenuItem19.Name = "toolStripMenuItem19"; - this.toolStripMenuItem19.Size = new System.Drawing.Size(263, 6); - // - // mnuShowBreakNotifications - // - this.mnuShowBreakNotifications.CheckOnClick = true; - this.mnuShowBreakNotifications.Name = "mnuShowBreakNotifications"; - this.mnuShowBreakNotifications.Size = new System.Drawing.Size(266, 22); - this.mnuShowBreakNotifications.Text = "Show break notifications"; - this.mnuShowBreakNotifications.Click += new System.EventHandler(this.mnuShowBreakNotifications_Click); - // - // mnuShowInstructionProgression - // - this.mnuShowInstructionProgression.CheckOnClick = true; - this.mnuShowInstructionProgression.Name = "mnuShowInstructionProgression"; - this.mnuShowInstructionProgression.Size = new System.Drawing.Size(266, 22); - this.mnuShowInstructionProgression.Text = "Show instruction progression"; - this.mnuShowInstructionProgression.Click += new System.EventHandler(this.mnuShowInstructionProgression_Click); - // - // mnuShowSelectionLength - // - this.mnuShowSelectionLength.CheckOnClick = true; - this.mnuShowSelectionLength.Name = "mnuShowSelectionLength"; - this.mnuShowSelectionLength.Size = new System.Drawing.Size(266, 22); - this.mnuShowSelectionLength.Text = "Show selection length"; - this.mnuShowSelectionLength.Click += new System.EventHandler(this.mnuShowSelectionLength_Click); - // - // toolStripMenuItem27 - // - this.toolStripMenuItem27.Name = "toolStripMenuItem27"; - this.toolStripMenuItem27.Size = new System.Drawing.Size(263, 6); - // - // mnuAlwaysScrollToCenter - // - this.mnuAlwaysScrollToCenter.CheckOnClick = true; - this.mnuAlwaysScrollToCenter.Name = "mnuAlwaysScrollToCenter"; - this.mnuAlwaysScrollToCenter.Size = new System.Drawing.Size(266, 22); - this.mnuAlwaysScrollToCenter.Text = "Keep active statement in the center"; - this.mnuAlwaysScrollToCenter.Click += new System.EventHandler(this.mnuAlwaysScrollToCenter_Click); - // - // mnuRefreshWhileRunning - // - this.mnuRefreshWhileRunning.CheckOnClick = true; - this.mnuRefreshWhileRunning.Name = "mnuRefreshWhileRunning"; - this.mnuRefreshWhileRunning.Size = new System.Drawing.Size(266, 22); - this.mnuRefreshWhileRunning.Text = "Refresh UI while running"; - this.mnuRefreshWhileRunning.Click += new System.EventHandler(this.mnuRefreshWhileRunning_Click); - // - // toolStripMenuItem6 - // - this.toolStripMenuItem6.Name = "toolStripMenuItem6"; - this.toolStripMenuItem6.Size = new System.Drawing.Size(263, 6); - // - // mnuReloadRomOnPowerCycle - // - this.mnuReloadRomOnPowerCycle.CheckOnClick = true; - this.mnuReloadRomOnPowerCycle.Name = "mnuReloadRomOnPowerCycle"; - this.mnuReloadRomOnPowerCycle.Size = new System.Drawing.Size(266, 22); - this.mnuReloadRomOnPowerCycle.Text = "Reload ROM on Power Cycle"; - this.mnuReloadRomOnPowerCycle.Click += new System.EventHandler(this.mnuReloadRomOnPowerCycle_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(263, 6); - // - // mnuConfigureExternalEditor - // - this.mnuConfigureExternalEditor.Image = global::Mesen.GUI.Properties.Resources.Edit; - this.mnuConfigureExternalEditor.Name = "mnuConfigureExternalEditor"; - this.mnuConfigureExternalEditor.Size = new System.Drawing.Size(266, 22); - this.mnuConfigureExternalEditor.Text = "Configure external code editor..."; - this.mnuConfigureExternalEditor.Click += new System.EventHandler(this.mnuConfigureExternalEditor_Click); - // - // mnuPreferences - // - this.mnuPreferences.Image = global::Mesen.GUI.Properties.Resources.Cog; - this.mnuPreferences.Name = "mnuPreferences"; - this.mnuPreferences.Size = new System.Drawing.Size(266, 22); - this.mnuPreferences.Text = "Configure shortcut keys..."; - this.mnuPreferences.Click += new System.EventHandler(this.mnuPreferences_Click); - // - // toolsToolStripMenuItem - // - this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fontSizeToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.Font; + this.fontSizeToolStripMenuItem.Name = "fontSizeToolStripMenuItem"; + this.fontSizeToolStripMenuItem.Size = new System.Drawing.Size(277, 22); + this.fontSizeToolStripMenuItem.Text = "Font Options"; + // + // mnuIncreaseFontSize + // + this.mnuIncreaseFontSize.Name = "mnuIncreaseFontSize"; + this.mnuIncreaseFontSize.ShortcutKeyDisplayString = ""; + this.mnuIncreaseFontSize.Size = new System.Drawing.Size(164, 22); + this.mnuIncreaseFontSize.Text = "Increase Size"; + this.mnuIncreaseFontSize.Click += new System.EventHandler(this.mnuIncreaseFontSize_Click); + // + // mnuDecreaseFontSize + // + this.mnuDecreaseFontSize.Name = "mnuDecreaseFontSize"; + this.mnuDecreaseFontSize.ShortcutKeyDisplayString = ""; + this.mnuDecreaseFontSize.Size = new System.Drawing.Size(164, 22); + this.mnuDecreaseFontSize.Text = "Decrease Size"; + this.mnuDecreaseFontSize.Click += new System.EventHandler(this.mnuDecreaseFontSize_Click); + // + // mnuResetFontSize + // + this.mnuResetFontSize.Name = "mnuResetFontSize"; + this.mnuResetFontSize.ShortcutKeyDisplayString = ""; + this.mnuResetFontSize.Size = new System.Drawing.Size(164, 22); + this.mnuResetFontSize.Text = "Reset to Default"; + this.mnuResetFontSize.Click += new System.EventHandler(this.mnuResetFontSize_Click); + // + // toolStripMenuItem21 + // + this.toolStripMenuItem21.Name = "toolStripMenuItem21"; + this.toolStripMenuItem21.Size = new System.Drawing.Size(161, 6); + // + // mnuSelectFont + // + this.mnuSelectFont.Name = "mnuSelectFont"; + this.mnuSelectFont.Size = new System.Drawing.Size(164, 22); + this.mnuSelectFont.Text = "Select Font..."; + this.mnuSelectFont.Click += new System.EventHandler(this.mnuSelectFont_Click); + // + // mnuConfigureColors + // + this.mnuConfigureColors.Image = global::Mesen.GUI.Properties.Resources.PipetteSmall; + this.mnuConfigureColors.Name = "mnuConfigureColors"; + this.mnuConfigureColors.Size = new System.Drawing.Size(277, 22); + this.mnuConfigureColors.Text = "Configure Colors"; + this.mnuConfigureColors.Click += new System.EventHandler(this.mnuConfigureColors_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(274, 6); + // + // mnuSplitView + // + this.mnuSplitView.CheckOnClick = true; + this.mnuSplitView.Image = global::Mesen.GUI.Properties.Resources.SplitView; + this.mnuSplitView.Name = "mnuSplitView"; + this.mnuSplitView.Size = new System.Drawing.Size(277, 22); + this.mnuSplitView.Text = "Split View"; + this.mnuSplitView.Click += new System.EventHandler(this.mnuSplitView_Click); + // + // mnuUseVerticalLayout + // + this.mnuUseVerticalLayout.CheckOnClick = true; + this.mnuUseVerticalLayout.Image = global::Mesen.GUI.Properties.Resources.VerticalLayout; + this.mnuUseVerticalLayout.Name = "mnuUseVerticalLayout"; + this.mnuUseVerticalLayout.Size = new System.Drawing.Size(277, 22); + this.mnuUseVerticalLayout.Text = "Use Vertical Layout"; + this.mnuUseVerticalLayout.CheckedChanged += new System.EventHandler(this.mnuUseVerticalLayout_CheckedChanged); + // + // toolStripMenuItem11 + // + this.toolStripMenuItem11.Name = "toolStripMenuItem11"; + this.toolStripMenuItem11.Size = new System.Drawing.Size(274, 6); + // + // mnuAutoCreateJumpLabels + // + this.mnuAutoCreateJumpLabels.CheckOnClick = true; + this.mnuAutoCreateJumpLabels.Name = "mnuAutoCreateJumpLabels"; + this.mnuAutoCreateJumpLabels.Size = new System.Drawing.Size(277, 22); + this.mnuAutoCreateJumpLabels.Text = "Auto-create jump labels"; + this.mnuAutoCreateJumpLabels.Click += new System.EventHandler(this.mnuAutoCreateJumpLabels_Click); + // + // toolStripMenuItem25 + // + this.toolStripMenuItem25.Name = "toolStripMenuItem25"; + this.toolStripMenuItem25.Size = new System.Drawing.Size(274, 6); + // + // mnuHidePauseIcon + // + this.mnuHidePauseIcon.CheckOnClick = true; + this.mnuHidePauseIcon.Name = "mnuHidePauseIcon"; + this.mnuHidePauseIcon.Size = new System.Drawing.Size(277, 22); + this.mnuHidePauseIcon.Text = "Hide Pause Icon"; + this.mnuHidePauseIcon.Click += new System.EventHandler(this.mnuHidePauseIcon_Click); + // + // mnuPpuPartialDraw + // + this.mnuPpuPartialDraw.CheckOnClick = true; + this.mnuPpuPartialDraw.Name = "mnuPpuPartialDraw"; + this.mnuPpuPartialDraw.Size = new System.Drawing.Size(277, 22); + this.mnuPpuPartialDraw.Text = "Draw Partial Frame"; + this.mnuPpuPartialDraw.Click += new System.EventHandler(this.mnuPpuPartialDraw_Click); + // + // mnuPpuShowPreviousFrame + // + this.mnuPpuShowPreviousFrame.CheckOnClick = true; + this.mnuPpuShowPreviousFrame.Name = "mnuPpuShowPreviousFrame"; + this.mnuPpuShowPreviousFrame.Size = new System.Drawing.Size(277, 22); + this.mnuPpuShowPreviousFrame.Text = "Show previous frame behind current"; + this.mnuPpuShowPreviousFrame.Click += new System.EventHandler(this.mnuShowPreviousFrame_Click); + // + // toolStripMenuItem19 + // + this.toolStripMenuItem19.Name = "toolStripMenuItem19"; + this.toolStripMenuItem19.Size = new System.Drawing.Size(274, 6); + // + // mnuShowBreakNotifications + // + this.mnuShowBreakNotifications.CheckOnClick = true; + this.mnuShowBreakNotifications.Name = "mnuShowBreakNotifications"; + this.mnuShowBreakNotifications.Size = new System.Drawing.Size(277, 22); + this.mnuShowBreakNotifications.Text = "Show break notifications"; + this.mnuShowBreakNotifications.Click += new System.EventHandler(this.mnuShowBreakNotifications_Click); + // + // mnuShowInstructionProgression + // + this.mnuShowInstructionProgression.CheckOnClick = true; + this.mnuShowInstructionProgression.Name = "mnuShowInstructionProgression"; + this.mnuShowInstructionProgression.Size = new System.Drawing.Size(277, 22); + this.mnuShowInstructionProgression.Text = "Show instruction progression"; + this.mnuShowInstructionProgression.Click += new System.EventHandler(this.mnuShowInstructionProgression_Click); + // + // mnuShowSelectionLength + // + this.mnuShowSelectionLength.CheckOnClick = true; + this.mnuShowSelectionLength.Name = "mnuShowSelectionLength"; + this.mnuShowSelectionLength.Size = new System.Drawing.Size(277, 22); + this.mnuShowSelectionLength.Text = "Show selection length"; + this.mnuShowSelectionLength.Click += new System.EventHandler(this.mnuShowSelectionLength_Click); + // + // toolStripMenuItem27 + // + this.toolStripMenuItem27.Name = "toolStripMenuItem27"; + this.toolStripMenuItem27.Size = new System.Drawing.Size(274, 6); + // + // mnuAlwaysScrollToCenter + // + this.mnuAlwaysScrollToCenter.CheckOnClick = true; + this.mnuAlwaysScrollToCenter.Name = "mnuAlwaysScrollToCenter"; + this.mnuAlwaysScrollToCenter.Size = new System.Drawing.Size(277, 22); + this.mnuAlwaysScrollToCenter.Text = "Keep active statement in the center"; + this.mnuAlwaysScrollToCenter.Click += new System.EventHandler(this.mnuAlwaysScrollToCenter_Click); + // + // mnuRefreshWhileRunning + // + this.mnuRefreshWhileRunning.CheckOnClick = true; + this.mnuRefreshWhileRunning.Name = "mnuRefreshWhileRunning"; + this.mnuRefreshWhileRunning.Size = new System.Drawing.Size(277, 22); + this.mnuRefreshWhileRunning.Text = "Refresh UI while running"; + this.mnuRefreshWhileRunning.Click += new System.EventHandler(this.mnuRefreshWhileRunning_Click); + // + // toolStripMenuItem6 + // + this.toolStripMenuItem6.Name = "toolStripMenuItem6"; + this.toolStripMenuItem6.Size = new System.Drawing.Size(274, 6); + // + // mnuReloadRomOnPowerCycle + // + this.mnuReloadRomOnPowerCycle.CheckOnClick = true; + this.mnuReloadRomOnPowerCycle.Name = "mnuReloadRomOnPowerCycle"; + this.mnuReloadRomOnPowerCycle.Size = new System.Drawing.Size(277, 22); + this.mnuReloadRomOnPowerCycle.Text = "Reload ROM on Power Cycle"; + this.mnuReloadRomOnPowerCycle.Click += new System.EventHandler(this.mnuReloadRomOnPowerCycle_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(274, 6); + // + // mnuConfigureExternalEditor + // + this.mnuConfigureExternalEditor.Image = global::Mesen.GUI.Properties.Resources.Edit; + this.mnuConfigureExternalEditor.Name = "mnuConfigureExternalEditor"; + this.mnuConfigureExternalEditor.Size = new System.Drawing.Size(277, 22); + this.mnuConfigureExternalEditor.Text = "Configure external code editor..."; + this.mnuConfigureExternalEditor.Click += new System.EventHandler(this.mnuConfigureExternalEditor_Click); + // + // mnuPreferences + // + this.mnuPreferences.Image = global::Mesen.GUI.Properties.Resources.Cog; + this.mnuPreferences.Name = "mnuPreferences"; + this.mnuPreferences.Size = new System.Drawing.Size(277, 22); + this.mnuPreferences.Text = "Configure shortcut keys..."; + this.mnuPreferences.Click += new System.EventHandler(this.mnuPreferences_Click); + // + // toolsToolStripMenuItem + // + this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuApuViewer, this.mnuAssembler, this.mnuEventViewer, @@ -1690,156 +1692,156 @@ namespace Mesen.GUI.Debugger this.mnuEditHeader, this.toolStripMenuItem30, this.mnuCodeDataLogger}); - this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; - this.toolsToolStripMenuItem.Size = new System.Drawing.Size(47, 20); - this.toolsToolStripMenuItem.Text = "Tools"; - // - // mnuApuViewer - // - this.mnuApuViewer.Image = global::Mesen.GUI.Properties.Resources.Audio; - this.mnuApuViewer.Name = "mnuApuViewer"; - this.mnuApuViewer.Size = new System.Drawing.Size(194, 22); - this.mnuApuViewer.Text = "APU Viewer"; - this.mnuApuViewer.Click += new System.EventHandler(this.mnuApuViewer_Click); - // - // mnuAssembler - // - this.mnuAssembler.Image = global::Mesen.GUI.Properties.Resources.Chip; - this.mnuAssembler.Name = "mnuAssembler"; - this.mnuAssembler.Size = new System.Drawing.Size(194, 22); - this.mnuAssembler.Text = "Assembler"; - this.mnuAssembler.Click += new System.EventHandler(this.mnuAssembler_Click); - // - // mnuEventViewer - // - this.mnuEventViewer.Image = global::Mesen.GUI.Properties.Resources.NesEventViewer; - this.mnuEventViewer.Name = "mnuEventViewer"; - this.mnuEventViewer.Size = new System.Drawing.Size(194, 22); - this.mnuEventViewer.Text = "Event Viewer"; - this.mnuEventViewer.Click += new System.EventHandler(this.mnuEventViewer_Click); - // - // mnuMemoryViewer - // - this.mnuMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; - this.mnuMemoryViewer.Name = "mnuMemoryViewer"; - this.mnuMemoryViewer.Size = new System.Drawing.Size(194, 22); - this.mnuMemoryViewer.Text = "Memory Tools"; - this.mnuMemoryViewer.Click += new System.EventHandler(this.mnuMemoryViewer_Click); - // - // mnuProfiler - // - this.mnuProfiler.Image = global::Mesen.GUI.Properties.Resources.Speed; - this.mnuProfiler.Name = "mnuProfiler"; - this.mnuProfiler.Size = new System.Drawing.Size(194, 22); - this.mnuProfiler.Text = "Performance Profiler"; - this.mnuProfiler.Click += new System.EventHandler(this.mnuProfiler_Click); - // - // mnuPpuViewer - // - this.mnuPpuViewer.Image = global::Mesen.GUI.Properties.Resources.Video; - this.mnuPpuViewer.Name = "mnuPpuViewer"; - this.mnuPpuViewer.Size = new System.Drawing.Size(194, 22); - this.mnuPpuViewer.Text = "PPU Viewer"; - this.mnuPpuViewer.Click += new System.EventHandler(this.mnuNametableViewer_Click); - // - // mnuScriptWindow - // - this.mnuScriptWindow.Image = global::Mesen.GUI.Properties.Resources.Script; - this.mnuScriptWindow.Name = "mnuScriptWindow"; - this.mnuScriptWindow.Size = new System.Drawing.Size(194, 22); - this.mnuScriptWindow.Text = "Script Window"; - this.mnuScriptWindow.Click += new System.EventHandler(this.mnuScriptWindow_Click); - // - // mnuTextHooker - // - this.mnuTextHooker.Image = global::Mesen.GUI.Properties.Resources.Font; - this.mnuTextHooker.Name = "mnuTextHooker"; - this.mnuTextHooker.Size = new System.Drawing.Size(194, 22); - this.mnuTextHooker.Text = "Text Hooker"; - this.mnuTextHooker.Click += new System.EventHandler(this.mnuTextHooker_Click); - // - // mnuTraceLogger - // - this.mnuTraceLogger.Image = global::Mesen.GUI.Properties.Resources.LogWindow; - this.mnuTraceLogger.Name = "mnuTraceLogger"; - this.mnuTraceLogger.Size = new System.Drawing.Size(194, 22); - this.mnuTraceLogger.Text = "Trace Logger"; - this.mnuTraceLogger.Click += new System.EventHandler(this.mnuTraceLogger_Click); - // - // mnuWatchWindow - // - this.mnuWatchWindow.Image = global::Mesen.GUI.Properties.Resources.Find; - this.mnuWatchWindow.Name = "mnuWatchWindow"; - this.mnuWatchWindow.Size = new System.Drawing.Size(194, 22); - this.mnuWatchWindow.Text = "Watch Window"; - this.mnuWatchWindow.Click += new System.EventHandler(this.mnuWatchWindow_Click); - // - // toolStripMenuItem13 - // - this.toolStripMenuItem13.Name = "toolStripMenuItem13"; - this.toolStripMenuItem13.Size = new System.Drawing.Size(191, 6); - // - // pPUViewerCompactToolStripMenuItem - // - this.pPUViewerCompactToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + this.toolsToolStripMenuItem.Size = new System.Drawing.Size(50, 20); + this.toolsToolStripMenuItem.Text = "Tools"; + // + // mnuApuViewer + // + this.mnuApuViewer.Image = global::Mesen.GUI.Properties.Resources.Audio; + this.mnuApuViewer.Name = "mnuApuViewer"; + this.mnuApuViewer.Size = new System.Drawing.Size(201, 22); + this.mnuApuViewer.Text = "APU Viewer"; + this.mnuApuViewer.Click += new System.EventHandler(this.mnuApuViewer_Click); + // + // mnuAssembler + // + this.mnuAssembler.Image = global::Mesen.GUI.Properties.Resources.Chip; + this.mnuAssembler.Name = "mnuAssembler"; + this.mnuAssembler.Size = new System.Drawing.Size(201, 22); + this.mnuAssembler.Text = "Assembler"; + this.mnuAssembler.Click += new System.EventHandler(this.mnuAssembler_Click); + // + // mnuEventViewer + // + this.mnuEventViewer.Image = global::Mesen.GUI.Properties.Resources.NesEventViewer; + this.mnuEventViewer.Name = "mnuEventViewer"; + this.mnuEventViewer.Size = new System.Drawing.Size(201, 22); + this.mnuEventViewer.Text = "Event Viewer"; + this.mnuEventViewer.Click += new System.EventHandler(this.mnuEventViewer_Click); + // + // mnuMemoryViewer + // + this.mnuMemoryViewer.Image = global::Mesen.GUI.Properties.Resources.CheatCode; + this.mnuMemoryViewer.Name = "mnuMemoryViewer"; + this.mnuMemoryViewer.Size = new System.Drawing.Size(201, 22); + this.mnuMemoryViewer.Text = "Memory Tools"; + this.mnuMemoryViewer.Click += new System.EventHandler(this.mnuMemoryViewer_Click); + // + // mnuProfiler + // + this.mnuProfiler.Image = global::Mesen.GUI.Properties.Resources.Speed; + this.mnuProfiler.Name = "mnuProfiler"; + this.mnuProfiler.Size = new System.Drawing.Size(201, 22); + this.mnuProfiler.Text = "Performance Profiler"; + this.mnuProfiler.Click += new System.EventHandler(this.mnuProfiler_Click); + // + // mnuPpuViewer + // + this.mnuPpuViewer.Image = global::Mesen.GUI.Properties.Resources.Video; + this.mnuPpuViewer.Name = "mnuPpuViewer"; + this.mnuPpuViewer.Size = new System.Drawing.Size(201, 22); + this.mnuPpuViewer.Text = "PPU Viewer"; + this.mnuPpuViewer.Click += new System.EventHandler(this.mnuNametableViewer_Click); + // + // mnuScriptWindow + // + this.mnuScriptWindow.Image = global::Mesen.GUI.Properties.Resources.Script; + this.mnuScriptWindow.Name = "mnuScriptWindow"; + this.mnuScriptWindow.Size = new System.Drawing.Size(201, 22); + this.mnuScriptWindow.Text = "Script Window"; + this.mnuScriptWindow.Click += new System.EventHandler(this.mnuScriptWindow_Click); + // + // mnuTextHooker + // + this.mnuTextHooker.Image = global::Mesen.GUI.Properties.Resources.Font; + this.mnuTextHooker.Name = "mnuTextHooker"; + this.mnuTextHooker.Size = new System.Drawing.Size(201, 22); + this.mnuTextHooker.Text = "Text Hooker"; + this.mnuTextHooker.Click += new System.EventHandler(this.mnuTextHooker_Click); + // + // mnuTraceLogger + // + this.mnuTraceLogger.Image = global::Mesen.GUI.Properties.Resources.LogWindow; + this.mnuTraceLogger.Name = "mnuTraceLogger"; + this.mnuTraceLogger.Size = new System.Drawing.Size(201, 22); + this.mnuTraceLogger.Text = "Trace Logger"; + this.mnuTraceLogger.Click += new System.EventHandler(this.mnuTraceLogger_Click); + // + // mnuWatchWindow + // + this.mnuWatchWindow.Image = global::Mesen.GUI.Properties.Resources.Find; + this.mnuWatchWindow.Name = "mnuWatchWindow"; + this.mnuWatchWindow.Size = new System.Drawing.Size(201, 22); + this.mnuWatchWindow.Text = "Watch Window"; + this.mnuWatchWindow.Click += new System.EventHandler(this.mnuWatchWindow_Click); + // + // toolStripMenuItem13 + // + this.toolStripMenuItem13.Name = "toolStripMenuItem13"; + this.toolStripMenuItem13.Size = new System.Drawing.Size(198, 6); + // + // pPUViewerCompactToolStripMenuItem + // + this.pPUViewerCompactToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuOpenNametableViewer, this.mnuOpenChrViewer, this.mnuOpenSpriteViewer, this.mnuOpenPaletteViewer}); - this.pPUViewerCompactToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.VideoFilter; - this.pPUViewerCompactToolStripMenuItem.Name = "pPUViewerCompactToolStripMenuItem"; - this.pPUViewerCompactToolStripMenuItem.Size = new System.Drawing.Size(194, 22); - this.pPUViewerCompactToolStripMenuItem.Text = "PPU Viewer (Compact)"; - // - // mnuOpenNametableViewer - // - this.mnuOpenNametableViewer.Name = "mnuOpenNametableViewer"; - this.mnuOpenNametableViewer.Size = new System.Drawing.Size(170, 22); - this.mnuOpenNametableViewer.Text = "Nametable Viewer"; - this.mnuOpenNametableViewer.Click += new System.EventHandler(this.mnuOpenNametableViewer_Click); - // - // mnuOpenChrViewer - // - this.mnuOpenChrViewer.Name = "mnuOpenChrViewer"; - this.mnuOpenChrViewer.Size = new System.Drawing.Size(170, 22); - this.mnuOpenChrViewer.Text = "CHR Viewer"; - this.mnuOpenChrViewer.Click += new System.EventHandler(this.mnuOpenChrViewer_Click); - // - // mnuOpenSpriteViewer - // - this.mnuOpenSpriteViewer.Name = "mnuOpenSpriteViewer"; - this.mnuOpenSpriteViewer.Size = new System.Drawing.Size(170, 22); - this.mnuOpenSpriteViewer.Text = "Sprite Viewer"; - this.mnuOpenSpriteViewer.Click += new System.EventHandler(this.mnuOpenSpriteViewer_Click); - // - // mnuOpenPaletteViewer - // - this.mnuOpenPaletteViewer.Name = "mnuOpenPaletteViewer"; - this.mnuOpenPaletteViewer.Size = new System.Drawing.Size(170, 22); - this.mnuOpenPaletteViewer.Text = "Palette Viewer"; - this.mnuOpenPaletteViewer.Click += new System.EventHandler(this.mnuOpenPaletteViewer_Click); - // - // toolStripMenuItem17 - // - this.toolStripMenuItem17.Name = "toolStripMenuItem17"; - this.toolStripMenuItem17.Size = new System.Drawing.Size(191, 6); - // - // mnuEditHeader - // - this.mnuEditHeader.Image = global::Mesen.GUI.Properties.Resources.Edit; - this.mnuEditHeader.Name = "mnuEditHeader"; - this.mnuEditHeader.Size = new System.Drawing.Size(194, 22); - this.mnuEditHeader.Text = "Edit iNES Header"; - this.mnuEditHeader.Click += new System.EventHandler(this.mnuEditHeader_Click); - // - // toolStripMenuItem30 - // - this.toolStripMenuItem30.Name = "toolStripMenuItem30"; - this.toolStripMenuItem30.Size = new System.Drawing.Size(191, 6); - // - // mnuCodeDataLogger - // - this.mnuCodeDataLogger.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.pPUViewerCompactToolStripMenuItem.Image = global::Mesen.GUI.Properties.Resources.VideoFilter; + this.pPUViewerCompactToolStripMenuItem.Name = "pPUViewerCompactToolStripMenuItem"; + this.pPUViewerCompactToolStripMenuItem.Size = new System.Drawing.Size(201, 22); + this.pPUViewerCompactToolStripMenuItem.Text = "PPU Viewer (Compact)"; + // + // mnuOpenNametableViewer + // + this.mnuOpenNametableViewer.Name = "mnuOpenNametableViewer"; + this.mnuOpenNametableViewer.Size = new System.Drawing.Size(179, 22); + this.mnuOpenNametableViewer.Text = "Nametable Viewer"; + this.mnuOpenNametableViewer.Click += new System.EventHandler(this.mnuOpenNametableViewer_Click); + // + // mnuOpenChrViewer + // + this.mnuOpenChrViewer.Name = "mnuOpenChrViewer"; + this.mnuOpenChrViewer.Size = new System.Drawing.Size(179, 22); + this.mnuOpenChrViewer.Text = "CHR Viewer"; + this.mnuOpenChrViewer.Click += new System.EventHandler(this.mnuOpenChrViewer_Click); + // + // mnuOpenSpriteViewer + // + this.mnuOpenSpriteViewer.Name = "mnuOpenSpriteViewer"; + this.mnuOpenSpriteViewer.Size = new System.Drawing.Size(179, 22); + this.mnuOpenSpriteViewer.Text = "Sprite Viewer"; + this.mnuOpenSpriteViewer.Click += new System.EventHandler(this.mnuOpenSpriteViewer_Click); + // + // mnuOpenPaletteViewer + // + this.mnuOpenPaletteViewer.Name = "mnuOpenPaletteViewer"; + this.mnuOpenPaletteViewer.Size = new System.Drawing.Size(179, 22); + this.mnuOpenPaletteViewer.Text = "Palette Viewer"; + this.mnuOpenPaletteViewer.Click += new System.EventHandler(this.mnuOpenPaletteViewer_Click); + // + // toolStripMenuItem17 + // + this.toolStripMenuItem17.Name = "toolStripMenuItem17"; + this.toolStripMenuItem17.Size = new System.Drawing.Size(198, 6); + // + // mnuEditHeader + // + this.mnuEditHeader.Image = global::Mesen.GUI.Properties.Resources.Edit; + this.mnuEditHeader.Name = "mnuEditHeader"; + this.mnuEditHeader.Size = new System.Drawing.Size(201, 22); + this.mnuEditHeader.Text = "Edit iNES Header"; + this.mnuEditHeader.Click += new System.EventHandler(this.mnuEditHeader_Click); + // + // toolStripMenuItem30 + // + this.toolStripMenuItem30.Name = "toolStripMenuItem30"; + this.toolStripMenuItem30.Size = new System.Drawing.Size(198, 6); + // + // mnuCodeDataLogger + // + this.mnuCodeDataLogger.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.autoLoadsaveCDLFileToolStripMenuItem, this.toolStripMenuItem4, this.mnuLoadCdlFile, @@ -1847,80 +1849,80 @@ namespace Mesen.GUI.Debugger this.mnuResetCdlLog, this.toolStripMenuItem5, this.mnuCdlGenerateRom}); - this.mnuCodeDataLogger.Name = "mnuCodeDataLogger"; - this.mnuCodeDataLogger.Size = new System.Drawing.Size(194, 22); - this.mnuCodeDataLogger.Text = "Code/Data Logger"; - // - // autoLoadsaveCDLFileToolStripMenuItem - // - this.autoLoadsaveCDLFileToolStripMenuItem.Checked = true; - this.autoLoadsaveCDLFileToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; - this.autoLoadsaveCDLFileToolStripMenuItem.Enabled = false; - this.autoLoadsaveCDLFileToolStripMenuItem.Name = "autoLoadsaveCDLFileToolStripMenuItem"; - this.autoLoadsaveCDLFileToolStripMenuItem.Size = new System.Drawing.Size(193, 22); - this.autoLoadsaveCDLFileToolStripMenuItem.Text = "Auto load/save log file"; - // - // toolStripMenuItem4 - // - this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - this.toolStripMenuItem4.Size = new System.Drawing.Size(190, 6); - // - // mnuLoadCdlFile - // - this.mnuLoadCdlFile.Image = global::Mesen.GUI.Properties.Resources.FolderOpen; - this.mnuLoadCdlFile.Name = "mnuLoadCdlFile"; - this.mnuLoadCdlFile.Size = new System.Drawing.Size(193, 22); - this.mnuLoadCdlFile.Text = "Load CDL file..."; - this.mnuLoadCdlFile.Click += new System.EventHandler(this.mnuLoadCdlFile_Click); - // - // mnuSaveAsCdlFile - // - this.mnuSaveAsCdlFile.Image = global::Mesen.GUI.Properties.Resources.Floppy; - this.mnuSaveAsCdlFile.Name = "mnuSaveAsCdlFile"; - this.mnuSaveAsCdlFile.Size = new System.Drawing.Size(193, 22); - this.mnuSaveAsCdlFile.Text = "Save as CDL file..."; - this.mnuSaveAsCdlFile.Click += new System.EventHandler(this.mnuSaveAsCdlFile_Click); - // - // mnuResetCdlLog - // - this.mnuResetCdlLog.Image = global::Mesen.GUI.Properties.Resources.Reset; - this.mnuResetCdlLog.Name = "mnuResetCdlLog"; - this.mnuResetCdlLog.Size = new System.Drawing.Size(193, 22); - this.mnuResetCdlLog.Text = "Reset log"; - this.mnuResetCdlLog.Click += new System.EventHandler(this.mnuResetCdlLog_Click); - // - // toolStripMenuItem5 - // - this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(190, 6); - // - // mnuCdlGenerateRom - // - this.mnuCdlGenerateRom.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuCodeDataLogger.Name = "mnuCodeDataLogger"; + this.mnuCodeDataLogger.Size = new System.Drawing.Size(201, 22); + this.mnuCodeDataLogger.Text = "Code/Data Logger"; + // + // autoLoadsaveCDLFileToolStripMenuItem + // + this.autoLoadsaveCDLFileToolStripMenuItem.Checked = true; + this.autoLoadsaveCDLFileToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.autoLoadsaveCDLFileToolStripMenuItem.Enabled = false; + this.autoLoadsaveCDLFileToolStripMenuItem.Name = "autoLoadsaveCDLFileToolStripMenuItem"; + this.autoLoadsaveCDLFileToolStripMenuItem.Size = new System.Drawing.Size(202, 22); + this.autoLoadsaveCDLFileToolStripMenuItem.Text = "Auto load/save log file"; + // + // toolStripMenuItem4 + // + this.toolStripMenuItem4.Name = "toolStripMenuItem4"; + this.toolStripMenuItem4.Size = new System.Drawing.Size(199, 6); + // + // mnuLoadCdlFile + // + this.mnuLoadCdlFile.Image = global::Mesen.GUI.Properties.Resources.FolderOpen; + this.mnuLoadCdlFile.Name = "mnuLoadCdlFile"; + this.mnuLoadCdlFile.Size = new System.Drawing.Size(202, 22); + this.mnuLoadCdlFile.Text = "Load CDL file..."; + this.mnuLoadCdlFile.Click += new System.EventHandler(this.mnuLoadCdlFile_Click); + // + // mnuSaveAsCdlFile + // + this.mnuSaveAsCdlFile.Image = global::Mesen.GUI.Properties.Resources.Floppy; + this.mnuSaveAsCdlFile.Name = "mnuSaveAsCdlFile"; + this.mnuSaveAsCdlFile.Size = new System.Drawing.Size(202, 22); + this.mnuSaveAsCdlFile.Text = "Save as CDL file..."; + this.mnuSaveAsCdlFile.Click += new System.EventHandler(this.mnuSaveAsCdlFile_Click); + // + // mnuResetCdlLog + // + this.mnuResetCdlLog.Image = global::Mesen.GUI.Properties.Resources.Reset; + this.mnuResetCdlLog.Name = "mnuResetCdlLog"; + this.mnuResetCdlLog.Size = new System.Drawing.Size(202, 22); + this.mnuResetCdlLog.Text = "Reset log"; + this.mnuResetCdlLog.Click += new System.EventHandler(this.mnuResetCdlLog_Click); + // + // toolStripMenuItem5 + // + this.toolStripMenuItem5.Name = "toolStripMenuItem5"; + this.toolStripMenuItem5.Size = new System.Drawing.Size(199, 6); + // + // mnuCdlGenerateRom + // + this.mnuCdlGenerateRom.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.mnuCdlStripUnusedData, this.mnuCdlStripUsedData}); - this.mnuCdlGenerateRom.Image = global::Mesen.GUI.Properties.Resources.Copy; - this.mnuCdlGenerateRom.Name = "mnuCdlGenerateRom"; - this.mnuCdlGenerateRom.Size = new System.Drawing.Size(193, 22); - this.mnuCdlGenerateRom.Text = "Generate ROM"; - // - // mnuCdlStripUnusedData - // - this.mnuCdlStripUnusedData.Name = "mnuCdlStripUnusedData"; - this.mnuCdlStripUnusedData.Size = new System.Drawing.Size(166, 22); - this.mnuCdlStripUnusedData.Text = "Strip unused data"; - this.mnuCdlStripUnusedData.Click += new System.EventHandler(this.mnuCdlStripUnusedData_Click); - // - // mnuCdlStripUsedData - // - this.mnuCdlStripUsedData.Name = "mnuCdlStripUsedData"; - this.mnuCdlStripUsedData.Size = new System.Drawing.Size(166, 22); - this.mnuCdlStripUsedData.Text = "Strip used data"; - this.mnuCdlStripUsedData.Click += new System.EventHandler(this.mnuCdlStripUsedData_Click); - // - // statusStrip - // - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuCdlGenerateRom.Image = global::Mesen.GUI.Properties.Resources.Copy; + this.mnuCdlGenerateRom.Name = "mnuCdlGenerateRom"; + this.mnuCdlGenerateRom.Size = new System.Drawing.Size(202, 22); + this.mnuCdlGenerateRom.Text = "Generate ROM"; + // + // mnuCdlStripUnusedData + // + this.mnuCdlStripUnusedData.Name = "mnuCdlStripUnusedData"; + this.mnuCdlStripUnusedData.Size = new System.Drawing.Size(173, 22); + this.mnuCdlStripUnusedData.Text = "Strip unused data"; + this.mnuCdlStripUnusedData.Click += new System.EventHandler(this.mnuCdlStripUnusedData_Click); + // + // mnuCdlStripUsedData + // + this.mnuCdlStripUsedData.Name = "mnuCdlStripUsedData"; + this.mnuCdlStripUsedData.Size = new System.Drawing.Size(173, 22); + this.mnuCdlStripUsedData.Text = "Strip used data"; + this.mnuCdlStripUsedData.Click += new System.EventHandler(this.mnuCdlStripUsedData_Click); + // + // statusStrip + // + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.lblPrgAnalysis, this.lblPrgAnalysisResult, this.lblChrAnalysis, @@ -1928,131 +1930,141 @@ namespace Mesen.GUI.Debugger this.toolStripStatusLabel1, this.lblCyclesElapsedCount, this.lblCyclesElapsed}); - this.statusStrip.Location = new System.Drawing.Point(0, 660); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Size = new System.Drawing.Size(1075, 24); - this.statusStrip.TabIndex = 3; - this.statusStrip.Text = "statusStrip1"; - // - // lblPrgAnalysis - // - this.lblPrgAnalysis.BorderStyle = System.Windows.Forms.Border3DStyle.Etched; - this.lblPrgAnalysis.Name = "lblPrgAnalysis"; - this.lblPrgAnalysis.Size = new System.Drawing.Size(76, 19); - this.lblPrgAnalysis.Text = "PRG analysis:"; - // - // lblPrgAnalysisResult - // - this.lblPrgAnalysisResult.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right; - this.lblPrgAnalysisResult.BorderStyle = System.Windows.Forms.Border3DStyle.Etched; - this.lblPrgAnalysisResult.Name = "lblPrgAnalysisResult"; - this.lblPrgAnalysisResult.Size = new System.Drawing.Size(235, 19); - this.lblPrgAnalysisResult.Text = "xx% (Code: xx%, Data: xx%, Unknown: xx%)"; - // - // lblChrAnalysis - // - this.lblChrAnalysis.Name = "lblChrAnalysis"; - this.lblChrAnalysis.Size = new System.Drawing.Size(78, 19); - this.lblChrAnalysis.Text = "CHR analysis:"; - // - // lblChrAnalysisResult - // - this.lblChrAnalysisResult.Name = "lblChrAnalysisResult"; - this.lblChrAnalysisResult.Size = new System.Drawing.Size(239, 19); - this.lblChrAnalysisResult.Text = "xx% (Drawn: xx%, Read: xx%, Unknown: xx%)"; - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(340, 19); - this.toolStripStatusLabel1.Spring = true; - // - // lblCyclesElapsedCount - // - this.lblCyclesElapsedCount.Name = "lblCyclesElapsedCount"; - this.lblCyclesElapsedCount.Size = new System.Drawing.Size(13, 19); - this.lblCyclesElapsedCount.Text = "0"; - // - // lblCyclesElapsed - // - this.lblCyclesElapsed.Margin = new System.Windows.Forms.Padding(-3, 3, 0, 2); - this.lblCyclesElapsed.Name = "lblCyclesElapsed"; - this.lblCyclesElapsed.Size = new System.Drawing.Size(82, 19); - this.lblCyclesElapsed.Text = "cycles elapsed"; - // - // ctrlPpuMemoryMapping - // - this.ctrlPpuMemoryMapping.Dock = System.Windows.Forms.DockStyle.Bottom; - this.ctrlPpuMemoryMapping.Location = new System.Drawing.Point(0, 627); - this.ctrlPpuMemoryMapping.Name = "ctrlPpuMemoryMapping"; - this.ctrlPpuMemoryMapping.Size = new System.Drawing.Size(1075, 33); - this.ctrlPpuMemoryMapping.TabIndex = 5; - this.ctrlPpuMemoryMapping.Text = "ctrlMemoryMapping1"; - this.ctrlPpuMemoryMapping.Visible = false; - // - // ctrlCpuMemoryMapping - // - this.ctrlCpuMemoryMapping.Dock = System.Windows.Forms.DockStyle.Bottom; - this.ctrlCpuMemoryMapping.Location = new System.Drawing.Point(0, 594); - this.ctrlCpuMemoryMapping.Name = "ctrlCpuMemoryMapping"; - this.ctrlCpuMemoryMapping.Size = new System.Drawing.Size(1075, 33); - this.ctrlCpuMemoryMapping.TabIndex = 4; - this.ctrlCpuMemoryMapping.Text = "ctrlMemoryMapping1"; - this.ctrlCpuMemoryMapping.Visible = false; - // - // tsToolbar - // - this.tsToolbar.Location = new System.Drawing.Point(0, 24); - this.tsToolbar.Name = "tsToolbar"; - this.tsToolbar.Size = new System.Drawing.Size(1075, 25); - this.tsToolbar.TabIndex = 6; - this.tsToolbar.Text = "toolStrip1"; - this.tsToolbar.Visible = false; - // - // frmDebugger - // - this.AllowDrop = true; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1075, 684); - this.Controls.Add(this.splitContainer); - this.Controls.Add(this.ctrlCpuMemoryMapping); - this.Controls.Add(this.ctrlPpuMemoryMapping); - this.Controls.Add(this.statusStrip); - this.Controls.Add(this.tsToolbar); - this.Controls.Add(this.menuStrip); - this.MainMenuStrip = this.menuStrip; - this.MinimumSize = new System.Drawing.Size(850, 685); - this.Name = "frmDebugger"; - this.Text = "Debugger"; - this.DragDrop += new System.Windows.Forms.DragEventHandler(this.frmDebugger_DragDrop); - this.DragEnter += new System.Windows.Forms.DragEventHandler(this.frmDebugger_DragEnter); - this.splitContainer.Panel1.ResumeLayout(false); - this.splitContainer.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); - this.splitContainer.ResumeLayout(false); - this.ctrlSplitContainerTop.Panel1.ResumeLayout(false); - this.ctrlSplitContainerTop.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainerTop)).EndInit(); - this.ctrlSplitContainerTop.ResumeLayout(false); - this.tlpTop.ResumeLayout(false); - this.panel1.ResumeLayout(false); - this.panel2.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - this.tlpFunctionLabelLists.ResumeLayout(false); - this.grpLabels.ResumeLayout(false); - this.grpFunctions.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.picWatchHelp)).EndInit(); - this.tableLayoutPanel10.ResumeLayout(false); - this.grpWatch.ResumeLayout(false); - this.grpBreakpoints.ResumeLayout(false); - this.grpCallstack.ResumeLayout(false); - this.menuStrip.ResumeLayout(false); - this.menuStrip.PerformLayout(); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + this.statusStrip.Location = new System.Drawing.Point(0, 660); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1075, 24); + this.statusStrip.TabIndex = 3; + this.statusStrip.Text = "statusStrip1"; + // + // lblPrgAnalysis + // + this.lblPrgAnalysis.BorderStyle = System.Windows.Forms.Border3DStyle.Etched; + this.lblPrgAnalysis.Name = "lblPrgAnalysis"; + this.lblPrgAnalysis.Size = new System.Drawing.Size(80, 19); + this.lblPrgAnalysis.Text = "PRG analysis:"; + // + // lblPrgAnalysisResult + // + this.lblPrgAnalysisResult.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right; + this.lblPrgAnalysisResult.BorderStyle = System.Windows.Forms.Border3DStyle.Etched; + this.lblPrgAnalysisResult.Name = "lblPrgAnalysisResult"; + this.lblPrgAnalysisResult.Size = new System.Drawing.Size(255, 19); + this.lblPrgAnalysisResult.Text = "xx% (Code: xx%, Data: xx%, Unknown: xx%)"; + // + // lblChrAnalysis + // + this.lblChrAnalysis.Name = "lblChrAnalysis"; + this.lblChrAnalysis.Size = new System.Drawing.Size(81, 19); + this.lblChrAnalysis.Text = "CHR analysis:"; + // + // lblChrAnalysisResult + // + this.lblChrAnalysisResult.Name = "lblChrAnalysisResult"; + this.lblChrAnalysisResult.Size = new System.Drawing.Size(259, 19); + this.lblChrAnalysisResult.Text = "xx% (Drawn: xx%, Read: xx%, Unknown: xx%)"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(286, 19); + this.toolStripStatusLabel1.Spring = true; + // + // lblCyclesElapsedCount + // + this.lblCyclesElapsedCount.Name = "lblCyclesElapsedCount"; + this.lblCyclesElapsedCount.Size = new System.Drawing.Size(14, 19); + this.lblCyclesElapsedCount.Text = "0"; + // + // lblCyclesElapsed + // + this.lblCyclesElapsed.Margin = new System.Windows.Forms.Padding(-3, 3, 0, 2); + this.lblCyclesElapsed.Name = "lblCyclesElapsed"; + this.lblCyclesElapsed.Size = new System.Drawing.Size(88, 19); + this.lblCyclesElapsed.Text = "cycles elapsed"; + // + // ctrlPpuMemoryMapping + // + this.ctrlPpuMemoryMapping.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ctrlPpuMemoryMapping.Location = new System.Drawing.Point(0, 627); + this.ctrlPpuMemoryMapping.Name = "ctrlPpuMemoryMapping"; + this.ctrlPpuMemoryMapping.Size = new System.Drawing.Size(1075, 33); + this.ctrlPpuMemoryMapping.TabIndex = 5; + this.ctrlPpuMemoryMapping.Text = "ctrlMemoryMapping1"; + this.ctrlPpuMemoryMapping.Visible = false; + // + // ctrlCpuMemoryMapping + // + this.ctrlCpuMemoryMapping.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ctrlCpuMemoryMapping.Location = new System.Drawing.Point(0, 594); + this.ctrlCpuMemoryMapping.Name = "ctrlCpuMemoryMapping"; + this.ctrlCpuMemoryMapping.Size = new System.Drawing.Size(1075, 33); + this.ctrlCpuMemoryMapping.TabIndex = 4; + this.ctrlCpuMemoryMapping.Text = "ctrlMemoryMapping1"; + this.ctrlCpuMemoryMapping.Visible = false; + // + // tsToolbar + // + this.tsToolbar.Location = new System.Drawing.Point(0, 24); + this.tsToolbar.Name = "tsToolbar"; + this.tsToolbar.Size = new System.Drawing.Size(1075, 25); + this.tsToolbar.TabIndex = 6; + this.tsToolbar.Text = "toolStrip1"; + this.tsToolbar.Visible = false; + // + // mnuBreakOnUnlogged + // + this.mnuBreakOnUnlogged.CheckOnClick = true; + this.mnuBreakOnUnlogged.Name = "mnuBreakOnUnlogged"; + this.mnuBreakOnUnlogged.Size = new System.Drawing.Size(273, 22); + this.mnuBreakOnUnlogged.Text = "Break on unlogged code"; + this.mnuBreakOnUnlogged.Click += new System.EventHandler(this.mnuBreakOnUnlogged_Click); + + // + // frmDebugger + // + this.AllowDrop = true; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1075, 684); + this.Controls.Add(this.splitContainer); + this.Controls.Add(this.ctrlCpuMemoryMapping); + this.Controls.Add(this.ctrlPpuMemoryMapping); + this.Controls.Add(this.statusStrip); + this.Controls.Add(this.tsToolbar); + this.Controls.Add(this.menuStrip); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.MainMenuStrip = this.menuStrip; + this.MinimumSize = new System.Drawing.Size(850, 685); + this.Name = "frmDebugger"; + this.Text = "Debugger"; + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.frmDebugger_DragDrop); + this.DragEnter += new System.Windows.Forms.DragEventHandler(this.frmDebugger_DragEnter); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.ctrlSplitContainerTop.Panel1.ResumeLayout(false); + this.ctrlSplitContainerTop.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ctrlSplitContainerTop)).EndInit(); + this.ctrlSplitContainerTop.ResumeLayout(false); + this.tlpTop.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tlpFunctionLabelLists.ResumeLayout(false); + this.grpLabels.ResumeLayout(false); + this.grpFunctions.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picWatchHelp)).EndInit(); + this.tableLayoutPanel10.ResumeLayout(false); + this.grpWatch.ResumeLayout(false); + this.grpBreakpoints.ResumeLayout(false); + this.grpCallstack.ResumeLayout(false); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -2255,5 +2267,6 @@ namespace Mesen.GUI.Debugger private System.Windows.Forms.ToolStripMenuItem mnuGoToAddress; private System.Windows.Forms.ToolStripMenuItem mnuReloadRomOnPowerCycle; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem mnuBreakOnUnlogged; } } \ No newline at end of file diff --git a/GUI.NET/Debugger/frmDebugger.cs b/GUI.NET/Debugger/frmDebugger.cs index d280e2b5..da7f253d 100644 --- a/GUI.NET/Debugger/frmDebugger.cs +++ b/GUI.NET/Debugger/frmDebugger.cs @@ -108,6 +108,7 @@ namespace Mesen.GUI.Debugger this.mnuBreakOnPlay.Checked = ConfigManager.Config.DebugInfo.BreakOnPlay; this.mnuBreakOnOpen.Checked = ConfigManager.Config.DebugInfo.BreakOnOpen; this.mnuBreakOnUnofficialOpcodes.Checked = ConfigManager.Config.DebugInfo.BreakOnUnofficialOpcodes; + this.mnuBreakOnUnlogged.Checked = ConfigManager.Config.DebugInfo.BreakOnUnlogged; this.mnuBreakOnBrk.Checked = ConfigManager.Config.DebugInfo.BreakOnBrk; this.mnuBreakOnUninitMemoryRead.Checked = ConfigManager.Config.DebugInfo.BreakOnUninitMemoryRead; this.mnuBreakOnBusConflict.Checked = ConfigManager.Config.DebugInfo.BreakOnBusConflict; @@ -426,6 +427,7 @@ namespace Mesen.GUI.Debugger SetFlag(DebuggerFlags.ShowVerifiedData, config.ShowVerifiedData); SetFlag(DebuggerFlags.ShowUnidentifiedData, config.ShowUnidentifiedData); SetFlag(DebuggerFlags.BreakOnUnofficialOpCode, config.BreakOnUnofficialOpcodes); + SetFlag(DebuggerFlags.BreakOnUnlogged, config.BreakOnUnlogged); SetFlag(DebuggerFlags.BreakOnBrk, config.BreakOnBrk); SetFlag(DebuggerFlags.BreakOnUninitMemoryRead, config.BreakOnUninitMemoryRead); SetFlag(DebuggerFlags.BreakOnDecayedOamRead, config.BreakOnDecayedOamRead); @@ -1178,6 +1180,13 @@ namespace Mesen.GUI.Debugger UpdateDebuggerFlags(); } + private void mnuBreakOnUnlogged_Click(object sender, EventArgs e) + { + ConfigManager.Config.DebugInfo.BreakOnUnlogged = mnuBreakOnUnlogged.Checked; + ConfigManager.ApplyChanges(); + UpdateDebuggerFlags(); + } + private void mnuBreakOnBrk_Click(object sender, EventArgs e) { ConfigManager.Config.DebugInfo.BreakOnBrk = mnuBreakOnBrk.Checked; diff --git a/GUI.NET/Debugger/frmDebugger.resx b/GUI.NET/Debugger/frmDebugger.resx index 7435e7b0..1c762083 100644 --- a/GUI.NET/Debugger/frmDebugger.resx +++ b/GUI.NET/Debugger/frmDebugger.resx @@ -121,12 +121,12 @@ 17, 17 - 107, 17 + 110, 17 - 215, 17 + 222, 17 - 324, 17 + 335, 17 \ No newline at end of file diff --git a/GUI.NET/Dependencies/resources.en.xml b/GUI.NET/Dependencies/resources.en.xml index bfcb21d5..19cb2583 100644 --- a/GUI.NET/Dependencies/resources.en.xml +++ b/GUI.NET/Dependencies/resources.en.xml @@ -1362,6 +1362,7 @@ PPU Step BRK Unofficial OP code + Unlogged code Reset event Debugger focused Uninitialized memory read diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index 0e5f8184..1a52b858 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -1734,6 +1734,7 @@ namespace Mesen.GUI BreakOnPpu2006ScrollGlitch = 0x20000, BreakOnBusConflict = 0x40000, + BreakOnUnlogged = 0x80000, } public struct InteropRomInfo From 26b64330e333b4103299d0ec32abe2b823da3629 Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Thu, 15 Jul 2021 00:03:52 +0800 Subject: [PATCH 5/8] Update documentation --- Docs/content/configuration/Video.md | 2 +- Docs/content/debugging/Debugger.md | 1 + Docs/static/images/SpriteViewer.png | Bin 32492 -> 48944 bytes Docs/static/images/VideoOptions_General.png | Bin 12939 -> 31539 bytes 4 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Docs/content/configuration/Video.md b/Docs/content/configuration/Video.md index 8e72ec7d..d58e19d5 100644 --- a/Docs/content/configuration/Video.md +++ b/Docs/content/configuration/Video.md @@ -23,7 +23,7 @@ chapter: false **Fulscreen Resolution**: This option is shown only when exclusive fullsceen mode is enabled. It allows you to select the screen resolution that should be used when in exclusive fullscreen mode. The default resolution is the current Windows screen resolution. -**Requested Refresh Rate**: This option is shown only when exclusive fullsceen mode is enabled. It allows you to select your preferred refresh rate when running in exclusive fullscreen mode. +**Requested Refresh Rate**: This option is shown only when exclusive fullsceen mode is enabled. It allows you to select your preferred refresh rate for NTSC and PAL/Dendy when running in exclusive fullscreen mode. **Use integer scale values when entering fullscreen mode**: By default, fullscreen mode fills the entire screen. However, this can cause non-integer scaling values to be used -- for example, in 1080p resolution, the scale becomes 4.5x. Since this can cause irregularly shaped pixels, you can use this option to use the nearest integer scale value instead (e.g 4x in this example). diff --git a/Docs/content/debugging/Debugger.md b/Docs/content/debugging/Debugger.md index d2bcf820..da283d2a 100644 --- a/Docs/content/debugging/Debugger.md +++ b/Docs/content/debugging/Debugger.md @@ -392,6 +392,7 @@ The `Break Options` submenu contains a number of options to configure under whic * **Break on unofficial opcodes**: Break the emulation whenever an unofficial opcode is about to execute. * **Break on BRK**: Break the emulation whenever a BRK instruction is about to execute. * **Break on CPU crash**: Break the emulation whenever an instruction that will cause the CPU to freeze is about to execute. +* **Break on unlogged code**: Break the emulation whenever an instruction that haven't been logged is about to execute.
diff --git a/Docs/static/images/SpriteViewer.png b/Docs/static/images/SpriteViewer.png index fa348578b6ad93252c84b37787392c79b68346f3..9aaf71daf1ae1411aedbc3f2e773d67447ffb51f 100644 GIT binary patch literal 48944 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%0DBi}4#Gc=?++EZTEAw&w%d;R4_AB#w{) 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

Y{|Esab!K*kVJo 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 From a680f799e107eca26b6e396c513b5ab8991f7c7a Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Fri, 4 Jun 2021 11:51:16 +0100 Subject: [PATCH 6/8] HdPack loading fixes --- Core/HdPackLoader.cpp | 14 + Libretro/libretro.cpp | 52 +- Libretro/libretro.h | 1337 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 1299 insertions(+), 104 deletions(-) diff --git a/Core/HdPackLoader.cpp b/Core/HdPackLoader.cpp index cbc419f6..3d7d7b93 100644 --- a/Core/HdPackLoader.cpp +++ b/Core/HdPackLoader.cpp @@ -13,6 +13,15 @@ #define checkConstraint(x, y) if(!(x)) { MessageManager::Log(y); return; } +static const char windowsSlash = '\\'; +static const char unixSlash = '/'; +#if defined(_WIN32) +#define convertPathToNative(filepath) std::replace(filepath.begin(), filepath.end(), unixSlash, windowsSlash) +#else +#define convertPathToNative(filepath) std::replace(filepath.begin(), filepath.end(), windowsSlash, unixSlash) +#endif +#define convertPathToNativeVector(vector, idx) if (vector.size() > idx) { convertPathToNative(vector[idx]); } + HdPackLoader::HdPackLoader() { } @@ -165,14 +174,17 @@ bool HdPackLoader::LoadPack() ProcessOverscanTag(tokens); } else if(lineContent.substr(0, 5) == "") { lineContent = lineContent.substr(5); + convertPathToNative(lineContent); if(!ProcessImgTag(lineContent)) { return false; } } else if(lineContent.substr(0, 7) == "") { tokens = StringUtilities::Split(lineContent.substr(7), ','); + convertPathToNativeVector(tokens, 0); ProcessPatchTag(tokens); } else if(lineContent.substr(0, 12) == "") { tokens = StringUtilities::Split(lineContent.substr(12), ','); + convertPathToNativeVector(tokens, 0); ProcessBackgroundTag(tokens, conditions); } else if(lineContent.substr(0, 11) == "") { tokens = StringUtilities::Split(lineContent.substr(11), ','); @@ -186,9 +198,11 @@ bool HdPackLoader::LoadPack() ProcessOptionTag(tokens); } else if(lineContent.substr(0, 5) == "") { tokens = StringUtilities::Split(lineContent.substr(5), ','); + convertPathToNativeVector(tokens, 2); ProcessBgmTag(tokens); } else if(lineContent.substr(0, 5) == "") { tokens = StringUtilities::Split(lineContent.substr(5), ','); + convertPathToNativeVector(tokens, 2); ProcessSfxTag(tokens); } } diff --git a/Libretro/libretro.cpp b/Libretro/libretro.cpp index b2623ae6..02ad84cb 100644 --- a/Libretro/libretro.cpp +++ b/Libretro/libretro.cpp @@ -242,8 +242,18 @@ extern "C" { { 0 }, }; + static const struct retro_system_content_info_override content_overrides[] = { + { + "nes|fds|unf|unif", /* extensions */ + false, /* need_fullpath */ + false /* persistent_data */ + }, + { NULL, false, false } + }; + retroEnv(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars); retroEnv(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, (void*)ports); + retroEnv(RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE, (void*)content_overrides); } RETRO_API void retro_set_video_refresh(retro_video_refresh_t sendFrame) @@ -1034,7 +1044,43 @@ extern "C" { _console->GetSettings()->SetControllerType(2, ControllerType::None); _console->GetSettings()->SetControllerType(3, ControllerType::None); - VirtualFile romData(game->data, game->size, game->path); + // Attempt to fetch extended game info + const struct retro_game_info_ext *gameExt = NULL; + const void *gameData = NULL; + size_t gameSize = 0; + string gamePath(""); + if (retroEnv(RETRO_ENVIRONMENT_GET_GAME_INFO_EXT, &gameExt)) { + gameData = gameExt->data; + gameSize = gameExt->size; + if (gameExt->file_in_archive) { + // We don't have a 'physical' file in this + // case, but the core still needs a filename + // in order to detect associated content + // (i.e. HdPacks). We therefore fake it, using + // the content directory, canonical content + // name, and content file extension +#if defined(_WIN32) + char slash = '\\'; +#else + char slash = '/'; +#endif + gamePath = string(gameExt->dir) + + string(1, slash) + + string(gameExt->name) + + "." + + string(gameExt->ext); + } else { + gamePath = gameExt->full_path; + } + } else { + // No extended game info; all we have is the + // content fullpath from the retro_game_info + // struct + gamePath = game->path; + } + + // Load content + VirtualFile romData(gameData, gameSize, gamePath); bool result = _console->Initialize(romData); if(result) { @@ -1084,7 +1130,9 @@ extern "C" { info->library_name = "Mesen"; info->library_version = _mesenVersion.c_str(); - info->need_fullpath = false; + // need_fullpath is required since HdPacks are + // identified via the rom file name + info->need_fullpath = true; info->valid_extensions = "nes|fds|unf|unif"; info->block_extract = false; } diff --git a/Libretro/libretro.h b/Libretro/libretro.h index 315123c9..352a8d1c 100644 --- a/Libretro/libretro.h +++ b/Libretro/libretro.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2017 The RetroArch team +/* Copyright (C) 2010-2020 The RetroArch team * * --------------------------------------------------------------------------------------- * The following license statement only applies to this libretro API header (libretro.h). @@ -32,7 +32,7 @@ extern "C" { #endif #ifndef __cplusplus -#if defined(_MSC_VER) && !defined(SN_TARGET_PS3) +#if defined(_MSC_VER) && _MSC_VER < 1800 && !defined(SN_TARGET_PS3) /* Hack applied for MSVC when compiling in C89 mode * as it isn't C99-compliant. */ #define bool unsigned char @@ -128,7 +128,8 @@ extern "C" { /* LIGHTGUN device is similar to Guncon-2 for PlayStation 2. * It reports X/Y coordinates in screen space (similar to the pointer) - * in the range [-0x8000, 0x7fff] in both axes, with zero being center. + * in the range [-0x8000, 0x7fff] in both axes, with zero being center and + * -0x8000 being out of bounds. * As well as reporting on/off screen state. It features a trigger, * start/select buttons, auxiliary action buttons and a * directional pad. A forced off-screen shot can be requested for @@ -139,7 +140,8 @@ extern "C" { /* The ANALOG device is an extension to JOYPAD (RetroPad). * Similar to DualShock2 it adds two analog sticks and all buttons can * be analog. This is treated as a separate device type as it returns - * axis values in the full analog range of [-0x8000, 0x7fff]. + * axis values in the full analog range of [-0x7fff, 0x7fff], + * although some devices may return -0x8000. * Positive X axis is right. Positive Y axis is down. * Buttons are returned in the range [0, 0x7fff]. * Only use ANALOG type when polling for analog values. @@ -200,6 +202,8 @@ extern "C" { #define RETRO_DEVICE_ID_JOYPAD_L3 14 #define RETRO_DEVICE_ID_JOYPAD_R3 15 +#define RETRO_DEVICE_ID_JOYPAD_MASK 256 + /* Index / Id values for ANALOG device. */ #define RETRO_DEVICE_INDEX_ANALOG_LEFT 0 #define RETRO_DEVICE_INDEX_ANALOG_RIGHT 1 @@ -246,6 +250,7 @@ extern "C" { #define RETRO_DEVICE_ID_POINTER_X 0 #define RETRO_DEVICE_ID_POINTER_Y 1 #define RETRO_DEVICE_ID_POINTER_PRESSED 2 +#define RETRO_DEVICE_ID_POINTER_COUNT 3 /* Returned from retro_get_region(). */ #define RETRO_REGION_NTSC 0 @@ -270,6 +275,14 @@ enum retro_language RETRO_LANGUAGE_ESPERANTO = 13, RETRO_LANGUAGE_POLISH = 14, RETRO_LANGUAGE_VIETNAMESE = 15, + RETRO_LANGUAGE_ARABIC = 16, + RETRO_LANGUAGE_GREEK = 17, + RETRO_LANGUAGE_TURKISH = 18, + RETRO_LANGUAGE_SLOVAK = 19, + RETRO_LANGUAGE_PERSIAN = 20, + RETRO_LANGUAGE_HEBREW = 21, + RETRO_LANGUAGE_ASTURIAN = 22, + RETRO_LANGUAGE_FINNISH = 23, RETRO_LANGUAGE_LAST, /* Ensure sizeof(enum) == sizeof(int) */ @@ -375,6 +388,10 @@ enum retro_key RETROK_x = 120, RETROK_y = 121, RETROK_z = 122, + RETROK_LEFTBRACE = 123, + RETROK_BAR = 124, + RETROK_RIGHTBRACE = 125, + RETROK_TILDE = 126, RETROK_DELETE = 127, RETROK_KP0 = 256, @@ -445,6 +462,7 @@ enum retro_key RETROK_POWER = 320, RETROK_EURO = 321, RETROK_UNDO = 322, + RETROK_OEM_102 = 323, RETROK_LAST, @@ -476,11 +494,13 @@ enum retro_mod /* Environment commands. */ #define RETRO_ENVIRONMENT_SET_ROTATION 1 /* const unsigned * -- * Sets screen rotation of graphics. - * Is only implemented if rotation can be accelerated by hardware. * Valid values are 0, 1, 2, 3, which rotates screen by 0, 90, 180, * 270 degrees counter-clockwise respectively. */ #define RETRO_ENVIRONMENT_GET_OVERSCAN 2 /* bool * -- + * NOTE: As of 2019 this callback is considered deprecated in favor of + * using core options to manage overscan in a more nuanced, core-specific way. + * * Boolean value whether or not the implementation should use overscan, * or crop away overscan. */ @@ -594,8 +614,11 @@ enum retro_mod * GET_VARIABLE. * This allows the frontend to present these variables to * a user dynamically. - * This should be called as early as possible (ideally in - * retro_set_environment). + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterward it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. * * 'data' points to an array of retro_variable structs * terminated by a { NULL, NULL } element. @@ -649,6 +672,15 @@ enum retro_mod /* Environment 20 was an obsolete version of SET_AUDIO_CALLBACK. * It was not used by any known core at the time, * and was removed from the API. */ +#define RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK 21 + /* const struct retro_frame_time_callback * -- + * Lets the core know how much time has passed since last + * invocation of retro_run(). + * The frontend can tamper with the timing to fake fast-forward, + * slow-motion, frame stepping, etc. + * In this case the delta time will use the reference value + * in frame_time_callback.. + */ #define RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK 22 /* const struct retro_audio_callback * -- * Sets an interface which is used to notify a libretro core about audio @@ -675,21 +707,15 @@ enum retro_mod * A libretro core using SET_AUDIO_CALLBACK should also make use of * SET_FRAME_TIME_CALLBACK. */ -#define RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK 21 - /* const struct retro_frame_time_callback * -- - * Lets the core know how much time has passed since last - * invocation of retro_run(). - * The frontend can tamper with the timing to fake fast-forward, - * slow-motion, frame stepping, etc. - * In this case the delta time will use the reference value - * in frame_time_callback.. - */ #define RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE 23 /* struct retro_rumble_interface * -- * Gets an interface which is used by a libretro core to set * state of rumble motors in controllers. * A strong and weak motor is supported, and they can be * controlled indepedently. + * Should be called from either retro_init() or retro_load_game(). + * Should not be called from retro_set_environment(). + * Returns false if rumble functionality is unavailable. */ #define RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES 24 /* uint64_t * -- @@ -770,17 +796,18 @@ enum retro_mod */ #define RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY 31 /* const char ** -- - * Returns the "save" directory of the frontend. - * This directory can be used to store SRAM, memory cards, - * high scores, etc, if the libretro core + * Returns the "save" directory of the frontend, unless there is no + * save directory available. The save directory should be used to + * store SRAM, memory cards, high scores, etc, if the libretro core * cannot use the regular memory interface (retro_get_memory_data()). * - * NOTE: libretro cores used to check GET_SYSTEM_DIRECTORY for - * similar things before. - * They should still check GET_SYSTEM_DIRECTORY if they want to - * be backwards compatible. - * The path here can be NULL. It should only be non-NULL if the - * frontend user has set a specific save path. + * If the frontend cannot designate a save directory, it will return + * NULL to indicate that the core should attempt to operate without a + * save directory set. + * + * NOTE: early libretro cores used the system directory for save + * files. Cores that need to be backwards-compatible can still check + * GET_SYSTEM_DIRECTORY. */ #define RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO 32 /* const struct retro_system_av_info * -- @@ -848,26 +875,39 @@ enum retro_mod #define RETRO_ENVIRONMENT_SET_CONTROLLER_INFO 35 /* const struct retro_controller_info * -- * This environment call lets a libretro core tell the frontend - * which controller types are recognized in calls to + * which controller subclasses are recognized in calls to * retro_set_controller_port_device(). * - * Some emulators such as Super Nintendo - * support multiple lightgun types which must be specifically - * selected from. - * It is therefore sometimes necessary for a frontend to be able - * to tell the core about a special kind of input device which is - * not covered by the libretro input API. + * Some emulators such as Super Nintendo support multiple lightgun + * types which must be specifically selected from. It is therefore + * sometimes necessary for a frontend to be able to tell the core + * about a special kind of input device which is not specifcally + * provided by the Libretro API. * - * In order for a frontend to understand the workings of an input device, - * it must be a specialized type - * of the generic device types already defined in the libretro API. + * In order for a frontend to understand the workings of those devices, + * they must be defined as a specialized subclass of the generic device + * types already defined in the libretro API. * - * Which devices are supported can vary per input port. * The core must pass an array of const struct retro_controller_info which - * is terminated with a blanked out struct. Each element of the struct - * corresponds to an ascending port index to - * retro_set_controller_port_device(). - * Even if special device types are set in the libretro core, + * is terminated with a blanked out struct. Each element of the + * retro_controller_info struct corresponds to the ascending port index + * that is passed to retro_set_controller_port_device() when that function + * is called to indicate to the core that the frontend has changed the + * active device subclass. SEE ALSO: retro_set_controller_port_device() + * + * The ascending input port indexes provided by the core in the struct + * are generally presented by frontends as ascending User # or Player #, + * such as Player 1, Player 2, Player 3, etc. Which device subclasses are + * supported can vary per input port. + * + * The first inner element of each entry in the retro_controller_info array + * is a retro_controller_description struct that specifies the names and + * codes of all device subclasses that are available for the corresponding + * User or Player, beginning with the generic Libretro device that the + * subclasses are derived from. The second inner element of each entry is the + * total number of subclasses that are listed in the retro_controller_description. + * + * NOTE: Even if special device types are set in the libretro core, * libretro should only poll input based on the base input device types. */ #define RETRO_ENVIRONMENT_SET_MEMORY_MAPS (36 | RETRO_ENVIRONMENT_EXPERIMENTAL) @@ -946,7 +986,37 @@ enum retro_mod * A frontend must make sure that the pointer obtained from this function is * writeable (and readable). */ - +#define RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE (41 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const struct retro_hw_render_interface ** -- + * Returns an API specific rendering interface for accessing API specific data. + * Not all HW rendering APIs support or need this. + * The contents of the returned pointer is specific to the rendering API + * being used. See the various headers like libretro_vulkan.h, etc. + * + * GET_HW_RENDER_INTERFACE cannot be called before context_reset has been called. + * Similarly, after context_destroyed callback returns, + * the contents of the HW_RENDER_INTERFACE are invalidated. + */ +#define RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS (42 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const bool * -- + * If true, the libretro implementation supports achievements + * either via memory descriptors set with RETRO_ENVIRONMENT_SET_MEMORY_MAPS + * or via retro_get_memory_data/retro_get_memory_size. + * + * This must be called before the first call to retro_run. + */ +#define RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE (43 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* const struct retro_hw_render_context_negotiation_interface * -- + * Sets an interface which lets the libretro core negotiate with frontend how a context is created. + * The semantics of this interface depends on which API is used in SET_HW_RENDER earlier. + * This interface will be used when the frontend is trying to create a HW rendering context, + * so it will be used after SET_HW_RENDER, but before the context_reset callback. + */ +#define RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS 44 + /* uint64_t * -- + * Sets quirk flags associated with serialization. The frontend will zero any flags it doesn't + * recognize or support. Should be set in either retro_init or retro_load_game, but not both. + */ #define RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT (44 | RETRO_ENVIRONMENT_EXPERIMENTAL) /* N/A (null) * -- * The frontend will try to use a 'shared' hardware context (mostly applicable @@ -958,19 +1028,475 @@ enum retro_mod * This will do nothing on its own until SET_HW_RENDER env callbacks are * being used. */ - #define RETRO_ENVIRONMENT_GET_VFS_INTERFACE (45 | RETRO_ENVIRONMENT_EXPERIMENTAL) /* struct retro_vfs_interface_info * -- * Gets access to the VFS interface. * VFS presence needs to be queried prior to load_game or any * get_system/save/other_directory being called to let front end know * core supports VFS before it starts handing out paths. - * It is recomended to do so in retro_set_environment */ + * It is recomended to do so in retro_set_environment + */ +#define RETRO_ENVIRONMENT_GET_LED_INTERFACE (46 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_led_interface * -- + * Gets an interface which is used by a libretro core to set + * state of LEDs. + */ +#define RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE (47 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* int * -- + * Tells the core if the frontend wants audio or video. + * If disabled, the frontend will discard the audio or video, + * so the core may decide to skip generating a frame or generating audio. + * This is mainly used for increasing performance. + * Bit 0 (value 1): Enable Video + * Bit 1 (value 2): Enable Audio + * Bit 2 (value 4): Use Fast Savestates. + * Bit 3 (value 8): Hard Disable Audio + * Other bits are reserved for future use and will default to zero. + * If video is disabled: + * * The frontend wants the core to not generate any video, + * including presenting frames via hardware acceleration. + * * The frontend's video frame callback will do nothing. + * * After running the frame, the video output of the next frame should be + * no different than if video was enabled, and saving and loading state + * should have no issues. + * If audio is disabled: + * * The frontend wants the core to not generate any audio. + * * The frontend's audio callbacks will do nothing. + * * After running the frame, the audio output of the next frame should be + * no different than if audio was enabled, and saving and loading state + * should have no issues. + * Fast Savestates: + * * Guaranteed to be created by the same binary that will load them. + * * Will not be written to or read from the disk. + * * Suggest that the core assumes loading state will succeed. + * * Suggest that the core updates its memory buffers in-place if possible. + * * Suggest that the core skips clearing memory. + * * Suggest that the core skips resetting the system. + * * Suggest that the core may skip validation steps. + * Hard Disable Audio: + * * Used for a secondary core when running ahead. + * * Indicates that the frontend will never need audio from the core. + * * Suggests that the core may stop synthesizing audio, but this should not + * compromise emulation accuracy. + * * Audio output for the next frame does not matter, and the frontend will + * never need an accurate audio state in the future. + * * State will never be saved when using Hard Disable Audio. + */ +#define RETRO_ENVIRONMENT_GET_MIDI_INTERFACE (48 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_midi_interface ** -- + * Returns a MIDI interface that can be used for raw data I/O. + */ + +#define RETRO_ENVIRONMENT_GET_FASTFORWARDING (49 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* bool * -- + * Boolean value that indicates whether or not the frontend is in + * fastforwarding mode. + */ + +#define RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE (50 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* float * -- + * Float value that lets us know what target refresh rate + * is curently in use by the frontend. + * + * The core can use the returned value to set an ideal + * refresh rate/framerate. + */ + +#define RETRO_ENVIRONMENT_GET_INPUT_BITMASKS (51 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* bool * -- + * Boolean value that indicates whether or not the frontend supports + * input bitmasks being returned by retro_input_state_t. The advantage + * of this is that retro_input_state_t has to be only called once to + * grab all button states instead of multiple times. + * + * If it returns true, you can pass RETRO_DEVICE_ID_JOYPAD_MASK as 'id' + * to retro_input_state_t (make sure 'device' is set to RETRO_DEVICE_JOYPAD). + * It will return a bitmask of all the digital buttons. + */ + +#define RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION 52 + /* unsigned * -- + * Unsigned value is the API version number of the core options + * interface supported by the frontend. If callback return false, + * API version is assumed to be 0. + * + * In legacy code, core options are set by passing an array of + * retro_variable structs to RETRO_ENVIRONMENT_SET_VARIABLES. + * This may be still be done regardless of the core options + * interface version. + * + * If version is >= 1 however, core options may instead be set by + * passing an array of retro_core_option_definition structs to + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS, or a 2D array of + * retro_core_option_definition structs to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL. + * This allows the core to additionally set option sublabel information + * and/or provide localisation support. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS 53 + /* const struct retro_core_option_definition ** -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 1. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * + * 'data' points to an array of retro_core_option_definition structs + * terminated by a { NULL, NULL, NULL, {{0}}, NULL } element. + * retro_core_option_definition::key should be namespaced to not collide + * with other implementations' keys. e.g. A core called + * 'foo' should use keys named as 'foo_option'. + * retro_core_option_definition::desc should contain a human readable + * description of the key. + * retro_core_option_definition::info should contain any additional human + * readable information text that a typical user may need to + * understand the functionality of the option. + * retro_core_option_definition::values is an array of retro_core_option_value + * structs terminated by a { NULL, NULL } element. + * > retro_core_option_definition::values[index].value is an expected option + * value. + * > retro_core_option_definition::values[index].label is a human readable + * label used when displaying the value on screen. If NULL, + * the value itself is used. + * retro_core_option_definition::default_value is the default core option + * setting. It must match one of the expected option values in the + * retro_core_option_definition::values array. If it does not, or the + * default value is NULL, the first entry in the + * retro_core_option_definition::values array is treated as the default. + * + * The number of possible options should be very limited, + * and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX. + * i.e. it should be feasible to cycle through options + * without a keyboard. + * + * Example entry: + * { + * "foo_option", + * "Speed hack coprocessor X", + * "Provides increased performance at the expense of reduced accuracy", + * { + * { "false", NULL }, + * { "true", NULL }, + * { "unstable", "Turbo (Unstable)" }, + * { NULL, NULL }, + * }, + * "false" + * } + * + * Only strings are operated on. The possible values will + * generally be displayed and stored as-is by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL 54 + /* const struct retro_core_options_intl * -- + * Allows an implementation to signal the environment + * which variables it might want to check for later using + * GET_VARIABLE. + * This allows the frontend to present these variables to + * a user dynamically. + * This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION + * returns an API version of >= 1. + * This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES. + * This should be called the first time as early as + * possible (ideally in retro_set_environment). + * Afterwards it may be called again for the core to communicate + * updated options to the frontend, but the number of core + * options must not change from the number in the initial call. + * + * This is fundamentally the same as RETRO_ENVIRONMENT_SET_CORE_OPTIONS, + * with the addition of localisation support. The description of the + * RETRO_ENVIRONMENT_SET_CORE_OPTIONS callback should be consulted + * for further details. + * + * 'data' points to a retro_core_options_intl struct. + * + * retro_core_options_intl::us is a pointer to an array of + * retro_core_option_definition structs defining the US English + * core options implementation. It must point to a valid array. + * + * retro_core_options_intl::local is a pointer to an array of + * retro_core_option_definition structs defining core options for + * the current frontend language. It may be NULL (in which case + * retro_core_options_intl::us is used by the frontend). Any items + * missing from this array will be read from retro_core_options_intl::us + * instead. + * + * NOTE: Default core option values are always taken from the + * retro_core_options_intl::us array. Any default values in + * retro_core_options_intl::local array will be ignored. + */ + +#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY 55 + /* struct retro_core_option_display * -- + * + * Allows an implementation to signal the environment to show + * or hide a variable when displaying core options. This is + * considered a *suggestion*. The frontend is free to ignore + * this callback, and its implementation not considered mandatory. + * + * 'data' points to a retro_core_option_display struct + * + * retro_core_option_display::key is a variable identifier + * which has already been set by SET_VARIABLES/SET_CORE_OPTIONS. + * + * retro_core_option_display::visible is a boolean, specifying + * whether variable should be displayed + * + * Note that all core option variables will be set visible by + * default when calling SET_VARIABLES/SET_CORE_OPTIONS. + */ + +#define RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER 56 + /* unsigned * -- + * + * Allows an implementation to ask frontend preferred hardware + * context to use. Core should use this information to deal + * with what specific context to request with SET_HW_RENDER. + * + * 'data' points to an unsigned variable + */ + +#define RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION 57 + /* unsigned * -- + * Unsigned value is the API version number of the disk control + * interface supported by the frontend. If callback return false, + * API version is assumed to be 0. + * + * In legacy code, the disk control interface is defined by passing + * a struct of type retro_disk_control_callback to + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. + * This may be still be done regardless of the disk control + * interface version. + * + * If version is >= 1 however, the disk control interface may + * instead be defined by passing a struct of type + * retro_disk_control_ext_callback to + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. + * This allows the core to provide additional information about + * disk images to the frontend and/or enables extra + * disk control functionality by the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE 58 + /* const struct retro_disk_control_ext_callback * -- + * Sets an interface which frontend can use to eject and insert + * disk images, and also obtain information about individual + * disk image files registered by the core. + * This is used for games which consist of multiple images and + * must be manually swapped out by the user (e.g. PSX, floppy disk + * based systems). + */ + +#define RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION 59 + /* unsigned * -- + * Unsigned value is the API version number of the message + * interface supported by the frontend. If callback returns + * false, API version is assumed to be 0. + * + * In legacy code, messages may be displayed in an + * implementation-specific manner by passing a struct + * of type retro_message to RETRO_ENVIRONMENT_SET_MESSAGE. + * This may be still be done regardless of the message + * interface version. + * + * If version is >= 1 however, messages may instead be + * displayed by passing a struct of type retro_message_ext + * to RETRO_ENVIRONMENT_SET_MESSAGE_EXT. This allows the + * core to specify message logging level, priority and + * destination (OSD, logging interface or both). + */ + +#define RETRO_ENVIRONMENT_SET_MESSAGE_EXT 60 + /* const struct retro_message_ext * -- + * Sets a message to be displayed in an implementation-specific + * manner for a certain amount of 'frames'. Additionally allows + * the core to specify message logging level, priority and + * destination (OSD, logging interface or both). + * Should not be used for trivial messages, which should simply be + * logged via RETRO_ENVIRONMENT_GET_LOG_INTERFACE (or as a + * fallback, stderr). + */ + +#define RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS 61 + /* unsigned * -- + * Unsigned value is the number of active input devices + * provided by the frontend. This may change between + * frames, but will remain constant for the duration + * of each frame. + * If callback returns true, a core need not poll any + * input device with an index greater than or equal to + * the number of active devices. + * If callback returns false, the number of active input + * devices is unknown. In this case, all input devices + * should be considered active. + */ + +#define RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK 62 + /* const struct retro_audio_buffer_status_callback * -- + * Lets the core know the occupancy level of the frontend + * audio buffer. Can be used by a core to attempt frame + * skipping in order to avoid buffer under-runs. + * A core may pass NULL to disable buffer status reporting + * in the frontend. + */ + +#define RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY 63 + /* const unsigned * -- + * Sets minimum frontend audio latency in milliseconds. + * Resultant audio latency may be larger than set value, + * or smaller if a hardware limit is encountered. A frontend + * is expected to honour requests up to 512 ms. + * + * - If value is less than current frontend + * audio latency, callback has no effect + * - If value is zero, default frontend audio + * latency is set + * + * May be used by a core to increase audio latency and + * therefore decrease the probability of buffer under-runs + * (crackling) when performing 'intensive' operations. + * A core utilising RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK + * to implement audio-buffer-based frame skipping may achieve + * optimal results by setting the audio latency to a 'high' + * (typically 6x or 8x) integer multiple of the expected + * frame time. + * + * WARNING: This can only be called from within retro_run(). + * Calling this can require a full reinitialization of audio + * drivers in the frontend, so it is important to call it very + * sparingly, and usually only with the users explicit consent. + * An eventual driver reinitialize will happen so that audio + * callbacks happening after this call within the same retro_run() + * call will target the newly initialized driver. + */ + +#define RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE 64 + /* const struct retro_fastforwarding_override * -- + * Used by a libretro core to override the current + * fastforwarding mode of the frontend. + * If NULL is passed to this function, the frontend + * will return true if fastforwarding override + * functionality is supported (no change in + * fastforwarding state will occur in this case). + */ + +#define RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE 65 + /* const struct retro_system_content_info_override * -- + * Allows an implementation to override 'global' content + * info parameters reported by retro_get_system_info(). + * Overrides also affect subsystem content info parameters + * set via RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO. + * This function must be called inside retro_set_environment(). + * If callback returns false, content info overrides + * are unsupported by the frontend, and will be ignored. + * If callback returns true, extended game info may be + * retrieved by calling RETRO_ENVIRONMENT_GET_GAME_INFO_EXT + * in retro_load_game() or retro_load_game_special(). + * + * 'data' points to an array of retro_system_content_info_override + * structs terminated by a { NULL, false, false } element. + * If 'data' is NULL, no changes will be made to the frontend; + * a core may therefore pass NULL in order to test whether + * the RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE and + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT callbacks are supported + * by the frontend. + * + * For struct member descriptions, see the definition of + * struct retro_system_content_info_override. + * + * Example: + * + * - struct retro_system_info: + * { + * "My Core", // library_name + * "v1.0", // library_version + * "m3u|md|cue|iso|chd|sms|gg|sg", // valid_extensions + * true, // need_fullpath + * false // block_extract + * } + * + * - Array of struct retro_system_content_info_override: + * { + * { + * "md|sms|gg", // extensions + * false, // need_fullpath + * true // persistent_data + * }, + * { + * "sg", // extensions + * false, // need_fullpath + * false // persistent_data + * }, + * { NULL, false, false } + * } + * + * Result: + * - Files of type m3u, cue, iso, chd will not be + * loaded by the frontend. Frontend will pass a + * valid path to the core, and core will handle + * loading internally + * - Files of type md, sms, gg will be loaded by + * the frontend. A valid memory buffer will be + * passed to the core. This memory buffer will + * remain valid until retro_deinit() returns + * - Files of type sg will be loaded by the frontend. + * A valid memory buffer will be passed to the core. + * This memory buffer will remain valid until + * retro_load_game() (or retro_load_game_special()) + * returns + * + * NOTE: If an extension is listed multiple times in + * an array of retro_system_content_info_override + * structs, only the first instance will be registered + */ + +#define RETRO_ENVIRONMENT_GET_GAME_INFO_EXT 66 + /* const struct retro_game_info_ext ** -- + * Allows an implementation to fetch extended game + * information, providing additional content path + * and memory buffer status details. + * This function may only be called inside + * retro_load_game() or retro_load_game_special(). + * If callback returns false, extended game information + * is unsupported by the frontend. In this case, only + * regular retro_game_info will be available. + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT is guaranteed + * to return true if RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE + * returns true. + * + * 'data' points to an array of retro_game_info_ext structs. + * + * For struct member descriptions, see the definition of + * struct retro_game_info_ext. + * + * - If function is called inside retro_load_game(), + * the retro_game_info_ext array is guaranteed to + * have a size of 1 - i.e. the returned pointer may + * be used to access directly the members of the + * first retro_game_info_ext struct, for example: + * + * struct retro_game_info_ext *game_info_ext; + * if (environ_cb(RETRO_ENVIRONMENT_GET_GAME_INFO_EXT, &game_info_ext)) + * printf("Content Directory: %s\n", game_info_ext->dir); + * + * - If the function is called inside retro_load_game_special(), + * the retro_game_info_ext array is guaranteed to have a + * size equal to the num_info argument passed to + * retro_load_game_special() + */ /* VFS functionality */ /* File paths: - * File paths passed as parameters when using this api shall be well formed unix-style, + * File paths passed as parameters when using this API shall be well formed UNIX-style, * using "/" (unquoted forward slash) as directory separator regardless of the platform's native separator. * Paths shall also include at least one forward slash ("game.bin" is an invalid path, use "./game.bin" instead). * Other than the directory separator, cores shall not make assumptions about path format: @@ -988,6 +1514,10 @@ enum retro_mod * Introduced in VFS API v1 */ struct retro_vfs_file_handle; +/* Opaque directory handle + * Introduced in VFS API v3 */ +struct retro_vfs_dir_handle; + /* File open flags * Introduced in VFS API v1 */ #define RETRO_VFS_FILE_ACCESS_READ (1 << 0) /* Read only mode */ @@ -1007,6 +1537,12 @@ struct retro_vfs_file_handle; #define RETRO_VFS_SEEK_POSITION_CURRENT 1 #define RETRO_VFS_SEEK_POSITION_END 2 +/* stat() result flags + * Introduced in VFS API v3 */ +#define RETRO_VFS_STAT_IS_VALID (1 << 0) +#define RETRO_VFS_STAT_IS_DIRECTORY (1 << 1) +#define RETRO_VFS_STAT_IS_CHARACTER_SPECIAL (1 << 2) + /* Get path from opaque handle. Returns the exact same path passed to file_open when getting the handle * Introduced in VFS API v1 */ typedef const char *(RETRO_CALLCONV *retro_vfs_get_path_t)(struct retro_vfs_file_handle *stream); @@ -1016,7 +1552,7 @@ typedef const char *(RETRO_CALLCONV *retro_vfs_get_path_t)(struct retro_vfs_file * Introduced in VFS API v1 */ typedef struct retro_vfs_file_handle *(RETRO_CALLCONV *retro_vfs_open_t)(const char *path, unsigned mode, unsigned hints); -/* Close the file and release its resources. Must be called if open_file returns non-NULL. Returns 0 on succes, -1 on failure. +/* Close the file and release its resources. Must be called if open_file returns non-NULL. Returns 0 on success, -1 on failure. * Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used. * Introduced in VFS API v1 */ typedef int (RETRO_CALLCONV *retro_vfs_close_t)(struct retro_vfs_file_handle *stream); @@ -1025,7 +1561,11 @@ typedef int (RETRO_CALLCONV *retro_vfs_close_t)(struct retro_vfs_file_handle *st * Introduced in VFS API v1 */ typedef int64_t (RETRO_CALLCONV *retro_vfs_size_t)(struct retro_vfs_file_handle *stream); -/* Get the current read / write position for the file. Returns - 1 for error. +/* Truncate file to specified size. Returns 0 on success or -1 on error + * Introduced in VFS API v2 */ +typedef int64_t (RETRO_CALLCONV *retro_vfs_truncate_t)(struct retro_vfs_file_handle *stream, int64_t length); + +/* Get the current read / write position for the file. Returns -1 for error. * Introduced in VFS API v1 */ typedef int64_t (RETRO_CALLCONV *retro_vfs_tell_t)(struct retro_vfs_file_handle *stream); @@ -1053,8 +1593,42 @@ typedef int (RETRO_CALLCONV *retro_vfs_remove_t)(const char *path); * Introduced in VFS API v1 */ typedef int (RETRO_CALLCONV *retro_vfs_rename_t)(const char *old_path, const char *new_path); +/* Stat the specified file. Retruns a bitmask of RETRO_VFS_STAT_* flags, none are set if path was not valid. + * Additionally stores file size in given variable, unless NULL is given. + * Introduced in VFS API v3 */ +typedef int (RETRO_CALLCONV *retro_vfs_stat_t)(const char *path, int32_t *size); + +/* Create the specified directory. Returns 0 on success, -1 on unknown failure, -2 if already exists. + * Introduced in VFS API v3 */ +typedef int (RETRO_CALLCONV *retro_vfs_mkdir_t)(const char *dir); + +/* Open the specified directory for listing. Returns the opaque dir handle, or NULL for error. + * Support for the include_hidden argument may vary depending on the platform. + * Introduced in VFS API v3 */ +typedef struct retro_vfs_dir_handle *(RETRO_CALLCONV *retro_vfs_opendir_t)(const char *dir, bool include_hidden); + +/* Read the directory entry at the current position, and move the read pointer to the next position. + * Returns true on success, false if already on the last entry. + * Introduced in VFS API v3 */ +typedef bool (RETRO_CALLCONV *retro_vfs_readdir_t)(struct retro_vfs_dir_handle *dirstream); + +/* Get the name of the last entry read. Returns a string on success, or NULL for error. + * The returned string pointer is valid until the next call to readdir or closedir. + * Introduced in VFS API v3 */ +typedef const char *(RETRO_CALLCONV *retro_vfs_dirent_get_name_t)(struct retro_vfs_dir_handle *dirstream); + +/* Check if the last entry read was a directory. Returns true if it was, false otherwise (or on error). + * Introduced in VFS API v3 */ +typedef bool (RETRO_CALLCONV *retro_vfs_dirent_is_dir_t)(struct retro_vfs_dir_handle *dirstream); + +/* Close the directory and release its resources. Must be called if opendir returns non-NULL. Returns 0 on success, -1 on failure. + * Whether the call succeeds ot not, the handle passed as parameter becomes invalid and should no longer be used. + * Introduced in VFS API v3 */ +typedef int (RETRO_CALLCONV *retro_vfs_closedir_t)(struct retro_vfs_dir_handle *dirstream); + struct retro_vfs_interface { + /* VFS API v1 */ retro_vfs_get_path_t get_path; retro_vfs_open_t open; retro_vfs_close_t close; @@ -1066,6 +1640,16 @@ struct retro_vfs_interface retro_vfs_flush_t flush; retro_vfs_remove_t remove; retro_vfs_rename_t rename; + /* VFS API v2 */ + retro_vfs_truncate_t truncate; + /* VFS API v3 */ + retro_vfs_stat_t stat; + retro_vfs_mkdir_t mkdir; + retro_vfs_opendir_t opendir; + retro_vfs_readdir_t readdir; + retro_vfs_dirent_get_name_t dirent_get_name; + retro_vfs_dirent_is_dir_t dirent_is_dir; + retro_vfs_closedir_t closedir; }; struct retro_vfs_interface_info @@ -1083,8 +1667,13 @@ struct retro_vfs_interface_info enum retro_hw_render_interface_type { - RETRO_HW_RENDER_INTERFACE_VULKAN = 0, - RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX + RETRO_HW_RENDER_INTERFACE_VULKAN = 0, + RETRO_HW_RENDER_INTERFACE_D3D9 = 1, + RETRO_HW_RENDER_INTERFACE_D3D10 = 2, + RETRO_HW_RENDER_INTERFACE_D3D11 = 3, + RETRO_HW_RENDER_INTERFACE_D3D12 = 4, + RETRO_HW_RENDER_INTERFACE_GSKIT_PS2 = 5, + RETRO_HW_RENDER_INTERFACE_DUMMY = INT_MAX }; /* Base struct. All retro_hw_render_interface_* types @@ -1094,26 +1683,42 @@ struct retro_hw_render_interface enum retro_hw_render_interface_type interface_type; unsigned interface_version; }; -#define RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE (41 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const struct retro_hw_render_interface ** -- - * Returns an API specific rendering interface for accessing API specific data. - * Not all HW rendering APIs support or need this. - * The contents of the returned pointer is specific to the rendering API - * being used. See the various headers like libretro_vulkan.h, etc. - * - * GET_HW_RENDER_INTERFACE cannot be called before context_reset has been called. - * Similarly, after context_destroyed callback returns, - * the contents of the HW_RENDER_INTERFACE are invalidated. - */ -#define RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS (42 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const bool * -- - * If true, the libretro implementation supports achievements - * either via memory descriptors set with RETRO_ENVIRONMENT_SET_MEMORY_MAPS - * or via retro_get_memory_data/retro_get_memory_size. - * - * This must be called before the first call to retro_run. - */ +typedef void (RETRO_CALLCONV *retro_set_led_state_t)(int led, int state); +struct retro_led_interface +{ + retro_set_led_state_t set_led_state; +}; + +/* Retrieves the current state of the MIDI input. + * Returns true if it's enabled, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_input_enabled_t)(void); + +/* Retrieves the current state of the MIDI output. + * Returns true if it's enabled, false otherwise */ +typedef bool (RETRO_CALLCONV *retro_midi_output_enabled_t)(void); + +/* Reads next byte from the input stream. + * Returns true if byte is read, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_read_t)(uint8_t *byte); + +/* Writes byte to the output stream. + * 'delta_time' is in microseconds and represent time elapsed since previous write. + * Returns true if byte is written, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_write_t)(uint8_t byte, uint32_t delta_time); + +/* Flushes previously written data. + * Returns true if successful, false otherwise. */ +typedef bool (RETRO_CALLCONV *retro_midi_flush_t)(void); + +struct retro_midi_interface +{ + retro_midi_input_enabled_t input_enabled; + retro_midi_output_enabled_t output_enabled; + retro_midi_read_t read; + retro_midi_write_t write; + retro_midi_flush_t flush; +}; enum retro_hw_render_context_negotiation_interface_type { @@ -1128,13 +1733,6 @@ struct retro_hw_render_context_negotiation_interface enum retro_hw_render_context_negotiation_interface_type interface_type; unsigned interface_version; }; -#define RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE (43 | RETRO_ENVIRONMENT_EXPERIMENTAL) - /* const struct retro_hw_render_context_negotiation_interface * -- - * Sets an interface which lets the libretro core negotiate with frontend how a context is created. - * The semantics of this interface depends on which API is used in SET_HW_RENDER earlier. - * This interface will be used when the frontend is trying to create a HW rendering context, - * so it will be used after SET_HW_RENDER, but before the context_reset callback. - */ /* Serialized state is incomplete in some way. Set if serialization is * usable in typical end-user cases but should not be relied upon to @@ -1160,20 +1758,17 @@ struct retro_hw_render_context_negotiation_interface * dependence */ #define RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT (1 << 6) -#define RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS 44 - /* uint64_t * -- - * Sets quirk flags associated with serialization. The frontend will zero any flags it doesn't - * recognize or support. Should be set in either retro_init or retro_load_game, but not both. - */ - -#define RETRO_MEMDESC_CONST (1 << 0) /* The frontend will never change this memory area once retro_load_game has returned. */ -#define RETRO_MEMDESC_BIGENDIAN (1 << 1) /* The memory area contains big endian data. Default is little endian. */ -#define RETRO_MEMDESC_ALIGN_2 (1 << 16) /* All memory access in this area is aligned to their own size, or 2, whichever is smaller. */ -#define RETRO_MEMDESC_ALIGN_4 (2 << 16) -#define RETRO_MEMDESC_ALIGN_8 (3 << 16) -#define RETRO_MEMDESC_MINSIZE_2 (1 << 24) /* All memory in this region is accessed at least 2 bytes at the time. */ -#define RETRO_MEMDESC_MINSIZE_4 (2 << 24) -#define RETRO_MEMDESC_MINSIZE_8 (3 << 24) +#define RETRO_MEMDESC_CONST (1 << 0) /* The frontend will never change this memory area once retro_load_game has returned. */ +#define RETRO_MEMDESC_BIGENDIAN (1 << 1) /* The memory area contains big endian data. Default is little endian. */ +#define RETRO_MEMDESC_SYSTEM_RAM (1 << 2) /* The memory area is system RAM. This is main RAM of the gaming system. */ +#define RETRO_MEMDESC_SAVE_RAM (1 << 3) /* The memory area is save RAM. This RAM is usually found on a game cartridge, backed up by a battery. */ +#define RETRO_MEMDESC_VIDEO_RAM (1 << 4) /* The memory area is video RAM (VRAM) */ +#define RETRO_MEMDESC_ALIGN_2 (1 << 16) /* All memory access in this area is aligned to their own size, or 2, whichever is smaller. */ +#define RETRO_MEMDESC_ALIGN_4 (2 << 16) +#define RETRO_MEMDESC_ALIGN_8 (3 << 16) +#define RETRO_MEMDESC_MINSIZE_2 (1 << 24) /* All memory in this region is accessed at least 2 bytes at the time. */ +#define RETRO_MEMDESC_MINSIZE_4 (2 << 24) +#define RETRO_MEMDESC_MINSIZE_8 (3 << 24) struct retro_memory_descriptor { uint64_t flags; @@ -1574,6 +2169,10 @@ enum retro_sensor_action { RETRO_SENSOR_ACCELEROMETER_ENABLE = 0, RETRO_SENSOR_ACCELEROMETER_DISABLE, + RETRO_SENSOR_GYROSCOPE_ENABLE, + RETRO_SENSOR_GYROSCOPE_DISABLE, + RETRO_SENSOR_ILLUMINANCE_ENABLE, + RETRO_SENSOR_ILLUMINANCE_DISABLE, RETRO_SENSOR_DUMMY = INT_MAX }; @@ -1582,6 +2181,10 @@ enum retro_sensor_action #define RETRO_SENSOR_ACCELEROMETER_X 0 #define RETRO_SENSOR_ACCELEROMETER_Y 1 #define RETRO_SENSOR_ACCELEROMETER_Z 2 +#define RETRO_SENSOR_GYROSCOPE_X 3 +#define RETRO_SENSOR_GYROSCOPE_Y 4 +#define RETRO_SENSOR_GYROSCOPE_Z 5 +#define RETRO_SENSOR_ILLUMINANCE 6 typedef bool (RETRO_CALLCONV *retro_set_sensor_state_t)(unsigned port, enum retro_sensor_action action, unsigned rate); @@ -1779,6 +2382,30 @@ struct retro_frame_time_callback retro_usec_t reference; }; +/* Notifies a libretro core of the current occupancy + * level of the frontend audio buffer. + * + * - active: 'true' if audio buffer is currently + * in use. Will be 'false' if audio is + * disabled in the frontend + * + * - occupancy: Given as a value in the range [0,100], + * corresponding to the occupancy percentage + * of the audio buffer + * + * - underrun_likely: 'true' if the frontend expects an + * audio buffer underrun during the + * next frame (indicates that a core + * should attempt frame skipping) + * + * It will be called right before retro_run() every frame. */ +typedef void (RETRO_CALLCONV *retro_audio_buffer_status_callback_t)( + bool active, unsigned occupancy, bool underrun_likely); +struct retro_audio_buffer_status_callback +{ + retro_audio_buffer_status_callback_t callback; +}; + /* Pass this to retro_video_refresh_t if rendering to hardware. * Passing NULL to retro_video_refresh_t is still a frame dupe as normal. * */ @@ -1822,6 +2449,10 @@ enum retro_hw_context_type /* Vulkan, see RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE. */ RETRO_HW_CONTEXT_VULKAN = 6, + /* Direct3D, set version_major to select the type of interface + * returned by RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE */ + RETRO_HW_CONTEXT_DIRECT3D = 7, + RETRO_HW_CONTEXT_DUMMY = INT_MAX }; @@ -1935,7 +2566,8 @@ struct retro_keyboard_callback retro_keyboard_event_t callback; }; -/* Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. +/* Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE & + * RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE. * Should be set for implementations which can swap out multiple disk * images in runtime. * @@ -1993,6 +2625,53 @@ typedef bool (RETRO_CALLCONV *retro_replace_image_index_t)(unsigned index, * with replace_image_index. */ typedef bool (RETRO_CALLCONV *retro_add_image_index_t)(void); +/* Sets initial image to insert in drive when calling + * core_load_game(). + * Since we cannot pass the initial index when loading + * content (this would require a major API change), this + * is set by the frontend *before* calling the core's + * retro_load_game()/retro_load_game_special() implementation. + * A core should therefore cache the index/path values and handle + * them inside retro_load_game()/retro_load_game_special(). + * - If 'index' is invalid (index >= get_num_images()), the + * core should ignore the set value and instead use 0 + * - 'path' is used purely for error checking - i.e. when + * content is loaded, the core should verify that the + * disk specified by 'index' has the specified file path. + * This is to guard against auto selecting the wrong image + * if (for example) the user should modify an existing M3U + * playlist. We have to let the core handle this because + * set_initial_image() must be called before loading content, + * i.e. the frontend cannot access image paths in advance + * and thus cannot perform the error check itself. + * If set path and content path do not match, the core should + * ignore the set 'index' value and instead use 0 + * Returns 'false' if index or 'path' are invalid, or core + * does not support this functionality + */ +typedef bool (RETRO_CALLCONV *retro_set_initial_image_t)(unsigned index, const char *path); + +/* Fetches the path of the specified disk image file. + * Returns 'false' if index is invalid (index >= get_num_images()) + * or path is otherwise unavailable. + */ +typedef bool (RETRO_CALLCONV *retro_get_image_path_t)(unsigned index, char *path, size_t len); + +/* Fetches a core-provided 'label' for the specified disk + * image file. In the simplest case this may be a file name + * (without extension), but for cores with more complex + * content requirements information may be provided to + * facilitate user disk swapping - for example, a core + * running floppy-disk-based content may uniquely label + * save disks, data disks, level disks, etc. with names + * corresponding to in-game disk change prompts (so the + * frontend can provide better user guidance than a 'dumb' + * disk index value). + * Returns 'false' if index is invalid (index >= get_num_images()) + * or label is otherwise unavailable. + */ +typedef bool (RETRO_CALLCONV *retro_get_image_label_t)(unsigned index, char *label, size_t len); + struct retro_disk_control_callback { retro_set_eject_state_t set_eject_state; @@ -2006,6 +2685,27 @@ struct retro_disk_control_callback retro_add_image_index_t add_image_index; }; +struct retro_disk_control_ext_callback +{ + retro_set_eject_state_t set_eject_state; + retro_get_eject_state_t get_eject_state; + + retro_get_image_index_t get_image_index; + retro_set_image_index_t set_image_index; + retro_get_num_images_t get_num_images; + + retro_replace_image_index_t replace_image_index; + retro_add_image_index_t add_image_index; + + /* NOTE: Frontend will only attempt to record/restore + * last used disk index if both set_initial_image() + * and get_image_path() are implemented */ + retro_set_initial_image_t set_initial_image; /* Optional - may be NULL */ + + retro_get_image_path_t get_image_path; /* Optional - may be NULL */ + retro_get_image_label_t get_image_label; /* Optional - may be NULL */ +}; + enum retro_pixel_format { /* 0RGB1555, native endian. @@ -2036,6 +2736,104 @@ struct retro_message unsigned frames; /* Duration in frames of message. */ }; +enum retro_message_target +{ + RETRO_MESSAGE_TARGET_ALL = 0, + RETRO_MESSAGE_TARGET_OSD, + RETRO_MESSAGE_TARGET_LOG +}; + +enum retro_message_type +{ + RETRO_MESSAGE_TYPE_NOTIFICATION = 0, + RETRO_MESSAGE_TYPE_NOTIFICATION_ALT, + RETRO_MESSAGE_TYPE_STATUS, + RETRO_MESSAGE_TYPE_PROGRESS +}; + +struct retro_message_ext +{ + /* Message string to be displayed/logged */ + const char *msg; + /* Duration (in ms) of message when targeting the OSD */ + unsigned duration; + /* Message priority when targeting the OSD + * > When multiple concurrent messages are sent to + * the frontend and the frontend does not have the + * capacity to display them all, messages with the + * *highest* priority value should be shown + * > There is no upper limit to a message priority + * value (within the bounds of the unsigned data type) + * > In the reference frontend (RetroArch), the same + * priority values are used for frontend-generated + * notifications, which are typically assigned values + * between 0 and 3 depending upon importance */ + unsigned priority; + /* Message logging level (info, warn, error, etc.) */ + enum retro_log_level level; + /* Message destination: OSD, logging interface or both */ + enum retro_message_target target; + /* Message 'type' when targeting the OSD + * > RETRO_MESSAGE_TYPE_NOTIFICATION: Specifies that a + * message should be handled in identical fashion to + * a standard frontend-generated notification + * > RETRO_MESSAGE_TYPE_NOTIFICATION_ALT: Specifies that + * message is a notification that requires user attention + * or action, but that it should be displayed in a manner + * that differs from standard frontend-generated notifications. + * This would typically correspond to messages that should be + * displayed immediately (independently from any internal + * frontend message queue), and/or which should be visually + * distinguishable from frontend-generated notifications. + * For example, a core may wish to inform the user of + * information related to a disk-change event. It is + * expected that the frontend itself may provide a + * notification in this case; if the core sends a + * message of type RETRO_MESSAGE_TYPE_NOTIFICATION, an + * uncomfortable 'double-notification' may occur. A message + * of RETRO_MESSAGE_TYPE_NOTIFICATION_ALT should therefore + * be presented such that visual conflict with regular + * notifications does not occur + * > RETRO_MESSAGE_TYPE_STATUS: Indicates that message + * is not a standard notification. This typically + * corresponds to 'status' indicators, such as a core's + * internal FPS, which are intended to be displayed + * either permanently while a core is running, or in + * a manner that does not suggest user attention or action + * is required. 'Status' type messages should therefore be + * displayed in a different on-screen location and in a manner + * easily distinguishable from both standard frontend-generated + * notifications and messages of type RETRO_MESSAGE_TYPE_NOTIFICATION_ALT + * > RETRO_MESSAGE_TYPE_PROGRESS: Indicates that message reports + * the progress of an internal core task. For example, in cases + * where a core itself handles the loading of content from a file, + * this may correspond to the percentage of the file that has been + * read. Alternatively, an audio/video playback core may use a + * message of type RETRO_MESSAGE_TYPE_PROGRESS to display the current + * playback position as a percentage of the runtime. 'Progress' type + * messages should therefore be displayed as a literal progress bar, + * where: + * - 'retro_message_ext.msg' is the progress bar title/label + * - 'retro_message_ext.progress' determines the length of + * the progress bar + * NOTE: Message type is a *hint*, and may be ignored + * by the frontend. If a frontend lacks support for + * displaying messages via alternate means than standard + * frontend-generated notifications, it will treat *all* + * messages as having the type RETRO_MESSAGE_TYPE_NOTIFICATION */ + enum retro_message_type type; + /* Task progress when targeting the OSD and message is + * of type RETRO_MESSAGE_TYPE_PROGRESS + * > -1: Unmetered/indeterminate + * > 0-100: Current progress percentage + * NOTE: Since message type is a hint, a frontend may ignore + * progress values. Where relevant, a core should therefore + * include progress percentage within the message string, + * such that the message intent remains clear when displayed + * as a standard frontend-generated notification */ + int8_t progress; +}; + /* Describes how the libretro implementation maps a libretro input bind * to its internal input system through a human readable string. * This string can be used to better let a user configure input. */ @@ -2056,7 +2854,7 @@ struct retro_input_descriptor struct retro_system_info { /* All pointers are owned by libretro implementation, and pointers must - * remain valid until retro_deinit() is called. */ + * remain valid until it is unloaded. */ const char *library_name; /* Descriptive name of library. Should not * contain any version numbers, etc. */ @@ -2069,17 +2867,26 @@ struct retro_system_info * Typically used for a GUI to filter * out extensions. */ - /* If true, retro_load_game() is guaranteed to provide a valid pathname - * in retro_game_info::path. - * ::data and ::size are both invalid. + /* Libretro cores that need to have direct access to their content + * files, including cores which use the path of the content files to + * determine the paths of other files, should set need_fullpath to true. * - * If false, ::data and ::size are guaranteed to be valid, but ::path - * might not be valid. + * Cores should strive for setting need_fullpath to false, + * as it allows the frontend to perform patching, etc. * - * This is typically set to true for libretro implementations that must - * load from file. - * Implementations should strive for setting this to false, as it allows - * the frontend to perform patching, etc. */ + * If need_fullpath is true and retro_load_game() is called: + * - retro_game_info::path is guaranteed to have a valid path + * - retro_game_info::data and retro_game_info::size are invalid + * + * If need_fullpath is false and retro_load_game() is called: + * - retro_game_info::path may be NULL + * - retro_game_info::data and retro_game_info::size are guaranteed + * to be valid + * + * See also: + * - RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + * - RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY + */ bool need_fullpath; /* If true, the frontend is not allowed to extract any archives before @@ -2089,6 +2896,213 @@ struct retro_system_info bool block_extract; }; +/* Defines overrides which modify frontend handling of + * specific content file types. + * An array of retro_system_content_info_override is + * passed to RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE + * NOTE: In the following descriptions, references to + * retro_load_game() may be replaced with + * retro_load_game_special() */ +struct retro_system_content_info_override +{ + /* A list of file extensions for which the override + * should apply, delimited by a 'pipe' character + * (e.g. "md|sms|gg") + * Permitted file extensions are limited to those + * included in retro_system_info::valid_extensions + * and/or retro_subsystem_rom_info::valid_extensions */ + const char *extensions; + + /* Overrides the need_fullpath value set in + * retro_system_info and/or retro_subsystem_rom_info. + * To reiterate: + * + * If need_fullpath is true and retro_load_game() is called: + * - retro_game_info::path is guaranteed to contain a valid + * path to an existent file + * - retro_game_info::data and retro_game_info::size are invalid + * + * If need_fullpath is false and retro_load_game() is called: + * - retro_game_info::path may be NULL + * - retro_game_info::data and retro_game_info::size are guaranteed + * to be valid + * + * In addition: + * + * If need_fullpath is true and retro_load_game() is called: + * - retro_game_info_ext::full_path is guaranteed to contain a valid + * path to an existent file + * - retro_game_info_ext::archive_path may be NULL + * - retro_game_info_ext::archive_file may be NULL + * - retro_game_info_ext::dir is guaranteed to contain a valid path + * to the directory in which the content file exists + * - retro_game_info_ext::name is guaranteed to contain the + * basename of the content file, without extension + * - retro_game_info_ext::ext is guaranteed to contain the + * extension of the content file in lower case format + * - retro_game_info_ext::data and retro_game_info_ext::size + * are invalid + * + * If need_fullpath is false and retro_load_game() is called: + * - If retro_game_info_ext::file_in_archive is false: + * - retro_game_info_ext::full_path is guaranteed to contain + * a valid path to an existent file + * - retro_game_info_ext::archive_path may be NULL + * - retro_game_info_ext::archive_file may be NULL + * - retro_game_info_ext::dir is guaranteed to contain a + * valid path to the directory in which the content file exists + * - retro_game_info_ext::name is guaranteed to contain the + * basename of the content file, without extension + * - retro_game_info_ext::ext is guaranteed to contain the + * extension of the content file in lower case format + * - If retro_game_info_ext::file_in_archive is true: + * - retro_game_info_ext::full_path may be NULL + * - retro_game_info_ext::archive_path is guaranteed to + * contain a valid path to an existent compressed file + * inside which the content file is located + * - retro_game_info_ext::archive_file is guaranteed to + * contain a valid path to an existent content file + * inside the compressed file referred to by + * retro_game_info_ext::archive_path + * e.g. for a compressed file '/path/to/foo.zip' + * containing 'bar.sfc' + * > retro_game_info_ext::archive_path will be '/path/to/foo.zip' + * > retro_game_info_ext::archive_file will be 'bar.sfc' + * - retro_game_info_ext::dir is guaranteed to contain a + * valid path to the directory in which the compressed file + * (containing the content file) exists + * - retro_game_info_ext::name is guaranteed to contain + * EITHER + * 1) the basename of the compressed file (containing + * the content file), without extension + * OR + * 2) the basename of the content file inside the + * compressed file, without extension + * In either case, a core should consider 'name' to + * be the canonical name/ID of the the content file + * - retro_game_info_ext::ext is guaranteed to contain the + * extension of the content file inside the compressed file, + * in lower case format + * - retro_game_info_ext::data and retro_game_info_ext::size are + * guaranteed to be valid */ + bool need_fullpath; + + /* If need_fullpath is false, specifies whether the content + * data buffer available in retro_load_game() is 'persistent' + * + * If persistent_data is false and retro_load_game() is called: + * - retro_game_info::data and retro_game_info::size + * are valid only until retro_load_game() returns + * - retro_game_info_ext::data and retro_game_info_ext::size + * are valid only until retro_load_game() returns + * + * If persistent_data is true and retro_load_game() is called: + * - retro_game_info::data and retro_game_info::size + * are valid until retro_deinit() returns + * - retro_game_info_ext::data and retro_game_info_ext::size + * are valid until retro_deinit() returns */ + bool persistent_data; +}; + +/* Similar to retro_game_info, but provides extended + * information about the source content file and + * game memory buffer status. + * And array of retro_game_info_ext is returned by + * RETRO_ENVIRONMENT_GET_GAME_INFO_EXT + * NOTE: In the following descriptions, references to + * retro_load_game() may be replaced with + * retro_load_game_special() */ +struct retro_game_info_ext +{ + /* - If file_in_archive is false, contains a valid + * path to an existent content file (UTF-8 encoded) + * - If file_in_archive is true, may be NULL */ + const char *full_path; + + /* - If file_in_archive is false, may be NULL + * - If file_in_archive is true, contains a valid path + * to an existent compressed file inside which the + * content file is located (UTF-8 encoded) */ + const char *archive_path; + + /* - If file_in_archive is false, may be NULL + * - If file_in_archive is true, contain a valid path + * to an existent content file inside the compressed + * file referred to by archive_path (UTF-8 encoded) + * e.g. for a compressed file '/path/to/foo.zip' + * containing 'bar.sfc' + * > archive_path will be '/path/to/foo.zip' + * > archive_file will be 'bar.sfc' */ + const char *archive_file; + + /* - If file_in_archive is false, contains a valid path + * to the directory in which the content file exists + * (UTF-8 encoded) + * - If file_in_archive is true, contains a valid path + * to the directory in which the compressed file + * (containing the content file) exists (UTF-8 encoded) */ + const char *dir; + + /* Contains the canonical name/ID of the content file + * (UTF-8 encoded). Intended for use when identifying + * 'complementary' content named after the loaded file - + * i.e. companion data of a different format (a CD image + * required by a ROM), texture packs, internally handled + * save files, etc. + * - If file_in_archive is false, contains the basename + * of the content file, without extension + * - If file_in_archive is true, then string is + * implementation specific. A frontend may choose to + * set a name value of: + * EITHER + * 1) the basename of the compressed file (containing + * the content file), without extension + * OR + * 2) the basename of the content file inside the + * compressed file, without extension + * RetroArch sets the 'name' value according to (1). + * A frontend that supports routine loading of + * content from archives containing multiple unrelated + * content files may set the 'name' value according + * to (2). */ + const char *name; + + /* - If file_in_archive is false, contains the extension + * of the content file in lower case format + * - If file_in_archive is true, contains the extension + * of the content file inside the compressed file, + * in lower case format */ + const char *ext; + + /* String of implementation specific meta-data. */ + const char *meta; + + /* Memory buffer of loaded game content. Will be NULL: + * IF + * - retro_system_info::need_fullpath is true and + * retro_system_content_info_override::need_fullpath + * is unset + * OR + * - retro_system_content_info_override::need_fullpath + * is true */ + const void *data; + + /* Size of game content memory buffer, in bytes */ + size_t size; + + /* True if loaded content file is inside a compressed + * archive */ + bool file_in_archive; + + /* - If data is NULL, value is unset/ignored + * - If data is non-NULL: + * - If persistent_data is false, data and size are + * valid only until retro_load_game() returns + * - If persistent_data is true, data and size are + * are valid until retro_deinit() returns */ + bool persistent_data; +}; + struct retro_game_geometry { unsigned base_width; /* Nominal video width of game. */ @@ -2130,6 +3144,76 @@ struct retro_variable const char *value; }; +struct retro_core_option_display +{ + /* Variable to configure in RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY */ + const char *key; + + /* Specifies whether variable should be displayed + * when presenting core options to the user */ + bool visible; +}; + +/* Maximum number of values permitted for a core option + * > Note: We have to set a maximum value due the limitations + * of the C language - i.e. it is not possible to create an + * array of structs each containing a variable sized array, + * so the retro_core_option_definition values array must + * have a fixed size. The size limit of 128 is a balancing + * act - it needs to be large enough to support all 'sane' + * core options, but setting it too large may impact low memory + * platforms. In practise, if a core option has more than + * 128 values then the implementation is likely flawed. + * To quote the above API reference: + * "The number of possible options should be very limited + * i.e. it should be feasible to cycle through options + * without a keyboard." + */ +#define RETRO_NUM_CORE_OPTION_VALUES_MAX 128 + +struct retro_core_option_value +{ + /* Expected option value */ + const char *value; + + /* Human-readable value label. If NULL, value itself + * will be displayed by the frontend */ + const char *label; +}; + +struct retro_core_option_definition +{ + /* Variable to query in RETRO_ENVIRONMENT_GET_VARIABLE. */ + const char *key; + + /* Human-readable core option description (used as menu label) */ + const char *desc; + + /* Human-readable core option information (used as menu sublabel) */ + const char *info; + + /* Array of retro_core_option_value structs, terminated by NULL */ + struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX]; + + /* Default core option value. Must match one of the values + * in the retro_core_option_value array, otherwise will be + * ignored */ + const char *default_value; +}; + +struct retro_core_options_intl +{ + /* Pointer to an array of retro_core_option_definition structs + * - US English implementation + * - Must point to a valid array */ + struct retro_core_option_definition *us; + + /* Pointer to an array of retro_core_option_definition structs + * - Implementation for current frontend language + * - May be NULL */ + struct retro_core_option_definition *local; +}; + struct retro_game_info { const char *path; /* Path to game, UTF-8 encoded. @@ -2176,6 +3260,47 @@ struct retro_framebuffer Set by frontend in GET_CURRENT_SOFTWARE_FRAMEBUFFER. */ }; +/* Used by a libretro core to override the current + * fastforwarding mode of the frontend */ +struct retro_fastforwarding_override +{ + /* Specifies the runtime speed multiplier that + * will be applied when 'fastforward' is true. + * For example, a value of 5.0 when running 60 FPS + * content will cap the fast-forward rate at 300 FPS. + * Note that the target multiplier may not be achieved + * if the host hardware has insufficient processing + * power. + * Setting a value of 0.0 (or greater than 0.0 but + * less than 1.0) will result in an uncapped + * fast-forward rate (limited only by hardware + * capacity). + * If the value is negative, it will be ignored + * (i.e. the frontend will use a runtime speed + * multiplier of its own choosing) */ + float ratio; + + /* If true, fastforwarding mode will be enabled. + * If false, fastforwarding mode will be disabled. */ + bool fastforward; + + /* If true, and if supported by the frontend, an + * on-screen notification will be displayed while + * 'fastforward' is true. + * If false, and if supported by the frontend, any + * on-screen fast-forward notifications will be + * suppressed */ + bool notification; + + /* If true, the core will have sole control over + * when fastforwarding mode is enabled/disabled; + * the frontend will not be able to change the + * state set by 'fastforward' until either + * 'inhibit_toggle' is set to false, or the core + * is unloaded */ + bool inhibit_toggle; +}; + /* Callbacks */ /* Environment callback. Gives implementations a way of performing @@ -2264,7 +3389,13 @@ RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info); * will only poll input based on that particular device type. It is only a * hint to the libretro core when a core cannot automatically detect the * appropriate input device type on its own. It is also relevant when a - * core can change its behavior depending on device type. */ + * core can change its behavior depending on device type. + * + * As part of the core's implementation of retro_set_controller_port_device, + * the core should call RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS to notify the + * frontend if the descriptions for any controls have changed as a + * result of changing the device type. + */ RETRO_API void retro_set_controller_port_device(unsigned port, unsigned device); /* Resets the current game. */ @@ -2296,7 +3427,9 @@ RETRO_API bool retro_unserialize(const void *data, size_t size); RETRO_API void retro_cheat_reset(void); RETRO_API void retro_cheat_set(unsigned index, bool enabled, const char *code); -/* Loads a game. */ +/* Loads a game. + * Return true to indicate successful loading and false to indicate load failure. + */ RETRO_API bool retro_load_game(const struct retro_game_info *game); /* Loads a "special" kind of game. Should not be used, @@ -2306,7 +3439,7 @@ RETRO_API bool retro_load_game_special( const struct retro_game_info *info, size_t num_info ); -/* Unloads a currently loaded game. */ +/* Unloads the currently loaded game. Called before retro_deinit(void). */ RETRO_API void retro_unload_game(void); /* Gets region of game. */ From 2f25f2fc70a96f8ec0987f9ce26e0aaf54058c9e Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Wed, 11 Aug 2021 09:52:55 +0800 Subject: [PATCH 7/8] Add HD pack conditions for matching which sprite palette is being used The condition names are sppalette0, sppalette1, sppalette2, sppalette3 --- Core/HdData.h | 1 + Core/HdPackConditions.h | 49 +++++++++++++++++++++++++++++++++++++++++ Core/HdPackLoader.cpp | 32 +++++++++++++++++++++++++++ Core/HdPpu.cpp | 1 + 4 files changed, 83 insertions(+) diff --git a/Core/HdData.h b/Core/HdData.h index afaea444..dc76338c 100644 --- a/Core/HdData.h +++ b/Core/HdData.h @@ -90,6 +90,7 @@ struct HdPpuTileInfo : public HdTileKey uint8_t BgColor; uint8_t SpriteColor; uint8_t PpuBackgroundColor; + uint32_t PaletteOffset; uint8_t OAMIndex; }; diff --git a/Core/HdPackConditions.h b/Core/HdPackConditions.h index b35a7241..e11ac4d0 100644 --- a/Core/HdPackConditions.h +++ b/Core/HdPackConditions.h @@ -135,6 +135,55 @@ struct HdPackBgPriorityCondition : public HdPackCondition } }; +struct HdPackSpPalette0Condition : public HdPackCondition +{ + string GetConditionName() override { return "sppalette0"; } + string ToString() override { return ""; } + bool IsExcludedFromFile() override { return true; } + + bool InternalCheckCondition(HdScreenInfo* screenInfo, int x, int y, HdPpuTileInfo* tile) override + { + return tile && ((0x03 & (tile->PaletteOffset >> 2)) == 0x00); + } +}; + +struct HdPackSpPalette1Condition : public HdPackCondition +{ + string GetConditionName() override { return "sppalette1"; } + string ToString() override { return ""; } + bool IsExcludedFromFile() override { return true; } + + bool InternalCheckCondition(HdScreenInfo* screenInfo, int x, int y, HdPpuTileInfo* tile) override + { + return tile && ((0x03 & (tile->PaletteOffset >> 2)) == 0x01); + } +}; + +struct HdPackSpPalette2Condition : public HdPackCondition +{ + string GetConditionName() override { return "sppalette2"; } + string ToString() override { return ""; } + bool IsExcludedFromFile() override { return true; } + + bool InternalCheckCondition(HdScreenInfo* screenInfo, int x, int y, HdPpuTileInfo* tile) override + { + return tile && ((0x03 & (tile->PaletteOffset >> 2)) == 0x02); + } +}; + +struct HdPackSpPalette3Condition : public HdPackCondition +{ + string GetConditionName() override { return "sppalette3"; } + string ToString() override { return ""; } + bool IsExcludedFromFile() override { return true; } + + bool InternalCheckCondition(HdScreenInfo* screenInfo, int x, int y, HdPpuTileInfo* tile) override + { + return tile && ((0x03 & (tile->PaletteOffset >> 2)) == 0x03); + } +}; + + struct HdPackMemoryCheckCondition : public HdPackBaseMemoryCondition { HdPackMemoryCheckCondition() { _useCache = true; } diff --git a/Core/HdPackLoader.cpp b/Core/HdPackLoader.cpp index 3d7d7b93..cddfaa5e 100644 --- a/Core/HdPackLoader.cpp +++ b/Core/HdPackLoader.cpp @@ -273,6 +273,38 @@ void HdPackLoader::InitializeGlobalConditions() HdPackCondition* invBgpriority = new HdPackBgPriorityCondition(); invBgpriority->Name = "!bgpriority"; _data->Conditions.push_back(unique_ptr(invBgpriority)); + + HdPackCondition* sppalette0 = new HdPackSpPalette0Condition(); + sppalette0->Name = "sppalette0"; + _data->Conditions.push_back(unique_ptr(sppalette0)); + + HdPackCondition* invSppalette0 = new HdPackSpPalette0Condition(); + invSppalette0->Name = "!sppalette0"; + _data->Conditions.push_back(unique_ptr(invSppalette0)); + + HdPackCondition* sppalette1 = new HdPackSpPalette1Condition(); + sppalette1->Name = "sppalette1"; + _data->Conditions.push_back(unique_ptr(sppalette1)); + + HdPackCondition* invSppalette1 = new HdPackSpPalette1Condition(); + invSppalette1->Name = "!sppalette1"; + _data->Conditions.push_back(unique_ptr(invSppalette1)); + + HdPackCondition* sppalette2 = new HdPackSpPalette2Condition(); + sppalette2->Name = "sppalette2"; + _data->Conditions.push_back(unique_ptr(sppalette2)); + + HdPackCondition* invSppalette2 = new HdPackSpPalette2Condition(); + invSppalette2->Name = "!sppalette2"; + _data->Conditions.push_back(unique_ptr(invSppalette2)); + + HdPackCondition* sppalette3 = new HdPackSpPalette3Condition(); + sppalette3->Name = "sppalette3"; + _data->Conditions.push_back(unique_ptr(sppalette3)); + + HdPackCondition* invSppalette3 = new HdPackSpPalette3Condition(); + invSppalette3->Name = "!sppalette3"; + _data->Conditions.push_back(unique_ptr(invSppalette3)); } void HdPackLoader::ProcessOverscanTag(vector &tokens) diff --git a/Core/HdPpu.cpp b/Core/HdPpu.cpp index 41bf45cb..92946d11 100644 --- a/Core/HdPpu.cpp +++ b/Core/HdPpu.cpp @@ -96,6 +96,7 @@ void HdPpu::DrawPixel() } else { tileInfo.Sprite[j].SpriteColor = ReadPaletteRAM(sprite.PaletteOffset + tileInfo.Sprite[j].SpriteColorIndex); } + tileInfo.Sprite[j].PaletteOffset = sprite.PaletteOffset; tileInfo.Sprite[j].PpuBackgroundColor = tileInfo.Tile.PpuBackgroundColor; tileInfo.Sprite[j].BgColorIndex = tileInfo.Tile.BgColorIndex; From 0a0844708594ed11a56f9dd20ab553700a71ce03 Mon Sep 17 00:00:00 2001 From: mkwong98 Date: Wed, 11 Aug 2021 10:02:16 +0800 Subject: [PATCH 8/8] Update documentation for the new HD pack conditions --- Docs/content/hdpacks/_index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Docs/content/hdpacks/_index.md b/Docs/content/hdpacks/_index.md index 33b7f591..f4b835e1 100644 --- a/Docs/content/hdpacks/_index.md +++ b/Docs/content/hdpacks/_index.md @@ -113,6 +113,10 @@ A number of built-in conditions can be used to check the value of some flags: * `hmirror`: True if the current pixel is a sprite pixel, and the sprite is mirrored horizontally. * `vmirror`: True if the current pixel is a sprite pixel, and the sprite is mirrored vertically. * `bgpriority`: True if the current pixel is a sprite pixel, and the sprite is marked as a background priority sprite. +* `sppalette0`: True if the current pixel is a sprite pixel, and the sprite is using the palette at address $3F10. +* `sppalette1`: True if the current pixel is a sprite pixel, and the sprite is using the palette at address $3F14. +* `sppalette2`: True if the current pixel is a sprite pixel, and the sprite is using the palette at address $3F18. +* `sppalette3`: True if the current pixel is a sprite pixel, and the sprite is using the palette at address $3F1C. **Example:** `[hmirror]...`