From 7ecad6c47511d76eb812a0ce5c6f41b8cac5c0b4 Mon Sep 17 00:00:00 2001
From: 0kmg <9137159+0kmg@users.noreply.github.com>
Date: Sat, 24 Jul 2021 07:22:26 -0800
Subject: [PATCH] bus/nes: Added support for a Moero TwinBee FDS conversion.
(#8334)
New working software list additions (nes.xml)
-----------------------------------
Moero TwinBee - Cinnamon Hakase o Sukue! (FDS conversion) [famiac]
---
hash/nes.xml | 20 +++++++++++
src/devices/bus/nes/bootleg.cpp | 57 +++++++++++++++++++++++++++++++
src/devices/bus/nes/bootleg.h | 22 ++++++++++++
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 | 2 +-
7 files changed, 103 insertions(+), 2 deletions(-)
diff --git a/hash/nes.xml b/hash/nes.xml
index b05272b7c8e..7ef9fbbaa48 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -66922,6 +66922,26 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
+
+ Moero TwinBee - Cinnamon Hakase o Sukue! (FDS conversion)
+ 19??
+ Whirlwind Manu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Monty no Doki Doki Daidassou (Asia, FDS conversion)
19??
diff --git a/src/devices/bus/nes/bootleg.cpp b/src/devices/bus/nes/bootleg.cpp
index f6120e09ac6..29c41d9f6b9 100644
--- a/src/devices/bus/nes/bootleg.cpp
+++ b/src/devices/bus/nes/bootleg.cpp
@@ -53,6 +53,7 @@ DEFINE_DEVICE_TYPE(NES_PALTHENA, nes_palthena_device, "nes_palthena", "N
DEFINE_DEVICE_TYPE(NES_TOBIDASE, nes_tobidase_device, "nes_tobidase", "NES Cart Tobidase Daisakusen Pirate PCB")
DEFINE_DEVICE_TYPE(NES_DH08, nes_dh08_device, "nes_dh08", "NES Cart DH-08 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LE05, nes_le05_device, "nes_le05", "NES Cart LE05 Pirate PCB")
+DEFINE_DEVICE_TYPE(NES_LG25, nes_lg25_device, "nes_lg25", "NES Cart LG25 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH10, nes_lh10_device, "nes_lh10", "NES Cart LH10 Pirate PCB")
DEFINE_DEVICE_TYPE(NES_LH28_LH54, nes_lh28_lh54_device, "nes_lh28_lh54", "NES Cart LH28/LH54 Pirate PCBs")
DEFINE_DEVICE_TYPE(NES_LH31, nes_lh31_device, "nes_lh31", "NES Cart LH31 Pirate PCB")
@@ -166,6 +167,11 @@ nes_lh32_device::nes_lh32_device(const machine_config &mconfig, const char *tag,
{
}
+nes_lg25_device::nes_lg25_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : nes_nrom_device(mconfig, NES_LG25, tag, owner, clock), m_latch(0)
+{
+}
+
nes_lh10_device::nes_lh10_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_LH10, tag, owner, clock), m_latch(0)
{
@@ -500,6 +506,21 @@ void nes_lh32_device::pcb_reset()
m_latch = 0xf;
}
+void nes_lg25_device::device_start()
+{
+ common_start();
+ save_item(NAME(m_latch));
+}
+
+void nes_lg25_device::pcb_reset()
+{
+ prg16_89ab(0);
+ prg16_cdef(m_prg_chunks - 1); // Last 16K is fixed
+ chr8(0, CHRRAM);
+
+ m_latch = 0;
+}
+
void nes_lh10_device::device_start()
{
common_start();
@@ -1524,6 +1545,42 @@ void nes_lh32_device::write_h(offs_t offset, uint8_t data)
m_prgram[offset & 0x1fff] = data;
}
+/*-------------------------------------------------
+
+ UNL-LG25
+
+ Games: Moero TwinBee Cinnamon Hakase o Sukue! (FDS conversion)
+
+ In addition to the two swappable 8K PRG banks at
+ 0x8000 and 0xa000, this board has 8K WRAM at 0x6000.
+
+ NES 2.0: mapper 557
+
+ In MAME: Supported.
+
+ -------------------------------------------------*/
+
+void nes_lg25_device::write_h(offs_t offset, u8 data)
+{
+ LOG_MMC(("lg25 write_h, offset: %04x, data: %02x\n", offset, data));
+
+ if (BIT(offset, 0))
+ {
+ switch (m_latch)
+ {
+ case 1:
+ set_nt_mirroring(BIT(data, 2) ? PPU_MIRROR_VERT : PPU_MIRROR_HORZ);
+ break;
+ case 2:
+ case 3:
+ prg8_x(m_latch & 1, data & 0x0f);
+ break;
+ }
+ }
+ else
+ m_latch = data & 0x03;
+}
+
/*-------------------------------------------------
UNL-LH10
diff --git a/src/devices/bus/nes/bootleg.h b/src/devices/bus/nes/bootleg.h
index cbcc168ce9c..2c2bb296204 100644
--- a/src/devices/bus/nes/bootleg.h
+++ b/src/devices/bus/nes/bootleg.h
@@ -438,6 +438,27 @@ private:
};
+// ======================> nes_lg25_device
+
+class nes_lg25_device : public nes_nrom_device
+{
+public:
+ // construction/destruction
+ nes_lg25_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_lh10_device
class nes_lh10_device : public nes_nrom_device
@@ -642,6 +663,7 @@ DECLARE_DEVICE_TYPE(NES_PALTHENA, nes_palthena_device)
DECLARE_DEVICE_TYPE(NES_TOBIDASE, nes_tobidase_device)
DECLARE_DEVICE_TYPE(NES_DH08, nes_dh08_device)
DECLARE_DEVICE_TYPE(NES_LE05, nes_le05_device)
+DECLARE_DEVICE_TYPE(NES_LG25, nes_lg25_device)
DECLARE_DEVICE_TYPE(NES_LH10, nes_lh10_device)
DECLARE_DEVICE_TYPE(NES_LH28_LH54, nes_lh28_lh54_device)
DECLARE_DEVICE_TYPE(NES_LH31, nes_lh31_device)
diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp
index 68e334d16bc..6ab30d2f591 100644
--- a/src/devices/bus/nes/nes_carts.cpp
+++ b/src/devices/bus/nes/nes_carts.cpp
@@ -310,6 +310,7 @@ void nes_cart(device_slot_interface &device)
device.option_add_internal("unl_2708", NES_2708); // mapper 103
device.option_add_internal("unl_dh08", NES_DH08); // used in Bubble Bobble alt (FDS Conversion);
device.option_add_internal("unl_le05", NES_LE05); // used in ProWres (FDS Conversion);
+ device.option_add_internal("unl_lg25", NES_LG25); // used in Moero TwinBee (FDS Conversion);
device.option_add_internal("unl_lh10", NES_LH10); // used in Fuuun Shaolin Kyo (FDS Conversion);
device.option_add_internal("unl_lh28_lh54", NES_LH28_LH54); // used in Falsion, Meikyuu Jiin Dababa FDS conversions
device.option_add_internal("unl_lh31", NES_LH31); // used in Bubble Bobble alt FDS conversion
diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx
index 9eb8e6e441d..1846ce09bfa 100644
--- a/src/devices/bus/nes/nes_ines.hxx
+++ b/src/devices/bus/nes/nes_ines.hxx
@@ -516,7 +516,7 @@ static const nes_mmc mmc_list[] =
{ 554, KAISER_KS7010 }, // Akumajo Dracula FDS conversion
// 555 retroUSB re-release of 1991 Nintendo Campus Challenge
// 556 JY-215 multicart
- // { 557, KAISER_KS7xxx or UNL_LG25? }, // Kaiser Moero TwinBee FDS conversion
+ { 557, UNL_LG25 }, // Moero TwinBee FDS conversion
// 558 some games on YC-03-09 board (related to mappers 162-164)
// 559...4095 Unused
};
diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx
index 1f98df8f757..d40b458081b 100644
--- a/src/devices/bus/nes/nes_pcb.hxx
+++ b/src/devices/bus/nes/nes_pcb.hxx
@@ -309,6 +309,7 @@ static const nes_pcb pcb_list[] =
{ "unl_2708", UNL_2708 },
{ "unl_dh08", UNL_DH08 },
{ "unl_le05", UNL_LE05 },
+ { "unl_lg25", UNL_LG25 },
{ "unl_lh10", UNL_LH10 },
{ "unl_lh28_lh54", UNL_LH28_LH54 },
{ "unl_lh31", UNL_LH31 },
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index b8734c7ace4..9f62209bfbb 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -119,7 +119,7 @@ enum
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_DH08, UNL_LE05, UNL_LG25, UNL_LH10, UNL_LH28_LH54,
UNL_LH31, UNL_LH32, UNL_LH51, UNL_LH53,
/* Misc: these are needed to convert mappers to boards, I will sort them later */
OPENCORP_DAOU306, HES_BOARD, SVISION16_BOARD, RUMBLESTATION_BOARD, JYCOMPANY_A, JYCOMPANY_B, JYCOMPANY_C,