summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2019-04-20 00:27:52 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2019-04-20 00:27:52 +1000
commitad6f47d69323facd088a0d5956d4a84b779de319 (patch)
treec54ad87f7156edec7f6ddcf919dd81956b9021cc
parent2c4be3fab2f8630555172a24930d910625222abd (diff)
(nw) datum: added rs232
-rw-r--r--src/mame/drivers/datum.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/mame/drivers/datum.cpp b/src/mame/drivers/datum.cpp
index 6b957acd9a1..fc218695004 100644
--- a/src/mame/drivers/datum.cpp
+++ b/src/mame/drivers/datum.cpp
@@ -23,6 +23,9 @@ Memory Map:
6000-6003 = PIA1 for keyboard and display
7000-77FF = ROM
+Note about the acia6850: The monitor sends it a master reset, then ignores it thereafter.
+ None of the pins are connected to anything - including the clocks.
+ It's up to the owner to write a TTY interface, and wire it up.
Sample program to paste in: Pick-up-sticks (Nim) All inputs are in HEX.
1. Paste this in
@@ -51,6 +54,7 @@ Z1000G
#include "cpu/m6800/m6800.h"
#include "machine/6821pia.h"
#include "machine/6850acia.h"
+#include "bus/rs232/rs232.h"
#include "datum.lh"
@@ -60,6 +64,8 @@ public:
datum_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_pia1(*this, "pia1")
+ , m_pia2(*this, "pia2")
+ , m_acia(*this, "acia")
, m_keyboard(*this, "X%u", 0)
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
@@ -78,6 +84,8 @@ private:
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<pia6821_device> m_pia1;
+ required_device<pia6821_device> m_pia2;
+ required_device<acia6850_device> m_acia;
required_ioport_array<4> m_keyboard;
required_device<cpu_device> m_maincpu;
output_finder<16> m_digits;
@@ -90,8 +98,8 @@ void datum_state::datum_mem(address_map &map)
map.global_mask(0x7fff); // A15 not used
map(0x0000, 0x007f).ram(); // inside CPU
map(0x1000, 0x13ff).mirror(0x0c00).ram(); // main ram 2x 2114
- map(0x4000, 0x4001).mirror(0x0ffe).rw("acia", FUNC(acia6850_device::read), FUNC(acia6850_device::write));
- map(0x5000, 0x5003).mirror(0x0ffc).rw("pia2", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x4000, 0x4001).mirror(0x0ffe).rw(m_acia, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
+ map(0x5000, 0x5003).mirror(0x0ffc).rw(m_pia2, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x6000, 0x6003).mirror(0x0ffc).rw(m_pia1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x7000, 0x77ff).mirror(0x0800).rom().region("roms", 0);
}
@@ -199,11 +207,16 @@ void datum_state::datum(machine_config &config)
m_pia1->irqa_handler().set_inputline("maincpu", M6802_IRQ_LINE);
m_pia1->irqb_handler().set_inputline("maincpu", M6802_IRQ_LINE);
- pia6821_device &pia2(PIA6821(config, "pia2", 0)); // expansion
- pia2.irqa_handler().set_inputline("maincpu", M6802_IRQ_LINE);
- pia2.irqb_handler().set_inputline("maincpu", M6802_IRQ_LINE);
+ PIA6821(config, m_pia2, 0); // expansion
+ m_pia2->irqa_handler().set_inputline("maincpu", M6802_IRQ_LINE);
+ m_pia2->irqb_handler().set_inputline("maincpu", M6802_IRQ_LINE);
- ACIA6850(config, "acia", 0); // rs232
+ ACIA6850(config, m_acia, 0); // rs232
+ m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
+ rs232.cts_handler().set(m_acia, FUNC(acia6850_device::write_cts));
}