summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/acorn/bus.cpp
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2018-07-10 10:55:47 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2018-07-10 11:34:36 +0100
commit51fa9aa2e81400cfa4df380a751fe15e7b3d254e (patch)
treed11f64a91430217a4054ba63f36349d1fb20046f /src/devices/bus/acorn/bus.cpp
parentd60faf030addc71147287e6cd6cf445401c33bfa (diff)
Acorn Bus slot devices for:-
Acorn Atom: - AtomSID - Acorn Atom Disc Pack - Econet Board Acorn System: - 32K Dynamic RAM Board - 8K Static RAM Board - Cassette Interface Board - Econet Board - Floppy Disc Controller Board - 40 Column VDU Board - 80x25 VDU Board - Versatile Interface Board CMS: - CMS 40/80 Video Terminal Card - CMS Floppy Disc Controller - CMS High Resolution Colour Graphics Card
Diffstat (limited to 'src/devices/bus/acorn/bus.cpp')
-rw-r--r--src/devices/bus/acorn/bus.cpp198
1 files changed, 198 insertions, 0 deletions
diff --git a/src/devices/bus/acorn/bus.cpp b/src/devices/bus/acorn/bus.cpp
new file mode 100644
index 00000000000..83cf01ed051
--- /dev/null
+++ b/src/devices/bus/acorn/bus.cpp
@@ -0,0 +1,198 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Acorn Bus Extension emulation
+
+ Part No. 100,031
+
+**********************************************************************/
+
+#include "emu.h"
+#include "bus.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ACORN_BUS_SLOT, acorn_bus_slot_device, "acorn_bus_slot", "Acorn Bus Eurocard slot")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// acorn_bus_slot_device - constructor
+//-------------------------------------------------
+acorn_bus_slot_device::acorn_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ACORN_BUS_SLOT, tag, owner, clock)
+ , device_slot_interface(mconfig, *this)
+ , m_bus(*this, finder_base::DUMMY_TAG)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void acorn_bus_slot_device::device_start()
+{
+ device_acorn_bus_interface *const dev = dynamic_cast<device_acorn_bus_interface *>(get_card_device());
+ if (dev)
+ dev->set_acorn_bus(m_bus);
+
+ // tell acorn bus that there is one slot with the specified tag
+ downcast<acorn_bus_device &>(*m_bus).add_slot(tag());
+}
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(ACORN_BUS, acorn_bus_device, "acorn_bus", "Acorn Bus")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// acorn_bus_device - constructor
+//-------------------------------------------------
+
+acorn_bus_device::acorn_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ACORN_BUS, tag, owner, clock)
+ , m_maincpu(*this, finder_base::DUMMY_TAG)
+ , m_out_irq_cb(*this)
+ , m_out_nmi_cb(*this)
+{
+}
+
+
+void acorn_bus_device::add_slot(const char *tag)
+{
+ device_t *dev = subdevice(tag);
+
+ add_slot(dynamic_cast<device_slot_interface *>(dev));
+}
+
+void acorn_bus_device::add_slot(device_slot_interface *slot)
+{
+ m_slot_list.push_front(slot);
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void acorn_bus_device::device_start()
+{
+ // resolve callbacks
+ m_out_irq_cb.resolve_safe();
+ m_out_nmi_cb.resolve_safe();
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void acorn_bus_device::device_reset()
+{
+}
+
+// interrupt request from acorn_bus card
+WRITE_LINE_MEMBER(acorn_bus_device::irq_w) { m_out_irq_cb(state); }
+WRITE_LINE_MEMBER(acorn_bus_device::nmi_w) { m_out_nmi_cb(state); }
+
+
+
+//**************************************************************************
+// DEVICE CONFIG ACORN BUS INTERFACE
+//**************************************************************************
+
+
+//**************************************************************************
+// DEVICE ACORN BUS INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_acorn_bus_interface - constructor
+//-------------------------------------------------
+
+device_acorn_bus_interface::device_acorn_bus_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_bus(nullptr)
+ , m_bus_dev(nullptr)
+ , m_next(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_acorn_bus_interface - destructor
+//-------------------------------------------------
+
+device_acorn_bus_interface::~device_acorn_bus_interface()
+{
+}
+
+void device_acorn_bus_interface::set_acorn_bus_device()
+{
+ m_bus = dynamic_cast<acorn_bus_device *>(m_bus_dev);
+}
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( acorn_bus_devices )
+//-------------------------------------------------
+
+
+// slot devices
+#include "system/32k.h"
+#include "system/8k.h"
+#include "system/cass.h"
+#include "system/econet.h"
+#include "system/fdc.h"
+#include "system/vdu40.h"
+#include "system/vdu80.h"
+#include "system/vib.h"
+
+#include "atom/sid.h"
+#include "atom/discpack.h"
+#include "atom/econet.h"
+
+#include "cms/4080term.h"
+#include "cms/fdc.h"
+#include "cms/hires.h"
+
+void acorn_bus_devices(device_slot_interface &device)
+{
+ device.option_add("32k", ACORN_32K); /* 32K Dynamic RAM Board */
+ device.option_add("8k", ACORN_8K); /* 8K Static RAM Board */
+ //device.option_add("8kcmos", ACORN_8KCMOS); /* 8K CMOS RAM Board */
+ //device.option_add("analog", ACORN_ANALOG); /* Analog Interface Board */
+ device.option_add("cass", ACORN_CASS); /* Cassette Interface Board */
+ device.option_add("econet", ACORN_ECONET); /* Econet Board */
+ device.option_add("fdc", ACORN_FDC); /* Floppy Disc Controller Board */
+ device.option_add("vdu40", ACORN_VDU40); /* 40 Column VDU Board */
+ device.option_add("vdu80", ACORN_VDU80); /* 80x25 VDU Board */
+ device.option_add("vib", ACORN_VIB); /* Versatile Interface Board */
+}
+
+void atom_bus_devices(device_slot_interface &device)
+{
+ device.option_add("32k", ACORN_32K); /* 32K Dynamic RAM Board */
+ device.option_add("sid", ATOM_SID); /* AtomSID */
+ device.option_add("discpack", ATOM_DISCPACK); /* Acorn Atom Disc Pack */
+ device.option_add("econet", ATOM_ECONET); /* Econet Board */
+}
+
+void cms_bus_devices(device_slot_interface &device)
+{
+ device.option_add("4080term", CMS_4080TERM); /* CMS 40/80 Video Terminal Card */
+ device.option_add("fdc", CMS_FDC); /* CMS Floppy Disc Controller */
+ device.option_add("hires", CMS_HIRES); /* CMS High Resolution Colour Graphics Card */
+}