From d1ab3461a6629ac252265f9ee937b09dcad1f220 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Tue, 31 Jan 2023 17:57:54 +0100 Subject: [PATCH] savestates: dropping support for old formats savestates older than 3 years aren't supported anymore --- core/hw/aica/aica_if.cpp | 7 --- core/hw/aica/sgc_if.cpp | 86 ++-------------------------------- core/hw/flashrom/nvmem.cpp | 6 +-- core/hw/gdrom/gdromv3.cpp | 6 +-- core/hw/naomi/naomi.cpp | 5 -- core/hw/pvr/Renderer_if.cpp | 3 +- core/hw/pvr/pvr.cpp | 43 ----------------- core/hw/pvr/spg.cpp | 15 +----- core/hw/pvr/ta_ctx.cpp | 2 +- core/hw/sh4/sh4_interrupts.cpp | 2 - core/hw/sh4/sh4_mmr.cpp | 36 ++------------ core/hw/sh4/sh4_sched.cpp | 11 ----- core/serialize.cpp | 54 ++------------------- core/serialize.h | 19 ++------ 14 files changed, 24 insertions(+), 271 deletions(-) diff --git a/core/hw/aica/aica_if.cpp b/core/hw/aica/aica_if.cpp index 0a21a4e5d..4ed8fdafa 100644 --- a/core/hw/aica/aica_if.cpp +++ b/core/hw/aica/aica_if.cpp @@ -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 diff --git a/core/hw/aica/sgc_if.cpp b/core/hw/aica/sgc_if.cpp index 7458749c4..97f64cc27 100755 --- a/core/hw/aica/sgc_if.cpp +++ b/core/hw/aica/sgc_if.cpp @@ -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(); // channel.update_rate channel.UpdatePitch(); deser >> channel.s0; deser >> channel.s1; deser >> channel.loop.looped; - if (old_format) - { - deser.skip(); // channel.loop.LSA - deser.skip(); // 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(); // channel.VolMix.DLAtt - deser.skip(); // channel.VolMix.DRAtt - deser.skip(); // channel.VolMix.DSPAtt - } channel.UpdateAtts(); - if (old_format) - deser.skip(); // channel.VolMix.DSPOut channel.UpdateDSPMIX(); deser >> channel.AEG.val; deser >> channel.AEG.state; channel.SetAegState(channel.AEG.state); - if (old_format) - { - deser.skip(); // channel.AEG.AttackRate - deser.skip(); // channel.AEG.Decay1Rate - deser.skip(); // channel.AEG.Decay2Rate - deser.skip(); // channel.AEG.Decay2Value - deser.skip(); // 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(); // channel.step_stream_lut1 - deser.skip(); // channel.step_stream_lut2 - deser.skip(); // channel.step_stream_lut3 - } channel.UpdateStreamStep(); deser >> channel.lfo.counter; - if (old_format) - deser.skip(); // channel.lfo.start_value deser >> channel.lfo.state; - if (old_format) - { - deser.skip(); // channel.lfo.alfo - deser.skip(); // channel.lfo.alfo_shft - deser.skip(); // channel.lfo.plfo - deser.skip(); // channel.lfo.plfo_shft - deser.skip(); // channel.lfo.alfo_calc_lut - deser.skip(); // channel.lfo.plfo_calc_lut - } channel.UpdateLFO(true); deser >> channel.enabled; - if (old_format) - deser.skip(); // 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) { diff --git a/core/hw/flashrom/nvmem.cpp b/core/hw/flashrom/nvmem.cpp index b26ea1b20..916a9119b 100644 --- a/core/hw/flashrom/nvmem.cpp +++ b/core/hw/flashrom/nvmem.cpp @@ -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(); // size deser.skip(); // mask - } - if (deser.version() >= Deserializer::V5_LIBRETRO && deser.version() <= Deserializer::VLAST_LIBRETRO) - { + // Legacy libretro savestate if (settings.platform.isArcade()) sys_nvmem->Deserialize(deser); diff --git a/core/hw/gdrom/gdromv3.cpp b/core/hw/gdrom/gdromv3.cpp index e40cf0884..30205860b 100644 --- a/core/hw/gdrom/gdromv3.cpp +++ b/core/hw/gdrom/gdromv3.cpp @@ -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(); // GDROM_TICK } diff --git a/core/hw/naomi/naomi.cpp b/core/hw/naomi/naomi.cpp index 4222c41f6..cd5e4ed1f 100644 --- a/core/hw/naomi/naomi.cpp +++ b/core/hw/naomi/naomi.cpp @@ -673,11 +673,6 @@ void naomi_Serialize(Serializer& ser) } void naomi_Deserialize(Deserializer& deser) { - if (deser.version() < Deserializer::V9_LIBRETRO) - { - deser.skip(); // naomi_updates - deser.skip(); // BoardID - } deser >> GSerialBuffer; deser >> BSerialBuffer; deser >> GBufPos; diff --git a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp index 6d570051d..f4fc12342 100644 --- a/core/hw/pvr/Renderer_if.cpp +++ b/core/hw/pvr/Renderer_if.cpp @@ -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; diff --git a/core/hw/pvr/pvr.cpp b/core/hw/pvr/pvr.cpp index 57903c849..c267db300 100644 --- a/core/hw/pvr/pvr.cpp +++ b/core/hw/pvr/pvr.cpp @@ -84,26 +84,13 @@ void serialize(Serializer& ser) void deserialize(Deserializer& deser) { - if (deser.version() < Deserializer::V9_LIBRETRO) - { - deser.skip(); // FrameCount - deser.skip(); // pend_rend - } - YUV_deserialize(deser); - if (deser.version() >= Deserializer::V5_LIBRETRO && deser.version() < Deserializer::V9_LIBRETRO) - deser.skip(); // 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(); // 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(); // 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); diff --git a/core/hw/pvr/spg.cpp b/core/hw/pvr/spg.cpp index da0a59056..034a5ab64 100755 --- a/core/hw/pvr/spg.cpp +++ b/core/hw/pvr/spg.cpp @@ -309,20 +309,7 @@ void spg_Deserialize(Deserializer& deser) if (deser.version() < Deserializer::V30) deser.skip(); // 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(); // speed_load_mspdf - deser.skip(); // mips_counter - deser.skip(); // full_rps - if (deser.version() <= Deserializer::V4) - deser.skip(); // fskip - } - else if (deser.version() >= Deserializer::V12) + if (deser.version() >= Deserializer::V12) { deser >> maple_int_pending; if (deser.version() >= Deserializer::V14) diff --git a/core/hw/pvr/ta_ctx.cpp b/core/hw/pvr/ta_ctx.cpp index bf98848e8..c6bf6197b 100644 --- a/core/hw/pvr/ta_ctx.cpp +++ b/core/hw/pvr/ta_ctx.cpp @@ -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; diff --git a/core/hw/sh4/sh4_interrupts.cpp b/core/hw/sh4/sh4_interrupts.cpp index ee6c9066e..8e1d3c0b5 100644 --- a/core/hw/sh4/sh4_interrupts.cpp +++ b/core/hw/sh4/sh4_interrupts.cpp @@ -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; diff --git a/core/hw/sh4/sh4_mmr.cpp b/core/hw/sh4/sh4_mmr.cpp index 02423e963..1716807e0 100644 --- a/core/hw/sh4/sh4_mmr.cpp +++ b/core/hw/sh4/sh4_mmr.cpp @@ -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(); // old_rm - deser.skip(); // old_dn - } if (deser.version() >= Deserializer::V19 && deser.version() < Deserializer::V21) deser.skip(); // 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(); // SCIF_SCFRDR2 - deser.skip(); // 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; diff --git a/core/hw/sh4/sh4_sched.cpp b/core/hw/sh4/sh4_sched.cpp index f91d0e502..21b16587f 100755 --- a/core/hw/sh4/sh4_sched.cpp +++ b/core/hw/sh4/sh4_sched.cpp @@ -247,9 +247,6 @@ void sh4_sched_deserialize(Deserializer& deser) if (deser.version() >= Deserializer::V19 && deser.version() <= Deserializer::V31) deser.skip(); // sh4_sched_next_id - else if ((deser.version() >= Deserializer::V5 && deser.version() < Deserializer::V8) - || deser.version() < Deserializer::V9_LIBRETRO) - deser.skip(); // 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(); // sch_list[time_sync].tag - deser.skip(); // sch_list[time_sync].start - deser.skip(); // sch_list[time_sync].end - } } diff --git a/core/serialize.cpp b/core/serialize.cpp index b5ebbd77c..ad75f5e8d 100644 --- a/core/serialize.cpp +++ b/core/serialize.cpp @@ -99,44 +99,20 @@ static void dc_deserialize_libretro(Deserializer& deser) naomi_Deserialize(deser); - if (deser.version() < Deserializer::V9_LIBRETRO) - { - deser.skip(); // cycle_counter - deser.skip(); // idxnxx - deser.skip(44); // sizeof(state_t) - deser.skip(); // div_som_reg1 - deser.skip(); // div_som_reg2 - deser.skip(); // div_som_reg3 - - deser.skip(); // LastAddr - deser.skip(); // 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(); // fallback_blocks - deser.skip(); // total_blocks - deser.skip(); // 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(); // 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()); diff --git a/core/serialize.h b/core/serialize.h index 16d1cbbce..ba049f7c0 100644 --- a/core/serialize.h +++ b/core/serialize.h @@ -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(); // regs.data[i].flags if (!(reg.flags & REG_RF)) deser >> reg.data32;