summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/qvt201.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/qvt201.cpp')
-rw-r--r--src/mame/drivers/qvt201.cpp41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/mame/drivers/qvt201.cpp b/src/mame/drivers/qvt201.cpp
index d1ef3685802..c200b35e5ff 100644
--- a/src/mame/drivers/qvt201.cpp
+++ b/src/mame/drivers/qvt201.cpp
@@ -8,6 +8,7 @@ Skeleton driver for Qume QVT-201 & QVT-202 display terminals.
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "bus/rs232/rs232.h"
#include "machine/input_merger.h"
#include "machine/mc68681.h"
#include "machine/nvram.h"
@@ -20,6 +21,7 @@ public:
qvt201_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_eia(*this, "eia")
, m_screen(*this, "screen")
, m_p_chargen(*this, "chargen")
, m_dataram(*this, "dataram")
@@ -33,10 +35,12 @@ private:
DECLARE_WRITE8_MEMBER(offset_w);
DECLARE_WRITE8_MEMBER(keyboard_w);
DECLARE_READ8_MEMBER(keyboard_r);
+ DECLARE_WRITE8_MEMBER(duart_out_w);
void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
+ required_device<rs232_port_device> m_eia;
required_device<screen_device> m_screen;
required_region_ptr<u8> m_p_chargen;
required_shared_ptr<u8> m_dataram;
@@ -61,6 +65,21 @@ READ8_MEMBER(qvt201_state::keyboard_r)
return 1;
}
+WRITE8_MEMBER(qvt201_state::duart_out_w)
+{
+ // OP0 = RTS (EIA pin 4)
+ // OP1 = DTR (EIA pin 20)
+ // OP2 not used?
+ // OP3 = 132/_80
+ // OP4 = SRV
+ // OP5 = BLOCK/_UL
+ // OP6 = preset NMI flipflop
+ // OP7 = _DATA/TALK (EIA pin 14)
+
+ m_eia->write_rts(BIT(data, 0));
+ m_eia->write_dtr(BIT(data, 1));
+}
+
void qvt201_state::mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("maincpu", 0);
@@ -78,23 +97,33 @@ static INPUT_PORTS_START( qvt201 )
INPUT_PORTS_END
MACHINE_CONFIG_START(qvt201_state::qvt201)
- MCFG_DEVICE_ADD("maincpu", Z80, XTAL(3'686'400))
+ MCFG_DEVICE_ADD("maincpu", Z80, 3.6864_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(mem_map) // IORQ is not used at all
MCFG_INPUT_MERGER_ANY_HIGH("mainint") // open collector
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", 0))
- MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400)) // XTAL not directly connected
+ MCFG_DEVICE_ADD("duart", SCN2681, 3.6864_MHz_XTAL) // XTAL not directly connected
MCFG_MC68681_IRQ_CALLBACK(WRITELINE("mainint", input_merger_device, in_w<1>))
+ MCFG_MC68681_A_TX_CALLBACK(WRITELINE("eia", rs232_port_device, write_txd))
+ MCFG_MC68681_B_TX_CALLBACK(WRITELINE("aux", rs232_port_device, write_txd))
+ MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(*this, qvt201_state, duart_out_w))
+
+ MCFG_DEVICE_ADD("eia", RS232_PORT, default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_a_w))
+
+ MCFG_DEVICE_ADD("aux", RS232_PORT, default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_b_w))
+ MCFG_RS232_DSR_HANDLER(WRITELINE("duart", scn2681_device, ip4_w))
- MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_NVRAM_ADD_0FILL("nvram") // TC5516APL-2 or uPD446C-2 + battery
MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(48'654'000) / 3, 102 * 10, 0, 80 * 10, 265, 0, 250)
- //MCFG_SCREEN_RAW_PARAMS(XTAL(48'654'000) / 2, 170 * 9, 0, 132 * 9, 265, 0, 250)
+ MCFG_SCREEN_RAW_PARAMS(48.654_MHz_XTAL / 3, 102 * 10, 0, 80 * 10, 265, 0, 250)
+ //MCFG_SCREEN_RAW_PARAMS(48.654_MHz_XTAL / 2, 170 * 9, 0, 132 * 9, 265, 0, 250)
MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2672_device, screen_update)
- MCFG_DEVICE_ADD("crtc", SCN2672, XTAL(48'654'000) / 30)
+ MCFG_DEVICE_ADD("crtc", SCN2672, 48.654_MHz_XTAL / 30)
MCFG_SCN2672_CHARACTER_WIDTH(10) // 9 in 132-column mode
MCFG_SCN2672_INTR_CALLBACK(WRITELINE("mainint", input_merger_device, in_w<0>))
MCFG_VIDEO_SET_SCREEN("screen")