diff --git a/hash/nes.xml b/hash/nes.xml
index 604c39c7716..6c6bd348487 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -52727,6 +52727,21 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
+
+ Heros 8 in 1 (JY-207)
+ 19??
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
Rockman 7 in 1 (JY-208)
199?
@@ -52746,6 +52761,39 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
+
+ Super 8 in 1 (JY-301)
+ 19??
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+ King 8 in 1 (JY-302)
+ 19??
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -80316,6 +80364,22 @@ be better to redump them properly. -->
+
+ Super 19 in 1 (VIP19)
+ 19??
+ <pirate>
+
+
+
+
+
+
+
+
+
+
+
+
Golden 190 in 1
19??
diff --git a/src/devices/bus/nes/mmc3_clones.cpp b/src/devices/bus/nes/mmc3_clones.cpp
index 66e6e39c424..6b8807175e7 100644
--- a/src/devices/bus/nes/mmc3_clones.cpp
+++ b/src/devices/bus/nes/mmc3_clones.cpp
@@ -68,6 +68,8 @@ DEFINE_DEVICE_TYPE(NES_BMC_15IN1, nes_bmc_15in1_device, "nes_bmc_15in1",
DEFINE_DEVICE_TYPE(NES_BMC_SBIG7, nes_bmc_sbig7_device, "nes_bmc_sbig7", "NES Cart BMC Super BIG 7 in 1 PCB")
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_JY208, nes_bmc_jy208_device, "nes_bmc_jy208", "NES Cart BMC JY-208 PCB")
+DEFINE_DEVICE_TYPE(NES_BMC_JY302, nes_bmc_jy302_device, "nes_bmc_jy302", "NES Cart BMC JY-302 PCB")
+DEFINE_DEVICE_TYPE(NES_BMC_KC885, nes_bmc_kc885_device, "nes_bmc_kc885", "NES Cart BMC KC885 PCB")
DEFINE_DEVICE_TYPE(NES_BMC_SFC12, nes_bmc_sfc12_device, "nes_bmc_sfc12", "NES Cart BMC SFC-12 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")
@@ -111,6 +113,19 @@ INPUT_PORTS_START( bmc_f600 )
PORT_CONFSETTING( 0x80, "Mario Party II (6 in 1)" )
INPUT_PORTS_END
+INPUT_PORTS_START( bmc_kc885 )
+ PORT_START("JUMPER")
+ PORT_CONFNAME( 0x07, 0x07, "Menu Type" )
+ PORT_CONFSETTING( 0x00, "6000 in 1" )
+ PORT_CONFSETTING( 0x01, "400 in 1" )
+ PORT_CONFSETTING( 0x02, "800 in 1" )
+ PORT_CONFSETTING( 0x03, "5000 in 1" )
+ PORT_CONFSETTING( 0x04, "190 in 1" )
+ PORT_CONFSETTING( 0x05, "1000 in 1" )
+ PORT_CONFSETTING( 0x06, "2000 in 1" )
+ PORT_CONFSETTING( 0x07, "19 in 1" )
+INPUT_PORTS_END
+
//-------------------------------------------------
// input_ports - device-specific input ports
@@ -131,6 +146,11 @@ ioport_constructor nes_bmc_f600_device::device_input_ports() const
return INPUT_PORTS_NAME( bmc_f600 );
}
+ioport_constructor nes_bmc_kc885_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( bmc_kc885 );
+}
+
//**************************************************************************
@@ -360,6 +380,17 @@ nes_bmc_jy208_device::nes_bmc_jy208_device(const machine_config &mconfig, const
{
}
+nes_bmc_jy302_device::nes_bmc_jy302_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_bmc_hik8_device(mconfig, NES_BMC_JY302, tag, owner, clock)
+{
+}
+
+nes_bmc_kc885_device::nes_bmc_kc885_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_bmc_hik8_device(mconfig, NES_BMC_KC885, tag, owner, clock)
+ , m_jumper(*this, "JUMPER")
+{
+}
+
nes_bmc_sfc12_device::nes_bmc_sfc12_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_bmc_hik8_device(mconfig, NES_BMC_SFC12, tag, owner, clock)
{
@@ -828,6 +859,13 @@ void nes_bmc_hik8_device::pcb_reset()
mmc3_common_initialize(0x3f, 0xff, 0);
}
+void nes_bmc_kc885_device::pcb_reset()
+{
+ nes_bmc_hik8_device::pcb_reset();
+ m_prg_mask = 0x1f;
+ set_prg(m_prg_base, m_prg_mask);
+}
+
void nes_bmc_hik4_device::device_start()
{
mmc3_start();
@@ -2648,6 +2686,79 @@ void nes_bmc_jy208_device::write_m(offs_t offset, u8 data)
m_mirroring = PPU_MIRROR_NONE; // allow MMC3 mirror switching
}
+/*-------------------------------------------------
+
+ BMC-JY-302
+
+ Games: Super 8 in 1
+
+ Variant of the HIK8IN1 boards that adds 8K of VRAM
+ which seems the same as the SFC-12 board below,
+ other than the line which selects VRAM/VROM.
+
+ NES 2.0: mapper 410
+
+ In MAME: Supported.
+
+ -------------------------------------------------*/
+
+void nes_bmc_jy302_device::set_chr(u8 chr, int chr_base, int chr_mask)
+{
+ if (BIT(m_reg[2], 6))
+ chr8(0, CHRRAM);
+ else
+ nes_txrom_device::set_chr(chr, chr_base, chr_mask);
+}
+
+/*-------------------------------------------------
+
+ BMC-KC885
+
+ Games: Super 8 in 1 VIP19
+
+ Variant of the HIK8IN1 boards that has different
+ upper address lines for PRG banking. Exactly how
+ these lines are selected is determined by three
+ jumper/solder pads.
+
+ NES 2.0: mapper 401
+
+ In MAME: Supported.
+
+ -------------------------------------------------*/
+
+u8 nes_bmc_kc885_device::read_h(offs_t offset)
+{
+// LOG_MMC(("bmc_kc885 read_h, offset: %04x\n", offset));
+
+ if (BIT(m_reg[1], 7) & BIT(m_jumper->read(), 2))
+ return get_open_bus();
+ else
+ return hi_access_rom(offset);
+}
+
+void nes_bmc_kc885_device::write_m(offs_t offset, u8 data)
+{
+ LOG_MMC(("bmc_kc885 write_m, offset: %04x, data: %02x\n", offset, data));
+
+ if (!BIT(m_reg[3], 6)) // outer register lock bit
+ {
+ if (m_count == 1)
+ data = (data & ~0x60) | bitswap<2>(data, 5, 6) << 5;
+ m_reg[m_count] = data;
+ m_count = (m_count + 1) & 0x03;
+
+ u8 mask = 0x80 | (m_jumper->read() & 0x03) << 5;
+ m_prg_base = (m_reg[2] & mask) | (m_reg[1] & ~mask);
+ m_prg_mask = ~m_reg[3] & 0x1f;
+ set_prg(m_prg_base, m_prg_mask);
+
+ m_chr_base = (m_reg[2] & 0xf0) << 4 | m_reg[0];
+ m_chr_mask = 0xff >> (~m_reg[2] & 0x0f);
+ set_chr(m_chr_source, m_chr_base, m_chr_mask);
+ }
+}
+
/*-------------------------------------------------
BMC-SFC-12
diff --git a/src/devices/bus/nes/mmc3_clones.h b/src/devices/bus/nes/mmc3_clones.h
index 812b953c249..7a3c6aef83d 100644
--- a/src/devices/bus/nes/mmc3_clones.h
+++ b/src/devices/bus/nes/mmc3_clones.h
@@ -741,8 +741,6 @@ protected:
virtual void device_start() override;
u8 m_reg[4];
-
-private:
u8 m_count;
};
@@ -762,6 +760,41 @@ protected:
};
+// ======================> nes_bmc_jy302_device
+
+class nes_bmc_jy302_device : public nes_bmc_hik8_device
+{
+public:
+ // construction/destruction
+ nes_bmc_jy302_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void set_chr(u8 chr, int chr_base, int chr_mask) override;
+};
+
+
+// ======================> nes_bmc_kc885_device
+
+class nes_bmc_kc885_device : public nes_bmc_hik8_device
+{
+public:
+ // construction/destruction
+ nes_bmc_kc885_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ virtual u8 read_h(offs_t offset) override;
+ virtual void write_m(offs_t offset, u8 data) override;
+
+ virtual void pcb_reset() override;
+
+protected:
+ // device-level overrides
+ virtual ioport_constructor device_input_ports() const override;
+
+private:
+ required_ioport m_jumper;
+};
+
+
// ======================> nes_bmc_sfc12_device
class nes_bmc_sfc12_device : public nes_bmc_hik8_device
@@ -1212,6 +1245,8 @@ DECLARE_DEVICE_TYPE(NES_BMC_15IN1, nes_bmc_15in1_device)
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_JY208, nes_bmc_jy208_device)
+DECLARE_DEVICE_TYPE(NES_BMC_JY302, nes_bmc_jy302_device)
+DECLARE_DEVICE_TYPE(NES_BMC_KC885, nes_bmc_kc885_device)
DECLARE_DEVICE_TYPE(NES_BMC_SFC12, nes_bmc_sfc12_device)
DECLARE_DEVICE_TYPE(NES_BMC_HIK4, nes_bmc_hik4_device)
DECLARE_DEVICE_TYPE(NES_BMC_MARIO7IN1, nes_bmc_mario7in1_device)
diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp
index 4226db2078f..e4ec97267df 100644
--- a/src/devices/bus/nes/nes_carts.cpp
+++ b/src/devices/bus/nes/nes_carts.cpp
@@ -458,6 +458,8 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("bmc_sbig7in1", NES_BMC_SBIG7);
device.option_add_internal("bmc_hik8in1", NES_BMC_HIK8);
device.option_add_internal("bmc_jy208", NES_BMC_JY208);
+ device.option_add_internal("bmc_jy302", NES_BMC_JY302);
+ device.option_add_internal("bmc_kc885", NES_BMC_KC885);
device.option_add_internal("bmc_sfc12", NES_BMC_SFC12);
device.option_add_internal("bmc_hik4in1", NES_BMC_HIK4);
device.option_add_internal("bmc_mario7in1", NES_BMC_MARIO7IN1);
diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx
index 691c1d178aa..aba521601ae 100644
--- a/src/devices/bus/nes/nes_ines.hxx
+++ b/src/devices/bus/nes/nes_ines.hxx
@@ -436,7 +436,7 @@ static const nes_mmc mmc_list[] =
// 398 JY-048 multicart, not in nes.xml?
{ 399, BATMAP_000 }, // homebrew game Star Versus
// 400 retroUSB (Sealie?) 8-bit XMAS 2017
- // 401 Super 19-in-1 VIP 19, not in nes.xml?
+ { 401, BMC_KC885 },
// 402 22-in-1 Olympic Games, not in nes.xml?
// 403 Tetris Family 19-in-1 that only works on Famiclones with 6502's BCD mode
{ 404, BMC_JY012005 },
@@ -445,7 +445,7 @@ static const nes_mmc mmc_list[] =
// 407 VT03 PnP
// 408 Konami PnP
{ 409, SEALIE_DPCMCART }, // A Winner is You homebrew music cart
- // 410 Unused or JY?
+ { 410, BMC_JY302 },
{ 411, BMC_A88S1 },
// 412 INTV 10-in-1 PnP 2nd edition
{ 413, BATMAP_SRRX }, // homebrew game Super Russian Roulette
diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx
index fe6166562ea..e544b5874e5 100644
--- a/src/devices/bus/nes/nes_pcb.hxx
+++ b/src/devices/bus/nes/nes_pcb.hxx
@@ -330,6 +330,8 @@ static const nes_pcb pcb_list[] =
{ "bmc_sbig7in1", BMC_SUPERBIG_7IN1 },
{ "bmc_hik8in1", BMC_HIK8IN1 },
{ "bmc_jy208", BMC_JY208 },
+ { "bmc_jy302", BMC_JY302 },
+ { "bmc_kc885", BMC_KC885 },
{ "bmc_sfc12", BMC_SFC12 },
{ "bmc_hik4in1", BMC_SUPERHIK_4IN1 },
{ "bmc_mario7in1", BMC_MARIOPARTY_7IN1 },
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index c1a03d3d441..7d763a314ca 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -86,7 +86,7 @@ enum
TXC_MJBLOCK, TXC_STRIKEW, TXC_TW,
// Multigame Carts
BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_A88S1, BMC_F15, BMC_F600, BMC_L6IN1,
- BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208,
+ BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208, BMC_JY302, BMC_KC885,
BMC_S24IN1SC03, BMC_T262, BMC_TELETUBBIES,
BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1,
BMC_MARIOPARTY_7IN1, BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646,
diff --git a/src/mame/machine/nes.cpp b/src/mame/machine/nes.cpp
index 8b3530cbe55..ed62101c4af 100644
--- a/src/mame/machine/nes.cpp
+++ b/src/mame/machine/nes.cpp
@@ -90,6 +90,7 @@ void nes_state::machine_start()
BMC_8157,
BMC_970630C,
BMC_GOLD150,
+ BMC_KC885,
BMC_TELETUBBIES,
BMC_VT5201,
BTL_PALTHENA,