bus/nes: Added support for 4 multicarts. (#8344)

New working software list additions (nes.xml)
-----------------------------------
10 in 1 (CTC-09) [anonymous]
11 in 1 (K-3046) [anonymous]
16 in 1 (SA005-A) [anonymous]
4 in 1 (TJ-03) [anonymous]
This commit is contained in:
0kmg 2021-07-24 07:20:34 -08:00 committed by GitHub
parent 3cd5992745
commit 42c4027313
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 282 additions and 8 deletions

View File

@ -77377,6 +77377,21 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_10c09">
<description>10 in 1 (CTC-09)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_ctc09" />
<dataarea name="prg" size="262144">
<rom name="10-in-1 (ctc-09)(unl).prg" size="262144" crc="bc585bd0" sha1="22f208ffefe9b0e6675e605a55ed12542ca1b7c9" status="baddump" />
</dataarea>
<dataarea name="chr" size="131072">
<rom name="10-in-1 (ctc-09)(unl).chr" size="131072" crc="f9242c9d" sha1="c838cd75a1bc62ca93cf0dd69bad5246962ada1d" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_10m">
<description>10000000 in 1</description>
<year>19??</year>
@ -77447,6 +77462,22 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_11k46">
<description>11 in 1 (K-3046)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_k3046" />
<feature name="mirroring" value="vertical" />
<dataarea name="prg" size="524288">
<rom name="11-in-1 (k-3046)(unl).prg" size="524288" crc="d330cd7e" sha1="100553175ed21bb30db95377caeb9314dee5b6f7" status="baddump" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
</part>
</software>
<!-- According to Cah4e3 this dumps has corrupted chunks of PRG. Investigate... -->
<software name="mc_110a" cloneof="mc_110">
<description>110 in 1 (Bad?)</description>
@ -77810,6 +77841,21 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_16sa5">
<description>16 in 1 (SA005-A)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_sa005a" />
<dataarea name="prg" size="262144">
<rom name="16-in-1 (sa005-a)(unl).prg" size="262144" crc="cd0afbe2" sha1="3a4d033fb4bfbd13699e4bae6633e70a5c2b5ba9" status="baddump" />
</dataarea>
<dataarea name="chr" size="131072">
<rom name="16-in-1 (sa005-a)(unl).chr" size="131072" crc="cd62b4f9" sha1="b0bc49645dbd0e1dd22bc74a21327437d5f500d8" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_168">
<description>168 in 1</description>
<year>19??</year>
@ -78895,6 +78941,21 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_4tj03">
<description>4 in 1 (TJ-03)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_tj03" />
<dataarea name="prg" size="131072">
<rom name="4-in-1 (tj-03)(unl).prg" size="131072" crc="09f4de0b" sha1="06bf299ce068166ab0f6041a1625bf96f1cc9f2d" status="baddump" />
</dataarea>
<dataarea name="chr" size="32768">
<rom name="4-in-1 (tj-03)(unl).chr" size="32768" crc="c0b5369f" sha1="f90eb3125ec73d0f65d0257792f51815d7339252" status="baddump" />
</dataarea>
</part>
</software>
<software name="mc_4vt87" supported="no">
<description>4 in 1 (VT087)</description>
<year>19??</year>

View File

@ -42,9 +42,13 @@ DEFINE_DEVICE_TYPE(NES_SUPERGUN20IN1, nes_sgun20in1_device, "nes_sgun20in1
DEFINE_DEVICE_TYPE(NES_VT5201, nes_vt5201_device, "nes_vt5201", "NES Cart VT5201 PCB")
DEFINE_DEVICE_TYPE(NES_810544C, nes_810544c_device, "nes_810544c", "NES Cart 810544-C-A1 PCB")
DEFINE_DEVICE_TYPE(NES_NTD03, nes_ntd03_device, "nes_ntd03", "NES Cart NTD-03 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_CTC09, nes_bmc_ctc09_device, "nes_bmc_ctc09", "NES Cart BMC CTC-09 PCB")
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_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")
DEFINE_DEVICE_TYPE(NES_BMC_WS, nes_bmc_ws_device, "nes_bmc_ws", "NES Cart BMC WS PCB")
DEFINE_DEVICE_TYPE(NES_BMC_11160, nes_bmc_11160_device, "nes_bmc_1160", "NES Cart BMC-1160 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_G146, nes_bmc_g146_device, "nes_bmc_g146", "NES Cart BMC-G-146 PCB")
@ -147,6 +151,11 @@ nes_ntd03_device::nes_ntd03_device(const machine_config &mconfig, const char *ta
{
}
nes_bmc_ctc09_device::nes_bmc_ctc09_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_CTC09, tag, owner, clock)
{
}
nes_bmc_gb63_device::nes_bmc_gb63_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_BMC_GB63, tag, owner, clock), m_latch(0), m_dipsetting(0), m_vram_disable(0)
{
@ -162,6 +171,21 @@ nes_bmc_gkb_device::nes_bmc_gkb_device(const machine_config &mconfig, const char
{
}
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)
{
}
nes_bmc_sa005a_device::nes_bmc_sa005a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_SA005A, tag, owner, clock)
{
}
nes_bmc_tj03_device::nes_bmc_tj03_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_TJ03, tag, owner, clock)
{
}
nes_bmc_ws_device::nes_bmc_ws_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_BMC_WS, tag, owner, clock), m_latch(0)
{
@ -519,6 +543,14 @@ void nes_ntd03_device::pcb_reset()
chr8(0, m_chr_source);
}
void nes_bmc_ctc09_device::pcb_reset()
{
// nes_slot's pcb_start sets us up in the main menu. Soft reset is empty so
// that games reset to their own title screens. This seems to be this cart's
// intended behavior as trying to reset to the menu here crashes (due to RAM
// contents?). Soft reset can similarly crash the main menu (BTANB?).
}
void nes_bmc_gb63_device::device_start()
{
common_start();
@ -572,6 +604,20 @@ void nes_bmc_gkb_device::pcb_reset()
chr8(0, m_chr_source);
}
void nes_bmc_k3046_device::pcb_reset()
{
prg16_89ab(0);
prg16_cdef(7);
chr8(0, CHRRAM);
}
void nes_bmc_sa005a_device::pcb_reset()
{
prg16_89ab(0);
prg16_cdef(0);
chr8(0, CHRROM);
}
void nes_bmc_ws_device::device_start()
{
common_start();
@ -1423,6 +1469,38 @@ void nes_ntd03_device::write_h(offs_t offset, uint8_t data)
chr8(cbank, CHRROM);
}
/*-------------------------------------------------
BMC-CTC-09
Games: 10 in 1
NES 2.0: mapper 335
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_ctc09_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_ctc09 write_h, offset: %04x, data: %02x\n", offset, data));
if (BIT(offset, 14))
{
if (BIT(data, 4))
{
u8 bank = ((data & 0x07) << 1) | BIT(data, 3);
prg16_89ab(bank);
prg16_cdef(bank);
}
else
prg32(data & 0x07);
set_nt_mirroring(BIT(data, 5) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
else
chr8(data & 0x0f, CHRROM);
}
/*-------------------------------------------------
BMC-GHOSTBUSTERS63IN1
@ -1537,6 +1615,73 @@ 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-3046
Games: 11 in 1
NES 2.0: mapper 336
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_k3046_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_k3046 write_h, offset: %04x, data: %02x\n", offset, data));
// this pcb is subject to bus conflict
data = account_bus_conflict(offset, data);
data &= 0x1f;
prg16_89ab(data);
prg16_cdef(data | 0x07);
}
/*-------------------------------------------------
BMC-SA005-A
Games: 16 in 1
NES 2.0: mapper 338
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_sa005a_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_sa005a write_h, offset: %04x, data: %02x\n", offset, data));
u8 bank = offset & 0x0f;
prg16_89ab(bank);
prg16_cdef(bank);
chr8(bank, CHRROM);
set_nt_mirroring(BIT(offset, 3) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
}
/*-------------------------------------------------
BMC-TJ-03
Games: 4 in 1
NES 2.0: mapper 341
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_tj03_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_tj03 write_h, offset: %04x, data: %02x\n", offset, data));
u8 bank = (offset >> 8) & 0x03;
prg32(bank);
chr8(bank, CHRROM);
set_nt_mirroring(BIT(offset, 9) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
/*-------------------------------------------------
Board BMC-WS

View File

@ -285,6 +285,20 @@ protected:
};
// ======================> nes_bmc_ctc09_device
class nes_bmc_ctc09_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_ctc09_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_gb63_device
class nes_bmc_gb63_device : public nes_nrom_device
@ -310,6 +324,7 @@ private:
int m_vram_disable;
};
// ======================> nes_bmc_gka_device
class nes_bmc_gka_device : public nes_nrom_device
@ -349,6 +364,46 @@ protected:
};
// ======================> nes_bmc_k3046_device
class nes_bmc_k3046_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_k3046_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_sa005a_device
class nes_bmc_sa005a_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_sa005a_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_tj03_device
class nes_bmc_tj03_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_tj03_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, u8 data) override;
};
// ======================> nes_bmc_ws_device
class nes_bmc_ws_device : public nes_nrom_device
@ -951,9 +1006,13 @@ DECLARE_DEVICE_TYPE(NES_SUPERGUN20IN1, nes_sgun20in1_device)
DECLARE_DEVICE_TYPE(NES_VT5201, nes_vt5201_device)
DECLARE_DEVICE_TYPE(NES_810544C, nes_810544c_device)
DECLARE_DEVICE_TYPE(NES_NTD03, nes_ntd03_device)
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_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)
DECLARE_DEVICE_TYPE(NES_BMC_WS, nes_bmc_ws_device)
DECLARE_DEVICE_TYPE(NES_BMC_11160, nes_bmc_11160_device)
DECLARE_DEVICE_TYPE(NES_BMC_G146, nes_bmc_g146_device)

View File

@ -362,9 +362,13 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("bmc_d1038", NES_VT5201); // mapper 60?
device.option_add_internal("810544c", NES_810544C);
device.option_add_internal("ntd03", NES_NTD03);
device.option_add_internal("bmc_ctc09", NES_BMC_CTC09);
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_k3046", NES_BMC_K3046);
device.option_add_internal("bmc_sa005a", NES_BMC_SA005A);
device.option_add_internal("bmc_tj03", NES_BMC_TJ03);
device.option_add_internal("bmc_ws", NES_BMC_WS);
device.option_add_internal("bmc_g146", NES_BMC_G146);
device.option_add_internal("bmc_11160", NES_BMC_11160);

View File

@ -369,13 +369,13 @@ static const nes_mmc mmc_list[] =
{ 332, BMC_WS },
// 333 BMC_8IN1 and BMC-NEWSTAR-GRM070-8IN1 multicarts
// 334 5/20-in-1 1993 Copyright multicart, not in nes.xml?
// 335 BMC-CTC-09 10-in-1, not in nes.xml?
// 336 BMC-K-3046 11-in-1, not in nes.xml?
// 337 BMC-CTC-12IN1 multicart, not in nes.xml?
// 338 BMC-SA005-A multicarts, not in nes.xml?
{ 335, BMC_CTC09 },
{ 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?
// 341 BMC-TJ-03 4-in-1, not in nes.xml?
{ 341, BMC_TJ03 },
// 342 COOLGIRL homebrew
// 343 reset-based 4-in-1 pirate?
// 344 3/6-in-1 GN-26 multicart, not in nes.xml
@ -384,7 +384,7 @@ static const nes_mmc mmc_list[] =
{ 347, KAISER_KS7030 }, // Doki Doki Panic alt FDS conversion
{ 348, BMC_830118C },
{ 349, BMC_G146 },
// 350 BMC-891227 multicart
// { 350, BMC_891227 }, not in nes.xml
// 351 JY/Techline 9-in-1
// 352 Kaiser 4-in-1 KS106C
// 353 Super Mario Family multicart

View File

@ -248,9 +248,13 @@ static const nes_pcb pcb_list[] =
{ "bmc_d1038", BMC_VT5201 }, // mapper 60?
{ "810544c", BMC_810544 },
{ "ntd03", BMC_NTD_03 },
{ "bmc_ctc09", BMC_CTC09 },
{ "bmc_gb63", BMC_G63IN1 },
{ "bmc_gka", BMC_GKA },
{ "bmc_gkb", BMC_GKB },
{ "bmc_k3046", BMC_K3046 },
{ "bmc_sa005a", BMC_SA005A },
{ "bmc_tj03", BMC_TJ03 },
{ "bmc_ws", BMC_WS },
{ "bmc_hik300", BMC_SUPERHIK_300IN1 },
{ "bmc_s700", BMC_SUPER_700IN1 },

View File

@ -85,7 +85,7 @@ enum
/* TXC */
TXC_22211, TXC_DUMARACING, TXC_MJBLOCK,
TXC_COMMANDOS, TXC_TW, TXC_STRIKEW,
/* Multigame Carts */
// Multigame Carts
BMC_64IN1NR, BMC_190IN1, BMC_A65AS,
BMC_HIK8IN1, BMC_NOVEL1, BMC_NOVEL2, BMC_S24IN1SC03, BMC_T262,
BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1,
@ -100,7 +100,8 @@ enum
BMC_POWERFUL_255, BMC_11160, BMC_G146, BMC_8157, BMC_830118C,
BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_CH001, BMC_SUPER22,
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET,
/* Unlicensed */
BMC_CTC09, BMC_K3046, BMC_SA005A, BMC_TJ03,
// Unlicensed
UNL_8237, UNL_CC21, UNL_AX5705, UNL_KOF97,
UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE,
UNL_UXROM, UNL_MK2, UNL_XIAOZY, UNL_KOF96, UNL_FS6,