diff --git a/hash/nes.xml b/hash/nes.xml
index 09a26739851..69c2e9de303 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -51669,7 +51669,75 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
-
+
+
+
+
+ 1994 Super HiK 4 in 1 (JY-001)
+ 1994
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1993 Heroe Series 4 in 1 (JY-001)
+ 1993
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1994 Super HiK 4 in 1 (JY-002)
+ 1994
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1994 Super HiK 4 in 1 (JY-003)
+ 1994
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1994 Super HiK 3 in 1 (JY-007)
@@ -51686,6 +51754,26 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
+
+ 1995 Super HiK 4 in 1 (JY-008)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1994 Ball 4 in 1 Series (JY-009)
1994
@@ -51701,6 +51789,22 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
+
+ Mario Series 4 in 1 (JY-013)
+ 199?
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
1996 Super HiK 4 in 1 (JY-018)
1996
@@ -51746,6 +51850,160 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
+
+ 1995 Super HiK 4 in 1 (JY-023)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1997 Super HiK 4 in 1 (JY-024)
+ 1997
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1995 Super HiK 4 in 1 (JY-024)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1995 Super HiK 4 in 1 (JY-038)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1995 Super HiK 4 in 1 (JY-039)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1995 Super HiK 4 in 1 (JY-040)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1995 Super HiK 4 in 1 (JY-043)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1997 Super HiK 4 in 1 (JY-047)
+ 1997
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1995 Super HiK 4 in 1 (JY-047)
+ 1995
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
1995 Super 8 in 1 (JY-050)
1995
@@ -51761,6 +52019,57 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
+
+ 1996 Super HiK 4 in 1 (JY-057)
+ 1996
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1996 Super HiK 4 in 1 (JY-058)
+ 1996
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1996 Super HiK 4 in 1 (JY-072)
+ 1996
+ J.Y. Company
+
+
+
+
+
+
+
+
+
+
+
+
Super 8 in 1 Gold Card Series (JY-085)
1995
diff --git a/src/devices/bus/nes/mmc3_clones.cpp b/src/devices/bus/nes/mmc3_clones.cpp
index 0d49c23e1d6..7de58b6a127 100644
--- a/src/devices/bus/nes/mmc3_clones.cpp
+++ b/src/devices/bus/nes/mmc3_clones.cpp
@@ -54,6 +54,9 @@ DEFINE_DEVICE_TYPE(NES_FCGJ8IN1, nes_fcgj8in1_device, "nes_fcgj8in1",
DEFINE_DEVICE_TYPE(NES_FK23C, nes_fk23c_device, "nes_fk23c", "NES Cart FK23C PCB")
DEFINE_DEVICE_TYPE(NES_FK23CA, nes_fk23ca_device, "nes_fk23ca", "NES Cart FK23CA PCB")
DEFINE_DEVICE_TYPE(NES_NT639, nes_nt639_device, "nes_nt639", "NES Cart NT-639 PCB")
+DEFINE_DEVICE_TYPE(NES_RESETTXROM0, nes_resettxrom0_device, "nes_resettxrom0", "NES Cart BMC RESET-TXROM 128K/128K PCB")
+DEFINE_DEVICE_TYPE(NES_RESETTXROM1, nes_resettxrom1_device, "nes_resettxrom1", "NES Cart BMC RESET-TXROM 256K/128K PCB")
+DEFINE_DEVICE_TYPE(NES_RESETTXROM2, nes_resettxrom2_device, "nes_resettxrom2", "NES Cart BMC RESET-TXROM 128K/256K PCB")
DEFINE_DEVICE_TYPE(NES_S24IN1SC03, nes_s24in1sc03_device, "nes_s24in1c03", "NES Cart Super 24 in 1 SC-03 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")
@@ -224,6 +227,26 @@ nes_nt639_device::nes_nt639_device(const machine_config &mconfig, const char *ta
{
}
+nes_resettxrom0_device::nes_resettxrom0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prg_shift, int chr_shift)
+ : nes_txrom_device(mconfig, type, tag, owner, clock), m_count(-1), m_prg_shift(prg_shift), m_chr_shift(chr_shift)
+{
+}
+
+nes_resettxrom0_device::nes_resettxrom0_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_resettxrom0_device(mconfig, NES_RESETTXROM0, tag, owner, clock, 4, 7)
+{
+}
+
+nes_resettxrom1_device::nes_resettxrom1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_resettxrom0_device(mconfig, NES_RESETTXROM1, tag, owner, clock, 5, 7)
+{
+}
+
+nes_resettxrom2_device::nes_resettxrom2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_resettxrom0_device(mconfig, NES_RESETTXROM2, tag, owner, clock, 4, 8)
+{
+}
+
nes_s24in1sc03_device::nes_s24in1sc03_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_txrom_device(mconfig, NES_S24IN1SC03, tag, owner, clock)
{
@@ -553,6 +576,25 @@ void nes_nt639_device::pcb_reset()
mmc3_common_initialize(0x0f, 0xff, 0);
}
+// These reset-based PCBs are emulated here with no additional handlers
+void nes_resettxrom0_device::device_start()
+{
+ mmc3_start();
+ save_item(NAME(m_count));
+}
+
+void nes_resettxrom0_device::pcb_reset()
+{
+ m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
+ mmc3_common_initialize((1 << m_prg_shift) - 1, (1 << m_chr_shift) - 1, 0);
+
+ m_count = (m_count + 1) & 3;
+ m_prg_base = m_count << m_prg_shift;
+ m_chr_base = m_count << m_chr_shift;
+ set_prg(m_prg_base, m_prg_mask);
+ set_chr(m_chr_source, m_chr_base, m_chr_mask);
+}
+
void nes_s24in1sc03_device::device_start()
{
mmc3_start();
diff --git a/src/devices/bus/nes/mmc3_clones.h b/src/devices/bus/nes/mmc3_clones.h
index 3c2f6f6e540..6f71cd90295 100644
--- a/src/devices/bus/nes/mmc3_clones.h
+++ b/src/devices/bus/nes/mmc3_clones.h
@@ -518,6 +518,49 @@ public:
};
+// ======================> nes_resettxrom0_device
+
+class nes_resettxrom0_device : public nes_txrom_device
+{
+public:
+ // construction/destruction
+ nes_resettxrom0_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ virtual void pcb_reset() override;
+
+protected:
+ // construction/destruction
+ nes_resettxrom0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prg_shift, int chr_shift);
+
+ // device-level overrides
+ virtual void device_start() override;
+
+private:
+ int m_count;
+ int m_prg_shift, m_chr_shift;
+};
+
+
+// ======================> nes_resettxrom1_device
+
+class nes_resettxrom1_device : public nes_resettxrom0_device
+{
+public:
+ // construction/destruction
+ nes_resettxrom1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+
+// ======================> nes_resettxrom2_device
+
+class nes_resettxrom2_device : public nes_resettxrom0_device
+{
+public:
+ // construction/destruction
+ nes_resettxrom2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+
// ======================> nes_s24in1sc03_device
class nes_s24in1sc03_device : public nes_txrom_device
@@ -881,6 +924,9 @@ DECLARE_DEVICE_TYPE(NES_FCGJ8IN1, nes_fcgj8in1_device)
DECLARE_DEVICE_TYPE(NES_FK23C, nes_fk23c_device)
DECLARE_DEVICE_TYPE(NES_FK23CA, nes_fk23ca_device)
DECLARE_DEVICE_TYPE(NES_NT639, nes_nt639_device)
+DECLARE_DEVICE_TYPE(NES_RESETTXROM0, nes_resettxrom0_device)
+DECLARE_DEVICE_TYPE(NES_RESETTXROM1, nes_resettxrom1_device)
+DECLARE_DEVICE_TYPE(NES_RESETTXROM2, nes_resettxrom2_device)
DECLARE_DEVICE_TYPE(NES_S24IN1SC03, nes_s24in1sc03_device)
DECLARE_DEVICE_TYPE(NES_BMC_8IN1, nes_bmc_8in1_device)
DECLARE_DEVICE_TYPE(NES_BMC_15IN1, nes_bmc_15in1_device)
diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp
index 08ae42d4b63..ae3cb766378 100644
--- a/src/devices/bus/nes/nes_carts.cpp
+++ b/src/devices/bus/nes/nes_carts.cpp
@@ -423,6 +423,9 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("fk23c", NES_FK23C);
device.option_add_internal("fk23ca", NES_FK23CA);
device.option_add_internal("nt639", NES_NT639);
+ device.option_add_internal("resettxrom0", NES_RESETTXROM0);
+ device.option_add_internal("resettxrom1", NES_RESETTXROM1);
+ device.option_add_internal("resettxrom2", NES_RESETTXROM2);
device.option_add_internal("s24in1c03", NES_S24IN1SC03);
device.option_add_internal("bmc_8in1", NES_BMC_8IN1);
device.option_add_internal("bmc_15in1", NES_BMC_15IN1);
diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx
index e8446e2fd0e..e76002bbcf6 100644
--- a/src/devices/bus/nes/nes_ines.hxx
+++ b/src/devices/bus/nes/nes_ines.hxx
@@ -348,7 +348,7 @@ static const nes_mmc mmc_list[] =
// 310 variant of mapper 125?
// 311 Unused (previously assigned in error to a bad SMB2 pirate dump)
{ 312, KAISER_KS7013B }, // Highway Star FDS conversion
- // { 313, BMC_RESETTXROM }, various multicarts, not in nes.xml?
+ { 313, BMC_RESETTXROM0 },
{ 314, BMC_64IN1NR },
// 315 820732C and 830134C multicarts, not in nes.xml?
// 316 Unused
@@ -901,6 +901,15 @@ void nes_cart_slot_device::call_load_ines()
m_pcb_id = RCM_GS2013;
break;
+ case BMC_RESETTXROM0:
+ if (submapper == 1)
+ m_pcb_id = BMC_RESETTXROM1;
+ else if (submapper == 2)
+ m_pcb_id = BMC_RESETTXROM2;
+ else if (submapper > 2)
+ logerror("Unimplemented NES 2.0 submapper: %d\n", submapper);
+ break;
+
case HES_BOARD:
if (crc_hack)
m_cart->set_pcb_ctrl_mirror(true); // Mapper 113 is used for 2 diff boards
@@ -1224,6 +1233,13 @@ const char * nes_cart_slot_device::get_default_card_ines(get_default_card_softwa
if (ROM[4] >= 20)
pcb_id = RCM_GS2013;
break;
+
+ case BMC_RESETTXROM0: // Mapper 313 is used for 3 diff boards
+ if (submapper == 1)
+ pcb_id = BMC_RESETTXROM1;
+ if (submapper == 2)
+ pcb_id = BMC_RESETTXROM2;
+ break;
}
return nes_get_slot(pcb_id);
diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx
index 22a09d3b5c4..c70f93fca04 100644
--- a/src/devices/bus/nes/nes_pcb.hxx
+++ b/src/devices/bus/nes/nes_pcb.hxx
@@ -300,6 +300,9 @@ static const nes_pcb pcb_list[] =
{ "fk23c", BMC_FK23C },
{ "fk23ca", BMC_FK23CA },
{ "nt639", BMC_NT639 },
+ { "resettxrom0", BMC_RESETTXROM0 },
+ { "resettxrom1", BMC_RESETTXROM1 },
+ { "resettxrom2", BMC_RESETTXROM2 },
{ "s24in1c03", BMC_S24IN1SC03 },
{ "bmc_8in1", BMC_8IN1 },
{ "bmc_15in1", BMC_15IN1 },
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index d59b39d28c9..c18e4153b22 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -103,6 +103,7 @@ enum
BMC_411120C, BMC_GOLD150, BMC_GOLD260, BMC_SUPER22,
BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160, BMC_CTC09,
BMC_K1029, BMC_K3006, BMC_K3036, BMC_K3046, BMC_SA005A, BMC_TJ03,
+ BMC_RESETTXROM0, BMC_RESETTXROM1, BMC_RESETTXROM2,
// Unlicensed
UNL_8237, UNL_CC21, UNL_AX5705, UNL_KN42, UNL_KOF97,
UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE,