summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/qbus/qbus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/qbus/qbus.cpp')
-rw-r--r--src/devices/bus/qbus/qbus.cpp59
1 files changed, 32 insertions, 27 deletions
diff --git a/src/devices/bus/qbus/qbus.cpp b/src/devices/bus/qbus/qbus.cpp
index b9df7753e35..565bab97e92 100644
--- a/src/devices/bus/qbus/qbus.cpp
+++ b/src/devices/bus/qbus/qbus.cpp
@@ -11,14 +11,24 @@
#include "qbus.h"
// Peripheral boards
+#include "dsd4432.h"
+#include "dvk_kgd.h"
+#include "dvk_mx.h"
#include "pc11.h"
+#include "qg640.h"
#include "qtx.h"
+#include "uknc_kmd.h"
void qbus_cards(device_slot_interface &device)
{
device.option_add("pc11", DEC_PC11); /* Paper tape reader and punch */
device.option_add("qts1", TTI_QTS1);
+ device.option_add("dsd4432", DSD4432);
+ device.option_add("kgd", DVK_KGD);
+ device.option_add("mx", DVK_MX);
+ device.option_add("mz", UKNC_KMD);
+ device.option_add("qg640", MATROX_QG640);
}
@@ -40,8 +50,7 @@ DEFINE_DEVICE_TYPE(QBUS_SLOT, qbus_slot_device, "qbus_slot", "DEC Qbus slot")
device_qbus_card_interface::device_qbus_card_interface(const machine_config &mconfig, device_t &device) :
device_interface(device, "qbus"),
- m_bus(nullptr),
- m_next(nullptr)
+ m_bus(nullptr)
{
}
@@ -70,13 +79,8 @@ qbus_slot_device::qbus_slot_device(const machine_config &mconfig, const char *ta
void qbus_slot_device::device_start()
{
device_qbus_card_interface *dev = dynamic_cast<device_qbus_card_interface *>(get_card_device());
- if (dev) m_bus->add_card(dev);
-
- m_write_birq4.resolve_safe();
- m_write_birq5.resolve_safe();
- m_write_birq6.resolve_safe();
- m_write_birq7.resolve_safe();
- m_write_bdmr.resolve_safe();
+ if (dev)
+ m_bus->add_card(*dev);
}
@@ -88,7 +92,7 @@ qbus_device::qbus_device(const machine_config &mconfig, const char *tag, device_
device_t(mconfig, QBUS, tag, owner, clock),
device_memory_interface(mconfig, *this),
device_z80daisy_interface(mconfig, *this),
- m_program_config("QBUS A18", ENDIANNESS_BIG, 16, 16, 0, address_map_constructor()),
+ m_program_config("a18", ENDIANNESS_BIG, 16, 16, 0, address_map_constructor()),
m_space(*this, finder_base::DUMMY_TAG, -1),
m_out_birq4_cb(*this),
m_out_birq5_cb(*this),
@@ -98,6 +102,17 @@ qbus_device::qbus_device(const machine_config &mconfig, const char *tag, device_
{
}
+qbus_device::~qbus_device()
+{
+}
+
+device_memory_interface::space_config_vector qbus_device::memory_space_config() const
+{
+ return space_config_vector {
+ std::make_pair(AS_PROGRAM, &m_program_config)
+ };
+}
+
//-------------------------------------------------
// device_start - device-specific startup
@@ -105,12 +120,6 @@ qbus_device::qbus_device(const machine_config &mconfig, const char *tag, device_
void qbus_device::device_start()
{
- // resolve callbacks
- m_out_birq4_cb.resolve_safe();
- m_out_birq5_cb.resolve_safe();
- m_out_birq6_cb.resolve_safe();
- m_out_birq7_cb.resolve_safe();
- m_out_bdmr_cb.resolve_safe();
}
@@ -127,10 +136,10 @@ void qbus_device::device_reset()
// add_card - add card
//-------------------------------------------------
-void qbus_device::add_card(device_qbus_card_interface *card)
+void qbus_device::add_card(device_qbus_card_interface &card)
{
- card->m_bus = this;
- m_device_list.append(*card);
+ card.m_bus = this;
+ m_device_list.emplace_back(card);
}
void qbus_device::install_device(offs_t start, offs_t end, read16sm_delegate rhandler, write16sm_delegate whandler, uint32_t mask)
@@ -146,14 +155,12 @@ void qbus_device::install_device(offs_t start, offs_t end, read16sm_delegate rha
int qbus_device::z80daisy_irq_state()
{
int data = 0;
- device_qbus_card_interface *entry = m_device_list.first();
- while (entry)
+ for (device_qbus_card_interface &entry : m_device_list)
{
- data = entry->z80daisy_irq_state();
+ data = entry.z80daisy_irq_state();
if (data)
return data;
- entry = entry->next();
}
return data;
@@ -162,14 +169,12 @@ int qbus_device::z80daisy_irq_state()
int qbus_device::z80daisy_irq_ack()
{
int vec = -1;
- device_qbus_card_interface *entry = m_device_list.first();
- while (entry)
+ for (device_qbus_card_interface &entry : m_device_list)
{
- vec = entry->z80daisy_irq_ack();
+ vec = entry.z80daisy_irq_ack();
if (vec > 0)
return vec;
- entry = entry->next();
}
return vec;