From e5b039078fcada972e27835ba1ce27ec67fa6739 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Mon, 7 Sep 2020 16:58:02 +0100 Subject: bus/electron/cart: Added the Pace RS423 Communications cartridge. --- scripts/src/bus.lua | 2 + src/devices/bus/electron/cart/rs423.cpp | 97 +++++++++++++++++++++++++++++++++ src/devices/bus/electron/cart/rs423.h | 47 ++++++++++++++++ src/devices/bus/electron/cart/slot.cpp | 4 +- 4 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 src/devices/bus/electron/cart/rs423.cpp create mode 100644 src/devices/bus/electron/cart/rs423.h 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 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); -- cgit v1.2.3