summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/abcbus/hdc.cpp19
-rw-r--r--src/devices/bus/abcbus/hdc.h2
-rw-r--r--src/devices/bus/abcbus/lux21056.cpp62
-rw-r--r--src/devices/bus/abcbus/lux21056.h2
-rw-r--r--src/devices/bus/abcbus/lux4105.cpp34
-rw-r--r--src/devices/bus/amiga/zorro/a590.cpp27
-rw-r--r--src/devices/bus/cbmiec/cmdhd.cpp27
-rw-r--r--src/devices/bus/cbmiec/cmdhd.h4
-rw-r--r--src/devices/bus/econet/e01.cpp118
-rw-r--r--src/devices/bus/econet/e01.h3
-rw-r--r--src/devices/bus/ieee488/d9060.cpp113
-rw-r--r--src/devices/bus/ieee488/d9060.h8
-rw-r--r--src/devices/bus/lpci/pci.h2
-rw-r--r--src/devices/bus/scsi/scsi.cpp50
-rw-r--r--src/devices/bus/scsi/scsi.h12
-rw-r--r--src/devices/bus/x68k/x68k_scsiext.cpp27
-rw-r--r--src/devices/bus/x68k/x68k_scsiext.h1
17 files changed, 276 insertions, 235 deletions
diff --git a/src/devices/bus/abcbus/hdc.cpp b/src/devices/bus/abcbus/hdc.cpp
index ae2339627a0..2febc491d79 100644
--- a/src/devices/bus/abcbus/hdc.cpp
+++ b/src/devices/bus/abcbus/hdc.cpp
@@ -83,15 +83,16 @@ static const z80_daisy_config daisy_chain[] =
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(abc_hdc_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z80_TAG, Z80, 4000000)
- MCFG_DEVICE_PROGRAM_MAP(abc_hdc_mem)
- MCFG_DEVICE_IO_MAP(abc_hdc_io)
- MCFG_Z80_DAISY_CHAIN(daisy_chain)
-
- MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSIDEV_ADD(SASIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_0)
-MACHINE_CONFIG_END
+void abc_hdc_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_maincpu, 4000000);
+ m_maincpu->set_memory_map(&abc_hdc_device::abc_hdc_mem);
+ m_maincpu->set_io_map(&abc_hdc_device::abc_hdc_io);
+ m_maincpu->set_daisy_config(daisy_chain);
+
+ scsi_port_device &scsi(SCSI_PORT(config, SASIBUS_TAG));
+ scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+}
//**************************************************************************
diff --git a/src/devices/bus/abcbus/hdc.h b/src/devices/bus/abcbus/hdc.h
index 2f082286fa4..075caad3778 100644
--- a/src/devices/bus/abcbus/hdc.h
+++ b/src/devices/bus/abcbus/hdc.h
@@ -44,7 +44,7 @@ protected:
virtual void abcbus_cs(uint8_t data) override;
private:
- required_device<cpu_device> m_maincpu;
+ required_device<z80_device> m_maincpu;
void abc_hdc_io(address_map &map);
void abc_hdc_mem(address_map &map);
diff --git a/src/devices/bus/abcbus/lux21056.cpp b/src/devices/bus/abcbus/lux21056.cpp
index 8ed2edcd3a2..090d14b47c5 100644
--- a/src/devices/bus/abcbus/lux21056.cpp
+++ b/src/devices/bus/abcbus/lux21056.cpp
@@ -247,32 +247,42 @@ WRITE_LINE_MEMBER( luxor_55_21056_device::write_sasi_msg )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(luxor_55_21056_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z80_TAG, Z80, XTAL(8'000'000)/2)
- MCFG_DEVICE_PROGRAM_MAP(luxor_55_21056_mem)
- MCFG_DEVICE_IO_MAP(luxor_55_21056_io)
- MCFG_Z80_DAISY_CHAIN(daisy_chain)
-
- MCFG_DEVICE_ADD(Z80DMA_TAG, Z80DMA, XTAL(8'000'000)/2)
- MCFG_Z80DMA_OUT_BUSREQ_CB(INPUTLINE(Z80_TAG, INPUT_LINE_HALT))
- MCFG_Z80DMA_OUT_INT_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
- MCFG_Z80DMA_IN_MREQ_CB(READ8(*this, luxor_55_21056_device, memory_read_byte))
- MCFG_Z80DMA_OUT_MREQ_CB(WRITE8(*this, luxor_55_21056_device, memory_write_byte))
- MCFG_Z80DMA_IN_IORQ_CB(READ8(*this, luxor_55_21056_device, io_read_byte))
- MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(*this, luxor_55_21056_device, io_write_byte))
-
- MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSI_DATA_INPUT_BUFFER("sasi_data_in")
- MCFG_SCSI_REQ_HANDLER(WRITELINE(*this, luxor_55_21056_device, write_sasi_req))
- MCFG_SCSI_IO_HANDLER(WRITELINE(*this, luxor_55_21056_device, write_sasi_io))
- MCFG_SCSI_CD_HANDLER(WRITELINE(*this, luxor_55_21056_device, write_sasi_cd))
- MCFG_SCSI_MSG_HANDLER(WRITELINE(*this, luxor_55_21056_device, write_sasi_msg))
- MCFG_SCSI_BSY_HANDLER(WRITELINE(*this, luxor_55_21056_device, write_sasi_bsy))
- MCFG_SCSIDEV_ADD(SASIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", S1410, SCSI_ID_0)
-
- MCFG_SCSI_OUTPUT_LATCH_ADD("sasi_data_out", SASIBUS_TAG)
- MCFG_DEVICE_ADD("sasi_data_in", INPUT_BUFFER, 0)
-MACHINE_CONFIG_END
+void luxor_55_21056_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_maincpu, XTAL(8'000'000)/2);
+ m_maincpu->set_memory_map(&luxor_55_21056_device::luxor_55_21056_mem);
+ m_maincpu->set_io_map(&luxor_55_21056_device::luxor_55_21056_io);
+ m_maincpu->set_daisy_config(daisy_chain);
+
+ Z80DMA(config, m_dma, XTAL(8'000'000)/2);
+ m_dma->out_busreq_callback().set_inputline(m_maincpu, INPUT_LINE_HALT);
+ m_dma->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_dma->in_mreq_callback().set(FUNC(luxor_55_21056_device::memory_read_byte));
+ m_dma->out_mreq_callback().set(FUNC(luxor_55_21056_device::memory_write_byte));
+ m_dma->in_iorq_callback().set(FUNC(luxor_55_21056_device::io_read_byte));
+ m_dma->out_iorq_callback().set(FUNC(luxor_55_21056_device::io_write_byte));
+
+ SCSI_PORT(config, m_sasibus);
+ m_sasibus->set_data_input_buffer(m_sasi_data_in);
+ m_sasibus->req_handler().set(FUNC(luxor_55_21056_device::write_sasi_req));
+ m_sasibus->io_handler().set(FUNC(luxor_55_21056_device::write_sasi_io));
+ m_sasibus->cd_handler().set(FUNC(luxor_55_21056_device::write_sasi_cd));
+ m_sasibus->msg_handler().set(FUNC(luxor_55_21056_device::write_sasi_msg));
+ m_sasibus->bsy_handler().set(FUNC(luxor_55_21056_device::write_sasi_bsy));
+ m_sasibus->set_slot_device(1, "harddisk", S1410, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+
+ OUTPUT_LATCH(config, m_sasi_data_out);
+ m_sasi_data_out->bit_handler<0>().set(m_sasibus, FUNC(scsi_port_device::write_data0));
+ m_sasi_data_out->bit_handler<1>().set(m_sasibus, FUNC(scsi_port_device::write_data1));
+ m_sasi_data_out->bit_handler<2>().set(m_sasibus, FUNC(scsi_port_device::write_data2));
+ m_sasi_data_out->bit_handler<3>().set(m_sasibus, FUNC(scsi_port_device::write_data3));
+ m_sasi_data_out->bit_handler<4>().set(m_sasibus, FUNC(scsi_port_device::write_data4));
+ m_sasi_data_out->bit_handler<5>().set(m_sasibus, FUNC(scsi_port_device::write_data5));
+ m_sasi_data_out->bit_handler<6>().set(m_sasibus, FUNC(scsi_port_device::write_data6));
+ m_sasi_data_out->bit_handler<7>().set(m_sasibus, FUNC(scsi_port_device::write_data7));
+
+ INPUT_BUFFER(config, m_sasi_data_in);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/abcbus/lux21056.h b/src/devices/bus/abcbus/lux21056.h
index 8961f8864a6..7103fa5ba9c 100644
--- a/src/devices/bus/abcbus/lux21056.h
+++ b/src/devices/bus/abcbus/lux21056.h
@@ -80,7 +80,7 @@ private:
void luxor_55_21056_io(address_map &map);
void luxor_55_21056_mem(address_map &map);
- required_device<cpu_device> m_maincpu;
+ required_device<z80_device> m_maincpu;
required_device<z80dma_device> m_dma;
required_device<scsi_port_device> m_sasibus;
required_device<output_latch_device> m_sasi_data_out;
diff --git a/src/devices/bus/abcbus/lux4105.cpp b/src/devices/bus/abcbus/lux4105.cpp
index f8b9e571a7c..1e89799a302 100644
--- a/src/devices/bus/abcbus/lux4105.cpp
+++ b/src/devices/bus/abcbus/lux4105.cpp
@@ -72,18 +72,28 @@ WRITE_LINE_MEMBER( luxor_4105_device::write_sasi_cd )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(luxor_4105_device::device_add_mconfig)
- MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSI_DATA_INPUT_BUFFER("sasi_data_in")
- MCFG_SCSI_BSY_HANDLER(WRITELINE(*this, luxor_4105_device, write_sasi_bsy))
- MCFG_SCSI_REQ_HANDLER(WRITELINE(*this, luxor_4105_device, write_sasi_req))
- MCFG_SCSI_CD_HANDLER(WRITELINE(*this, luxor_4105_device, write_sasi_cd))
- MCFG_SCSI_IO_HANDLER(WRITELINE(*this, luxor_4105_device, write_sasi_io))
- MCFG_SCSIDEV_ADD(SASIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", S1410, SCSI_ID_0)
-
- MCFG_SCSI_OUTPUT_LATCH_ADD("sasi_data_out", SASIBUS_TAG)
- MCFG_DEVICE_ADD("sasi_data_in", INPUT_BUFFER, 0)
-MACHINE_CONFIG_END
+void luxor_4105_device::device_add_mconfig(machine_config &config)
+{
+ SCSI_PORT(config, m_sasibus);
+ m_sasibus->set_data_input_buffer(m_sasi_data_in);
+ m_sasibus->bsy_handler().set(FUNC(luxor_4105_device::write_sasi_bsy));
+ m_sasibus->req_handler().set(FUNC(luxor_4105_device::write_sasi_req));
+ m_sasibus->cd_handler().set(FUNC(luxor_4105_device::write_sasi_cd));
+ m_sasibus->io_handler().set(FUNC(luxor_4105_device::write_sasi_io));
+ m_sasibus->set_slot_device(1, "harddisk", S1410, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+
+ OUTPUT_LATCH(config, m_sasi_data_out);
+ m_sasi_data_out->bit_handler<0>().set(m_sasibus, FUNC(scsi_port_device::write_data0));
+ m_sasi_data_out->bit_handler<1>().set(m_sasibus, FUNC(scsi_port_device::write_data1));
+ m_sasi_data_out->bit_handler<2>().set(m_sasibus, FUNC(scsi_port_device::write_data2));
+ m_sasi_data_out->bit_handler<3>().set(m_sasibus, FUNC(scsi_port_device::write_data3));
+ m_sasi_data_out->bit_handler<4>().set(m_sasibus, FUNC(scsi_port_device::write_data4));
+ m_sasi_data_out->bit_handler<5>().set(m_sasibus, FUNC(scsi_port_device::write_data5));
+ m_sasi_data_out->bit_handler<6>().set(m_sasibus, FUNC(scsi_port_device::write_data6));
+ m_sasi_data_out->bit_handler<7>().set(m_sasibus, FUNC(scsi_port_device::write_data7));
+
+ INPUT_BUFFER(config, m_sasi_data_in);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/amiga/zorro/a590.cpp b/src/devices/bus/amiga/zorro/a590.cpp
index bc651941b0e..32328b2f944 100644
--- a/src/devices/bus/amiga/zorro/a590.cpp
+++ b/src/devices/bus/amiga/zorro/a590.cpp
@@ -114,18 +114,21 @@ ioport_constructor a2091_device::device_input_ports() const
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(dmac_hdc_device::device_add_mconfig)
- MCFG_DMAC_ADD("dmac", 0)
- MCFG_DMAC_SCSI_READ_HANDLER(READ8(*this, dmac_hdc_device, dmac_scsi_r))
- MCFG_DMAC_SCSI_WRITE_HANDLER(WRITE8(*this, dmac_hdc_device, dmac_scsi_w))
- MCFG_DMAC_INT_HANDLER(WRITELINE(*this, dmac_hdc_device, dmac_int_w))
- MCFG_DMAC_CFGOUT_HANDLER(WRITELINE(*this, dmac_hdc_device, dmac_cfgout_w))
- MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_1)
- MCFG_DEVICE_ADD("wd33c93", WD33C93, 0)
- MCFG_LEGACY_SCSI_PORT("scsi")
- MCFG_WD33C93_IRQ_CB(WRITELINE(*this, dmac_hdc_device, scsi_irq_w))
-MACHINE_CONFIG_END
+void dmac_hdc_device::device_add_mconfig(machine_config &config)
+{
+ amiga_dmac_device &dmac(AMIGA_DMAC(config, "dmac", 0));
+ dmac.scsi_read_handler().set(FUNC(dmac_hdc_device::dmac_scsi_r));
+ dmac.scsi_write_handler().set(FUNC(dmac_hdc_device::dmac_scsi_w));
+ 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));
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbmiec/cmdhd.cpp b/src/devices/bus/cbmiec/cmdhd.cpp
index f46d24c44a4..13d8004445b 100644
--- a/src/devices/bus/cbmiec/cmdhd.cpp
+++ b/src/devices/bus/cbmiec/cmdhd.cpp
@@ -57,11 +57,7 @@ const tiny_rom_entry *cmd_hd_device::device_rom_region() const
}
-//-------------------------------------------------
-// ADDRESS_MAP( cmd_hd_mem )
-//-------------------------------------------------
-
-void cmd_hd_device::cmd_hd_mem(address_map &map)
+void cmd_hd_device::mem_map(address_map &map)
{
map(0x0000, 0x7fff).ram();
map(0x8000, 0xffff).rom().region(M6502_TAG, 0);
@@ -77,18 +73,19 @@ void cmd_hd_device::cmd_hd_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(cmd_hd_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(cmd_hd_mem)
+void cmd_hd_device::device_add_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cmd_hd_device::mem_map);
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, 2000000)
- MCFG_DEVICE_ADD(M6522_2_TAG, VIA6522, 2000000)
- MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
- MCFG_DEVICE_ADD(RTC72421A_TAG, RTC72421, XTAL(32'768))
+ VIA6522(config, M6522_1_TAG, 2000000);
+ VIA6522(config, M6522_2_TAG, 2000000);
+ I8255A(config, I8255A_TAG, 0);
+ RTC72421(config, RTC72421A_TAG, XTAL(32'768));
- MCFG_DEVICE_ADD(SCSIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_0)
-MACHINE_CONFIG_END
+ SCSI_PORT(config, m_scsibus);
+ m_scsibus->set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+}
diff --git a/src/devices/bus/cbmiec/cmdhd.h b/src/devices/bus/cbmiec/cmdhd.h
index 9749f81f547..2cdeada48df 100644
--- a/src/devices/bus/cbmiec/cmdhd.h
+++ b/src/devices/bus/cbmiec/cmdhd.h
@@ -56,12 +56,12 @@ protected:
void cbm_iec_reset(int state) override;
private:
- required_device<cpu_device> m_maincpu;
+ required_device<m6502_device> m_maincpu;
required_device<scsi_port_device> m_scsibus;
DECLARE_WRITE8_MEMBER( led_w );
- void cmd_hd_mem(address_map &map);
+ void mem_map(address_map &map);
};
diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp
index c50325bdc1b..ed897500b54 100644
--- a/src/devices/bus/econet/e01.cpp
+++ b/src/devices/bus/econet/e01.cpp
@@ -173,11 +173,6 @@ FLOPPY_FORMATS_MEMBER( econet_e01_device::floppy_formats_afs )
FLOPPY_AFS_FORMAT
FLOPPY_FORMATS_END0
-static void e01_floppies(device_slot_interface &device)
-{
- device.option_add("35dd", FLOPPY_35_DD); // NEC FD1036 A
-}
-
WRITE_LINE_MEMBER( econet_e01_device::fdc_irq_w )
{
m_fdc_irq = state;
@@ -243,55 +238,81 @@ void econet_e01_device::e01_mem(address_map &map)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(econet_e01_device::device_add_mconfig)
+void econet_e01_device::device_add_mconfig(machine_config &config)
+{
// basic machine hardware
- MCFG_DEVICE_ADD(R65C102_TAG, M65C02, XTAL(8'000'000)/4) // Rockwell R65C102P3
- MCFG_DEVICE_PROGRAM_MAP(e01_mem)
+ M65C02(config, m_maincpu, XTAL(8'000'000)/4); // Rockwell R65C102P3
+ m_maincpu->set_addrmap(AS_PROGRAM, &econet_e01_device::e01_mem);
- MCFG_DEVICE_ADD(HD146818_TAG, MC146818, 32.768_kHz_XTAL)
- MCFG_MC146818_IRQ_HANDLER(WRITELINE(*this, econet_e01_device, rtc_irq_w))
+ MC146818(config, m_rtc, 32.768_kHz_XTAL);
+ m_rtc->irq_callback().set(FUNC(econet_e01_device::rtc_irq_w));
// devices
- MCFG_DEVICE_ADD(R6522_TAG, VIA6522, 8_MHz_XTAL / 4)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8("cent_data_out", output_latch_device, bus_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, econet_e01_device, via_irq_w))
-
- MCFG_DEVICE_ADD(MC6854_TAG, MC6854, 0)
- MCFG_MC6854_OUT_IRQ_CB(WRITELINE(*this, econet_e01_device, adlc_irq_w))
- MCFG_MC6854_OUT_TXD_CB(WRITELINE(*this, econet_e01_device, econet_data_w))
-
- MCFG_DEVICE_ADD(WD2793_TAG, WD2793, 8_MHz_XTAL / 4)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, econet_e01_device, fdc_irq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, econet_e01_device, fdc_drq_w))
- MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", e01_floppies, "35dd", floppy_formats_afs)
- MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", e01_floppies, "35dd", floppy_formats_afs)
- MCFG_SOFTWARE_LIST_ADD("flop_ls_e01", "e01_flop")
-
- MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(R6522_TAG, via6522_device, write_ca1))
-
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
-
- MCFG_DEVICE_ADD(SCSIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSI_DATA_INPUT_BUFFER("scsi_data_in")
- MCFG_SCSI_MSG_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit0))
- MCFG_SCSI_BSY_HANDLER(WRITELINE(*this, econet_e01_device, scsi_bsy_w)) // bit1
+ via6522_device &via(VIA6522(config, R6522_TAG, 8_MHz_XTAL / 4));
+ via.writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
+ via.irq_handler().set(FUNC(econet_e01_device::via_irq_w));
+
+ MC6854(config, m_adlc, 0);
+ m_adlc->out_irq_cb().set(FUNC(econet_e01_device::adlc_irq_w));
+ m_adlc->out_txd_cb().set(FUNC(econet_e01_device::econet_data_w));
+
+ WD2793(config, m_fdc, 8_MHz_XTAL / 4);
+ m_fdc->intrq_wr_callback().set(FUNC(econet_e01_device::fdc_irq_w));
+ m_fdc->drq_wr_callback().set(FUNC(econet_e01_device::fdc_drq_w));
+
+ for (int i = 0; i < 2; i++)
+ {
+ FLOPPY_CONNECTOR(config, m_floppy[i]);
+ m_floppy[i]->option_add("35dd", FLOPPY_35_DD);
+ m_floppy[i]->set_default_option("35dd");
+ m_floppy[i]->set_formats(floppy_formats_afs);
+ }
+
+ software_list_device &softlist(SOFTWARE_LIST(config, "flop_ls_e01"));
+ softlist.set_type("e01_flop", SOFTWARE_LIST_ORIGINAL_SYSTEM);
+
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->ack_handler().set(R6522_TAG, FUNC(via6522_device::write_ca1));
+
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ cent_data_out.bit_handler<0>().set(m_centronics, FUNC(centronics_device::write_data0));
+ cent_data_out.bit_handler<1>().set(m_centronics, FUNC(centronics_device::write_data1));
+ cent_data_out.bit_handler<2>().set(m_centronics, FUNC(centronics_device::write_data2));
+ cent_data_out.bit_handler<3>().set(m_centronics, FUNC(centronics_device::write_data3));
+ cent_data_out.bit_handler<4>().set(m_centronics, FUNC(centronics_device::write_data4));
+ cent_data_out.bit_handler<5>().set(m_centronics, FUNC(centronics_device::write_data5));
+ cent_data_out.bit_handler<6>().set(m_centronics, FUNC(centronics_device::write_data6));
+ cent_data_out.bit_handler<7>().set(m_centronics, FUNC(centronics_device::write_data7));
+
+ SCSI_PORT(config, m_scsibus);
+ m_scsibus->set_data_input_buffer(m_scsi_data_in);
+ m_scsibus->msg_handler().set(m_scsi_ctrl_in, FUNC(input_buffer_device::write_bit0));
+ m_scsibus->bsy_handler().set(FUNC(econet_e01_device::scsi_bsy_w)); // bit1
// bit 2 0
// bit 3 0
// bit 4 NIRQ
- MCFG_SCSI_REQ_HANDLER(WRITELINE(*this, econet_e01_device, scsi_req_w)) // bit5
- MCFG_SCSI_IO_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit6))
- MCFG_SCSI_CD_HANDLER(WRITELINE("scsi_ctrl_in", input_buffer_device, write_bit7))
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_0)
-
- MCFG_SCSI_OUTPUT_LATCH_ADD("scsi_data_out", SCSIBUS_TAG)
- MCFG_DEVICE_ADD("scsi_data_in", INPUT_BUFFER, 0)
- MCFG_DEVICE_ADD("scsi_ctrl_in", INPUT_BUFFER, 0)
+ m_scsibus->req_handler().set(FUNC(econet_e01_device::scsi_req_w)); // bit5
+ m_scsibus->io_handler().set(m_scsi_ctrl_in, FUNC(input_buffer_device::write_bit6));
+ m_scsibus->cd_handler().set(m_scsi_ctrl_in, FUNC(input_buffer_device::write_bit7));
+ m_scsibus->set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+
+ OUTPUT_LATCH(config, m_scsi_data_out);
+ m_scsi_data_out->bit_handler<0>().set(m_scsibus, FUNC(scsi_port_device::write_data0));
+ m_scsi_data_out->bit_handler<1>().set(m_scsibus, FUNC(scsi_port_device::write_data1));
+ m_scsi_data_out->bit_handler<2>().set(m_scsibus, FUNC(scsi_port_device::write_data2));
+ m_scsi_data_out->bit_handler<3>().set(m_scsibus, FUNC(scsi_port_device::write_data3));
+ m_scsi_data_out->bit_handler<4>().set(m_scsibus, FUNC(scsi_port_device::write_data4));
+ m_scsi_data_out->bit_handler<5>().set(m_scsibus, FUNC(scsi_port_device::write_data5));
+ m_scsi_data_out->bit_handler<6>().set(m_scsibus, FUNC(scsi_port_device::write_data6));
+ m_scsi_data_out->bit_handler<7>().set(m_scsibus, FUNC(scsi_port_device::write_data7));
+
+ INPUT_BUFFER(config, m_scsi_data_in);
+ INPUT_BUFFER(config, m_scsi_ctrl_in);
// internal ram
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("64K")
-MACHINE_CONFIG_END
+ RAM(config, m_ram);
+ m_ram->set_default_size("64K");
+}
//-------------------------------------------------
@@ -390,8 +411,7 @@ econet_e01_device::econet_e01_device(const machine_config &mconfig, device_type
, m_scsi_data_out(*this, "scsi_data_out")
, m_scsi_data_in(*this, "scsi_data_in")
, m_scsi_ctrl_in(*this, "scsi_ctrl_in")
- , m_floppy0(*this, WD2793_TAG":0")
- , m_floppy1(*this, WD2793_TAG":1")
+ , m_floppy(*this, WD2793_TAG":%u", 0U)
, m_rom(*this, R65C102_TAG)
, m_centronics(*this, CENTRONICS_TAG)
, m_adlc_ie(0)
@@ -521,8 +541,8 @@ WRITE8_MEMBER( econet_e01_device::floppy_w )
// floppy select
floppy_image_device *floppy = nullptr;
- if (!BIT(data, 0)) floppy = m_floppy0->get_device();
- if (!BIT(data, 1)) floppy = m_floppy1->get_device();
+ if (!BIT(data, 0)) floppy = m_floppy[0]->get_device();
+ if (!BIT(data, 1)) floppy = m_floppy[1]->get_device();
m_fdc->set_floppy(floppy);
diff --git a/src/devices/bus/econet/e01.h b/src/devices/bus/econet/e01.h
index 883664da288..ef74396cd15 100644
--- a/src/devices/bus/econet/e01.h
+++ b/src/devices/bus/econet/e01.h
@@ -92,8 +92,7 @@ private:
required_device<output_latch_device> m_scsi_data_out;
required_device<input_buffer_device> m_scsi_data_in;
required_device<input_buffer_device> m_scsi_ctrl_in;
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
+ required_device_array<floppy_connector, 2> m_floppy;
required_memory_region m_rom;
required_device<centronics_device> m_centronics;
diff --git a/src/devices/bus/ieee488/d9060.cpp b/src/devices/bus/ieee488/d9060.cpp
index c94a89551b5..061037ced8a 100644
--- a/src/devices/bus/ieee488/d9060.cpp
+++ b/src/devices/bus/ieee488/d9060.cpp
@@ -105,16 +105,12 @@ const tiny_rom_entry *d9060_device_base::device_rom_region() const
}
-//-------------------------------------------------
-// ADDRESS_MAP( d9060_main_mem )
-//-------------------------------------------------
-
-void d9060_device_base::d9060_main_mem(address_map &map)
+void d9060_device_base::main_mem(address_map &map)
{
- map(0x0000, 0x007f).mirror(0x0100).m(M6532_0_TAG, FUNC(mos6532_new_device::ram_map));
- map(0x0080, 0x00ff).mirror(0x0100).m(M6532_1_TAG, FUNC(mos6532_new_device::ram_map));
- map(0x0200, 0x021f).mirror(0x0d60).m(M6532_0_TAG, FUNC(mos6532_new_device::io_map));
- map(0x0280, 0x029f).mirror(0x0d60).m(M6532_1_TAG, FUNC(mos6532_new_device::io_map));
+ map(0x0000, 0x007f).mirror(0x0100).m(m_riot0, FUNC(mos6532_new_device::ram_map));
+ map(0x0080, 0x00ff).mirror(0x0100).m(m_riot1, FUNC(mos6532_new_device::ram_map));
+ map(0x0200, 0x021f).mirror(0x0d60).m(m_riot0, FUNC(mos6532_new_device::io_map));
+ map(0x0280, 0x029f).mirror(0x0d60).m(m_riot1, FUNC(mos6532_new_device::io_map));
map(0x1000, 0x13ff).mirror(0x0c00).ram().share("share1");
map(0x2000, 0x23ff).mirror(0x0c00).ram().share("share2");
map(0x3000, 0x33ff).mirror(0x0c00).ram().share("share3");
@@ -123,15 +119,11 @@ void d9060_device_base::d9060_main_mem(address_map &map)
}
-//-------------------------------------------------
-// ADDRESS_MAP( d9060_hdc_mem )
-//-------------------------------------------------
-
-void d9060_device_base::d9060_hdc_mem(address_map &map)
+void d9060_device_base::hdc_mem(address_map &map)
{
map.global_mask(0x1fff);
map(0x0000, 0x007f).mirror(0x300).ram();
- map(0x0080, 0x008f).mirror(0x370).rw(M6522_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write));
+ map(0x0080, 0x008f).mirror(0x370).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write));
map(0x0400, 0x07ff).ram().share("share1");
map(0x0800, 0x0bff).ram().share("share2");
map(0x0c00, 0x0fff).ram().share("share3");
@@ -370,52 +362,61 @@ WRITE8_MEMBER( d9060_device_base::scsi_data_w )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(d9060_device_base::device_add_mconfig)
+void d9060_device_base::device_add_mconfig(machine_config &config)
+{
// DOS
- MCFG_DEVICE_ADD(M6502_DOS_TAG, M6502, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(d9060_main_mem)
+ M6502(config, m_maincpu, XTAL(4'000'000)/4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &d9060_device::main_mem);
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(4'000'000)/4)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, d9060_device_base, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, d9060_device_base, dio_w))
+ MOS6532_NEW(config, m_riot0, XTAL(4'000'000)/4);
+ m_riot0->pa_rd_callback().set(FUNC(d9060_device_base::dio_r));
+ m_riot0->pb_wr_callback().set(FUNC(d9060_device_base::dio_w));
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(4'000'000)/4)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, d9060_device_base, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, d9060_device_base, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, d9060_device_base, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, d9060_device_base, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_DOS_TAG, INPUT_LINE_IRQ0))
+ MOS6532_NEW(config, m_riot1, XTAL(4'000'000)/4);
+ m_riot1->pa_rd_callback().set(FUNC(d9060_device_base::riot1_pa_r));
+ m_riot1->pa_wr_callback().set(FUNC(d9060_device_base::riot1_pa_w));
+ m_riot1->pb_rd_callback().set(FUNC(d9060_device_base::riot1_pb_r));
+ m_riot1->pb_wr_callback().set(FUNC(d9060_device_base::riot1_pb_w));
+ m_riot1->irq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
// controller
- MCFG_DEVICE_ADD(M6502_HDC_TAG, M6502, XTAL(4'000'000)/4)
- MCFG_DEVICE_PROGRAM_MAP(d9060_hdc_mem)
-
- MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(4'000'000)/4)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, d9060_device_base, scsi_data_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, d9060_device_base, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, d9060_device_base, ack_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, d9060_device_base, enable_w))
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE(M6502_HDC_TAG, M6502_IRQ_LINE))
-
- MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0)
- MCFG_SCSI_REQ_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_ca1))
- MCFG_SCSI_CD_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pb2))
- MCFG_SCSI_BSY_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pb3))
- MCFG_SCSI_IO_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pb6))
- MCFG_SCSI_MSG_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pb7))
- MCFG_SCSI_DATA0_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa0))
- MCFG_SCSI_DATA1_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa1))
- MCFG_SCSI_DATA2_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa2))
- MCFG_SCSI_DATA3_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa3))
- MCFG_SCSI_DATA4_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa4))
- MCFG_SCSI_DATA5_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa5))
- MCFG_SCSI_DATA6_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa6))
- MCFG_SCSI_DATA7_HANDLER(WRITELINE(M6522_TAG, via6522_device, write_pa7))
-
- MCFG_SCSI_OUTPUT_LATCH_ADD("sasi_data_out", SASIBUS_TAG)
-
- MCFG_SCSIDEV_ADD(SASIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", D9060HD, SCSI_ID_0)
-MACHINE_CONFIG_END
+ M6502(config, m_hdccpu, XTAL(4'000'000)/4);
+ m_hdccpu->set_addrmap(AS_PROGRAM, &d9060_device::hdc_mem);
+
+ VIA6522(config, m_via, XTAL(4'000'000)/4);
+ m_via->writepa_handler().set(FUNC(d9060_device_base::scsi_data_w));
+ m_via->writepb_handler().set(FUNC(d9060_device_base::via_pb_w));
+ m_via->ca2_handler().set(FUNC(d9060_device_base::ack_w));
+ m_via->cb2_handler().set(FUNC(d9060_device_base::enable_w));
+ m_via->irq_handler().set_inputline(m_hdccpu, M6502_IRQ_LINE);
+
+ SCSI_PORT(config, m_sasibus);
+ m_sasibus->req_handler().set(M6522_TAG, FUNC(via6522_device::write_ca1));
+ m_sasibus->cd_handler().set(M6522_TAG, FUNC(via6522_device::write_pb2));
+ m_sasibus->bsy_handler().set(M6522_TAG, FUNC(via6522_device::write_pb3));
+ m_sasibus->io_handler().set(M6522_TAG, FUNC(via6522_device::write_pb6));
+ m_sasibus->msg_handler().set(M6522_TAG, FUNC(via6522_device::write_pb7));
+ m_sasibus->data0_handler().set(M6522_TAG, FUNC(via6522_device::write_pa0));
+ m_sasibus->data1_handler().set(M6522_TAG, FUNC(via6522_device::write_pa1));
+ m_sasibus->data2_handler().set(M6522_TAG, FUNC(via6522_device::write_pa2));
+ m_sasibus->data3_handler().set(M6522_TAG, FUNC(via6522_device::write_pa3));
+ m_sasibus->data4_handler().set(M6522_TAG, FUNC(via6522_device::write_pa4));
+ m_sasibus->data5_handler().set(M6522_TAG, FUNC(via6522_device::write_pa5));
+ m_sasibus->data6_handler().set(M6522_TAG, FUNC(via6522_device::write_pa6));
+ m_sasibus->data7_handler().set(M6522_TAG, FUNC(via6522_device::write_pa7));
+
+ OUTPUT_LATCH(config, m_sasi_data_out);
+ m_sasi_data_out->bit_handler<0>().set(m_sasibus, FUNC(scsi_port_device::write_data0));
+ m_sasi_data_out->bit_handler<1>().set(m_sasibus, FUNC(scsi_port_device::write_data1));
+ m_sasi_data_out->bit_handler<2>().set(m_sasibus, FUNC(scsi_port_device::write_data2));
+ m_sasi_data_out->bit_handler<3>().set(m_sasibus, FUNC(scsi_port_device::write_data3));
+ m_sasi_data_out->bit_handler<4>().set(m_sasibus, FUNC(scsi_port_device::write_data4));
+ m_sasi_data_out->bit_handler<5>().set(m_sasibus, FUNC(scsi_port_device::write_data5));
+ m_sasi_data_out->bit_handler<6>().set(m_sasibus, FUNC(scsi_port_device::write_data6));
+ m_sasi_data_out->bit_handler<7>().set(m_sasibus, FUNC(scsi_port_device::write_data7));
+
+ m_sasibus->set_slot_device(1, "harddisk", D9060HD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+}
//-------------------------------------------------
diff --git a/src/devices/bus/ieee488/d9060.h b/src/devices/bus/ieee488/d9060.h
index d08d43ab740..b9d720090f2 100644
--- a/src/devices/bus/ieee488/d9060.h
+++ b/src/devices/bus/ieee488/d9060.h
@@ -65,8 +65,8 @@ private:
DECLARE_WRITE_LINE_MEMBER( enable_w );
DECLARE_WRITE8_MEMBER( scsi_data_w );
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_hdccpu;
+ required_device<m6502_device> m_maincpu;
+ required_device<m6502_device> m_hdccpu;
required_device<mos6532_new_device> m_riot0;
required_device<mos6532_new_device> m_riot1;
required_device<via6522_device> m_via;
@@ -86,8 +86,8 @@ private:
uint8_t m_data;
int m_variant;
- void d9060_hdc_mem(address_map &map);
- void d9060_main_mem(address_map &map);
+ void hdc_mem(address_map &map);
+ void main_mem(address_map &map);
};
diff --git a/src/devices/bus/lpci/pci.h b/src/devices/bus/lpci/pci.h
index aa9721435f8..41258ad226f 100644
--- a/src/devices/bus/lpci/pci.h
+++ b/src/devices/bus/lpci/pci.h
@@ -44,7 +44,7 @@ class pci_connector_device : public device_t,
public device_slot_interface
{
public:
- pci_connector_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ pci_connector_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~pci_connector_device();
pci_device_interface *get_device();
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; }
diff --git a/src/devices/bus/x68k/x68k_scsiext.cpp b/src/devices/bus/x68k/x68k_scsiext.cpp
index 1ab4c275153..557d70d3f36 100644
--- a/src/devices/bus/x68k/x68k_scsiext.cpp
+++ b/src/devices/bus/x68k/x68k_scsiext.cpp
@@ -38,25 +38,26 @@ const tiny_rom_entry *x68k_scsiext_device::device_rom_region() const
// device machine config
MACHINE_CONFIG_START(x68k_scsiext_device::device_add_mconfig)
- MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_0)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE2, "harddisk", SCSIHD, SCSI_ID_1)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE3, "harddisk", SCSIHD, SCSI_ID_2)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE4, "harddisk", SCSIHD, SCSI_ID_3)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE5, "harddisk", SCSIHD, SCSI_ID_4)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE6, "harddisk", SCSIHD, SCSI_ID_5)
- MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE7, "harddisk", SCSIHD, SCSI_ID_6)
-
- MCFG_DEVICE_ADD("mb89352", MB89352A, 0)
- MCFG_LEGACY_SCSI_PORT("scsi")
- MCFG_MB89352A_IRQ_CB(WRITELINE(*this, x68k_scsiext_device, irq_w))
- MCFG_MB89352A_DRQ_CB(WRITELINE(*this, x68k_scsiext_device, drq_w))
+ SCSI_PORT(config, m_scsibus);
+ m_scsibus->set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
+ m_scsibus->set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1));
+ m_scsibus->set_slot_device(3, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_2));
+ m_scsibus->set_slot_device(4, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_3));
+ m_scsibus->set_slot_device(5, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4));
+ m_scsibus->set_slot_device(6, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_5));
+ m_scsibus->set_slot_device(7, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6));
+
+ MB89352A(config, m_spc);
+ m_spc->set_scsi_port("scsi");
+ m_spc->irq_cb().set(FUNC(x68k_scsiext_device::irq_w));
+ m_spc->drq_cb().set(FUNC(x68k_scsiext_device::drq_w));
MACHINE_CONFIG_END
x68k_scsiext_device::x68k_scsiext_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, X68K_SCSIEXT, tag, owner, clock)
, device_x68k_expansion_card_interface(mconfig, *this)
, m_slot(nullptr),
+ m_scsibus(*this, "scsi"),
m_spc(*this, "mb89352")
{
}
diff --git a/src/devices/bus/x68k/x68k_scsiext.h b/src/devices/bus/x68k/x68k_scsiext.h
index 40f5b17b6ae..03950d778fd 100644
--- a/src/devices/bus/x68k/x68k_scsiext.h
+++ b/src/devices/bus/x68k/x68k_scsiext.h
@@ -37,6 +37,7 @@ private:
x68k_expansion_slot_device *m_slot;
+ required_device<scsi_port_device> m_scsibus;
required_device<mb89352_device> m_spc;
};