savestates: dropping support for old formats

savestates older than 3 years aren't supported anymore
This commit is contained in:
Flyinghead 2023-01-31 17:57:54 +01:00
parent b81a6762bc
commit d1ab3461a6
14 changed files with 24 additions and 271 deletions

View File

@ -564,13 +564,6 @@ void deserialize(Deserializer& deser)
deser >> arm::armFiqEnable;
deser >> arm::armMode;
deser >> arm::Arm7Enabled;
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip(256); // cpuBitsSet
deser.skip(1); // intState
deser.skip(1); // stopState
deser.skip(1); // holdState
}
if (deser.version() >= Deserializer::V19)
deser >> arm::arm7ClockTicks;
else

View File

@ -1566,18 +1566,6 @@ void serialize(Serializer& ser)
void deserialize(Deserializer& deser)
{
if (deser.version() < Deserializer::V7_LIBRETRO)
{
deser.skip(4 * 16); // volume_lut
deser.skip(4 * 256 + 768); // tl_lut. Due to a previous bug this is not 4 * (256 + 768)
deser.skip(4 * 64); // AEG_ATT_SPS
deser.skip(4 * 64); // AEG_DSR_SPS
deser.skip(2); // pl
deser.skip(2); // pr
}
bool old_format = (deser.version() >= Deserializer::V5 && deser.version() < Deserializer::V7) || deser.version() < Deserializer::V8_LIBRETRO;
for (ChannelEx& channel : Chans)
{
channel.quiet = true;
@ -1587,94 +1575,35 @@ void deserialize(Deserializer& deser)
deser >> channel.CA;
deser >> channel.step;
if (old_format)
deser.skip<u32>(); // channel.update_rate
channel.UpdatePitch();
deser >> channel.s0;
deser >> channel.s1;
deser >> channel.loop.looped;
if (old_format)
{
deser.skip<u32>(); // channel.loop.LSA
deser.skip<u32>(); // channel.loop.LEA
}
channel.UpdateLoop();
deser >> channel.adpcm.last_quant;
if (!old_format)
{
deser >> channel.adpcm.loopstart_quant;
deser >> channel.adpcm.loopstart_prev_sample;
deser >> channel.adpcm.in_loop;
}
else
{
channel.adpcm.in_loop = true;
channel.adpcm.loopstart_quant = 0;
channel.adpcm.loopstart_prev_sample = 0;
}
deser >> channel.adpcm.loopstart_quant;
deser >> channel.adpcm.loopstart_prev_sample;
deser >> channel.adpcm.in_loop;
deser >> channel.noise_state;
if (old_format)
{
deser.skip<u32>(); // channel.VolMix.DLAtt
deser.skip<u32>(); // channel.VolMix.DRAtt
deser.skip<u32>(); // channel.VolMix.DSPAtt
}
channel.UpdateAtts();
if (old_format)
deser.skip<u32>(); // channel.VolMix.DSPOut
channel.UpdateDSPMIX();
deser >> channel.AEG.val;
deser >> channel.AEG.state;
channel.SetAegState(channel.AEG.state);
if (old_format)
{
deser.skip<u32>(); // channel.AEG.AttackRate
deser.skip<u32>(); // channel.AEG.Decay1Rate
deser.skip<u32>(); // channel.AEG.Decay2Rate
deser.skip<u32>(); // channel.AEG.Decay2Value
deser.skip<u32>(); // channel.AEG.ReleaseRate
}
channel.UpdateAEG();
deser >> channel.FEG.value;
deser >> channel.FEG.state;
if (!old_format)
{
deser >> channel.FEG.prev1;
deser >> channel.FEG.prev2;
}
else
{
channel.FEG.prev1 = 0;
channel.FEG.prev2 = 0;
}
deser >> channel.FEG.prev1;
deser >> channel.FEG.prev2;
channel.SetFegState(channel.FEG.state);
channel.UpdateFEG();
if (old_format)
{
deser.skip<u8>(); // channel.step_stream_lut1
deser.skip<u8>(); // channel.step_stream_lut2
deser.skip<u8>(); // channel.step_stream_lut3
}
channel.UpdateStreamStep();
deser >> channel.lfo.counter;
if (old_format)
deser.skip<u32>(); // channel.lfo.start_value
deser >> channel.lfo.state;
if (old_format)
{
deser.skip<u8>(); // channel.lfo.alfo
deser.skip<u8>(); // channel.lfo.alfo_shft
deser.skip<u8>(); // channel.lfo.plfo
deser.skip<u8>(); // channel.lfo.plfo_shft
deser.skip<u8>(); // channel.lfo.alfo_calc_lut
deser.skip<u8>(); // channel.lfo.plfo_calc_lut
}
channel.UpdateLFO(true);
deser >> channel.enabled;
if (old_format)
deser.skip<u32>(); // channel.ChannelNumber
channel.quiet = false;
}
if (deser.version() >= Deserializer::V22)
@ -1691,11 +1620,6 @@ void deserialize(Deserializer& deser)
}
deser >> cdda_sector;
deser >> cdda_index;
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip(4 * 64); // mxlr
deser.skip(4); // samples_gen
}
midiSendBuffer.clear();
if (deser.version() >= Deserializer::V28)
{

View File

@ -330,13 +330,11 @@ void serialize(Serializer& ser)
void deserialize(Deserializer& deser)
{
if (deser.version() < Deserializer::V5)
if (deser.version() <= Deserializer::VLAST_LIBRETRO)
{
deser.skip<u32>(); // size
deser.skip<u32>(); // mask
}
if (deser.version() >= Deserializer::V5_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
{
// Legacy libretro savestate
if (settings.platform.isArcade())
sys_nvmem->Deserialize(deser);

View File

@ -1399,10 +1399,6 @@ void deserialize(Deserializer& deser)
{
deser >> packet_cmd;
read_buff.cache_size = 0;
// read_buff (old)
if (deser.version() < Deserializer::V9_LIBRETRO
|| (deser.version() >= Deserializer::V5 && deser.version() < Deserializer::V8))
deser.skip(4 + 4 + 2352 * 8192);
}
deser >> pio_buff;
deser >> set_mode_offset;
@ -1422,7 +1418,7 @@ void deserialize(Deserializer& deser)
deser >> SecNumber;
deser >> GDStatus;
deser >> ByteCount;
if (deser.version() >= Deserializer::V5_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
if (deser.version() <= Deserializer::VLAST_LIBRETRO)
deser.skip<u32>(); // GDROM_TICK
}

View File

@ -673,11 +673,6 @@ void naomi_Serialize(Serializer& ser)
}
void naomi_Deserialize(Deserializer& deser)
{
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip<u32>(); // naomi_updates
deser.skip<u32>(); // BoardID
}
deser >> GSerialBuffer;
deser >> BSerialBuffer;
deser >> GBufPos;

View File

@ -496,7 +496,8 @@ void rend_serialize(Serializer& ser)
}
void rend_deserialize(Deserializer& deser)
{
if ((deser.version() >= Deserializer::V12_LIBRETRO && deser.version() < Deserializer::V5) || deser.version() >= Deserializer::V12)
if ((deser.version() >= Deserializer::V12_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
|| deser.version() >= Deserializer::V12)
deser >> fb_w_cur;
else
fb_w_cur = 1;

View File

@ -84,26 +84,13 @@ void serialize(Serializer& ser)
void deserialize(Deserializer& deser)
{
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip<u32>(); // FrameCount
deser.skip<bool>(); // pend_rend
}
YUV_deserialize(deser);
if (deser.version() >= Deserializer::V5_LIBRETRO && deser.version() < Deserializer::V9_LIBRETRO)
deser.skip<bool>(); // fog_needs_update
deser >> pvr_regs;
fog_needs_update = true;
spg_Deserialize(deser);
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip(4 * 256); // ta_type_lut
deser.skip(2048); // ta_fsm
}
rend_deserialize(deser);
deser >> ta_fsm[2048];
@ -112,36 +99,6 @@ void deserialize(Deserializer& deser)
deser >> taRenderPass;
else
taRenderPass = 0;
if (deser.version() >= Deserializer::V5_LIBRETRO && deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip<bool>(); // pal_needs_update
deser.skip(4 * 4); // _pal_rev_256
deser.skip(4 * 64); // _pal_rev_16
deser.skip(4 * 4); // pal_rev_256
deser.skip(4 * 64); // pal_rev_16
deser.skip(4 * 65536 * 3); // decoded_colors
deser.skip(4); // tileclip_val
deser.skip(65536); // f32_su8_tbl
deser.skip(4); // FaceBaseColor
deser.skip(4); // FaceOffsColor
deser.skip(4); // SFaceBaseColor
deser.skip(4); // SFaceOffsColor
deser.skip(4); // palette_index
deser.skip<bool>(); // KillTex
deser.skip(4 * 1024); // palette16_ram
deser.skip(4 * 1024); // palette32_ram
deser.skip(4 * 1024 * 8 * 2); // detwiddle
}
else if (deser.version() <= Deserializer::V4)
{
deser.skip(4);
deser.skip(65536);
deser.skip(4);
deser.skip(4);
deser.skip(4);
deser.skip(4);
}
if (deser.version() >= Deserializer::V11 || (deser.version() >= Deserializer::V10_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO))
DeserializeTAContext(deser);

View File

@ -309,20 +309,7 @@ void spg_Deserialize(Deserializer& deser)
if (deser.version() < Deserializer::V30)
deser.skip<u32>(); // in_vblank
deser >> clc_pvr_scanline;
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser >> pvr_numscanlines;
deser >> prv_cur_scanline;
deser >> vblk_cnt;
deser >> Line_Cycles;
deser >> Frame_Cycles;
deser.skip<double>(); // speed_load_mspdf
deser.skip<u32>(); // mips_counter
deser.skip<double>(); // full_rps
if (deser.version() <= Deserializer::V4)
deser.skip<u32>(); // fskip
}
else if (deser.version() >= Deserializer::V12)
if (deser.version() >= Deserializer::V12)
{
deser >> maple_int_pending;
if (deser.version() >= Deserializer::V14)

View File

@ -232,7 +232,7 @@ static void deserializeContext(Deserializer& deser, TA_context **pctx)
deser.deserialize(tad.thd_root, size);
tad.thd_data = tad.thd_root + size;
if ((deser.version() >= Deserializer::V12 && deser.version() < Deserializer::V26)
|| (deser.version() >= Deserializer::V12_LIBRETRO && deser.version() < Deserializer::V5))
|| (deser.version() >= Deserializer::V12_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO))
{
u32 render_pass_count;
deser >> render_pass_count;

View File

@ -255,8 +255,6 @@ void interrupts_serialize(Serializer& ser)
void interrupts_deserialize(Deserializer& deser)
{
if (deser.version() < Deserializer::V9_LIBRETRO)
deser.skip(2);
deser >> InterruptEnvId;
deser >> InterruptBit;
deser >> InterruptLevelBit;

View File

@ -980,11 +980,6 @@ void deserialize(Deserializer& deser)
deser >> (*p_sh4rcb).sq_buffer;
deser >> (*p_sh4rcb).cntx;
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip<u32>(); // old_rm
deser.skip<u32>(); // old_dn
}
if (deser.version() >= Deserializer::V19 && deser.version() < Deserializer::V21)
deser.skip<u32>(); // sh4InterpCycles
if (deser.version() < Deserializer::V21)
@ -1011,14 +1006,8 @@ void serialize2(Serializer& ser)
void deserialize2(Deserializer& deser)
{
deser >> SCIF_SCFSR2;
if (deser.version() < Deserializer::V9_LIBRETRO
|| (deser.version() >= Deserializer::V5 && deser.version() < Deserializer::V8))
{
deser.skip<bool>(); // SCIF_SCFRDR2
deser.skip<u32>(); // SCIF_SCFDR2
}
else if ((deser.version() >= Deserializer::V11_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
|| deser.version() >= Deserializer::V11)
if (deser.version() >= Deserializer::V11
|| (deser.version() >= Deserializer::V11_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO))
deser >> SCIF_SCSCR2;
deser >> BSC_PDTRA;
@ -1026,24 +1015,9 @@ void deserialize2(Deserializer& deser)
deser >> CCN_QACR_TR;
if (deser.version() < Deserializer::V6_LIBRETRO)
{
for (int i = 0; i < 64; i++)
{
deser >> UTLB[i].Address;
deser >> UTLB[i].Data;
}
for (int i = 0; i < 4; i++)
{
deser >> ITLB[i].Address;
deser >> ITLB[i].Data;
}
}
else
{
deser >> UTLB;
deser >> ITLB;
}
deser >> UTLB;
deser >> ITLB;
if (deser.version() >= Deserializer::V11
|| (deser.version() >= Deserializer::V11_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO))
deser >> sq_remap;

View File

@ -247,9 +247,6 @@ void sh4_sched_deserialize(Deserializer& deser)
if (deser.version() >= Deserializer::V19 && deser.version() <= Deserializer::V31)
deser.skip<u32>(); // sh4_sched_next_id
else if ((deser.version() >= Deserializer::V5 && deser.version() < Deserializer::V8)
|| deser.version() < Deserializer::V9_LIBRETRO)
deser.skip<u32>(); // sh4_sched_intr
sh4_sched_deserialize(deser, aica::aica_schid);
sh4_sched_deserialize(deser, aica::rtc_schid);
@ -260,12 +257,4 @@ void sh4_sched_deserialize(Deserializer& deser)
sh4_sched_deserialize(deser, id);
sh4_sched_deserialize(deser, render_end_schid);
sh4_sched_deserialize(deser, vblank_schid);
if ((deser.version() >= Deserializer::V5 && deser.version() < Deserializer::V8)
|| deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip<u32>(); // sch_list[time_sync].tag
deser.skip<u32>(); // sch_list[time_sync].start
deser.skip<u32>(); // sch_list[time_sync].end
}
}

View File

@ -99,44 +99,20 @@ static void dc_deserialize_libretro(Deserializer& deser)
naomi_Deserialize(deser);
if (deser.version() < Deserializer::V9_LIBRETRO)
{
deser.skip<u32>(); // cycle_counter
deser.skip<u32>(); // idxnxx
deser.skip(44); // sizeof(state_t)
deser.skip<u32>(); // div_som_reg1
deser.skip<u32>(); // div_som_reg2
deser.skip<u32>(); // div_som_reg3
deser.skip<u32>(); // LastAddr
deser.skip<u32>(); // LastAddr_min
deser.skip(1024); // block_hash
// RegisterRead, RegisterWrite
for (int i = 0; i < 74; i++) // sh4_reg_count (changed to 75 on 9/6/2020 (V9), V10 on 22/6/2020)
{
deser.skip(4);
deser.skip(4);
}
deser.skip<u32>(); // fallback_blocks
deser.skip<u32>(); // total_blocks
deser.skip<u32>(); // REMOVED_OPS
}
deser >> config::Broadcast.get();
deser >> config::Cable.get();
deser >> config::Region.get();
if (CurrentCartridge != nullptr && (!settings.platform.isAtomiswave() || deser.version() >= Deserializer::V10_LIBRETRO))
CurrentCartridge->Deserialize(deser);
if (deser.version() >= Deserializer::V7_LIBRETRO)
gd_hle_state.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::V5_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
if (deser.version() >= Deserializer::V9_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO)
{
dc_deserialize_libretro(deser);
sh4_sched_ffts();
@ -173,29 +149,6 @@ void dc_deserialize(Deserializer& deser)
naomi_Deserialize(deser);
if (deser.version() < Deserializer::V5)
{
deser.skip<u32>(); // idxnxx
deser.skip(44); // sizeof(state_t)
deser.skip(4);
deser.skip(4);
deser.skip(4);
deser.skip(4);
deser.skip(4);
deser.skip(1024);
deser.skip(8 * 74); // sh4_reg_count
deser.skip(4);
deser.skip(4);
deser.skip(4);
deser.skip(2 * 4);
deser.skip(4);
deser.skip(4);
deser.skip(4 * 4);
deser.skip(4);
deser.skip(4);
}
deser >> config::Broadcast.get();
verify(config::Broadcast <= 4);
deser >> config::Cable.get();
@ -205,8 +158,7 @@ void dc_deserialize(Deserializer& deser)
if (CurrentCartridge != NULL)
CurrentCartridge->Deserialize(deser);
if (deser.version() >= Deserializer::V6)
gd_hle_state.Deserialize(deser);
gd_hle_state.Deserialize(deser);
sh4_sched_ffts();
DEBUG_LOG(SAVESTATE, "Loaded %d bytes", (u32)deser.size());

View File

@ -26,25 +26,14 @@ class SerializeBase
{
public:
enum Version : int32_t {
V1,
V2,
V3,
V4,
V5_LIBRETRO,
V6_LIBRETRO,
V7_LIBRETRO,
V8_LIBRETRO,
V9_LIBRETRO,
V9_LIBRETRO = 8,
V10_LIBRETRO,
V11_LIBRETRO,
V12_LIBRETRO,
V13_LIBRETRO,
VLAST_LIBRETRO = V13_LIBRETRO,
V5 = 800,
V6,
V7,
V8,
V8 = 803,
V9,
V10,
V11,
@ -99,7 +88,7 @@ public:
: SerializeBase(limit, rollback), data((const u8 *)data)
{
deserialize(_version);
if (_version > V13_LIBRETRO && _version < V5)
if (_version < V9_LIBRETRO || (_version > V13_LIBRETRO && _version < V8))
throw Exception("Unsupported version");
if (_version > Current)
throw Exception("Version too recent");
@ -230,7 +219,7 @@ void register_deserialize(T& regs, Deserializer& deser)
{
for (auto& reg : regs)
{
if (deser.version() < Deserializer::V5)
if (deser.version() <= Deserializer::VLAST_LIBRETRO)
deser.skip<u32>(); // regs.data[i].flags
if (!(reg.flags & REG_RF))
deser >> reg.data32;