bus/nes: Added support of a pair of 4-in-1 multicarts. (#8441)

New working software list additions (nes.xml)
-----------------------------------
4 in 1 (K-3131GS) [anonymous]
4 in 1 (K-3131SS) [anonymous]
This commit is contained in:
0kmg 2021-08-15 06:24:09 -08:00 committed by GitHub
parent ee07073837
commit caf6dd6b24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 113 additions and 2 deletions

View File

@ -79233,6 +79233,42 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_4k1gs">
<description>4 in 1 (K-3131GS)</description>
<year>199?</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_gn45" />
<dataarea name="prg" size="524288">
<rom name="4-in-1 (k-3131gs, gn-45).prg" size="524288" crc="dc835c48" sha1="ef17c86e521110637b443437fca269f2e3f2385f" status="baddump" />
</dataarea>
<dataarea name="chr" size="524288">
<rom name="4-in-1 (k-3131gs, gn-45).chr" size="524288" crc="b551ccdb" sha1="fc17c81a23bd55b9195d8f166aad313f29067ed1" status="baddump" />
</dataarea>
<!-- 8k WRAM on cartridge -->
<dataarea name="wram" size="8192">
</dataarea>
</part>
</software>
<software name="mc_4k1ss">
<description>4 in 1 (K-3131SS)</description>
<year>199?</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_gn45" />
<dataarea name="prg" size="524288">
<rom name="4-in-1 (k-3131ss, gn-45).prg" size="524288" crc="466bdb58" sha1="354116730efa2131172ccca3793a065abee6026e" status="baddump" />
</dataarea>
<dataarea name="chr" size="524288">
<rom name="4-in-1 (k-3131ss, gn-45).chr" size="524288" crc="08d7aa1b" sha1="f78aa3ff4345a31ece3b26cacdb86d437c5c0e17" status="baddump" />
</dataarea>
<!-- 8k WRAM on cartridge -->
<dataarea name="wram" size="8192">
</dataarea>
</part>
</software>
<software name="mc_4kt34" supported="no">
<description>4 in 1 (KT-3445AB)</description>
<year>19??</year>

View File

@ -61,6 +61,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_HIK8, nes_bmc_hik8_device, "nes_bmc_hik8",
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_GN45, nes_bmc_gn45_device, "nes_bmc_gn45", "NES Cart BMC GN-45 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")
@ -236,6 +237,11 @@ nes_bmc_f15_device::nes_bmc_f15_device(const machine_config &mconfig, const char
{
}
nes_bmc_gn45_device::nes_bmc_gn45_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_txrom_device(mconfig, NES_BMC_GN45, tag, owner, clock), m_lock(false)
{
}
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)
{
@ -590,6 +596,20 @@ void nes_bmc_f15_device::pcb_reset()
prg16_cdef(0);
}
void nes_bmc_gn45_device::device_start()
{
mmc3_start();
save_item(NAME(m_lock));
}
void nes_bmc_gn45_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
m_lock = false;
mmc3_common_initialize(0x0f, 0x7f, 0);
}
void nes_bmc_gold7in1_device::device_start()
{
mmc3_start();
@ -2348,6 +2368,37 @@ void nes_fcgj8in1_device::write_m(offs_t offset, u8 data)
}
}
/*-------------------------------------------------
BMC-GN-45
Games: 4 in 1 (K-3131GS and K-3131SS)
MMC3 clone with banking for multigame menu.
NES 2.0: mapper 366
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_gn45_device::write_m(offs_t offset, u8 data)
{
LOG_MMC(("bmc_gn45 write_m, offset: %04x, data: %02x\n", offset, data));
nes_txrom_device::write_m(offset, data); // write to overlapping WRAM
if (!m_lock)
{
m_prg_base = offset & 0x70;
set_prg(m_prg_base, m_prg_mask);
m_chr_base = m_prg_base << 3;
set_chr(m_chr_source, m_chr_base, m_chr_mask);
m_lock = BIT(offset, 7);
}
}
/*-------------------------------------------------
BMC-GOLD-7IN1

View File

@ -627,6 +627,27 @@ public:
};
// ======================> nes_bmc_gn45_device
class nes_bmc_gn45_device : public nes_txrom_device
{
public:
// construction/destruction
nes_bmc_gn45_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 pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
bool m_lock;
};
// ======================> nes_bmc_gold7in1_device
class nes_bmc_gold7in1_device : public nes_txrom_device
@ -822,6 +843,7 @@ 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_GN45, nes_bmc_gn45_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

@ -429,6 +429,7 @@ void nes_cart(device_slot_interface &device)
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_gn45", NES_BMC_GN45);
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);

View File

@ -401,7 +401,7 @@ static const nes_mmc mmc_list[] =
// 363 variant of mapper 358?
// 364 JY-007, is this ttoons6 in nes.xml?
// 365 is this asderp95 in nes.xml?
// 366 K-3131GS and K-3131SS 4-in-1 carts
{ 366, BMC_GN45 },
// 367 7-in-1 cart that is a close variant of mapper 205
{ 368, BTL_YUNG08 }, // SMB2 FDS conversion
// 369 Super Mario Bros Party multicart

View File

@ -306,6 +306,7 @@ static const nes_pcb pcb_list[] =
{ "bmc_hik4in1", BMC_SUPERHIK_4IN1 },
{ "bmc_mario7in1", BMC_MARIOPARTY_7IN1 },
{ "bmc_f15", BMC_F15 },
{ "bmc_gn45", BMC_GN45 },
{ "bmc_gold7in1", BMC_GOLD_7IN1 },
{ "bmc_gc6in1", BMC_GOLDENCARD_6IN1 },
{ "bmc_411120c", BMC_411120C },

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_F15,
BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_F15, BMC_GN45,
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,