using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Nintendo.SubGBHawk { [Core( CoreNames.SubGbHawk, "", isPorted: false, isReleased: true)] [ServiceNotApplicable(new [] { typeof(IDriveLight) })] public partial class SubGBHawk : IEmulator, IStatable, IInputPollable, ISettable { [CoreConstructor(new[] { "GB", "GBC" })] public SubGBHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ object settings, object syncSettings) { var subGBSettings = (GBHawk.GBHawk.GBSettings)settings ?? new GBHawk.GBHawk.GBSettings(); var subGBSyncSettings = (GBHawk.GBHawk.GBSyncSettings)syncSettings ?? new GBHawk.GBHawk.GBSyncSettings(); _GBCore = new GBHawk.GBHawk(comm, game, rom, subGBSettings, subGBSyncSettings); HardReset(); current_cycle = 0; VBL_CNT = 0; _GBStatable = _GBCore.ServiceProvider.GetService(); var ser = new BasicServiceProvider(this); ServiceProvider = ser; ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); ser.Register(_GBCore.ServiceProvider.GetService()); _tracer = new TraceBuffer { Header = _GBCore.cpu.TraceHeader }; ser.Register(_tracer); _GBCore.ControllerDefinition.AxisControls.Add("Input Cycle"); _GBCore.ControllerDefinition.AxisRanges.Add(new ControllerDefinition.AxisRange(0, 70224, 70224)); } public GBHawk.GBHawk _GBCore; // needed for movies to accurately calculate timing public int VBL_CNT; public void HardReset() => _GBCore.HardReset(); private int _frame; private readonly ITraceable _tracer; public GBHawk.GBHawk.GBSettings GetSettings() => _GBCore.GetSettings(); public GBHawk.GBHawk.GBSyncSettings GetSyncSettings() => _GBCore.GetSyncSettings(); public PutSettingsDirtyBits PutSettings(GBHawk.GBHawk.GBSettings o) => _GBCore.PutSettings(o); public PutSettingsDirtyBits PutSyncSettings(GBHawk.GBHawk.GBSyncSettings o) => _GBCore.PutSyncSettings(o); } }