mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
bus/nes: Added support for 21-in-1 and 35-in-1 multicarts. (#8401)
New working software list additions (nes.xml) ----------------------------------- 21 in 1 (K-3006) [anonymous] 35 in 1 (K-3036) [anonymous]
This commit is contained in:
parent
50fc3edb0c
commit
3da6dd410f
30
hash/nes.xml
30
hash/nes.xml
@ -78391,6 +78391,21 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_21k6">
|
||||
<description>21 in 1 (K-3006)</description>
|
||||
<year>199?</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_k3006" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="21-in-1 (k-3006).prg" size="524288" crc="0efb3c8f" sha1="079e862ec83fc54d6a99b0dc63d85a15262f3e6b" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="chr" size="524288">
|
||||
<rom name="21-in-1 (k-3006).chr" size="524288" crc="b7833591" sha1="782a8a77afdc15e16663ea5fe984d1776e2e2a2b" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_22rb" supported="partial">
|
||||
<description>22 in 1 (Reset Based)</description>
|
||||
<year>19??</year>
|
||||
@ -78677,6 +78692,21 @@ be better to redump them properly. -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_35k36">
|
||||
<description>35 in 1 (K-3036)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="bmc_k3036" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="35-in-1 (k-3036).prg" size="524288" crc="df2a71c7" sha1="ff04533c60ad0d2c0005577068b629d90053e1fc" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mc_36">
|
||||
<description>36 in 1</description>
|
||||
<year>19??</year>
|
||||
|
@ -61,6 +61,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_HIK4, nes_bmc_hik4_device, "nes_bmc_hik4",
|
||||
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_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")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_411120C, nes_bmc_411120c_device, "nes_bmc_411120c", "NES Cart BMC 411120C PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_830118C, nes_bmc_830118c_device, "nes_bmc_830118c", "NES Cart BMC 830118C PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_841101C, nes_bmc_841101c_device, "nes_bmc_841101c", "NES Cart BMC 841101C PCB")
|
||||
@ -233,6 +234,11 @@ nes_bmc_gc6in1_device::nes_bmc_gc6in1_device(const machine_config &mconfig, cons
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_k3006_device::nes_bmc_k3006_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_txrom_device(mconfig, NES_BMC_K3006, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_411120c_device::nes_bmc_411120c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_txrom_device(mconfig, NES_BMC_411120C, tag, owner, clock), m_reg(0)
|
||||
{
|
||||
@ -590,6 +596,15 @@ void nes_bmc_gc6in1_device::pcb_reset()
|
||||
set_chr(m_chr_source, m_chr_base, m_chr_mask);
|
||||
}
|
||||
|
||||
void nes_bmc_k3006_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
mmc3_common_initialize(0x0f, 0x7f, 0);
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(0);
|
||||
chr8(0, m_chr_source);
|
||||
}
|
||||
|
||||
void nes_bmc_411120c_device::device_start()
|
||||
{
|
||||
mmc3_start();
|
||||
@ -2405,6 +2420,42 @@ void nes_bmc_gc6in1_device::write_h(offs_t offset, uint8_t data)
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-K-3006
|
||||
|
||||
Games: 21 in 1
|
||||
|
||||
MMC3 clone with banking for multigame menu.
|
||||
|
||||
NES 2.0: mapper 339
|
||||
|
||||
In MAME: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_bmc_k3006_device::write_m(offs_t offset, u8 data)
|
||||
{
|
||||
LOG_MMC(("bmc_k3006 write_m, offset: %04x, data: %02x\n", offset, data));
|
||||
if ((m_wram_protect & 0xc0) == 0x80)
|
||||
{
|
||||
if (BIT(offset, 5)) // MMC3 mode
|
||||
{
|
||||
m_prg_base = (offset & 0x18) << 1;
|
||||
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);
|
||||
}
|
||||
else // NROM mode
|
||||
{
|
||||
u8 bank = offset & 0x1f;
|
||||
u8 mode = (offset & 0x06) == 0x06;
|
||||
prg16_89ab(bank & ~mode);
|
||||
prg16_cdef(bank | mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-411120C
|
||||
|
@ -643,6 +643,20 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_k3006_device
|
||||
|
||||
class nes_bmc_k3006_device : public nes_txrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_bmc_k3006_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;
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_411120c_device
|
||||
|
||||
class nes_bmc_411120c_device : public nes_txrom_device
|
||||
@ -780,6 +794,7 @@ 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_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)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_411120C, nes_bmc_411120c_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_830118C, nes_bmc_830118c_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_841101C, nes_bmc_841101c_device)
|
||||
|
@ -49,6 +49,7 @@ DEFINE_DEVICE_TYPE(NES_BMC_CTC09, nes_bmc_ctc09_device, "nes_bmc_ctc09
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_GB63, nes_bmc_gb63_device, "nes_bmc_gb63", "NES Cart BMC Ghostbusters 63 in 1 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_GKA, nes_bmc_gka_device, "nes_bmc_gka", "NES Cart BMC GK-A PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_GKB, nes_bmc_gkb_device, "nes_bmc_gkb", "NES Cart BMC GK-B PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_K3036, nes_bmc_k3036_device, "nes_bmc_k3036", "NES Cart BMC K-3036 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_K3046, nes_bmc_k3046_device, "nes_bmc_k3046", "NES Cart BMC K-3046 PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_SA005A, nes_bmc_sa005a_device, "nes_bmc_sa005a", "NES Cart BMC SA005-A PCB")
|
||||
DEFINE_DEVICE_TYPE(NES_BMC_TJ03, nes_bmc_tj03_device, "nes_bmc_tj03", "NES Cart BMC TJ-03 PCB")
|
||||
@ -191,6 +192,11 @@ nes_bmc_gkb_device::nes_bmc_gkb_device(const machine_config &mconfig, const char
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_k3036_device::nes_bmc_k3036_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_nrom_device(mconfig, NES_BMC_K3036, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
nes_bmc_k3046_device::nes_bmc_k3046_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: nes_nrom_device(mconfig, NES_BMC_K3046, tag, owner, clock)
|
||||
{
|
||||
@ -682,6 +688,13 @@ void nes_bmc_gkb_device::pcb_reset()
|
||||
chr8(0, m_chr_source);
|
||||
}
|
||||
|
||||
void nes_bmc_k3036_device::pcb_reset()
|
||||
{
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(7);
|
||||
chr8(0, CHRRAM);
|
||||
}
|
||||
|
||||
void nes_bmc_k3046_device::pcb_reset()
|
||||
{
|
||||
prg16_89ab(0);
|
||||
@ -1810,6 +1823,27 @@ void nes_bmc_gkb_device::write_h(offs_t offset, uint8_t data)
|
||||
set_nt_mirroring(BIT(data, 7) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-K-3036
|
||||
|
||||
Games: 35 in 1
|
||||
|
||||
NES 2.0: mapper 340
|
||||
|
||||
In MAME: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_bmc_k3036_device::write_h(offs_t offset, u8 data)
|
||||
{
|
||||
LOG_MMC(("bmc_k3036 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
u8 bank = offset & 0x1f;
|
||||
prg16_89ab(bank);
|
||||
prg16_cdef(bank | (BIT(offset, 5) ? 0 : 7));
|
||||
set_nt_mirroring((offset & 0x25) == 0x25 ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
BMC-K-3046
|
||||
|
@ -429,6 +429,20 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_k3036_device
|
||||
|
||||
class nes_bmc_k3036_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_bmc_k3036_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual void write_h(offs_t offset, u8 data) override;
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_bmc_k3046_device
|
||||
|
||||
class nes_bmc_k3046_device : public nes_nrom_device
|
||||
@ -1113,6 +1127,7 @@ DECLARE_DEVICE_TYPE(NES_BMC_CTC09, nes_bmc_ctc09_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_GB63, nes_bmc_gb63_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_GKA, nes_bmc_gka_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_GKB, nes_bmc_gkb_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_K3036, nes_bmc_k3036_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_K3046, nes_bmc_k3046_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_SA005A, nes_bmc_sa005a_device)
|
||||
DECLARE_DEVICE_TYPE(NES_BMC_TJ03, nes_bmc_tj03_device)
|
||||
|
@ -372,6 +372,8 @@ void nes_cart(device_slot_interface &device)
|
||||
device.option_add_internal("bmc_gb63", NES_BMC_GB63);
|
||||
device.option_add_internal("bmc_gka", NES_BMC_GKA);
|
||||
device.option_add_internal("bmc_gkb", NES_BMC_GKB);
|
||||
device.option_add_internal("bmc_k3006", NES_BMC_K3006);
|
||||
device.option_add_internal("bmc_k3036", NES_BMC_K3036);
|
||||
device.option_add_internal("bmc_k3046", NES_BMC_K3046);
|
||||
device.option_add_internal("bmc_sa005a", NES_BMC_SA005A);
|
||||
device.option_add_internal("bmc_tj03", NES_BMC_TJ03);
|
||||
|
@ -374,8 +374,8 @@ static const nes_mmc mmc_list[] =
|
||||
{ 336, BMC_K3046 },
|
||||
// { 337, BMC_CTC_12IN1 }, not in nes.xml
|
||||
{ 338, BMC_SA005A },
|
||||
// 339 BMC-K-3006 21-in-1, not in nes.xml?
|
||||
// 340 BMC-K-3036 35-in-1, not in nes.xml?
|
||||
{ 339, BMC_K3006 },
|
||||
{ 340, BMC_K3036 },
|
||||
{ 341, BMC_TJ03 },
|
||||
// 342 COOLGIRL homebrew
|
||||
// 343 reset-based 4-in-1 pirate?
|
||||
|
@ -257,6 +257,8 @@ static const nes_pcb pcb_list[] =
|
||||
{ "bmc_gb63", BMC_G63IN1 },
|
||||
{ "bmc_gka", BMC_GKA },
|
||||
{ "bmc_gkb", BMC_GKB },
|
||||
{ "bmc_k3006", BMC_K3006 },
|
||||
{ "bmc_k3036", BMC_K3036 },
|
||||
{ "bmc_k3046", BMC_K3046 },
|
||||
{ "bmc_sa005a", BMC_SA005A },
|
||||
{ "bmc_tj03", BMC_TJ03 },
|
||||
|
@ -101,7 +101,7 @@ enum
|
||||
BMC_2751, BMC_8157, BMC_830118C, BMC_841101C,
|
||||
BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_CH001, BMC_SUPER22,
|
||||
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160,
|
||||
BMC_CTC09, BMC_K3046, BMC_SA005A, BMC_TJ03,
|
||||
BMC_CTC09, BMC_K3006, BMC_K3036, BMC_K3046, BMC_SA005A, BMC_TJ03,
|
||||
// Unlicensed
|
||||
UNL_8237, UNL_CC21, UNL_AX5705, UNL_KN42, UNL_KOF97,
|
||||
UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE,
|
||||
|
Loading…
Reference in New Issue
Block a user