for your consideration: sync settings return flags instead of a bool, so we can have more granularity in what needs resetting than just "reboot core". for instance, we would like to minimize the number of times the window layout is redone by not doing it when the screen settings havent changed. HOWEVER, while I was writing this commit message, I realized, I should probably do it just by being more cautious in kicking off the layout (unless the data coming from the core has changed, a layout shouldnt happen). So I am going to make this commit, in case it inspires anyone, and then revert it.

This commit is contained in:
zeromus 2020-04-23 21:05:56 -04:00
parent c5ff7edba9
commit c878c85dae
47 changed files with 199 additions and 180 deletions

View File

@ -195,7 +195,7 @@ namespace BizHawk.Client.Common
_ => (object) null
};
public bool PutSettings(object settings) => Emulator switch
public PutSettingsDirtyBits PutSettings(object settings) => Emulator switch
{
GPGX gpgx => gpgx.PutSettings((GPGX.GPGXSettings) settings),
LibsnesCore snes => snes.PutSettings((LibsnesCore.SnesSettings) settings),
@ -204,7 +204,7 @@ namespace BizHawk.Client.Common
QuickNES quickNes => quickNes.PutSettings((QuickNES.QuickNESSettings) settings),
SMS sms => sms.PutSettings((SMS.SmsSettings) settings),
WonderSwan ws => ws.PutSettings((WonderSwan.Settings) settings),
_ => false
_ => PutSettingsDirtyBits.None
};
public void SetRenderPlanes(params bool[] args)

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common
{
@ -26,7 +27,7 @@ namespace BizHawk.Client.Common
string GetDisplayType();
string GetBoardName();
object GetSettings();
bool PutSettings(object settings);
PutSettingsDirtyBits PutSettings(object settings);
void SetRenderPlanes(params bool[] args);
}
}

View File

@ -2305,10 +2305,11 @@ namespace BizHawk.Client.EmuHawk
public void PutCoreSettings(object o)
{
var settable = new SettingsAdapter(Emulator);
if (settable.HasSettings && settable.PutSettings(o))
{
if (!settable.HasSettings)
return;
var dirty = settable.PutSettings(o);
if(dirty.HasFlag(PutSettingsDirtyBits.RebootCore))
FlagNeedsReboot();
}
}
// TODO: Get/Put settings/sync settings methods could become a service we instantiate and use and pass to other forms
@ -2322,9 +2323,13 @@ namespace BizHawk.Client.EmuHawk
{
AddOnScreenMessage("Attempt to change sync-relevant settings while recording BLOCKED.");
}
else if (settable.HasSyncSettings && settable.PutSyncSettings(o))
else
{
FlagNeedsReboot();
if (!settable.HasSyncSettings)
return;
var dirty = settable.PutSyncSettings(o);
if(dirty.HasFlag(PutSettingsDirtyBits.RebootCore))
FlagNeedsReboot();
}
}

View File

@ -41,7 +41,7 @@ namespace BizHawk.Emulation.Common
/// </summary>
/// <param name="o">an object of the same type as the return for GetSettings</param>
/// <returns>true if a core reboot will be required to make the changes effective</returns>
bool PutSettings(TSettings o);
PutSettingsDirtyBits PutSettings(TSettings o);
/// <summary>
/// changes the movie-sync relevant settings. THIS SHOULD NEVER BE CALLED WHILE RECORDING
@ -49,7 +49,19 @@ namespace BizHawk.Emulation.Common
/// </summary>
/// <param name="o">an object of the same type as the return for GetSyncSettings</param>
/// <returns>true if a core reboot will be required to make the changes effective</returns>
bool PutSyncSettings(TSync o);
PutSettingsDirtyBits PutSyncSettings(TSync o);
}
//note: this is a bit of a frail API. If a frontend wants a new flag, cores won't know to yea or nay it
//this could be solved by adding a KnownSettingsDirtyBits on the settings interface
//or, in a pinch, the same thing could be done with THESE flags, so that the interface doesn't
//change but newly-aware cores can simply manifest that they know about more bits, in the same variable they return the bits in
[Flags]
public enum PutSettingsDirtyBits
{
None = 0,
RebootCore = 1,
ScreenLayoutChanged = 2,
}
/// <summary>
@ -126,7 +138,7 @@ namespace BizHawk.Emulation.Common
}
/// <exception cref="InvalidOperationException">does not have non-sync settings</exception>
public bool PutSettings(object o)
public PutSettingsDirtyBits PutSettings(object o)
{
if (!HasSettings)
{
@ -134,11 +146,11 @@ namespace BizHawk.Emulation.Common
}
_tmp1[0] = o;
return (bool)_puts.Invoke(_emu, _tmp1);
return (PutSettingsDirtyBits)_puts.Invoke(_emu, _tmp1);
}
/// <exception cref="InvalidOperationException">does not have sync settings</exception>
public bool PutSyncSettings(object o)
public PutSettingsDirtyBits PutSyncSettings(object o)
{
if (!HasSyncSettings)
{
@ -146,7 +158,7 @@ namespace BizHawk.Emulation.Common
}
_tmp1[0] = o;
return (bool)_putss.Invoke(_emu, _tmp1);
return (PutSettingsDirtyBits)_putss.Invoke(_emu, _tmp1);
}
}
}

View File

@ -257,18 +257,18 @@ namespace BizHawk.Emulation.Cores.Arcades.MAME
#region ISettable
public object GetSettings() => null;
public bool PutSettings(object o) => false;
public PutSettingsDirtyBits PutSettings(object o) => PutSettingsDirtyBits.None;
public SyncSettings GetSyncSettings()
{
return _syncSettings.Clone();
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
bool ret = SyncSettings.NeedsReboot(o, _syncSettings);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public class SyncSettings

View File

@ -11,10 +11,10 @@ namespace BizHawk.Emulation.Cores.Calculators
return _settings.Clone();
}
public bool PutSettings(TI83Settings o)
public PutSettingsDirtyBits PutSettings(TI83Settings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public object GetSyncSettings()
@ -22,9 +22,9 @@ namespace BizHawk.Emulation.Cores.Calculators
return null;
}
public bool PutSyncSettings(object o)
public PutSettingsDirtyBits PutSyncSettings(object o)
{
return false;
return PutSettingsDirtyBits.None;
}
public class TI83Settings

View File

@ -25,7 +25,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC
return SyncSettings.Clone();
}
public bool PutSettings(AmstradCPCSettings o)
public PutSettingsDirtyBits PutSettings(AmstradCPCSettings o)
{
// restore user settings to devices
@ -42,14 +42,14 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC
Settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(AmstradCPCSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(AmstradCPCSyncSettings o)
{
bool ret = AmstradCPCSyncSettings.NeedsReboot(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public class AmstradCPCSettings

View File

@ -20,16 +20,16 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII
public object GetSyncSettings() => null;
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
_settings = o;
_machine.Video.IsMonochrome = _settings.Monochrome;
SetCallbacks();
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(object o) => false;
public PutSettingsDirtyBits PutSyncSettings(object o) => PutSettingsDirtyBits.None;
}
}

View File

@ -16,16 +16,16 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
return SyncSettings.Clone();
}
public bool PutSettings(C64Settings o)
public PutSettingsDirtyBits PutSettings(C64Settings o)
{
Settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(C64SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(C64SyncSettings o)
{
SyncSettings = o;
return false;
return PutSettingsDirtyBits.None;
}
internal C64Settings Settings { get; private set; }

View File

@ -16,18 +16,18 @@ namespace BizHawk.Emulation.Cores.Computers.MSX
return SyncSettings.Clone();
}
public bool PutSettings(MSXSettings o)
public PutSettingsDirtyBits PutSettings(MSXSettings o)
{
bool ret = MSXSettings.RebootNeeded(Settings, o);
Settings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(MSXSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(MSXSyncSettings o)
{
bool ret = MSXSyncSettings.RebootNeeded(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
internal MSXSettings Settings { get; private set; }

View File

@ -20,7 +20,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
public ZXSpectrumSyncSettings GetSyncSettings() => SyncSettings.Clone();
public bool PutSettings(ZXSpectrumSettings o)
public PutSettingsDirtyBits PutSettings(ZXSpectrumSettings o)
{
// restore user settings to devices
if (_machine?.AYDevice != null)
@ -39,14 +39,14 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
Settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(ZXSpectrumSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(ZXSpectrumSyncSettings o)
{
bool ret = ZXSpectrumSyncSettings.NeedsReboot(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public class ZXSpectrumSettings

View File

@ -21,7 +21,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
return SyncSettings.Clone();
}
public bool PutSettings(A2600Settings o)
public PutSettingsDirtyBits PutSettings(A2600Settings o)
{
if (Settings == null || Settings.SECAMColors != o.SECAMColors)
{
@ -29,14 +29,14 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
}
Settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(A2600SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(A2600SyncSettings o)
{
bool ret = A2600SyncSettings.NeedsReboot(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
internal A2600Settings Settings { get; private set; }

View File

@ -18,17 +18,17 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk
return _syncSettings.Clone();
}
public bool PutSettings(A7800Settings o)
public PutSettingsDirtyBits PutSettings(A7800Settings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(A7800SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(A7800SyncSettings o)
{
bool ret = A7800SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private A7800Settings _settings = new A7800Settings();

View File

@ -18,18 +18,18 @@ namespace BizHawk.Emulation.Cores.ColecoVision
return _syncSettings.Clone();
}
public bool PutSettings(ColecoSettings o)
public PutSettingsDirtyBits PutSettings(ColecoSettings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(ColecoSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(ColecoSyncSettings o)
{
bool ret = o.SkipBiosIntro != _syncSettings.SkipBiosIntro;
ret |= ColecoSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public class ColecoSettings

View File

@ -19,17 +19,17 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
return SyncSettings.Clone();
}
public bool PutSettings(ChannelFSettings o)
public PutSettingsDirtyBits PutSettings(ChannelFSettings o)
{
Settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(ChannelFSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(ChannelFSyncSettings o)
{
bool ret = ChannelFSyncSettings.NeedsReboot(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public class ChannelFSettings

View File

@ -19,17 +19,17 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex
return _syncSettings.Clone();
}
public bool PutSettings(VectrexSettings o)
public PutSettingsDirtyBits PutSettings(VectrexSettings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(VectrexSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(VectrexSyncSettings o)
{
bool ret = VectrexSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private VectrexSettings _settings = new VectrexSettings();

View File

@ -18,17 +18,17 @@ namespace BizHawk.Emulation.Cores.Intellivision
return _syncSettings.Clone();
}
public bool PutSettings(IntvSettings o)
public PutSettingsDirtyBits PutSettings(IntvSettings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(IntvSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(IntvSyncSettings o)
{
bool ret = IntvSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private IntvSettings _settings = new IntvSettings();

View File

@ -16,17 +16,17 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
return _syncSettings.Clone();
}
public bool PutSettings(O2Settings o)
public PutSettingsDirtyBits PutSettings(O2Settings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(O2SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(O2SyncSettings o)
{
bool ret = O2SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public O2Settings _settings = new O2Settings();

View File

@ -330,19 +330,19 @@ namespace BizHawk.Emulation.Cores.Consoles.NEC.PCFX
return _syncSettings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
var ret = Settings.NeedsReboot(_settings, o);
_settings = o;
SetLayerSettings();
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private void SetNativeSettingsBeforeInit()

View File

@ -15,7 +15,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
return _settings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
LibmGBA.Layers mask = 0;
if (o.DisplayBG0) mask |= LibmGBA.Layers.BG0;
@ -51,7 +51,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
LibmGBA.BizSetPalette(Core, palette);
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
private Settings _settings;
@ -139,11 +139,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
return _syncSettings.Clone();
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
bool ret = SyncSettings.NeedsReboot(o, _syncSettings);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private SyncSettings _syncSettings;

View File

@ -18,16 +18,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
return _syncSettings.Clone();
}
public bool PutSettings(object o)
public PutSettingsDirtyBits PutSettings(object o)
{
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
bool ret = SyncSettings.NeedsReboot(o, _syncSettings);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private SyncSettings _syncSettings;

View File

@ -20,17 +20,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
return _syncSettings.Clone();
}
public bool PutSettings(GBSettings o)
public PutSettingsDirtyBits PutSettings(GBSettings o)
{
_settings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(GBSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GBSyncSettings o)
{
bool ret = GBSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private GBSettings _settings = new GBSettings();

View File

@ -14,17 +14,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink
public GBLinkSyncSettings GetSyncSettings() => linkSyncSettings.Clone();
public bool PutSettings(GBLinkSettings o)
public PutSettingsDirtyBits PutSettings(GBLinkSettings o)
{
linkSettings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(GBLinkSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GBLinkSyncSettings o)
{
bool ret = GBLinkSyncSettings.NeedsReboot(linkSyncSettings, o);
linkSyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private GBLinkSettings linkSettings = new GBLinkSettings();

View File

@ -14,17 +14,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink3x
public GBLink3xSyncSettings GetSyncSettings() => Link3xSyncSettings.Clone();
public bool PutSettings(GBLink3xSettings o)
public PutSettingsDirtyBits PutSettings(GBLink3xSettings o)
{
Link3xSettings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(GBLink3xSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GBLink3xSyncSettings o)
{
bool ret = GBLink3xSyncSettings.NeedsReboot(Link3xSyncSettings, o);
Link3xSyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private GBLink3xSettings Link3xSettings = new GBLink3xSettings();

View File

@ -14,17 +14,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
public GBLink4xSyncSettings GetSyncSettings() => Link4xSyncSettings.Clone();
public bool PutSettings(GBLink4xSettings o)
public PutSettingsDirtyBits PutSettings(GBLink4xSettings o)
{
Link4xSettings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(GBLink4xSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GBLink4xSyncSettings o)
{
bool ret = GBLink4xSyncSettings.NeedsReboot(Link4xSyncSettings, o);
Link4xSyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private GBLink4xSettings Link4xSettings = new GBLink4xSettings();

View File

@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
return _settings.Clone();
}
public bool PutSettings(GambatteSettings o)
public PutSettingsDirtyBits PutSettings(GambatteSettings o)
{
_settings = o;
if (IsCGBMode())
@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
ChangeDMGColors(_settings.GBPalette);
}
return false;
return PutSettingsDirtyBits.None;
}
public GambatteSyncSettings GetSyncSettings()
@ -34,11 +34,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
return _syncSettings.Clone();
}
public bool PutSyncSettings(GambatteSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GambatteSyncSettings o)
{
bool ret = GambatteSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private GambatteSettings _settings;

View File

@ -21,14 +21,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
);
}
public bool PutSettings(GambatteLinkSettings o)
public PutSettingsDirtyBits PutSettings(GambatteLinkSettings o)
{
return L.PutSettings(o.L) || R.PutSettings(o.R);
return (PutSettingsDirtyBits)((int)L.PutSettings(o.L) | (int)R.PutSettings(o.R));
}
public bool PutSyncSettings(GambatteLinkSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GambatteLinkSyncSettings o)
{
return L.PutSyncSettings(o.L) || R.PutSyncSettings(o.R);
return (PutSettingsDirtyBits)((int)L.PutSyncSettings(o.L) | (int)R.PutSyncSettings(o.R));
}
public class GambatteLinkSettings

View File

@ -245,18 +245,18 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy
return _syncSettings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
var ret = Settings.NeedsReboot(_settings, o);
_settings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
#endregion

View File

@ -14,17 +14,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
return _syncSettings.Clone();
}
public bool PutSettings(N64Settings o)
public PutSettingsDirtyBits PutSettings(N64Settings o)
{
_settings = o;
return true;
return PutSettingsDirtyBits.RebootCore;
}
public bool PutSyncSettings(N64SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(N64SyncSettings o)
{
_syncSettings = o;
SetControllerButtons();
return true;
return PutSettingsDirtyBits.RebootCore;
}
private void SetControllerButtons()

View File

@ -30,14 +30,14 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
return ret;
}
public bool PutSettings(MelonSettings o)
public PutSettingsDirtyBits PutSettings(MelonSettings o)
{
_settings = o ?? new MelonSettings();
SetScaleFactor(_settings.ScaleFactor);
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(MelonSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(MelonSyncSettings o)
{
if (o == null)
{
@ -54,7 +54,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
SetTimeAtBoot(o.TimeAtBoot);
// At present, no sync settings can be modified without requiring a reboot.
return true;
return PutSettingsDirtyBits.RebootCore;
}
[DllImport(dllPath)]

View File

@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
public NESSyncSettings GetSyncSettings() => SyncSettings.Clone();
public bool PutSettings(NESSettings o)
public PutSettingsDirtyBits PutSettings(NESSettings o)
{
Settings = o;
if (Settings.ClipLeftAndRight)
@ -30,14 +30,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
apu.m_vol = Settings.APU_vol;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(NESSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(NESSyncSettings o)
{
bool ret = NESSyncSettings.NeedsReboot(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
internal NESSettings Settings = new NESSettings();

View File

@ -21,21 +21,21 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES
return _syncSettingsNext.Clone();
}
public bool PutSettings(QuickNESSettings o)
public PutSettingsDirtyBits PutSettings(QuickNESSettings o)
{
_settings = o;
QN.qn_set_sprite_limit(Context, _settings.NumSprites);
RecalculateCrops();
CalculatePalette();
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(QuickNESSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(QuickNESSyncSettings o)
{
bool ret = QuickNESSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettingsNext = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private QuickNESSettings _settings;

View File

@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
return _syncSettings.Clone();
}
public bool PutSettings(SnesSettings o)
public PutSettingsDirtyBits PutSettings(SnesSettings o)
{
bool refreshNeeded = o.Palette != _settings.Palette;
_settings = o;
@ -23,17 +23,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
RefreshPalette();
}
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SnesSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SnesSyncSettings o)
{
bool ret = o.LeftPort != _syncSettings.LeftPort
|| o.RightPort != _syncSettings.RightPort
|| o.LimitAnalogChangeSensitivity != _syncSettings.LimitAnalogChangeSensitivity;
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private SnesSettings _settings;

View File

@ -308,7 +308,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES9X
return _syncSettings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
_settings = o;
int s = 0;
@ -334,14 +334,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES9X
if (o.ShowSprites3) l |= 2048;
_core.biz_set_layers(l);
return false; // no reboot needed
return PutSettingsDirtyBits.None; // no reboot needed
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public class Settings

View File

@ -58,7 +58,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubGBHawk
public GBHawk.GBHawk.GBSettings GetSettings() => _GBCore.GetSettings();
public GBHawk.GBHawk.GBSyncSettings GetSyncSettings() => _GBCore.GetSyncSettings();
public bool PutSettings(GBHawk.GBHawk.GBSettings o) => _GBCore.PutSettings(o);
public bool PutSyncSettings(GBHawk.GBHawk.GBSyncSettings o) => _GBCore.PutSyncSettings(o);
public PutSettingsDirtyBits PutSettings(GBHawk.GBHawk.GBSettings o) => _GBCore.PutSettings(o);
public PutSettingsDirtyBits PutSyncSettings(GBHawk.GBHawk.GBSyncSettings o) => _GBCore.PutSyncSettings(o);
}
}

View File

@ -84,7 +84,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk
public NES.NES.NESSettings GetSettings() => _nesCore.GetSettings();
public NES.NES.NESSyncSettings GetSyncSettings() => _nesCore.GetSyncSettings();
public bool PutSettings(NES.NES.NESSettings o) => _nesCore.PutSettings(o);
public bool PutSyncSettings(NES.NES.NESSyncSettings o) => _nesCore.PutSyncSettings(o);
public PutSettingsDirtyBits PutSettings(NES.NES.NESSettings o) => _nesCore.PutSettings(o);
public PutSettingsDirtyBits PutSyncSettings(NES.NES.NESSyncSettings o) => _nesCore.PutSyncSettings(o);
}
}

View File

@ -234,18 +234,18 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.VB
return _syncSettings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
var ret = Settings.NeedsReboot(_settings, o);
_settings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
#endregion

View File

@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
return _syncSettings.Clone();
}
public bool PutSettings(PCESettings o)
public PutSettingsDirtyBits PutSettings(PCESettings o)
{
bool ret;
if (o.ArcadeCardRewindHack != Settings.ArcadeCardRewindHack
@ -32,14 +32,14 @@ namespace BizHawk.Emulation.Cores.PCEngine
Settings = o;
return ret;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(PCESyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(PCESyncSettings o)
{
bool ret = PCESyncSettings.NeedsReboot(o, _syncSettings);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public PCESettings Settings;

View File

@ -166,16 +166,16 @@ namespace BizHawk.Emulation.Cores.Consoles.SNK
return _syncSettings.Clone();
}
public bool PutSettings(object o)
public PutSettingsDirtyBits PutSettings(object o)
{
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
#endregion

View File

@ -16,17 +16,17 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink
return linkSyncSettings.Clone();
}
public bool PutSettings(GGLinkSettings o)
public PutSettingsDirtyBits PutSettings(GGLinkSettings o)
{
linkSettings = o;
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(GGLinkSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GGLinkSyncSettings o)
{
bool ret = GGLinkSyncSettings.NeedsReboot(linkSyncSettings, o);
linkSyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private GGLinkSettings linkSettings = new GGLinkSettings();

View File

@ -229,16 +229,16 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.PicoDrive
return _syncSettings.Clone();
}
public bool PutSettings(object o)
public PutSettingsDirtyBits PutSettings(object o)
{
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
#endregion

View File

@ -9,18 +9,18 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
public SmsSyncSettings GetSyncSettings() => SyncSettings.Clone();
public bool PutSettings(SmsSettings o)
public PutSettingsDirtyBits PutSettings(SmsSettings o)
{
bool ret = SmsSettings.RebootNeeded(Settings, o);
Settings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SmsSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SmsSyncSettings o)
{
bool ret = SmsSyncSettings.RebootNeeded(SyncSettings, o);
SyncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
internal SmsSettings Settings { get; private set; }

View File

@ -439,7 +439,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn
return _settings.Clone();
}
public bool PutSettings(Settings s)
public PutSettingsDirtyBits PutSettings(Settings s)
{
var ret = Settings.NeedsReboot(_settings, s);
_settings = s;
@ -449,7 +449,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn
//(the correct aspect ratio is no longer an option for other reasons)
//_core.SetVideoParameters(s.CorrectAspectRatio, s.HBlend, s.HOverscan, sls, sle);
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public SyncSettings GetSyncSettings()
@ -457,11 +457,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn
return _syncSettings.Clone();
}
public bool PutSyncSettings(SyncSettings s)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings s)
{
var ret = SyncSettings.NeedsReboot(_syncSettings, s);
_syncSettings = s;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private void SetVideoParameters()

View File

@ -21,19 +21,19 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
return _syncSettings.Clone();
}
public bool PutSettings(GPGXSettings o)
public PutSettingsDirtyBits PutSettings(GPGXSettings o)
{
bool ret = GPGXSettings.NeedsReboot(_settings, o);
_settings = o;
Core.gpgx_set_draw_mask(_settings.GetDrawMask());
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(GPGXSyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(GPGXSyncSettings o)
{
bool ret = GPGXSyncSettings.NeedsReboot(_syncSettings, o);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
private class UintToHexConverter : TypeConverter

View File

@ -1271,17 +1271,17 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
return _SyncSettings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
_Settings.Validate();
_Settings = o;
//TODO - store settings into core? or we can just keep doing it before frameadvance
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
//currently LEC and pad settings changes both require reboot
bool reboot = true;
@ -1293,7 +1293,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
_SyncSettings = o;
return reboot;
return reboot ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
#endregion

View File

@ -158,19 +158,19 @@ namespace BizHawk.Emulation.Cores.WonderSwan
public SyncSettings GetSyncSettings() => _syncSettings.Clone();
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
_settings = o;
var native = _settings.GetNativeSettings();
BizSwan.bizswan_putsettings(Core, ref native);
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
bool ret = SyncSettings.NeedsReboot(o, _syncSettings);
_syncSettings = o;
return ret;
return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
}

View File

@ -1,5 +1,6 @@
using Newtonsoft.Json;
using BizHawk.Common;
using BizHawk.Emulation.Common;
namespace BizHawk.Emulation.Cores.Libretro
{
@ -49,17 +50,17 @@ namespace BizHawk.Emulation.Cores.Libretro
return _SyncSettings.Clone();
}
public bool PutSettings(Settings o)
public PutSettingsDirtyBits PutSettings(Settings o)
{
_Settings.Validate();
_Settings = o;
//TODO - store settings into core? or we can just keep doing it before frameadvance
return false;
return PutSettingsDirtyBits.None;
}
public bool PutSyncSettings(SyncSettings o)
public PutSettingsDirtyBits PutSyncSettings(SyncSettings o)
{
bool reboot = false;
@ -68,7 +69,7 @@ namespace BizHawk.Emulation.Cores.Libretro
_SyncSettings = o;
return reboot;
return reboot ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None;
}
}