From 6d60f631a5cb497888f96399fb9f58663462309e Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 17 Jan 2025 14:53:51 -0500 Subject: leadsng2: Decrypt ROM and tentatively identify CPU architecture --- src/mame/skeleton/leadsinger2.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/mame/skeleton/leadsinger2.cpp b/src/mame/skeleton/leadsinger2.cpp index a3574148cfc..9fb032b84f9 100644 --- a/src/mame/skeleton/leadsinger2.cpp +++ b/src/mame/skeleton/leadsinger2.cpp @@ -42,6 +42,8 @@ Card Slot #include "emu.h" +#include "cpu/mips/mips3.h" + #include "screen.h" #include "speaker.h" @@ -52,16 +54,22 @@ class leadsng2_state : public driver_device public: leadsng2_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") , m_screen(*this, "screen") { } void leadsng2(machine_config &config) ATTR_COLD; + void init_leadsng2(); + protected: virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; private: + void mem_map(address_map &map); + + required_device m_maincpu; required_device m_screen; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -81,12 +89,19 @@ void leadsng2_state::machine_reset() { } +void leadsng2_state::mem_map(address_map &map) +{ + map(0x18000000, 0x180fffff).mirror(0x07c00000).rom().region("maincpu", 0); +} + static INPUT_PORTS_START( leadsng2 ) INPUT_PORTS_END void leadsng2_state::leadsng2(machine_config &config) { - // unknown CPU core + // unknown CPU core (MIPS-based, little endian?) + R4400LE(config, m_maincpu, 27_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &leadsng2_state::mem_map); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); @@ -103,6 +118,13 @@ ROM_START( leadsng2 ) ROM_LOAD( "ls-k2_es29lv800eb_004a225b.bin", 0x000000, 0x100000, CRC(e70f1e1f) SHA1(5aa3187adffcba5bd4a9e3e89a1c210d7f1a978e) ) ROM_END +void leadsng2_state::init_leadsng2() +{ + memory_region *rgn = memregion("maincpu"); + for (offs_t offset = 0; offset < rgn->bytes(); offset++) + rgn->as_u8(offset) ^= (offset & 0x54) ^ 0xa5; +} + } // anonymous namespace -CONS( 200?, leadsng2, 0, 0, leadsng2, leadsng2, leadsng2_state, empty_init, "Enter Tech", "Leadsinger II (LS-K2)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +CONS( 200?, leadsng2, 0, 0, leadsng2, leadsng2, leadsng2_state, init_leadsng2, "Enter Tech", "Leadsinger II (LS-K2)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) -- cgit v1.2.3