X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fmdec.c;h=bed4e53b94f02b53f47851b369c102631fa74ac0;hp=6cf288654395c60c6652a4da909ef2a0ca123c1d;hb=650adfd2da779ba8855623362c2900583e22931e;hpb=ad418c19cd4ca9a80820593609b786c6993b2eda diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c index 6cf28865..bed4e53b 100644 --- a/libpcsxcore/mdec.c +++ b/libpcsxcore/mdec.c @@ -671,8 +671,31 @@ void mdec1Interrupt() { } } -int mdecFreeze(gzFile f, int Mode) { - gzfreeze(&mdec, sizeof(mdec)); +int mdecFreeze(void *f, int Mode) { + 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));