int FCEUSS_LoadFP(FILE *st) { int x; uint8 header[16]; int stateversion; fread(&header,1,16,st); if(memcmp(header,"FCS",3)) return(0); if(header[3] == 0xFF) stateversion = FCEU_de32lsb(header + 8); else stateversion=header[3] * 100; x=ReadStateChunks(st,*(uint32*)(header+4)); if(stateversion<9500) X.IRQlow=0; if(GameStateRestore) GameStateRestore(stateversion); if(x) { FCEUPPU_LoadState(stateversion); FCEUSND_LoadState(stateversion); } return(x); }
int FCEUSS_LoadFP(FILE *st, int make_backup) { int x; if(st!=NULL) { uint8 header[16]; fread(&header,1,16,st); if(memcmp(header,"FCS",3)) { fseek(st,0,SEEK_SET); if(!LoadStateOld(st)) goto lerror; goto okload; } stateversion=header[3]; if(stateversion<53) FixOldSaveStateSFreq(); x=ReadStateChunks(st); if(GameStateRestore) GameStateRestore(header[3]); if(x) { okload: TempAddr=TempAddrT; RefreshAddr=RefreshAddrT; SaveStateStatus[CurrentState]=1; FCEU_DispMessage("State %d loaded.",CurrentState); SaveStateStatus[CurrentState]=1; } else { SaveStateStatus[CurrentState]=1; FCEU_DispMessage("Error(s) reading state %d!",CurrentState); } } else { lerror: FCEU_DispMessage("State %d load error.",CurrentState); SaveStateStatus[CurrentState]=0; return 0; } return 1; }
static int LoadStateOld(MEMFILE *st) { int x; int32 nada; uint8 version; nada=0; printf("LoadStateOld\n"); StateBuffer=FCEU_malloc(59999); if(StateBuffer==NULL) return 0; if(!mem_fread(StateBuffer,59999,1,st)) { mem_fclose(st); free(StateBuffer); return 0; } intostate=0; { uint8 a[2]; afread(&a[0],1,1); afread(&a[1],1,1); X.PC=a[0]|(a[1]<<8); } afread(&X.A,1,1); afread(&X.P,1,1); afread(&X.X,1,1); afread(&X.Y,1,1); afread(&X.S,1,1); afread(&version,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); aread32((int8 *)&X.count); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); aread32((int8 *)&nada); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); for(x=0;x<8;x++) areadupper8of16((int8 *)&CHRBankList[x]); afread(PRGBankList,4,1); for(x=0;x<8;x++) areadlower8of16((int8 *)&CHRBankList[x]); afread(CHRRAM,1,0x2000); afread(NTARAM,1,0x400); afread(ExtraNTARAM,1,0x400); afread(NTARAM+0x400,1,0x400); afread(ExtraNTARAM+0x400,1,0x400); for(x=0;x<0xF00;x++) afread(&nada,1,1); afread(PALRAM,1,0x20); for(x=0;x<256-32;x++) afread(&nada,1,1); for(x=0x00;x<0x20;x++) PALRAM[x]&=0x3f; afread(PPU,1,4); afread(SPRAM,1,0x100); afread(WRAM,1,8192); afread(RAM,1,0x800); aread16((int8 *)&scanline); aread16((int8 *)&RefreshAddr); afread(&VRAMBuffer,1,1); afread(&IRQa,1,1); aread32((int8 *)&IRQCount); aread32((int8 *)&IRQLatch); afread(&Mirroring,1,1); afread(PSG,1,0x17); PSG[0x11]&=0x7F; afread(MapperExRAM,1,193); if(version>=31) PSG[0x17]=MapperExRAM[115]; else PSG[0x17]|=0x40; PSG[0x15]&=0xF; sqnon=PSG[0x15]; X.IRQlow=0; afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&nada,1,1); afread(&XOffset,1,1); PPUCHRRAM=0; for(x=0;x<8;x++) { nada=0; afread(&nada,1,1); PPUCHRRAM|=(nada?1:0)<<x; } afread(mapbyte1,1,8); afread(mapbyte2,1,8); afread(mapbyte3,1,8); afread(mapbyte4,1,8); for(x=0;x<4;x++) aread16((int8 *)&nada); PPUNTARAM=0; for(x=0;x<4;x++) { nada=0; aread16((int8 *)&nada); PPUNTARAM|=((nada&0x800)?0:1)<<x; } afread(MapperExRAM,1,32768); afread(&vtoggle,1,1); aread16((int8 *)&TempAddrT); aread16((int8 *)&RefreshAddrT); if(GameStateRestore) GameStateRestore(version); free(StateBuffer); FixOldSaveStateSFreq(); X.mooPI=X.P; return 1; }