diff options
Diffstat (limited to 'src/devices/bus/nes/nes_ines.hxx')
-rw-r--r-- | src/devices/bus/nes/nes_ines.hxx | 181 |
1 files changed, 108 insertions, 73 deletions
diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index a985aa9833d..95f35e14735 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -61,8 +61,8 @@ static const nes_mmc mmc_list[] = { 26, KONAMI_VRC6 }, { 27, UNL_CC21 }, // Mihunche, but previously used for World Hero { 28, UNL_ACTION53 }, // Multi-discrete PCB designed by Tepples for Action 53 - { 29, UNL_CUFROM }, // homebrew PCB used by Glider - { 30, UNL_UNROM512 }, // UNROM 512 + Flash + { 29, SEALIE_CUFROM }, // homebrew PCB used by Glider + { 30, SEALIE_UNROM512 }, // UNROM 512 + Flash { 31, UNL_2A03PURITANS }, // PCB designed by infinitelives & rainwarrior for 2A03 Puritans Album { 32, IREM_G101 }, { 33, TAITO_TC0190FMC }, @@ -114,7 +114,7 @@ static const nes_mmc mmc_list[] = { 79, AVE_NINA06 }, { 80, TAITO_X1_005 }, { 81, NTDEC_N715021 }, // 81 Super Gun - { 82, TAITO_X1_017 }, + // 82 Taito X1-017 mapper for old mis-ordered PRG dumps { 83, CONY_BOARD }, // 84 Pasofami hacked images? { 85, KONAMI_VRC7 }, @@ -123,7 +123,7 @@ static const nes_mmc mmc_list[] = { 88, NAMCOT_34X3 }, { 89, SUNSOFT_2 }, { 90, JYCOMPANY_A }, - { 91, UNL_MK2 }, + { 91, UNL_JY830623C }, { 92, JALECO_JF19 }, { 93, SUNSOFT_2 }, { 94, STD_UN1ROM }, @@ -232,7 +232,7 @@ static const nes_mmc mmc_list[] = { 196, BTL_SBROS11 }, { 197, UNL_SF3 }, { 198, WAIXING_TYPE_F }, - { 199, WAIXING_TYPE_G }, + { 199, WAIXING_TYPE_F1 }, { 200, BMC_36IN1 }, { 201, BMC_21IN1 }, { 202, BMC_150IN1 }, @@ -268,7 +268,7 @@ static const nes_mmc mmc_list[] = { 232, CAMERICA_BF9096 }, { 233, BMC_42IN1RESET }, { 234, AVE_MAXI15 }, - { 235, BMC_GOLD150 }, // 235 Golden Game x-in-1 - Unsupported + { 235, BMC_GOLD260 }, // 235 Golden Game x-in-1 games { 236, BMC_70IN1 }, { 237, BMC_TELETUBBIES }, { 238, UNL_603_5052 }, @@ -284,9 +284,9 @@ static const nes_mmc mmc_list[] = // 248 Unused { 249, WAIXING_SECURITY }, { 250, NITRA_TDA }, - // 251 Shen Hua Jian Yun III?? - Unsupported + // 251 Unused { 252, WAIXING_SGZ }, - // 253 Super 8-in-1 99 King Fighter?? - Unsupported + { 253, HENGG_SHJY3 }, { 254, BTL_PIKACHUY2K }, { 255, BMC_72IN1 }, // duplicate of mapper 225 @@ -303,7 +303,7 @@ static const nes_mmc mmc_list[] = { 265, BMC_T262 }, { 266, UNL_CITYFIGHT }, { 267, BMC_EL861121C }, - // 268 COOLBOY and MINDKIDS + { 268, SMD133_BOARD }, // 269 mc_gx121 seems to be a PnP, but there are two actual multicarts for this mapper? // 270 multicarts on OneBus Famiclones // 271 TXC 4 in 1 MGC-026, not in nes.xml? @@ -327,9 +327,9 @@ static const nes_mmc mmc_list[] = { 289, BMC_60311C }, { 290, BMC_NTD_03 }, { 291, BMC_NT639 }, - // { 292, UNL_DRAGONFIGHTER }, in nes.xml, not emulated yet + { 292, UNL_BMW8544 }, // Dragon Fighter by Flying Star // 293 NewStar multicarts, do we have these in nes.xml? - { 294, BMC_FAMILY_4646 }, // FIXME: is this really exactly the same as mapper 134? + { 294, BMC_FAMILY_4646 }, // FIXME: is this really exactly the same as mapper 134? // 295 JY multicarts not yet in nes.xml // 296 VT3x handhelds { 297, TXC_22110 }, // 2-in-1 Uzi Lightgun @@ -369,10 +369,10 @@ static const nes_mmc mmc_list[] = { 331, BMC_12IN1 }, { 332, BMC_WS }, { 333, BMC_8IN1 }, - // 334 5/20-in-1 1993 Copyright multicart, not in nes.xml? + { 334, BMC_5IN1_1993 }, { 335, BMC_CTC09 }, { 336, BMC_K3046 }, - // { 337, BMC_CTC_12IN1 }, not in nes.xml + { 337, BMC_CTC_12IN1 }, { 338, BMC_SA005A }, { 339, BMC_K3006 }, { 340, BMC_K3036 }, @@ -385,11 +385,11 @@ static const nes_mmc mmc_list[] = { 347, KAISER_KS7030 }, // Doki Doki Panic alt FDS conversion { 348, BMC_830118C }, { 349, BMC_G146 }, - // { 350, BMC_891227 }, not in nes.xml + { 350, BMC_891227 }, { 351, BMC_TECHLINE9IN1 }, { 352, KAISER_KS106C }, // 4-in-1 { 353, BMC_810305C }, // Super Mario Family multicart - // 354 250-in-1 multicart with FDS Bubble Bobble + { 354, BMC_FAM250 }, // 355 Hwang Shinwei 3-D Block etc, currently has unemulated PIC16C54 { 356, BMC_JY208 }, // 357 Bit Corp 4-in-1 (ID 4602) @@ -436,16 +436,16 @@ static const nes_mmc mmc_list[] = // 398 JY-048 multicart, not in nes.xml? { 399, BATMAP_000 }, // homebrew game Star Versus // 400 retroUSB (Sealie?) 8-bit XMAS 2017 - // 401 Super 19-in-1 VIP 19, not in nes.xml? + { 401, BMC_KC885 }, // 402 22-in-1 Olympic Games, not in nes.xml? // 403 Tetris Family 19-in-1 that only works on Famiclones with 6502's BCD mode - // 404 JY-021B multicart, not in nes.xml? + { 404, BMC_JY012005 }, // 405 UMC UM6578 NES-on-a-chip games...PnPs? // 406 homebrew game Haradius Zero // 407 VT03 PnP // 408 Konami PnP - { 409, UNL_DPCMCART }, // A Winner is You homebrew music cart - // 410 Unused or JY? + { 409, SEALIE_DPCMCART }, // A Winner is You homebrew music cart + { 410, BMC_JY302 }, { 411, BMC_A88S1 }, // 412 INTV 10-in-1 PnP 2nd edition { 413, BATMAP_SRRX }, // homebrew game Super Russian Roulette @@ -463,19 +463,34 @@ static const nes_mmc mmc_list[] = // 425 Cube Tech PnP // 426 PnP // 427 PnP - // 428 a couple multicarts - // 429 Unused - // 430 Unused + { 428, BMC_TF2740 }, + // 429 Milowork FCFC1 flash cartridge + // 430 MMC3-based 831031C/T-308 multicart { 431, BMC_GN91B }, // 432 Realtec 8090 { 433, BMC_NC20MB }, - // 434 S-009 - { 435, NTDEC_2746 }, - // 436...442 Unused + { 434, BMC_S009 }, + // 435 F-1002 multicart + // 436 VT02 PnP + { 437, BMC_TH2348 }, + { 438, BMC_K3071 }, + // 439 YS2309 multicart + // 440 Dongda Sonic REC-9388 educational computer + // 441 841026C and 850335C multicarts + // 442 "Golden Key" educational computer // 443 NC3000M multicart // 444 NC7000M multicart - // 445...511 Unused - // 512 probably the correct MMC3 clone for chuugokt in nes.xml + // 445 DG574B MMC3-compatible multicart + // 446 Mindkids SMD172B_FPGA board + { 447, BMC_KL06 }, + // 448 VRC4-based 830768C multicart + // 449 Super Games King multicart + // 450 VRC2-based YY841157C multicart + // 451 homebrew Haratyler HP/MP + { 452, BMC_DS927 }, + // 453 Realtec 8042 + // 454...511 Unused + { 512, SACHEN_ZGDH }, { 513, SACHEN_SA9602B }, // 514 seems to be for skaraok, currently set to UNKNOWN in nes.xml // 515 Korean Family Noraebang karaoke cart with expansion cart, mic, and YM2413! @@ -491,7 +506,7 @@ static const nes_mmc mmc_list[] = { 525, KAISER_KS7021A }, // GetsuFumaDen pirate (and maybe a Contra?) // 526 sangochu clone not yet in nes.xml? { 527, UNL_AX40G }, // Fudou Myouou Den pirate - // 528 1995 New Series Super 2-in-1 multicart not in nes.xml + { 528, BMC_831128C }, // 1995 New Series Super 2-in-1 { 529, UNL_T230 }, // Datach Dragon Ball Z IV bootleg { 530, UNL_AX5705 }, // Super Mario Bros Pocker Mali // 531 Used by Asder PC-95 Famicom clone built into a keyboard @@ -514,10 +529,10 @@ static const nes_mmc mmc_list[] = { 549, KAISER_KS7016B }, // Meikyuu Jiin Dababa alt FDS conversion { 550, BMC_JY820845C }, { 551, JNCOTA_KT1001 }, - // 552 TAITO_X1_017, this is a correction of mapper 82. We should drop 82 and only support the accurate dumps of 552? + { 552, TAITO_X1_017 }, { 553, SACHEN_3013 }, // Dong Dong Nao 1 { 554, KAISER_KS7010 }, // Akumajo Dracula FDS conversion - // 555 retroUSB re-release of 1991 Nintendo Campus Challenge + { 555, STD_EVENT2 }, // 556 JY-215 multicart { 557, UNL_LG25 }, // Moero TwinBee FDS conversion // 558 some games on YC-03-09 board (related to mappers 162-164) @@ -748,10 +763,19 @@ void nes_cart_slot_device::call_load_ines() m_cart->set_ce(0x03, ce_state); } // iNES Mapper 232 - else if (mapper == 210 && submapper == 1) + else if (mapper == 232 && submapper == 1) { - submapper = 0; - logerror("Unimplemented NES 2.0 submapper: CAMERICA-BF9096.\n"); + pcb_id = CAMERICA_BF9096_ALT; + } + // 268: SMD133 boards + else if (mapper == 268) + { + if (submapper == 0) + m_cart->set_smd133_addr(0x6000); + else if (submapper == 1) + m_cart->set_smd133_addr(0x5000); + else + logerror("Unimplemented NES 2.0 submapper: %d\n", submapper); } // 313: BMC RESET-TXROM else if (mapper == 313) @@ -792,7 +816,13 @@ void nes_cart_slot_device::call_load_ines() if (BIT(local_options, 1)) battery_size = NES_BATTERY_SIZE; // with original iNES format we can only support 8K WRAM battery m_cart->set_trainer(BIT(local_options, 2) ? true : false); - m_cart->set_four_screen_vram(BIT(local_options, 3) ? true : false); + + // A select few boards or their variants have on-cart RAM to support 4-screen mirroring + if ((BIT(local_options, 3) && (m_pcb_id == STD_TXROM || m_pcb_id == NAMCOT_34X3)) || m_pcb_id == IREM_LROG017 || m_pcb_id == SACHEN_SHERO) + { + m_cart->set_four_screen_vram(true); + m_cart->set_mirroring(PPU_MIRROR_4SCREEN); + } if (ines20) { @@ -855,7 +885,7 @@ void nes_cart_slot_device::call_load_ines() } break; - case UNL_UNROM512: + case SEALIE_UNROM512: // this mapper also uses mirroring flags differently m_cart->set_four_screen_vram(false); switch (local_options & 0x09) @@ -925,6 +955,10 @@ void nes_cart_slot_device::call_load_ines() m_cart->set_vrc_lines(0, 1, 0); break; + case KONAMI_VRC7: + m_cart->set_vrc_lines((crc_hack || submapper == 2) ? 4 : 3, 0, 0); + break; + case IREM_G101: if (crc_hack && !submapper) m_cart->set_mirroring(PPU_MIRROR_HIGH); // Major League has hardwired mirroring @@ -946,6 +980,11 @@ void nes_cart_slot_device::call_load_ines() m_cart->set_pcb_ctrl_mirror(true); break; + case CONY_BOARD: + if (submapper == 0 || submapper == 2) + pcb_id = CONY1K_BOARD; + break; + case UNL_LH28_LH54: if (vrom_size) m_pcb_id = (vrom_size == 0x4000) ? UNL_LE05 : UNL_LH31; @@ -998,11 +1037,6 @@ void nes_cart_slot_device::call_load_ines() m_pcb_id = WAIXING_DQ8; // Mapper 242 is used for 2 diff boards break; - case BMC_GOLD_7IN1: - if (crc_hack) - m_pcb_id = BMC_MARIOPARTY_7IN1; // Mapper 52 is used for 2 diff boards - break; - case BTL_MARIOBABY: if (crc_hack) m_pcb_id = BTL_AISENSHINICOL; // Mapper 42 is used for 2 diff boards @@ -1041,42 +1075,38 @@ void nes_cart_slot_device::call_load_ines() m_cart->set_bus_conflict(bus_conflict); // SETUP step 4: logging what we have found - if (!ines20) - { - logerror("Loaded game in iNES format:\n"); - logerror("-- Mapper %u\n", mapper); - logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000); - logerror("-- VROM 0x%x (%d x 8k chunks)\n", vrom_size, vrom_size / 0x2000); - logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000); - logerror("-- Mirroring %s\n", BIT(header[6], 0) ? "Vertical" : "Horizontal"); - if (battery_size) - logerror("-- Battery found\n"); - if (m_cart->get_trainer()) - logerror("-- Trainer found\n"); - if (m_cart->get_four_screen_vram()) - logerror("-- 4-screen VRAM\n"); - logerror("-- TV System: %s\n", ((header[10] & 3) == 0) ? "NTSC" : (header[10] & 1) ? "Both NTSC and PAL" : "PAL"); - } - else + logerror("Loaded game in %s format:\n", ines20 ? "NES 2.0" : "iNES"); + logerror("-- Mapper: %u\n", mapper); + if (ines20) + logerror("-- Submapper: %u\n", header[8] >> 4); + logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000); + logerror("-- VROM 0x%x (%d x 8k chunks)\n", vrom_size, vrom_size / 0x2000); + logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000); + logerror("-- Mirroring: %s\n", BIT(header[6], 0) ? "Vertical" : "Horizontal"); + if (battery_size) + logerror("-- Battery found\n"); + if (m_cart->get_trainer()) + logerror("-- Trainer found\n"); + if (m_cart->get_four_screen_vram()) + logerror("-- 4-screen VRAM\n"); + if (ines20) { - logerror("Loaded game in Extended iNES format:\n"); - logerror("-- Mapper: %u\n", mapper); - logerror("-- Submapper: %u\n", (header[8] & 0xf0) >> 4); - logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000); - logerror("-- VROM 0x%x (%d x 8k chunks)\n", vrom_size, vrom_size / 0x2000); - logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000); - logerror("-- PRG NVWRAM: %d\n", (header[10] & 0xf0) >> 4); + logerror("-- PRG NVWRAM: %d\n", header[10] >> 4); logerror("-- PRG WRAM: %d\n", header[10] & 0x0f); - logerror("-- CHR NVWRAM: %d\n", (header[11] & 0xf0) >> 4); + logerror("-- CHR NVWRAM: %d\n", header[11] >> 4); logerror("-- CHR WRAM: %d\n", header[11] & 0x0f); - logerror("-- TV System: %s\n", (header[12] & 2) ? "Both NTSC and PAL" : (header[12] & 1) ? "PAL" : "NTSC"); + + static const char *timing[] = { "NTSC", "PAL", "Multi-region", "Dendy" }; + logerror("-- CPU/PPU Timing: %s\n", timing[header[12] & 3]); } + else + logerror("-- TV System: %s\n", ((header[10] & 3) == 0) ? "NTSC" : (header[10] & 1) ? "Both NTSC and PAL" : "PAL"); // SETUP step 5: allocate pointers for PRG/VROM if (prg_size) - m_cart->prg_alloc(prg_size, tag()); + m_cart->prg_alloc(prg_size); if (vrom_size) - m_cart->vrom_alloc(vrom_size, tag()); + m_cart->vrom_alloc(vrom_size); // if there is a trainer, skip it for the moment if (m_cart->get_trainer()) @@ -1247,6 +1277,11 @@ const char * nes_cart_slot_device::get_default_card_ines(get_default_card_softwa { pcb_id = SOMARI_HUANG2; // Mapper 116 is used for 2 diff boards } + // iNES Mapper 232 + else if (mapper == 232 && submapper == 1) + { + pcb_id = CAMERICA_BF9096_ALT; + } } // solve mapper conflicts @@ -1288,16 +1323,16 @@ const char * nes_cart_slot_device::get_default_card_ines(get_default_card_softwa pcb_id = WAIXING_DQ8; // Mapper 242 is used for 2 diff boards break; - case BMC_GOLD_7IN1: - if (crc_hack) - pcb_id = BMC_MARIOPARTY_7IN1; // Mapper 52 is used for 2 diff boards - break; - case BTL_MARIOBABY: if (crc_hack) pcb_id = BTL_AISENSHINICOL; // Mapper 42 is used for 2 diff boards break; + case CONY_BOARD: + if (submapper == 0 || submapper == 2) + pcb_id = CONY1K_BOARD; // Mapper 83 is used for 3 diff boards + break; + case UNL_LH28_LH54: // Mapper 108 is used for 4 diff boards if (ROM[5]) pcb_id = (ROM[5] == 2) ? UNL_LE05 : UNL_LH31; |