diff --git a/hash/nes.xml b/hash/nes.xml index e96c7850bf6..12c55906a2f 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -4201,7 +4201,7 @@ license:CC0 - + Big Nose Freaks Out (USA) 1992 Camerica @@ -61302,6 +61302,24 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx + + 2 in 1 - Big Nose the Caveman & Big Nose Freaks Out + 199? + <pirate> + + + + + + + + + + + + + + 2 in 1 - Donkey Kong & Jungle Book 19?? @@ -78732,6 +78750,7 @@ be better to redump them properly. --> 4 in 1 (Alt 2) 19?? <pirate> + @@ -78748,6 +78767,7 @@ be better to redump them properly. --> 4 in 1 (Alt 3) 19?? <pirate> + @@ -80849,6 +80869,7 @@ to check why this is different --> Reset Based 4 in 1 19?? <pirate> + diff --git a/src/devices/bus/nes/multigame.cpp b/src/devices/bus/nes/multigame.cpp index 10952516266..9bfd36078a4 100644 --- a/src/devices/bus/nes/multigame.cpp +++ b/src/devices/bus/nes/multigame.cpp @@ -32,6 +32,7 @@ DEFINE_DEVICE_TYPE(NES_ACTION52, nes_action52_device, "nes_action52" DEFINE_DEVICE_TYPE(NES_CALTRON6IN1, nes_caltron_device, "nes_caltron", "NES Cart Caltron 6 in 1 PCB") DEFINE_DEVICE_TYPE(NES_RUMBLESTATION, nes_rumblestat_device, "nes_rumblestat", "NES Cart Rumblestation PCB") DEFINE_DEVICE_TYPE(NES_SVISION16, nes_svision16_device, "nes_svision16", "NES Cart Supervision 16 in 1 PCB") +DEFINE_DEVICE_TYPE(NES_KN42, nes_kn42_device, "nes_kn42", "NES Cart KN-42 PCB") DEFINE_DEVICE_TYPE(NES_N625092, nes_n625092_device, "nes_n625092", "NES Cart N625092 PCB") DEFINE_DEVICE_TYPE(NES_A65AS, nes_a65as_device, "nes_a65as", "NES Cart A65AS PCB") DEFINE_DEVICE_TYPE(NES_T262, nes_t262_device, "nes_t262", "NES Cart T-262 PCB") @@ -102,6 +103,11 @@ nes_svision16_device::nes_svision16_device(const machine_config &mconfig, const { } +nes_kn42_device::nes_kn42_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_nrom_device(mconfig, NES_KN42, tag, owner, clock), m_latch(0) +{ +} + nes_n625092_device::nes_n625092_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : nes_nrom_device(mconfig, NES_N625092, tag, owner, clock), m_latch1(0), m_latch2(0) { @@ -406,6 +412,20 @@ void nes_svision16_device::pcb_reset() m_latch2 = 0; } +void nes_kn42_device::device_start() +{ + common_start(); + save_item(NAME(m_latch)); +} + +void nes_kn42_device::pcb_reset() +{ + m_latch ^= 0x10; + prg16_89ab(m_latch); + prg16_cdef(m_latch | 0x0f); // fixed to last bank for either game + chr8(0, CHRRAM); +} + void nes_n625092_device::device_start() { common_start(); @@ -1215,6 +1235,32 @@ void nes_svision16_device::write_h(offs_t offset, uint8_t data) update_prg(); } +/*------------------------------------------------- + + Bootleg Board KN-42 + + Games: 2 in 1 - Big Nose & Big Nose Freaks Out + + NES 2.0: mapper 381 + + In MAME: Supported. + + TODO: Big Nose Freaks Out has timing issues like + many Camerica games. It happens with the singleton + dump and is unrelated to the bootleg board here. + + -------------------------------------------------*/ + +void nes_kn42_device::write_h(offs_t offset, u8 data) +{ + LOG_MMC(("kn42 write_h, offset: %04x, data: %02x\n", offset, data)); + + // this pcb is subject to bus conflict + data = account_bus_conflict(offset, data); + + prg16_89ab(m_latch | (data & 0x07) << 1 | BIT(data, 4)); +} + /*------------------------------------------------- Bootleg Board N625092 @@ -1265,7 +1311,6 @@ void nes_n625092_device::write_h(offs_t offset, uint8_t data) } } - /*------------------------------------------------- Board BMC-A65AS diff --git a/src/devices/bus/nes/multigame.h b/src/devices/bus/nes/multigame.h index 65a2a756580..258a20fe98f 100644 --- a/src/devices/bus/nes/multigame.h +++ b/src/devices/bus/nes/multigame.h @@ -94,6 +94,27 @@ private: }; +// ======================> nes_kn42_device + +class nes_kn42_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_kn42_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; + +protected: + // device-level overrides + virtual void device_start() override; + +private: + u8 m_latch; +}; + + // ======================> nes_n625092_device class nes_n625092_device : public nes_nrom_device @@ -1018,6 +1039,7 @@ DECLARE_DEVICE_TYPE(NES_ACTION52, nes_action52_device) DECLARE_DEVICE_TYPE(NES_CALTRON6IN1, nes_caltron_device) DECLARE_DEVICE_TYPE(NES_RUMBLESTATION, nes_rumblestat_device) DECLARE_DEVICE_TYPE(NES_SVISION16, nes_svision16_device) +DECLARE_DEVICE_TYPE(NES_KN42, nes_kn42_device) DECLARE_DEVICE_TYPE(NES_N625092, nes_n625092_device) DECLARE_DEVICE_TYPE(NES_A65AS, nes_a65as_device) DECLARE_DEVICE_TYPE(NES_T262, nes_t262_device) diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index b89085092c8..5f4ea291fa7 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -352,6 +352,7 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("maxi15", NES_MAXI15); // mapper 234 device.option_add_internal("rumblestation", NES_RUMBLESTATION); // mapper 46 device.option_add_internal("svision16", NES_SVISION16); // mapper 53 + device.option_add_internal("kn42", NES_KN42); device.option_add_internal("n625092", NES_N625092); device.option_add_internal("a65as", NES_A65AS); device.option_add_internal("t262", NES_T262); diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index e5841d4796d..9b3d8b1579d 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -415,7 +415,7 @@ static const nes_mmc mmc_list[] = // 378 8-in-1 multicart, which one? // 379 35-in-1 multicart, similar to mapper 38 // 380 970630C multicart - // 381 KN-42 2-in-1 with the Big Nose games + { 381, UNL_KN42 }, // 2-in-1 Big Nose games // 382 830928C 5-in-1 and 9-in-1 multicarts // 383 JY-014 multicart // 384 4-in-1 VRC4 clone with Crisis Force diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index affbb607295..11867d11165 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -237,6 +237,7 @@ static const nes_pcb pcb_list[] = { "caltron6in1", CALTRON_6IN1 }, { "rumblestation", RUMBLESTATION_BOARD }, // mapper 46 { "svision16", SVISION16_BOARD }, + { "kn42", UNL_KN42 }, { "n625092", UNL_N625092 }, { "a65as", BMC_A65AS }, { "t262", BMC_T262 }, diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index cfb1c510ad7..6e255678279 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -102,7 +102,7 @@ enum BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_CTC09, BMC_K3046, BMC_SA005A, BMC_TJ03, // Unlicensed - UNL_8237, UNL_CC21, UNL_AX5705, UNL_KOF97, + UNL_8237, UNL_CC21, UNL_AX5705, UNL_KN42, UNL_KOF97, UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE, UNL_UXROM, UNL_MK2, UNL_XIAOZY, UNL_KOF96, UNL_FS6, UNL_SF3, UNL_RACERMATE, UNL_EDU2K,