// serialize.cpp : save states #include "serialize.h" #include "types.h" #include "hw/aica/aica_if.h" #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" #include "hw/sh4/sh4_sched.h" #include "hw/sh4/sh4_mmr.h" #include "reios/gdrom_hle.h" #include "hw/naomi/naomi.h" #include "hw/naomi/naomi_cart.h" #include "hw/bba/bba.h" #include "cfg/option.h" //./core/imgread/common.o extern u32 NullDriveDiscType; extern u8 q_subchannel[96]; void dc_serialize(Serializer& ser) { aica::serialize(ser); sb_serialize(ser); nvmem::serialize(ser); gdrom::serialize(ser); mcfg_SerializeDevices(ser); pvr::serialize(ser); sh4::serialize(ser); ser << config::EmulateBBA.get(); if (config::EmulateBBA) bba_Serialize(ser); ModemSerialize(ser); sh4::serialize2(ser); ser << NullDriveDiscType; ser << q_subchannel; naomi_Serialize(ser); ser << config::Broadcast.get(); ser << config::Cable.get(); ser << config::Region.get(); naomi_cart_serialize(ser); gd_hle_state.Serialize(ser); DEBUG_LOG(SAVESTATE, "Saved %d bytes", (u32)ser.size()); } 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(); // settings.network.EmulateBBA config::EmulateBBA.override(false); ModemDeserialize(deser); sh4::deserialize2(deser); deser >> NullDriveDiscType; deser >> q_subchannel; deser.skip(); // FLASH_SIZE deser.skip(); // BBSRAM_SIZE deser.skip(); // BIOS_SIZE deser.skip(); // RAM_SIZE deser.skip(); // ARAM_SIZE deser.skip(); // VRAM_SIZE deser.skip(); // RAM_MASK deser.skip(); // ARAM_MASK deser.skip(); // 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) { 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); sb_deserialize(deser); nvmem::deserialize(deser); gdrom::deserialize(deser); mcfg_DeserializeDevices(deser); pvr::deserialize(deser); sh4::deserialize(deser); if (deser.version() >= Deserializer::V13) deser >> config::EmulateBBA.get(); 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()); }