diff options
Diffstat (limited to 'src/devices/bus/amiga/zorro/a590.cpp')
-rw-r--r-- | src/devices/bus/amiga/zorro/a590.cpp | 52 |
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); +} |