ergo201: More driver work, preparing for keyboard emulation (nw)

This commit is contained in:
AJR 2020-05-12 15:47:26 -04:00
parent bfd49efaee
commit 663680d722
2 changed files with 47 additions and 11 deletions

View File

@ -1223,6 +1223,7 @@ function linkProjects_mame_mess(_target, _subtarget)
"mgu", "mgu",
"microkey", "microkey",
"microsoft", "microsoft",
"microterm",
"mips", "mips",
"mit", "mit",
"mits", "mits",
@ -2803,6 +2804,13 @@ files {
MAME_DIR .. "src/mame/includes/xbox_pci.h", MAME_DIR .. "src/mame/includes/xbox_pci.h",
} }
createMESSProjects(_target, _subtarget, "microterm")
files {
MAME_DIR .. "src/mame/drivers/ergo201.cpp",
MAME_DIR .. "src/mame/drivers/microterm.cpp",
MAME_DIR .. "src/mame/drivers/microterm_f8.cpp",
}
createMESSProjects(_target, _subtarget, "mips") createMESSProjects(_target, _subtarget, "mips")
files { files {
MAME_DIR .. "src/mame/drivers/mips.cpp", MAME_DIR .. "src/mame/drivers/mips.cpp",
@ -4281,7 +4289,6 @@ files {
MAME_DIR .. "src/mame/drivers/elwro800.cpp", MAME_DIR .. "src/mame/drivers/elwro800.cpp",
MAME_DIR .. "src/mame/drivers/emate.cpp", MAME_DIR .. "src/mame/drivers/emate.cpp",
MAME_DIR .. "src/mame/drivers/epic14e.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/esprit.cpp",
MAME_DIR .. "src/mame/drivers/eti660.cpp", MAME_DIR .. "src/mame/drivers/eti660.cpp",
MAME_DIR .. "src/mame/includes/eti660.h", MAME_DIR .. "src/mame/includes/eti660.h",
@ -4345,8 +4352,6 @@ files {
MAME_DIR .. "src/mame/drivers/micromon.cpp", MAME_DIR .. "src/mame/drivers/micromon.cpp",
MAME_DIR .. "src/mame/drivers/micronic.cpp", MAME_DIR .. "src/mame/drivers/micronic.cpp",
MAME_DIR .. "src/mame/includes/micronic.h", MAME_DIR .. "src/mame/includes/micronic.h",
MAME_DIR .. "src/mame/drivers/microterm.cpp",
MAME_DIR .. "src/mame/drivers/microterm_f8.cpp",
MAME_DIR .. "src/mame/drivers/mightyframe.cpp", MAME_DIR .. "src/mame/drivers/mightyframe.cpp",
MAME_DIR .. "src/mame/drivers/milwaukee.cpp", MAME_DIR .. "src/mame/drivers/milwaukee.cpp",
MAME_DIR .. "src/mame/drivers/mini2440.cpp", MAME_DIR .. "src/mame/drivers/mini2440.cpp",

View File

@ -14,9 +14,10 @@
keyboards like Micro-Term's older ACT and MIME terminals. They were keyboards like Micro-Term's older ACT and MIME terminals. They were
respectively succeeded by the ERGO 2000 and ERGO 3001 with tiltable respectively succeeded by the ERGO 2000 and ERGO 3001 with tiltable
screens and similar but detached keyboards. The ERGO 201 and ERGO 301 screens and similar but detached keyboards. The ERGO 201 and ERGO 301
appear to be newer versions of these two with keyboards redesigned yet appear to be low-cost redesigns of these two with keyboards even more
again to more closely resemble the VT100. There was also the ERGO 4000, closely resembling the VT100's, with a Plot 10 graphics board as an
a portrait-mode terminal displaying 66 lines of 80 characters. option. Also introduced around this time was the ERGO 4000, a
portrait-mode terminal displaying 66 lines of 80 characters.
****************************************************************************/ ****************************************************************************/
@ -24,7 +25,9 @@
//#include "bus/rs232/rs232.h" //#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/ay31015.h" #include "machine/ay31015.h"
#include "machine/clock.h"
#include "machine/er1400.h" #include "machine/er1400.h"
//#include "machine/ergo201_kbd.h"
#include "machine/z80ctc.h" #include "machine/z80ctc.h"
#include "machine/z80sio.h" #include "machine/z80sio.h"
#include "video/tms9927.h" #include "video/tms9927.h"
@ -37,6 +40,7 @@ public:
: driver_device(mconfig, type, tag) : driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_earom(*this, "earom") , m_earom(*this, "earom")
, m_kbuart(*this, "kbuart")
, m_vtac(*this, "vtac") , m_vtac(*this, "vtac")
, m_chargen(*this, "chargen") , m_chargen(*this, "chargen")
{ {
@ -44,6 +48,9 @@ public:
void ergo201(machine_config &config); void ergo201(machine_config &config);
protected:
virtual void machine_start() override;
private: private:
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@ -55,10 +62,20 @@ private:
required_device<z80_device> m_maincpu; required_device<z80_device> m_maincpu;
required_device<er1400_device> m_earom; required_device<er1400_device> m_earom;
required_device<ay31015_device> m_kbuart;
required_device<tms9927_device> m_vtac; required_device<tms9927_device> m_vtac;
required_region_ptr<u8> m_chargen; required_region_ptr<u8> m_chargen;
}; };
void ergo201_state::machine_start()
{
m_kbuart->write_tsb(0);
m_kbuart->write_nb1(1);
m_kbuart->write_nb2(1);
m_kbuart->write_np(1);
m_kbuart->write_cs(1);
m_kbuart->write_swe(0);
}
u32 ergo201_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) u32 ergo201_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{ {
@ -77,14 +94,18 @@ void ergo201_state::earom_latch_w(u8 data)
u8 ergo201_state::status_r() u8 ergo201_state::status_r()
{ {
return m_earom->data_r() << 5; return (m_kbuart->dav_r() << 1) | (m_earom->data_r() << 5);
} }
void ergo201_state::mem_map(address_map &map) void ergo201_state::mem_map(address_map &map)
{ {
map(0x0000, 0x5fff).rom().region("program", 0); map(0x0000, 0x5fff).rom().region("program", 0);
map(0x1000, 0x1000).nopw();
map(0x2000, 0x2000).unmapw(); // screen brightness?
map(0x3000, 0x300f).w(m_vtac, FUNC(tms9927_device::write)); map(0x3000, 0x300f).w(m_vtac, FUNC(tms9927_device::write));
map(0x4000, 0x4000).w(FUNC(ergo201_state::earom_latch_w)); map(0x4000, 0x4000).w(FUNC(ergo201_state::earom_latch_w));
map(0x5000, 0x5000).w(m_kbuart, FUNC(ay31015_device::transmit));
map(0x6000, 0x6000).r(m_kbuart, FUNC(ay31015_device::receive));
map(0x6001, 0x6001).r(FUNC(ergo201_state::status_r)); map(0x6001, 0x6001).r(FUNC(ergo201_state::status_r));
map(0x7000, 0x77ff).ram(); map(0x7000, 0x77ff).ram();
map(0x8000, 0x87ff).ram(); map(0x8000, 0x87ff).ram();
@ -117,21 +138,31 @@ void ergo201_state::ergo201(machine_config &config)
m_maincpu->set_daisy_config(daisy_chain); m_maincpu->set_daisy_config(daisy_chain);
z80ctc_device &ctc(Z80CTC(config, "ctc", 16.313_MHz_XTAL / 4)); // SGS Z8430AB1 z80ctc_device &ctc(Z80CTC(config, "ctc", 16.313_MHz_XTAL / 4)); // SGS Z8430AB1
ctc.set_clk<0>(16.313_MHz_XTAL / 53);
ctc.set_clk<1>(16.313_MHz_XTAL / 53);
ctc.set_clk<2>(16.313_MHz_XTAL / 53);
ctc.zc_callback<0>().set("dart", FUNC(z80dart_device::rxca_w)); 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<1>().set("dart", FUNC(z80dart_device::txca_w));
ctc.zc_callback<2>().set("dart", FUNC(z80dart_device::rxtxcb_w)); ctc.zc_callback<2>().set("dart", FUNC(z80dart_device::rxtxcb_w));
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
z80dart_device &dart(Z80DART(config, "dart", 16.313_MHz_XTAL / 4)); // Zilog Z8470A PS z80dart_device &dart(Z80DART(config, "dart", 16.313_MHz_XTAL / 4)); // Zilog Z8470A PS
dart.out_txda_callback().set("dart", FUNC(z80dart_device::rxa_w));
dart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); dart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
AY31015(config, "uart"); // GI AY-3-1015D AY31015(config, m_kbuart); // GI AY-3-1015D
m_kbuart->set_auto_rdav(true);
clock_device &kbclock(CLOCK(config, "kbclock", 10000));
kbclock.signal_handler().set(m_kbuart, FUNC(ay31015_device::write_rcp));
kbclock.signal_handler().append(m_kbuart, FUNC(ay31015_device::write_tcp));
ER1400(config, m_earom); // GI ER-1400 ER1400(config, m_earom); // GI ER-1400
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(16.313_MHz_XTAL, 855, 0, 720, 318, 0, 300); screen.set_raw(16.313_MHz_XTAL, 855, 0, 720, 318, 0, 300);
screen.set_screen_update(FUNC(ergo201_state::screen_update)); screen.set_screen_update(FUNC(ergo201_state::screen_update));
screen.set_color(rgb_t::green()); // P31
CRT5037(config, m_vtac, 16.313_MHz_XTAL / 9); // TI TMS9937NL CRT5037(config, m_vtac, 16.313_MHz_XTAL / 9); // TI TMS9937NL
m_vtac->set_char_width(9); m_vtac->set_char_width(9);
@ -140,8 +171,8 @@ void ergo201_state::ergo201(machine_config &config)
ROM_START(ergo201) ROM_START(ergo201)
ROM_REGION(0x6000, "program", 0) ROM_REGION(0x6000, "program", 0) // Checksum is off by a few bits, so at least one dump is bad
ROM_LOAD("201.u18", 0x0000, 0x2000, CRC(fec9fa3c) SHA1(3c1f9de9f62e74fbd1c9b67736d0959c0f6b46b1)) // M5L2764K ROM_LOAD("201.u18", 0x0000, 0x2000, CRC(fec9fa3c) SHA1(3c1f9de9f62e74fbd1c9b67736d0959c0f6b46b1) BAD_DUMP) // M5L2764K
ROM_LOAD("r1.0_special_5786.u73", 0x2000, 0x2000, CRC(5a31b6bc) SHA1(6929fa8f6d481790cd43732a9a97a9110ad9fb6c)) // MBM2764-25 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_LOAD("201.u17", 0x4000, 0x2000, CRC(e7197403) SHA1(96fff6fb30eeac616d71da731b0ea79c8cd35096)) // M5L2764K
@ -149,4 +180,4 @@ ROM_START(ergo201)
ROM_LOAD("201.u53", 0x0000, 0x1000, CRC(907dac04) SHA1(5bae6680f1ef3f5335a223bdf403e8f3ef272430)) // MBM2732A-35 ROM_LOAD("201.u53", 0x0000, 0x1000, CRC(907dac04) SHA1(5bae6680f1ef3f5335a223bdf403e8f3ef272430)) // MBM2732A-35
ROM_END ROM_END
COMP(1983, ergo201, 0, 0, ergo201, ergo201, ergo201_state, empty_init, "Micro-Term", "ERGO 201 Kurzweil", MACHINE_IS_SKELETON) COMP(1985, ergo201, 0, 0, ergo201, ergo201, ergo201_state, empty_init, "Micro-Term / Kurzweil Computer Products", "ERGO 201 (Special #9233)", MACHINE_IS_SKELETON)