2018-09-02 13:49:23 +00:00
|
|
|
// serialize.cpp : save states
|
2021-11-13 14:56:42 +00:00
|
|
|
#include "serialize.h"
|
2018-09-02 13:49:23 +00:00
|
|
|
#include "types.h"
|
2023-01-30 09:40:07 +00:00
|
|
|
#include "hw/aica/aica_if.h"
|
2020-01-25 10:00:34 +00:00
|
|
|
#include "hw/holly/sb.h"
|
2023-01-24 18:17:48 +00:00
|
|
|
#include "hw/flashrom/nvmem.h"
|
2021-01-19 10:11:01 +00:00
|
|
|
#include "hw/gdrom/gdrom_if.h"
|
2018-09-29 14:13:07 +00:00
|
|
|
#include "hw/maple/maple_cfg.h"
|
2021-09-07 14:43:50 +00:00
|
|
|
#include "hw/modem/modem.h"
|
2021-11-13 14:56:42 +00:00
|
|
|
#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"
|
2019-08-19 15:19:27 +00:00
|
|
|
#include "reios/gdrom_hle.h"
|
2021-01-22 14:11:04 +00:00
|
|
|
#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"
|
2021-03-01 09:13:40 +00:00
|
|
|
#include "cfg/option.h"
|
2018-09-02 13:49:23 +00:00
|
|
|
|
|
|
|
//./core/imgread/common.o
|
|
|
|
extern u32 NullDriveDiscType;
|
|
|
|
extern u8 q_subchannel[96];
|
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
void dc_serialize(Serializer& ser)
|
2018-09-02 13:49:23 +00:00
|
|
|
{
|
2023-01-30 09:40:07 +00:00
|
|
|
aica::serialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sb_serialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-01-24 18:17:48 +00:00
|
|
|
nvmem::serialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
gdrom::serialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
mcfg_SerializeDevices(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
pvr::serialize(ser);
|
2019-07-12 15:20:43 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4::serialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
ser << config::EmulateBBA.get();
|
2021-03-01 09:13:40 +00:00
|
|
|
if (config::EmulateBBA)
|
2021-11-13 14:56:42 +00:00
|
|
|
bba_Serialize(ser);
|
|
|
|
ModemSerialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4::serialize2(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
ser << NullDriveDiscType;
|
|
|
|
ser << q_subchannel;
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
naomi_Serialize(ser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
ser << config::Broadcast.get();
|
|
|
|
ser << config::Cable.get();
|
|
|
|
ser << config::Region.get();
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-02-19 12:51:23 +00:00
|
|
|
naomi_cart_serialize(ser);
|
2021-11-13 14:56:42 +00:00
|
|
|
gd_hle_state.Serialize(ser);
|
2019-07-12 15:20:43 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
DEBUG_LOG(SAVESTATE, "Saved %d bytes", (u32)ser.size());
|
2018-09-02 13:49:23 +00:00
|
|
|
}
|
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
static void dc_deserialize_libretro(Deserializer& deser)
|
2019-02-03 16:54:11 +00:00
|
|
|
{
|
2023-01-30 09:40:07 +00:00
|
|
|
aica::deserialize(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sb_deserialize(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2023-01-24 18:17:48 +00:00
|
|
|
nvmem::deserialize(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
gdrom::deserialize(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
mcfg_DeserializeDevices(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
pvr::deserialize(deser);
|
2021-09-07 14:43:50 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4::deserialize(deser);
|
2021-07-10 15:39:16 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
if (deser.version() >= Deserializer::V13_LIBRETRO)
|
|
|
|
deser.skip<bool>(); // settings.network.EmulateBBA
|
2023-01-31 09:13:03 +00:00
|
|
|
config::EmulateBBA.override(false);
|
2021-07-10 15:39:16 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
ModemDeserialize(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4::deserialize2(deser);
|
2021-11-13 14:56:42 +00:00
|
|
|
|
|
|
|
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
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
naomi_Deserialize(deser);
|
|
|
|
|
|
|
|
deser >> config::Broadcast.get();
|
|
|
|
deser >> config::Cable.get();
|
|
|
|
deser >> config::Region.get();
|
|
|
|
|
2023-02-19 12:51:23 +00:00
|
|
|
naomi_cart_deserialize(deser);
|
2023-01-31 16:57:54 +00:00
|
|
|
gd_hle_state.Deserialize(deser);
|
2019-02-03 16:54:11 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
DEBUG_LOG(SAVESTATE, "Loaded %d bytes (libretro compat)", (u32)deser.size());
|
2019-02-03 16:54:11 +00:00
|
|
|
}
|
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
void dc_deserialize(Deserializer& deser)
|
2018-09-02 13:49:23 +00:00
|
|
|
{
|
2023-01-31 16:57:54 +00:00
|
|
|
if (deser.version() >= Deserializer::V9_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
|
2021-11-13 14:56:42 +00:00
|
|
|
{
|
|
|
|
dc_deserialize_libretro(deser);
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4_sched_ffts();
|
2021-11-13 14:56:42 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
DEBUG_LOG(SAVESTATE, "Loading state version %d", deser.version());
|
|
|
|
|
2023-01-30 09:40:07 +00:00
|
|
|
aica::deserialize(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sb_deserialize(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-01-24 18:17:48 +00:00
|
|
|
nvmem::deserialize(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
gdrom::deserialize(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
mcfg_DeserializeDevices(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
pvr::deserialize(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4::deserialize(deser);
|
2018-09-02 13:49:23 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
if (deser.version() >= Deserializer::V13)
|
|
|
|
deser >> config::EmulateBBA.get();
|
2021-01-02 20:19:50 +00:00
|
|
|
else
|
2021-03-01 09:13:40 +00:00
|
|
|
config::EmulateBBA.override(false);
|
|
|
|
if (config::EmulateBBA)
|
2021-11-13 14:56:42 +00:00
|
|
|
bba_Deserialize(deser);
|
|
|
|
ModemDeserialize(deser);
|
|
|
|
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4::deserialize2(deser);
|
2021-11-13 14:56:42 +00:00
|
|
|
|
|
|
|
deser >> NullDriveDiscType;
|
|
|
|
deser >> q_subchannel;
|
|
|
|
|
|
|
|
naomi_Deserialize(deser);
|
|
|
|
|
|
|
|
deser >> config::Broadcast.get();
|
2021-03-01 09:13:40 +00:00
|
|
|
verify(config::Broadcast <= 4);
|
2021-11-13 14:56:42 +00:00
|
|
|
deser >> config::Cable.get();
|
2021-03-01 09:13:40 +00:00
|
|
|
verify(config::Cable <= 3);
|
2021-11-13 14:56:42 +00:00
|
|
|
deser >> config::Region.get();
|
2021-03-01 09:13:40 +00:00
|
|
|
verify(config::Region <= 3);
|
2018-09-29 14:34:58 +00:00
|
|
|
|
2023-02-19 12:51:23 +00:00
|
|
|
naomi_cart_deserialize(deser);
|
2023-01-31 16:57:54 +00:00
|
|
|
gd_hle_state.Deserialize(deser);
|
2023-01-31 09:13:03 +00:00
|
|
|
sh4_sched_ffts();
|
2019-07-12 15:20:43 +00:00
|
|
|
|
2021-11-13 14:56:42 +00:00
|
|
|
DEBUG_LOG(SAVESTATE, "Loaded %d bytes", (u32)deser.size());
|
2018-09-02 13:49:23 +00:00
|
|
|
}
|