mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Implement parts of DIVerify that can be useful. (copy tmd to emulated nand for disc titles)
correct some parts of uid.sys as disc title ids are included title in uid + tmd on nand is how the sysmenu knows which save files to look for. IE games that are displayed in the disc channel at least once and have a save file will be viewable in the sysmenu save manager git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6189 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -21,20 +21,68 @@
|
||||
|
||||
namespace Common
|
||||
{
|
||||
std::string CreateTicketFileName(u64 _TitleID)
|
||||
std::string CreateTicketFileName(u64 _titleID)
|
||||
{
|
||||
char TicketFilename[1024];
|
||||
sprintf(TicketFilename, "%sticket/%08x/%08x.tik", File::GetUserPath(D_WIIUSER_IDX), (u32)(_TitleID >> 32), (u32)_TitleID);
|
||||
sprintf(TicketFilename, "%sticket/%08x/%08x.tik", File::GetUserPath(D_WIIUSER_IDX), (u32)(_titleID >> 32), (u32)_titleID);
|
||||
|
||||
return TicketFilename;
|
||||
}
|
||||
|
||||
std::string CreateTitleContentPath(u64 _TitleID)
|
||||
std::string CreateTitleDataPath(u64 _titleID)
|
||||
{
|
||||
char path[1024];
|
||||
sprintf(path, "%stitle/%08x/%08x/data", File::GetUserPath(D_WIIUSER_IDX), (u32)(_titleID >> 32), (u32)_titleID);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
std::string CreateTitleContentPath(u64 _titleID)
|
||||
{
|
||||
char ContentPath[1024];
|
||||
sprintf(ContentPath, "%stitle/%08x/%08x/content", File::GetUserPath(D_WIIUSER_IDX), (u32)(_TitleID >> 32), (u32)_TitleID);
|
||||
sprintf(ContentPath, "%stitle/%08x/%08x/content", File::GetUserPath(D_WIIUSER_IDX), (u32)(_titleID >> 32), (u32)_titleID);
|
||||
|
||||
return ContentPath;
|
||||
}
|
||||
|
||||
};
|
||||
bool CheckTitleTMD(u64 _titleID)
|
||||
{
|
||||
std::string TitlePath;
|
||||
TitlePath = CreateTitleContentPath(_titleID) + "/title.tmd";
|
||||
if (File::Exists(TitlePath.c_str()))
|
||||
{
|
||||
FILE* pTMDFile = fopen(TitlePath.c_str(), "rb");
|
||||
if(pTMDFile)
|
||||
{
|
||||
u64 TitleID = 0xDEADBEEFDEADBEEFULL;
|
||||
fseek(pTMDFile, 0x18C, SEEK_SET);
|
||||
fread(&TitleID, 8, 1, pTMDFile);
|
||||
fclose(pTMDFile);
|
||||
if (_titleID == Common::swap64(TitleID))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
INFO_LOG(DISCIO, "Invalid or no tmd for title %08x %08x", (u32)(_titleID >> 32), (u32)(_titleID & 0xFFFFFFFF));
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CheckTitleTIK(u64 _titleID)
|
||||
{
|
||||
std::string TikPath = Common::CreateTicketFileName(_titleID);
|
||||
if (File::Exists(TikPath.c_str()))
|
||||
{
|
||||
FILE* pTIKFile = fopen(TikPath.c_str(), "rb");
|
||||
if(pTIKFile)
|
||||
{
|
||||
u64 TitleID = 0xDEADBEEFDEADBEEFULL;
|
||||
fseek(pTIKFile, 0x1dC, SEEK_SET);
|
||||
fread(&TitleID, 8, 1, pTIKFile);
|
||||
fclose(pTIKFile);
|
||||
if (_titleID == Common::swap64(TitleID))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
INFO_LOG(DISCIO, "Invalid or no tik for title %08x %08x", (u32)(_titleID >> 32), (u32)(_titleID & 0xFFFFFFFF));
|
||||
return false;
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user