summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nes/nes_ines.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/nes/nes_ines.hxx')
-rw-r--r--src/devices/bus/nes/nes_ines.hxx181
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;