Add blank private.sav files for system files

This commit is contained in:
CasualPokePlayer 2025-07-16 19:34:21 -07:00
parent 22fa04c80b
commit 323fbe0ba3
2 changed files with 51 additions and 0 deletions

Binary file not shown.

View File

@ -392,6 +392,14 @@ static const std::pair<const char*, const char*> RegionalNandTitlePaths[] =
std::make_pair("0:/title/00030017/484e41%x/content/title.tmd", "0:/title/00030017/484e41%x/content/%08x.app"),
};
static const std::pair<const char*, const u32> NandSavPaths[] =
{
std::make_pair("0:/title/00030005/484e49%x/data/private.sav", 0x80000),
std::make_pair("0:/title/00030005/484e4b%x/data/private.sav", 0x80000),
std::make_pair("0:/title/00030015/484e46%x/data/private.sav", 0x4000),
std::make_pair("0:/title/00030017/484e41%x/data/private.sav", 0x4000),
};
static const char* const PhotoNandDirs[] =
{
"0:/photo",
@ -740,6 +748,49 @@ static melonDS::DSi_NAND::NANDImage CreateNandImage(
nandFiles.push_back(std::make_pair(std::move(shared2Sound), std::string("0:/shared2/0000")));
}
// add in a few blank sav files (these aren't created automatically)
// there are just 512KiB and 16KiB saves here as a note (so just hardcode things for such)
for (auto nandSavPath : NandSavPaths)
{
std::vector<u8> nandSav;
nandSav.resize(nandSavPath.second);
memset(nandSav.data(), 0, nandSav.size());
// write VBR
vbr = reinterpret_cast<VolumeBootRecord*>(&nandSav[0]);
vbr->JumpOpcode[0] = 0xE9;
vbr->JumpOpcode[1] = 0x00;
vbr->JumpOpcode[2] = 0x00;
memcpy(vbr->OemName, "E ", sizeof(vbr->OemName));
vbr->BytesPerSector = 0x200;
vbr->SectorsPerCluster = 1;
vbr->NumReservedSectors = 1;
vbr->NumFATs = 2;
vbr->MaxRootDirectoryEntries = 32;
vbr->NumSectorsU16 = nandSav.size() == 0x80000 ? 0x3E8 : 0x1B;
vbr->MediaDescriptor = 0xF8;
vbr->SectorsPerFAT = nandSav.size() == 0x80000 ? 3 : 1;
vbr->SectorsPerTrack = nandSav.size() == 0x80000 ? 10 : 3;
vbr->NumHeads = nandSav.size() == 0x80000 ? 10 : 3;
vbr->NumHiddenSectors = 0;
vbr->NumSectorsU32 = 0;
vbr->DriveNumber = 2;
vbr->Reserved = 0;
vbr->ExBootSignature = 0x29;
vbr->VolumeID = 0x12345678;
memcpy(vbr->VolumeLabel, "V ", sizeof(vbr->VolumeLabel));
memset(vbr->FileSystemType, 0x00, sizeof(vbr->FileSystemType));
memset(vbr->BootCode, 0x00, sizeof(vbr->BootCode));
vbr->BootSignature = 0xAA55;
// init both FATs
memcpy(&nandSav[(1 + 0) * 0x200], &INIT_FAT12, sizeof(INIT_FAT12));
memcpy(&nandSav[(1 + vbr->SectorsPerFAT) * 0x200], &INIT_FAT12, sizeof(INIT_FAT12));
snprintf(nandPath, sizeof(nandPath), nandSavPath.first, regionIdChar);
nandFiles.push_back(std::make_pair(std::move(nandSav), std::string(nandPath)));
}
// import in all the old files
for (auto& nandFile : nandFiles)
{