- optimizing reads/writes NAND backup data.
This commit is contained in:
parent
88e34db3e7
commit
b5f78e2652
|
@ -119,6 +119,7 @@ public:
|
||||||
if (save_start_adr != (protocol.address & gameInfo.mask) - subAdr)
|
if (save_start_adr != (protocol.address & gameInfo.mask) - subAdr)
|
||||||
{
|
{
|
||||||
save_start_adr = save_adr = (protocol.address & gameInfo.mask) - subAdr;
|
save_start_adr = save_adr = (protocol.address & gameInfo.mask) - subAdr;
|
||||||
|
MMU_new.backupDevice.seek(save_start_adr);
|
||||||
}
|
}
|
||||||
handle_save = 1;
|
handle_save = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -140,6 +141,7 @@ public:
|
||||||
if (save_start_adr != (protocol.address & gameInfo.mask) - subAdr)
|
if (save_start_adr != (protocol.address & gameInfo.mask) - subAdr)
|
||||||
{
|
{
|
||||||
save_start_adr = save_adr = (protocol.address & gameInfo.mask) - subAdr;
|
save_start_adr = save_adr = (protocol.address & gameInfo.mask) - subAdr;
|
||||||
|
MMU_new.backupDevice.seek(save_start_adr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -151,6 +153,7 @@ public:
|
||||||
case 0xB2: //Set save position
|
case 0xB2: //Set save position
|
||||||
mode = cmd;
|
mode = cmd;
|
||||||
save_start_adr = save_adr = (protocol.address & gameInfo.mask) - subAdr;
|
save_start_adr = save_adr = (protocol.address & gameInfo.mask) - subAdr;
|
||||||
|
MMU_new.backupDevice.seek(save_start_adr);
|
||||||
handle_save = 1;
|
handle_save = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -185,7 +188,7 @@ public:
|
||||||
{
|
{
|
||||||
MMU_new.backupDevice.ensure(save_adr+4, (u8)0);
|
MMU_new.backupDevice.ensure(save_adr+4, (u8)0);
|
||||||
|
|
||||||
val = MMU_new.backupDevice.readLong(save_adr, 0);
|
val = MMU_new.backupDevice.readLong(0);
|
||||||
|
|
||||||
save_adr += 4;
|
save_adr += 4;
|
||||||
}
|
}
|
||||||
|
@ -246,7 +249,7 @@ public:
|
||||||
case 0x81: //Nand Write
|
case 0x81: //Nand Write
|
||||||
|
|
||||||
MMU_new.backupDevice.ensure(adr+4, (u8)0);
|
MMU_new.backupDevice.ensure(adr+4, (u8)0);
|
||||||
MMU_new.backupDevice.writeLong(adr, val);
|
MMU_new.backupDevice.writeLong(val);
|
||||||
|
|
||||||
save_adr += 4;
|
save_adr += 4;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -451,6 +451,28 @@ u32 BackupDevice::readLong(u32 addr, const u32 init)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 BackupDevice::readByte(const u8 init)
|
||||||
|
{
|
||||||
|
u8 val = init;
|
||||||
|
fpMC->read8le(&val);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
u16 BackupDevice::readWord(const u16 init)
|
||||||
|
{
|
||||||
|
u16 val = init;
|
||||||
|
fpMC->read16le(&val);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
u32 BackupDevice::readLong(const u32 init)
|
||||||
|
{
|
||||||
|
u32 val = init;
|
||||||
|
fpMC->read32le(&val);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
bool BackupDevice::write(u8 val)
|
bool BackupDevice::write(u8 val)
|
||||||
{
|
{
|
||||||
#ifdef _DONT_SAVE_BACKUP
|
#ifdef _DONT_SAVE_BACKUP
|
||||||
|
@ -481,6 +503,22 @@ void BackupDevice::writeLong(u32 addr, u32 val)
|
||||||
fpMC->write32le(val);
|
fpMC->write32le(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BackupDevice::writeByte(u8 val)
|
||||||
|
{
|
||||||
|
if (isMovieMode) return;
|
||||||
|
fpMC->write8le(val);
|
||||||
|
}
|
||||||
|
void BackupDevice::writeWord(u16 val)
|
||||||
|
{
|
||||||
|
if (isMovieMode) return;
|
||||||
|
fpMC->write16le(val);
|
||||||
|
}
|
||||||
|
void BackupDevice::writeLong(u32 val)
|
||||||
|
{
|
||||||
|
if (isMovieMode) return;
|
||||||
|
fpMC->write32le(val);
|
||||||
|
}
|
||||||
|
|
||||||
bool BackupDevice::saveBuffer(u8 *data, u32 size, bool _rewind, bool _truncate)
|
bool BackupDevice::saveBuffer(u8 *data, u32 size, bool _rewind, bool _truncate)
|
||||||
{
|
{
|
||||||
if (_rewind)
|
if (_rewind)
|
||||||
|
@ -942,20 +980,21 @@ u32 BackupDevice::importDataSize(const char *filename)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 BackupDevice::importData(const char *filename, u32 force_size)
|
bool BackupDevice::importData(const char *filename, u32 force_size)
|
||||||
{
|
{
|
||||||
u32 res = 0;
|
bool res = false;
|
||||||
if (strlen(filename) < 4) return res;
|
if (strlen(filename) < 4) return res;
|
||||||
|
|
||||||
if (memcmp(filename + strlen(filename) - 4, ".duc", 4) == 0)
|
if (memcmp(filename + strlen(filename) - 4, ".duc", 4) == 0)
|
||||||
res = import_duc(filename, force_size);
|
res = import_duc(filename, force_size);
|
||||||
else
|
else
|
||||||
if (import_no_gba(filename, force_size))
|
if (import_no_gba(filename, force_size))
|
||||||
res = 1;
|
res = true;
|
||||||
else
|
else
|
||||||
res = import_raw(filename, force_size);
|
res = import_raw(filename, force_size);
|
||||||
|
|
||||||
NDS_Reset();
|
if (res)
|
||||||
|
NDS_Reset();
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,14 +68,24 @@ public:
|
||||||
void reset_hardware();
|
void reset_hardware();
|
||||||
std::string getFilename() { return filename; }
|
std::string getFilename() { return filename; }
|
||||||
|
|
||||||
u8 readByte(u32 addr, const u8 init = 0xFF);
|
u8 readByte(u32 addr, const u8 init);
|
||||||
u16 readWord(u32 addr, const u16 init = 0xFFFF);
|
u16 readWord(u32 addr, const u16 init);
|
||||||
u32 readLong(u32 addr, const u32 init = 0xFFFFFFFF);
|
u32 readLong(u32 addr, const u32 init);
|
||||||
|
|
||||||
|
u8 readByte(const u8 init);
|
||||||
|
u16 readWord(const u16 init);
|
||||||
|
u32 readLong(const u32 init);
|
||||||
|
|
||||||
void writeByte(u32 addr, u8 val);
|
void writeByte(u32 addr, u8 val);
|
||||||
void writeWord(u32 addr, u16 val);
|
void writeWord(u32 addr, u16 val);
|
||||||
void writeLong(u32 addr, u32 val);
|
void writeLong(u32 addr, u32 val);
|
||||||
|
|
||||||
|
void writeByte(u8 val);
|
||||||
|
void writeWord(u16 val);
|
||||||
|
void writeLong(u32 val);
|
||||||
|
|
||||||
|
void seek(u32 pos) { fpMC->fseek(pos, SEEK_SET); }
|
||||||
|
|
||||||
void flushBackup() { fpMC->fflush(); }
|
void flushBackup() { fpMC->fflush(); }
|
||||||
|
|
||||||
u8 searchFileSaveType(u32 size);
|
u8 searchFileSaveType(u32 size);
|
||||||
|
@ -123,7 +133,7 @@ public:
|
||||||
bool isMovieMode;
|
bool isMovieMode;
|
||||||
|
|
||||||
u32 importDataSize(const char *filename);
|
u32 importDataSize(const char *filename);
|
||||||
u32 importData(const char *filename, u32 force_size = 0);
|
bool importData(const char *filename, u32 force_size = 0);
|
||||||
bool exportData(const char *filename);
|
bool exportData(const char *filename);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -2942,6 +2942,7 @@ int _main()
|
||||||
CommonSettings.loadToMemory = GetPrivateProfileBool("General", "loadType", true, IniName);
|
CommonSettings.loadToMemory = GetPrivateProfileBool("General", "loadType", true, IniName);
|
||||||
CommonSettings.cheatsDisable = GetPrivateProfileBool("General", "cheatsDisable", false, IniName);
|
CommonSettings.cheatsDisable = GetPrivateProfileBool("General", "cheatsDisable", false, IniName);
|
||||||
CommonSettings.autodetectBackupMethod = GetPrivateProfileInt("General", "autoDetectMethod", 0, IniName);
|
CommonSettings.autodetectBackupMethod = GetPrivateProfileInt("General", "autoDetectMethod", 0, IniName);
|
||||||
|
CommonSettings.backupSave = GetPrivateProfileBool("General", "backupSave", false, IniName);
|
||||||
|
|
||||||
ColorCtrl_Register();
|
ColorCtrl_Register();
|
||||||
if (!RegWndClass("DeSmuME", WindowProcedure, CS_DBLCLKS, LoadIcon(hAppInst, MAKEINTRESOURCE(ICONDESMUME))))
|
if (!RegWndClass("DeSmuME", WindowProcedure, CS_DBLCLKS, LoadIcon(hAppInst, MAKEINTRESOURCE(ICONDESMUME))))
|
||||||
|
|
Loading…
Reference in New Issue