Esempio n. 1
0
        public SubGBHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ GBHawk.GBHawk.GBSettings settings, GBHawk.GBHawk.GBSyncSettings 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;
            CycleCount    = 0;

            _GBStatable = _GBCore.ServiceProvider.GetService <IStatable>();

            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            ser.Register(_GBCore.ServiceProvider.GetService <IVideoProvider>());
            ser.Register(_GBCore.ServiceProvider.GetService <ISoundProvider>());
            ser.Register(_GBCore.ServiceProvider.GetService <ITraceable>());
            ser.Register(_GBCore.ServiceProvider.GetService <IMemoryDomains>());
            ser.Register(_GBCore.ServiceProvider.GetService <ISaveRam>());
            ser.Register(_GBCore.ServiceProvider.GetService <IRegionable>());
            ser.Register(_GBCore.ServiceProvider.GetService <ICodeDataLogger>());

            _tracer = new TraceBuffer(_GBCore.cpu.TraceHeader);
            ser.Register(_tracer);

            _GBCore.ControllerDefinition.AddAxis("Input Cycle", 0.RangeTo(70224), 70224)
            .MakeImmutable();
        }
Esempio n. 2
0
        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;
            Cycle_CNT     = 0;

            _GBStatable = _GBCore.ServiceProvider.GetService <IStatable>();

            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            ser.Register(_GBCore.ServiceProvider.GetService <IVideoProvider>());
            ser.Register(_GBCore.ServiceProvider.GetService <ISoundProvider>());
            ser.Register(_GBCore.ServiceProvider.GetService <ITraceable>());
            ser.Register(_GBCore.ServiceProvider.GetService <IMemoryDomains>());
            ser.Register(_GBCore.ServiceProvider.GetService <ISaveRam>());
            ser.Register(_GBCore.ServiceProvider.GetService <IDebuggable>());
            ser.Register(_GBCore.ServiceProvider.GetService <IRegionable>());
            ser.Register(_GBCore.ServiceProvider.GetService <ICodeDataLogger>());

            _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));
        }
Esempio n. 3
0
        public SubGBHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ GBHawk.GBHawk.GBSettings settings, GBHawk.GBHawk.GBSyncSettings 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, true);

            HardReset();
            current_cycle = 0;
            _cycleCount   = 0;

            _GBStatable = _GBCore.ServiceProvider.GetService <IStatable>();

            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            ser.Register(_GBCore.ServiceProvider.GetService <IVideoProvider>());
            ser.Register(_GBCore.ServiceProvider.GetService <ISoundProvider>());
            ser.Register(_GBCore.ServiceProvider.GetService <ITraceable>());
            ser.Register(_GBCore.ServiceProvider.GetService <IMemoryDomains>());
            ser.Register(_GBCore.ServiceProvider.GetService <ISaveRam>());
            ser.Register(_GBCore.ServiceProvider.GetService <IRegionable>());
            ser.Register(_GBCore.ServiceProvider.GetService <ICodeDataLogger>());
            ser.Register(_GBCore.ServiceProvider.GetService <IGameboyCommon>());

            _tracer = new TraceBuffer(_GBCore.cpu.TraceHeader);
            ser.Register(_tracer);
        }
Esempio n. 4
0
        public GBHawkLink3x(CoreLoadParameters <GBLink3xSettings, GBLink3xSyncSettings> lp)
        {
            if (lp.Roms.Count != 3)
            {
                throw new InvalidOperationException("Wrong number of roms");
            }

            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            Link3xSettings     = (GBLink3xSettings)lp.Settings ?? new GBLink3xSettings();
            Link3xSyncSettings = (GBLink3xSyncSettings)lp.SyncSettings ?? new GBLink3xSyncSettings();
            _controllerDeck    = new(
                GBHawkControllerDeck.DefaultControllerName,
                GBHawkControllerDeck.DefaultControllerName,
                GBHawkControllerDeck.DefaultControllerName);

            var tempSetL = new GBHawk.GBHawk.GBSettings();
            var tempSetC = new GBHawk.GBHawk.GBSettings();
            var tempSetR = new GBHawk.GBHawk.GBSettings();

            var tempSyncL = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncC = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncR = new GBHawk.GBHawk.GBSyncSettings();

            tempSyncL.ConsoleMode = Link3xSyncSettings.ConsoleMode_L;
            tempSyncC.ConsoleMode = Link3xSyncSettings.ConsoleMode_C;
            tempSyncR.ConsoleMode = Link3xSyncSettings.ConsoleMode_R;

            tempSyncL.GBACGB = Link3xSyncSettings.GBACGB;
            tempSyncC.GBACGB = Link3xSyncSettings.GBACGB;
            tempSyncR.GBACGB = Link3xSyncSettings.GBACGB;

            tempSyncL.RTCInitialTime = Link3xSyncSettings.RTCInitialTime_L;
            tempSyncC.RTCInitialTime = Link3xSyncSettings.RTCInitialTime_C;
            tempSyncR.RTCInitialTime = Link3xSyncSettings.RTCInitialTime_R;
            tempSyncL.RTCOffset      = Link3xSyncSettings.RTCOffset_L;
            tempSyncC.RTCOffset      = Link3xSyncSettings.RTCOffset_C;
            tempSyncR.RTCOffset      = Link3xSyncSettings.RTCOffset_R;

            L = new GBHawk.GBHawk(lp.Comm, lp.Roms[0].Game, lp.Roms[0].RomData, tempSetL, tempSyncL);
            C = new GBHawk.GBHawk(lp.Comm, lp.Roms[1].Game, lp.Roms[1].RomData, tempSetC, tempSyncC);
            R = new GBHawk.GBHawk(lp.Comm, lp.Roms[2].Game, lp.Roms[2].RomData, tempSetR, tempSyncR);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer(L.cpu.TraceHeader);
            ser.Register(_tracer);

            _lStates = L.ServiceProvider.GetService <IStatable>();
            _cStates = C.ServiceProvider.GetService <IStatable>();
            _rStates = R.ServiceProvider.GetService <IStatable>();

            SetupMemoryDomains();
            HardReset();
        }
Esempio n. 5
0
        //[CoreConstructor("GB", "GBC")]
        public GBHawkLink(CoreComm comm, GameInfo game_L, byte[] rom_L, GameInfo game_R, byte[] rom_R, /*string gameDbFn,*/ object settings, object syncSettings)
        {
            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            linkSettings     = (GBLinkSettings)settings ?? new GBLinkSettings();
            linkSyncSettings = (GBLinkSyncSettings)syncSettings ?? new GBLinkSyncSettings();
            _controllerDeck  = new GBHawkLinkControllerDeck(GBHawkLinkControllerDeck.DefaultControllerName, GBHawkLinkControllerDeck.DefaultControllerName);

            CoreComm = comm;

            var temp_set_L = new GBHawk.GBHawk.GBSettings();
            var temp_set_R = new GBHawk.GBHawk.GBSettings();

            var temp_sync_L = new GBHawk.GBHawk.GBSyncSettings();
            var temp_sync_R = new GBHawk.GBHawk.GBSyncSettings();

            temp_sync_L.ConsoleMode = linkSyncSettings.ConsoleMode_L;
            temp_sync_R.ConsoleMode = linkSyncSettings.ConsoleMode_R;

            temp_sync_L.GBACGB = linkSyncSettings.GBACGB;
            temp_sync_R.GBACGB = linkSyncSettings.GBACGB;

            temp_sync_L.RTCInitialTime = linkSyncSettings.RTCInitialTime_L;
            temp_sync_R.RTCInitialTime = linkSyncSettings.RTCInitialTime_R;
            temp_sync_L.RTCOffset      = linkSyncSettings.RTCOffset_L;
            temp_sync_R.RTCOffset      = linkSyncSettings.RTCOffset_R;

            L = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify)
            {
                CoreFileProvider = comm.CoreFileProvider
            },
                                  game_L, rom_L, temp_set_L, temp_sync_L);

            R = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify)
            {
                CoreFileProvider = comm.CoreFileProvider
            },
                                  game_R, rom_R, temp_set_R, temp_sync_R);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer {
                Header = L.cpu.TraceHeader
            };
            ser.Register <ITraceable>(_tracer);

            _lStates = L.ServiceProvider.GetService <IStatable>();
            _rStates = R.ServiceProvider.GetService <IStatable>();

            SetupMemoryDomains();

            HardReset();
        }
Esempio n. 6
0
        //[CoreConstructor("GB", "GBC")]
        public GBHawkLink3x(CoreComm comm, GameInfo game_L, byte[] rom_L, GameInfo game_C, byte[] rom_C, GameInfo game_R, byte[] rom_R, /*string gameDbFn,*/ object settings, object syncSettings)
        {
            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            Link3xSettings     = (GBLink3xSettings)settings ?? new GBLink3xSettings();
            Link3xSyncSettings = (GBLink3xSyncSettings)syncSettings ?? new GBLink3xSyncSettings();
            _controllerDeck    = new GBHawkLink3xControllerDeck(GBHawkLink3xControllerDeck.DefaultControllerName, GBHawkLink3xControllerDeck.DefaultControllerName, GBHawkLink3xControllerDeck.DefaultControllerName);

            var tempSetL = new GBHawk.GBHawk.GBSettings();
            var tempSetC = new GBHawk.GBHawk.GBSettings();
            var tempSetR = new GBHawk.GBHawk.GBSettings();

            var tempSyncL = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncC = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncR = new GBHawk.GBHawk.GBSyncSettings();

            tempSyncL.ConsoleMode = Link3xSyncSettings.ConsoleMode_L;
            tempSyncC.ConsoleMode = Link3xSyncSettings.ConsoleMode_C;
            tempSyncR.ConsoleMode = Link3xSyncSettings.ConsoleMode_R;

            tempSyncL.GBACGB = Link3xSyncSettings.GBACGB;
            tempSyncC.GBACGB = Link3xSyncSettings.GBACGB;
            tempSyncR.GBACGB = Link3xSyncSettings.GBACGB;

            tempSyncL.RTCInitialTime = Link3xSyncSettings.RTCInitialTime_L;
            tempSyncC.RTCInitialTime = Link3xSyncSettings.RTCInitialTime_C;
            tempSyncR.RTCInitialTime = Link3xSyncSettings.RTCInitialTime_R;
            tempSyncL.RTCOffset      = Link3xSyncSettings.RTCOffset_L;
            tempSyncC.RTCOffset      = Link3xSyncSettings.RTCOffset_C;
            tempSyncR.RTCOffset      = Link3xSyncSettings.RTCOffset_R;

            L = new GBHawk.GBHawk(comm, game_L, rom_L, tempSetL, tempSyncL);
            C = new GBHawk.GBHawk(comm, game_C, rom_C, tempSetC, tempSyncC);
            R = new GBHawk.GBHawk(comm, game_R, rom_R, tempSetR, tempSyncR);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer {
                Header = L.cpu.TraceHeader
            };
            ser.Register(_tracer);

            _lStates = L.ServiceProvider.GetService <IStatable>();
            _cStates = C.ServiceProvider.GetService <IStatable>();
            _rStates = R.ServiceProvider.GetService <IStatable>();

            SetupMemoryDomains();
            HardReset();
        }
        public GBHawkLink(CoreLoadParameters <GBHawkLink.GBLinkSettings, GBHawkLink.GBLinkSyncSettings> lp)
        {
            if (lp.Roms.Count != 2)
            {
                throw new InvalidOperationException("Wrong number of roms");
            }

            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            linkSettings     = (GBLinkSettings)lp.Settings ?? new GBLinkSettings();
            linkSyncSettings = (GBLinkSyncSettings)lp.SyncSettings ?? new GBLinkSyncSettings();
            _controllerDeck  = new GBHawkLinkControllerDeck(GBHawkLinkControllerDeck.DefaultControllerName, GBHawkLinkControllerDeck.DefaultControllerName);

            var temp_set_L = new GBHawk.GBHawk.GBSettings();
            var temp_set_R = new GBHawk.GBHawk.GBSettings();

            var temp_sync_L = new GBHawk.GBHawk.GBSyncSettings();
            var temp_sync_R = new GBHawk.GBHawk.GBSyncSettings();

            temp_sync_L.ConsoleMode = linkSyncSettings.ConsoleMode_L;
            temp_sync_R.ConsoleMode = linkSyncSettings.ConsoleMode_R;

            temp_sync_L.GBACGB = linkSyncSettings.GBACGB;
            temp_sync_R.GBACGB = linkSyncSettings.GBACGB;

            temp_sync_L.RTCInitialTime = linkSyncSettings.RTCInitialTime_L;
            temp_sync_R.RTCInitialTime = linkSyncSettings.RTCInitialTime_R;
            temp_sync_L.RTCOffset      = linkSyncSettings.RTCOffset_L;
            temp_sync_R.RTCOffset      = linkSyncSettings.RTCOffset_R;

            L = new GBHawk.GBHawk(lp.Comm, lp.Roms[0].Game, lp.Roms[0].RomData, temp_set_L, temp_sync_L);
            R = new GBHawk.GBHawk(lp.Comm, lp.Roms[1].Game, lp.Roms[1].RomData, temp_set_R, temp_sync_R);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer {
                Header = L.cpu.TraceHeader
            };
            ser.Register <ITraceable>(_tracer);

            _lStates = L.ServiceProvider.GetService <IStatable>();
            _rStates = R.ServiceProvider.GetService <IStatable>();

            SetupMemoryDomains();

            HardReset();
        }
        public GBHawkLink4x(CoreLoadParameters <GBLink4xSettings, GBLink4xSyncSettings> lp)
        {
            if (lp.Roms.Count != 4)
            {
                throw new InvalidOperationException("Wrong number of roms");
            }

            var ser = new BasicServiceProvider(this);

            Link4xSettings     = (GBLink4xSettings)lp.Settings ?? new GBLink4xSettings();
            Link4xSyncSettings = (GBLink4xSyncSettings)lp.SyncSettings ?? new GBLink4xSyncSettings();
            _controllerDeck    = new GBHawkLink4xControllerDeck(GBHawkLink4xControllerDeck.DefaultControllerName, GBHawkLink4xControllerDeck.DefaultControllerName,
                                                                GBHawkLink4xControllerDeck.DefaultControllerName, GBHawkLink4xControllerDeck.DefaultControllerName);

            var tempSetA = new GBHawk.GBHawk.GBSettings();
            var tempSetB = new GBHawk.GBHawk.GBSettings();
            var tempSetC = new GBHawk.GBHawk.GBSettings();
            var tempSetD = new GBHawk.GBHawk.GBSettings();

            var tempSyncA = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncB = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncC = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncD = new GBHawk.GBHawk.GBSyncSettings();

            tempSyncA.ConsoleMode = Link4xSyncSettings.ConsoleMode_A;
            tempSyncB.ConsoleMode = Link4xSyncSettings.ConsoleMode_B;
            tempSyncC.ConsoleMode = Link4xSyncSettings.ConsoleMode_C;
            tempSyncD.ConsoleMode = Link4xSyncSettings.ConsoleMode_D;

            tempSyncA.GBACGB = Link4xSyncSettings.GBACGB;
            tempSyncB.GBACGB = Link4xSyncSettings.GBACGB;
            tempSyncC.GBACGB = Link4xSyncSettings.GBACGB;
            tempSyncD.GBACGB = Link4xSyncSettings.GBACGB;

            tempSyncA.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_A;
            tempSyncB.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_B;
            tempSyncC.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_C;
            tempSyncD.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_D;
            tempSyncA.RTCOffset      = Link4xSyncSettings.RTCOffset_A;
            tempSyncB.RTCOffset      = Link4xSyncSettings.RTCOffset_B;
            tempSyncC.RTCOffset      = Link4xSyncSettings.RTCOffset_C;
            tempSyncD.RTCOffset      = Link4xSyncSettings.RTCOffset_D;

            A = new GBHawk.GBHawk(lp.Comm, lp.Roms[0].Game, lp.Roms[0].RomData, tempSetA, tempSyncA);
            B = new GBHawk.GBHawk(lp.Comm, lp.Roms[1].Game, lp.Roms[1].RomData, tempSetB, tempSyncB);
            C = new GBHawk.GBHawk(lp.Comm, lp.Roms[2].Game, lp.Roms[2].RomData, tempSetC, tempSyncC);
            D = new GBHawk.GBHawk(lp.Comm, lp.Roms[3].Game, lp.Roms[3].RomData, tempSetD, tempSyncD);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer {
                Header = A.cpu.TraceHeader
            };
            ser.Register(_tracer);

            ServiceProvider = ser;

            _aStates = A.ServiceProvider.GetService <IStatable>();
            _bStates = B.ServiceProvider.GetService <IStatable>();
            _cStates = C.ServiceProvider.GetService <IStatable>();
            _dStates = D.ServiceProvider.GetService <IStatable>();

            SetupMemoryDomains();

            HardReset();
        }
Esempio n. 9
0
        //[CoreConstructor("GB", "GBC")]
        public GBHawkLink4x(CoreComm comm, GameInfo game_A, byte[] rom_A, GameInfo game_B, byte[] rom_B, GameInfo game_C, byte[] rom_C, GameInfo game_D, byte[] rom_D, /*string gameDbFn,*/ object settings, object syncSettings)
        {
            var ser = new BasicServiceProvider(this);

            Link4xSettings     = (GBLink4xSettings)settings ?? new GBLink4xSettings();
            Link4xSyncSettings = (GBLink4xSyncSettings)syncSettings ?? new GBLink4xSyncSettings();
            _controllerDeck    = new GBHawkLink4xControllerDeck(GBHawkLink4xControllerDeck.DefaultControllerName, GBHawkLink4xControllerDeck.DefaultControllerName,
                                                                GBHawkLink4xControllerDeck.DefaultControllerName, GBHawkLink4xControllerDeck.DefaultControllerName);

            var tempSetA = new GBHawk.GBHawk.GBSettings();
            var tempSetB = new GBHawk.GBHawk.GBSettings();
            var tempSetC = new GBHawk.GBHawk.GBSettings();
            var tempSetD = new GBHawk.GBHawk.GBSettings();

            var tempSyncA = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncB = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncC = new GBHawk.GBHawk.GBSyncSettings();
            var tempSyncD = new GBHawk.GBHawk.GBSyncSettings();

            tempSyncA.ConsoleMode = Link4xSyncSettings.ConsoleMode_A;
            tempSyncB.ConsoleMode = Link4xSyncSettings.ConsoleMode_B;
            tempSyncC.ConsoleMode = Link4xSyncSettings.ConsoleMode_C;
            tempSyncD.ConsoleMode = Link4xSyncSettings.ConsoleMode_D;

            tempSyncA.GBACGB = Link4xSyncSettings.GBACGB;
            tempSyncB.GBACGB = Link4xSyncSettings.GBACGB;
            tempSyncC.GBACGB = Link4xSyncSettings.GBACGB;
            tempSyncD.GBACGB = Link4xSyncSettings.GBACGB;

            tempSyncA.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_A;
            tempSyncB.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_B;
            tempSyncC.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_C;
            tempSyncD.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_D;
            tempSyncA.RTCOffset      = Link4xSyncSettings.RTCOffset_A;
            tempSyncB.RTCOffset      = Link4xSyncSettings.RTCOffset_B;
            tempSyncC.RTCOffset      = Link4xSyncSettings.RTCOffset_C;
            tempSyncD.RTCOffset      = Link4xSyncSettings.RTCOffset_D;

            A = new GBHawk.GBHawk(comm, game_A, rom_A, tempSetA, tempSyncA);
            B = new GBHawk.GBHawk(comm, game_B, rom_B, tempSetB, tempSyncB);
            C = new GBHawk.GBHawk(comm, game_C, rom_C, tempSetC, tempSyncC);
            D = new GBHawk.GBHawk(comm, game_D, rom_D, tempSetD, tempSyncD);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer {
                Header = A.cpu.TraceHeader
            };
            ser.Register(_tracer);

            ServiceProvider = ser;

            _aStates = A.ServiceProvider.GetService <IStatable>();
            _bStates = B.ServiceProvider.GetService <IStatable>();
            _cStates = C.ServiceProvider.GetService <IStatable>();
            _dStates = D.ServiceProvider.GetService <IStatable>();

            SetupMemoryDomains();

            HardReset();
        }
Esempio n. 10
0
        //[CoreConstructor("GB", "GBC")]
        public GBHawkLink4x(CoreComm comm, GameInfo game_A, byte[] rom_A, GameInfo game_B, byte[] rom_B, GameInfo game_C, byte[] rom_C, GameInfo game_D, byte[] rom_D, /*string gameDbFn,*/ object settings, object syncSettings)
        {
            var ser = new BasicServiceProvider(this);

            Link4xSettings     = (GBLink4xSettings)settings ?? new GBLink4xSettings();
            Link4xSyncSettings = (GBLink4xSyncSettings)syncSettings ?? new GBLink4xSyncSettings();
            _controllerDeck    = new GBHawkLink4xControllerDeck(GBHawkLink4xControllerDeck.DefaultControllerName, GBHawkLink4xControllerDeck.DefaultControllerName,
                                                                GBHawkLink4xControllerDeck.DefaultControllerName, GBHawkLink4xControllerDeck.DefaultControllerName);

            CoreComm = comm;

            var temp_set_A = new GBHawk.GBHawk.GBSettings();
            var temp_set_B = new GBHawk.GBHawk.GBSettings();
            var temp_set_C = new GBHawk.GBHawk.GBSettings();
            var temp_set_D = new GBHawk.GBHawk.GBSettings();

            var temp_sync_A = new GBHawk.GBHawk.GBSyncSettings();
            var temp_sync_B = new GBHawk.GBHawk.GBSyncSettings();
            var temp_sync_C = new GBHawk.GBHawk.GBSyncSettings();
            var temp_sync_D = new GBHawk.GBHawk.GBSyncSettings();

            temp_sync_A.ConsoleMode = Link4xSyncSettings.ConsoleMode_A;
            temp_sync_B.ConsoleMode = Link4xSyncSettings.ConsoleMode_B;
            temp_sync_C.ConsoleMode = Link4xSyncSettings.ConsoleMode_C;
            temp_sync_D.ConsoleMode = Link4xSyncSettings.ConsoleMode_D;

            temp_sync_A.GBACGB = Link4xSyncSettings.GBACGB;
            temp_sync_B.GBACGB = Link4xSyncSettings.GBACGB;
            temp_sync_C.GBACGB = Link4xSyncSettings.GBACGB;
            temp_sync_D.GBACGB = Link4xSyncSettings.GBACGB;

            temp_sync_A.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_A;
            temp_sync_B.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_B;
            temp_sync_C.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_C;
            temp_sync_D.RTCInitialTime = Link4xSyncSettings.RTCInitialTime_D;
            temp_sync_A.RTCOffset      = Link4xSyncSettings.RTCOffset_A;
            temp_sync_B.RTCOffset      = Link4xSyncSettings.RTCOffset_B;
            temp_sync_C.RTCOffset      = Link4xSyncSettings.RTCOffset_C;
            temp_sync_D.RTCOffset      = Link4xSyncSettings.RTCOffset_D;

            A = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify)
            {
                CoreFileProvider = comm.CoreFileProvider
            },
                                  game_A, rom_A, temp_set_A, temp_sync_A);

            B = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify)
            {
                CoreFileProvider = comm.CoreFileProvider
            },
                                  game_B, rom_B, temp_set_B, temp_sync_B);

            C = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify)
            {
                CoreFileProvider = comm.CoreFileProvider
            },
                                  game_C, rom_C, temp_set_C, temp_sync_C);

            D = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify)
            {
                CoreFileProvider = comm.CoreFileProvider
            },
                                  game_D, rom_D, temp_set_D, temp_sync_D);

            ser.Register <IVideoProvider>(this);
            ser.Register <ISoundProvider>(this);

            _tracer = new TraceBuffer {
                Header = A.cpu.TraceHeader
            };
            ser.Register <ITraceable>(_tracer);

            ServiceProvider = ser;

            SetupMemoryDomains();

            HardReset();
        }