mirror of
https://github.com/holub/mame
synced 2025-04-19 07:00:31 +03:00
ergo201: More driver work, preparing for keyboard emulation (nw)
This commit is contained in:
parent
bfd49efaee
commit
663680d722
@ -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",
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user