From 2c873efb4db52426e709610f530bd375ee450bb1 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 7 May 2020 17:24:41 -0400 Subject: [PATCH] New machines marked as NOT_WORKING ---------------------------------- ERGO 201 Kurzweil [Bitsavers] --- scripts/target/mame/mess.lua | 1 + src/emu/xtal.cpp | 1 + src/mame/drivers/ergo201.cpp | 152 +++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 5 files changed, 158 insertions(+) create mode 100644 src/mame/drivers/ergo201.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index c1a680a32cb..b9e10d8c1ab 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4281,6 +4281,7 @@ files { MAME_DIR .. "src/mame/drivers/elwro800.cpp", MAME_DIR .. "src/mame/drivers/emate.cpp", MAME_DIR .. "src/mame/drivers/epic14e.cpp", + MAME_DIR .. "src/mame/drivers/ergo201.cpp", MAME_DIR .. "src/mame/drivers/esprit.cpp", MAME_DIR .. "src/mame/drivers/eti660.cpp", MAME_DIR .. "src/mame/includes/eti660.h", diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index c4b8a8c13dc..8796f2cefee 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -243,6 +243,7 @@ const double XTAL::known_xtals[] = { 16'128'000, /* 16.128_MHz_XTAL Fujitsu FM-7 */ 16'200'000, /* 16.2_MHz_XTAL Debut */ 16'257'000, /* 16.257_MHz_XTAL IBM PC MDA & EGA */ + 16'313'000, /* 16.313_MHz_XTAL Micro-Term ERGO 201 */ 16'364'000, /* 16.364_MHz_XTAL Corvus Concept */ 16'384'000, /* 16.384_MHz_XTAL - */ 16'400'000, /* 16.4_MHz_XTAL MS 6102 */ diff --git a/src/mame/drivers/ergo201.cpp b/src/mame/drivers/ergo201.cpp new file mode 100644 index 00000000000..8130028471b --- /dev/null +++ b/src/mame/drivers/ergo201.cpp @@ -0,0 +1,152 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Skeleton driver for Micro-Term ERGO 201 terminal. + + The ERGO 201 belongs to one half of a paired series of terminals. Half + of these terminals emulate the VT100 and support a 132 column mode; the + other half emulate the VT52, ADM3A and ACT-5A instead but do appear to + have been influenced by the VT100 in overall design. + + The first members of this series, the MIME 340 (non-VT100 emulation) + and MIME 740 (VT100 emulation), were single units with non-detachable + keyboards like Micro-Term's older ACT and MIME terminals. They were + respectively succeeded by the ERGO 2000 and ERGO 3001 with tiltable + screens and similar but detached keyboards. The ERGO 201 and ERGO 301 + appear to be newer versions of these two with keyboards redesigned yet + again to more closely resemble the VT100. There was also the ERGO 4000, + a portrait-mode terminal displaying 66 lines of 80 characters. + +****************************************************************************/ + +#include "emu.h" +//#include "bus/rs232/rs232.h" +#include "cpu/z80/z80.h" +#include "machine/ay31015.h" +#include "machine/er1400.h" +#include "machine/z80ctc.h" +#include "machine/z80sio.h" +#include "video/tms9927.h" +#include "screen.h" + +class ergo201_state : public driver_device +{ +public: + ergo201_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_earom(*this, "earom") + , m_vtac(*this, "vtac") + , m_chargen(*this, "chargen") + { + } + + void ergo201(machine_config &config); + +private: + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void earom_latch_w(u8 data); + u8 status_r(); + + void mem_map(address_map &map); + void io_map(address_map &map); + + required_device m_maincpu; + required_device m_earom; + required_device m_vtac; + required_region_ptr m_chargen; +}; + + +u32 ergo201_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void ergo201_state::earom_latch_w(u8 data) +{ + m_earom->c1_w(BIT(data, 0)); + m_earom->data_w(BIT(data, 1)); + m_earom->c3_w(BIT(data, 2)); + m_earom->c2_w(BIT(data, 3)); + m_earom->clock_w(BIT(data, 4)); +} + +u8 ergo201_state::status_r() +{ + return m_earom->data_r() << 5; +} + +void ergo201_state::mem_map(address_map &map) +{ + map(0x0000, 0x5fff).rom().region("program", 0); + map(0x3000, 0x300f).w(m_vtac, FUNC(tms9927_device::write)); + map(0x4000, 0x4000).w(FUNC(ergo201_state::earom_latch_w)); + map(0x6001, 0x6001).r(FUNC(ergo201_state::status_r)); + map(0x7000, 0x77ff).ram(); + map(0x8000, 0x87ff).ram(); + map(0xc000, 0xc7ff).ram(); +} + +void ergo201_state::io_map(address_map &map) +{ + map.global_mask(0xff); + map(0xf4, 0xf7).rw("dart", FUNC(z80dart_device::cd_ba_r), FUNC(z80dart_device::cd_ba_w)); + map(0xf8, 0xfb).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); +} + + +static INPUT_PORTS_START(ergo201) +INPUT_PORTS_END + +static const z80_daisy_config daisy_chain[] = +{ + { "ctc" }, + { "dart" }, + { nullptr } +}; + +void ergo201_state::ergo201(machine_config &config) +{ + Z80(config, m_maincpu, 16.313_MHz_XTAL / 4); // SGS Z8400AB1 (divider guessed) + m_maincpu->set_addrmap(AS_PROGRAM, &ergo201_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &ergo201_state::io_map); + m_maincpu->set_daisy_config(daisy_chain); + + z80ctc_device &ctc(Z80CTC(config, "ctc", 16.313_MHz_XTAL / 4)); // SGS Z8430AB1 + ctc.zc_callback<0>().set("dart", FUNC(z80dart_device::rxca_w)); + ctc.zc_callback<1>().set("dart", FUNC(z80dart_device::txca_w)); + ctc.zc_callback<2>().set("dart", FUNC(z80dart_device::rxtxcb_w)); + ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + z80dart_device &dart(Z80DART(config, "dart", 16.313_MHz_XTAL / 4)); // Zilog Z8470A PS + dart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + AY31015(config, "uart"); // GI AY-3-1015D + + ER1400(config, m_earom); // GI ER-1400 + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(16.313_MHz_XTAL, 855, 0, 720, 318, 0, 300); + screen.set_screen_update(FUNC(ergo201_state::screen_update)); + + CRT5037(config, m_vtac, 16.313_MHz_XTAL / 9); // TI TMS9937NL + m_vtac->set_char_width(9); + m_vtac->set_screen("screen"); +} + + +ROM_START(ergo201) + ROM_REGION(0x6000, "program", 0) + ROM_LOAD("201.u18", 0x0000, 0x2000, CRC(fec9fa3c) SHA1(3c1f9de9f62e74fbd1c9b67736d0959c0f6b46b1)) // M5L2764K + ROM_LOAD("r1.0_special_5786.u73", 0x2000, 0x2000, CRC(5a31b6bc) SHA1(6929fa8f6d481790cd43732a9a97a9110ad9fb6c)) // MBM2764-25 + ROM_LOAD("201.u17", 0x4000, 0x2000, CRC(e7197403) SHA1(96fff6fb30eeac616d71da731b0ea79c8cd35096)) // M5L2764K + + ROM_REGION(0x1000, "chargen", 0) + ROM_LOAD("201.u53", 0x0000, 0x1000, CRC(907dac04) SHA1(5bae6680f1ef3f5335a223bdf403e8f3ef272430)) // MBM2732A-35 +ROM_END + +COMP(1983, ergo201, 0, 0, ergo201, ergo201, ergo201_state, empty_init, "Micro-Term", "ERGO 201 Kurzweil", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 2cfb64e5afc..cb656fd318c 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -13082,6 +13082,9 @@ splndrbtb // (c) 1985 Alpha Denshi Co. @source:eispc.cpp epc // 1984 Ericsson PC +@source:ergo201.cpp +ergo201 // + @source:ertictac.cpp ertictac // (c) 1992 Sisteme ertictaca // (c) 1992 Sisteme diff --git a/src/mame/mess.flt b/src/mame/mess.flt index b6aac146190..152498c92f2 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -256,6 +256,7 @@ emu3.cpp enmirage.cpp ep64.cpp epic14e.cpp +ergo201.cpp esprit.cpp esq1.cpp esq5505.cpp