diff --git a/BizHawk.Client.EmuHawk/MainForm.Designer.cs b/BizHawk.Client.EmuHawk/MainForm.Designer.cs
index e1ccf042c5..e38c88bcb1 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Designer.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Designer.cs
@@ -372,6 +372,7 @@
this.ClearSRAMContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ShowMenuContextMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
this.ShowMenuContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.N64ExpansionSlotMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.MainformMenu.SuspendLayout();
this.MainStatusBar.SuspendLayout();
this.MainFormContextMenu.SuspendLayout();
@@ -2506,7 +2507,8 @@
this.N64ControllerSettingsMenuItem,
this.toolStripSeparator23,
this.N64CircularAnalogRangeMenuItem,
- this.MupenStyleLagMenuItem});
+ this.MupenStyleLagMenuItem,
+ this.N64ExpansionSlotMenuItem});
this.N64SubMenu.Name = "N64SubMenu";
this.N64SubMenu.Size = new System.Drawing.Size(40, 19);
this.N64SubMenu.Text = "N64";
@@ -3270,6 +3272,13 @@
this.ShowMenuContextMenuItem.Text = "Show Menu";
this.ShowMenuContextMenuItem.Click += new System.EventHandler(this.ShowMenuContextMenuItem_Click);
//
+ // N64ExpansionSlotMenuItem
+ //
+ this.N64ExpansionSlotMenuItem.Name = "N64ExpansionSlotMenuItem";
+ this.N64ExpansionSlotMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.N64ExpansionSlotMenuItem.Text = "&Use Expansion Slot";
+ this.N64ExpansionSlotMenuItem.Click += new System.EventHandler(this.N64ExpansionSlotMenuItem_Click);
+ //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
@@ -3653,6 +3662,7 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator33;
private System.Windows.Forms.ToolStripMenuItem GBAcoresettingsToolStripMenuItem1;
private System.Windows.Forms.ToolStripStatusLabel LinkConnectStatusBarButton;
+ private System.Windows.Forms.ToolStripMenuItem N64ExpansionSlotMenuItem;
}
}
diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs
index 21f273778d..96cc333add 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Events.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs
@@ -1789,12 +1789,16 @@ namespace BizHawk.Client.EmuHawk
{
N64PluginSettingsMenuItem.Enabled =
N64ControllerSettingsMenuItem.Enabled =
+ N64ExpansionSlotMenuItem.Enabled =
!Global.MovieSession.Movie.IsActive;
N64CircularAnalogRangeMenuItem.Checked = Global.Config.N64UseCircularAnalogConstraint;
var s = (N64Settings)Global.Emulator.GetSettings();
MupenStyleLagMenuItem.Checked = s.UseMupenStyleLag;
+
+ var ss = (N64SyncSettings)Global.Emulator.GetSyncSettings();
+ N64ExpansionSlotMenuItem.Checked = ss.DisableExpansionSlot;
}
private void N64PluginSettingsMenuItem_Click(object sender, EventArgs e)
@@ -1841,6 +1845,14 @@ namespace BizHawk.Client.EmuHawk
Global.Emulator.PutSettings(s);
}
+ private void N64ExpansionSlotMenuItem_Click(object sender, EventArgs e)
+ {
+ var ss = (N64SyncSettings)Global.Emulator.GetSyncSettings();
+ ss.DisableExpansionSlot ^= true;
+ Global.Emulator.PutSyncSettings(ss);
+ FlagNeedsReboot();
+ }
+
#endregion
#region Saturn
diff --git a/BizHawk.Client.EmuHawk/MainForm.resx b/BizHawk.Client.EmuHawk/MainForm.resx
index af2c0026f0..56504f9c6e 100644
--- a/BizHawk.Client.EmuHawk/MainForm.resx
+++ b/BizHawk.Client.EmuHawk/MainForm.resx
@@ -121,28 +121,6 @@
17, 17
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NC
- NwAAAaRJREFUOE+dk0FLAlEUhd9/kgwFMUQMhMEIhJLIhVCRDIRhAznEIEYtlBiQYApBSGQw2xhBlhLE
- zCLQTa3bt2nd8tR5pFTaLLxwuJd7vgNv3syIv+Xz+fA9TpSX96s0TZsAp+0862fAM3xpN5DNZpHL5VAo
- FFAqlVCpVFCtVsEgxZk7emTIMsOsyGQyGAwGM4lZkU6n4bouVg4aCO1cQDGusXbyiA1rIMWZO3pkyEYi
- EdmZFalUCr1eD3Nb5/jiPUWGrOM4sjMrkskkOp0O5rdrOLp7h+l8TBU9MmR5AnZmRSKRQLPZRFCtQ62/
- YPNsCK31iuLNmxRn7uiRIdvtdmVnVsTjcViWJZ9x3XQQ1VpTRY8MWZ6AnVkRjUZRLpexsNtE5vQJq+WH
- qaJHhmy73ZadWREOh2EYBiJ5e3zz/4kM2ZGYFcFgEPl8Hkt7NSzuX8lXtnx4i+TxvRRn7uiRITsSs8Lv
- 90NVVei6DtM0Yds2+v3++GPhzB09MmRHYlYUDV0OgUAAoVBIXlAsFpMXpCiKFGfu6JEhywyz8n94HrqY
- RUII8QnYkDBq2GMFXwAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAAEEoAABBKATXIp58AAABwSURBVDhPzZDhCgAhCIN99HvzTgNj6k6i/lzwaW3DKJFH
- xhVMtMU6xYraIDR4BqlCQ87OfBEacnbmtfzsCYr/eu4UK+EJH2hyUjw82CAkeDsDjrDit/nNjofyOUDF
- BA4ow9YGzBIimaWheQQVt5HxAoOkokovUz91AAAAAElFTkSuQmCC
-
-
iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@@ -537,6 +515,28 @@
tm3H9wcOHPx9Vlb2B0VFRdfKysqOFxQUHE1LS9sBuEGo57ZxcXHj8Bp6BAUF/Ve8nL/XXtXr8Tc5EJn/
GeXlp01NTb1OnTo3vKnpvEVDw8n5ubkVgXH7EkK2bNm6bfXqtduWLl25ZfnytQGbN2+23rdv30jtR7PS
X0fw6/F6vB6vx+vxerwer8fr8Xq8Hq/H6/HvY/zd3/1PwYVaiXD0CjUAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NC
+ NwAAAaRJREFUOE+dk0FLAlEUhd9/kgwFMUQMhMEIhJLIhVCRDIRhAznEIEYtlBiQYApBSGQw2xhBlhLE
+ zCLQTa3bt2nd8tR5pFTaLLxwuJd7vgNv3syIv+Xz+fA9TpSX96s0TZsAp+0862fAM3xpN5DNZpHL5VAo
+ FFAqlVCpVFCtVsEgxZk7emTIMsOsyGQyGAwGM4lZkU6n4bouVg4aCO1cQDGusXbyiA1rIMWZO3pkyEYi
+ EdmZFalUCr1eD3Nb5/jiPUWGrOM4sjMrkskkOp0O5rdrOLp7h+l8TBU9MmR5AnZmRSKRQLPZRFCtQ62/
+ YPNsCK31iuLNmxRn7uiRIdvtdmVnVsTjcViWJZ9x3XQQ1VpTRY8MWZ6AnVkRjUZRLpexsNtE5vQJq+WH
+ qaJHhmy73ZadWREOh2EYBiJ5e3zz/4kM2ZGYFcFgEPl8Hkt7NSzuX8lXtnx4i+TxvRRn7uiRITsSs8Lv
+ 90NVVei6DtM0Yds2+v3++GPhzB09MmRHYlYUDV0OgUAAoVBIXlAsFpMXpCiKFGfu6JEhywyz8n94HrqY
+ RUII8QnYkDBq2GMFXwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEEoAABBKATXIp58AAABwSURBVDhPzZDhCgAhCIN99HvzTgNj6k6i/lzwaW3DKJFH
+ xhVMtMU6xYraIDR4BqlCQ87OfBEacnbmtfzsCYr/eu4UK+EJH2hyUjw82CAkeDsDjrDit/nNjofyOUDF
+ BA4ow9YGzBIimaWheQQVt5HxAoOkokovUz91AAAAAElFTkSuQmCC
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs
index c94f0ba666..c1e4ad7c6f 100644
--- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs
@@ -106,7 +106,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
//not sure why this works... if we put the plugin initializations in here, we get deadlocks in some SDL initialization. doesnt make sense to me...
RunThreadAction(() =>
{
- api = new mupen64plusApi(this, rom, videosettings, SaveType, (int)coreType);
+ api = new mupen64plusApi(this, rom, videosettings, SaveType, (int)coreType, _syncSettings.DisableExpansionSlot);
});
// Order is important because the register with the mupen core
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.cs
index 554262b5e5..b280c0fab9 100644
--- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64SyncSettings.cs
@@ -14,6 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
VideoPlugin = PluginType.Rice;
Core = CoreType.Dynarec;
Rsp = RspType.Rsp_Hle;
+ DisableExpansionSlot = true;
Controllers = new []
{
@@ -33,6 +34,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
public RspType Rsp { get; set; }
public PluginType VideoPlugin { get; set; }
+ public bool DisableExpansionSlot { get; set; }
+
public N64ControllerSettings[] Controllers { get; private set; }
public N64RicePluginSettings RicePlugin { get; private set; }
@@ -47,6 +50,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
Core = Core,
Rsp = Rsp,
VideoPlugin = VideoPlugin,
+ DisableExpansionSlot = DisableExpansionSlot,
RicePlugin = RicePlugin.Clone(),
GlidePlugin = GlidePlugin.Clone(),
Glide64mk2Plugin = Glide64mk2Plugin.Clone(),
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs
index c6506ccc10..25691d820c 100644
--- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs
@@ -348,7 +348,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi
// DLL handles
public IntPtr CoreDll { get; private set; }
- public mupen64plusApi(N64 bizhawkCore, byte[] rom, VideoPluginSettings video_settings, int SaveType, int CoreType)
+ public mupen64plusApi(N64 bizhawkCore, byte[] rom, VideoPluginSettings video_settings, int SaveType, int CoreType, bool DisableExpansionSlot)
{
// There can only be one core (otherwise breaks mupen64plus)
if (AttachedCore != null)
@@ -368,6 +368,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi
m64p_error result = m64pCoreStartup(0x20001, "", "", "Core",
null, "", IntPtr.Zero);
+ // Set the savetype if needed
+ if (DisableExpansionSlot)
+ {
+ IntPtr core_section = IntPtr.Zero;
+ int disable = 1;
+ m64pConfigOpenSection("Core", ref core_section);
+ m64pConfigSetParameter(core_section, "DisableExtraMem", m64p_type.M64TYPE_INT, ref disable);
+ }
+
// Set the savetype if needed
if (SaveType != 0)
{