bool BackupDevice::load_state(EMUFILE* is) { u32 version; if(read32le(&version,is)!=1) return false; if(version>=0) { readbool(&write_enable,is); read32le(&com,is); read32le(&addr_size,is); read32le(&addr_counter,is); u32 temp; read32le(&temp,is); state = (STATE)temp; readbuffer(data,is); readbuffer(data_autodetect,is); } if(version>=1) read32le(&addr,is); if(version>=2) { read8le(&motionInitState,is); read8le(&motionFlag,is); } return true; }
bool BackupDevice::load_state(EMUFILE* is) { u32 version; u32 temp; std::vector<u8> data; if(read32le(&version,is)!=1) return false; if(version>=0) { readbool(&write_enable,is); read32le(&com,is); read32le(&addr_size,is); read32le(&addr_counter,is); read32le(&temp,is); state = (STATE)temp; readbuffer(data,is); readbuffer(data_autodetect,is); } if(version>=1) read32le(&addr,is); if(version>=2) { read8le(&motionInitState,is); read8le(&motionFlag,is); } if(version>=3) { readbool(&reset_command_state,is); } if(version>=4) { read8le(&write_protect,is); } fsize = data.size(); #ifndef _DONT_SAVE_BACKUP fpMC->fseek(0, SEEK_SET); if(data.size()!=0) fwrite((char*)&data[0], 1, fsize, fpMC->get_fp()); ensure(data.size(), fpMC); #endif if(version>=5) { read32le(&temp,is); fpMC->fseek(temp, SEEK_SET); } else fpMC->fseek(addr, SEEK_SET); return true; }
bool SNAPSHOT::skipLoad(EMUFILE *is) { uint8 tmp1; // skip vars if (is->fseek(sizeof(int) + // keyframe sizeof(int) + // start_frame sizeof(int) + // end_frame sizeof(int) + // consecutivenessTag sizeof(int) + // recordedJoypadDifferenceBits sizeof(int) // mod_type , SEEK_CUR)) return true; // skip description if (!read8le(&tmp1, is)) return true; if (tmp1 >= SNAPSHOT_DESCRIPTION_MAX_LEN) return true; if (is->fseek(tmp1, SEEK_CUR) != 0) return true; // skip InputLog data if (inputlog.skipLoad(is)) return true; // skip LagLog data if (laglog.skipLoad(is)) return true; // skip Markers data if (markers.skipLoad(is)) return true; return false; }
// returns true if couldn't load bool SNAPSHOT::load(EMUFILE *is) { uint8 tmp; // read vars if (!read32le(&keyFrame, is)) return true; if (!read32le(&startFrame, is)) return true; if (!read32le(&endFrame, is)) return true; if (!read32le(&consecutivenessTag, is)) return true; if (!read32le(&recordedJoypadDifferenceBits, is)) return true; if (!read32le(&modificationType, is)) return true; // read description if (!read8le(&tmp, is)) return true; if (tmp >= SNAPSHOT_DESCRIPTION_MAX_LEN) return true; if (is->fread(&description[0], tmp) != tmp) return true; description[tmp] = 0; // add '0' because it wasn't saved in the file // load InputLog data if (inputlog.load(is)) return true; // load LagLog data if (laglog.load(is)) return true; // load Markers data if (markers.load(is)) return true; return false; }