예제 #1
0
        public bool PutSettings(NESSettings o)
        {
            Settings = o;
            if (Settings.ClipLeftAndRight)
            {
                videoProvider.left  = 8;
                videoProvider.right = 247;
            }
            else
            {
                videoProvider.left  = 0;
                videoProvider.right = 255;
            }

            CoreComm.ScreenLogicalOffsetX = videoProvider.left;
            CoreComm.ScreenLogicalOffsetY = Region == DisplayType.NTSC ? Settings.NTSC_TopLine : Settings.PAL_TopLine;

            SetPalette(Settings.Palette);

            apu.Square1V  = Settings.Square1;
            apu.Square2V  = Settings.Square2;
            apu.TriangleV = Settings.Triangle;
            apu.NoiseV    = Settings.Noise;
            apu.DMCV      = Settings.DMC;

            return(false);
        }
예제 #2
0
        public bool PutSettings(NESSettings o)
        {
            Settings = o;
            if (Settings.ClipLeftAndRight)
            {
                videoProvider.left = 8;
                videoProvider.right = 247;
            }
            else
            {
                videoProvider.left = 0;
                videoProvider.right = 255;
            }

            CoreComm.ScreenLogicalOffsetX = videoProvider.left;
            CoreComm.ScreenLogicalOffsetY = DisplayType == DisplayType.NTSC ? Settings.NTSC_TopLine : Settings.PAL_TopLine;

            SetPalette(Settings.Palette);

            apu.Square1V = Settings.Square1;
            apu.Square2V = Settings.Square2;
            apu.TriangleV = Settings.Triangle;
            apu.NoiseV = Settings.Noise;
            apu.DMCV = Settings.DMC;

            return false;
        }
예제 #3
0
        public NES(CoreComm comm, GameInfo game, byte[] rom, NESSettings settings, NESSyncSettings syncSettings)
        {
            var ser = new BasicServiceProvider(this);

            ServiceProvider = ser;

            byte[] fdsBios = comm.CoreFileProvider.GetFirmware("NES", "Bios_FDS", false);
            if (fdsBios != null && fdsBios.Length == 40976)
            {
                comm.ShowMessage("Your FDS BIOS is a bad dump.  BizHawk will attempt to use it, but no guarantees!  You should find a new one.");
                var tmp = new byte[8192];
                Buffer.BlockCopy(fdsBios, 16 + 8192 * 3, tmp, 0, 8192);
                fdsBios = tmp;
            }

            SyncSettings       = (NESSyncSettings)syncSettings ?? new NESSyncSettings();
            ControllerSettings = SyncSettings.Controls;

            videoProvider = new MyVideoProvider(this);
            Init(game, rom, fdsBios);
            if (Board is FDS fds)
            {
                DriveLightEnabled = true;
                fds.SetDriveLightCallback(val => DriveLightOn = val);
                // bit of a hack: we don't have a private gamedb for FDS, but the frontend
                // expects this to be set.
                RomStatus = game.Status;
            }
            PutSettings((NESSettings)settings ?? new NESSettings());

            // we need to put this here because the line directly above will overwrite palette intialization anywhere else
            // TODO: What if settings are later loaded?
            if (_isVS)
            {
                PickVSPalette(cart);
            }

            ser.Register <IDisassemblable>(cpu);

            Tracer = new TraceBuffer {
                Header = cpu.TraceHeader
            };
            ser.Register <ITraceable>(Tracer);
            ser.Register <IVideoProvider>(videoProvider);
            ser.Register <ISoundProvider>(this);
            ser.Register <IStatable>(new StateSerializer(SyncState)
            {
                LoadStateCallback = SetupMemoryDomains
            });

            if (Board is BANDAI_FCG_1 bandai)
            {
                var reader = bandai.reader;
                // not all BANDAI FCG 1 boards have a barcode reader
                if (reader != null)
                {
                    ser.Register(reader);
                }
            }
        }
        public PutSettingsDirtyBits PutSettings(NESSettings o)
        {
            Settings = o;
            if (Settings.ClipLeftAndRight)
            {
                videoProvider.left  = 8;
                videoProvider.right = 247;
            }
            else
            {
                videoProvider.left  = 0;
                videoProvider.right = 255;
            }

            SetPalette(Settings.Palette);

            apu.m_vol = Settings.APU_vol;

            return(PutSettingsDirtyBits.None);
        }
예제 #5
0
        public bool PutSettings(NESSettings o)
        {
            Settings = o;
            if (Settings.ClipLeftAndRight)
            {
                videoProvider.left  = 8;
                videoProvider.right = 247;
            }
            else
            {
                videoProvider.left  = 0;
                videoProvider.right = 255;
            }

            CoreComm.ScreenLogicalOffsetX = videoProvider.left;
            CoreComm.ScreenLogicalOffsetY = Region == DisplayType.NTSC ? Settings.NTSC_TopLine : Settings.PAL_TopLine;

            SetPalette(Settings.Palette);

            apu.m_vol = Settings.APU_vol;

            return(false);
        }