- the type of ROM serial code is changed (now NTR-****-***)
This commit is contained in:
mtabachenko 2009-12-21 14:06:04 +00:00
parent 0eae3afc27
commit 41297b6d8e
7 changed files with 119 additions and 30 deletions

View File

@ -266,10 +266,28 @@ static u32 ones32(u32 x)
void GameInfo::populate()
{
const char *regions[] = { "JPFSEDIRKH",
"JPN",
"EUR",
"FRA",
"ESP",
"USA",
"NOE",
"ITA",
"RUS",
"KOR",
"HOL",
};
NDS_header * _header = NDS_getROMHeader();
header = *_header;
delete _header;
memset(ROMserial, 0, sizeof(ROMserial));
memset(ROMname, 0, sizeof(ROMname));
memset(ROMfullName, 0, sizeof(ROMfullName));
if (
// ??? in all Homebrews game title have is 2E0000EA
//(
@ -290,16 +308,28 @@ void GameInfo::populate()
header.makerCode == 0x0
)
{
memset(ROMserial, 0, sizeof(ROMserial));
strcpy(ROMserial, "Homebrew");
}
else
{
memset(ROMserial, '_', sizeof(ROMserial));
memcpy(ROMserial, header.gameTile, strlen(header.gameTile) < 12 ? strlen(header.gameTile) : 12);
memcpy(ROMserial+12+1, header.gameCode, 4);
memcpy(ROMserial+12+1+4, &header.makerCode, 2);
memset(ROMserial+19, '\0', 1);
strcpy(ROMserial,"NTR- -");
memcpy(ROMserial+4, header.gameCode, 4);
u32 region = (u32)(std::max<s32>(strchr(regions[0],header.gameCode[3]) - regions[0] + 1, 0));
if (region != 0)
strcat(ROMserial, regions[region]);
else
strcat(ROMserial, "Unknown");
memcpy(ROMname, header.gameTile, 12);
trim(ROMname);
u8 num = (T1ReadByte((u8*)romdata, header.IconOff) == 1)?6:7;
for (int i = 0; i < num; i++)
{
wcstombs(ROMfullName[i], (wchar_t *)(romdata+header.IconOff+0x240+(i*0x100)), 0x100);
trim(ROMfullName[i]);
}
}
}
#ifdef WIN32
@ -408,8 +438,9 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename)
gameInfo.populate();
gameInfo.crc = crc32(0,(u8*)gameInfo.romdata,gameInfo.romsize);
INFO("\nROM crc: %08X\n\n", gameInfo.crc);
INFO("\nROM serial: %s\n", gameInfo.ROMserial);
INFO("\nROM crc: %08X\n", gameInfo.crc);
INFO("ROM serial: %s\n", gameInfo.ROMserial);
INFO("ROM internal name: %s\n\n", gameInfo.ROMname);
return 1;
}
@ -528,8 +559,9 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename)
gameInfo.populate();
gameInfo.crc = crc32(0,data,size);
INFO("\nROM crc: %08X\n\n", gameInfo.crc);
INFO("\nROM serial: %s\n", gameInfo.ROMserial);
INFO("\nROM crc: %08X\n", gameInfo.crc);
INFO("ROM serial: %s\n", gameInfo.ROMserial);
INFO("ROM internal name: %s\n\n", gameInfo.ROMname);
return ret;
}

View File

@ -284,6 +284,8 @@ struct GameInfo
u32 crc;
NDS_header header;
char ROMserial[20];
char ROMname[20];
char ROMfullName[7][0x100];
void populate();
char* romdata;
int romsize;

View File

@ -543,8 +543,12 @@ BOOL CHEATS::save()
if (flist)
{
fprintf(flist, "; DeSmuME cheats file. VERSION %i.%03i\n", CHEAT_VERSION_MAJOR, CHEAT_VERSION_MINOR);
fprintf(flist, "Name=%s\n", gameInfo.ROMserial);
fputs("; lists list\n", flist);
strcpy(buf, gameInfo.ROMfullName[0]);
trim(buf);
removeSpecialChars(buf);
fprintf(flist, "Name=%s\n", buf);
fprintf(flist, "Serial=%s\n", gameInfo.ROMserial);
fputs("\n; lists list\n", flist);
for (int i = 0; i < num; i++)
{
if (list[i].num == 0) continue;
@ -610,7 +614,7 @@ BOOL CHEATS::load()
line++; // only for debug
memset(buf, 0, sizeof(buf));
fgets(buf, sizeof(buf), flist);
strcpy(buf, trim(buf));
trim(buf);
if ((strlen(buf) == 0) || (buf[0] == ';')) continue;
memset(&tmp_cht, 0, sizeof(tmp_cht));

View File

@ -61,3 +61,21 @@ char *trim(char *s)
ptr[1] = '\0';
return s;
}
char *removeSpecialChars(char *s)
{
char *buf = s;
if (!s) return NULL;
if (!*s) return s;
for (int i = 0; i < strlen(s); i++)
{
if (isspace(s[i]) && (s[i] != 0x20))
*buf = 0x20;
else
*buf = s[i];
buf++;
}
*buf = 0;
return s;
}

View File

@ -57,6 +57,7 @@ extern u8 logo_data[156];
extern u8 reverseBitsInByte(u8 x);
extern char *trim(char *s);
extern char *removeSpecialChars(char *s);
#endif

View File

@ -1,6 +1,4 @@
/* Copyright (C) 2006 yopyop
Copyright (C) 2008 CrazyMax (mtabachenko)
Copyright (C) 2009 DeSmuME team
/* Copyright 2008-2009 DeSmuME team
This file is part of DeSmuME
@ -16,7 +14,7 @@
You should have received a copy of the GNU General Public License
along with DeSmuME; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "../common.h"
@ -34,10 +32,10 @@ void printlog(const char *fmt, ...);
void OpenConsole()
{
COORD csize;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
SMALL_RECT srect;
char buf[256];
COORD csize = {0};
CONSOLE_SCREEN_BUFFER_INFO csbiInfo = {0};
SMALL_RECT srect = {0};
char buf[256] = {0};
//dont do anything if we're already attached
if (hConsole) return;
@ -61,40 +59,42 @@ void OpenConsole()
//if we failed to attach, then alloc a new console
if(!attached)
{
AllocConsole();
if (!AllocConsole()) return;
}
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE) return;
//redirect stdio
long lStdHandle = (long)hConsole;
int hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
if(hConHandle == -1)
return; //this fails from a visual studio command prompt
#if 1
FILE *fp = _fdopen( hConHandle, "w" );
#else
FILE *fp = fopen( "c:\\desmume.log", "w" );
#endif
*stdout = *fp;
//and stderr
*stderr = *fp;
memset(buf,0,256);
sprintf(buf,"%s OUTPUT", EMU_DESMUME_NAME_AND_VERSION());
SetConsoleTitle(TEXT(buf));
csize.X = 60;
csize.Y = 800;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), csize);
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
SetConsoleScreenBufferSize(hConsole, csize);
GetConsoleScreenBufferInfo(hConsole, &csbiInfo);
srect = csbiInfo.srWindow;
srect.Right = srect.Left + 99;
srect.Bottom = srect.Top + 64;
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &srect);
SetConsoleWindowInfo(hConsole, TRUE, &srect);
SetConsoleCP(GetACP());
SetConsoleOutputCP(GetACP());
if(attached) printlog("\n");
printlog("%s\n",EMU_DESMUME_NAME_AND_VERSION());
printlog("- compiled: %s %s\n\n",__DATE__,__TIME__);
}
void CloseConsole() {

View File

@ -23,12 +23,41 @@
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <algorithm>
#include "convert.h"
CHEATS_LIST list[MAX_CHEAT_LIST] = {0};
u32 num = 0;
char ROMserial[50] = {0};
static void convertSerial()
{
const char *regions[] = { "JPFSEDIRKH",
"JPN",
"EUR",
"FRA",
"ESP",
"USA",
"NOE",
"ITA",
"RUS",
"KOR",
"HOL",
};
char buf[5] = {0};
if (!ROMserial[0]) return;
memcpy(buf, &ROMserial[strlen(ROMserial)-6], 4);
sprintf(ROMserial, "NTR-%s-", buf);
u32 region = (u32)(std::max<s32>(strchr(regions[0], buf[3]) - regions[0] + 1, 0));
if (region != 0)
strcat(ROMserial, regions[region]);
else
memset(ROMserial, 0, sizeof(ROMserial));
}
static void cheatsClear()
{
memset(list, 0, sizeof(list));
@ -47,8 +76,9 @@ bool save(char *filename)
if (flist)
{
fprintf(flist, "; DeSmuME cheat file. VERSION %i.%03i\n", CHEAT_VERSION_MAJOR, CHEAT_VERSION_MINOR);
fprintf(flist, "Name=%s\n", ROMserial);
fputs("; lists list\n", flist);
fprintf(flist, "Name=\n");
fprintf(flist, "Serial=%s\n", ROMserial);
fputs("\n; lists list\n", flist);
for (unsigned int i = 0; i < num; i++)
{
if (list[i].num == 0) continue;
@ -199,6 +229,8 @@ bool load_1_3(char *fname)
//INFO("Loaded %i cheats\n", last);
num = last;
convertSerial();
return true;
}
return false;