Properly handle SRAM when playing movies, with or without starting from SRAM.

This commit is contained in:
SuuperW 2018-07-04 11:11:57 -05:00
parent 35ddbb341d
commit c64a556d82
3 changed files with 11 additions and 12 deletions

View File

@ -216,7 +216,6 @@ BackupDevice::BackupDevice()
fpMC = NULL;
fsize = 0;
addr_size = 0;
isMovieMode = false;
//default for most games; will be altered where appropriate
//usually 0xFF, but occasionally others. If these exceptions could be related to a particular backup memory type, that would be helpful.
@ -519,44 +518,36 @@ bool BackupDevice::write(u8 val)
#ifdef _DONT_SAVE_BACKUP
return true;
#endif
//never use save files if we are in movie mode
if (isMovieMode) return true;
return (fpMC->fwrite(&val, 1) == 1);
}
void BackupDevice::writeByte(u32 addr, u8 val)
{
if (isMovieMode) return;
fpMC->fseek(addr, SEEK_SET);
fpMC->write_u8(val);
}
void BackupDevice::writeWord(u32 addr, u16 val)
{
if (isMovieMode) return;
fpMC->fseek(addr, SEEK_SET);
fpMC->write_16LE(val);
}
void BackupDevice::writeLong(u32 addr, u32 val)
{
if (isMovieMode) return;
fpMC->fseek(addr, SEEK_SET);
fpMC->write_32LE(val);
}
void BackupDevice::writeByte(u8 val)
{
if (isMovieMode) return;
fpMC->write_u8(val);
}
void BackupDevice::writeWord(u16 val)
{
if (isMovieMode) return;
fpMC->write_16LE(val);
}
void BackupDevice::writeLong(u32 val)
{
if (isMovieMode) return;
fpMC->write_32LE(val);
}
@ -586,7 +577,6 @@ bool BackupDevice::saveBuffer(u8 *data, u32 size, bool _rewind, bool _truncate)
void BackupDevice::movie_mode()
{
isMovieMode = true;
reset();
}
@ -1696,6 +1686,14 @@ bool BackupDevice::load_movie(EMUFILE &is)
return true;
}
void BackupDevice::load_movie_blank()
{
delete fpMC;
fpMC = new EMUFILE_MEMORY();
state = DETECTING;
}
void BackupDevice::forceManualBackupType()
{
addr_size = addr_size_for_old_save_size(save_types[CommonSettings.manualBackupType].size);

View File

@ -148,8 +148,7 @@ public:
bool no_gba_unpack(u8 *&buf, u32 &size);
bool load_movie(EMUFILE &is);
bool isMovieMode;
void load_movie_blank();
u32 importDataSize(const char *filename);
bool importData(const char *filename, u32 force_size = 0);

View File

@ -582,6 +582,8 @@ const char* _CDECL_ FCEUI_LoadMovie(const char *fname, bool _read_only, bool tas
bool success = MovieData::loadSramFrom(&currMovieData.sram);
if(!success) return "failed to load sram";
}
else
MMU_new.backupDevice.load_movie_blank();
freshMovie = true;
ClearAutoHold();