diff options
Diffstat (limited to 'src/devices/bus')
-rw-r--r-- | src/devices/bus/abcbus/hdc.cpp | 19 | ||||
-rw-r--r-- | src/devices/bus/abcbus/hdc.h | 2 | ||||
-rw-r--r-- | src/devices/bus/abcbus/lux21056.cpp | 62 | ||||
-rw-r--r-- | src/devices/bus/abcbus/lux21056.h | 2 | ||||
-rw-r--r-- | src/devices/bus/abcbus/lux4105.cpp | 34 | ||||
-rw-r--r-- | src/devices/bus/amiga/zorro/a590.cpp | 27 | ||||
-rw-r--r-- | src/devices/bus/cbmiec/cmdhd.cpp | 27 | ||||
-rw-r--r-- | src/devices/bus/cbmiec/cmdhd.h | 4 | ||||
-rw-r--r-- | src/devices/bus/econet/e01.cpp | 118 | ||||
-rw-r--r-- | src/devices/bus/econet/e01.h | 3 | ||||
-rw-r--r-- | src/devices/bus/ieee488/d9060.cpp | 113 | ||||
-rw-r--r-- | src/devices/bus/ieee488/d9060.h | 8 | ||||
-rw-r--r-- | src/devices/bus/lpci/pci.h | 2 | ||||
-rw-r--r-- | src/devices/bus/scsi/scsi.cpp | 50 | ||||
-rw-r--r-- | src/devices/bus/scsi/scsi.h | 12 | ||||
-rw-r--r-- | src/devices/bus/x68k/x68k_scsiext.cpp | 27 | ||||
-rw-r--r-- | src/devices/bus/x68k/x68k_scsiext.h | 1 |
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 ¢_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; }; |