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,
}