~ubuntu-branches/ubuntu/quantal/mupen64plus/quantal

« back to all changes in this revision

Viewing changes to main/savestates.c

  • Committer: Bazaar Package Importer
  • Author(s): Sven Eckelmann, Sven Eckelmann, Piotr Ożarowski
  • Date: 2010-05-06 11:34:46 UTC
  • mfrom: (3.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20100506113446-jfcd6uk7waudel82
Tags: 1.5+dfsg1-10
[ Sven Eckelmann ]
* debian/patches:
  - Add rsp_ucode2_reset.patch, Reset status of specific ucode2 hacks after
    starting again
  - Add rsp_hle_bigendian.patch, Fix wrong high level emulation of rsp on big
    endian systems
  - Add rice-crash-vendorstring.patch, Don't crash on long OpenGL vendor
    string (Closes: #580480, LP: #575968)

[ Piotr Ożarowski ]
* DMUA flag set to yes

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
#include "../memory/memory.h"
34
34
#include "../memory/flashram.h"
 
35
#include "../r4300/macros.h"
35
36
#include "../r4300/r4300.h"
36
37
#include "../r4300/interupt.h"
37
38
#include "../opengl/osd.h"
173
174
    gzwrite(f, reg_cop0, 32*4);
174
175
    gzwrite(f, &lo, 8);
175
176
    gzwrite(f, &hi, 8);
176
 
    gzwrite(f, reg_cop1_fgr_64, 32*8);
 
177
 
 
178
    if ((Status & 0x04000000) == 0)
 
179
    {   // FR bit == 0 means 32-bit (MIPS I) FGR mode
 
180
        shuffle_fpr_data(0, 0x04000000);  // shuffle data into 64-bit register format for storage
 
181
        gzwrite(f, reg_cop1_fgr_64, 32*8);
 
182
        shuffle_fpr_data(0x04000000, 0);  // put it back in 32-bit mode
 
183
    }
 
184
    else
 
185
    {
 
186
        gzwrite(f, reg_cop1_fgr_64, 32*8);
 
187
    }
 
188
 
177
189
    gzwrite(f, &FCR0, 4);
178
190
    gzwrite(f, &FCR31, 4);
179
191
    gzwrite(f, tlb_e, 32*sizeof(tlb));
268
280
    gzread(f, &rsp_register, sizeof(RSP_register));
269
281
    gzread(f, &si_register, sizeof(SI_register));
270
282
    gzread(f, &vi_register, sizeof(VI_register));
 
283
    update_vi_status(vi_register.vi_status);
 
284
    update_vi_width(vi_register.vi_width);
271
285
    gzread(f, &ri_register, sizeof(RI_register));
272
286
    gzread(f, &ai_register, sizeof(AI_register));
 
287
    update_ai_dacrate(ai_register.ai_dacrate);
273
288
    gzread(f, &dpc_register, sizeof(DPC_register));
274
289
    gzread(f, &dps_register, sizeof(DPS_register));
275
290
    gzread(f, rdram, 0x800000);
286
301
    gzread(f, &llbit, 4);
287
302
    gzread(f, reg, 32*8);
288
303
    gzread(f, reg_cop0, 32*4);
 
304
    set_fpr_pointers(Status);  // Status is reg_cop0[12]
289
305
    gzread(f, &lo, 8);
290
306
    gzread(f, &hi, 8);
291
307
    gzread(f, reg_cop1_fgr_64, 32*8);
 
308
    if ((Status & 0x04000000) == 0)  // 32-bit FPR mode requires data shuffling because 64-bit layout is always stored in savestate file
 
309
        shuffle_fpr_data(0x04000000, 0);
292
310
    gzread(f, &FCR0, 4);
293
311
    gzread(f, &FCR31, 4);
294
312
    gzread(f, tlb_e, 32*sizeof(tlb));