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); }
bool savestate_load(EMUFILE* is) { SAV_silent_fail_flag = false; char header[16]; is->fread(header,16); if(is->fail() || memcmp(header,magic,16)) return false; u32 ssversion,len,comprlen; if(!read32le(&ssversion,is)) return false; if(!read32le(&_DESMUME_version,is)) return false; if(!read32le(&len,is)) return false; if(!read32le(&comprlen,is)) return false; if(ssversion != SAVESTATE_VERSION) return false; std::vector<u8> buf(len); is->fread((char*)&buf[0],len-32); //GO!! READ THE SAVESTATE //THERE IS NO GOING BACK NOW //reset the emulator first to clean out the host's state NDS_Reset(); //reset some options to their old defaults which werent saved nds._DebugConsole = FALSE; //GPU_Reset(MainScreen.gpu, 0); //GPU_Reset(SubScreen.gpu, 1); //gfx3d_reset(); //gpu3D->NDS_3D_Reset(); //SPU_Reset(); EMUFILE_MEMORY mstemp(&buf); bool x = ReadStateChunks(&mstemp,(s32)len); if(!x && !SAV_silent_fail_flag) { msgbox->error("Error loading savestate. It failed halfway through;\nSince there is no savestate backup system, your current game session is wrecked"); return false; } loadstate(); if(nds.ConsoleType != CommonSettings.ConsoleType) { printf("WARNING: forcing console type to: ConsoleType=%d\n",nds.ConsoleType); } if((nds._DebugConsole!=0) != CommonSettings.DebugConsole) { printf("WARNING: forcing console debug mode to: debugmode=%s\n",nds._DebugConsole?"TRUE":"FALSE"); } return true; }
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; }