diff --git a/src/ines.c b/src/ines.c index 18e8503..6d811a0 100644 --- a/src/ines.c +++ b/src/ines.c @@ -415,7 +415,7 @@ typedef struct { #define INES_BOARD_BEGIN() static BMAPPINGLocal bmap[] = { #define INES_BOARD_END() { (uint8_t*)"", 0, NULL} }; -#define INES_BOARD(a, b, c) { a, b, c }, +#define INES_BOARD(a, b, c) { (uint8_t*)a, b, c }, INES_BOARD_BEGIN() INES_BOARD( "NROM", 0, NROM_Init ) @@ -841,6 +841,7 @@ static void rom_load_ines2(void) { } int iNESLoad(const char *name, FCEUFILE *fp) { + const char *tv_region[] = { "NTSC", "PAL", "Multi-region", "Dendy" }; struct md5_context md5; char* mappername = NULL; uint64 filesize = FCEU_fgetsize(fp); @@ -946,38 +947,49 @@ int iNESLoad(const char *name, FCEUFILE *fp) { } } + if (iNESCart.iNES2 == 0) { + if (strstr(name, "(E)") || strstr(name, "(e)") || + strstr(name, "(Europe)") || strstr(name, "(PAL)") || + strstr(name, "(F)") || strstr(name, "(f)") || + strstr(name, "(G)") || strstr(name, "(g)") || + strstr(name, "(I)") || strstr(name, "(i)") || + strstr(name, "(S)") || strstr(name, "(s)") || + strstr(name, "(France)") || strstr(name, "(Germany)") || + strstr(name, "(Italy)") || strstr(name, "(Spain)") || + strstr(name, "(Sweden)") || strstr(name, "(Sw)") || + strstr(name, "(Australia)") || strstr(name, "(A)") || + strstr(name, "(a)")) { + iNESCart.region = 1; + } + } + 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", ROM_size); FCEU_printf(" CHR-ROM: %3d x 8KiB\n", VROM_size); + FCEU_printf(" Mapper #: %3d\n", iNESCart.mapper); + FCEU_printf(" Mapper name: %s\n", mappername); + FCEU_printf(" Mirroring: %s\n", iNESCart.mirror == 2 ? "None (Four-screen)" : iNESCart.mirror ? "Vertical" : "Horizontal"); + FCEU_printf(" Battery: %s\n", (head.ROM_type & 2) ? "Yes" : "No"); + FCEU_printf(" System: %s\n", tv_region[iNESCart.region]); + FCEU_printf(" Trained: %s\n", (head.ROM_type & 4) ? "Yes" : "No"); if (iNESCart.iNES2) { - const char *tv_region[] = { "NTSC", "PAL", "Multi-region", "Dendy" }; unsigned PRGRAM = iNESCart.PRGRamSize + iNESCart.PRGRamSaveSize; unsigned CHRRAM = iNESCart.CHRRamSize + iNESCart.CHRRamSaveSize; FCEU_printf(" NES 2.0 extended iNES.\n"); - FCEU_printf(" Mapper #: %3d\n", iNESCart.mapper); FCEU_printf(" Sub Mapper #: %3d\n", iNESCart.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.PRGRamSaveSize / 1024); - FCEU_printf(" CHR RAM backed by battery: %d KiB\n", iNESCart.CHRRamSaveSize / 1024); + FCEU_printf(" PRG RAM: %d KB (%d KB battery-backed)\n", PRGRAM / 1024, iNESCart.PRGRamSaveSize / 1024); + FCEU_printf(" CHR RAM: %d KB (%d KB battery-backed)\n", CHRRAM / 1024, iNESCart.CHRRamSaveSize / 1024); + } else { + FCEU_printf(" PRG RAM: %d KB\n", PRGRAM / 1024); + FCEU_printf(" CHR RAM: %d KB\n", CHRRAM / 1024); } - } - FCEU_printf(" Mirroring: %s\n", iNESCart.mirror == 2 ? "None (Four-screen)" : iNESCart.mirror ? "Vertical" : "Horizontal"); - FCEU_printf(" System: %s\n", tv_region[iNESCart.region]); - FCEU_printf(" Trained: %s\n", (head.ROM_type & 4) ? "Yes" : "No"); - } else { - FCEU_printf(" Mapper #: %3d\n", iNESCart.mapper); - FCEU_printf(" Mapper name: %s\n", mappername); - FCEU_printf(" Mirroring: %s\n", iNESCart.mirror == 2 ? "None (Four-screen)" : iNESCart.mirror ? "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"); + } } ResetCartMapping(); @@ -1035,40 +1047,12 @@ int iNESLoad(const char *name, FCEUFILE *fp) { GameInterface = iNESGI; - /* if not ines2 header and no region override was set, then use filename keywords to set cpu/ppu timing */ - if (iNESCart.iNES2 == 0 && iNESCart.region == 0) { - if (strstr(name, "(E)") || strstr(name, "(e)") || - strstr(name, "(Europe)") || strstr(name, "(PAL)") || - strstr(name, "(F)") || strstr(name, "(f)") || - strstr(name, "(G)") || strstr(name, "(g)") || - strstr(name, "(I)") || strstr(name, "(i)") || - strstr(name, "(S)") || strstr(name, "(s)") || - strstr(name, "(France)") || strstr(name, "(Germany)") || - strstr(name, "(Italy)") || strstr(name, "(Spain)") || - strstr(name, "(Sweden)") || strstr(name, "(Sw)") || - strstr(name, "(Australia)") || strstr(name, "(A)") || - strstr(name, "(a)")) { - iNESCart.region = 1; - } - } - - switch (iNESCart.region) { /* 0: RP2C02 ("NTSC NES") * 1: RP2C07 ("Licensed PAL NES") * 2: Multiple-region - * 3: UMC 6527P ("Dendy") - */ - case 1: - FCEUI_SetVidSystem(1); - break; - case 3: - dendy = 1; - /* fallthrough */ - case 0: - case 2: - FCEUI_SetVidSystem(0); - break; - } + * 3: UMC 6527P ("Dendy") */ + if (iNESCart.region == 3) dendy = 1; + FCEUI_SetVidSystem((iNESCart.region == 1) ? 1 : 0); return 1; }