public void SaveState() { // We stop pause the simulation Pause(); SaveStateFileFormat saveState = new SaveStateFileFormat(); // We ge the states saveState.MemoryState = _memory.GetState(); saveState.DisplayState = _display.GetState(); saveState.InterruptState = _interruptController.GetState(); saveState.CPUState = _cpu.GetState(); saveState.APUState = _apu.GetState(); FileStream saveStateStream; string filename = "save_state.stt"; if (!File.Exists(filename)) { saveStateStream = File.Create(filename); } else { try { saveStateStream = File.Open(filename, FileMode.Truncate); } catch (IOException) { Run(); return; } } // We compress the state using (GZipStream compressStream = new GZipStream(saveStateStream, CompressionMode.Compress)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(compressStream, saveState); } saveStateStream.Close(); Run(); }