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,