reduce save states size by ~20mb

This commit is contained in:
Flyinghead 2020-01-07 20:13:33 +01:00
parent 2f3b4fae53
commit 1b49bdd31e
3 changed files with 52 additions and 135 deletions

View File

@ -123,8 +123,6 @@ static const s32 qtable[32] = {
0x1C00,0x1D00,0x1E00,0x1F00
};
void AICA_Sample();
//Remove the fractional part , with rounding ;) -- does not need an extra bit
#define well(a,bits) (((a) + ((1<<(bits-1))))>>bits)
//Remove the fractional part by chopping..
@ -1627,20 +1625,20 @@ bool channel_unserialize(void **data, unsigned int *total_size, serialize_versio
REICAST_US(Chans[i].CA) ;
REICAST_US(Chans[i].step) ;
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
REICAST_US(dum); // Chans[i].update_rate
Chans[i].UpdatePitch();
REICAST_US(Chans[i].s0) ;
REICAST_US(Chans[i].s1) ;
REICAST_US(Chans[i].loop.looped);
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
{
REICAST_US(dum); // Chans[i].loop.LSA
REICAST_US(dum); // Chans[i].loop.LEA
}
Chans[i].UpdateLoop();
REICAST_US(Chans[i].adpcm.last_quant) ;
if (ver >= V7 || ver == V8_LIBRETRO)
if (ver >= V7 || ver == V9_LIBRETRO)
{
REICAST_US(Chans[i].adpcm.loopstart_quant);
REICAST_US(Chans[i].adpcm.loopstart_prev_sample);
@ -1653,21 +1651,21 @@ bool channel_unserialize(void **data, unsigned int *total_size, serialize_versio
Chans[i].adpcm.loopstart_prev_sample = 0;
}
REICAST_US(Chans[i].noise_state) ;
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
{
REICAST_US(dum); // Chans[i].VolMix.DLAtt
REICAST_US(dum); // Chans[i].VolMix.DRAtt
REICAST_US(dum); // Chans[i].VolMix.DSPAtt
}
Chans[i].UpdateAtts();
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
REICAST_US(dum); // Chans[i].VolMix.DSPOut
Chans[i].UpdateDSPMIX();
REICAST_US(Chans[i].AEG.val) ;
REICAST_US(Chans[i].AEG.state) ;
Chans[i].SetAegState(Chans[i].AEG.state);
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
{
REICAST_US(dum); // Chans[i].AEG.AttackRate
REICAST_US(dum); // Chans[i].AEG.Decay1Rate
@ -1678,7 +1676,7 @@ bool channel_unserialize(void **data, unsigned int *total_size, serialize_versio
Chans[i].UpdateAEG();
REICAST_US(Chans[i].FEG.value);
REICAST_US(Chans[i].FEG.state);
if (ver >= V7 || ver == V8_LIBRETRO)
if (ver >= V7 || ver == V9_LIBRETRO)
{
REICAST_US(Chans[i].FEG.prev1);
REICAST_US(Chans[i].FEG.prev2);
@ -1690,7 +1688,7 @@ bool channel_unserialize(void **data, unsigned int *total_size, serialize_versio
}
Chans[i].SetFegState(Chans[i].FEG.state);
Chans[i].UpdateFEG();
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
{
u8 dumu8;
REICAST_US(dumu8); // Chans[i].step_stream_lut1
@ -1700,10 +1698,10 @@ bool channel_unserialize(void **data, unsigned int *total_size, serialize_versio
Chans[i].UpdateStreamStep();
REICAST_US(Chans[i].lfo.counter) ;
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
REICAST_US(dum); // Chans[i].lfo.start_value
REICAST_US(Chans[i].lfo.state) ;
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
{
u8 dumu8;
REICAST_US(dumu8); // Chans[i].lfo.alfo
@ -1715,7 +1713,7 @@ bool channel_unserialize(void **data, unsigned int *total_size, serialize_versio
}
Chans[i].UpdateLFO();
REICAST_US(Chans[i].enabled) ;
if (ver < V7 && ver != V8_LIBRETRO)
if (ver < V7 && ver != V9_LIBRETRO)
REICAST_US(dum); // Chans[i].ChannelNumber
}

View File

@ -299,7 +299,7 @@ bool dc_serialize(void **data, unsigned int *total_size)
{
int i = 0;
int j = 0;
serialize_version_enum version = V7;
serialize_version_enum version = V8;
*total_size = 0 ;
@ -320,7 +320,7 @@ bool dc_serialize(void **data, unsigned int *total_size)
REICAST_S(armMode);
REICAST_S(Arm7Enabled);
REICAST_S(dsp);
REICAST_S(dsp); // FIXME could save 32KB
for ( i = 0 ; i < 3 ; i++)
{
@ -328,7 +328,6 @@ bool dc_serialize(void **data, unsigned int *total_size)
REICAST_S(timers[i].m_step);
}
REICAST_SA(aica_ram.data,aica_ram.size) ;
REICAST_S(VREG);
REICAST_S(ARMRST);
@ -361,7 +360,6 @@ bool dc_serialize(void **data, unsigned int *total_size)
REICAST_S(set_mode_offset);
REICAST_S(read_params);
REICAST_S(packet_cmd);
REICAST_S(read_buff);
REICAST_S(pio_buff);
REICAST_S(set_mode_offset);
REICAST_S(ata_cmd);
@ -447,7 +445,6 @@ bool dc_serialize(void **data, unsigned int *total_size)
REICAST_S((*p_sh4rcb).cntx);
REICAST_S(sh4_sched_ffb);
REICAST_S(i); // sh4_sched_intr
REICAST_S(sch_list[aica_schid].tag) ;
REICAST_S(sch_list[aica_schid].start) ;
@ -484,10 +481,6 @@ bool dc_serialize(void **data, unsigned int *total_size)
REICAST_S(sch_list[vblank_schid].start) ;
REICAST_S(sch_list[vblank_schid].end) ;
REICAST_S(i); // sch_list[time_sync].tag
REICAST_S(i); // sch_list[time_sync].start
REICAST_S(i); // sch_list[time_sync].end
#ifdef ENABLE_MODEM
REICAST_S(sch_list[modem_sched].tag) ;
REICAST_S(sch_list[modem_sched].start) ;
@ -500,10 +493,6 @@ bool dc_serialize(void **data, unsigned int *total_size)
#endif
REICAST_S(SCIF_SCFSR2);
bool dum_bool;
REICAST_S(dum_bool);// SCIF_SCFRDR2
REICAST_S(i); // SCIF_SCFDR2
REICAST_S(BSC_PDTRA);
REICAST_SA(tmu_shift,3);
@ -581,11 +570,6 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US(armFiqEnable);
REICAST_US(armMode);
REICAST_US(Arm7Enabled);
REICAST_SKIP(256); // cpuBitsSet
bool dummy;
REICAST_US(dummy); // intState
REICAST_US(dummy); // stopState
REICAST_US(dummy); // holdState
REICAST_US(dsp);
@ -602,14 +586,12 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_USA(aica_reg,0x8000);
channel_unserialize(data, total_size, V8_LIBRETRO);
channel_unserialize(data, total_size, V9_LIBRETRO);
REICAST_USA(cdda_sector,CDDA_SIZE);
REICAST_US(cdda_index);
REICAST_SKIP(4 * 64); // mxlr
REICAST_US(i); // samples_gen
register_unserialize(sb_regs, data, total_size, V8_LIBRETRO) ;
register_unserialize(sb_regs, data, total_size, V9_LIBRETRO) ;
REICAST_US(SB_ISTNRM);
REICAST_US(SB_FFST_rc);
REICAST_US(SB_FFST);
@ -638,7 +620,7 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US(set_mode_offset);
REICAST_US(read_params);
REICAST_US(packet_cmd);
REICAST_US(read_buff);
read_buff.cache_size = 0;
REICAST_US(pio_buff);
REICAST_US(set_mode_offset);
REICAST_US(ata_cmd);
@ -658,12 +640,9 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_USA(EEPROM,0x100);
REICAST_US(EEPROM_loaded);
bool dumbool;
REICAST_US(maple_ddt_pending_reset);
mcfg_UnserializeDevices(data, total_size, false);
REICAST_US(i); // FrameCount
REICAST_US(dumbool); // pend_rend
pend_rend = false;
REICAST_USA(YUV_tempdata,512/4);
@ -674,67 +653,32 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US(YUV_x_size);
REICAST_US(YUV_y_size);
REICAST_US(dumbool); // fog_needs_update
REICAST_USA(pvr_regs,pvr_RegSize);
fog_needs_update = true ;
REICAST_US(in_vblank);
REICAST_US(clc_pvr_scanline);
REICAST_US(i); // pvr_numscanlines
REICAST_US(i); // prv_cur_scanline
REICAST_US(i); // vblk_cnt
REICAST_US(i); // Line_Cycles
REICAST_US(i); // Frame_Cycles
REICAST_SKIP(8); // speed_load_mspdf
REICAST_US(i); // mips_counter
REICAST_SKIP(8); // full_rps
REICAST_SKIP(4 * 256); // ta_type_lut
REICAST_USA(ta_fsm,2049);
REICAST_US(ta_fsm[2048]);
REICAST_US(ta_fsm_cl);
REICAST_US(dumbool); // pal_needs_update
for (int i = 0; i < 4; i++) REICAST_US(j); // _pal_rev_256
for (int i = 0; i < 64; i++) REICAST_US(j); // _pal_rev_16
for (int i = 0; i < 4; i++) REICAST_US(j); // pal_rev_256
for (int i = 0; i < 64; i++) REICAST_US(j); // pal_rev_16
for ( i = 0 ; i < 3 ; i++ )
{
u32 buf[65536]; //u32 *ptr = decoded_colors[i] ;
REICAST_US(buf); //LIBRETRO_SA(ptr,65536);
}
REICAST_US(i); // tileclip_val
REICAST_SKIP(65536); // f32_su8_tbl
REICAST_SKIP(4); // FaceBaseColor
REICAST_SKIP(4); // FaceOffsColor
REICAST_US(i); // SFaceBaseColor
REICAST_US(i); // SFaceOffsColor
REICAST_US(i); // palette_index
REICAST_US(dumbool); // KillTex
REICAST_SKIP(4 * 1024); // palette16_ram
REICAST_SKIP(4 * 1024); // palette32_ram
REICAST_SKIP(2 * 8 * 4 * 1024); // detwiddle[][]
pal_needs_update = true;
REICAST_USA(vram.data, vram.size);
pal_needs_update = true;
REICAST_USA(OnChipRAM.data,OnChipRAM_SIZE);
register_unserialize(CCN, data, total_size, V8_LIBRETRO) ;
register_unserialize(UBC, data, total_size, V8_LIBRETRO) ;
register_unserialize(BSC, data, total_size, V8_LIBRETRO) ;
register_unserialize(DMAC, data, total_size, V8_LIBRETRO) ;
register_unserialize(CPG, data, total_size, V8_LIBRETRO) ;
register_unserialize(RTC, data, total_size, V8_LIBRETRO) ;
register_unserialize(INTC, data, total_size, V8_LIBRETRO) ;
register_unserialize(TMU, data, total_size, V8_LIBRETRO) ;
register_unserialize(SCI, data, total_size, V8_LIBRETRO) ;
register_unserialize(SCIF, data, total_size, V8_LIBRETRO) ;
register_unserialize(CCN, data, total_size, V9_LIBRETRO) ;
register_unserialize(UBC, data, total_size, V9_LIBRETRO) ;
register_unserialize(BSC, data, total_size, V9_LIBRETRO) ;
register_unserialize(DMAC, data, total_size, V9_LIBRETRO) ;
register_unserialize(CPG, data, total_size, V9_LIBRETRO) ;
register_unserialize(RTC, data, total_size, V9_LIBRETRO) ;
register_unserialize(INTC, data, total_size, V9_LIBRETRO) ;
register_unserialize(TMU, data, total_size, V9_LIBRETRO) ;
register_unserialize(SCI, data, total_size, V9_LIBRETRO) ;
register_unserialize(SCIF, data, total_size, V9_LIBRETRO) ;
u16 dummyshort;
REICAST_USA(mem_b.data, mem_b.size);
REICAST_US(dummyshort); // IRLPriority
REICAST_USA(InterruptEnvId,32);
REICAST_USA(InterruptBit,32);
REICAST_USA(InterruptLevelBit,16);
@ -756,11 +700,7 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US((*p_sh4rcb).cntx);
REICAST_US(i); // old_rm
REICAST_US(i); // old_dn
REICAST_US(sh4_sched_ffb);
REICAST_US(i); // sh4_sched_intr
REICAST_US(sch_list[aica_schid].tag) ;
REICAST_US(sch_list[aica_schid].start) ;
@ -797,9 +737,6 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US(sch_list[vblank_schid].start) ;
REICAST_US(sch_list[vblank_schid].end) ;
REICAST_US(i); // sch_list[time_sync].tag
REICAST_US(i); // sch_list[time_sync].start
REICAST_US(i); // sch_list[time_sync].end
#ifdef ENABLE_MODEM
REICAST_US(sch_list[modem_sched].tag) ;
REICAST_US(sch_list[modem_sched].start) ;
@ -812,10 +749,6 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
#endif
REICAST_US(SCIF_SCFSR2);
bool dum_bool;
REICAST_US(dum_bool); // SCIF_SCFRDR2
REICAST_US(i); // SCIF_SCFDR2
REICAST_US(BSC_PDTRA);
REICAST_USA(tmu_shift,3);
@ -848,10 +781,6 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US(i); // ARAM_MASK
REICAST_US(i); // VRAM_MASK
REICAST_US(i); // naomi_updates
REICAST_US(i); // BoardID
REICAST_US(GSerialBuffer);
REICAST_US(BSerialBuffer);
REICAST_US(GBufPos);
@ -877,27 +806,6 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
REICAST_US(reg_dimm_status);
REICAST_US(NaomiDataRead);
REICAST_US(i); //LIBRETRO_S(cycle_counter);
REICAST_US(i); // idxnxx
REICAST_SKIP(sizeof(state_t)); // state
REICAST_US(i); // div_som_reg1
REICAST_US(i); // div_som_reg2
REICAST_US(i); // div_som_reg3
REICAST_US(i); // LastAddr
REICAST_US(i); // LastAddr_min
REICAST_SKIP(1024); // block_hash
for (int i = 0; i < sh4_reg_count; i++) // RegisterRead, RegisterWrite
{
REICAST_US(j);
REICAST_US(j);
}
REICAST_US(i); // fallback_blocks);
REICAST_US(i); // total_blocks);
REICAST_US(i); // REMOVED_OPS
REICAST_US(settings.dreamcast.broadcast);
REICAST_US(settings.dreamcast.cable);
REICAST_US(settings.dreamcast.region);
@ -920,7 +828,7 @@ bool dc_unserialize(void **data, unsigned int *total_size)
*total_size = 0 ;
REICAST_US(version) ;
if (version == V8_LIBRETRO)
if (version == V9_LIBRETRO)
return dc_unserialize_libretro(data, total_size);
if (version != V4 && version < V5)
{
@ -1002,7 +910,10 @@ bool dc_unserialize(void **data, unsigned int *total_size)
REICAST_US(set_mode_offset);
REICAST_US(read_params);
REICAST_US(packet_cmd);
REICAST_US(read_buff);
// read_buff
read_buff.cache_size = 0;
if (version < V8)
REICAST_SKIP(4 + 4 + 2352 * 8192);
REICAST_US(pio_buff);
REICAST_US(set_mode_offset);
REICAST_US(ata_cmd);
@ -1121,7 +1032,8 @@ bool dc_unserialize(void **data, unsigned int *total_size)
}
REICAST_US(sh4_sched_ffb);
REICAST_US(i); // sh4_sched_intr
if (version < V8)
REICAST_US(i); // sh4_sched_intr
REICAST_US(sch_list[aica_schid].tag) ;
REICAST_US(sch_list[aica_schid].start) ;
@ -1158,9 +1070,12 @@ bool dc_unserialize(void **data, unsigned int *total_size)
REICAST_US(sch_list[vblank_schid].start) ;
REICAST_US(sch_list[vblank_schid].end) ;
REICAST_US(i); // sch_list[time_sync].tag
REICAST_US(i); // sch_list[time_sync].start
REICAST_US(i); // sch_list[time_sync].end
if (version < V8)
{
REICAST_US(i); // sch_list[time_sync].tag
REICAST_US(i); // sch_list[time_sync].start
REICAST_US(i); // sch_list[time_sync].end
}
#ifdef ENABLE_MODEM
REICAST_US(sch_list[modem_sched].tag) ;
@ -1174,10 +1089,12 @@ bool dc_unserialize(void **data, unsigned int *total_size)
#endif
REICAST_US(SCIF_SCFSR2);
bool dum_bool;
REICAST_US(dum_bool); // SCIF_SCFRDR2
REICAST_US(i); // SCIF_SCFDR2
if (version < V8)
{
bool dum_bool;
REICAST_US(dum_bool); // SCIF_SCFRDR2
REICAST_US(i); // SCIF_SCFDR2
}
REICAST_US(BSC_PDTRA);
REICAST_USA(tmu_shift,3);

View File

@ -679,9 +679,11 @@ enum serialize_version_enum {
V5_LIBRETRO_UNSUPPORTED,
V6_LIBRETRO_UNSUPPORTED,
V7_LIBRETRO_UNSUPPORTED,
V8_LIBRETRO,
V8_LIBRETRO_UNSUPPORTED,
V9_LIBRETRO,
V5 = 800,
V6 = 801,
V7 = 802,
V8 = 803,
} ;