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,