summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author 0kmg <9137159+0kmg@users.noreply.github.com>2021-08-04 08:04:08 -0800
committer GitHub <noreply@github.com>2021-08-05 02:04:08 +1000
commitad4f91176b615af9b9bc9fdc3918e276296ddfeb (patch)
tree0779bd34b89903e9e49666503b9c3d29c6ab8de5 /src
parent3912610866d933ed05fc1b21cd9f771a66f7e4fc (diff)
bus/nes: Added support for a Kaiser 4-in-1 cart. (#8390)
New working software list additions (nes.xml) ----------------------------------- 4 in 1 (KS-106C)
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/nes/kaiser.cpp36
-rw-r--r--src/devices/bus/nes/kaiser.h20
-rw-r--r--src/devices/bus/nes/nes_carts.cpp1
-rw-r--r--src/devices/bus/nes/nes_ines.hxx2
-rw-r--r--src/devices/bus/nes/nes_pcb.hxx1
-rw-r--r--src/devices/bus/nes/nes_slot.h8
6 files changed, 63 insertions, 5 deletions
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();
@@ -373,6 +394,21 @@ void nes_ks7057_device::pcb_reset()
/*-------------------------------------------------
+ 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
Games: Tui Do Woo Ma Jeung
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,