summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/amiga/zorro/a590.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/amiga/zorro/a590.cpp')
-rw-r--r--src/devices/bus/amiga/zorro/a590.cpp52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/devices/bus/amiga/zorro/a590.cpp b/src/devices/bus/amiga/zorro/a590.cpp
index 32328b2f944..045a0eab7c8 100644
--- a/src/devices/bus/amiga/zorro/a590.cpp
+++ b/src/devices/bus/amiga/zorro/a590.cpp
@@ -10,8 +10,9 @@
#include "emu.h"
#include "a590.h"
-#include "bus/scsi/scsi.h"
-#include "bus/scsi/scsihd.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_cd.h"
+#include "machine/nscsi_hd.h"
//**************************************************************************
@@ -114,6 +115,19 @@ ioport_constructor a2091_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
+void dmac_hdc_device::scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+}
+
+void dmac_hdc_device::wd33c93(device_t *device)
+{
+ device->set_clock(10000000);
+ downcast<wd33c93a_device *>(device)->irq_cb().set(*this, FUNC(dmac_hdc_device::scsi_irq_w));
+ downcast<wd33c93a_device *>(device)->drq_cb().set(*this, FUNC(dmac_hdc_device::scsi_drq_w));
+}
+
void dmac_hdc_device::device_add_mconfig(machine_config &config)
{
amiga_dmac_device &dmac(AMIGA_DMAC(config, "dmac", 0));
@@ -122,12 +136,15 @@ void dmac_hdc_device::device_add_mconfig(machine_config &config)
dmac.int_handler().set(FUNC(dmac_hdc_device::dmac_int_w));
dmac.cfgout_handler().set(FUNC(dmac_hdc_device::dmac_cfgout_w));
- scsi_port_device &scsi(SCSI_PORT(config, "scsi"));
- scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1));
-
- wd33c93_device &scsi_ctrl(WD33C93(config, "wd33c93"));
- scsi_ctrl.set_scsi_port("scsi");
- scsi_ctrl.irq_cb().set(FUNC(dmac_hdc_device::scsi_irq_w));
+ NSCSI_BUS(config, "scsi", 0);
+ NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, "harddisk", false);
+ NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:7").option_set("wd33c93", WD33C93A)
+ .machine_config([this](device_t *device) { wd33c93(device); });
}
@@ -205,7 +222,7 @@ dmac_hdc_device::dmac_hdc_device(const machine_config &mconfig, device_type type
device_t(mconfig, type, tag, owner, clock),
m_int6(false),
m_dmac(*this, "dmac"),
- m_wdc(*this, "wd33c93")
+ m_wdc(*this, "scsi:7:wd33c93")
{
}
@@ -243,7 +260,7 @@ void a590_device::device_start()
set_zorro_device();
// setup DMAC
- m_dmac->set_address_space(m_slot->m_space);
+ m_dmac->set_address_space(&m_slot->space());
m_dmac->set_rom(memregion("bootrom")->base());
}
@@ -252,7 +269,7 @@ void a2091_device::device_start()
set_zorro_device();
// setup DMAC
- m_dmac->set_address_space(m_slot->m_space);
+ m_dmac->set_address_space(&m_slot->space());
m_dmac->set_rom(memregion("bootrom")->base());
}
@@ -327,8 +344,8 @@ READ8_MEMBER( dmac_hdc_device::dmac_scsi_r )
{
switch (offset)
{
- case 0x48: return m_wdc->read(space, 0);
- case 0x49: return m_wdc->read(space, 1);
+ case 0x48: return m_wdc->indir_addr_r();
+ case 0x49: return m_wdc->indir_reg_r();
}
return 0xff;
@@ -338,8 +355,8 @@ WRITE8_MEMBER( dmac_hdc_device::dmac_scsi_w )
{
switch (offset)
{
- case 0x48: m_wdc->write(space, 0, data); break;
- case 0x49: m_wdc->write(space, 1, data); break;
+ case 0x48: m_wdc->indir_addr_w(data); break;
+ case 0x49: m_wdc->indir_reg_w(data); break;
}
}
@@ -356,3 +373,8 @@ WRITE_LINE_MEMBER( dmac_hdc_device::scsi_irq_w )
// should be or'ed with xt-ide IRQ
m_dmac->intx_w(state);
}
+
+WRITE_LINE_MEMBER( dmac_hdc_device::scsi_drq_w )
+{
+ m_dmac->xdreq_w(state);
+}