X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fmdec.c;h=cd8d3bf0013a16343395b61ffa53b48dbf79f3d6;hp=6cf288654395c60c6652a4da909ef2a0ca123c1d;hb=8e1040b6a82ee1802fda83d4de84290a02656cc0;hpb=ad418c19cd4ca9a80820593609b786c6993b2eda diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c index 6cf28865..cd8d3bf0 100644 --- a/libpcsxcore/mdec.c +++ b/libpcsxcore/mdec.c @@ -672,7 +672,30 @@ void mdec1Interrupt() { } int mdecFreeze(gzFile f, int Mode) { - gzfreeze(&mdec, sizeof(mdec)); + u8 *base = (u8 *)&psxM[0x100000]; + u32 v; + + gzfreeze(&mdec.reg0, sizeof(mdec.reg0)); + gzfreeze(&mdec.reg1, sizeof(mdec.reg1)); + + // old code used to save raw pointers.. + v = (u8 *)mdec.rl - base; + gzfreeze(&v, sizeof(v)); + mdec.rl = (u16 *)(base + (v & 0xffffe)); + v = (u8 *)mdec.rl_end - base; + gzfreeze(&v, sizeof(v)); + mdec.rl_end = (u16 *)(base + (v & 0xffffe)); + + v = 0; + if (mdec.block_buffer_pos) + v = mdec.block_buffer_pos - base; + gzfreeze(&v, sizeof(v)); + mdec.block_buffer_pos = 0; + if (v) + mdec.block_buffer_pos = base + (v & 0xfffff); + + gzfreeze(&mdec.block_buffer, sizeof(mdec.block_buffer)); + gzfreeze(&mdec.pending_dma1, sizeof(mdec.pending_dma1)); gzfreeze(iq_y, sizeof(iq_y)); gzfreeze(iq_uv, sizeof(iq_uv));