summaryrefslogtreecommitdiff
path: root/libpcsxcore/mdec.c
diff options
context:
space:
mode:
authorSND\notaz_cp <SND\notaz_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-01-09 01:16:12 +0000
committerSND\notaz_cp <SND\notaz_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-01-09 01:16:12 +0000
commit0cff827e90063e45484846e4ba86908a2bb506e1 (patch)
treed1a9ac6f75270d93c5b077b694ceff28700f3a18 /libpcsxcore/mdec.c
parent3c9292df90a0918ad74d1e2079eed5cb7340b482 (diff)
mdec: don't save raw pointers to savestate
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@82132 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/mdec.c')
-rwxr-xr-xlibpcsxcore/mdec.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c
index 4da1e637..9f6f846a 100755
--- a/libpcsxcore/mdec.c
+++ b/libpcsxcore/mdec.c
@@ -670,7 +670,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));