summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/mame/drivers/lms46.cpp112
-rw-r--r--src/mame/mame.lst3
-rw-r--r--src/mame/mess.flt1
4 files changed, 117 insertions, 0 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 276dae6b3b8..fa3b1e175ed 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -4056,6 +4056,7 @@ files {
MAME_DIR .. "src/mame/drivers/learnwin.cpp",
MAME_DIR .. "src/mame/drivers/lft.cpp",
MAME_DIR .. "src/mame/drivers/lg-dvd.cpp",
+ MAME_DIR .. "src/mame/drivers/lms46.cpp",
MAME_DIR .. "src/mame/drivers/lola8a.cpp",
MAME_DIR .. "src/mame/drivers/lilith.cpp",
MAME_DIR .. "src/mame/drivers/m3.cpp",
diff --git a/src/mame/drivers/lms46.cpp b/src/mame/drivers/lms46.cpp
new file mode 100644
index 00000000000..718f5d2e28d
--- /dev/null
+++ b/src/mame/drivers/lms46.cpp
@@ -0,0 +1,112 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/******************************************************************************
+
+ Skeleton driver for Litek LMS46 SBC.
+
+ No additional information is known about this system.
+
+******************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "machine/msm5832.h"
+
+class lms46_state : public driver_device
+{
+public:
+ lms46_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_rtc(*this, "rtc")
+ {
+ }
+
+ void lms46(machine_config &mconfig);
+
+private:
+ u8 rtc_r(offs_t offset);
+ void rtc_w(offs_t offset, u8 data);
+ u8 busy_r();
+ void misc_control_w(u8 data);
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+ required_device<msm5832_device> m_rtc;
+};
+
+
+u8 lms46_state::rtc_r(offs_t offset)
+{
+ m_rtc->cs_w(1);
+ m_rtc->read_w(1);
+ m_rtc->address_w(offset);
+ u8 data = m_rtc->data_r();
+ m_rtc->read_w(0);
+ m_rtc->cs_w(0);
+ return data;
+}
+
+void lms46_state::rtc_w(offs_t offset, u8 data)
+{
+ m_rtc->cs_w(1);
+ m_rtc->address_w(offset);
+ m_rtc->data_w(data & 0x0f);
+ m_rtc->write_w(1);
+ m_rtc->write_w(0);
+ m_rtc->cs_w(0);
+}
+
+u8 lms46_state::busy_r()
+{
+ // Code loops endlessly until bit 0 clears
+ return 0;
+}
+
+void lms46_state::misc_control_w(u8 data)
+{
+ m_rtc->hold_w(BIT(data, 5));
+}
+
+void lms46_state::mem_map(address_map &map)
+{
+ map(0x0000, 0x3fff).rom().region("bios", 0).nopw();
+ map(0x8000, 0x87ff).ram(); // possibly NVRAM
+ map(0x8800, 0x8fff).ram();
+}
+
+void lms46_state::io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x0f).rw(FUNC(lms46_state::rtc_r), FUNC(lms46_state::rtc_w));
+ map(0x10, 0x10).r(FUNC(lms46_state::busy_r));
+ map(0x20, 0x20).w(FUNC(lms46_state::misc_control_w));
+ map(0x30, 0x30).nopr(); // Watchdog reset? (value unused)
+}
+
+
+static INPUT_PORTS_START(lms46)
+INPUT_PORTS_END
+
+void lms46_state::lms46(machine_config &config)
+{
+ Z80(config, m_maincpu, 4000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &lms46_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &lms46_state::io_map);
+
+ MSM5832(config, m_rtc, 32768);
+}
+
+
+ROM_START(lms46)
+ ROM_REGION(0x4000, "bios", 0)
+ // Original dump has been extensively hand-patched between 0000 and 00EB where bit 3 was stuck high.
+ // More single-bit errors in this area are likely, and some current guesses might be wrong.
+ // Code organization also suggests the use of two separate 8K ROMs rather than one 16K ROM.
+ ROM_LOAD("lms4002.rom", 0x0000, 0x4000, CRC(d9bc2384) SHA1(979038c53f5611bb9078d6a44e1c521093207881) BAD_DUMP)
+ROM_END
+
+
+COMP(1988, lms46, 0, 0, lms46, lms46, lms46_state, empty_init, "Litek Information Systems", "LMS46-V9", MACHINE_IS_SKELETON)
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index c630d792b2e..4473a195c84 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -18839,6 +18839,9 @@ lkageoo // A54 (c) 1984 Taito Corporation
llc1 //
llc2 //
+@source:lms46.cpp
+lms46 //
+
@source:lockon.cpp
lockon // (c) 1986 Tatsumi
lockonc // (c) 1986 Tatsumi
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index ead41c43c53..d3924e4408d 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -435,6 +435,7 @@ lg-dvd.cpp
lilith.cpp
lisa.cpp
llc.cpp
+lms46.cpp
lola8a.cpp
lviv.cpp
lwriter.cpp