Path: blob/master/libsnes/bsnes/snes/system/serialization.cpp
2 views
#ifdef SYSTEM_CPP12serializer System::serialize() {3serializer s(serialize_size);45unsigned signature = 0x31545342, version = Info::SerializerVersion, crc32 = cartridge.crc32();6char description[512], profile[16];7memset(&description, 0, sizeof description);8memset(&profile, 0, sizeof profile);9strmcpy(profile, Info::Profile, sizeof profile);1011s.integer(signature);12s.integer(version);13s.integer(crc32);14s.array(description);15s.array(profile);1617serialize_all(s);18return s;19}2021bool System::unserialize(serializer &s) {22unsigned signature, version, crc32;23char description[512], profile[16];2425s.integer(signature);26s.integer(version);27s.integer(crc32);28s.array(description);29s.array(profile);3031if(signature != 0x31545342) return false;32if(version != Info::SerializerVersion) return false;33//if(crc32 != cartridge.crc32()) return false;34if(strcmp(profile, Info::Profile)) return false;3536power();37serialize_all(s);38return true;39}4041//========42//internal43//========4445void System::serialize(serializer &s) {46s.integer((unsigned&)region);47s.integer((unsigned&)expansion);48}4950//zero 01-dec-2012 - these will embed strings in the savestates, so you can debug them more easily. but itll break the savestate format51//#define DEBUGSAVESTATE(X) s.array(#X)52#define DEBUGSAVESTATE(X)5354void System::serialize_all(serializer &s) {55DEBUGSAVESTATE(cart);56cartridge.serialize(s);57DEBUGSAVESTATE(system);58system.serialize(s);59DEBUGSAVESTATE(random);60random.serialize(s);61DEBUGSAVESTATE(cpu);62cpu.serialize(s);63DEBUGSAVESTATE(smp);64smp.serialize(s);65DEBUGSAVESTATE(ppu);66ppu.serialize(s);67DEBUGSAVESTATE(dsp);68dsp.serialize(s);69DEBUGSAVESTATE(input);70input.serialize(s);7172DEBUGSAVESTATE(sufamiturbo);73if(cartridge.mode() == Cartridge::Mode::SufamiTurbo) sufamiturbo.serialize(s);74#if defined(GAMEBOY)75DEBUGSAVESTATE(icd2);76if(cartridge.mode() == Cartridge::Mode::SuperGameBoy) icd2.serialize(s);77#endif78DEBUGSAVESTATE(superfx);79if(cartridge.has_superfx()) superfx.serialize(s);80DEBUGSAVESTATE(sa1);81if(cartridge.has_sa1()) sa1.serialize(s);82DEBUGSAVESTATE(necdsp);83if(cartridge.has_necdsp()) necdsp.serialize(s);84DEBUGSAVESTATE(hitachidsp);85if(cartridge.has_hitachidsp()) hitachidsp.serialize(s);86DEBUGSAVESTATE(armdsp);87if(cartridge.has_armdsp()) armdsp.serialize(s);88DEBUGSAVESTATE(srtc);89if(cartridge.has_srtc()) srtc.serialize(s);90DEBUGSAVESTATE(sdd1);91if(cartridge.has_sdd1()) sdd1.serialize(s);92DEBUGSAVESTATE(spc7110);93if(cartridge.has_spc7110()) spc7110.serialize(s);94DEBUGSAVESTATE(obc1);95if(cartridge.has_obc1()) obc1.serialize(s);96DEBUGSAVESTATE(msu1);97if(cartridge.has_msu1()) msu1.serialize(s);98}99100//perform dry-run state save:101//determines exactly how many bytes are needed to save state for this cartridge,102//as amount varies per game (eg different RAM sizes, special chips, etc.)103void System::serialize_init() {104serializer s;105106unsigned signature = 0, version = 0, crc32 = 0;107char profile[16], description[512];108109s.integer(signature);110s.integer(version);111s.integer(crc32);112s.array(profile);113s.array(description);114115serialize_all(s);116serialize_size = s.size();117}118119#endif120121122