change all code related to padding save memory to go through one function that pads with 0xFF. maybe that will help fix some mysterious quirks in save file importing.

This commit is contained in:
zeromus 2010-12-03 20:07:44 +00:00
parent be8b6906c8
commit d93668c4c0
2 changed files with 20 additions and 13 deletions

View File

@ -408,7 +408,7 @@ void BackupDevice::reset_hardware()
void BackupDevice::reset()
{
reset_hardware();
data.resize(0);
resize(0);
data_autodetect.resize(0);
addr_size = 0;
loadfile();
@ -420,7 +420,7 @@ void BackupDevice::reset()
int savetype = save_types[CommonSettings.manualBackupType][0];
int savesize = save_types[CommonSettings.manualBackupType][1];
ensure((u32)savesize); //expand properly if necessary
data.resize(savesize); //truncate if necessary
resize(savesize); //truncate if necessary
addr_size = addr_size_for_old_save_type(savetype);
flush();
}
@ -675,12 +675,17 @@ void BackupDevice::ensure(u32 addr)
u32 size = data.size();
if(size<addr)
{
data.resize(addr);
for(u32 i=size;i<addr;i++)
data[i] = kUninitializedSaveDataValue;
resize(addr);
}
}
void BackupDevice::resize(u32 size)
{
size_t old_size = data.size();
data.resize(size);
for(u32 i=old_size;i<size;i++)
data[i] = kUninitializedSaveDataValue;
}
u32 BackupDevice::addr_size_for_old_save_size(int bupmem_size)
{
@ -723,8 +728,8 @@ u32 BackupDevice::addr_size_for_old_save_type(int bupmem_type)
void BackupDevice::load_old_state(u32 addr_size, u8* data, u32 datasize)
{
state = RUNNING;
this->addr_size = addr_size;
this->data.resize(datasize);
addr_size = addr_size;
resize(datasize);
memcpy(&this->data[0],data,datasize);
//dump back out as a dsv, just to keep things sane
@ -880,7 +885,7 @@ bool BackupDevice::load_no_gba(const char *fname)
size = no_gba_fillLeft(size);
//printf("--- new size after fill %i byte(s)\n", size);
raw_applyUserSettings(size);
data.resize(size);
resize(size);
for (u32 tt = 0; tt < size; tt++)
data[tt] = out_buf[tt];
@ -995,7 +1000,7 @@ void BackupDevice::loadfile()
read32le(&info.mem_size,inf);
//establish the save data
data.resize(info.size);
resize(info.size);
inf->fseek(0, SEEK_SET);
if(info.size>0)
inf->fread(&data[0],info.size); //read all the raw data we have
@ -1092,7 +1097,7 @@ void BackupDevice::raw_applyUserSettings(u32& size)
if(CommonSettings.manualBackupType == MC_TYPE_AUTODETECT)
{
addr_size = addr_size_for_old_save_size(size);
data.resize(size);
resize(size);
}
else
{
@ -1100,7 +1105,7 @@ void BackupDevice::raw_applyUserSettings(u32& size)
int savesize = save_types[CommonSettings.manualBackupType][1];
addr_size = addr_size_for_old_save_type(savetype);
if((u32)savesize<size) size = savesize;
data.resize(savesize);
resize(savesize);
}
state = RUNNING;
@ -1191,7 +1196,7 @@ bool BackupDevice::load_movie(EMUFILE* is) {
is->fread((char*)&info.mem_size,4);
//establish the save data
data.resize(info.size);
resize(info.size);
is->fseek(0, SEEK_SET);
if(info.size>0)
is->fread((char*)&data[0],info.size);

View File

@ -157,9 +157,11 @@ private:
void loadfile();
bool _loadfile(const char *fname);
void ensure(u32 addr);
bool flushPending, lazyFlushPending;
private:
void resize(u32 size);
};
#define NDS_FW_SIZE_V1 (256 * 1024) /* size of fw memory on nds v1 */