diff --git a/Core/EmulationSettings.h b/Core/EmulationSettings.h index cb83419d..7176fd98 100644 --- a/Core/EmulationSettings.h +++ b/Core/EmulationSettings.h @@ -23,6 +23,8 @@ enum EmulationFlags : uint64_t PauseOnMovieEnd = 0x0100, + EnablePpuOamRowCorruption = 0x0200, + AllowBackgroundInput = 0x0400, ReduceSoundInBackground = 0x0800, MuteSoundInBackground = 0x1000, diff --git a/Core/PPU.cpp b/Core/PPU.cpp index e9f87b45..c5000690 100644 --- a/Core/PPU.cpp +++ b/Core/PPU.cpp @@ -30,6 +30,9 @@ PPU::PPU(shared_ptr console) 0x09, 0x01, 0x34, 0x03, 0x00, 0x04, 0x00, 0x14, 0x08, 0x3A, 0x00, 0x02, 0x00, 0x20, 0x2C, 0x08 }; memcpy(_paletteRAM, paletteRamBootValues, sizeof(_paletteRAM)); + //This should (presumably) persist across resets + memset(_corruptOamRow, 0, sizeof(_corruptOamRow)); + _console->InitializeRam(_spriteRAM, 0x100); _console->InitializeRam(_secondarySpriteRAM, 0x20); @@ -546,6 +549,11 @@ void PPU::SetMaskRegister(uint8_t value) if(_renderingEnabled != (_flags.BackgroundEnabled | _flags.SpritesEnabled)) { _needStateUpdate = true; + + if(_renderingEnabled && _scanline < 240) { + //Rendering was just disabled by the write + SetOamCorruptionFlags(); + } } UpdateMinimumDrawCycles(); @@ -1222,6 +1230,49 @@ void PPU::DebugUpdateFrameBuffer(bool toGrayscale) } } +void PPU::SetOamCorruptionFlags() +{ + if(!_settings->CheckFlag(EmulationFlags::EnablePpuOamRowCorruption)) { + return; + } + + //Note: Still pending more research, but this currently matches a portion of the issues that have been observed + //When rendering is disabled in some sections of the screen, either: + // A- During Secondary OAM clear (first ~64 cycles) + // B- During OAM tile fetching (cycle ~256 to cycle ~320) + //then OAM memory gets corrupted the next time the PPU starts rendering again (usually at the start of the next frame) + //This usually causes the first "row" of OAM (the first 8 bytes) to get copied over another, causing some sprites to be missing + //and causing an extra set of the first 2 sprites to appear on the screen (not possible to see them except via any overflow they may cause) + + if(_cycle >= 1 && _cycle < 65) { + //Every 2 dots causes the corruption to shift down 1 OAM row (8 bytes) + _corruptOamRow[(_cycle - 1) >> 1] = true; + } else if(_cycle >= 257 && _cycle < 321) { + //This section is in 8-dot segments. + //The first 3 dot increment the corrupted row by 1, and then the last 5 dots corrupt the next row for 5 dots. + uint8_t base = (_cycle - 257) >> 3; + uint8_t offset = std::min(3, (_cycle - 257) & 0x07); + _corruptOamRow[base * 4 + offset] = true; + } +} + +void PPU::ProcessOamCorruption() +{ + if(!_settings->CheckFlag(EmulationFlags::EnablePpuOamRowCorruption)) { + return; + } + + //Copy first OAM row over another row, as needed by corruption flags (can be over itself, which causes no actual harm) + for(int i = 0; i < 32; i++) { + if(_corruptOamRow[i]) { + if(i > 0) { + memcpy(_spriteRAM + i * 8, _spriteRAM, 8); + } + _corruptOamRow[i] = false; + } + } +} + void PPU::Exec() { if(_cycle > 339) { @@ -1233,6 +1284,10 @@ void PPU::Exec() //Force prerender scanline sprite fetches to load the dummy $FF tiles (fixes shaking in Ninja Gaiden 3 stage 1 after beating boss) _spriteCount = 0; + if(_renderingEnabled) { + ProcessOamCorruption(); + } + UpdateMinimumDrawCycles(); } @@ -1297,6 +1352,9 @@ void PPU::UpdateState() _prevRenderingEnabled = _renderingEnabled; if(_renderingEnabled != (_flags.BackgroundEnabled | _flags.SpritesEnabled)) { _renderingEnabled = _flags.BackgroundEnabled | _flags.SpritesEnabled; + if(_renderingEnabled) { + ProcessOamCorruption(); + } } if(_prevRenderingEnabled != _renderingEnabled) { _needStateUpdate = true; @@ -1436,6 +1494,8 @@ void PPU::StreamState(bool saving) _oamDecayCycles[i] = _console->GetCpu()->GetCycleCount(); } + memset(_corruptOamRow, 0, sizeof(_corruptOamRow)); + for(int i = 0; i < 257; i++) { _hasSprite[i] = true; } diff --git a/Core/PPU.h b/Core/PPU.h index ea391190..72062246 100644 --- a/Core/PPU.h +++ b/Core/PPU.h @@ -105,6 +105,7 @@ class PPU : public IMemoryHandler, public Snapshotable uint64_t _oamDecayCycles[0x40]; bool _enableOamDecay; + bool _corruptOamRow[32]; void UpdateStatusFlag(); @@ -140,6 +141,9 @@ class PPU : public IMemoryHandler, public Snapshotable __forceinline uint8_t ReadSpriteRam(uint8_t addr); __forceinline void WriteSpriteRam(uint8_t addr, uint8_t value); + + void SetOamCorruptionFlags(); + void ProcessOamCorruption(); void UpdateMinimumDrawCycles(); diff --git a/GUI.NET/Config/EmulationInfo.cs b/GUI.NET/Config/EmulationInfo.cs index 7433e7cb..c735f06c 100644 --- a/GUI.NET/Config/EmulationInfo.cs +++ b/GUI.NET/Config/EmulationInfo.cs @@ -25,6 +25,7 @@ namespace Mesen.GUI.Config public bool RandomizeCpuPpuAlignment = false; public bool EnablePpu2006ScrollGlitch = false; public bool EnablePpu2000ScrollGlitch = false; + public bool EnablePpuOamRowCorruption = false; public bool UseAlternativeMmc3Irq = false; @@ -65,6 +66,7 @@ namespace Mesen.GUI.Config InteropEmu.SetFlag(EmulationFlags.RandomizeCpuPpuAlignment, emulationInfo.RandomizeCpuPpuAlignment); InteropEmu.SetFlag(EmulationFlags.EnablePpu2000ScrollGlitch, emulationInfo.EnablePpu2000ScrollGlitch); InteropEmu.SetFlag(EmulationFlags.EnablePpu2006ScrollGlitch, emulationInfo.EnablePpu2006ScrollGlitch); + InteropEmu.SetFlag(EmulationFlags.EnablePpuOamRowCorruption, emulationInfo.EnablePpuOamRowCorruption); InteropEmu.SetPpuNmiConfig(emulationInfo.PpuExtraScanlinesBeforeNmi, emulationInfo.PpuExtraScanlinesAfterNmi); diff --git a/GUI.NET/Dependencies/resources.ca.xml b/GUI.NET/Dependencies/resources.ca.xml index 482c432c..bf15a6dc 100644 --- a/GUI.NET/Dependencies/resources.ca.xml +++ b/GUI.NET/Dependencies/resources.ca.xml @@ -328,6 +328,7 @@ Randomize power-on/reset CPU/PPU alignment Enable PPU $2006 scroll glitch emulation Enable PPU $2000/$2005/$2006 first-write scroll glitch emulation + Enable PPU OAM row corruption emulation Forçament Forçament de CPU diff --git a/GUI.NET/Dependencies/resources.en.xml b/GUI.NET/Dependencies/resources.en.xml index 166c802f..bd0ef19d 100644 --- a/GUI.NET/Dependencies/resources.en.xml +++ b/GUI.NET/Dependencies/resources.en.xml @@ -317,7 +317,7 @@ Miscellaneous Settings Use alternative MMC3 IRQ behavior Allow invalid input (e.g Down + Up or Left + Right at the same time) - Enable OAM RAM decay + Enable PPU OAM decay Disable PPU $2004 reads (Famicom behavior) Disable PPU OAMADDR bug emulation Disable PPU palette reads @@ -327,7 +327,8 @@ Randomize power-on/reset CPU/PPU alignment Enable PPU $2006 scroll glitch emulation Enable PPU $2000/$2005/$2006 first-write scroll glitch emulation - + Enable PPU OAM row corruption emulation + Default power on state for RAM: Overclocking diff --git a/GUI.NET/Dependencies/resources.es.xml b/GUI.NET/Dependencies/resources.es.xml index cb9e923f..2a97c3ad 100644 --- a/GUI.NET/Dependencies/resources.es.xml +++ b/GUI.NET/Dependencies/resources.es.xml @@ -327,6 +327,7 @@ Aleatorizar el encendido/reinicio de la alineación CPU/PPU Habilitar el fallo de emulación de scroll PPU $2006 Habilitar el fallo de emulación de scroll de primera escritura PPU $2000/$2005/$2006 + Enable PPU OAM row corruption emulation Overclocking Overclocking de CPU diff --git a/GUI.NET/Dependencies/resources.fr.xml b/GUI.NET/Dependencies/resources.fr.xml index c45fa854..77111e21 100644 --- a/GUI.NET/Dependencies/resources.fr.xml +++ b/GUI.NET/Dependencies/resources.fr.xml @@ -327,6 +327,7 @@ Démarrer le jeu avec un alignement CPU/PPU aléatoire Simuler le bug de scrolling lors de l'écriture à $2006 Simuler le bug de scrolling lors de l'écriture à $2000/$2005/$2006 + Simuler le bug de corruption de la rangée OAM État initial de la mémoire au démarrage : diff --git a/GUI.NET/Dependencies/resources.it.xml b/GUI.NET/Dependencies/resources.it.xml index cd1ecb98..ac44f6fa 100644 --- a/GUI.NET/Dependencies/resources.it.xml +++ b/GUI.NET/Dependencies/resources.it.xml @@ -327,6 +327,7 @@ Randomize power-on/reset CPU/PPU alignment Enable PPU $2006 scroll glitch emulation Enable PPU $2000/$2005/$2006 first-write scroll glitch emulation + Enable PPU OAM row corruption emulation Stato di accensione predefinito per la RAM: diff --git a/GUI.NET/Dependencies/resources.ja.xml b/GUI.NET/Dependencies/resources.ja.xml index 7790efda..bdc728eb 100644 --- a/GUI.NET/Dependencies/resources.ja.xml +++ b/GUI.NET/Dependencies/resources.ja.xml @@ -326,6 +326,7 @@ ランダムなCPU/PPUアラインメントでゲームを起動する $2006に書き込む時に発生するスクロールバグを再現する $2000・$2005・$2006に書き込む時に発生するスクロールバグを再現する + OAM行のデータの汚染を再現する 起動時のメモリの状態 : diff --git a/GUI.NET/Dependencies/resources.pt.xml b/GUI.NET/Dependencies/resources.pt.xml index 0e7ce622..87be4970 100644 --- a/GUI.NET/Dependencies/resources.pt.xml +++ b/GUI.NET/Dependencies/resources.pt.xml @@ -327,6 +327,7 @@ Aleatorizar o ligar/reiniciar do alinhamento da CPU/PPU Ativar emulação do erro gráfico PPU $2006 na rolagem Ativar emulação do erro gráfico PPU $2000/$2005/$2006 na rolagem na primeira escrita + Enable PPU OAM row corruption emulation Estado inicial da RAM durante o início: diff --git a/GUI.NET/Dependencies/resources.ru.xml b/GUI.NET/Dependencies/resources.ru.xml index d5b49a50..5c50c102 100644 --- a/GUI.NET/Dependencies/resources.ru.xml +++ b/GUI.NET/Dependencies/resources.ru.xml @@ -327,6 +327,7 @@ Рандомизировать включение/перезагрузку выравнивания CPU/PPU Включить PPU $2006 scroll glitch emulation Включить PPU $2000/$2005/$2006 first-write scroll glitch emulation + Enable PPU OAM row corruption emulation Разгон Разгон CPU diff --git a/GUI.NET/Dependencies/resources.uk.xml b/GUI.NET/Dependencies/resources.uk.xml index 6a96285c..b41484e0 100644 --- a/GUI.NET/Dependencies/resources.uk.xml +++ b/GUI.NET/Dependencies/resources.uk.xml @@ -327,6 +327,7 @@ Randomize power-on/reset CPU/PPU alignment Enable PPU $2006 scroll glitch emulation Enable PPU $2000/$2005/$2006 first-write scroll glitch emulation + Enable PPU OAM row corruption emulation Розгін Розгін CPU diff --git a/GUI.NET/Dependencies/resources.zh.xml b/GUI.NET/Dependencies/resources.zh.xml index 569d29d9..8f31c685 100644 --- a/GUI.NET/Dependencies/resources.zh.xml +++ b/GUI.NET/Dependencies/resources.zh.xml @@ -353,6 +353,7 @@ 随机 CPU/PPU 开机对齐 模拟 PPU $2006 卷轴故障 模拟首次写入 PPU $2000/$2005/$2006 卷轴故障 + Enable PPU OAM row corruption emulation 默认开机 RAM 状态: 超频 diff --git a/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs b/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs index 3e8470bd..ec9d9c80 100644 --- a/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs +++ b/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs @@ -29,1004 +29,1026 @@ namespace Mesen.GUI.Forms.Config /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmEmulationConfig)); - this.tabMain = new System.Windows.Forms.TabControl(); - this.tpgGeneral = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.flowLayoutPanel5 = new System.Windows.Forms.FlowLayoutPanel(); - this.nudRunAheadFrames = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblRunAheadFrames = new System.Windows.Forms.Label(); - this.lblRunAhead = new System.Windows.Forms.Label(); - this.flowLayoutPanel9 = new System.Windows.Forms.FlowLayoutPanel(); - this.nudTurboSpeed = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblTurboSpeedHint = new System.Windows.Forms.Label(); - this.lblTurboSpeed = new System.Windows.Forms.Label(); - this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel(); - this.nudEmulationSpeed = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblEmuSpeedHint = new System.Windows.Forms.Label(); - this.lblEmulationSpeed = new System.Windows.Forms.Label(); - this.lblRewindSpeed = new System.Windows.Forms.Label(); - this.flowLayoutPanel10 = new System.Windows.Forms.FlowLayoutPanel(); - this.nudRewindSpeed = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblRewindSpeedHint = new System.Windows.Forms.Label(); - this.tpgAdvanced = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.chkEnablePpu2000ScrollGlitch = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkEnablePpu2006ScrollGlitch = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkRandomizeCpuPpuAlignment = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.lblMiscSettings = new System.Windows.Forms.Label(); - this.chkMapperRandomPowerOnState = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkEnableOamDecay = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.lblRamPowerOnState = new System.Windows.Forms.Label(); - this.cboRamPowerOnState = new System.Windows.Forms.ComboBox(); - this.chkDisablePaletteRead = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkDisableOamAddrBug = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkDisablePpuReset = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkDisablePpu2004Reads = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkUseNes101Hvc101Behavior = new System.Windows.Forms.CheckBox(); - this.chkAllowInvalidInput = new Mesen.GUI.Controls.ctrlRiskyOption(); - this.chkUseAlternativeMmc3Irq = new System.Windows.Forms.CheckBox(); - this.lblDeveloperSettings = new System.Windows.Forms.Label(); - this.tpgOverclocking = new System.Windows.Forms.TabPage(); - this.picHint = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.lblOverclockHint = new Mesen.GUI.Controls.ctrlAutoGrowLabel(); - this.flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel(); - this.lblEffectiveClockRateDendy = new System.Windows.Forms.Label(); - this.lblEffectiveClockRateValueDendy = new System.Windows.Forms.Label(); - this.flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel(); - this.lblEffectiveClockRatePal = new System.Windows.Forms.Label(); - this.lblEffectiveClockRateValuePal = new System.Windows.Forms.Label(); - this.grpPpuTiming = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.nudExtraScanlinesAfterNmi = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.nudExtraScanlinesBeforeNmi = new Mesen.GUI.Controls.MesenNumericUpDown(); - this.lblExtraScanlinesBeforeNmi = new System.Windows.Forms.Label(); - this.lblExtraScanlinesAfterNmi = new System.Windows.Forms.Label(); - this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); - this.lblEffectiveClockRate = new System.Windows.Forms.Label(); - this.lblEffectiveClockRateValue = new System.Windows.Forms.Label(); - this.flowLayoutPanel7 = new System.Windows.Forms.FlowLayoutPanel(); - this.chkShowLagCounter = new System.Windows.Forms.CheckBox(); - this.btnResetLagCounter = new System.Windows.Forms.Button(); - this.tmrUpdateClockRate = new System.Windows.Forms.Timer(this.components); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.tabMain.SuspendLayout(); - this.tpgGeneral.SuspendLayout(); - this.tableLayoutPanel4.SuspendLayout(); - this.flowLayoutPanel5.SuspendLayout(); - this.flowLayoutPanel9.SuspendLayout(); - this.flowLayoutPanel6.SuspendLayout(); - this.flowLayoutPanel10.SuspendLayout(); - this.tpgAdvanced.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.tpgOverclocking.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picHint)).BeginInit(); - this.tableLayoutPanel3.SuspendLayout(); - this.flowLayoutPanel4.SuspendLayout(); - this.flowLayoutPanel3.SuspendLayout(); - this.grpPpuTiming.SuspendLayout(); - this.tableLayoutPanel5.SuspendLayout(); - this.flowLayoutPanel2.SuspendLayout(); - this.flowLayoutPanel7.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.SuspendLayout(); - // - // baseConfigPanel - // - this.baseConfigPanel.Location = new System.Drawing.Point(0, 386); - this.baseConfigPanel.Size = new System.Drawing.Size(533, 29); - // - // tabMain - // - this.tabMain.Controls.Add(this.tpgGeneral); - this.tabMain.Controls.Add(this.tpgAdvanced); - this.tabMain.Controls.Add(this.tpgOverclocking); - 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(533, 386); - this.tabMain.TabIndex = 2; - // - // tpgGeneral - // - this.tpgGeneral.Controls.Add(this.tableLayoutPanel4); - 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(525, 360); - this.tpgGeneral.TabIndex = 0; - this.tpgGeneral.Text = "General"; - this.tpgGeneral.UseVisualStyleBackColor = true; - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.AutoSize = true; - this.tableLayoutPanel4.ColumnCount = 2; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel5, 1, 3); - this.tableLayoutPanel4.Controls.Add(this.lblRunAhead, 0, 3); - this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel9, 1, 1); - this.tableLayoutPanel4.Controls.Add(this.lblTurboSpeed, 0, 1); - this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel6, 1, 0); - this.tableLayoutPanel4.Controls.Add(this.lblEmulationSpeed, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.lblRewindSpeed, 0, 2); - this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel10, 1, 2); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); - 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(519, 354); - this.tableLayoutPanel4.TabIndex = 0; - // - // flowLayoutPanel5 - // - this.flowLayoutPanel5.AutoSize = true; - this.flowLayoutPanel5.Controls.Add(this.nudRunAheadFrames); - this.flowLayoutPanel5.Controls.Add(this.lblRunAheadFrames); - this.flowLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel5.Location = new System.Drawing.Point(111, 81); - this.flowLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel5.Name = "flowLayoutPanel5"; - this.flowLayoutPanel5.Size = new System.Drawing.Size(408, 27); - this.flowLayoutPanel5.TabIndex = 18; - // - // nudRunAheadFrames - // - this.nudRunAheadFrames.DecimalPlaces = 0; - this.nudRunAheadFrames.Increment = new decimal(new int[] { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmEmulationConfig)); + this.tabMain = new System.Windows.Forms.TabControl(); + this.tpgGeneral = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.flowLayoutPanel5 = new System.Windows.Forms.FlowLayoutPanel(); + this.nudRunAheadFrames = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblRunAheadFrames = new System.Windows.Forms.Label(); + this.lblRunAhead = new System.Windows.Forms.Label(); + this.flowLayoutPanel9 = new System.Windows.Forms.FlowLayoutPanel(); + this.nudTurboSpeed = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblTurboSpeedHint = new System.Windows.Forms.Label(); + this.lblTurboSpeed = new System.Windows.Forms.Label(); + this.flowLayoutPanel6 = new System.Windows.Forms.FlowLayoutPanel(); + this.nudEmulationSpeed = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblEmuSpeedHint = new System.Windows.Forms.Label(); + this.lblEmulationSpeed = new System.Windows.Forms.Label(); + this.lblRewindSpeed = new System.Windows.Forms.Label(); + this.flowLayoutPanel10 = new System.Windows.Forms.FlowLayoutPanel(); + this.nudRewindSpeed = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblRewindSpeedHint = new System.Windows.Forms.Label(); + this.tpgAdvanced = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.chkEnablePpuOamRowCorruption = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkEnablePpu2000ScrollGlitch = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkEnablePpu2006ScrollGlitch = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkRandomizeCpuPpuAlignment = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.lblMiscSettings = new System.Windows.Forms.Label(); + this.chkMapperRandomPowerOnState = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkEnableOamDecay = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.cboRamPowerOnState = new System.Windows.Forms.ComboBox(); + this.lblRamPowerOnState = new System.Windows.Forms.Label(); + this.chkDisablePaletteRead = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkDisableOamAddrBug = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkDisablePpuReset = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkDisablePpu2004Reads = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkUseNes101Hvc101Behavior = new System.Windows.Forms.CheckBox(); + this.chkAllowInvalidInput = new Mesen.GUI.Controls.ctrlRiskyOption(); + this.chkUseAlternativeMmc3Irq = new System.Windows.Forms.CheckBox(); + this.lblDeveloperSettings = new System.Windows.Forms.Label(); + this.tpgOverclocking = new System.Windows.Forms.TabPage(); + this.picHint = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.lblOverclockHint = new Mesen.GUI.Controls.ctrlAutoGrowLabel(); + this.flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel(); + this.lblEffectiveClockRateDendy = new System.Windows.Forms.Label(); + this.lblEffectiveClockRateValueDendy = new System.Windows.Forms.Label(); + this.flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel(); + this.lblEffectiveClockRatePal = new System.Windows.Forms.Label(); + this.lblEffectiveClockRateValuePal = new System.Windows.Forms.Label(); + this.grpPpuTiming = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.nudExtraScanlinesAfterNmi = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.nudExtraScanlinesBeforeNmi = new Mesen.GUI.Controls.MesenNumericUpDown(); + this.lblExtraScanlinesBeforeNmi = new System.Windows.Forms.Label(); + this.lblExtraScanlinesAfterNmi = new System.Windows.Forms.Label(); + this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); + this.lblEffectiveClockRate = new System.Windows.Forms.Label(); + this.lblEffectiveClockRateValue = new System.Windows.Forms.Label(); + this.flowLayoutPanel7 = new System.Windows.Forms.FlowLayoutPanel(); + this.chkShowLagCounter = new System.Windows.Forms.CheckBox(); + this.btnResetLagCounter = new System.Windows.Forms.Button(); + this.tmrUpdateClockRate = new System.Windows.Forms.Timer(this.components); + this.tabMain.SuspendLayout(); + this.tpgGeneral.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.flowLayoutPanel5.SuspendLayout(); + this.flowLayoutPanel9.SuspendLayout(); + this.flowLayoutPanel6.SuspendLayout(); + this.flowLayoutPanel10.SuspendLayout(); + this.tpgAdvanced.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tpgOverclocking.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picHint)).BeginInit(); + this.tableLayoutPanel3.SuspendLayout(); + this.flowLayoutPanel4.SuspendLayout(); + this.flowLayoutPanel3.SuspendLayout(); + this.grpPpuTiming.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.flowLayoutPanel2.SuspendLayout(); + this.flowLayoutPanel7.SuspendLayout(); + this.SuspendLayout(); + // + // baseConfigPanel + // + this.baseConfigPanel.Location = new System.Drawing.Point(0, 408); + this.baseConfigPanel.Size = new System.Drawing.Size(533, 29); + // + // tabMain + // + this.tabMain.Controls.Add(this.tpgGeneral); + this.tabMain.Controls.Add(this.tpgAdvanced); + this.tabMain.Controls.Add(this.tpgOverclocking); + 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(533, 408); + this.tabMain.TabIndex = 2; + // + // tpgGeneral + // + this.tpgGeneral.Controls.Add(this.tableLayoutPanel4); + 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(525, 382); + this.tpgGeneral.TabIndex = 0; + this.tpgGeneral.Text = "General"; + this.tpgGeneral.UseVisualStyleBackColor = true; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.AutoSize = true; + this.tableLayoutPanel4.ColumnCount = 2; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel5, 1, 3); + this.tableLayoutPanel4.Controls.Add(this.lblRunAhead, 0, 3); + this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel9, 1, 1); + this.tableLayoutPanel4.Controls.Add(this.lblTurboSpeed, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel6, 1, 0); + this.tableLayoutPanel4.Controls.Add(this.lblEmulationSpeed, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.lblRewindSpeed, 0, 2); + this.tableLayoutPanel4.Controls.Add(this.flowLayoutPanel10, 1, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + 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(519, 376); + this.tableLayoutPanel4.TabIndex = 0; + // + // flowLayoutPanel5 + // + this.flowLayoutPanel5.AutoSize = true; + this.flowLayoutPanel5.Controls.Add(this.nudRunAheadFrames); + this.flowLayoutPanel5.Controls.Add(this.lblRunAheadFrames); + this.flowLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel5.Location = new System.Drawing.Point(111, 81); + this.flowLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel5.Name = "flowLayoutPanel5"; + this.flowLayoutPanel5.Size = new System.Drawing.Size(408, 27); + this.flowLayoutPanel5.TabIndex = 18; + // + // nudRunAheadFrames + // + this.nudRunAheadFrames.DecimalPlaces = 0; + this.nudRunAheadFrames.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudRunAheadFrames.Location = new System.Drawing.Point(3, 3); - this.nudRunAheadFrames.Maximum = new decimal(new int[] { + this.nudRunAheadFrames.IsHex = false; + this.nudRunAheadFrames.Location = new System.Drawing.Point(3, 3); + this.nudRunAheadFrames.Maximum = new decimal(new int[] { 10, 0, 0, 0}); - this.nudRunAheadFrames.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudRunAheadFrames.Minimum = new decimal(new int[] { + this.nudRunAheadFrames.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudRunAheadFrames.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudRunAheadFrames.MinimumSize = new System.Drawing.Size(0, 21); - this.nudRunAheadFrames.Name = "nudRunAheadFrames"; - this.nudRunAheadFrames.Size = new System.Drawing.Size(48, 21); - this.nudRunAheadFrames.TabIndex = 1; - this.nudRunAheadFrames.Value = new decimal(new int[] { + this.nudRunAheadFrames.MinimumSize = new System.Drawing.Size(0, 21); + this.nudRunAheadFrames.Name = "nudRunAheadFrames"; + this.nudRunAheadFrames.Size = new System.Drawing.Size(48, 21); + this.nudRunAheadFrames.TabIndex = 1; + this.nudRunAheadFrames.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblRunAheadFrames - // - this.lblRunAheadFrames.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblRunAheadFrames.AutoSize = true; - this.lblRunAheadFrames.Location = new System.Drawing.Point(57, 7); - this.lblRunAheadFrames.Name = "lblRunAheadFrames"; - this.lblRunAheadFrames.Size = new System.Drawing.Size(277, 13); - this.lblRunAheadFrames.TabIndex = 2; - this.lblRunAheadFrames.Text = "frames (reduces input lag, increases system requirements)"; - // - // lblRunAhead - // - this.lblRunAhead.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblRunAhead.AutoSize = true; - this.lblRunAhead.Location = new System.Drawing.Point(3, 88); - this.lblRunAhead.Name = "lblRunAhead"; - this.lblRunAhead.Size = new System.Drawing.Size(64, 13); - this.lblRunAhead.TabIndex = 17; - this.lblRunAhead.Text = "Run Ahead:"; - // - // flowLayoutPanel9 - // - this.flowLayoutPanel9.AutoSize = true; - this.flowLayoutPanel9.Controls.Add(this.nudTurboSpeed); - this.flowLayoutPanel9.Controls.Add(this.lblTurboSpeedHint); - this.flowLayoutPanel9.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel9.Location = new System.Drawing.Point(111, 27); - this.flowLayoutPanel9.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel9.Name = "flowLayoutPanel9"; - this.flowLayoutPanel9.Size = new System.Drawing.Size(408, 27); - this.flowLayoutPanel9.TabIndex = 14; - // - // nudTurboSpeed - // - this.nudTurboSpeed.DecimalPlaces = 0; - this.nudTurboSpeed.Increment = new decimal(new int[] { + // + // lblRunAheadFrames + // + this.lblRunAheadFrames.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblRunAheadFrames.AutoSize = true; + this.lblRunAheadFrames.Location = new System.Drawing.Point(57, 7); + this.lblRunAheadFrames.Name = "lblRunAheadFrames"; + this.lblRunAheadFrames.Size = new System.Drawing.Size(277, 13); + this.lblRunAheadFrames.TabIndex = 2; + this.lblRunAheadFrames.Text = "frames (reduces input lag, increases system requirements)"; + // + // lblRunAhead + // + this.lblRunAhead.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblRunAhead.AutoSize = true; + this.lblRunAhead.Location = new System.Drawing.Point(3, 88); + this.lblRunAhead.Name = "lblRunAhead"; + this.lblRunAhead.Size = new System.Drawing.Size(64, 13); + this.lblRunAhead.TabIndex = 17; + this.lblRunAhead.Text = "Run Ahead:"; + // + // flowLayoutPanel9 + // + this.flowLayoutPanel9.AutoSize = true; + this.flowLayoutPanel9.Controls.Add(this.nudTurboSpeed); + this.flowLayoutPanel9.Controls.Add(this.lblTurboSpeedHint); + this.flowLayoutPanel9.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel9.Location = new System.Drawing.Point(111, 27); + this.flowLayoutPanel9.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel9.Name = "flowLayoutPanel9"; + this.flowLayoutPanel9.Size = new System.Drawing.Size(408, 27); + this.flowLayoutPanel9.TabIndex = 14; + // + // nudTurboSpeed + // + this.nudTurboSpeed.DecimalPlaces = 0; + this.nudTurboSpeed.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudTurboSpeed.Location = new System.Drawing.Point(3, 3); - this.nudTurboSpeed.Maximum = new decimal(new int[] { + this.nudTurboSpeed.IsHex = false; + this.nudTurboSpeed.Location = new System.Drawing.Point(3, 3); + this.nudTurboSpeed.Maximum = new decimal(new int[] { 5000, 0, 0, 0}); - this.nudTurboSpeed.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudTurboSpeed.Minimum = new decimal(new int[] { + this.nudTurboSpeed.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudTurboSpeed.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudTurboSpeed.MinimumSize = new System.Drawing.Size(0, 21); - this.nudTurboSpeed.Name = "nudTurboSpeed"; - this.nudTurboSpeed.Size = new System.Drawing.Size(48, 21); - this.nudTurboSpeed.TabIndex = 1; - this.nudTurboSpeed.Value = new decimal(new int[] { + this.nudTurboSpeed.MinimumSize = new System.Drawing.Size(0, 21); + this.nudTurboSpeed.Name = "nudTurboSpeed"; + this.nudTurboSpeed.Size = new System.Drawing.Size(48, 21); + this.nudTurboSpeed.TabIndex = 1; + this.nudTurboSpeed.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblTurboSpeedHint - // - this.lblTurboSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblTurboSpeedHint.AutoSize = true; - this.lblTurboSpeedHint.Location = new System.Drawing.Point(57, 7); - this.lblTurboSpeedHint.Name = "lblTurboSpeedHint"; - this.lblTurboSpeedHint.Size = new System.Drawing.Size(121, 13); - this.lblTurboSpeedHint.TabIndex = 2; - this.lblTurboSpeedHint.Text = "% (0 = Maximum speed)"; - // - // lblTurboSpeed - // - this.lblTurboSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblTurboSpeed.AutoSize = true; - this.lblTurboSpeed.Location = new System.Drawing.Point(3, 34); - this.lblTurboSpeed.Name = "lblTurboSpeed"; - this.lblTurboSpeed.Size = new System.Drawing.Size(105, 13); - this.lblTurboSpeed.TabIndex = 13; - this.lblTurboSpeed.Text = "Fast Forward Speed:"; - // - // flowLayoutPanel6 - // - this.flowLayoutPanel6.AutoSize = true; - this.flowLayoutPanel6.Controls.Add(this.nudEmulationSpeed); - this.flowLayoutPanel6.Controls.Add(this.lblEmuSpeedHint); - this.flowLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel6.Location = new System.Drawing.Point(111, 0); - this.flowLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel6.Name = "flowLayoutPanel6"; - this.flowLayoutPanel6.Size = new System.Drawing.Size(408, 27); - this.flowLayoutPanel6.TabIndex = 11; - // - // nudEmulationSpeed - // - this.nudEmulationSpeed.DecimalPlaces = 0; - this.nudEmulationSpeed.Increment = new decimal(new int[] { + // + // lblTurboSpeedHint + // + this.lblTurboSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblTurboSpeedHint.AutoSize = true; + this.lblTurboSpeedHint.Location = new System.Drawing.Point(57, 7); + this.lblTurboSpeedHint.Name = "lblTurboSpeedHint"; + this.lblTurboSpeedHint.Size = new System.Drawing.Size(121, 13); + this.lblTurboSpeedHint.TabIndex = 2; + this.lblTurboSpeedHint.Text = "% (0 = Maximum speed)"; + // + // lblTurboSpeed + // + this.lblTurboSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblTurboSpeed.AutoSize = true; + this.lblTurboSpeed.Location = new System.Drawing.Point(3, 34); + this.lblTurboSpeed.Name = "lblTurboSpeed"; + this.lblTurboSpeed.Size = new System.Drawing.Size(105, 13); + this.lblTurboSpeed.TabIndex = 13; + this.lblTurboSpeed.Text = "Fast Forward Speed:"; + // + // flowLayoutPanel6 + // + this.flowLayoutPanel6.AutoSize = true; + this.flowLayoutPanel6.Controls.Add(this.nudEmulationSpeed); + this.flowLayoutPanel6.Controls.Add(this.lblEmuSpeedHint); + this.flowLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel6.Location = new System.Drawing.Point(111, 0); + this.flowLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel6.Name = "flowLayoutPanel6"; + this.flowLayoutPanel6.Size = new System.Drawing.Size(408, 27); + this.flowLayoutPanel6.TabIndex = 11; + // + // nudEmulationSpeed + // + this.nudEmulationSpeed.DecimalPlaces = 0; + this.nudEmulationSpeed.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudEmulationSpeed.Location = new System.Drawing.Point(3, 3); - this.nudEmulationSpeed.Maximum = new decimal(new int[] { + this.nudEmulationSpeed.IsHex = false; + this.nudEmulationSpeed.Location = new System.Drawing.Point(3, 3); + this.nudEmulationSpeed.Maximum = new decimal(new int[] { 5000, 0, 0, 0}); - this.nudEmulationSpeed.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudEmulationSpeed.Minimum = new decimal(new int[] { + this.nudEmulationSpeed.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudEmulationSpeed.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudEmulationSpeed.MinimumSize = new System.Drawing.Size(0, 21); - this.nudEmulationSpeed.Name = "nudEmulationSpeed"; - this.nudEmulationSpeed.Size = new System.Drawing.Size(48, 21); - this.nudEmulationSpeed.TabIndex = 1; - this.nudEmulationSpeed.Value = new decimal(new int[] { + this.nudEmulationSpeed.MinimumSize = new System.Drawing.Size(0, 21); + this.nudEmulationSpeed.Name = "nudEmulationSpeed"; + this.nudEmulationSpeed.Size = new System.Drawing.Size(48, 21); + this.nudEmulationSpeed.TabIndex = 1; + this.nudEmulationSpeed.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblEmuSpeedHint - // - this.lblEmuSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblEmuSpeedHint.AutoSize = true; - this.lblEmuSpeedHint.Location = new System.Drawing.Point(57, 7); - this.lblEmuSpeedHint.Name = "lblEmuSpeedHint"; - this.lblEmuSpeedHint.Size = new System.Drawing.Size(121, 13); - this.lblEmuSpeedHint.TabIndex = 2; - this.lblEmuSpeedHint.Text = "% (0 = Maximum speed)"; - // - // lblEmulationSpeed - // - this.lblEmulationSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblEmulationSpeed.AutoSize = true; - this.lblEmulationSpeed.Location = new System.Drawing.Point(3, 7); - this.lblEmulationSpeed.Name = "lblEmulationSpeed"; - this.lblEmulationSpeed.Size = new System.Drawing.Size(90, 13); - this.lblEmulationSpeed.TabIndex = 12; - this.lblEmulationSpeed.Text = "Emulation Speed:"; - // - // lblRewindSpeed - // - this.lblRewindSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblRewindSpeed.AutoSize = true; - this.lblRewindSpeed.Location = new System.Drawing.Point(3, 61); - this.lblRewindSpeed.Name = "lblRewindSpeed"; - this.lblRewindSpeed.Size = new System.Drawing.Size(80, 13); - this.lblRewindSpeed.TabIndex = 15; - this.lblRewindSpeed.Text = "Rewind Speed:"; - // - // flowLayoutPanel10 - // - this.flowLayoutPanel10.AutoSize = true; - this.flowLayoutPanel10.Controls.Add(this.nudRewindSpeed); - this.flowLayoutPanel10.Controls.Add(this.lblRewindSpeedHint); - this.flowLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel10.Location = new System.Drawing.Point(111, 54); - this.flowLayoutPanel10.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel10.Name = "flowLayoutPanel10"; - this.flowLayoutPanel10.Size = new System.Drawing.Size(408, 27); - this.flowLayoutPanel10.TabIndex = 16; - // - // nudRewindSpeed - // - this.nudRewindSpeed.DecimalPlaces = 0; - this.nudRewindSpeed.Increment = new decimal(new int[] { + // + // lblEmuSpeedHint + // + this.lblEmuSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblEmuSpeedHint.AutoSize = true; + this.lblEmuSpeedHint.Location = new System.Drawing.Point(57, 7); + this.lblEmuSpeedHint.Name = "lblEmuSpeedHint"; + this.lblEmuSpeedHint.Size = new System.Drawing.Size(121, 13); + this.lblEmuSpeedHint.TabIndex = 2; + this.lblEmuSpeedHint.Text = "% (0 = Maximum speed)"; + // + // lblEmulationSpeed + // + this.lblEmulationSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblEmulationSpeed.AutoSize = true; + this.lblEmulationSpeed.Location = new System.Drawing.Point(3, 7); + this.lblEmulationSpeed.Name = "lblEmulationSpeed"; + this.lblEmulationSpeed.Size = new System.Drawing.Size(90, 13); + this.lblEmulationSpeed.TabIndex = 12; + this.lblEmulationSpeed.Text = "Emulation Speed:"; + // + // lblRewindSpeed + // + this.lblRewindSpeed.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblRewindSpeed.AutoSize = true; + this.lblRewindSpeed.Location = new System.Drawing.Point(3, 61); + this.lblRewindSpeed.Name = "lblRewindSpeed"; + this.lblRewindSpeed.Size = new System.Drawing.Size(80, 13); + this.lblRewindSpeed.TabIndex = 15; + this.lblRewindSpeed.Text = "Rewind Speed:"; + // + // flowLayoutPanel10 + // + this.flowLayoutPanel10.AutoSize = true; + this.flowLayoutPanel10.Controls.Add(this.nudRewindSpeed); + this.flowLayoutPanel10.Controls.Add(this.lblRewindSpeedHint); + this.flowLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel10.Location = new System.Drawing.Point(111, 54); + this.flowLayoutPanel10.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel10.Name = "flowLayoutPanel10"; + this.flowLayoutPanel10.Size = new System.Drawing.Size(408, 27); + this.flowLayoutPanel10.TabIndex = 16; + // + // nudRewindSpeed + // + this.nudRewindSpeed.DecimalPlaces = 0; + this.nudRewindSpeed.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudRewindSpeed.Location = new System.Drawing.Point(3, 3); - this.nudRewindSpeed.Maximum = new decimal(new int[] { + this.nudRewindSpeed.IsHex = false; + this.nudRewindSpeed.Location = new System.Drawing.Point(3, 3); + this.nudRewindSpeed.Maximum = new decimal(new int[] { 5000, 0, 0, 0}); - this.nudRewindSpeed.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudRewindSpeed.Minimum = new decimal(new int[] { + this.nudRewindSpeed.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudRewindSpeed.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudRewindSpeed.MinimumSize = new System.Drawing.Size(0, 21); - this.nudRewindSpeed.Name = "nudRewindSpeed"; - this.nudRewindSpeed.Size = new System.Drawing.Size(48, 21); - this.nudRewindSpeed.TabIndex = 1; - this.nudRewindSpeed.Value = new decimal(new int[] { + this.nudRewindSpeed.MinimumSize = new System.Drawing.Size(0, 21); + this.nudRewindSpeed.Name = "nudRewindSpeed"; + this.nudRewindSpeed.Size = new System.Drawing.Size(48, 21); + this.nudRewindSpeed.TabIndex = 1; + this.nudRewindSpeed.Value = new decimal(new int[] { 0, 0, 0, 0}); - // - // lblRewindSpeedHint - // - this.lblRewindSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblRewindSpeedHint.AutoSize = true; - this.lblRewindSpeedHint.Location = new System.Drawing.Point(57, 7); - this.lblRewindSpeedHint.Name = "lblRewindSpeedHint"; - this.lblRewindSpeedHint.Size = new System.Drawing.Size(121, 13); - this.lblRewindSpeedHint.TabIndex = 2; - this.lblRewindSpeedHint.Text = "% (0 = Maximum speed)"; - // - // tpgAdvanced - // - this.tpgAdvanced.Controls.Add(this.tableLayoutPanel1); - 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(525, 360); - this.tpgAdvanced.TabIndex = 1; - this.tpgAdvanced.Text = "Advanced"; - this.tpgAdvanced.UseVisualStyleBackColor = true; - // - // 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.chkEnablePpu2000ScrollGlitch, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.chkEnablePpu2006ScrollGlitch, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.chkRandomizeCpuPpuAlignment, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.lblMiscSettings, 0, 7); - this.tableLayoutPanel1.Controls.Add(this.chkMapperRandomPowerOnState, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.chkEnableOamDecay, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.chkDisablePaletteRead, 0, 13); - this.tableLayoutPanel1.Controls.Add(this.chkDisableOamAddrBug, 0, 11); - this.tableLayoutPanel1.Controls.Add(this.chkDisablePpuReset, 0, 10); - this.tableLayoutPanel1.Controls.Add(this.chkDisablePpu2004Reads, 0, 12); - this.tableLayoutPanel1.Controls.Add(this.chkUseNes101Hvc101Behavior, 0, 9); - this.tableLayoutPanel1.Controls.Add(this.chkAllowInvalidInput, 0, 14); - this.tableLayoutPanel1.Controls.Add(this.chkUseAlternativeMmc3Irq, 0, 8); - this.tableLayoutPanel1.Controls.Add(this.lblDeveloperSettings, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 16; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(519, 354); - this.tableLayoutPanel1.TabIndex = 0; - // - // chkEnablePpu2000ScrollGlitch - // - this.chkEnablePpu2000ScrollGlitch.AutoSize = true; - this.chkEnablePpu2000ScrollGlitch.Checked = false; - this.chkEnablePpu2000ScrollGlitch.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkEnablePpu2000ScrollGlitch.Location = new System.Drawing.Point(10, 112); - this.chkEnablePpu2000ScrollGlitch.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkEnablePpu2000ScrollGlitch.MinimumSize = new System.Drawing.Size(0, 23); - this.chkEnablePpu2000ScrollGlitch.Name = "chkEnablePpu2000ScrollGlitch"; - this.chkEnablePpu2000ScrollGlitch.Size = new System.Drawing.Size(509, 23); - this.chkEnablePpu2000ScrollGlitch.TabIndex = 38; - this.chkEnablePpu2000ScrollGlitch.Text = "Enable PPU $2000/$2005/$2006 first-write scroll glitch emulation"; - // - // chkEnablePpu2006ScrollGlitch - // - this.chkEnablePpu2006ScrollGlitch.AutoSize = true; - this.chkEnablePpu2006ScrollGlitch.Checked = false; - this.chkEnablePpu2006ScrollGlitch.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkEnablePpu2006ScrollGlitch.Location = new System.Drawing.Point(10, 89); - this.chkEnablePpu2006ScrollGlitch.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkEnablePpu2006ScrollGlitch.MinimumSize = new System.Drawing.Size(0, 23); - this.chkEnablePpu2006ScrollGlitch.Name = "chkEnablePpu2006ScrollGlitch"; - this.chkEnablePpu2006ScrollGlitch.Size = new System.Drawing.Size(509, 23); - this.chkEnablePpu2006ScrollGlitch.TabIndex = 37; - this.chkEnablePpu2006ScrollGlitch.Text = "Enable PPU $2006 write scroll glitch emulation"; - // - // chkRandomizeCpuPpuAlignment - // - this.chkRandomizeCpuPpuAlignment.AutoSize = true; - this.chkRandomizeCpuPpuAlignment.Checked = false; - this.chkRandomizeCpuPpuAlignment.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkRandomizeCpuPpuAlignment.Location = new System.Drawing.Point(10, 66); - this.chkRandomizeCpuPpuAlignment.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkRandomizeCpuPpuAlignment.MinimumSize = new System.Drawing.Size(0, 23); - this.chkRandomizeCpuPpuAlignment.Name = "chkRandomizeCpuPpuAlignment"; - this.chkRandomizeCpuPpuAlignment.Size = new System.Drawing.Size(509, 23); - this.chkRandomizeCpuPpuAlignment.TabIndex = 36; - this.chkRandomizeCpuPpuAlignment.Text = "Randomize power-on/reset CPU/PPU alignment"; - // - // lblMiscSettings - // - this.lblMiscSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.lblMiscSettings.AutoSize = true; - this.lblMiscSettings.ForeColor = System.Drawing.SystemColors.GrayText; - this.lblMiscSettings.Location = new System.Drawing.Point(0, 166); - this.lblMiscSettings.Margin = new System.Windows.Forms.Padding(0, 0, 3, 2); - this.lblMiscSettings.Name = "lblMiscSettings"; - this.lblMiscSettings.Size = new System.Drawing.Size(115, 13); - this.lblMiscSettings.TabIndex = 35; - this.lblMiscSettings.Text = "Miscellaneous Settings"; - // - // chkMapperRandomPowerOnState - // - this.chkMapperRandomPowerOnState.AutoSize = true; - this.chkMapperRandomPowerOnState.Checked = false; - this.chkMapperRandomPowerOnState.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkMapperRandomPowerOnState.Location = new System.Drawing.Point(10, 43); - this.chkMapperRandomPowerOnState.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkMapperRandomPowerOnState.MinimumSize = new System.Drawing.Size(0, 23); - this.chkMapperRandomPowerOnState.Name = "chkMapperRandomPowerOnState"; - this.chkMapperRandomPowerOnState.Size = new System.Drawing.Size(509, 23); - this.chkMapperRandomPowerOnState.TabIndex = 11; - this.chkMapperRandomPowerOnState.Text = "Randomize power-on state for mappers"; - // - // chkEnableOamDecay - // - this.chkEnableOamDecay.Checked = false; - this.chkEnableOamDecay.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkEnableOamDecay.Location = new System.Drawing.Point(10, 20); - this.chkEnableOamDecay.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkEnableOamDecay.MinimumSize = new System.Drawing.Size(0, 21); - this.chkEnableOamDecay.Name = "chkEnableOamDecay"; - this.chkEnableOamDecay.Size = new System.Drawing.Size(509, 23); - this.chkEnableOamDecay.TabIndex = 9; - this.chkEnableOamDecay.Text = "Enable OAM RAM decay"; - // - // lblRamPowerOnState - // - this.lblRamPowerOnState.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblRamPowerOnState.AutoSize = true; - this.lblRamPowerOnState.Location = new System.Drawing.Point(3, 6); - this.lblRamPowerOnState.Name = "lblRamPowerOnState"; - this.lblRamPowerOnState.Size = new System.Drawing.Size(159, 13); - this.lblRamPowerOnState.TabIndex = 0; - this.lblRamPowerOnState.Text = "Default power on state for RAM:"; - // - // cboRamPowerOnState - // - this.cboRamPowerOnState.Dock = System.Windows.Forms.DockStyle.Fill; - this.cboRamPowerOnState.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cboRamPowerOnState.FormattingEnabled = true; - this.cboRamPowerOnState.Location = new System.Drawing.Point(168, 3); - this.cboRamPowerOnState.Name = "cboRamPowerOnState"; - this.cboRamPowerOnState.Size = new System.Drawing.Size(348, 21); - this.cboRamPowerOnState.TabIndex = 1; - // - // chkDisablePaletteRead - // - this.chkDisablePaletteRead.Checked = false; - this.chkDisablePaletteRead.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkDisablePaletteRead.Location = new System.Drawing.Point(10, 296); - this.chkDisablePaletteRead.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkDisablePaletteRead.MinimumSize = new System.Drawing.Size(0, 21); - this.chkDisablePaletteRead.Name = "chkDisablePaletteRead"; - this.chkDisablePaletteRead.Size = new System.Drawing.Size(509, 23); - this.chkDisablePaletteRead.TabIndex = 6; - this.chkDisablePaletteRead.Text = "Disable PPU palette reads"; - // - // chkDisableOamAddrBug - // - this.chkDisableOamAddrBug.Checked = false; - this.chkDisableOamAddrBug.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkDisableOamAddrBug.Location = new System.Drawing.Point(10, 250); - this.chkDisableOamAddrBug.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkDisableOamAddrBug.MinimumSize = new System.Drawing.Size(0, 21); - this.chkDisableOamAddrBug.Name = "chkDisableOamAddrBug"; - this.chkDisableOamAddrBug.Size = new System.Drawing.Size(509, 23); - this.chkDisableOamAddrBug.TabIndex = 5; - this.chkDisableOamAddrBug.Text = "Disable PPU OAMADDR bug emulation"; - // - // chkDisablePpuReset - // - this.chkDisablePpuReset.Checked = false; - this.chkDisablePpuReset.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkDisablePpuReset.Location = new System.Drawing.Point(10, 227); - this.chkDisablePpuReset.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkDisablePpuReset.MinimumSize = new System.Drawing.Size(0, 21); - this.chkDisablePpuReset.Name = "chkDisablePpuReset"; - this.chkDisablePpuReset.Size = new System.Drawing.Size(509, 23); - this.chkDisablePpuReset.TabIndex = 7; - this.chkDisablePpuReset.Text = "Do not reset PPU when resetting console (Famicom behavior)"; - // - // chkDisablePpu2004Reads - // - this.chkDisablePpu2004Reads.Checked = false; - this.chkDisablePpu2004Reads.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkDisablePpu2004Reads.Location = new System.Drawing.Point(10, 273); - this.chkDisablePpu2004Reads.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkDisablePpu2004Reads.MinimumSize = new System.Drawing.Size(0, 21); - this.chkDisablePpu2004Reads.Name = "chkDisablePpu2004Reads"; - this.chkDisablePpu2004Reads.Size = new System.Drawing.Size(509, 23); - this.chkDisablePpu2004Reads.TabIndex = 4; - this.chkDisablePpu2004Reads.Text = "Disable PPU $2004 reads (Famicom behavior)"; - // - // chkUseNes101Hvc101Behavior - // - this.chkUseNes101Hvc101Behavior.AutoSize = true; - this.chkUseNes101Hvc101Behavior.Location = new System.Drawing.Point(13, 207); - this.chkUseNes101Hvc101Behavior.Margin = new System.Windows.Forms.Padding(13, 3, 3, 3); - this.chkUseNes101Hvc101Behavior.Name = "chkUseNes101Hvc101Behavior"; - this.chkUseNes101Hvc101Behavior.Size = new System.Drawing.Size(292, 17); - this.chkUseNes101Hvc101Behavior.TabIndex = 8; - this.chkUseNes101Hvc101Behavior.Text = "Use NES/HVC-101 (Top-loader / AV Famicom) behavior"; - this.chkUseNes101Hvc101Behavior.UseVisualStyleBackColor = true; - // - // chkAllowInvalidInput - // - this.chkAllowInvalidInput.AutoSize = true; - this.chkAllowInvalidInput.Checked = false; - this.chkAllowInvalidInput.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkAllowInvalidInput.Location = new System.Drawing.Point(10, 319); - this.chkAllowInvalidInput.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.chkAllowInvalidInput.MinimumSize = new System.Drawing.Size(0, 23); - this.chkAllowInvalidInput.Name = "chkAllowInvalidInput"; - this.chkAllowInvalidInput.Size = new System.Drawing.Size(509, 23); - this.chkAllowInvalidInput.TabIndex = 1; - this.chkAllowInvalidInput.Text = "Allow invalid input (e.g Down + Up or Left + Right at the same time)"; - // - // chkUseAlternativeMmc3Irq - // - this.chkUseAlternativeMmc3Irq.AutoSize = true; - this.chkUseAlternativeMmc3Irq.Location = new System.Drawing.Point(13, 184); - this.chkUseAlternativeMmc3Irq.Margin = new System.Windows.Forms.Padding(13, 3, 3, 3); - this.chkUseAlternativeMmc3Irq.Name = "chkUseAlternativeMmc3Irq"; - this.chkUseAlternativeMmc3Irq.Size = new System.Drawing.Size(197, 17); - this.chkUseAlternativeMmc3Irq.TabIndex = 0; - this.chkUseAlternativeMmc3Irq.Text = "Use alternative MMC3 IRQ behavior"; - this.chkUseAlternativeMmc3Irq.UseVisualStyleBackColor = true; - // - // lblDeveloperSettings - // - this.lblDeveloperSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.lblDeveloperSettings.AutoSize = true; - this.lblDeveloperSettings.ForeColor = System.Drawing.SystemColors.GrayText; - this.lblDeveloperSettings.Location = new System.Drawing.Point(0, 5); - this.lblDeveloperSettings.Margin = new System.Windows.Forms.Padding(0, 0, 3, 2); - this.lblDeveloperSettings.Name = "lblDeveloperSettings"; - this.lblDeveloperSettings.Size = new System.Drawing.Size(284, 13); - this.lblDeveloperSettings.TabIndex = 33; - this.lblDeveloperSettings.Text = "Recommended for developers (homebrew / ROM hacking)"; - // - // tpgOverclocking - // - this.tpgOverclocking.Controls.Add(this.picHint); - this.tpgOverclocking.Controls.Add(this.tableLayoutPanel3); - this.tpgOverclocking.Location = new System.Drawing.Point(4, 22); - this.tpgOverclocking.Name = "tpgOverclocking"; - this.tpgOverclocking.Padding = new System.Windows.Forms.Padding(3); - this.tpgOverclocking.Size = new System.Drawing.Size(525, 360); - this.tpgOverclocking.TabIndex = 2; - this.tpgOverclocking.Text = "Overclocking"; - this.tpgOverclocking.UseVisualStyleBackColor = true; - // - // picHint - // - this.picHint.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.picHint.BackgroundImage = global::Mesen.GUI.Properties.Resources.Help; - this.picHint.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.picHint.Location = new System.Drawing.Point(12, 16); - this.picHint.Margin = new System.Windows.Forms.Padding(3, 5, 3, 3); - this.picHint.Name = "picHint"; - this.picHint.Size = new System.Drawing.Size(16, 16); - this.picHint.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; - this.picHint.TabIndex = 0; - this.picHint.TabStop = false; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.ColumnCount = 1; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel3.Controls.Add(this.lblOverclockHint, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel4, 0, 5); - this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel3, 0, 4); - this.tableLayoutPanel3.Controls.Add(this.grpPpuTiming, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel2, 0, 3); - this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel7, 0, 7); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 8; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - 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(519, 354); - this.tableLayoutPanel3.TabIndex = 0; - // - // lblOverclockHint - // - this.lblOverclockHint.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.lblOverclockHint.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblOverclockHint.Location = new System.Drawing.Point(3, 0); - this.lblOverclockHint.Name = "lblOverclockHint"; - this.lblOverclockHint.Padding = new System.Windows.Forms.Padding(25, 0, 0, 0); - this.lblOverclockHint.Size = new System.Drawing.Size(517, 41); - this.lblOverclockHint.TabIndex = 1; - this.lblOverclockHint.Text = resources.GetString("lblOverclockHint.Text"); - // - // flowLayoutPanel4 - // - this.flowLayoutPanel4.Controls.Add(this.lblEffectiveClockRateDendy); - this.flowLayoutPanel4.Controls.Add(this.lblEffectiveClockRateValueDendy); - this.flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel4.Location = new System.Drawing.Point(0, 152); - this.flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel4.Name = "flowLayoutPanel4"; - this.flowLayoutPanel4.Size = new System.Drawing.Size(519, 20); - this.flowLayoutPanel4.TabIndex = 11; - // - // lblEffectiveClockRateDendy - // - this.lblEffectiveClockRateDendy.AutoSize = true; - this.lblEffectiveClockRateDendy.Location = new System.Drawing.Point(3, 0); - this.lblEffectiveClockRateDendy.Name = "lblEffectiveClockRateDendy"; - this.lblEffectiveClockRateDendy.Size = new System.Drawing.Size(148, 13); - this.lblEffectiveClockRateDendy.TabIndex = 0; - this.lblEffectiveClockRateDendy.Text = "Effective Clock Rate (Dendy):"; - // - // lblEffectiveClockRateValueDendy - // - this.lblEffectiveClockRateValueDendy.AutoSize = true; - this.lblEffectiveClockRateValueDendy.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblEffectiveClockRateValueDendy.Location = new System.Drawing.Point(157, 0); - this.lblEffectiveClockRateValueDendy.Name = "lblEffectiveClockRateValueDendy"; - this.lblEffectiveClockRateValueDendy.Size = new System.Drawing.Size(37, 13); - this.lblEffectiveClockRateValueDendy.TabIndex = 1; - this.lblEffectiveClockRateValueDendy.Text = "100%"; - // - // flowLayoutPanel3 - // - this.flowLayoutPanel3.Controls.Add(this.lblEffectiveClockRatePal); - this.flowLayoutPanel3.Controls.Add(this.lblEffectiveClockRateValuePal); - this.flowLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel3.Location = new System.Drawing.Point(0, 135); - this.flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel3.Name = "flowLayoutPanel3"; - this.flowLayoutPanel3.Size = new System.Drawing.Size(519, 17); - this.flowLayoutPanel3.TabIndex = 9; - // - // lblEffectiveClockRatePal - // - this.lblEffectiveClockRatePal.AutoSize = true; - this.lblEffectiveClockRatePal.Location = new System.Drawing.Point(3, 0); - this.lblEffectiveClockRatePal.Name = "lblEffectiveClockRatePal"; - this.lblEffectiveClockRatePal.Size = new System.Drawing.Size(137, 13); - this.lblEffectiveClockRatePal.TabIndex = 0; - this.lblEffectiveClockRatePal.Text = "Effective Clock Rate (PAL):"; - // - // lblEffectiveClockRateValuePal - // - this.lblEffectiveClockRateValuePal.AutoSize = true; - this.lblEffectiveClockRateValuePal.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblEffectiveClockRateValuePal.Location = new System.Drawing.Point(146, 0); - this.lblEffectiveClockRateValuePal.Name = "lblEffectiveClockRateValuePal"; - this.lblEffectiveClockRateValuePal.Size = new System.Drawing.Size(37, 13); - this.lblEffectiveClockRateValuePal.TabIndex = 1; - this.lblEffectiveClockRateValuePal.Text = "100%"; - // - // grpPpuTiming - // - this.grpPpuTiming.Controls.Add(this.tableLayoutPanel5); - this.grpPpuTiming.Dock = System.Windows.Forms.DockStyle.Fill; - this.grpPpuTiming.Location = new System.Drawing.Point(3, 44); - this.grpPpuTiming.Name = "grpPpuTiming"; - this.grpPpuTiming.Size = new System.Drawing.Size(513, 71); - this.grpPpuTiming.TabIndex = 7; - this.grpPpuTiming.TabStop = false; - this.grpPpuTiming.Text = "PPU Vertical Blank Configuration"; - // - // tableLayoutPanel5 - // - this.tableLayoutPanel5.ColumnCount = 2; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel5.Controls.Add(this.nudExtraScanlinesAfterNmi, 1, 1); - this.tableLayoutPanel5.Controls.Add(this.nudExtraScanlinesBeforeNmi, 1, 0); - this.tableLayoutPanel5.Controls.Add(this.lblExtraScanlinesBeforeNmi, 0, 0); - this.tableLayoutPanel5.Controls.Add(this.lblExtraScanlinesAfterNmi, 0, 1); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 16); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 3; - 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(507, 52); - this.tableLayoutPanel5.TabIndex = 0; - // - // nudExtraScanlinesAfterNmi - // - this.nudExtraScanlinesAfterNmi.DecimalPlaces = 0; - this.nudExtraScanlinesAfterNmi.Increment = new decimal(new int[] { + // + // lblRewindSpeedHint + // + this.lblRewindSpeedHint.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblRewindSpeedHint.AutoSize = true; + this.lblRewindSpeedHint.Location = new System.Drawing.Point(57, 7); + this.lblRewindSpeedHint.Name = "lblRewindSpeedHint"; + this.lblRewindSpeedHint.Size = new System.Drawing.Size(121, 13); + this.lblRewindSpeedHint.TabIndex = 2; + this.lblRewindSpeedHint.Text = "% (0 = Maximum speed)"; + // + // tpgAdvanced + // + this.tpgAdvanced.Controls.Add(this.tableLayoutPanel1); + 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(525, 382); + this.tpgAdvanced.TabIndex = 1; + this.tpgAdvanced.Text = "Advanced"; + this.tpgAdvanced.UseVisualStyleBackColor = true; + // + // 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.chkEnablePpuOamRowCorruption, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.chkEnablePpu2000ScrollGlitch, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.chkEnablePpu2006ScrollGlitch, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.chkRandomizeCpuPpuAlignment, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.lblMiscSettings, 0, 8); + this.tableLayoutPanel1.Controls.Add(this.chkMapperRandomPowerOnState, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.chkEnableOamDecay, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.chkDisablePaletteRead, 0, 14); + this.tableLayoutPanel1.Controls.Add(this.chkDisableOamAddrBug, 0, 12); + this.tableLayoutPanel1.Controls.Add(this.chkDisablePpuReset, 0, 11); + this.tableLayoutPanel1.Controls.Add(this.chkDisablePpu2004Reads, 0, 13); + this.tableLayoutPanel1.Controls.Add(this.chkUseNes101Hvc101Behavior, 0, 10); + this.tableLayoutPanel1.Controls.Add(this.chkAllowInvalidInput, 0, 15); + this.tableLayoutPanel1.Controls.Add(this.chkUseAlternativeMmc3Irq, 0, 9); + this.tableLayoutPanel1.Controls.Add(this.lblDeveloperSettings, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 17; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(519, 376); + this.tableLayoutPanel1.TabIndex = 0; + // + // chkEnablePpuOamRowCorruption + // + this.chkEnablePpuOamRowCorruption.AutoSize = true; + this.chkEnablePpuOamRowCorruption.Checked = false; + this.chkEnablePpuOamRowCorruption.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkEnablePpuOamRowCorruption.Location = new System.Drawing.Point(10, 135); + this.chkEnablePpuOamRowCorruption.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkEnablePpuOamRowCorruption.MinimumSize = new System.Drawing.Size(0, 23); + this.chkEnablePpuOamRowCorruption.Name = "chkEnablePpuOamRowCorruption"; + this.chkEnablePpuOamRowCorruption.Size = new System.Drawing.Size(509, 23); + this.chkEnablePpuOamRowCorruption.TabIndex = 39; + this.chkEnablePpuOamRowCorruption.Text = "Enable PPU OAM row corruption emulation"; + // + // chkEnablePpu2000ScrollGlitch + // + this.chkEnablePpu2000ScrollGlitch.AutoSize = true; + this.chkEnablePpu2000ScrollGlitch.Checked = false; + this.chkEnablePpu2000ScrollGlitch.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkEnablePpu2000ScrollGlitch.Location = new System.Drawing.Point(10, 89); + this.chkEnablePpu2000ScrollGlitch.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkEnablePpu2000ScrollGlitch.MinimumSize = new System.Drawing.Size(0, 23); + this.chkEnablePpu2000ScrollGlitch.Name = "chkEnablePpu2000ScrollGlitch"; + this.chkEnablePpu2000ScrollGlitch.Size = new System.Drawing.Size(509, 23); + this.chkEnablePpu2000ScrollGlitch.TabIndex = 38; + this.chkEnablePpu2000ScrollGlitch.Text = "Enable PPU $2000/$2005/$2006 first-write scroll glitch emulation"; + // + // chkEnablePpu2006ScrollGlitch + // + this.chkEnablePpu2006ScrollGlitch.AutoSize = true; + this.chkEnablePpu2006ScrollGlitch.Checked = false; + this.chkEnablePpu2006ScrollGlitch.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkEnablePpu2006ScrollGlitch.Location = new System.Drawing.Point(10, 66); + this.chkEnablePpu2006ScrollGlitch.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkEnablePpu2006ScrollGlitch.MinimumSize = new System.Drawing.Size(0, 23); + this.chkEnablePpu2006ScrollGlitch.Name = "chkEnablePpu2006ScrollGlitch"; + this.chkEnablePpu2006ScrollGlitch.Size = new System.Drawing.Size(509, 23); + this.chkEnablePpu2006ScrollGlitch.TabIndex = 37; + this.chkEnablePpu2006ScrollGlitch.Text = "Enable PPU $2006 write scroll glitch emulation"; + // + // chkRandomizeCpuPpuAlignment + // + this.chkRandomizeCpuPpuAlignment.AutoSize = true; + this.chkRandomizeCpuPpuAlignment.Checked = false; + this.chkRandomizeCpuPpuAlignment.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkRandomizeCpuPpuAlignment.Location = new System.Drawing.Point(10, 43); + this.chkRandomizeCpuPpuAlignment.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkRandomizeCpuPpuAlignment.MinimumSize = new System.Drawing.Size(0, 23); + this.chkRandomizeCpuPpuAlignment.Name = "chkRandomizeCpuPpuAlignment"; + this.chkRandomizeCpuPpuAlignment.Size = new System.Drawing.Size(509, 23); + this.chkRandomizeCpuPpuAlignment.TabIndex = 36; + this.chkRandomizeCpuPpuAlignment.Text = "Randomize power-on/reset CPU/PPU alignment"; + // + // lblMiscSettings + // + this.lblMiscSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.lblMiscSettings.AutoSize = true; + this.lblMiscSettings.ForeColor = System.Drawing.SystemColors.GrayText; + this.lblMiscSettings.Location = new System.Drawing.Point(0, 189); + this.lblMiscSettings.Margin = new System.Windows.Forms.Padding(0, 0, 3, 2); + this.lblMiscSettings.Name = "lblMiscSettings"; + this.lblMiscSettings.Size = new System.Drawing.Size(115, 13); + this.lblMiscSettings.TabIndex = 35; + this.lblMiscSettings.Text = "Miscellaneous Settings"; + // + // chkMapperRandomPowerOnState + // + this.chkMapperRandomPowerOnState.AutoSize = true; + this.chkMapperRandomPowerOnState.Checked = false; + this.chkMapperRandomPowerOnState.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkMapperRandomPowerOnState.Location = new System.Drawing.Point(10, 20); + this.chkMapperRandomPowerOnState.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkMapperRandomPowerOnState.MinimumSize = new System.Drawing.Size(0, 23); + this.chkMapperRandomPowerOnState.Name = "chkMapperRandomPowerOnState"; + this.chkMapperRandomPowerOnState.Size = new System.Drawing.Size(509, 23); + this.chkMapperRandomPowerOnState.TabIndex = 11; + this.chkMapperRandomPowerOnState.Text = "Randomize power-on state for mappers"; + // + // chkEnableOamDecay + // + this.chkEnableOamDecay.Checked = false; + this.chkEnableOamDecay.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkEnableOamDecay.Location = new System.Drawing.Point(10, 112); + this.chkEnableOamDecay.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkEnableOamDecay.MinimumSize = new System.Drawing.Size(0, 21); + this.chkEnableOamDecay.Name = "chkEnableOamDecay"; + this.chkEnableOamDecay.Size = new System.Drawing.Size(509, 23); + this.chkEnableOamDecay.TabIndex = 9; + this.chkEnableOamDecay.Text = "Enable OAM RAM decay"; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.cboRamPowerOnState, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.lblRamPowerOnState, 0, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 158); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(519, 26); + this.tableLayoutPanel2.TabIndex = 2; + // + // cboRamPowerOnState + // + this.cboRamPowerOnState.Dock = System.Windows.Forms.DockStyle.Fill; + this.cboRamPowerOnState.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboRamPowerOnState.FormattingEnabled = true; + this.cboRamPowerOnState.Location = new System.Drawing.Point(168, 3); + this.cboRamPowerOnState.Name = "cboRamPowerOnState"; + this.cboRamPowerOnState.Size = new System.Drawing.Size(348, 21); + this.cboRamPowerOnState.TabIndex = 1; + // + // lblRamPowerOnState + // + this.lblRamPowerOnState.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblRamPowerOnState.AutoSize = true; + this.lblRamPowerOnState.Location = new System.Drawing.Point(3, 6); + this.lblRamPowerOnState.Name = "lblRamPowerOnState"; + this.lblRamPowerOnState.Size = new System.Drawing.Size(159, 13); + this.lblRamPowerOnState.TabIndex = 0; + this.lblRamPowerOnState.Text = "Default power on state for RAM:"; + // + // chkDisablePaletteRead + // + this.chkDisablePaletteRead.Checked = false; + this.chkDisablePaletteRead.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkDisablePaletteRead.Location = new System.Drawing.Point(10, 319); + this.chkDisablePaletteRead.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkDisablePaletteRead.MinimumSize = new System.Drawing.Size(0, 21); + this.chkDisablePaletteRead.Name = "chkDisablePaletteRead"; + this.chkDisablePaletteRead.Size = new System.Drawing.Size(509, 23); + this.chkDisablePaletteRead.TabIndex = 6; + this.chkDisablePaletteRead.Text = "Disable PPU palette reads"; + // + // chkDisableOamAddrBug + // + this.chkDisableOamAddrBug.Checked = false; + this.chkDisableOamAddrBug.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkDisableOamAddrBug.Location = new System.Drawing.Point(10, 273); + this.chkDisableOamAddrBug.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkDisableOamAddrBug.MinimumSize = new System.Drawing.Size(0, 21); + this.chkDisableOamAddrBug.Name = "chkDisableOamAddrBug"; + this.chkDisableOamAddrBug.Size = new System.Drawing.Size(509, 23); + this.chkDisableOamAddrBug.TabIndex = 5; + this.chkDisableOamAddrBug.Text = "Disable PPU OAMADDR bug emulation"; + // + // chkDisablePpuReset + // + this.chkDisablePpuReset.Checked = false; + this.chkDisablePpuReset.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkDisablePpuReset.Location = new System.Drawing.Point(10, 250); + this.chkDisablePpuReset.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkDisablePpuReset.MinimumSize = new System.Drawing.Size(0, 21); + this.chkDisablePpuReset.Name = "chkDisablePpuReset"; + this.chkDisablePpuReset.Size = new System.Drawing.Size(509, 23); + this.chkDisablePpuReset.TabIndex = 7; + this.chkDisablePpuReset.Text = "Do not reset PPU when resetting console (Famicom behavior)"; + // + // chkDisablePpu2004Reads + // + this.chkDisablePpu2004Reads.Checked = false; + this.chkDisablePpu2004Reads.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkDisablePpu2004Reads.Location = new System.Drawing.Point(10, 296); + this.chkDisablePpu2004Reads.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkDisablePpu2004Reads.MinimumSize = new System.Drawing.Size(0, 21); + this.chkDisablePpu2004Reads.Name = "chkDisablePpu2004Reads"; + this.chkDisablePpu2004Reads.Size = new System.Drawing.Size(509, 23); + this.chkDisablePpu2004Reads.TabIndex = 4; + this.chkDisablePpu2004Reads.Text = "Disable PPU $2004 reads (Famicom behavior)"; + // + // chkUseNes101Hvc101Behavior + // + this.chkUseNes101Hvc101Behavior.AutoSize = true; + this.chkUseNes101Hvc101Behavior.Location = new System.Drawing.Point(13, 230); + this.chkUseNes101Hvc101Behavior.Margin = new System.Windows.Forms.Padding(13, 3, 3, 3); + this.chkUseNes101Hvc101Behavior.Name = "chkUseNes101Hvc101Behavior"; + this.chkUseNes101Hvc101Behavior.Size = new System.Drawing.Size(292, 17); + this.chkUseNes101Hvc101Behavior.TabIndex = 8; + this.chkUseNes101Hvc101Behavior.Text = "Use NES/HVC-101 (Top-loader / AV Famicom) behavior"; + this.chkUseNes101Hvc101Behavior.UseVisualStyleBackColor = true; + // + // chkAllowInvalidInput + // + this.chkAllowInvalidInput.AutoSize = true; + this.chkAllowInvalidInput.Checked = false; + this.chkAllowInvalidInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkAllowInvalidInput.Location = new System.Drawing.Point(10, 342); + this.chkAllowInvalidInput.Margin = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkAllowInvalidInput.MinimumSize = new System.Drawing.Size(0, 23); + this.chkAllowInvalidInput.Name = "chkAllowInvalidInput"; + this.chkAllowInvalidInput.Size = new System.Drawing.Size(509, 23); + this.chkAllowInvalidInput.TabIndex = 1; + this.chkAllowInvalidInput.Text = "Allow invalid input (e.g Down + Up or Left + Right at the same time)"; + // + // chkUseAlternativeMmc3Irq + // + this.chkUseAlternativeMmc3Irq.AutoSize = true; + this.chkUseAlternativeMmc3Irq.Location = new System.Drawing.Point(13, 207); + this.chkUseAlternativeMmc3Irq.Margin = new System.Windows.Forms.Padding(13, 3, 3, 3); + this.chkUseAlternativeMmc3Irq.Name = "chkUseAlternativeMmc3Irq"; + this.chkUseAlternativeMmc3Irq.Size = new System.Drawing.Size(197, 17); + this.chkUseAlternativeMmc3Irq.TabIndex = 0; + this.chkUseAlternativeMmc3Irq.Text = "Use alternative MMC3 IRQ behavior"; + this.chkUseAlternativeMmc3Irq.UseVisualStyleBackColor = true; + // + // lblDeveloperSettings + // + this.lblDeveloperSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.lblDeveloperSettings.AutoSize = true; + this.lblDeveloperSettings.ForeColor = System.Drawing.SystemColors.GrayText; + this.lblDeveloperSettings.Location = new System.Drawing.Point(0, 5); + this.lblDeveloperSettings.Margin = new System.Windows.Forms.Padding(0, 0, 3, 2); + this.lblDeveloperSettings.Name = "lblDeveloperSettings"; + this.lblDeveloperSettings.Size = new System.Drawing.Size(284, 13); + this.lblDeveloperSettings.TabIndex = 33; + this.lblDeveloperSettings.Text = "Recommended for developers (homebrew / ROM hacking)"; + // + // tpgOverclocking + // + this.tpgOverclocking.Controls.Add(this.picHint); + this.tpgOverclocking.Controls.Add(this.tableLayoutPanel3); + this.tpgOverclocking.Location = new System.Drawing.Point(4, 22); + this.tpgOverclocking.Name = "tpgOverclocking"; + this.tpgOverclocking.Padding = new System.Windows.Forms.Padding(3); + this.tpgOverclocking.Size = new System.Drawing.Size(525, 382); + this.tpgOverclocking.TabIndex = 2; + this.tpgOverclocking.Text = "Overclocking"; + this.tpgOverclocking.UseVisualStyleBackColor = true; + // + // picHint + // + this.picHint.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.picHint.BackgroundImage = global::Mesen.GUI.Properties.Resources.Help; + this.picHint.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.picHint.Location = new System.Drawing.Point(12, 16); + this.picHint.Margin = new System.Windows.Forms.Padding(3, 5, 3, 3); + this.picHint.Name = "picHint"; + this.picHint.Size = new System.Drawing.Size(16, 16); + this.picHint.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.picHint.TabIndex = 0; + this.picHint.TabStop = false; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.Controls.Add(this.lblOverclockHint, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel4, 0, 5); + this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel3, 0, 4); + this.tableLayoutPanel3.Controls.Add(this.grpPpuTiming, 0, 1); + this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel2, 0, 3); + this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel7, 0, 7); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 8; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + 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(519, 376); + this.tableLayoutPanel3.TabIndex = 0; + // + // lblOverclockHint + // + this.lblOverclockHint.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lblOverclockHint.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblOverclockHint.Location = new System.Drawing.Point(3, 0); + this.lblOverclockHint.Name = "lblOverclockHint"; + this.lblOverclockHint.Padding = new System.Windows.Forms.Padding(25, 0, 0, 0); + this.lblOverclockHint.Size = new System.Drawing.Size(517, 41); + this.lblOverclockHint.TabIndex = 1; + this.lblOverclockHint.Text = resources.GetString("lblOverclockHint.Text"); + // + // flowLayoutPanel4 + // + this.flowLayoutPanel4.Controls.Add(this.lblEffectiveClockRateDendy); + this.flowLayoutPanel4.Controls.Add(this.lblEffectiveClockRateValueDendy); + this.flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel4.Location = new System.Drawing.Point(0, 152); + this.flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel4.Name = "flowLayoutPanel4"; + this.flowLayoutPanel4.Size = new System.Drawing.Size(519, 20); + this.flowLayoutPanel4.TabIndex = 11; + // + // lblEffectiveClockRateDendy + // + this.lblEffectiveClockRateDendy.AutoSize = true; + this.lblEffectiveClockRateDendy.Location = new System.Drawing.Point(3, 0); + this.lblEffectiveClockRateDendy.Name = "lblEffectiveClockRateDendy"; + this.lblEffectiveClockRateDendy.Size = new System.Drawing.Size(148, 13); + this.lblEffectiveClockRateDendy.TabIndex = 0; + this.lblEffectiveClockRateDendy.Text = "Effective Clock Rate (Dendy):"; + // + // lblEffectiveClockRateValueDendy + // + this.lblEffectiveClockRateValueDendy.AutoSize = true; + this.lblEffectiveClockRateValueDendy.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblEffectiveClockRateValueDendy.Location = new System.Drawing.Point(157, 0); + this.lblEffectiveClockRateValueDendy.Name = "lblEffectiveClockRateValueDendy"; + this.lblEffectiveClockRateValueDendy.Size = new System.Drawing.Size(37, 13); + this.lblEffectiveClockRateValueDendy.TabIndex = 1; + this.lblEffectiveClockRateValueDendy.Text = "100%"; + // + // flowLayoutPanel3 + // + this.flowLayoutPanel3.Controls.Add(this.lblEffectiveClockRatePal); + this.flowLayoutPanel3.Controls.Add(this.lblEffectiveClockRateValuePal); + this.flowLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel3.Location = new System.Drawing.Point(0, 135); + this.flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel3.Name = "flowLayoutPanel3"; + this.flowLayoutPanel3.Size = new System.Drawing.Size(519, 17); + this.flowLayoutPanel3.TabIndex = 9; + // + // lblEffectiveClockRatePal + // + this.lblEffectiveClockRatePal.AutoSize = true; + this.lblEffectiveClockRatePal.Location = new System.Drawing.Point(3, 0); + this.lblEffectiveClockRatePal.Name = "lblEffectiveClockRatePal"; + this.lblEffectiveClockRatePal.Size = new System.Drawing.Size(137, 13); + this.lblEffectiveClockRatePal.TabIndex = 0; + this.lblEffectiveClockRatePal.Text = "Effective Clock Rate (PAL):"; + // + // lblEffectiveClockRateValuePal + // + this.lblEffectiveClockRateValuePal.AutoSize = true; + this.lblEffectiveClockRateValuePal.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblEffectiveClockRateValuePal.Location = new System.Drawing.Point(146, 0); + this.lblEffectiveClockRateValuePal.Name = "lblEffectiveClockRateValuePal"; + this.lblEffectiveClockRateValuePal.Size = new System.Drawing.Size(37, 13); + this.lblEffectiveClockRateValuePal.TabIndex = 1; + this.lblEffectiveClockRateValuePal.Text = "100%"; + // + // grpPpuTiming + // + this.grpPpuTiming.Controls.Add(this.tableLayoutPanel5); + this.grpPpuTiming.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpPpuTiming.Location = new System.Drawing.Point(3, 44); + this.grpPpuTiming.Name = "grpPpuTiming"; + this.grpPpuTiming.Size = new System.Drawing.Size(513, 71); + this.grpPpuTiming.TabIndex = 7; + this.grpPpuTiming.TabStop = false; + this.grpPpuTiming.Text = "PPU Vertical Blank Configuration"; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.ColumnCount = 2; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel5.Controls.Add(this.nudExtraScanlinesAfterNmi, 1, 1); + this.tableLayoutPanel5.Controls.Add(this.nudExtraScanlinesBeforeNmi, 1, 0); + this.tableLayoutPanel5.Controls.Add(this.lblExtraScanlinesBeforeNmi, 0, 0); + this.tableLayoutPanel5.Controls.Add(this.lblExtraScanlinesAfterNmi, 0, 1); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 3; + 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(507, 52); + this.tableLayoutPanel5.TabIndex = 0; + // + // nudExtraScanlinesAfterNmi + // + this.nudExtraScanlinesAfterNmi.DecimalPlaces = 0; + this.nudExtraScanlinesAfterNmi.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudExtraScanlinesAfterNmi.Location = new System.Drawing.Point(165, 30); - this.nudExtraScanlinesAfterNmi.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); - this.nudExtraScanlinesAfterNmi.Maximum = new decimal(new int[] { + this.nudExtraScanlinesAfterNmi.IsHex = false; + this.nudExtraScanlinesAfterNmi.Location = new System.Drawing.Point(165, 30); + this.nudExtraScanlinesAfterNmi.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); + this.nudExtraScanlinesAfterNmi.Maximum = new decimal(new int[] { 1000, 0, 0, 0}); - this.nudExtraScanlinesAfterNmi.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudExtraScanlinesAfterNmi.Minimum = new decimal(new int[] { + this.nudExtraScanlinesAfterNmi.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudExtraScanlinesAfterNmi.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudExtraScanlinesAfterNmi.MinimumSize = new System.Drawing.Size(0, 21); - this.nudExtraScanlinesAfterNmi.Name = "nudExtraScanlinesAfterNmi"; - this.nudExtraScanlinesAfterNmi.Size = new System.Drawing.Size(46, 21); - this.nudExtraScanlinesAfterNmi.TabIndex = 3; - this.nudExtraScanlinesAfterNmi.Value = new decimal(new int[] { + this.nudExtraScanlinesAfterNmi.MinimumSize = new System.Drawing.Size(0, 21); + this.nudExtraScanlinesAfterNmi.Name = "nudExtraScanlinesAfterNmi"; + this.nudExtraScanlinesAfterNmi.Size = new System.Drawing.Size(46, 21); + this.nudExtraScanlinesAfterNmi.TabIndex = 3; + this.nudExtraScanlinesAfterNmi.Value = new decimal(new int[] { 100, 0, 0, 0}); - // - // nudExtraScanlinesBeforeNmi - // - this.nudExtraScanlinesBeforeNmi.DecimalPlaces = 0; - this.nudExtraScanlinesBeforeNmi.Increment = new decimal(new int[] { + // + // nudExtraScanlinesBeforeNmi + // + this.nudExtraScanlinesBeforeNmi.DecimalPlaces = 0; + this.nudExtraScanlinesBeforeNmi.Increment = new decimal(new int[] { 1, 0, 0, 0}); - this.nudExtraScanlinesBeforeNmi.Location = new System.Drawing.Point(165, 3); - this.nudExtraScanlinesBeforeNmi.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); - this.nudExtraScanlinesBeforeNmi.Maximum = new decimal(new int[] { + this.nudExtraScanlinesBeforeNmi.IsHex = false; + this.nudExtraScanlinesBeforeNmi.Location = new System.Drawing.Point(165, 3); + this.nudExtraScanlinesBeforeNmi.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); + this.nudExtraScanlinesBeforeNmi.Maximum = new decimal(new int[] { 1000, 0, 0, 0}); - this.nudExtraScanlinesBeforeNmi.MaximumSize = new System.Drawing.Size(10000, 20); - this.nudExtraScanlinesBeforeNmi.Minimum = new decimal(new int[] { + this.nudExtraScanlinesBeforeNmi.MaximumSize = new System.Drawing.Size(10000, 20); + this.nudExtraScanlinesBeforeNmi.Minimum = new decimal(new int[] { 0, 0, 0, 0}); - this.nudExtraScanlinesBeforeNmi.MinimumSize = new System.Drawing.Size(0, 21); - this.nudExtraScanlinesBeforeNmi.Name = "nudExtraScanlinesBeforeNmi"; - this.nudExtraScanlinesBeforeNmi.Size = new System.Drawing.Size(46, 21); - this.nudExtraScanlinesBeforeNmi.TabIndex = 2; - this.nudExtraScanlinesBeforeNmi.Value = new decimal(new int[] { + this.nudExtraScanlinesBeforeNmi.MinimumSize = new System.Drawing.Size(0, 21); + this.nudExtraScanlinesBeforeNmi.Name = "nudExtraScanlinesBeforeNmi"; + this.nudExtraScanlinesBeforeNmi.Size = new System.Drawing.Size(46, 21); + this.nudExtraScanlinesBeforeNmi.TabIndex = 2; + this.nudExtraScanlinesBeforeNmi.Value = new decimal(new int[] { 100, 0, 0, 0}); - // - // lblExtraScanlinesBeforeNmi - // - this.lblExtraScanlinesBeforeNmi.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblExtraScanlinesBeforeNmi.AutoSize = true; - this.lblExtraScanlinesBeforeNmi.Location = new System.Drawing.Point(3, 7); - this.lblExtraScanlinesBeforeNmi.Name = "lblExtraScanlinesBeforeNmi"; - this.lblExtraScanlinesBeforeNmi.Size = new System.Drawing.Size(159, 13); - this.lblExtraScanlinesBeforeNmi.TabIndex = 0; - this.lblExtraScanlinesBeforeNmi.Text = "Additional scanlines before NMI:"; - // - // lblExtraScanlinesAfterNmi - // - this.lblExtraScanlinesAfterNmi.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lblExtraScanlinesAfterNmi.AutoSize = true; - this.lblExtraScanlinesAfterNmi.Location = new System.Drawing.Point(3, 34); - this.lblExtraScanlinesAfterNmi.Name = "lblExtraScanlinesAfterNmi"; - this.lblExtraScanlinesAfterNmi.Size = new System.Drawing.Size(150, 13); - this.lblExtraScanlinesAfterNmi.TabIndex = 1; - this.lblExtraScanlinesAfterNmi.Text = "Additional scanlines after NMI:"; - // - // flowLayoutPanel2 - // - this.flowLayoutPanel2.Controls.Add(this.lblEffectiveClockRate); - this.flowLayoutPanel2.Controls.Add(this.lblEffectiveClockRateValue); - this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel2.Location = new System.Drawing.Point(0, 118); - this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel2.Name = "flowLayoutPanel2"; - this.flowLayoutPanel2.Size = new System.Drawing.Size(519, 17); - this.flowLayoutPanel2.TabIndex = 8; - // - // lblEffectiveClockRate - // - this.lblEffectiveClockRate.AutoSize = true; - this.lblEffectiveClockRate.Location = new System.Drawing.Point(3, 0); - this.lblEffectiveClockRate.Name = "lblEffectiveClockRate"; - this.lblEffectiveClockRate.Size = new System.Drawing.Size(146, 13); - this.lblEffectiveClockRate.TabIndex = 0; - this.lblEffectiveClockRate.Text = "Effective Clock Rate (NTSC):"; - // - // lblEffectiveClockRateValue - // - this.lblEffectiveClockRateValue.AutoSize = true; - this.lblEffectiveClockRateValue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblEffectiveClockRateValue.Location = new System.Drawing.Point(155, 0); - this.lblEffectiveClockRateValue.Name = "lblEffectiveClockRateValue"; - this.lblEffectiveClockRateValue.Size = new System.Drawing.Size(37, 13); - this.lblEffectiveClockRateValue.TabIndex = 1; - this.lblEffectiveClockRateValue.Text = "100%"; - // - // flowLayoutPanel7 - // - this.flowLayoutPanel7.Controls.Add(this.chkShowLagCounter); - this.flowLayoutPanel7.Controls.Add(this.btnResetLagCounter); - this.flowLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel7.Location = new System.Drawing.Point(0, 172); - this.flowLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); - this.flowLayoutPanel7.Name = "flowLayoutPanel7"; - this.flowLayoutPanel7.Size = new System.Drawing.Size(519, 182); - this.flowLayoutPanel7.TabIndex = 12; - // - // chkShowLagCounter - // - this.chkShowLagCounter.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.chkShowLagCounter.AutoSize = true; - this.chkShowLagCounter.Location = new System.Drawing.Point(3, 6); - this.chkShowLagCounter.Name = "chkShowLagCounter"; - this.chkShowLagCounter.Size = new System.Drawing.Size(114, 17); - this.chkShowLagCounter.TabIndex = 13; - this.chkShowLagCounter.Text = "Show Lag Counter"; - this.chkShowLagCounter.UseVisualStyleBackColor = true; - // - // btnResetLagCounter - // - this.btnResetLagCounter.AutoSize = true; - this.btnResetLagCounter.Location = new System.Drawing.Point(123, 3); - this.btnResetLagCounter.Name = "btnResetLagCounter"; - this.btnResetLagCounter.Size = new System.Drawing.Size(85, 23); - this.btnResetLagCounter.TabIndex = 14; - this.btnResetLagCounter.Text = "Reset Counter"; - this.btnResetLagCounter.UseVisualStyleBackColor = true; - this.btnResetLagCounter.Click += new System.EventHandler(this.btnResetLagCounter_Click); - // - // tmrUpdateClockRate - // - this.tmrUpdateClockRate.Enabled = true; - this.tmrUpdateClockRate.Tick += new System.EventHandler(this.tmrUpdateClockRate_Tick); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.ColumnCount = 2; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.cboRamPowerOnState, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.lblRamPowerOnState, 0, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 135); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(519, 26); - this.tableLayoutPanel2.TabIndex = 2; - // - // frmEmulationConfig - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.ClientSize = new System.Drawing.Size(533, 415); - this.Controls.Add(this.tabMain); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(503, 367); - this.Name = "frmEmulationConfig"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Emulation Settings"; - this.Controls.SetChildIndex(this.baseConfigPanel, 0); - this.Controls.SetChildIndex(this.tabMain, 0); - this.tabMain.ResumeLayout(false); - this.tpgGeneral.ResumeLayout(false); - this.tpgGeneral.PerformLayout(); - this.tableLayoutPanel4.ResumeLayout(false); - this.tableLayoutPanel4.PerformLayout(); - this.flowLayoutPanel5.ResumeLayout(false); - this.flowLayoutPanel5.PerformLayout(); - this.flowLayoutPanel9.ResumeLayout(false); - this.flowLayoutPanel9.PerformLayout(); - this.flowLayoutPanel6.ResumeLayout(false); - this.flowLayoutPanel6.PerformLayout(); - this.flowLayoutPanel10.ResumeLayout(false); - this.flowLayoutPanel10.PerformLayout(); - this.tpgAdvanced.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tpgOverclocking.ResumeLayout(false); - this.tpgOverclocking.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picHint)).EndInit(); - this.tableLayoutPanel3.ResumeLayout(false); - this.flowLayoutPanel4.ResumeLayout(false); - this.flowLayoutPanel4.PerformLayout(); - this.flowLayoutPanel3.ResumeLayout(false); - this.flowLayoutPanel3.PerformLayout(); - this.grpPpuTiming.ResumeLayout(false); - this.tableLayoutPanel5.ResumeLayout(false); - this.tableLayoutPanel5.PerformLayout(); - this.flowLayoutPanel2.ResumeLayout(false); - this.flowLayoutPanel2.PerformLayout(); - this.flowLayoutPanel7.ResumeLayout(false); - this.flowLayoutPanel7.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.ResumeLayout(false); + // + // lblExtraScanlinesBeforeNmi + // + this.lblExtraScanlinesBeforeNmi.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblExtraScanlinesBeforeNmi.AutoSize = true; + this.lblExtraScanlinesBeforeNmi.Location = new System.Drawing.Point(3, 7); + this.lblExtraScanlinesBeforeNmi.Name = "lblExtraScanlinesBeforeNmi"; + this.lblExtraScanlinesBeforeNmi.Size = new System.Drawing.Size(159, 13); + this.lblExtraScanlinesBeforeNmi.TabIndex = 0; + this.lblExtraScanlinesBeforeNmi.Text = "Additional scanlines before NMI:"; + // + // lblExtraScanlinesAfterNmi + // + this.lblExtraScanlinesAfterNmi.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblExtraScanlinesAfterNmi.AutoSize = true; + this.lblExtraScanlinesAfterNmi.Location = new System.Drawing.Point(3, 34); + this.lblExtraScanlinesAfterNmi.Name = "lblExtraScanlinesAfterNmi"; + this.lblExtraScanlinesAfterNmi.Size = new System.Drawing.Size(150, 13); + this.lblExtraScanlinesAfterNmi.TabIndex = 1; + this.lblExtraScanlinesAfterNmi.Text = "Additional scanlines after NMI:"; + // + // flowLayoutPanel2 + // + this.flowLayoutPanel2.Controls.Add(this.lblEffectiveClockRate); + this.flowLayoutPanel2.Controls.Add(this.lblEffectiveClockRateValue); + this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel2.Location = new System.Drawing.Point(0, 118); + this.flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel2.Name = "flowLayoutPanel2"; + this.flowLayoutPanel2.Size = new System.Drawing.Size(519, 17); + this.flowLayoutPanel2.TabIndex = 8; + // + // lblEffectiveClockRate + // + this.lblEffectiveClockRate.AutoSize = true; + this.lblEffectiveClockRate.Location = new System.Drawing.Point(3, 0); + this.lblEffectiveClockRate.Name = "lblEffectiveClockRate"; + this.lblEffectiveClockRate.Size = new System.Drawing.Size(146, 13); + this.lblEffectiveClockRate.TabIndex = 0; + this.lblEffectiveClockRate.Text = "Effective Clock Rate (NTSC):"; + // + // lblEffectiveClockRateValue + // + this.lblEffectiveClockRateValue.AutoSize = true; + this.lblEffectiveClockRateValue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblEffectiveClockRateValue.Location = new System.Drawing.Point(155, 0); + this.lblEffectiveClockRateValue.Name = "lblEffectiveClockRateValue"; + this.lblEffectiveClockRateValue.Size = new System.Drawing.Size(37, 13); + this.lblEffectiveClockRateValue.TabIndex = 1; + this.lblEffectiveClockRateValue.Text = "100%"; + // + // flowLayoutPanel7 + // + this.flowLayoutPanel7.Controls.Add(this.chkShowLagCounter); + this.flowLayoutPanel7.Controls.Add(this.btnResetLagCounter); + this.flowLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel7.Location = new System.Drawing.Point(0, 172); + this.flowLayoutPanel7.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel7.Name = "flowLayoutPanel7"; + this.flowLayoutPanel7.Size = new System.Drawing.Size(519, 204); + this.flowLayoutPanel7.TabIndex = 12; + // + // chkShowLagCounter + // + this.chkShowLagCounter.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.chkShowLagCounter.AutoSize = true; + this.chkShowLagCounter.Location = new System.Drawing.Point(3, 6); + this.chkShowLagCounter.Name = "chkShowLagCounter"; + this.chkShowLagCounter.Size = new System.Drawing.Size(114, 17); + this.chkShowLagCounter.TabIndex = 13; + this.chkShowLagCounter.Text = "Show Lag Counter"; + this.chkShowLagCounter.UseVisualStyleBackColor = true; + // + // btnResetLagCounter + // + this.btnResetLagCounter.AutoSize = true; + this.btnResetLagCounter.Location = new System.Drawing.Point(123, 3); + this.btnResetLagCounter.Name = "btnResetLagCounter"; + this.btnResetLagCounter.Size = new System.Drawing.Size(85, 23); + this.btnResetLagCounter.TabIndex = 14; + this.btnResetLagCounter.Text = "Reset Counter"; + this.btnResetLagCounter.UseVisualStyleBackColor = true; + this.btnResetLagCounter.Click += new System.EventHandler(this.btnResetLagCounter_Click); + // + // tmrUpdateClockRate + // + this.tmrUpdateClockRate.Enabled = true; + this.tmrUpdateClockRate.Tick += new System.EventHandler(this.tmrUpdateClockRate_Tick); + // + // frmEmulationConfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(533, 437); + this.Controls.Add(this.tabMain); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(503, 367); + this.Name = "frmEmulationConfig"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Emulation Settings"; + this.Controls.SetChildIndex(this.baseConfigPanel, 0); + this.Controls.SetChildIndex(this.tabMain, 0); + this.tabMain.ResumeLayout(false); + this.tpgGeneral.ResumeLayout(false); + this.tpgGeneral.PerformLayout(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.flowLayoutPanel5.ResumeLayout(false); + this.flowLayoutPanel5.PerformLayout(); + this.flowLayoutPanel9.ResumeLayout(false); + this.flowLayoutPanel9.PerformLayout(); + this.flowLayoutPanel6.ResumeLayout(false); + this.flowLayoutPanel6.PerformLayout(); + this.flowLayoutPanel10.ResumeLayout(false); + this.flowLayoutPanel10.PerformLayout(); + this.tpgAdvanced.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tpgOverclocking.ResumeLayout(false); + this.tpgOverclocking.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picHint)).EndInit(); + this.tableLayoutPanel3.ResumeLayout(false); + this.flowLayoutPanel4.ResumeLayout(false); + this.flowLayoutPanel4.PerformLayout(); + this.flowLayoutPanel3.ResumeLayout(false); + this.flowLayoutPanel3.PerformLayout(); + this.grpPpuTiming.ResumeLayout(false); + this.tableLayoutPanel5.ResumeLayout(false); + this.tableLayoutPanel5.PerformLayout(); + this.flowLayoutPanel2.ResumeLayout(false); + this.flowLayoutPanel2.PerformLayout(); + this.flowLayoutPanel7.ResumeLayout(false); + this.flowLayoutPanel7.PerformLayout(); + this.ResumeLayout(false); } @@ -1092,5 +1114,6 @@ namespace Mesen.GUI.Forms.Config private System.Windows.Forms.Label lblRunAheadFrames; private System.Windows.Forms.Label lblRunAhead; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private ctrlRiskyOption chkEnablePpuOamRowCorruption; } } \ No newline at end of file diff --git a/GUI.NET/Forms/Config/frmEmulationConfig.cs b/GUI.NET/Forms/Config/frmEmulationConfig.cs index 87401eb5..f869d2ed 100644 --- a/GUI.NET/Forms/Config/frmEmulationConfig.cs +++ b/GUI.NET/Forms/Config/frmEmulationConfig.cs @@ -42,6 +42,7 @@ namespace Mesen.GUI.Forms.Config AddBinding("RandomizeCpuPpuAlignment", chkRandomizeCpuPpuAlignment); AddBinding("EnablePpu2006ScrollGlitch", chkEnablePpu2006ScrollGlitch); AddBinding("EnablePpu2000ScrollGlitch", chkEnablePpu2000ScrollGlitch); + AddBinding("EnablePpuOamRowCorruption", chkEnablePpuOamRowCorruption); AddBinding("PpuExtraScanlinesBeforeNmi", nudExtraScanlinesBeforeNmi); AddBinding("PpuExtraScanlinesAfterNmi", nudExtraScanlinesAfterNmi); diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index 6fb38241..23c0f094 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -1619,6 +1619,8 @@ namespace Mesen.GUI PauseOnMovieEnd = 0x0100, + EnablePpuOamRowCorruption = 0x0200, + AllowBackgroundInput = 0x0400, ReduceSoundInBackground = 0x0800, MuteSoundInBackground = 0x1000,