diff --git a/Core/AXROM.h b/Core/AXROM.h index 88cf2a3e..0b1d09e7 100644 --- a/Core/AXROM.h +++ b/Core/AXROM.h @@ -10,7 +10,7 @@ class AXROM : public BaseMapper void InitMapper() override { - SelectPRGPage(0, 0); + SelectPRGPage(0, GetPowerOnByte()); SelectCHRPage(0, 0); } diff --git a/Core/BaseMapper.cpp b/Core/BaseMapper.cpp index d10ad852..cc65f54d 100644 --- a/Core/BaseMapper.cpp +++ b/Core/BaseMapper.cpp @@ -330,6 +330,18 @@ void BaseMapper::InitializeRam(void* data, uint32_t length) break; } } + +uint8_t BaseMapper::GetPowerOnByte(uint8_t defaultValue) +{ + if(EmulationSettings::CheckFlag(EmulationFlags::RandomizeMapperPowerOnState)) { + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution<> dist(0, 255); + return dist(mt); + } else { + return defaultValue; + } +} bool BaseMapper::HasBattery() { diff --git a/Core/BaseMapper.h b/Core/BaseMapper.h index 40f6f11b..164ec9b2 100644 --- a/Core/BaseMapper.h +++ b/Core/BaseMapper.h @@ -134,6 +134,8 @@ protected: uint32_t GetPRGPageCount(); uint32_t GetCHRPageCount(); + uint8_t GetPowerOnByte(uint8_t defaultValue = 0); + void RestoreOriginalPrgRam(); void InitializeChrRam(int32_t chrRamSize = -1); diff --git a/Core/BnRom.h b/Core/BnRom.h index de4cef41..bc26ecd7 100644 --- a/Core/BnRom.h +++ b/Core/BnRom.h @@ -10,7 +10,7 @@ protected: void InitMapper() override { - SelectPRGPage(0, 0); + SelectPRGPage(0, GetPowerOnByte()); SelectCHRPage(0, 0); } diff --git a/Core/CNROM.h b/Core/CNROM.h index 7ee55e8d..586df41b 100644 --- a/Core/CNROM.h +++ b/Core/CNROM.h @@ -14,7 +14,7 @@ protected: void InitMapper() override { SelectPRGPage(0, 0); - SelectCHRPage(0, 0); + SelectCHRPage(0, GetPowerOnByte()); //Needed for mighty bomb jack (j) _vramOpenBusValue = 0xFF; diff --git a/Core/Cheapocabra.h b/Core/Cheapocabra.h index cc2dee4a..d09a1676 100644 --- a/Core/Cheapocabra.h +++ b/Core/Cheapocabra.h @@ -24,7 +24,7 @@ protected: BaseMapper::InitializeRam(_extraNametables[i], 0x400); AddNametable(4 + i, _extraNametables[i]); } - _reg = 0; + _reg = GetPowerOnByte(); UpdateState(); } diff --git a/Core/EmulationSettings.h b/Core/EmulationSettings.h index 045359f7..2e628a32 100644 --- a/Core/EmulationSettings.h +++ b/Core/EmulationSettings.h @@ -80,6 +80,8 @@ enum EmulationFlags : uint64_t AllowMismatchingSaveState = 0x10000000000000, + RandomizeMapperPowerOnState = 0x20000000000000, + ForceMaxSpeed = 0x4000000000000000, ConsoleMode = 0x8000000000000000, }; diff --git a/Core/GxRom.h b/Core/GxRom.h index ecdbed52..e7d4528a 100644 --- a/Core/GxRom.h +++ b/Core/GxRom.h @@ -10,8 +10,8 @@ class GxRom : public BaseMapper void InitMapper() override { - SelectPRGPage(0, 0); - SelectCHRPage(0, 0); + SelectPRGPage(0, GetPowerOnByte() & 0x03); + SelectCHRPage(0, GetPowerOnByte() & 0x03); } void WriteRegister(uint16_t addr, uint8_t value) override diff --git a/Core/JalecoJf16.h b/Core/JalecoJf16.h index 2cba6e87..96125f4c 100644 --- a/Core/JalecoJf16.h +++ b/Core/JalecoJf16.h @@ -11,10 +11,10 @@ protected: void InitMapper() override { - SelectPRGPage(0, 0); + SelectPRGPage(0, GetPowerOnByte()); SelectPRGPage(1, -1); - SelectCHRPage(0, 0); + SelectCHRPage(0, GetPowerOnByte()); } void WriteRegister(uint16_t addr, uint8_t value) override diff --git a/Core/MMC1.h b/Core/MMC1.h index e25f57b6..0c91d6a7 100644 --- a/Core/MMC1.h +++ b/Core/MMC1.h @@ -179,9 +179,9 @@ class MMC1 : public BaseMapper virtual void InitMapper() override { - _state.Reg8000 = 0x0C; //On powerup: bits 2,3 of $8000 are set (this ensures the $8000 is bank 0, and $C000 is the last bank - needed for SEROM/SHROM/SH1ROM which do no support banking) - _state.RegA000 = 0x00; - _state.RegC000 = 0x00; + _state.Reg8000 = GetPowerOnByte(0x0C); //On powerup: bits 2,3 of $8000 are set (this ensures the $8000 is bank 0, and $C000 is the last bank - needed for SEROM/SHROM/SH1ROM which do no support banking) + _state.RegA000 = GetPowerOnByte(); + _state.RegC000 = GetPowerOnByte(); _state.RegE000 = (_databaseInfo.Board.find("MMC1B") != string::npos ? 0x10 : 0x00); //WRAM Disable: enabled by default for MMC1B //"MMC1A: PRG RAM is always enabled" - Normally these roms should be classified as mapper 155 diff --git a/Core/MMC2.h b/Core/MMC2.h index 6a560d12..6334cf4c 100644 --- a/Core/MMC2.h +++ b/Core/MMC2.h @@ -29,18 +29,15 @@ class MMC2 : public BaseMapper { _leftLatch = 1; _rightLatch = 1; - _leftChrPage[0] = 0; - _leftChrPage[1] = 0; - _rightChrPage[0] = 0; - _rightChrPage[1] = 0; + _leftChrPage[0] = GetPowerOnByte() & 0x1F; + _leftChrPage[1] = GetPowerOnByte() & 0x1F; + _rightChrPage[0] = GetPowerOnByte() & 0x1F; + _rightChrPage[1] = GetPowerOnByte() & 0x1F; _needChrUpdate = false; - SelectPRGPage(0, 0); SelectPRGPage(1, -3); SelectPRGPage(2, -2); SelectPRGPage(3, -1); - SelectCHRPage(0, 0); - SelectCHRPage(0, 1); } void StreamState(bool saving) override diff --git a/Core/MMC3.h b/Core/MMC3.h index 7a06b1a2..90ae50f3 100644 --- a/Core/MMC3.h +++ b/Core/MMC3.h @@ -68,21 +68,26 @@ class MMC3 : public BaseMapper void ResetMmc3() { - _state.Reg8000 = 0; - _state.RegA000 = 0; - _state.RegA001 = 0; - _chrMode = 0; - _prgMode = 0; - _currentRegister = 0; - memset(_registers, 0, sizeof(_registers)); + _state.Reg8000 = GetPowerOnByte(); + _state.RegA000 = GetPowerOnByte(); + _state.RegA001 = GetPowerOnByte(); + + _chrMode = GetPowerOnByte() & 0x01; + _prgMode = GetPowerOnByte() & 0x01; + + _currentRegister = GetPowerOnByte(); + + for(int i = 0; i < sizeof(_registers); i++) { + _registers[i] = GetPowerOnByte(); + } - _irqCounter = 0; - _irqReloadValue = 0; - _irqReload = false; - _irqEnabled = false; + _irqCounter = GetPowerOnByte(); + _irqReloadValue = GetPowerOnByte(); + _irqReload = GetPowerOnByte() & 0x01; + _irqEnabled = GetPowerOnByte() & 0x01; - _wramEnabled = false; - _wramWriteProtected = false; + _wramEnabled = GetPowerOnByte() & 0x01; + _wramWriteProtected = GetPowerOnByte() & 0x01; _needIrq = false; } diff --git a/Core/MMC4.h b/Core/MMC4.h index 92585d17..963189fe 100644 --- a/Core/MMC4.h +++ b/Core/MMC4.h @@ -12,15 +12,13 @@ class MMC4 : public MMC2 { _leftLatch = 1; _rightLatch = 1; - _leftChrPage[0] = 0; - _leftChrPage[1] = 0; - _rightChrPage[0] = 0; - _rightChrPage[1] = 0; + _leftChrPage[0] = GetPowerOnByte() & 0x1F; + _leftChrPage[1] = GetPowerOnByte() & 0x1F; + _rightChrPage[0] = GetPowerOnByte() & 0x1F; + _rightChrPage[1] = GetPowerOnByte() & 0x1F; + _needChrUpdate = false; - SelectPRGPage(0, 0); SelectPRGPage(1, -1); - SelectCHRPage(0, 0); - SelectCHRPage(0, 1); } public: diff --git a/Core/UnRom_180.h b/Core/UnRom_180.h index ccf0d733..c47c7ec4 100644 --- a/Core/UnRom_180.h +++ b/Core/UnRom_180.h @@ -11,8 +11,6 @@ protected: void InitMapper() override { SelectPRGPage(0, 0); - SelectPRGPage(1, -1); - SelectCHRPage(0, 0); } diff --git a/Core/VRC2_4.h b/Core/VRC2_4.h index 123e9dcd..0b18f042 100644 --- a/Core/VRC2_4.h +++ b/Core/VRC2_4.h @@ -85,12 +85,15 @@ class VRC2_4 : public BaseMapper { DetectVariant(); - _prgMode = 0; - _prgReg0 = 0; - _prgReg1 = 0; + _prgMode = GetPowerOnByte() & 0x01; + _prgReg0 = GetPowerOnByte() & 0x1F; + _prgReg1 = GetPowerOnByte() & 0x1F; _hasIRQ = false; - memset(_loCHRRegs, 0, sizeof(_loCHRRegs)); - memset(_hiCHRRegs, 0, sizeof(_hiCHRRegs)); + + for(int i = 0; i < 8; i++) { + _loCHRRegs[i] = GetPowerOnByte() & 0x0F; + _hiCHRRegs[i] = GetPowerOnByte() & 0x1F; + } UpdateState(); } diff --git a/GUI.NET/Config/EmulationInfo.cs b/GUI.NET/Config/EmulationInfo.cs index c9dcfcd8..3452e343 100644 --- a/GUI.NET/Config/EmulationInfo.cs +++ b/GUI.NET/Config/EmulationInfo.cs @@ -23,6 +23,7 @@ namespace Mesen.GUI.Config public bool DisablePpuReset = false; public bool EnableOamDecay = false; public bool UseNes101Hvc101Behavior = false; + public bool EnableMapperRandomPowerOnState = false; public bool UseAlternativeMmc3Irq = false; @@ -62,6 +63,7 @@ namespace Mesen.GUI.Config InteropEmu.SetFlag(EmulationFlags.DisablePpuReset, emulationInfo.DisablePpuReset); InteropEmu.SetFlag(EmulationFlags.EnableOamDecay, emulationInfo.EnableOamDecay); InteropEmu.SetFlag(EmulationFlags.UseNes101Hvc101Behavior, emulationInfo.UseNes101Hvc101Behavior); + InteropEmu.SetFlag(EmulationFlags.RandomizeMapperPowerOnState, emulationInfo.EnableMapperRandomPowerOnState); InteropEmu.SetOverclockRate(emulationInfo.OverclockRate, emulationInfo.OverclockAdjustApu); InteropEmu.SetPpuNmiConfig(emulationInfo.PpuExtraScanlinesBeforeNmi, emulationInfo.PpuExtraScanlinesAfterNmi); diff --git a/GUI.NET/Dependencies/resources.ca.xml b/GUI.NET/Dependencies/resources.ca.xml index 296b62fa..f4c3d353 100644 --- a/GUI.NET/Dependencies/resources.ca.xml +++ b/GUI.NET/Dependencies/resources.ca.xml @@ -296,7 +296,8 @@ Impedeix la lectura de la paleta de la PPU No reestableixis la PPU al reiniciar la consola (comportament de la Famicom) Simula el comportament de la NES/HVC-101 (Top-loader / AV Famicom) - + Randomize power-on state for mappers + Forçament Forçament de CPU ADVERTÈNCIA: El forçament de la CPU afecta a l'estabilitat de la emulació i pot causar fallades en alguns jocs. diff --git a/GUI.NET/Dependencies/resources.es.xml b/GUI.NET/Dependencies/resources.es.xml index 2c7e64e5..55c9b1e1 100644 --- a/GUI.NET/Dependencies/resources.es.xml +++ b/GUI.NET/Dependencies/resources.es.xml @@ -295,7 +295,8 @@ Impedir la reproducción de la paleta de la PPU No resetear la PPU al resetear la consola (Famicom) Simular el comportamiento de NES/HVC-101 (Top-loader / AV Famicom) - + Randomize power-on state for mappers + Overclocking Overclocking de CPU ATENCIÓN: ¡El overclocking afecta a la estabilidad de la emulación y puede bloquear algunos juegos! diff --git a/GUI.NET/Dependencies/resources.fr.xml b/GUI.NET/Dependencies/resources.fr.xml index 8b759434..409ac59d 100644 --- a/GUI.NET/Dependencies/resources.fr.xml +++ b/GUI.NET/Dependencies/resources.fr.xml @@ -295,6 +295,7 @@ Empêcher la lecture de la palette du PPU Ne pas faire un reset du PPU lors du reset de la console (Famicom) Simuler le comportement du NES/HVC-101 (Top Loader / AV Famicom) + Démarrer le jeu avec le mapper dans un état aléatoire État initial de la mémoire au démarrage : diff --git a/GUI.NET/Dependencies/resources.ja.xml b/GUI.NET/Dependencies/resources.ja.xml index 9dcd7863..85fba237 100644 --- a/GUI.NET/Dependencies/resources.ja.xml +++ b/GUI.NET/Dependencies/resources.ja.xml @@ -296,6 +296,7 @@ PPUのパレットラムを読み込み不可能にする ゲーム機をリセットする時に、PPUをリセットしない (ファミコン同様) AV仕様ファミコン(HVC-101とNES-101)の仕様を使う + ランダムな状態でゲームを起動する 起動時のメモリの状態 : diff --git a/GUI.NET/Dependencies/resources.pt.xml b/GUI.NET/Dependencies/resources.pt.xml index 21f7ee50..d22b7f19 100644 --- a/GUI.NET/Dependencies/resources.pt.xml +++ b/GUI.NET/Dependencies/resources.pt.xml @@ -295,6 +295,7 @@ Desativar leitura da paleta da PPU Não reiniciar a PPU ao reiniciar o console (Comportamento do Famicom) Utilizar comportamento do NES/HVC-101 (Top-loader / AV Famicom) + Randomize power-on state for mappers Overclock Overclock da CPU diff --git a/GUI.NET/Dependencies/resources.ru.xml b/GUI.NET/Dependencies/resources.ru.xml index 57183077..9f29fe83 100644 --- a/GUI.NET/Dependencies/resources.ru.xml +++ b/GUI.NET/Dependencies/resources.ru.xml @@ -295,6 +295,7 @@ Disable PPU palette reads Do not reset PPU when resetting console (Famicom behavior) Use NES/HVC-101 (Top-loader / AV Famicom) behavior + Randomize power-on state for mappers Разгон Разгон CPU diff --git a/GUI.NET/Dependencies/resources.uk.xml b/GUI.NET/Dependencies/resources.uk.xml index 3bc01b9c..a2ff1955 100644 --- a/GUI.NET/Dependencies/resources.uk.xml +++ b/GUI.NET/Dependencies/resources.uk.xml @@ -295,6 +295,7 @@ Вiдключити PPU читання палiтри Не скидувати PPU при перезавантаженні консолі (Поведiнка Famicom) Використовувати NES/HVC-101 (Top-loader / AV Famicom) поведінку + Randomize power-on state for mappers Розгін Розгін CPU diff --git a/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs b/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs index 27f5c0b0..4c32ae99 100644 --- a/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs +++ b/GUI.NET/Forms/Config/frmEmulationConfig.Designer.cs @@ -88,6 +88,7 @@ namespace Mesen.GUI.Forms.Config this.chkShowLagCounter = new System.Windows.Forms.CheckBox(); this.btnResetLagCounter = new System.Windows.Forms.Button(); this.tmrUpdateClockRate = new System.Windows.Forms.Timer(this.components); + this.chkMapperRandomPowerOnState = new Mesen.GUI.Controls.ctrlRiskyOption(); this.tabMain.SuspendLayout(); this.tpgGeneral.SuspendLayout(); this.tableLayoutPanel4.SuspendLayout(); @@ -111,7 +112,7 @@ namespace Mesen.GUI.Forms.Config // // baseConfigPanel // - this.baseConfigPanel.Location = new System.Drawing.Point(0, 299); + this.baseConfigPanel.Location = new System.Drawing.Point(0, 321); this.baseConfigPanel.Size = new System.Drawing.Size(533, 29); // // tabMain @@ -123,7 +124,7 @@ namespace Mesen.GUI.Forms.Config 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, 299); + this.tabMain.Size = new System.Drawing.Size(533, 321); this.tabMain.TabIndex = 2; // // tpgGeneral @@ -349,7 +350,7 @@ namespace Mesen.GUI.Forms.Config 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, 273); + this.tpgAdvanced.Size = new System.Drawing.Size(525, 295); this.tpgAdvanced.TabIndex = 1; this.tpgAdvanced.Text = "Advanced"; this.tpgAdvanced.UseVisualStyleBackColor = true; @@ -358,9 +359,10 @@ namespace Mesen.GUI.Forms.Config // this.tableLayoutPanel1.ColumnCount = 1; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.chkMapperRandomPowerOnState, 0, 10); this.tableLayoutPanel1.Controls.Add(this.chkEnableOamDecay, 0, 4); this.tableLayoutPanel1.Controls.Add(this.chkRemoveSpriteLimit, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel8, 0, 10); + this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel8, 0, 11); this.tableLayoutPanel1.Controls.Add(this.chkDisablePaletteRead, 0, 8); this.tableLayoutPanel1.Controls.Add(this.chkDisableOamAddrBug, 0, 7); this.tableLayoutPanel1.Controls.Add(this.chkDisablePpuReset, 0, 5); @@ -372,7 +374,8 @@ namespace Mesen.GUI.Forms.Config this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 12; + this.tableLayoutPanel1.RowCount = 13; + 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()); @@ -385,7 +388,7 @@ namespace Mesen.GUI.Forms.Config 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, 267); + this.tableLayoutPanel1.Size = new System.Drawing.Size(519, 289); this.tableLayoutPanel1.TabIndex = 0; // // chkEnableOamDecay @@ -415,7 +418,7 @@ namespace Mesen.GUI.Forms.Config this.flowLayoutPanel8.Controls.Add(this.lblRamPowerOnState); this.flowLayoutPanel8.Controls.Add(this.cboRamPowerOnState); this.flowLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel8.Location = new System.Drawing.Point(0, 228); + this.flowLayoutPanel8.Location = new System.Drawing.Point(0, 253); this.flowLayoutPanel8.Margin = new System.Windows.Forms.Padding(0); this.flowLayoutPanel8.Name = "flowLayoutPanel8"; this.flowLayoutPanel8.Size = new System.Drawing.Size(519, 27); @@ -500,9 +503,9 @@ namespace Mesen.GUI.Forms.Config this.chkAllowInvalidInput.Checked = false; this.chkAllowInvalidInput.Dock = System.Windows.Forms.DockStyle.Fill; this.chkAllowInvalidInput.Location = new System.Drawing.Point(0, 207); - this.chkAllowInvalidInput.MinimumSize = new System.Drawing.Size(0, 21); + this.chkAllowInvalidInput.MinimumSize = new System.Drawing.Size(0, 23); this.chkAllowInvalidInput.Name = "chkAllowInvalidInput"; - this.chkAllowInvalidInput.Size = new System.Drawing.Size(519, 21); + this.chkAllowInvalidInput.Size = new System.Drawing.Size(519, 23); this.chkAllowInvalidInput.TabIndex = 1; this.chkAllowInvalidInput.Text = "Allow invalid input (e.g Down + Up or Left + Right at the same time)"; // @@ -911,12 +914,24 @@ namespace Mesen.GUI.Forms.Config this.tmrUpdateClockRate.Enabled = true; this.tmrUpdateClockRate.Tick += new System.EventHandler(this.tmrUpdateClockRate_Tick); // + // chkMapperRandomPowerOnState + // + this.chkMapperRandomPowerOnState.AutoSize = true; + this.chkMapperRandomPowerOnState.Checked = false; + this.chkMapperRandomPowerOnState.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkMapperRandomPowerOnState.Location = new System.Drawing.Point(0, 230); + this.chkMapperRandomPowerOnState.MinimumSize = new System.Drawing.Size(0, 23); + this.chkMapperRandomPowerOnState.Name = "chkMapperRandomPowerOnState"; + this.chkMapperRandomPowerOnState.Size = new System.Drawing.Size(519, 23); + this.chkMapperRandomPowerOnState.TabIndex = 11; + this.chkMapperRandomPowerOnState.Text = "Randomize power-on state for mappers"; + // // 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, 328); + this.ClientSize = new System.Drawing.Size(533, 350); this.Controls.Add(this.tabMain); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; @@ -1023,5 +1038,6 @@ namespace Mesen.GUI.Forms.Config private MesenNumericUpDown nudRewindSpeed; private System.Windows.Forms.Label lblRewindSpeedHint; private System.Windows.Forms.CheckBox chkAdaptiveSpriteLimit; + private ctrlRiskyOption chkMapperRandomPowerOnState; } } \ No newline at end of file diff --git a/GUI.NET/Forms/Config/frmEmulationConfig.cs b/GUI.NET/Forms/Config/frmEmulationConfig.cs index 921e1b13..c2121404 100644 --- a/GUI.NET/Forms/Config/frmEmulationConfig.cs +++ b/GUI.NET/Forms/Config/frmEmulationConfig.cs @@ -38,6 +38,7 @@ namespace Mesen.GUI.Forms.Config AddBinding("DisablePpuReset", chkDisablePpuReset); AddBinding("EnableOamDecay", chkEnableOamDecay); AddBinding("UseNes101Hvc101Behavior", chkUseNes101Hvc101Behavior); + AddBinding("EnableMapperRandomPowerOnState", chkMapperRandomPowerOnState); AddBinding("OverclockRate", nudOverclockRate); AddBinding("OverclockAdjustApu", chkOverclockAdjustApu); diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index 8ac49267..4e49e19a 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -1540,6 +1540,8 @@ namespace Mesen.GUI AllowMismatchingSaveStates = 0x10000000000000, + RandomizeMapperPowerOnState = 0x20000000000000, + ForceMaxSpeed = 0x4000000000000000, ConsoleMode = 0x8000000000000000, }