summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mt5510.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mt5510.cpp')
-rw-r--r--src/mame/drivers/mt5510.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/mame/drivers/mt5510.cpp b/src/mame/drivers/mt5510.cpp
new file mode 100644
index 00000000000..4fb66d5ac8a
--- /dev/null
+++ b/src/mame/drivers/mt5510.cpp
@@ -0,0 +1,98 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***********************************************************************************************************************************
+
+Skeleton driver for Micro-Term Model 5510 terminal.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "machine/eepromser.h"
+#include "machine/mc68681.h"
+#include "screen.h"
+
+namespace {
+
+class mt5510_state : public driver_device
+{
+public:
+ mt5510_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ {
+ }
+
+ void mt5510(machine_config &config);
+
+private:
+ u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+};
+
+u32 mt5510_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+void mt5510_state::mem_map(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region("maincpu", 0).nopw();
+ map(0x8000, 0xbfff).ram();
+ map(0xc000, 0xffff).ram();
+}
+
+void mt5510_state::io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x60, 0x6f).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
+}
+
+static INPUT_PORTS_START(mt5510)
+INPUT_PORTS_END
+
+void mt5510_state::mt5510(machine_config &config)
+{
+ Z80(config, m_maincpu, 6_MHz_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mt5510_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &mt5510_state::io_map);
+
+ scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL));
+ duart.irq_cb().set_inputline(m_maincpu, 0);
+ duart.outport_cb().set("eeprom1", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6);
+ duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
+ duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
+ duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
+ duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
+ duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
+
+ EEPROM_93C46_16BIT(config, "eeprom1").do_callback().set("duart", FUNC(scn2681_device::ip6_w));
+
+ EEPROM_93C46_16BIT(config, "eeprom2").do_callback().set("duart", FUNC(scn2681_device::ip5_w));
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(45.8304_MHz_XTAL / 2, 1120, 0, 960, 341, 0, 300); // wild guess at resolution
+ screen.set_screen_update(FUNC(mt5510_state::screen_update));
+}
+
+
+/**************************************************************************************************************
+
+Micro-Term 5510.
+Chips: Z80, SCN2681, S8842C4/SCX6244UNT, 4x CXK5864BP-70L, 2x NMC9346N
+Crystals: 6.000, 3.68640, 45.8304
+
+***************************************************************************************************************/
+
+ROM_START( mt5510 )
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD( "2500_m.p._r1.9.u11", 0x00000, 0x10000, CRC(71f19a53) SHA1(91df26d46a93359cd033d7137f1676bcfa58223b) )
+ROM_END
+
+} // anonymous namespace
+
+COMP(1988, mt5510, 0, 0, mt5510, mt5510, mt5510_state, empty_init, "Micro-Term", "Micro-Term 5510", MACHINE_IS_SKELETON)