aboutsummaryrefslogtreecommitdiff
path: root/libpcsxcore/mdec.c
diff options
context:
space:
mode:
authortwinaphex2012-11-28 06:35:30 +0100
committertwinaphex2012-11-28 06:35:30 +0100
commitb194a2ecd43debbb3724e332b660b993725acd52 (patch)
treea41deacfa7a6841e97d67fce60bb7f39b54b12be /libpcsxcore/mdec.c
parentb6514bd168106e978a0af0f5043d5da6fd35800a (diff)
parent06d2e1a58b6eb7fb449f79f7e807343bd8d39b59 (diff)
downloadpcsx_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.c25
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));