From ad4f91176b615af9b9bc9fdc3918e276296ddfeb Mon Sep 17 00:00:00 2001 From: 0kmg <9137159+0kmg@users.noreply.github.com> Date: Wed, 4 Aug 2021 08:04:08 -0800 Subject: [PATCH] bus/nes: Added support for a Kaiser 4-in-1 cart. (#8390) New working software list additions (nes.xml) ----------------------------------- 4 in 1 (KS-106C) --- hash/nes.xml | 16 ++++++++++++++ src/devices/bus/nes/kaiser.cpp | 36 +++++++++++++++++++++++++++++++ src/devices/bus/nes/kaiser.h | 20 +++++++++++++++++ src/devices/bus/nes/nes_carts.cpp | 1 + src/devices/bus/nes/nes_ines.hxx | 2 +- src/devices/bus/nes/nes_pcb.hxx | 1 + src/devices/bus/nes/nes_slot.h | 8 +++---- 7 files changed, 79 insertions(+), 5 deletions(-) diff --git a/hash/nes.xml b/hash/nes.xml index dd78beebc80..765b90903f1 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -79021,6 +79021,22 @@ be better to redump them properly. --> + + 4 in 1 (KS-106C) + 19?? + Kaiser + + + + + + + + + + + + 4 in 1 (KT-3445AB) 19?? diff --git a/src/devices/bus/nes/kaiser.cpp b/src/devices/bus/nes/kaiser.cpp index 9606e7d84ef..1c55db49171 100644 --- a/src/devices/bus/nes/kaiser.cpp +++ b/src/devices/bus/nes/kaiser.cpp @@ -8,6 +8,7 @@ Here we emulate the following Kaiser bootleg PCBs + * Kaiser KS106C * Kaiser KS202 * Kaiser KS7010 * Kaiser KS7012 @@ -44,6 +45,7 @@ // constructor //------------------------------------------------- +DEFINE_DEVICE_TYPE(NES_KS106C, nes_ks106c_device, "nes_ks106c", "NES Cart Kaiser KS-106C PCB") DEFINE_DEVICE_TYPE(NES_KS202, nes_ks202_device, "nes_ks202", "NES Cart Kaiser KS-202 PCB") DEFINE_DEVICE_TYPE(NES_KS7010, nes_ks7010_device, "nes_ks7010", "NES Cart Kaiser KS-7010 PCB") DEFINE_DEVICE_TYPE(NES_KS7012, nes_ks7012_device, "nes_ks7012", "NES Cart Kaiser KS-7012 PCB") @@ -61,6 +63,11 @@ DEFINE_DEVICE_TYPE(NES_KS7057, nes_ks7057_device, "nes_ks7057", "NES Cart Kai DEFINE_DEVICE_TYPE(NES_KS7058, nes_ks7058_device, "nes_ks7058", "NES Cart Kaiser KS-7058 PCB") +nes_ks106c_device::nes_ks106c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_nrom_device(mconfig, NES_KS106C, tag, owner, clock), m_latch(0) +{ +} + nes_ks7058_device::nes_ks7058_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : nes_nrom_device(mconfig, NES_KS7058, tag, owner, clock) { @@ -149,6 +156,20 @@ nes_ks7057_device::nes_ks7057_device(const machine_config &mconfig, const char * +void nes_ks106c_device::device_start() +{ + common_start(); + save_item(NAME(m_latch)); +} + +void nes_ks106c_device::pcb_reset() +{ + prg32(m_latch); + chr8(m_latch, CHRROM); + set_nt_mirroring(BIT(m_latch, 0) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ); + m_latch = (m_latch + 1) & 0x03; +} + void nes_ks7058_device::device_start() { common_start(); @@ -371,6 +392,21 @@ void nes_ks7057_device::pcb_reset() mapper specific handlers -------------------------------------------------*/ +/*------------------------------------------------- + + Kaiser Board KS106C + + Games: 4 in 1 + + No need to use handlers. At reset the banks change + and so does the game. + + NES 2.0: mapper 352 + + In MAME: Supported. + + -------------------------------------------------*/ + /*------------------------------------------------- Kaiser Board KS7058 diff --git a/src/devices/bus/nes/kaiser.h b/src/devices/bus/nes/kaiser.h index 5dfe730ae91..f76c018175e 100644 --- a/src/devices/bus/nes/kaiser.h +++ b/src/devices/bus/nes/kaiser.h @@ -8,6 +8,25 @@ #include "nxrom.h" +// ======================> nes_ks106c_device + +class nes_ks106c_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_ks106c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void pcb_reset() override; + +protected: + // device-level overrides + virtual void device_start() override; + +private: + u8 m_latch; +}; + + // ======================> nes_ks7058_device class nes_ks7058_device : public nes_nrom_device @@ -335,6 +354,7 @@ private: // device type definition +DECLARE_DEVICE_TYPE(NES_KS106C, nes_ks106c_device) DECLARE_DEVICE_TYPE(NES_KS202, nes_ks202_device) DECLARE_DEVICE_TYPE(NES_KS7010, nes_ks7010_device) DECLARE_DEVICE_TYPE(NES_KS7012, nes_ks7012_device) diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index 0859084d0fe..bc3963fd774 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -249,6 +249,7 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("hengg_shjy3", NES_HENGG_SHJY3); // mapper 253 device.option_add_internal("hes", NES_HES); device.option_add_internal("hosenkan", NES_HOSENKAN); + device.option_add_internal("ks106c", NES_KS106C); // mapper 352 device.option_add_internal("ks202", NES_KS202); // mapper 56 device.option_add_internal("ks7010", NES_KS7010); // used in Akumajo Dracula (FDS Conversion) device.option_add_internal("ks7012", NES_KS7012); // used in Zanac (FDS Conversion) diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index 2233ab9ae45..cd3ec201eb6 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -387,7 +387,7 @@ static const nes_mmc mmc_list[] = { 349, BMC_G146 }, // { 350, BMC_891227 }, not in nes.xml // 351 JY/Techline 9-in-1 - // 352 Kaiser 4-in-1 KS106C + { 352, KAISER_KS106C }, // 4-in-1 // 353 Super Mario Family multicart // 354 250-in-1 multicart with FDS Bubble Bobble // 355 Hwang Shinwei 3-D Block etc, currently has unemulated PIC16C54 diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index 6867b2192c0..ad6378ea1d4 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -161,6 +161,7 @@ static const nes_pcb pcb_list[] = { "hengg_shjy3", HENGG_SHJY3 }, // mapper 253 { "hes", HES_BOARD }, { "hosenkan", HOSENKAN_BOARD }, + { "ks106c", KAISER_KS106C }, // mapper 352 { "ks202", KAISER_KS202 }, // mapper 56 { "ks7010", KAISER_KS7010 }, // used in Akumajo Dracula (FDS Conversion) { "ks7012", KAISER_KS7012 }, // used in Zanac (FDS Conversion) diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index 2ac512a675c..0c3cbb95b09 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -114,10 +114,10 @@ enum BTL_SMB2JB, BTL_09034A, BTL_SMB3, BTL_SBROS11, BTL_DRAGONNINJA, BTL_PIKACHUY2K, BTL_SHUIGUAN, BTL_0353, BTL_BATMANFS, BTL_PALTHENA, BTL_YUNG08, // Kaiser - KAISER_KS202, KAISER_KS7010, KAISER_KS7012, KAISER_KS7013B, - KAISER_KS7016, KAISER_KS7016B, KAISER_KS7017, KAISER_KS7021A, - KAISER_KS7022, KAISER_KS7030, KAISER_KS7031, KAISER_KS7032, - KAISER_KS7037, KAISER_KS7057, KAISER_KS7058, + KAISER_KS106C, KAISER_KS202, KAISER_KS7010, KAISER_KS7012, + KAISER_KS7013B, KAISER_KS7016, KAISER_KS7016B, KAISER_KS7017, + KAISER_KS7021A, KAISER_KS7022, KAISER_KS7030, KAISER_KS7031, + KAISER_KS7032, KAISER_KS7037, KAISER_KS7057, KAISER_KS7058, // Whirlwind Manu UNL_DH08, UNL_LE05, UNL_LG25, UNL_LH10, UNL_LH28_LH54, UNL_LH31, UNL_LH32, UNL_LH51, UNL_LH53,