diff --git a/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.ISettable.cs b/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.ISettable.cs index 08dd51e758..dfc4257258 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.ISettable.cs @@ -130,6 +130,19 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga DRV_FB } + public enum FloppySpeed + { + [Display(Name = "100%")] + _100 = 100, + [Display(Name = "200%")] + _200 = 200, + [Display(Name = "400%")] + _400 = 400, + [Display(Name = "800%")] + _800 = 800, + Turbo = 0 + } + private void CreateArguments(PUAESyncSettings settings) { _args = new List @@ -239,6 +252,11 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga AppendSetting("input.mouse_speed=" + settings.MouseSpeed); AppendSetting("sound_stereo_separation=" + settings.StereoSeparation / 10); + if (!DeterministicEmulation) + { + AppendSetting("floppy_speed=" + (int)settings.FloppySpeed); + } + for (int port = 0; port <= 1; port++) { LibPUAE.ControllerType type = port == 0 @@ -384,6 +402,12 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga [DefaultValue(VideoStandard.PAL)] public VideoStandard Region { get; set; } + [DisplayName("Floppy drive speed")] + [Description("Default speed is 300RPM. 'Turbo' removes disk rotation emulation. This is a speedhack, not available for movies.")] + [DefaultValue(FloppySpeed._100)] + [TypeConverter(typeof(DescribableEnumConverter))] + public FloppySpeed FloppySpeed { get; set; } + public PUAESyncSettings() => SettingsUtil.SetDefaultValues(this); diff --git a/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.cs b/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.cs index 640be19070..2d71102d2d 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Amiga/PUAE.cs @@ -46,6 +46,7 @@ namespace BizHawk.Emulation.Cores.Computers.Amiga //_discs = lp.Discs; _syncSettings = lp.SyncSettings ?? new(); _syncSettings.FloppyDrives = Math.Min(LibPUAE.MAX_FLOPPIES, _syncSettings.FloppyDrives); + DeterministicEmulation = (int)_syncSettings.FloppySpeed == 100 || lp.DeterministicEmulationRequested; var filesToRemove = new List(); _ports = [