gameboy: remove GoodGBX MBC1 Collection check code

Replace with direct comparison of internal ROM name

Signed-off-by: Tauwasser <tauwasser@tauwasser.eu>
This commit is contained in:
Tauwasser 2017-06-09 05:47:05 +02:00
parent a8ef5381bf
commit 8345e439f1
2 changed files with 31 additions and 25 deletions

View File

@ -464,6 +464,34 @@ bool gb_cart_slot_device_base::get_mmm01_candidate(const uint8_t *ROM, uint32_t
return false;
}
bool gb_cart_slot_device_base::is_mbc1col_game(const uint8_t *ROM, uint32_t len)
{
const uint8_t name_length = 0x10u;
static const uint8_t internal_names[][name_length + 1] = {
/* Bomberman Collection */
"BOMCOL\0\0\0\0\0\0\0\0\0\0",
/* Bomberman Selection */
"BOMSEL\0\0\0\0\0B2CK\xC0",
/* Genjin Collection */
"GENCOL\0\0\0\0\0\0\0\0\0\0",
/* Momotarou Collection */
"MOMOCOL\0\0\0\0\0\0\0\0\0",
/* Mortal Kombat I & II Japan */
"MORTALKOMBAT DUO",
/* Mortal Kombat I & II US */
"MORTALKOMBATI&II",
};
const uint8_t rows = sizeof(internal_names) / sizeof(internal_names[0]);
for (uint8_t i = 0x00; i < rows; ++i) {
if (0 == memcmp(&ROM[0x134], &internal_names[i][0], name_length))
return true;
}
return false;
}
int gb_cart_slot_device_base::get_cart_type(const uint8_t *ROM, uint32_t len)
{
int type = GB_MBC_NONE;
@ -547,31 +575,8 @@ int gb_cart_slot_device_base::get_cart_type(const uint8_t *ROM, uint32_t len)
}
/* Check if we're dealing with the multigame variant of the MBC1 mapper */
if (type == GB_MBC_MBC1)
{ // bomberman collection korea
if (ROM[0x134] == 0x42 && ROM[0x135] == 0x4f && ROM[0x136] == 0x4d && ROM[0x137] == 0x53)
type = GB_MBC_MBC1_COL;
// if (ROM[0x13f] == 0x42 && ROM[0x140] == 0x32 && ROM[0x141] == 0x43 && ROM[0x142] == 0x4B)
// type = GB_MBC_MBC1_COL;
// genjin collection
if (ROM[0x134] == 0x47 && ROM[0x135] == 0x45 && ROM[0x136] == 0x4e && ROM[0x137] == 0x43)
type = GB_MBC_MBC1_COL;
// bomberman collection japan
if (ROM[0x134] == 0x42 && ROM[0x135] == 0x4f && ROM[0x136] == 0x4d && ROM[0x137] == 0x43)
type = GB_MBC_MBC1_COL;
// mortal kombat I & II US
if (ROM[0x140] == 0x49 && ROM[0x141] == 0x26 && ROM[0x142] == 0x49 && ROM[0x143] == 0x49)
type = GB_MBC_MBC1_COL;
// mortal kombat I & II japan
if (ROM[0x140] == 0x20 && ROM[0x141] == 0x44 && ROM[0x142] == 0x55 && ROM[0x143] == 0x4f)
type = GB_MBC_MBC1_COL;
// momotarou collection 1 japan
if (ROM[0x137] == 0x4f && ROM[0x138] == 0x43 && ROM[0x139] == 0x4f && ROM[0x13a] == 0x4c)
type = GB_MBC_MBC1_COL;
// super chinese 123 dash japan
if (ROM[0x142] == 0x32 && ROM[0x143] == 0x33 && ROM[0x144] == 0x42 && ROM[0x145] == 0x41)
type = GB_MBC_MBC1_COL;
}
if (type == GB_MBC_MBC1 && is_mbc1col_game(ROM, len))
type = GB_MBC_MBC1_COL;
return type;
}

View File

@ -126,6 +126,7 @@ public:
int get_type() { return m_type; }
static int get_cart_type(const uint8_t *ROM, uint32_t len);
static bool get_mmm01_candidate(const uint8_t *ROM, uint32_t len);
static bool is_mbc1col_game(const uint8_t *ROM, uint32_t len);
// remove me when SGB is properly emulated
int get_sgb_hack() { return m_sgb_hack; }