summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2020-09-07 16:58:02 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2020-09-07 16:58:02 +0100
commite5b039078fcada972e27835ba1ce27ec67fa6739 (patch)
tree99db00c80677c3d9243394bf6e3e8af126c112ac
parent49074fa8287fbdfe4ac941c8619455f04e8dfa6d (diff)
bus/electron/cart: Added the Pace RS423 Communications cartridge.
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--src/devices/bus/electron/cart/rs423.cpp97
-rw-r--r--src/devices/bus/electron/cart/rs423.h47
-rw-r--r--src/devices/bus/electron/cart/slot.cpp4
4 files changed, 148 insertions, 2 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 125e69e982e..e2404cf1abf 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -1078,6 +1078,8 @@ if (BUSES["ELECTRON_CART"]~=null) then
MAME_DIR .. "src/devices/bus/electron/cart/peg400.h",
MAME_DIR .. "src/devices/bus/electron/cart/romp144.cpp",
MAME_DIR .. "src/devices/bus/electron/cart/romp144.h",
+ MAME_DIR .. "src/devices/bus/electron/cart/rs423.cpp",
+ MAME_DIR .. "src/devices/bus/electron/cart/rs423.h",
MAME_DIR .. "src/devices/bus/electron/cart/sndexp.cpp",
MAME_DIR .. "src/devices/bus/electron/cart/sndexp.h",
MAME_DIR .. "src/devices/bus/electron/cart/sndexp3.cpp",
diff --git a/src/devices/bus/electron/cart/rs423.cpp b/src/devices/bus/electron/cart/rs423.cpp
new file mode 100644
index 00000000000..68838a4cae2
--- /dev/null
+++ b/src/devices/bus/electron/cart/rs423.cpp
@@ -0,0 +1,97 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Electron RS423 Communications cartridge (Pace Micro Technology)
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "rs423.h"
+#include "bus/rs232/rs232.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ELECTRON_RS423, electron_rs423_device, "electron_rs423", "Pace RS423 Communications cartridge")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void electron_rs423_device::device_add_mconfig(machine_config &config)
+{
+ SCN2681(config, m_duart, 3.6864_MHz_XTAL);
+ m_duart->irq_cb().set(DEVICE_SELF_OWNER, FUNC(electron_cartslot_device::irq_w));
+ m_duart->a_tx_cb().set("rs423", FUNC(rs232_port_device::write_txd));
+ m_duart->outport_cb().set("rs423", FUNC(rs232_port_device::write_rts)).bit(0);
+
+ rs232_port_device &rs232(RS232_PORT(config, "rs423", default_rs232_devices, "null_modem"));
+ rs232.rxd_handler().set(m_duart, FUNC(scn2681_device::rx_a_w));
+ rs232.cts_handler().set(m_duart, FUNC(scn2681_device::ip2_w));
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// electron_rs423_device - constructor
+//-------------------------------------------------
+
+electron_rs423_device::electron_rs423_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ELECTRON_RS423, tag, owner, clock)
+ , device_electron_cart_interface(mconfig, *this)
+ , m_duart(*this, "duart")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void electron_rs423_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// read - cartridge data read
+//-------------------------------------------------
+
+uint8_t electron_rs423_device::read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2)
+{
+ uint8_t data = 0xff;
+
+ if (infc)
+ {
+ if (offset >= 0x60 && offset < 0x70)
+ {
+ data = m_duart->read(offset & 0x0f);
+ }
+ }
+ else if (oe)
+ {
+ data = m_rom[offset & 0x3fff];
+ }
+
+ return data;
+}
+
+//-------------------------------------------------
+// write - cartridge data write
+//-------------------------------------------------
+
+void electron_rs423_device::write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2)
+{
+ if (infc)
+ {
+ if (offset >= 0x60 && offset < 0x70)
+ {
+ m_duart->write(offset & 0x0f, data);
+ }
+ }
+}
diff --git a/src/devices/bus/electron/cart/rs423.h b/src/devices/bus/electron/cart/rs423.h
new file mode 100644
index 00000000000..0068b9c701e
--- /dev/null
+++ b/src/devices/bus/electron/cart/rs423.h
@@ -0,0 +1,47 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Electron RS423 Communications cartridge (Pace Micro Technology)
+
+**********************************************************************/
+
+#ifndef MAME_BUS_ELECTRON_CART_RS423_H
+#define MAME_BUS_ELECTRON_CART_RS423_H
+
+#include "slot.h"
+#include "machine/mc68681.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class electron_rs423_device :
+ public device_t,
+ public device_electron_cart_interface
+{
+public:
+ // construction/destruction
+ electron_rs423_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // electron_cart_interface overrides
+ virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
+ virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
+
+private:
+ required_device<scn2681_device> m_duart;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(ELECTRON_RS423, electron_rs423_device)
+
+
+#endif // MAME_BUS_ELECTRON_CART_RS423_H
diff --git a/src/devices/bus/electron/cart/slot.cpp b/src/devices/bus/electron/cart/slot.cpp
index dfb915db375..489cb567c4d 100644
--- a/src/devices/bus/electron/cart/slot.cpp
+++ b/src/devices/bus/electron/cart/slot.cpp
@@ -265,7 +265,7 @@ void electron_cartslot_device::write(offs_t offset, uint8_t data, int infc, int
#include "peg400.h"
//#include "pmse2p.h"
#include "romp144.h"
-//#include "rs423.h"
+#include "rs423.h"
#include "sndexp.h"
#include "sndexp3.h"
#include "sp64.h"
@@ -287,7 +287,7 @@ void electron_cart(device_slot_interface &device)
device.option_add_internal("peg400", ELECTRON_PEG400);
//device.option_add_internal("pmse2p", ELECTRON_PMSE2P);
device.option_add_internal("romp144", ELECTRON_ROMP144);
- //device.option_add_internal("rs423", ELECTRON_RS423);
+ device.option_add_internal("rs423", ELECTRON_RS423);
device.option_add_internal("sndexp", ELECTRON_SNDEXP);
device.option_add_internal("sndexp3", ELECTRON_SNDEXP3);
device.option_add_internal("sp64", ELECTRON_SP64);