summaryrefslogtreecommitdiffstats
path: root/src/devices/machine/nscsi_bus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/nscsi_bus.cpp')
-rw-r--r--src/devices/machine/nscsi_bus.cpp46
1 files changed, 32 insertions, 14 deletions
diff --git a/src/devices/machine/nscsi_bus.cpp b/src/devices/machine/nscsi_bus.cpp
index c8ac3428735..c2274f49c95 100644
--- a/src/devices/machine/nscsi_bus.cpp
+++ b/src/devices/machine/nscsi_bus.cpp
@@ -125,19 +125,15 @@ void nscsi_bus_device::ctrl_wait(int refid, uint32_t lines, uint32_t mask)
dev[refid].wait_ctrl = (w & ~mask) | (lines & mask);
}
-void nscsi_bus_device::device_config_complete()
+void nscsi_bus_device::device_resolve_objects()
{
- char id[3];
for(int i=0; i<16; i++) {
- sprintf(id, "%d", i);
- nscsi_connector *conn = downcast<nscsi_connector *>(subdevice(id));
- if(conn) {
- nscsi_device *sdev = conn->get_device();
- if(sdev) {
- int rid = devcnt++;
- dev[rid].dev = sdev;
- sdev->connect_to_bus(this, rid, i);
- }
+ device_t *subdev = subdevice(string_format("%d", i).c_str());
+ nscsi_device *sdev = subdev ? downcast<nscsi_connector &>(*subdev).get_device() : nullptr;
+ if(sdev) {
+ int rid = devcnt++;
+ dev[rid].dev = sdev;
+ sdev->connect_to_bus(this, rid, i);
}
}
}
@@ -153,18 +149,34 @@ nscsi_connector::~nscsi_connector()
{
}
+void nscsi_connector::device_validity_check(validity_checker &valid) const
+{
+ device_t *const carddev = get_card_device();
+ if (carddev && !dynamic_cast<nscsi_slot_card_interface *>(carddev))
+ osd_printf_error("Card device %s (%s) does not implement nscsi_slot_card_interface\n", carddev->tag(), carddev->name());
+}
+
void nscsi_connector::device_start()
{
}
nscsi_device *nscsi_connector::get_device()
{
- return dynamic_cast<nscsi_device *>(get_card_device());
+ nscsi_slot_card_interface *connected = dynamic_cast<nscsi_slot_card_interface *>(get_card_device());
+ if (connected)
+ return connected->device().subdevice<nscsi_device>(connected->m_nscsi.finder_tag());
+ else
+ return nullptr;
+}
+
+nscsi_slot_card_interface::nscsi_slot_card_interface(const machine_config &mconfig, device_t &device, const char *nscsi_tag) :
+ device_slot_card_interface(mconfig, device),
+ m_nscsi(device, nscsi_tag)
+{
}
nscsi_device::nscsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, type, tag, owner, clock),
- device_slot_card_interface(mconfig, *this)
+ device_t(mconfig, type, tag, owner, clock)
{
scsi_id = scsi_refid = -1;
scsi_bus = nullptr;
@@ -187,6 +199,12 @@ void nscsi_device::device_start()
}
+nscsi_full_device::nscsi_full_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ nscsi_device(mconfig, type, tag, owner, clock),
+ nscsi_slot_card_interface(mconfig, *this, DEVICE_SELF)
+{
+}
+
const char *const nscsi_full_device::command_names[256] = {
/* 00 */ "TEST_UNIT_READY", "REZERO", "?", "REQUEST_SENSE", "FORMAT_UNIT", "?", "?", "REASSIGN_BLOCKS",
/* 08 */ "READ_6/RECIEVE", "?", "WRITE_6/SEND", "SEEK", "?", "?", "?", "?",