summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/scsi
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-07-30 18:35:47 +0200
committer mooglyguy <therealmogminer@gmail.com>2018-07-30 18:36:34 +0200
commit1a899d987f40730c839f8adf719d18a0789062e9 (patch)
tree03dd9b6efabe5a4fa33c83432d0c5847e5c9bfcd /src/devices/bus/scsi
parentef33cc041dbefae55c1b947f189f152086aaa80c (diff)
-abcbus/hdc, abcbus/lux21056, abcbus/lux4105, zorro/a590:, cbmiec/cmdhd, econet/e01, ieee488/d9060, video/huc622, x68k_scsiext:
device_add_mconfig modernization. [Ryan Holtz] -amiga_dmac: Replaced old devcb with devcb3. [Ryan Holtz] -mc6854, ataintf, mb89352, mc6854, wd33c93: Added devcb3 support. [Ryan Holtz] -8042kbdc, i8255, idectrl, intelfsh, mb89352, ram, wd33c93, volt_reg: Default clocks to 0 (nw) -bebox, indy_indigo2: machine_config modernization. [Ryan Holtz]
Diffstat (limited to 'src/devices/bus/scsi')
-rw-r--r--src/devices/bus/scsi/scsi.cpp50
-rw-r--r--src/devices/bus/scsi/scsi.h12
2 files changed, 30 insertions, 32 deletions
diff --git a/src/devices/bus/scsi/scsi.cpp b/src/devices/bus/scsi/scsi.cpp
index 1642ad51408..d11bef77de5 100644
--- a/src/devices/bus/scsi/scsi.cpp
+++ b/src/devices/bus/scsi/scsi.cpp
@@ -23,6 +23,7 @@ scsi_port_device::scsi_port_device(const machine_config &mconfig, const char *ta
m_data5_handler(*this),
m_data6_handler(*this),
m_data7_handler(*this),
+ m_slot(*this, "%u", 1U),
m_device_count(0),
m_bsy_in(0),
m_sel_in(0),
@@ -61,39 +62,15 @@ scsi_port_device::scsi_port_device(const machine_config &mconfig, const char *ta
{
}
-MACHINE_CONFIG_START(scsi_port_device::device_add_mconfig)
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE1, SCSI_PORT_SLOT, 0 )
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE2, SCSI_PORT_SLOT, 0 )
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE3, SCSI_PORT_SLOT, 0 )
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE4, SCSI_PORT_SLOT, 0 )
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE5, SCSI_PORT_SLOT, 0 )
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE6, SCSI_PORT_SLOT, 0 )
- MCFG_DEVICE_ADD( SCSI_PORT_DEVICE7, SCSI_PORT_SLOT, 0 )
-MACHINE_CONFIG_END
-
-void scsi_port_device::device_start()
+void scsi_port_device::device_add_mconfig(machine_config &config)
{
- const char *deviceName[] =
- {
- SCSI_PORT_DEVICE1,
- SCSI_PORT_DEVICE2,
- SCSI_PORT_DEVICE3,
- SCSI_PORT_DEVICE4,
- SCSI_PORT_DEVICE5,
- SCSI_PORT_DEVICE6,
- SCSI_PORT_DEVICE7
- };
-
- m_device_count = 0;
-
for (int i = 0; i < 7; i++)
- {
- scsi_port_slot_device *slot = subdevice<scsi_port_slot_device>(deviceName[i]);
- m_slot[i] = slot;
+ SCSI_PORT_SLOT(config, m_slot[i]);
+}
- if (slot != nullptr)
- m_device_count = i + 1;
- }
+void scsi_port_device::device_start()
+{
+ m_device_count = 8;
m_bsy_handler.resolve_safe();
m_sel_handler.resolve_safe();
@@ -660,6 +637,19 @@ WRITE_LINE_MEMBER( scsi_port_device::write_data7 )
}
}
+scsi_port_slot_device &scsi_port_device::slot(int index)
+{
+ assert(index >= 1 && index <= 7);
+ return *subdevice<scsi_port_slot_device>(m_slot[index-1].finder_tag());
+}
+
+void scsi_port_device::set_slot_device(int index, const char *option, const device_type &type, const input_device_default *id)
+{
+ slot(index).option_add(option, type);
+ slot(index).set_option_device_input_defaults(option, id);
+ slot(index).set_default_option(option);
+}
+
DEFINE_DEVICE_TYPE(SCSI_PORT, scsi_port_device, "scsi", "SCSI Port")
scsi_port_slot_device::scsi_port_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
diff --git a/src/devices/bus/scsi/scsi.h b/src/devices/bus/scsi/scsi.h
index 154b346d6a4..9a403d534fb 100644
--- a/src/devices/bus/scsi/scsi.h
+++ b/src/devices/bus/scsi/scsi.h
@@ -98,6 +98,11 @@ class scsi_port_device : public device_t
public:
// construction/destruction
+ scsi_port_device(const machine_config &mconfig, const char *tag, device_t *owner)
+ : scsi_port_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ }
+
scsi_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <class Object> devcb_base &set_bsy_handler(Object &&cb) { return m_bsy_handler.set_callback(std::forward<Object>(cb)); }
@@ -166,6 +171,9 @@ public:
DECLARE_WRITE_LINE_MEMBER( write_data6 );
DECLARE_WRITE_LINE_MEMBER( write_data7 );
+ scsi_port_slot_device &slot(int index);
+ void set_slot_device(int index, const char *option, const device_type &type, const input_device_default *id);
+
protected:
// device-level overrides
virtual void device_start() override;
@@ -208,7 +216,7 @@ private:
devcb_write_line m_data6_handler;
devcb_write_line m_data7_handler;
- scsi_port_slot_device *m_slot[7];
+ required_device_array<scsi_port_slot_device, 7> m_slot;
int m_device_count;
int m_bsy_in;
@@ -258,7 +266,7 @@ class scsi_port_slot_device : public device_t,
friend class scsi_port_interface;
public:
- scsi_port_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ scsi_port_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
scsi_port_interface *dev() { return m_dev; }
scsi_port_device *port() { return m_port; }