From cc923dc4448091a1ee12586dba9aed26ab2301ff Mon Sep 17 00:00:00 2001 From: mtabachenko Date: Mon, 28 Oct 2013 07:53:17 +0000 Subject: [PATCH] core: - fix ROM serial info for DSi Enhanced ROMs; - add some new country codes; --- desmume/src/NDSSystem.cpp | 45 +++++++++++++++++++------------- desmume/src/utils/advanscene.cpp | 7 ++--- desmume/src/utils/advanscene.h | 15 +++++++---- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index ab84be948..e1018c25e 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -351,19 +351,22 @@ const RomBanner& GameInfo::getRomBanner() void GameInfo::populate() { - const char *regions[] = { "JPFSEODIRKHX", - "JPN", - "EUR", - "FRA", - "ESP", - "USA", - "USA", - "NOE", - "ITA", - "RUS", - "KOR", - "HOL", - "EUU", + const char *regions[] = { "JPFSEODIRKHXWVU", + "JPN", // J + "EUR", // P + "FRA", // F + "ESP", // S + "USA", // E + "INT", // O + "NOE", // D + "ITA", // I + "RUS", // R + "KOR", // K + "HOL", // H + "EUU", // X + "EUU", // V + "EUU", // W + "AUS", // U }; @@ -404,11 +407,16 @@ void GameInfo::populate() } else { - strcpy(ROMserial,"NTR- -"); + if (isDSiEnhanced()) + strcpy(ROMserial,"TWL- -"); + else + strcpy(ROMserial,"NTR- -"); memcpy(ROMserial+4, header.gameCode, 4); + u32 regions_num = ARRAY_SIZE(regions); u32 region = (u32)(std::max(strchr(regions[0],header.gameCode[3]) - regions[0] + 1, 0)); - if (region > 0 && region < 12) + + if (region < regions_num) strcat(ROMserial, regions[region]); else strcat(ROMserial, "Unknown"); @@ -645,8 +653,9 @@ int NDS_LoadROM(const char *filename, const char *physicalName, const char *logi if (advsc.checkDB(buf, gameInfo.crc)) { u8 sv = advsc.getSaveType(); - printf("Found in game database by %s:\n",advsc.getIdMethod()); - printf("\t* ROM save type: "); + printf("Found in game database by %s:\n", advsc.getIdMethod()); + printf("\t* ROM serial:\t\t%s\n", advsc.getSerial()); + printf("\t* ROM save type:\t"); if (sv == 0xFF) printf("Unknown"); else @@ -658,7 +667,7 @@ int NDS_LoadROM(const char *filename, const char *physicalName, const char *logi if (CommonSettings.autodetectBackupMethod == 1) backup_setManualBackupType(sv + 1); } - printf("\n\t* ROM crc: %08X\n", advsc.getCRC32()); + printf("\n\t* ROM crc:\t\t%08X\n", advsc.getCRC32()); } printf("\n"); diff --git a/desmume/src/utils/advanscene.cpp b/desmume/src/utils/advanscene.cpp index dba880673..af2233523 100644 --- a/desmume/src/utils/advanscene.cpp +++ b/desmume/src/utils/advanscene.cpp @@ -31,7 +31,7 @@ ADVANsCEne advsc; #define _ADVANsCEne_BASE_VERSION_MINOR 0 #define _ADVANsCEne_BASE_NAME "ADVANsCEne Nintendo DS Collection" -u8 ADVANsCEne::checkDB(const char *serial, u32 crc) +u8 ADVANsCEne::checkDB(const char *ROMserial, u32 crc) { loaded = false; FILE *fp = fopen(database_path.c_str(), "rb"); @@ -58,7 +58,7 @@ u8 ADVANsCEne::checkDB(const char *serial, u32 crc) { if (fread(buf, 1, 21, fp) != 21) break; - bool serialFound = (memcmp(&buf[4], serial, 4) == 0); + bool serialFound = (memcmp(&buf[4], ROMserial, 4) == 0); u32 dbcrc = LE_TO_LOCAL_32(*(u32*)(buf+8)); bool crcFound = (crc == dbcrc); @@ -67,7 +67,8 @@ u8 ADVANsCEne::checkDB(const char *serial, u32 crc) foundAsCrc = crcFound; foundAsSerial = serialFound; memcpy(&crc32, &buf[8], 4); - //printf("%s founded: crc32=%04X, save type %02X\n", serial, crc32, buf[12]); + memcpy(&serial[0], &buf[4], 4); + //printf("%s founded: crc32=%04X, save type %02X\n", ROMserial, crc32, buf[12]); saveType = buf[12]; fclose(fp); loaded = true; diff --git a/desmume/src/utils/advanscene.h b/desmume/src/utils/advanscene.h index da961899a..625c8da87 100644 --- a/desmume/src/utils/advanscene.h +++ b/desmume/src/utils/advanscene.h @@ -22,11 +22,13 @@ class ADVANsCEne { private: std::string database_path; // DeSmuME save types - u8 versionBase[2]; - char version[4]; time_t createTime; - u8 saveType; u32 crc32; + char serial[6]; + char version[4]; + u8 versionBase[2]; + u8 saveType; + bool loaded; bool foundAsCrc, foundAsSerial; @@ -45,16 +47,19 @@ public: { memset(versionBase, 0, sizeof(versionBase)); memset(version, 0, sizeof(version)); + memset(serial, 0, sizeof(serial)); } void setDatabase(const char *path) { loaded = false; database_path = path; } u32 convertDB(const char *in_filaname); - u8 checkDB(const char *serial, u32 crc); + u8 checkDB(const char *ROMserial, u32 crc); u32 getSaveType() { return saveType; } u32 getCRC32() { return crc32; } + char *getSerial() { return serial; } bool isLoaded() { return loaded; } const char* getIdMethod() { - if(foundAsCrc) return "CRC"; + if(foundAsSerial && foundAsCrc) return "Serial/CRC"; if(foundAsSerial) return "Serial"; + if(foundAsCrc) return "CRC"; return ""; } std::string lastImportErrorMessage;