bus/nes: Added support for a 5/20 in 1 cartridge. (#8879)

New working software list additions (nes.xml)
-----------------------------------
5 in 1 1993 Copyright [NewRisingSun]
This commit is contained in:
0kmg 2021-12-02 18:46:30 -09:00 committed by GitHub
parent 817492a3f1
commit 7e85f58f71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 105 additions and 5 deletions

View File

@ -81750,6 +81750,23 @@ be better to redump them properly. -->
</part>
</software>
<!-- 4 of 5 games are zapper games, 3 of which don't work at all. These same games are also found (non-working) on mc_4fg. -->
<software name="mc_5c93" supported="partial">
<description>5 in 1 1993 Copyright</description>
<year>1993</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_5in1" />
<feature name="peripheral" value="zapper" />
<dataarea name="prg" size="131072">
<rom name="5-in-1 1993 copyright.prg" size="131072" crc="7ec6df24" sha1="6fc7f82c185699725a17a72efa9914d33ab40d39" status="baddump" />
</dataarea>
<dataarea name="chr" size="131072">
<rom name="5-in-1 1993 copyright.chr" size="131072" crc="5439287e" sha1="2102a052a26fc377109b725992847784835264c1" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_5k03" supported="no">
<description>5 in 1 (K5003)</description>
<year>19??</year>

View File

@ -62,6 +62,7 @@ DEFINE_DEVICE_TYPE(NES_NT639, nes_nt639_device, "nes_nt639",
DEFINE_DEVICE_TYPE(NES_RESETTXROM, nes_resettxrom_device, "nes_resettxrom", "NES Cart BMC RESET-TXROM PCB")
DEFINE_DEVICE_TYPE(NES_S24IN1SC03, nes_s24in1sc03_device, "nes_s24in1c03", "NES Cart Super 24 in 1 SC-03 PCB")
DEFINE_DEVICE_TYPE(NES_TECHLINE9IN1, nes_tech9in1_device, "nes_tech9in1", "NES Cart Techline 9 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_5IN1, nes_bmc_5in1_device, "nes_bmc_5in1", "NES Cart BMC 5 in 1 1993 Copyright PCB")
DEFINE_DEVICE_TYPE(NES_BMC_8IN1, nes_bmc_8in1_device, "nes_bmc_8in1", "NES Cart BMC GRM070 8 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_15IN1, nes_bmc_15in1_device, "nes_bmc_15in1", "NES Cart BMC 15 in 1 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_SBIG7, nes_bmc_sbig7_device, "nes_bmc_sbig7", "NES Cart BMC Super BIG 7 in 1 PCB")
@ -96,6 +97,13 @@ INPUT_PORTS_START( sachen_shero )
PORT_CONFSETTING( 0x80, u8"\u4f8d\u9b42 (Shìhún)" ) // 侍魂
INPUT_PORTS_END
INPUT_PORTS_START( bmc_5in1 )
PORT_START("JUMPER")
PORT_CONFNAME( 0x01, 0x01, "Menu Type" )
PORT_CONFSETTING( 0x00, "20 in 1" )
PORT_CONFSETTING( 0x01, "5 in 1" )
INPUT_PORTS_END
INPUT_PORTS_START( bmc_f600 )
PORT_START("JUMPER")
PORT_CONFNAME( 0x80, 0x80, "Menu Type" )
@ -113,6 +121,11 @@ ioport_constructor nes_sachen_shero_device::device_input_ports() const
return INPUT_PORTS_NAME( sachen_shero );
}
ioport_constructor nes_bmc_5in1_device::device_input_ports() const
{
return INPUT_PORTS_NAME( bmc_5in1 );
}
ioport_constructor nes_bmc_f600_device::device_input_ports() const
{
return INPUT_PORTS_NAME( bmc_f600 );
@ -311,6 +324,12 @@ nes_tech9in1_device::nes_tech9in1_device(const machine_config &mconfig, const ch
{
}
nes_bmc_5in1_device::nes_bmc_5in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_txrom_device(mconfig, NES_BMC_5IN1, tag, owner, clock)
, m_jumper(*this, "JUMPER")
{
}
nes_bmc_8in1_device::nes_bmc_8in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_txrom_device(mconfig, NES_BMC_8IN1, tag, owner, clock)
{
@ -768,6 +787,13 @@ void nes_tech9in1_device::pcb_reset()
mmc3_common_initialize(0x1f, 0xff, 0);
}
void nes_bmc_5in1_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
mmc3_common_initialize(0x0f, 0x7f, 0);
prg32(0);
}
void nes_bmc_8in1_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
@ -2552,6 +2578,40 @@ void nes_tech9in1_device::write_l(offs_t offset, u8 data)
}
}
/*-------------------------------------------------
BMC-5IN1
Unknown Bootleg Multigame Board
Games: 5 in 1 1993 Copyright
NES 2.0: mapper 334
In MAME: Supported.
-------------------------------------------------*/
u8 nes_bmc_5in1_device::read_m(offs_t offset)
{
LOG_MMC(("bmc_5in1 read_m, offset: %04x\n", offset));
if ((offset & 0x03) == 0x02)
return (get_open_bus() & 0xfe) | m_jumper->read();
else
return get_open_bus();
}
void nes_bmc_5in1_device::write_m(offs_t offset, u8 data)
{
LOG_MMC(("bmc_5in1 write_m, offset: %04x, data: %02x\n", offset, data));
if ((m_wram_protect & 0xc0) == 0x80)
{
if (!(offset & 0x03))
prg32((data >> 1) & 0x03);
}
}
/*-------------------------------------------------
BMC-NEWSTAR-GRM070-8IN1
@ -3144,8 +3204,8 @@ void nes_bmc_k3033_device::prg_cb(int start, int bank)
void nes_bmc_k3033_device::write_m(offs_t offset, u8 data)
{
LOG_MMC(("bmc_k3033 write_m, offset: %04x, data: %02x\n", offset, data))
;
LOG_MMC(("bmc_k3033 write_m, offset: %04x, data: %02x\n", offset, data));
if ((m_wram_protect & 0xc0) == 0x80)
{
m_mmc3_mode = BIT(offset, 5);

View File

@ -652,6 +652,27 @@ private:
};
// ======================> nes_bmc_5in1_device
class nes_bmc_5in1_device : public nes_txrom_device
{
public:
// construction/destruction
nes_bmc_5in1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual u8 read_m(offs_t offset) override;
virtual void write_m(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
protected:
virtual ioport_constructor device_input_ports() const override;
private:
required_ioport m_jumper;
};
// ======================> nes_bmc_8in1_device
class nes_bmc_8in1_device : public nes_txrom_device
@ -1184,6 +1205,7 @@ DECLARE_DEVICE_TYPE(NES_NT639, nes_nt639_device)
DECLARE_DEVICE_TYPE(NES_RESETTXROM, nes_resettxrom_device)
DECLARE_DEVICE_TYPE(NES_S24IN1SC03, nes_s24in1sc03_device)
DECLARE_DEVICE_TYPE(NES_TECHLINE9IN1, nes_tech9in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_5IN1, nes_bmc_5in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_8IN1, nes_bmc_8in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_15IN1, nes_bmc_15in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_SBIG7, nes_bmc_sbig7_device)

View File

@ -449,6 +449,7 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("s24in1c03", NES_S24IN1SC03);
device.option_add_internal("smd133", NES_SMD133);
device.option_add_internal("tech9in1", NES_TECHLINE9IN1);
device.option_add_internal("bmc_5in1", NES_BMC_5IN1);
device.option_add_internal("bmc_8in1", NES_BMC_8IN1);
device.option_add_internal("bmc_15in1", NES_BMC_15IN1);
device.option_add_internal("bmc_sbig7in1", NES_BMC_SBIG7);
@ -485,7 +486,6 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("unl_dance", NES_NROM); // UNSUPPORTED
device.option_add_internal("onebus", NES_NROM); // UNSUPPORTED
device.option_add_internal("pec586", NES_NROM); // UNSUPPORTED
device.option_add_internal("unl_drgnfgt", NES_NROM); // UNSUPPORTED
// are there dumps of games with these boards?
device.option_add_internal("bmc_hik_kof", NES_NROM); // mapper 251 - UNSUPPORTED
device.option_add_internal("bmc_13in1jy110", NES_NROM); // [mentioned in FCEUMM source - we need more info] - UNSUPPORTED

View File

@ -369,7 +369,7 @@ 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

View File

@ -321,6 +321,7 @@ static const nes_pcb pcb_list[] =
{ "s24in1c03", BMC_S24IN1SC03 },
{ "smd133", SMD133_BOARD },
{ "tech9in1", BMC_TECHLINE9IN1 },
{ "bmc_5in1", BMC_5IN1_1993 },
{ "bmc_8in1", BMC_8IN1 },
{ "bmc_15in1", BMC_15IN1 },
{ "bmc_sbig7in1", BMC_SUPERBIG_7IN1 },

View File

@ -93,7 +93,7 @@ enum
BMC_36IN1, BMC_21IN1, BMC_150IN1, BMC_35IN1, BMC_64IN1,
BMC_8IN1, BMC_15IN1, BMC_SUPERHIK_300IN1, BMC_SUPERGUN_20IN1,
BMC_72IN1, BMC_SUPER_42IN1, BMC_76IN1,
BMC_31IN1, BMC_22GAMES, BMC_20IN1,
BMC_31IN1, BMC_22GAMES, BMC_20IN1, BMC_5IN1_1993,
BMC_70IN1, BMC_500IN1, BMC_800IN1, BMC_1200IN1,
BMC_GKA, BMC_GKB, BMC_GKCXIN1, BMC_GN91B,
BMC_HP898F, BMC_VT5201, BMC_BENSHIENG,