diff options
author | notaz | 2012-11-05 03:11:29 +0200 |
---|---|---|
committer | notaz | 2012-11-05 03:12:26 +0200 |
commit | 8e1040b6a82ee1802fda83d4de84290a02656cc0 (patch) | |
tree | fb0c25827d3a42e8219ec6f5a50598435a4f1748 /libpcsxcore/mdec.c | |
parent | e0aec5eebf0fefe7a7314940546ef8a23d2169b7 (diff) | |
download | pcsx_rearmed-8e1040b6a82ee1802fda83d4de84290a02656cc0.tar.gz pcsx_rearmed-8e1040b6a82ee1802fda83d4de84290a02656cc0.tar.bz2 pcsx_rearmed-8e1040b6a82ee1802fda83d4de84290a02656cc0.zip |
sort out 32/64bit savestate compat issues
Diffstat (limited to 'libpcsxcore/mdec.c')
-rw-r--r-- | libpcsxcore/mdec.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c index 6cf2886..cd8d3bf 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)); |