diff --git a/src/BizHawk.Client.Common/RomLoader.cs b/src/BizHawk.Client.Common/RomLoader.cs index 1b26f8e9eb..070ec38f02 100644 --- a/src/BizHawk.Client.Common/RomLoader.cs +++ b/src/BizHawk.Client.Common/RomLoader.cs @@ -528,25 +528,6 @@ namespace BizHawk.Client.Common core = CoreInventory.Instance["GB", _config.PreferredCores["GB"]]; } break; - case "C64": - nextEmulator = new C64( - nextComm, - new[] { rom.FileData }, - rom.GameInfo, - GetCoreSettings(), - GetCoreSyncSettings() - ); - return; - case "ZXSpectrum": - nextEmulator = new ZXSpectrum( - nextComm, - new[] { rom.RomData }, - new List { rom.GameInfo }, - GetCoreSettings(), - GetCoreSyncSettings(), - Deterministic - ); - return; case "ChannelF": nextEmulator = new ChannelF( nextComm, @@ -554,15 +535,6 @@ namespace BizHawk.Client.Common rom.FileData ); return; - case "AmstradCPC": - nextEmulator = new AmstradCPC( - nextComm, - new[] { rom.RomData }, - new List { rom.GameInfo }, - GetCoreSettings(), - GetCoreSyncSettings() - ); - return; case "Arcade": nextEmulator = new MAME( file.Directory, @@ -692,32 +664,13 @@ namespace BizHawk.Client.Common nextEmulator = MakeCoreFromXml(game); return true; case "C64": - nextEmulator = new C64( - nextComm, - xmlGame.Assets.Select(a => a.Value), - GameInfo.NullInstance, - GetCoreSettings(), - GetCoreSyncSettings() - ); + nextEmulator = MakeCoreFromXml(game); return true; case "ZXSpectrum": - nextEmulator = new ZXSpectrum( - nextComm, - xmlGame.Assets.Select(kvp => kvp.Value), - xmlGame.Assets.Select(kvp => new GameInfo { Name = Path.GetFileNameWithoutExtension(kvp.Key) }).ToList(), - GetCoreSettings(), - GetCoreSyncSettings(), - Deterministic - ); + nextEmulator = MakeCoreFromXml(game); return true; case "AmstradCPC": - nextEmulator = new AmstradCPC( - nextComm, - xmlGame.Assets.Select(kvp => kvp.Value), - xmlGame.Assets.Select(kvp => new GameInfo { Name = Path.GetFileNameWithoutExtension(kvp.Key) }).ToList(), - GetCoreSettings(), - GetCoreSyncSettings() - ); + nextEmulator = MakeCoreFromXml(game); return true; case "PSX": nextEmulator = MakeCoreFromXml(game, DiscType.SonyPSX, "PSX"); diff --git a/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs b/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs index df7cc80efc..2dc7889dba 100644 --- a/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs +++ b/src/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs @@ -20,18 +20,19 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC isReleased: false)] public partial class AmstradCPC : IRegionable, IDriveLight { - public AmstradCPC(CoreComm comm, IEnumerable files, List game, AmstradCPCSettings settings, AmstradCPCSyncSettings syncSettings) + [CoreConstructor("AmstradCPC")] + public AmstradCPC(CoreLoadParameters lp) { var ser = new BasicServiceProvider(this); ServiceProvider = ser; - CoreComm = comm; - _gameInfo = game; + CoreComm = lp.Comm; + _gameInfo = lp.Roms.Select(r => r.Game).ToList(); _cpu = new Z80A(); _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; - _files = files?.ToList() ?? new List(); + _files = lp.Roms.Select(r => r.RomData).ToList(); - settings ??= new AmstradCPCSettings(); - syncSettings ??= new AmstradCPCSyncSettings(); + var settings = lp.Settings ?? new AmstradCPCSettings(); + var syncSettings = lp.SyncSettings ?? new AmstradCPCSyncSettings(); PutSyncSettings((AmstradCPCSyncSettings)syncSettings); PutSettings((AmstradCPCSettings)settings); diff --git a/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs b/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs index 9c52403f5d..5eb428f25c 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs @@ -16,16 +16,17 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 isReleased: true)] public sealed partial class C64 : IEmulator, IRegionable, IBoardInfo, IRomInfo { - public C64(CoreComm comm, IEnumerable roms, GameInfo game, C64Settings settings, C64SyncSettings syncSettings) + [CoreConstructor("C64")] + public C64(CoreLoadParameters lp) { - PutSyncSettings((C64SyncSettings)syncSettings ?? new C64SyncSettings()); - PutSettings((C64Settings)settings ?? new C64Settings()); + PutSyncSettings((C64SyncSettings)lp.SyncSettings ?? new C64SyncSettings()); + PutSettings((C64Settings)lp.Settings ?? new C64Settings()); var ser = new BasicServiceProvider(this); ServiceProvider = ser; - CoreComm = comm; - _roms = roms?.ToList() ?? new List(); + CoreComm = lp.Comm; + _roms = lp.Roms.Select(r => r.RomData).ToList(); _currentDisk = 0; RomSanityCheck(); @@ -64,7 +65,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 if (_board.CartPort.IsConnected) { // There are no multi-cart cart games, so just hardcode .First() - RomDetails = $"{game.Name}\r\nSHA1:{_roms.First().HashSHA1()}\r\nMD5:{roms.First().HashMD5()}\r\nMapper Impl \"{_board.CartPort.CartridgeType}\""; + RomDetails = $"{lp.Game.Name}\r\nSHA1:{_roms.First().HashSHA1()}\r\nMD5:{_roms.First().HashMD5()}\r\nMapper Impl \"{_board.CartPort.CartridgeType}\""; } SetupMemoryDomains(); diff --git a/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs b/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs index de6f1e4c5c..714c696aa8 100644 --- a/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs +++ b/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.cs @@ -21,32 +21,27 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum isReleased: true)] public partial class ZXSpectrum : IRegionable, IDriveLight { - public ZXSpectrum(CoreComm comm, IEnumerable files, List game, ZXSpectrumSettings settings, ZXSpectrumSyncSettings syncSettings, bool? deterministic) + [CoreConstructor("ZXSpectrum")] + public ZXSpectrum( + CoreLoadParameters lp) { var ser = new BasicServiceProvider(this); ServiceProvider = ser; - CoreComm = comm; + CoreComm = lp.Comm; - _gameInfo = game; + _gameInfo = lp.Roms.Select(r => r.Game).ToList(); _cpu = new Z80A(); _tracer = new TraceBuffer { Header = _cpu.TraceHeader }; - _files = files?.ToList() ?? new List(); + _files = lp.Roms.Select(r => r.RomData).ToList(); - if (settings == null) - { - settings = new ZXSpectrumSettings(); - } + var settings = lp.Settings ?? new ZXSpectrumSettings(); + var syncSettings = lp.SyncSettings ?? new ZXSpectrumSyncSettings(); - if (syncSettings == null) - { - syncSettings = new ZXSpectrumSyncSettings(); - } - - PutSyncSettings((ZXSpectrumSyncSettings)syncSettings); - PutSettings((ZXSpectrumSettings)settings); + PutSyncSettings(lp.SyncSettings); + PutSettings(lp.Settings); var joysticks = new List { @@ -57,14 +52,14 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum DeterministicEmulation = ((ZXSpectrumSyncSettings)syncSettings).DeterministicEmulation; - if (deterministic != null && deterministic == true) + if (lp.DeterministicEmulationRequested) { if (!DeterministicEmulation) { CoreComm.Notify("Forcing Deterministic Emulation"); } - DeterministicEmulation = deterministic.Value; + DeterministicEmulation = lp.DeterministicEmulationRequested; } MachineType = SyncSettings.MachineType; diff --git a/src/BizHawk.Emulation.Cores/CoreInventory.cs b/src/BizHawk.Emulation.Cores/CoreInventory.cs index 3e171fa9fd..ba8d431dc8 100644 --- a/src/BizHawk.Emulation.Cores/CoreInventory.cs +++ b/src/BizHawk.Emulation.Cores/CoreInventory.cs @@ -20,7 +20,7 @@ namespace BizHawk.Emulation.Cores public byte[] RomData { get; set; } public byte[] FileData { get; set; } public string Extension { get; set; } - public GameInfo Game => null; + public GameInfo Game { get; set; } } // expected names and types of the parameters private static readonly Dictionary ParamTypes = new Dictionary(); @@ -123,7 +123,8 @@ namespace BizHawk.Emulation.Cores { RomData = rom, FileData = file, - Extension = extension + Extension = extension, + Game = game, }); param.DeterministicEmulationRequested = deterministic; return (IEmulator)CTor.Invoke(new object[] { param });