diff options
Diffstat (limited to 'src/devices/bus/econet/e01.cpp')
-rw-r--r-- | src/devices/bus/econet/e01.cpp | 102 |
1 files changed, 54 insertions, 48 deletions
diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index c50325bdc1b..b7e8bab4002 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,67 @@ 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")); + m_centronics->set_output_latch(cent_data_out); + + 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) + 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_scsibus->set_output_latch(*m_scsi_data_out); - 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) + 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 +397,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 +527,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); |