flycast/core/serialize.cpp

162 lines
3.3 KiB
C++
Raw Normal View History

2018-09-02 13:49:23 +00:00
// serialize.cpp : save states
#include "serialize.h"
2018-09-02 13:49:23 +00:00
#include "types.h"
#include "hw/aica/aica_if.h"
2020-01-25 10:00:34 +00:00
#include "hw/holly/sb.h"
#include "hw/flashrom/nvmem.h"
#include "hw/gdrom/gdrom_if.h"
#include "hw/maple/maple_cfg.h"
#include "hw/modem/modem.h"
#include "hw/pvr/pvr.h"
2018-09-02 13:49:23 +00:00
#include "hw/sh4/sh4_sched.h"
#include "hw/sh4/sh4_mmr.h"
#include "reios/gdrom_hle.h"
#include "hw/naomi/naomi.h"
2018-11-06 16:54:54 +00:00
#include "hw/naomi/naomi_cart.h"
2021-01-02 20:19:50 +00:00
#include "hw/bba/bba.h"
#include "cfg/option.h"
2018-09-02 13:49:23 +00:00
//./core/imgread/common.o
extern u32 NullDriveDiscType;
extern u8 q_subchannel[96];
void dc_serialize(Serializer& ser)
2018-09-02 13:49:23 +00:00
{
aica::serialize(ser);
2018-09-02 13:49:23 +00:00
sb_serialize(ser);
2018-09-02 13:49:23 +00:00
nvmem::serialize(ser);
2018-09-02 13:49:23 +00:00
gdrom::serialize(ser);
2018-09-02 13:49:23 +00:00
mcfg_SerializeDevices(ser);
2018-09-02 13:49:23 +00:00
pvr::serialize(ser);
sh4::serialize(ser);
2018-09-02 13:49:23 +00:00
ser << config::EmulateBBA.get();
if (config::EmulateBBA)
bba_Serialize(ser);
ModemSerialize(ser);
2018-09-02 13:49:23 +00:00
sh4::serialize2(ser);
2018-09-02 13:49:23 +00:00
ser << NullDriveDiscType;
ser << q_subchannel;
2018-09-02 13:49:23 +00:00
naomi_Serialize(ser);
2018-09-02 13:49:23 +00:00
ser << config::Broadcast.get();
ser << config::Cable.get();
ser << config::Region.get();
2018-09-02 13:49:23 +00:00
naomi_cart_serialize(ser);
gd_hle_state.Serialize(ser);
DEBUG_LOG(SAVESTATE, "Saved %d bytes", (u32)ser.size());
2018-09-02 13:49:23 +00:00
}
static void dc_deserialize_libretro(Deserializer& deser)
{
aica::deserialize(deser);
sb_deserialize(deser);
nvmem::deserialize(deser);
gdrom::deserialize(deser);
mcfg_DeserializeDevices(deser);
pvr::deserialize(deser);
sh4::deserialize(deser);
if (deser.version() >= Deserializer::V13_LIBRETRO)
deser.skip<bool>(); // settings.network.EmulateBBA
config::EmulateBBA.override(false);
ModemDeserialize(deser);
sh4::deserialize2(deser);
deser >> NullDriveDiscType;
deser >> q_subchannel;
deser.skip<u32>(); // FLASH_SIZE
deser.skip<u32>(); // BBSRAM_SIZE
deser.skip<u32>(); // BIOS_SIZE
deser.skip<u32>(); // RAM_SIZE
deser.skip<u32>(); // ARAM_SIZE
deser.skip<u32>(); // VRAM_SIZE
deser.skip<u32>(); // RAM_MASK
deser.skip<u32>(); // ARAM_MASK
deser.skip<u32>(); // VRAM_MASK
naomi_Deserialize(deser);
deser >> config::Broadcast.get();
deser >> config::Cable.get();
deser >> config::Region.get();
naomi_cart_deserialize(deser);
gd_hle_state.Deserialize(deser);
DEBUG_LOG(SAVESTATE, "Loaded %d bytes (libretro compat)", (u32)deser.size());
}
void dc_deserialize(Deserializer& deser)
2018-09-02 13:49:23 +00:00
{
if (deser.version() >= Deserializer::V9_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
{
dc_deserialize_libretro(deser);
sh4_sched_ffts();
return;
}
DEBUG_LOG(SAVESTATE, "Loading state version %d", deser.version());
aica::deserialize(deser);
2018-09-02 13:49:23 +00:00
sb_deserialize(deser);
2018-09-02 13:49:23 +00:00
nvmem::deserialize(deser);
2018-09-02 13:49:23 +00:00
gdrom::deserialize(deser);
2018-09-02 13:49:23 +00:00
mcfg_DeserializeDevices(deser);
2018-09-02 13:49:23 +00:00
pvr::deserialize(deser);
2018-09-02 13:49:23 +00:00
sh4::deserialize(deser);
2018-09-02 13:49:23 +00:00
if (deser.version() >= Deserializer::V13)
deser >> config::EmulateBBA.get();
2021-01-02 20:19:50 +00:00
else
config::EmulateBBA.override(false);
if (config::EmulateBBA)
bba_Deserialize(deser);
ModemDeserialize(deser);
sh4::deserialize2(deser);
deser >> NullDriveDiscType;
deser >> q_subchannel;
naomi_Deserialize(deser);
deser >> config::Broadcast.get();
verify(config::Broadcast <= 4);
deser >> config::Cable.get();
verify(config::Cable <= 3);
deser >> config::Region.get();
verify(config::Region <= 3);
naomi_cart_deserialize(deser);
gd_hle_state.Deserialize(deser);
sh4_sched_ffts();
DEBUG_LOG(SAVESTATE, "Loaded %d bytes", (u32)deser.size());
2018-09-02 13:49:23 +00:00
}