示例#1
0
        private void SaveStateFile(string filename, string name)
        {
            var core = Emulator.AsStatable();

            using (var bs = new BinaryStateSaver(filename))
            {
                if (Global.Config.SaveStateType == Config.SaveStateTypeE.Text ||
                    (Global.Config.SaveStateType == Config.SaveStateTypeE.Default && !core.BinarySaveStatesPreferred))
                {
                    // text savestate format
                    using (new SimpleTime("Save Core"))
                        bs.PutLump(BinaryStateLump.CorestateText, (tw) => core.SaveStateText(tw));
                }
                else
                {
                    // binary core lump format
                    using (new SimpleTime("Save Core"))
                        bs.PutLump(BinaryStateLump.Corestate, bw => core.SaveStateBinary(bw));
                }

                if (true)                 //Global.Config.SaveScreenshotWithStates)
                {
                    var vp   = Emulator.VideoProvider();
                    var buff = vp.GetVideoBuffer();

                    int out_w = vp.BufferWidth;
                    int out_h = vp.BufferHeight;

                    // if buffer is too big, scale down screenshot
                    if (true /* !Global.Config.NoLowResLargeScreenshotWithStates*/ && buff.Length >= Global.Config.BigScreenshotSize)
                    {
                        out_w /= 2;
                        out_h /= 2;
                    }
                    using (new SimpleTime("Save Framebuffer"))
                        bs.PutLump(BinaryStateLump.Framebuffer, (s) => QuickBmpFile.Save(Emulator.VideoProvider(), s, out_w, out_h));
                }

                if (IAmMaster)
                {
                    if (Global.MovieSession.Movie.IsActive)
                    {
                        bs.PutLump(BinaryStateLump.Input,
                                   delegate(TextWriter tw)
                        {
                            // this never should have been a core's responsibility
                            tw.WriteLine("Frame {0}", Emulator.Frame);
                            Global.MovieSession.HandleMovieSaveState(tw);
                        });
                    }
                }
            }
        }
示例#2
0
 public void PopulateFramebuffer(BinaryReader br)
 {
     try
     {
         using (new SimpleTime("Load Framebuffer"))
             QuickBmpFile.Load(Emulator.VideoProvider(), br.BaseStream);
     }
     catch
     {
         var buff = Emulator.VideoProvider().GetVideoBuffer();
         try
         {
             for (int i = 0; i < buff.Length; i++)
             {
                 int j = br.ReadInt32();
                 buff[i] = j;
             }
         }
         catch (EndOfStreamException) { }
     }
 }