libsnes-gain the ability to serialize const arrays: useful for emitting comments in savestates, which is helpful for debugging. note to self: add a serializer for bools which transforms to 0 or 1
This commit is contained in:
parent
db37a6f64f
commit
7722344e55
|
@ -64,11 +64,26 @@ namespace nall {
|
|||
}
|
||||
}
|
||||
|
||||
template<typename T> void integer(const T &value) {
|
||||
enum { size = std::is_same<bool, T>::value ? 1 : sizeof(T) };
|
||||
if(imode == Save) {
|
||||
for(unsigned n = 0; n < size; n++) idata[isize++] = (uintmax_t)value >> (n << 3);
|
||||
} else if(imode == Load) {
|
||||
} else if(imode == Size) {
|
||||
isize += size;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T> void array(T &array) {
|
||||
enum { size = sizeof(T) / sizeof(typename std::remove_extent<T>::type) };
|
||||
for(unsigned n = 0; n < size; n++) integer(array[n]);
|
||||
}
|
||||
|
||||
template<typename T> void array(const T &array) {
|
||||
enum { size = sizeof(T) / sizeof(typename std::remove_extent<T>::type) };
|
||||
for(unsigned n = 0; n < size; n++) integer(array[n]);
|
||||
}
|
||||
|
||||
template<typename T> void array(T array, unsigned size) {
|
||||
for(unsigned n = 0; n < size; n++) integer(array[n]);
|
||||
}
|
||||
|
|
|
@ -48,29 +48,53 @@ void System::serialize(serializer &s) {
|
|||
s.integer((unsigned&)expansion);
|
||||
}
|
||||
|
||||
//zero 01-dec-2012 - these will embed strings in the savestates, so you can debug them more easily. but itll break the savestate format
|
||||
//#define DEBUGSAVESTATE(X) s.array(#X)
|
||||
#define DEBUGSAVESTATE(X)
|
||||
|
||||
void System::serialize_all(serializer &s) {
|
||||
cartridge.serialize(s);
|
||||
system.serialize(s);
|
||||
random.serialize(s);
|
||||
cpu.serialize(s);
|
||||
DEBUGSAVESTATE(cart);
|
||||
cartridge.serialize(s);
|
||||
DEBUGSAVESTATE(system);
|
||||
system.serialize(s);
|
||||
DEBUGSAVESTATE(random);
|
||||
random.serialize(s);
|
||||
DEBUGSAVESTATE(cpu);
|
||||
cpu.serialize(s);
|
||||
DEBUGSAVESTATE(smp);
|
||||
smp.serialize(s);
|
||||
DEBUGSAVESTATE(ppu);
|
||||
ppu.serialize(s);
|
||||
DEBUGSAVESTATE(dsp);
|
||||
dsp.serialize(s);
|
||||
DEBUGSAVESTATE(input);
|
||||
input.serialize(s);
|
||||
|
||||
DEBUGSAVESTATE(sufamiturbo);
|
||||
if(cartridge.mode() == Cartridge::Mode::SufamiTurbo) sufamiturbo.serialize(s);
|
||||
#if defined(GAMEBOY)
|
||||
if(cartridge.mode() == Cartridge::Mode::SuperGameBoy) icd2.serialize(s);
|
||||
#endif
|
||||
if(cartridge.has_superfx()) superfx.serialize(s);
|
||||
if(cartridge.has_sa1()) sa1.serialize(s);
|
||||
if(cartridge.has_necdsp()) necdsp.serialize(s);
|
||||
if(cartridge.has_hitachidsp()) hitachidsp.serialize(s);
|
||||
if(cartridge.has_armdsp()) armdsp.serialize(s);
|
||||
if(cartridge.has_srtc()) srtc.serialize(s);
|
||||
if(cartridge.has_sdd1()) sdd1.serialize(s);
|
||||
if(cartridge.has_spc7110()) spc7110.serialize(s);
|
||||
if(cartridge.has_obc1()) obc1.serialize(s);
|
||||
DEBUGSAVESTATE(icd2);
|
||||
if(cartridge.mode() == Cartridge::Mode::SuperGameBoy) icd2.serialize(s);
|
||||
#endif
|
||||
DEBUGSAVESTATE(superfx);
|
||||
if(cartridge.has_superfx()) superfx.serialize(s);
|
||||
DEBUGSAVESTATE(sa1);
|
||||
if(cartridge.has_sa1()) sa1.serialize(s);
|
||||
DEBUGSAVESTATE(necdsp);
|
||||
if(cartridge.has_necdsp()) necdsp.serialize(s);
|
||||
DEBUGSAVESTATE(hitachidsp);
|
||||
if(cartridge.has_hitachidsp()) hitachidsp.serialize(s);
|
||||
DEBUGSAVESTATE(armdsp);
|
||||
if(cartridge.has_armdsp()) armdsp.serialize(s);
|
||||
DEBUGSAVESTATE(srtc);
|
||||
if(cartridge.has_srtc()) srtc.serialize(s);
|
||||
DEBUGSAVESTATE(sdd1);
|
||||
if(cartridge.has_sdd1()) sdd1.serialize(s);
|
||||
DEBUGSAVESTATE(spc7110);
|
||||
if(cartridge.has_spc7110()) spc7110.serialize(s);
|
||||
DEBUGSAVESTATE(obc1);
|
||||
if(cartridge.has_obc1()) obc1.serialize(s);
|
||||
DEBUGSAVESTATE(msu1);
|
||||
if(cartridge.has_msu1()) msu1.serialize(s);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue