bus/nes: Added support for mc_150um multi-game cartridge. (#8406)

Software list items promoted to working (nes.xml)
---------------------------------------
150 in 1 Unchained Melody (Fight 150 Ver. Love)
This commit is contained in:
0kmg 2021-08-08 09:30:27 -08:00 committed by GitHub
parent 5f1b75a3a5
commit 0c13c54fbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 69 additions and 6 deletions

View File

@ -78028,9 +78028,9 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_150um" supported="no">
<software name="mc_150um">
<description>150 in 1 Unchained Melody (Fight 150 Ver. Love)</description>
<year>19??</year>
<year>199?</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_f15" />

View File

@ -59,6 +59,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_SBIG7, nes_bmc_sbig7_device, "nes_bmc_sbig7",
DEFINE_DEVICE_TYPE(NES_BMC_HIK8, nes_bmc_hik8_device, "nes_bmc_hik8", "NES Cart BMC HIK 8 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_HIK4, nes_bmc_hik4_device, "nes_bmc_hik4", "NES Cart BMC HIK 4 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_MARIO7IN1, nes_bmc_mario7in1_device, "nes_bmc_mario7in1", "NES Cart BMC Mario 7 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_F15, nes_bmc_f15_device, "nes_bmc_f15", "NES Cart BMC F-15 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_GOLD7IN1, nes_bmc_gold7in1_device, "nes_bmc_gold7in1", "NES Cart BMC Golden 7 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_GC6IN1, nes_bmc_gc6in1_device, "nes_bmc_gc6in1", "NES Cart BMC Golden Card 6 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_K3006, nes_bmc_k3006_device, "nes_bmc_k3006", "NES Cart BMC K-3006 PCB")
@ -224,6 +225,11 @@ nes_bmc_mario7in1_device::nes_bmc_mario7in1_device(const machine_config &mconfig
{
}
nes_bmc_f15_device::nes_bmc_f15_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_txrom_device(mconfig, NES_BMC_F15, tag, owner, clock)
{
}
nes_bmc_gold7in1_device::nes_bmc_gold7in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_txrom_device(mconfig, NES_BMC_GOLD7IN1, tag, owner, clock), m_reg_written(0)
{
@ -563,6 +569,14 @@ void nes_bmc_mario7in1_device::pcb_reset()
mmc3_common_initialize(0x1f, 0xff, 0);
}
void nes_bmc_f15_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
mmc3_common_initialize(0x1f, 0xff, 0);
prg16_89ab(0);
prg16_cdef(0);
}
void nes_bmc_gold7in1_device::device_start()
{
mmc3_start();
@ -2229,6 +2243,39 @@ void nes_bmc_mario7in1_device::write_m(offs_t offset, uint8_t data)
m_prgram[offset] = data;
}
/*-------------------------------------------------
BMC-F-15
Unknown Multigame Bootleg Board
Games: 150 in 1 Unchained Melody
MMC3 clone with banking for multigame menu.
NES 2.0: mapper 259
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_f15_device::write_m(offs_t offset, u8 data)
{
LOG_MMC(("bmc_f15 write_m, offset: %04x, data: %02x\n", offset, data));
if (BIT(m_wram_protect, 7))
{
u8 bank = data & 0x0f;
u8 mode = BIT(data, 3);
prg16_89ab(bank & ~mode);
prg16_cdef(bank | mode);
}
}
void nes_bmc_f15_device::prg_cb(int start, int bank)
{
// Ignore MMC3 PRG bank switching. Master Fighter II (game #150) uses the bank switching above.
}
/*-------------------------------------------------
BMC-FCGENJIN-8IN1

View File

@ -598,6 +598,21 @@ private:
};
// ======================> nes_bmc_f15_device
class nes_bmc_f15_device : public nes_txrom_device
{
public:
// construction/destruction
nes_bmc_f15_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_m(offs_t offset, u8 data) override;
virtual void prg_cb(int start, int bank) override;
virtual void pcb_reset() override;
};
// ======================> nes_bmc_gold7in1_device
class nes_bmc_gold7in1_device : public nes_txrom_device
@ -792,6 +807,7 @@ DECLARE_DEVICE_TYPE(NES_BMC_SBIG7, nes_bmc_sbig7_device)
DECLARE_DEVICE_TYPE(NES_BMC_HIK8, nes_bmc_hik8_device)
DECLARE_DEVICE_TYPE(NES_BMC_HIK4, nes_bmc_hik4_device)
DECLARE_DEVICE_TYPE(NES_BMC_MARIO7IN1, nes_bmc_mario7in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_F15, nes_bmc_f15_device)
DECLARE_DEVICE_TYPE(NES_BMC_GOLD7IN1, nes_bmc_gold7in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_GC6IN1, nes_bmc_gc6in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_K3006, nes_bmc_k3006_device)

View File

@ -420,6 +420,7 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("bmc_hik8in1", NES_BMC_HIK8);
device.option_add_internal("bmc_hik4in1", NES_BMC_HIK4);
device.option_add_internal("bmc_mario7in1", NES_BMC_MARIO7IN1);
device.option_add_internal("bmc_f15", NES_BMC_F15);
device.option_add_internal("bmc_gold7in1", NES_BMC_GOLD7IN1);
device.option_add_internal("bmc_gc6in1", NES_BMC_GC6IN1);
device.option_add_internal("bmc_411120c", NES_BMC_411120C);
@ -436,7 +437,6 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("onebus", NES_NROM); // UNSUPPORTED
device.option_add_internal("pec586", NES_NROM); // UNSUPPORTED
device.option_add_internal("coolboy", NES_NROM); // UNSUPPORTED
device.option_add_internal("bmc_f15", NES_NROM); // UNSUPPORTED
device.option_add_internal("bmc_hp898f", NES_NROM); // UNSUPPORTED
device.option_add_internal("bmc_8in1", NES_NROM); // UNSUPPORTED
device.option_add_internal("unl_158b", NES_NROM); // UNSUPPORTED

View File

@ -294,7 +294,7 @@ static const nes_mmc mmc_list[] =
// 256 OneBus Famiclones
// 257 UNIF MAPR PEC-586?
// 258 UNIF MAPR 158B?
// 259 UNIF MAPR F-15?
{ 259, BMC_F15 },
// 260 HP10xx/HP20xx multicarts?
{ 261, BMC_810544C },
{ 262, SACHEN_SHERO },

View File

@ -297,6 +297,7 @@ static const nes_pcb pcb_list[] =
{ "bmc_hik8in1", BMC_HIK8IN1 },
{ "bmc_hik4in1", BMC_SUPERHIK_4IN1 },
{ "bmc_mario7in1", BMC_MARIOPARTY_7IN1 },
{ "bmc_f15", BMC_F15 },
{ "bmc_gold7in1", BMC_GOLD_7IN1 },
{ "bmc_gc6in1", BMC_GOLDENCARD_6IN1 },
{ "bmc_411120c", BMC_411120C },
@ -353,7 +354,6 @@ static const nes_pcb pcb_list[] =
{ "btl_900218", UNSUPPORTED_BOARD }, // pirate The Lord of King, to be emulated soon
{ "a9746", UNSUPPORTED_BOARD },
{ "pec586", UNSUPPORTED_BOARD },
{ "bmc_f15", UNSUPPORTED_BOARD }, // 150-in-1 Unchained Melody
{ "bmc_hp898f", UNSUPPORTED_BOARD }, // Primasoft 9999999-in-1
{ "bmc_8in1", UNSUPPORTED_BOARD }, // Super 8-in-1 (Incl. Rockin' Kats)
{ "unl_158b", UNSUPPORTED_BOARD }, // Blood of Jurassic

View File

@ -86,7 +86,7 @@ enum
TXC_22211, TXC_DUMARACING, TXC_MJBLOCK,
TXC_COMMANDOS, TXC_TW, TXC_STRIKEW,
// Multigame Carts
BMC_64IN1NR, BMC_190IN1, BMC_A65AS,
BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_F15,
BMC_HIK8IN1, BMC_NOVEL1, BMC_NOVEL2, BMC_S24IN1SC03, BMC_T262,
BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1,
BMC_MARIOPARTY_7IN1, BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646,