summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/nes.xml45
-rw-r--r--src/devices/bus/nes/kaiser.cpp186
-rw-r--r--src/devices/bus/nes/kaiser.h78
-rw-r--r--src/devices/bus/nes/nes_carts.cpp4
-rw-r--r--src/devices/bus/nes/nes_pcb.hxx2
-rw-r--r--src/devices/bus/nes/nes_slot.h10
6 files changed, 236 insertions, 89 deletions
diff --git a/hash/nes.xml b/hash/nes.xml
index 94df0fea151..0fb1fe4de91 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -14494,7 +14494,7 @@ license:CC0
</software>
<software name="getsumad">
- <description>Getsufuu Maden (Jpn)</description>
+ <description>GetsuFumaDen (Japan)</description>
<year>1987</year>
<publisher>Konami</publisher>
<info name="serial" value="KON-RC819"/>
@@ -46856,7 +46856,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</software>
<software name="getsumads" cloneof="getsumad">
- <description>Getsufuu Maden (Jpn, sample)</description>
+ <description>GetsuFumaDen (Japan, sample)</description>
<year>1987</year>
<publisher>Konami</publisher>
<info name="alt_title" value="月風魔伝"/>
@@ -62601,6 +62601,24 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part>
</software>
+ <software name="getsumadk" cloneof="getsumad">
+ <description>GetsuFumaDen (Kaiser)</description>
+ <year>19??</year>
+ <publisher>Whirlwind Manu</publisher>
+ <info name="serial" value="LH17"/> <!-- This game is also on a LH13 cart -->
+ <info name="alt_title" value="月風魔伝"/>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="ks7021a" />
+ <feature name="pcb_model" value="7021A" />
+ <dataarea name="prg" size="131072">
+ <rom name="5928-p" size="131072" crc="ec20d132" sha1="a522792f289ca1320a4d9a2fa3c1ef41b8f82e71" status="baddump" />
+ </dataarea>
+ <dataarea name="chr" size="131072">
+ <rom name="5929-c" size="131072" crc="1cb3a964" sha1="fff889c134947eccfa25b4c9a1a8573a22bc907c" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="golden">
<description>Golden KTV (Asia)</description>
<year>19??</year>
@@ -66661,13 +66679,13 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
</part>
</software>
- <software name="exbasket" supported="no">
+ <software name="exbasket">
<description>Exciting Basket (Asia, FDS conversion)</description>
<year>19??</year>
- <publisher>&lt;pirate&gt;</publisher>
+ <publisher>Kaiser</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="ks7016" />
- <feature name="pcb" value="UNL-KS7016" />
+ <feature name="pcb" value="KAISER-KS7016" />
<dataarea name="prg" size="131072">
<rom name="exciting basket (fds conversion)[u].prg" size="131072" crc="6aa23323" sha1="3fb2ef872b2c18ce5b39c478d6bfd8084bb07f25" offset="00000" status="baddump" />
</dataarea>
@@ -66829,6 +66847,23 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
</part>
</software>
+
+ <software name="meikyfdsa" cloneof="meikyfds">
+ <description>Meikyuu Jiin Dababa (Asia, FDS conversion, alt PCB)</description>
+ <year>19??</year>
+ <publisher>Kaiser</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="ks7016b" />
+ <feature name="pcb" value="KAISER-KS7016B" />
+ <dataarea name="prg" size="131072">
+ <rom name="ks115" size="131072" crc="2ec5f4c2" sha1="64564bab6cac5e5dbc9dc40457e5d8391dcda07e" status="baddump" />
+ </dataarea>
+ <!-- 8k VRAM on cartridge -->
+ <dataarea name="vram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
<software name="metroidk">
<description>Metroid - Jin Ji Zhi Ling (Asia, FDS conversion)</description>
<year>19??</year>
diff --git a/src/devices/bus/nes/kaiser.cpp b/src/devices/bus/nes/kaiser.cpp
index 9372d88c426..7f5e472efe6 100644
--- a/src/devices/bus/nes/kaiser.cpp
+++ b/src/devices/bus/nes/kaiser.cpp
@@ -13,7 +13,9 @@
* Kaiser KS7012
* Kaiser KS7013B
* Kaiser KS7016
+ * Kaiser KS7016B
* Kaiser KS7017
+ * Kaiser KS7021A
* Kaiser KS7022
* Kaiser KS7030
* Kaiser KS7031
@@ -42,19 +44,21 @@
// constructor
//-------------------------------------------------
-DEFINE_DEVICE_TYPE(NES_KS7058, nes_ks7058_device, "nes_ks7058", "NES Cart Kaiser KS-7058 PCB")
-DEFINE_DEVICE_TYPE(NES_KS7022, nes_ks7022_device, "nes_ks7022", "NES Cart Kaiser KS-7022 PCB")
-DEFINE_DEVICE_TYPE(NES_KS7032, nes_ks7032_device, "nes_ks7032", "NES Cart Kaiser KS-7032 PCB")
DEFINE_DEVICE_TYPE(NES_KS202, nes_ks202_device, "nes_ks202", "NES Cart Kaiser KS-202 PCB")
-DEFINE_DEVICE_TYPE(NES_KS7017, nes_ks7017_device, "nes_ks7017", "NES Cart Kaiser KS-7017 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")
DEFINE_DEVICE_TYPE(NES_KS7013B, nes_ks7013b_device, "nes_ks7013b", "NES Cart Kaiser KS-7013B PCB")
+DEFINE_DEVICE_TYPE(NES_KS7016, nes_ks7016_device, "nes_ks7016", "NES Cart Kaiser KS-7016 PCB")
+DEFINE_DEVICE_TYPE(NES_KS7016B, nes_ks7016b_device, "nes_ks7016b", "NES Cart Kaiser KS-7016B PCB")
+DEFINE_DEVICE_TYPE(NES_KS7017, nes_ks7017_device, "nes_ks7017", "NES Cart Kaiser KS-7017 PCB")
+DEFINE_DEVICE_TYPE(NES_KS7021A, nes_ks7021a_device, "nes_ks7021a", "NES Cart Kaiser KS-7021A PCB")
+DEFINE_DEVICE_TYPE(NES_KS7022, nes_ks7022_device, "nes_ks7022", "NES Cart Kaiser KS-7022 PCB")
DEFINE_DEVICE_TYPE(NES_KS7030, nes_ks7030_device, "nes_ks7030", "NES Cart Kaiser KS-7030 PCB")
DEFINE_DEVICE_TYPE(NES_KS7031, nes_ks7031_device, "nes_ks7031", "NES Cart Kaiser KS-7031 PCB")
-DEFINE_DEVICE_TYPE(NES_KS7016, nes_ks7016_device, "nes_ks7016", "NES Cart Kaiser KS-7016 PCB")
+DEFINE_DEVICE_TYPE(NES_KS7032, nes_ks7032_device, "nes_ks7032", "NES Cart Kaiser KS-7032 PCB")
DEFINE_DEVICE_TYPE(NES_KS7037, nes_ks7037_device, "nes_ks7037", "NES Cart Kaiser KS-7037 PCB")
DEFINE_DEVICE_TYPE(NES_KS7057, nes_ks7057_device, "nes_ks7057", "NES Cart Kaiser KS-7057 PCB")
+DEFINE_DEVICE_TYPE(NES_KS7058, nes_ks7058_device, "nes_ks7058", "NES Cart Kaiser KS-7058 PCB")
nes_ks7058_device::nes_ks7058_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
@@ -82,11 +86,31 @@ nes_ks202_device::nes_ks202_device(const machine_config &mconfig, const char *ta
{
}
+nes_ks7016_device::nes_ks7016_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 mask)
+ : nes_nrom_device(mconfig, type, tag, owner, clock), m_latch(0), m_mask(mask)
+{
+}
+
+nes_ks7016_device::nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_ks7016_device(mconfig, NES_KS7016, tag, owner, clock, 0x00)
+{
+}
+
+nes_ks7016b_device::nes_ks7016b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_ks7016_device(mconfig, NES_KS7016B, tag, owner, clock, 0x04)
+{
+}
+
nes_ks7017_device::nes_ks7017_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_KS7017, tag, owner, clock), m_latch(0), m_irq_count(0), m_irq_status(0), m_irq_enable(0), irq_timer(nullptr)
{
}
+nes_ks7021a_device::nes_ks7021a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_nrom_device(mconfig, NES_KS7021A, tag, owner, clock)
+{
+}
+
nes_ks7010_device::nes_ks7010_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_KS7010, tag, owner, clock), m_latch(0)
{
@@ -112,11 +136,6 @@ nes_ks7031_device::nes_ks7031_device(const machine_config &mconfig, const char *
{
}
-nes_ks7016_device::nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : nes_nrom_device(mconfig, NES_KS7016, tag, owner, clock)
-{
-}
-
nes_ks7037_device::nes_ks7037_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_KS7037, tag, owner, clock)
{
@@ -184,6 +203,24 @@ void nes_ks7032_device::pcb_reset()
prg_update();
}
+void nes_ks7016_device::device_start()
+{
+ common_start();
+ save_item(NAME(m_latch));
+}
+
+void nes_ks7016_device::pcb_reset()
+{
+ prg8_89(0x0c ^ m_mask);
+ prg8_ab(0x0d ^ m_mask);
+ prg8_cd(0x0e ^ m_mask);
+ prg8_ef(0x0f ^ m_mask);
+ chr8(0, CHRRAM);
+ set_nt_mirroring(PPU_MIRROR_VERT);
+
+ m_latch = 0;
+}
+
void nes_ks7017_device::device_start()
{
common_start();
@@ -209,6 +246,18 @@ void nes_ks7017_device::pcb_reset()
m_irq_status = 0;
}
+void nes_ks7021a_device::device_start()
+{
+ common_start();
+}
+
+void nes_ks7021a_device::pcb_reset()
+{
+ prg16_89ab(0);
+ prg16_cdef(m_prg_chunks - 1);
+ chr8(0, CHRROM);
+}
+
void nes_ks7010_device::device_start()
{
common_start();
@@ -282,23 +331,6 @@ void nes_ks7031_device::pcb_reset()
m_reg[3] = 0;
}
-void nes_ks7016_device::device_start()
-{
- common_start();
- save_item(NAME(m_reg));
-}
-
-void nes_ks7016_device::pcb_reset()
-{
- prg8_89(0xc);
- prg8_ab(0xd);
- prg8_cd(0xe);
- prg8_ef(0xf);
- chr8(0, CHRRAM);
-
- m_reg = 4;
-}
-
void nes_ks7037_device::device_start()
{
common_start();
@@ -530,6 +562,44 @@ uint8_t nes_ks202_device::read_m(offs_t offset)
/*-------------------------------------------------
+ Kaiser Boards KS7016, KS7016B
+
+ Games: Exciting Basket, Meikyuu Jiin Dababa FDS Conversions
+
+ These two variants have fixed upper 32K PRG and switchable
+ 8K PRG at 0x6000-0x7fff. The only difference appears to be
+ a flipped bit in the bank numbers. KS7016 puts banks 0x0c
+ through 0x0f in the upper PRG; KS7016B uses 0x08 to 0x0b.
+ For the switchable 8K PRG the latched bank # patterns are:
+
+ KS7016: 0 1 2 3 4 5 6 7 8 9 A B 8 9 A B
+ KS7016B: 0 1 2 3 4 5 6 7 C D E F C D E F
+
+ (NB: only KS7016B has been verified against PCB, KS7016 is a surmise.)
+
+ NES 2.0: mapper 306, mapper 549
+
+ In MAME: Supported.
+
+ -------------------------------------------------*/
+
+u8 nes_ks7016_device::read_m(offs_t offset)
+{
+// LOG_MMC(("ks7016 read_m, offset: %04x\n", offset));
+ return m_prg[m_latch * 0x2000 + offset];
+}
+
+void nes_ks7016_device::write_h(offs_t offset, u8 data)
+{
+ LOG_MMC(("ks7016 write_h, offset: %04x, data: %02x\n", offset, data));
+
+ m_latch = (offset >> 2) & 0x0f;
+ if (m_latch & 0x08)
+ m_latch = (m_latch & 0x0b) | m_mask;
+}
+
+/*-------------------------------------------------
+
Kaiser Board KS7017
Games: Almana no Kiseki FDS conversion
@@ -606,6 +676,40 @@ uint8_t nes_ks7017_device::read_ex(offs_t offset)
/*-------------------------------------------------
+ Kaiser Board KS7021A
+
+ Games: GetsuFumaDen
+
+ This board has a 16K fixed PRG bank at 0xc000 and
+ a swappable 16K PRG bank at 0x8000. CHR banks are
+ selectable by 1K page.
+
+ NES 2.0: mapper 525
+
+ In MAME: Supported.
+
+ -------------------------------------------------*/
+
+void nes_ks7021a_device::write_h(offs_t offset, u8 data)
+{
+ LOG_MMC(("ks7021a write_h, offset: %04x, data: %02x\n", offset, data));
+
+ switch (offset & 0x7000)
+ {
+ case 0x0000:
+ prg16_89ab((data >> 1) & 0x07);
+ break;
+ case 0x1000:
+ set_nt_mirroring(BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
+ break;
+ case 0x3000:
+ chr1_x(offset & 0x07, data & 0x7f, CHRROM);
+ break;
+ }
+}
+
+/*-------------------------------------------------
+
Kaiser Board KS7010
Games: Akumajo Dracula FDS Conversion
@@ -799,34 +903,6 @@ void nes_ks7031_device::write_h(offs_t offset, uint8_t data)
/*-------------------------------------------------
- Kaiser Board KS7016
-
- Games: Exciting Basket FDS Conversion
-
- NES 2.0: mapper 306
-
- In MAME: Unsupported.
-
- -------------------------------------------------*/
-
-uint8_t nes_ks7016_device::read_m(offs_t offset)
-{
-// LOG_MMC(("ks7016 read_m, offset: %04x\n", offset));
- return m_prg[((m_reg * 0x2000) + (offset & 0x1fff)) & (m_prg_size - 1)];
-}
-
-void nes_ks7016_device::write_h(offs_t offset, uint8_t data)
-{
- LOG_MMC(("ks7016 write_h, offset: %04x, data: %02x\n", offset, data));
- uint8_t mask = offset & 0x30;
- if ((offset & 0x5943) == 0x5943)
- m_reg = (mask == 0x30) ? 0xb : (((offset >> 2) & 0x0f) << 1);
- if ((offset & 0x5943) == 0x5903)
- m_reg = (mask != 0x30) ? 0xb : (((offset >> 2) & 0x0f) << 1);
-}
-
-/*-------------------------------------------------
-
Kaiser Board KS7037
Games: Metroid (FDS conversion)
diff --git a/src/devices/bus/nes/kaiser.h b/src/devices/bus/nes/kaiser.h
index 0b71e59cb51..5dfe730ae91 100644
--- a/src/devices/bus/nes/kaiser.h
+++ b/src/devices/bus/nes/kaiser.h
@@ -96,6 +96,40 @@ public:
};
+// ======================> nes_ks7016_device
+
+class nes_ks7016_device : public nes_nrom_device
+{
+public:
+ // construction/destruction
+ nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ virtual u8 read_m(offs_t offset) override;
+ virtual void write_h(offs_t offset, u8 data) override;
+
+ virtual void pcb_reset() override;
+
+protected:
+ nes_ks7016_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 mask);
+
+ // device-level overrides
+ virtual void device_start() override;
+
+private:
+ u8 m_latch, m_mask;
+};
+
+
+// ======================> nes_ks7016b_device
+
+class nes_ks7016b_device : public nes_ks7016_device
+{
+public:
+ // construction/destruction
+ nes_ks7016b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+
// ======================> nes_ks7017_device
class nes_ks7017_device : public nes_nrom_device
@@ -127,6 +161,24 @@ private:
};
+// ======================> nes_ks7021a_device
+
+class nes_ks7021a_device : public nes_nrom_device
+{
+public:
+ // construction/destruction
+ nes_ks7021a_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;
+};
+
+
// ======================> nes_ks7010_device
class nes_ks7010_device : public nes_nrom_device
@@ -233,28 +285,6 @@ private:
};
-// ======================> nes_ks7016_device
-
-class nes_ks7016_device : public nes_nrom_device
-{
-public:
- // construction/destruction
- nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- virtual uint8_t read_m(offs_t offset) override;
- virtual void write_h(offs_t offset, uint8_t data) override;
-
- virtual void pcb_reset() override;
-
-protected:
- // device-level overrides
- virtual void device_start() override;
-
-private:
- uint8_t m_reg;
-};
-
-
// ======================> nes_ks7037_device
class nes_ks7037_device : public nes_nrom_device
@@ -308,9 +338,11 @@ private:
DECLARE_DEVICE_TYPE(NES_KS202, nes_ks202_device)
DECLARE_DEVICE_TYPE(NES_KS7010, nes_ks7010_device)
DECLARE_DEVICE_TYPE(NES_KS7012, nes_ks7012_device)
+DECLARE_DEVICE_TYPE(NES_KS7013B, nes_ks7013b_device)
DECLARE_DEVICE_TYPE(NES_KS7016, nes_ks7016_device)
+DECLARE_DEVICE_TYPE(NES_KS7016B, nes_ks7016b_device)
DECLARE_DEVICE_TYPE(NES_KS7017, nes_ks7017_device)
-DECLARE_DEVICE_TYPE(NES_KS7013B, nes_ks7013b_device)
+DECLARE_DEVICE_TYPE(NES_KS7021A, nes_ks7021a_device)
DECLARE_DEVICE_TYPE(NES_KS7022, nes_ks7022_device)
DECLARE_DEVICE_TYPE(NES_KS7030, nes_ks7030_device)
DECLARE_DEVICE_TYPE(NES_KS7031, nes_ks7031_device)
diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp
index b8cae170c52..681f733ddb9 100644
--- a/src/devices/bus/nes/nes_carts.cpp
+++ b/src/devices/bus/nes/nes_carts.cpp
@@ -253,8 +253,10 @@ void nes_cart(device_slot_interface &device)
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)
device.option_add_internal("ks7013b", NES_KS7013B); // used in Highway Star (FDS Conversion)
- device.option_add_internal("ks7016", NES_KS7016); // used in Exciting Basket (FDS Conversion)
+ device.option_add_internal("ks7016", NES_KS7016); // used in Exciting Basket (FDS Conversion)
+ device.option_add_internal("ks7016b", NES_KS7016B); // used in Meikyu Jiin Dababa alt (FDS Conversion)
device.option_add_internal("ks7017", NES_KS7017);
+ device.option_add_internal("ks7021a", NES_KS7021A); // GetsuFumaDen pirate cart
device.option_add_internal("ks7022", NES_KS7022); // mapper 175
device.option_add_internal("ks7030", NES_KS7030); // used in Doki Doki Panic alt (FDS Conversion)
device.option_add_internal("ks7031", NES_KS7031); // used in Dracula II (FDS Conversion)
diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx
index cb0acf43c2b..c3963a074bc 100644
--- a/src/devices/bus/nes/nes_pcb.hxx
+++ b/src/devices/bus/nes/nes_pcb.hxx
@@ -166,7 +166,9 @@ static const nes_pcb pcb_list[] =
{ "ks7012", KAISER_KS7012 }, // used in Zanac (FDS Conversion)
{ "ks7013b", KAISER_KS7013B }, // used in Highway Star (FDS Conversion)
{ "ks7016", KAISER_KS7016 }, // used in Exciting Basketball (FDS Conversion)
+ { "ks7016b", KAISER_KS7016B }, // used in Meikyuu Jiin Dababa alt (FDS Conversion)
{ "ks7017", KAISER_KS7017 },
+ { "ks7021a", KAISER_KS7021A }, // GetsuFumaDen pirate cart
{ "ks7022", KAISER_KS7022 }, // mapper 175
{ "ks7030", KAISER_KS7030 }, // used in Doki Doki Panic alt (FDS Conversion)
{ "ks7031", KAISER_KS7031 }, // used in Dracula II (FDS Conversion)
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index 8d74b8353f9..e760833d7a6 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -112,11 +112,11 @@ enum
BTL_SMB2JA, BTL_MARIOBABY, BTL_AISENSHINICOL, BTL_TOBIDASE,
BTL_SMB2JB, BTL_09034A, BTL_SMB3, BTL_SBROS11, BTL_DRAGONNINJA,
BTL_PIKACHUY2K, BTL_SHUIGUAN, BTL_0353, BTL_PALTHENA,
- /* Kaiser */
- KAISER_KS202, KAISER_KS7010, KAISER_KS7012, KAISER_KS7013B,
- KAISER_KS7016, KAISER_KS7017, KAISER_KS7022, KAISER_KS7030,
- KAISER_KS7031, KAISER_KS7032, KAISER_KS7037, KAISER_KS7057,
- KAISER_KS7058,
+ // 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,
// Whirlwind Manu
UNL_DH08, UNL_LE05, UNL_LH10, UNL_LH28_LH54, UNL_LH31, UNL_LH32, UNL_LH53,
/* Misc: these are needed to convert mappers to boards, I will sort them later */