diff options
author | twinaphex | 2012-11-28 06:35:30 +0100 |
---|---|---|
committer | twinaphex | 2012-11-28 06:35:30 +0100 |
commit | b194a2ecd43debbb3724e332b660b993725acd52 (patch) | |
tree | a41deacfa7a6841e97d67fce60bb7f39b54b12be /libpcsxcore/mdec.c | |
parent | b6514bd168106e978a0af0f5043d5da6fd35800a (diff) | |
parent | 06d2e1a58b6eb7fb449f79f7e807343bd8d39b59 (diff) | |
download | pcsx_rearmed-b194a2ecd43debbb3724e332b660b993725acd52.tar.gz pcsx_rearmed-b194a2ecd43debbb3724e332b660b993725acd52.tar.bz2 pcsx_rearmed-b194a2ecd43debbb3724e332b660b993725acd52.zip |
Merge git://github.com/notaz/pcsx_rearmed
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)); |