Add prg and chr checksums and rearrange rom info logs
This commit is contained in:
@@ -29,6 +29,8 @@ typedef struct {
|
||||
int region; /* video system timing (ntsc, pal, dendy */
|
||||
|
||||
uint8 MD5[16];
|
||||
uint32 PRGCRC32;
|
||||
uint32 CHRCRC32;
|
||||
uint32 CRC32; /* Should be set by the iNES/UNIF loading
|
||||
* code, used by mapper/board code, maybe
|
||||
* other code in the future.
|
||||
|
||||
@@ -2089,8 +2089,6 @@ static char slash = '\\';
|
||||
static char slash = '/';
|
||||
#endif
|
||||
|
||||
extern uint32_t iNESGameCRC32;
|
||||
|
||||
bool retro_load_game(const struct retro_game_info *game)
|
||||
{
|
||||
unsigned i, j;
|
||||
@@ -2227,7 +2225,7 @@ bool retro_load_game(const struct retro_game_info *game)
|
||||
|
||||
for (i = 0; i < fourscore_len; i++)
|
||||
{
|
||||
if (fourscore_db_list[i].crc == iNESGameCRC32)
|
||||
if (fourscore_db_list[i].crc == iNESCart.CRC32)
|
||||
{
|
||||
FCEUI_DisableFourScore(0);
|
||||
enable_4player = true;
|
||||
@@ -2237,7 +2235,7 @@ bool retro_load_game(const struct retro_game_info *game)
|
||||
|
||||
for (i = 0; i < famicom_4p_len; i++)
|
||||
{
|
||||
if (famicom_4p_db_list[i].crc == iNESGameCRC32)
|
||||
if (famicom_4p_db_list[i].crc == iNESCart.CRC32)
|
||||
{
|
||||
GameInfo->inputfc = SIFC_4PLAYER;
|
||||
FCEUI_SetInputFC(SIFC_4PLAYER, &JSReturn, 0);
|
||||
|
||||
103
src/ines.c
103
src/ines.c
@@ -114,8 +114,6 @@ static void iNESGI(int h) {
|
||||
}
|
||||
}
|
||||
|
||||
uint32 iNESGameCRC32 = 0;
|
||||
|
||||
struct CRCMATCH {
|
||||
uint32 crc;
|
||||
char *name;
|
||||
@@ -205,7 +203,7 @@ static void SetInput(void) {
|
||||
int x = 0;
|
||||
|
||||
while (moo[x].input1 >= 0 || moo[x].input2 >= 0 || moo[x].inputfc >= 0) {
|
||||
if (moo[x].crc32 == iNESGameCRC32) {
|
||||
if (moo[x].crc32 == iNESCart.CRC32) {
|
||||
GameInfo->input[0] = moo[x].input1;
|
||||
GameInfo->input[1] = moo[x].input2;
|
||||
GameInfo->inputfc = moo[x].inputfc;
|
||||
@@ -307,7 +305,7 @@ static void CheckHInfo(void) {
|
||||
|
||||
x = 0;
|
||||
do {
|
||||
if (moo[x].crc32 == iNESGameCRC32) {
|
||||
if (moo[x].crc32 == iNESCart.CRC32) {
|
||||
if (moo[x].mapper >= 0) {
|
||||
if (moo[x].mapper & 0x800 && VROM_size) {
|
||||
VROM_size = 0;
|
||||
@@ -864,19 +862,60 @@ int iNESLoad(const char *name, FCEUFILE *fp) {
|
||||
|
||||
if (VROM_size)
|
||||
FCEU_fread(VROM, 0x2000, chrRom, fp);
|
||||
|
||||
|
||||
iNESCart.PRGCRC32 = CalcCRC32(0, ROM, prgRom * 0x4000);
|
||||
iNESCart.CHRCRC32 = CalcCRC32(0, VROM, chrRom * 0x2000);
|
||||
iNESCart.CRC32 = CalcCRC32(iNESCart.PRGCRC32, VROM, chrRom * 0x2000);
|
||||
|
||||
md5_starts(&md5);
|
||||
md5_update(&md5, ROM, prgRom << 14);
|
||||
iNESGameCRC32 = CalcCRC32(0, ROM, prgRom << 14);
|
||||
|
||||
if (VROM_size) {
|
||||
iNESGameCRC32 = CalcCRC32(iNESGameCRC32, VROM, chrRom << 13);
|
||||
if (VROM_size)
|
||||
md5_update(&md5, VROM, chrRom << 13);
|
||||
}
|
||||
md5_finish(&md5, iNESCart.MD5);
|
||||
memcpy(&GameInfo->MD5, &iNESCart.MD5, sizeof(iNESCart.MD5));
|
||||
|
||||
iNESCart.CRC32 = iNESGameCRC32;
|
||||
mappername = "Not Listed";
|
||||
|
||||
for (mappertest = 0; mappertest < (sizeof bmap / sizeof bmap[0]) - 1; mappertest++) {
|
||||
if (bmap[mappertest].number == MapperNo) {
|
||||
mappername = (char*)bmap[mappertest].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
FCEU_printf(" PRG-ROM CRC32: 0x%08X\n", iNESCart.PRGCRC32);
|
||||
FCEU_printf(" PRG+CHR CRC32: 0x%08X\n", iNESCart.CRC32);
|
||||
FCEU_printf(" PRG+CHR MD5: 0x%s\n", md5_asciistr(iNESCart.MD5));
|
||||
FCEU_printf(" PRG-ROM: %3d x 16KiB\n", prgRom);
|
||||
FCEU_printf(" CHR-ROM: %3d x 8KiB\n", chrRom);
|
||||
|
||||
if (iNES2) {
|
||||
const char *tv_region[] = { "NTSC", "PAL", "Multi-region", "Dendy" };
|
||||
unsigned PRGRAM = iNESCart.prgRam + iNESCart.prgRam_battery;
|
||||
unsigned CHRRAM = iNESCart.chrRam + iNESCart.chrRam_battery;
|
||||
|
||||
FCEU_printf(" NES 2.0 extended iNES.\n");
|
||||
FCEU_printf(" Mapper #: %3d\n", MapperNo);
|
||||
FCEU_printf(" Sub Mapper #: %3d\n", subMapper);
|
||||
FCEU_printf(" Mapper name: %s\n", mappername);
|
||||
if (PRGRAM || CHRRAM) {
|
||||
FCEU_printf(" PRG RAM: %d KB\n", PRGRAM / 1024);
|
||||
FCEU_printf(" CHR RAM: %d KB\n", CHRRAM / 1024);
|
||||
if (head.ROM_type & 0x02) {
|
||||
FCEU_printf(" PRG RAM backed by battery: %d KiB\n", iNESCart.prgRam_battery / 1024);
|
||||
FCEU_printf(" CHR RAM backed by battery: %d KiB\n", iNESCart.chrRam_battery / 1024);
|
||||
}
|
||||
}
|
||||
FCEU_printf(" Mirroring: %s\n", Mirroring == 2 ? "None (Four-screen)" : Mirroring ? "Vertical" : "Horizontal");
|
||||
FCEU_printf(" System: %s\n", tv_region[region]);
|
||||
FCEU_printf(" Trained: %s\n", (head.ROM_type & 4) ? "Yes" : "No");
|
||||
} else {
|
||||
FCEU_printf(" Mapper #: %3d\n", MapperNo);
|
||||
FCEU_printf(" Mapper name: %s\n", mappername);
|
||||
FCEU_printf(" Mirroring: %s\n", Mirroring == 2 ? "None (Four-screen)" : Mirroring ? "Vertical" : "Horizontal");
|
||||
FCEU_printf(" Battery-backed: %s\n", (head.ROM_type & 2) ? "Yes" : "No");
|
||||
FCEU_printf(" Trained: %s\n", (head.ROM_type & 4) ? "Yes" : "No");
|
||||
}
|
||||
|
||||
SetInput();
|
||||
CheckHInfo();
|
||||
@@ -911,48 +950,6 @@ int iNESLoad(const char *name, FCEUFILE *fp) {
|
||||
iNESCart.battery = (head.ROM_type & 2) ? 1 : 0;
|
||||
iNESCart.mirror = Mirroring;
|
||||
|
||||
mappername = "Not Listed";
|
||||
|
||||
for (mappertest = 0; mappertest < (sizeof bmap / sizeof bmap[0]) - 1; mappertest++) {
|
||||
if (bmap[mappertest].number == MapperNo) {
|
||||
mappername = (char*)bmap[mappertest].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (iNES2) FCEU_printf(" NES 2.0 extended iNES.\n");
|
||||
FCEU_printf(" ROM CRC32: 0x%08lx\n", iNESGameCRC32);
|
||||
FCEU_printf(" ROM MD5: 0x%s\n", md5_asciistr(iNESCart.MD5));
|
||||
FCEU_printf(" PRG ROM: %3d x 16KiB\n", prgRom);
|
||||
FCEU_printf(" CHR ROM: %3d x 8KiB\n", chrRom);
|
||||
|
||||
if (iNES2) {
|
||||
const char *tv_region[] = { "NTSC", "PAL", "Multi-region", "Dendy" };
|
||||
unsigned PRGRAM = iNESCart.prgRam + iNESCart.prgRam_battery;
|
||||
unsigned CHRRAM = iNESCart.chrRam + iNESCart.chrRam_battery;
|
||||
|
||||
FCEU_printf(" Mapper #: %3d\n", MapperNo);
|
||||
FCEU_printf(" Sub Mapper #: %3d\n", subMapper);
|
||||
FCEU_printf(" Mapper name: %s\n", mappername);
|
||||
if (PRGRAM || CHRRAM) {
|
||||
FCEU_printf(" PRG RAM: %d KiB\n", PRGRAM / 1024);
|
||||
FCEU_printf(" CHR RAM: %d KiB\n", CHRRAM / 1024);
|
||||
if (head.ROM_type & 0x02) {
|
||||
FCEU_printf(" PRG RAM backed by battery: %d KiB\n", iNESCart.prgRam_battery / 1024);
|
||||
FCEU_printf(" CHR RAM backed by battery: %d KiB\n", iNESCart.chrRam_battery / 1024);
|
||||
}
|
||||
}
|
||||
FCEU_printf(" Mirroring: %s\n", Mirroring == 2 ? "None (Four-screen)" : Mirroring ? "Vertical" : "Horizontal");
|
||||
FCEU_printf(" System: %s\n", tv_region[region]);
|
||||
FCEU_printf(" Trained: %s\n", (head.ROM_type & 4) ? "Yes" : "No");
|
||||
} else {
|
||||
FCEU_printf(" Mapper #: %3d\n", MapperNo);
|
||||
FCEU_printf(" Mapper name: %s\n", mappername);
|
||||
FCEU_printf(" Mirroring: %s\n", Mirroring == 2 ? "None (Four-screen)" : Mirroring ? "Vertical" : "Horizontal");
|
||||
FCEU_printf(" Battery-backed: %s\n", (head.ROM_type & 2) ? "Yes" : "No");
|
||||
FCEU_printf(" Trained: %s\n", (head.ROM_type & 4) ? "Yes" : "No");
|
||||
}
|
||||
|
||||
if (!iNES_Init(MapperNo)) {
|
||||
FCEU_printf("\n");
|
||||
FCEU_PrintError(" iNES mapper #%d is not supported at all.\n", MapperNo);
|
||||
|
||||
13
src/unif.c
13
src/unif.c
@@ -771,6 +771,10 @@ int UNIFLoad(const char *name, FCEUFILE *fp) {
|
||||
}
|
||||
}
|
||||
|
||||
UNIFCart.PRGCRC32 = CalcCRC32(0, ROM, UNIF_PRGROMSize);
|
||||
UNIFCart.CHRCRC32 = CalcCRC32(0, VROM, UNIF_CHRROMSize);
|
||||
UNIFCart.CRC32 = CalcCRC32(UNIFCart.PRGCRC32, VROM, UNIF_CHRROMSize);
|
||||
|
||||
md5_starts(&md5);
|
||||
md5_update(&md5, ROM, UNIF_PRGROMSize);
|
||||
if (VROM_size)
|
||||
@@ -787,13 +791,14 @@ int UNIFLoad(const char *name, FCEUFILE *fp) {
|
||||
if (!InitializeBoard())
|
||||
goto aborto;
|
||||
|
||||
FCEU_printf(" PRG-ROM CRC32: 0x%08X\n", UNIFCart.PRGCRC32);
|
||||
FCEU_printf(" PRG+CHR CRC32: 0x%08X\n", UNIFCart.CRC32);
|
||||
FCEU_printf(" PRG+CHR MD5 : 0x%s\n", md5_asciistr(UNIFCart.MD5));
|
||||
if (UNIFCart.mapper)
|
||||
FCEU_printf(" [Unif] Mapper: %d\n", UNIFCart.mapper);
|
||||
FCEU_printf(" [Unif] SubMapper: %d\n", UNIFCart.submapper);
|
||||
FCEU_printf(" [Unif] PRG ROM: %d KiB\n", UNIF_PRGROMSize / 1024);
|
||||
if (VROM_size)
|
||||
FCEU_printf(" [Unif] CHR ROM: %d KiB\n", UNIF_CHRROMSize / 1024);
|
||||
FCEU_printf(" [Unif] ROM MD5: 0X%s\n", md5_asciistr(UNIFCart.MD5));
|
||||
FCEU_printf(" [Unif] PRG ROM: %d KiB\n", UNIF_PRGROMSize >> 10);
|
||||
FCEU_printf(" [Unif] CHR ROM: %d KiB\n", UNIF_CHRROMSize / 1024);
|
||||
|
||||
GameInterface = UNIFGI;
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user