diff options
author | 2018-07-10 10:55:47 +0100 | |
---|---|---|
committer | 2018-07-10 11:34:36 +0100 | |
commit | 51fa9aa2e81400cfa4df380a751fe15e7b3d254e (patch) | |
tree | d11f64a91430217a4054ba63f36349d1fb20046f /src/devices/bus/acorn/bus.cpp | |
parent | d60faf030addc71147287e6cd6cf445401c33bfa (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.cpp | 198 |
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 */ +} |