From e656487c06087d998e1fbf553d90762bbaa7029b Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 15 Apr 2023 18:22:45 -0400 Subject: Clean up floppy-related code in various drivers with finder arrays --- src/mame/act/apricot.cpp | 12 ++-- src/mame/act/apricotf.cpp | 12 ++-- src/mame/adc/super6.cpp | 8 +-- src/mame/adc/super6.h | 6 +- src/mame/ampro/ampro.cpp | 23 +++----- src/mame/ausnz/applix.cpp | 122 ++++++--------------------------------- src/mame/bondwell/bw12.cpp | 8 +-- src/mame/bondwell/bw12.h | 6 +- src/mame/fairlight/cmi.cpp | 20 +++---- src/mame/hp/hp64k.cpp | 95 ++++++++++++++---------------- src/mame/lsi/octopus.cpp | 22 ++++--- src/mame/luxor/abc1600.cpp | 12 ++-- src/mame/luxor/abc1600.h | 8 +-- src/mame/luxor/ds90.cpp | 28 ++++----- src/mame/motorola/exorciser.cpp | 19 ++---- src/mame/nokia/mikromik.cpp | 4 +- src/mame/nokia/mikromik.h | 6 +- src/mame/osborne/osborne1.cpp | 18 +++--- src/mame/osborne/vixen.cpp | 14 ++--- src/mame/osi/osi.cpp | 8 +-- src/mame/osi/osi.h | 6 +- src/mame/robotron/a5105.cpp | 16 ++--- src/mame/sinclair/beta_m.cpp | 19 ++---- src/mame/sinclair/beta_m.h | 5 +- src/mame/skeleton/gimix.cpp | 125 ++++++++++------------------------------ src/mame/skeleton/xor100.cpp | 15 +++-- src/mame/skeleton/xor100.h | 10 +--- src/mame/sony/smc777.cpp | 12 ++-- src/mame/wang/wangpc.cpp | 90 +++++++++-------------------- 29 files changed, 235 insertions(+), 514 deletions(-) diff --git a/src/mame/act/apricot.cpp b/src/mame/act/apricot.cpp index cd0c37653f7..46b8faa6b8f 100644 --- a/src/mame/act/apricot.cpp +++ b/src/mame/act/apricot.cpp @@ -59,8 +59,7 @@ public: m_rs232(*this, "rs232"), m_centronics(*this, "centronics"), m_fdc(*this, "ic68"), - m_floppy0(*this, "ic68:0"), - m_floppy1(*this, "ic68:1"), + m_floppy(*this, "ic68:%u", 0U), m_palette(*this, "palette"), m_exp(*this, "exp"), m_screen_buffer(*this, "screen_buffer"), @@ -114,8 +113,7 @@ private: required_device m_rs232; required_device m_centronics; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_palette; required_device m_exp; required_shared_ptr m_screen_buffer; @@ -191,7 +189,7 @@ void apricot_state::i8255_portb_w(uint8_t data) floppy_image_device *floppy = nullptr; if (!BIT(data, 5)) - floppy = BIT(data, 6) ? m_floppy1->get_device() : m_floppy0->get_device(); + floppy = m_floppy[BIT(data, 6)]->get_device(); m_fdc->set_floppy(floppy); @@ -472,8 +470,8 @@ void apricot_state::apricot(machine_config &config) WD2797(config, m_fdc, 4_MHz_XTAL / 2); m_fdc->intrq_wr_callback().set(FUNC(apricot_state::fdc_intrq_w)); m_fdc->drq_wr_callback().set(m_iop, FUNC(i8089_device::drq1_w)); - FLOPPY_CONNECTOR(config, "ic68:0", apricot_floppies, "d32w", apricot_state::floppy_formats); - FLOPPY_CONNECTOR(config, "ic68:1", apricot_floppies, "d32w", apricot_state::floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], apricot_floppies, "d32w", apricot_state::floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], apricot_floppies, "d32w", apricot_state::floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("apricot_flop"); diff --git a/src/mame/act/apricotf.cpp b/src/mame/act/apricotf.cpp index 1785799f91d..3d2226707e6 100644 --- a/src/mame/act/apricotf.cpp +++ b/src/mame/act/apricotf.cpp @@ -74,8 +74,7 @@ public: , m_ctc(*this, Z80CTC_TAG) , m_sio(*this, Z80SIO2_TAG) , m_fdc(*this, WD2797_TAG) - , m_floppy0(*this, WD2797_TAG ":0") - , m_floppy1(*this, WD2797_TAG ":1") + , m_floppy(*this, WD2797_TAG ":%u", 0U) , m_centronics(*this, CENTRONICS_TAG) , m_cent_data_out(*this, "cent_data_out") , m_irqs(*this, "irqs") @@ -95,8 +94,7 @@ private: required_device m_ctc; required_device m_sio; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_centronics; required_device m_cent_data_out; required_device m_irqs; @@ -217,15 +215,15 @@ void f1_state::system_w(offs_t offset, u8 data) break; case 1: // drive select - m_fdc->set_floppy(BIT(data, 0) ? m_floppy0->get_device() : m_floppy1->get_device()); + m_fdc->set_floppy(m_floppy[!BIT(data, 0)]->get_device()); break; case 3: // drive head load break; case 5: // drive motor on - m_floppy0->get_device()->mon_w(!BIT(data, 0)); - m_floppy1->get_device()->mon_w(!BIT(data, 0)); + m_floppy[0]->get_device()->mon_w(!BIT(data, 0)); + m_floppy[1]->get_device()->mon_w(!BIT(data, 0)); break; case 7: // video lines (1=200, 0=256) diff --git a/src/mame/adc/super6.cpp b/src/mame/adc/super6.cpp index 7cf1bb92f3c..596f6fc705e 100644 --- a/src/mame/adc/super6.cpp +++ b/src/mame/adc/super6.cpp @@ -233,9 +233,9 @@ void super6_state::fdc_w(uint8_t data) floppy_image_device *floppy = nullptr; if ((data & 3) == 0) - floppy = m_floppy0->get_device(); + floppy = m_floppy[0]->get_device(); if ((data & 3) == 1) - floppy = m_floppy1->get_device(); + floppy = m_floppy[1]->get_device(); m_fdc->set_floppy(floppy); if (floppy) floppy->mon_w(0); @@ -473,8 +473,8 @@ void super6_state::super6(machine_config &config) m_fdc->intrq_wr_callback().set(FUNC(super6_state::fdc_intrq_w)); m_fdc->drq_wr_callback().set(FUNC(super6_state::fdc_drq_w)); - FLOPPY_CONNECTOR(config, m_floppy0, super6_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, super6_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[0], super6_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[1], super6_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats).enable_sound(true); Z80DART(config, m_dart, 24_MHz_XTAL / 4); m_dart->out_txda_callback().set(RS232_A_TAG, FUNC(rs232_port_device::write_txd)); diff --git a/src/mame/adc/super6.h b/src/mame/adc/super6.h index a50be58c2aa..2ca923618b5 100644 --- a/src/mame/adc/super6.h +++ b/src/mame/adc/super6.h @@ -40,8 +40,7 @@ public: , m_fdc(*this, WD2793_TAG) , m_brg(*this, BR1945_TAG) , m_ram(*this, RAM_TAG) - , m_floppy0(*this, WD2793_TAG":0") - , m_floppy1(*this, WD2793_TAG":1") + , m_floppy(*this, WD2793_TAG":%u", 0U) , m_rom(*this, Z80_TAG) , m_j7(*this, "J7") { } @@ -77,8 +76,7 @@ private: required_device m_fdc; required_device m_brg; required_device m_ram; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_region_ptr m_rom; required_ioport m_j7; diff --git a/src/mame/ampro/ampro.cpp b/src/mame/ampro/ampro.cpp index 812f218fa14..d720153c3b1 100644 --- a/src/mame/ampro/ampro.cpp +++ b/src/mame/ampro/ampro.cpp @@ -47,10 +47,7 @@ public: , m_dart(*this, "dart") , m_ctc(*this, "ctc") , m_fdc(*this, "fdc") - , m_floppy0(*this, "fdc:0") - , m_floppy1(*this, "fdc:1") - , m_floppy2(*this, "fdc:2") - , m_floppy3(*this, "fdc:3") + , m_floppy(*this, "fdc:%u", 0U) , m_ncr(*this, "scsi:7:ncr") , m_printer(*this, "printer") { } @@ -79,10 +76,7 @@ private: required_device m_dart; required_device m_ctc; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; + required_device_array m_floppy; required_device m_ncr; required_device m_printer; }; @@ -99,10 +93,9 @@ void ampro_state::port00_w(uint8_t data) m_bank1->set_entry(BIT(~data, 6)); m_fdc->dden_w(BIT(data, 5)); 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, 2)) floppy = m_floppy2->get_device(); - if (BIT(data, 3)) floppy = m_floppy3->get_device(); + for (int n = 0; n < 4; n++) + if (BIT(data, n)) + floppy = m_floppy[n]->get_device(); m_fdc->set_floppy(floppy); if (floppy) floppy->ss_w(BIT(data, 4)); @@ -248,10 +241,8 @@ void ampro_state::ampro(machine_config &config) //m_fdc->intrq_wr_callback().set(m_ctc, FUNC(z80ctc_device::trg3)); // only if JMP2-3 shorted //m_fdc->drq_wr_callback().set(m_dart, FUNC(z80dart_device::ria_w)); // only if JMP7 shorted m_fdc->ready_wr_callback().set(m_dart, FUNC(z80dart_device::dcdb_w)); // actually from the drive, and not used by the FDC at all - FLOPPY_CONNECTOR(config, "fdc:0", ampro_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:1", ampro_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:2", ampro_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:3", ampro_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + for (auto &floppy : m_floppy) + FLOPPY_CONNECTOR(config, floppy, ampro_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); SOFTWARE_LIST(config, "flop_list").set_original("ampro"); NSCSI_BUS(config, "scsi"); diff --git a/src/mame/ausnz/applix.cpp b/src/mame/ausnz/applix.cpp index b1fed2a8d84..9f7e274f070 100644 --- a/src/mame/ausnz/applix.cpp +++ b/src/mame/ausnz/applix.cpp @@ -70,34 +70,15 @@ public: , m_centronics(*this, "centronics") , m_cent_data_out(*this, "cent_data_out") , m_fdc(*this, "fdc") - , m_floppy0(*this, "fdc:0") - , m_floppy1(*this, "fdc:1") + , m_floppy(*this, "fdc:%u", 0U) , m_ldac(*this, "ldac") , m_rdac(*this, "rdac") , m_cass(*this, "cassette") , m_io_dsw(*this, "DSW") , m_io_fdc(*this, "FDC") , m_io_k0f(*this, "K0f") - , m_io_k300(*this, "K30_0") - , m_io_k301(*this, "K30_1") - , m_io_k310(*this, "K31_0") - , m_io_k311(*this, "K31_1") - , m_io_k320(*this, "K32_0") - , m_io_k321(*this, "K32_1") - , m_io_k330(*this, "K33_0") - , m_io_k331(*this, "K33_1") - , m_io_k340(*this, "K34_0") - , m_io_k341(*this, "K34_1") - , m_io_k350(*this, "K35_0") - , m_io_k351(*this, "K35_1") - , m_io_k360(*this, "K36_0") - , m_io_k361(*this, "K36_1") - , m_io_k370(*this, "K37_0") - , m_io_k371(*this, "K37_1") - , m_io_k380(*this, "K38_0") - , m_io_k390(*this, "K39_0") - , m_io_k3a0(*this, "K3a_0") - , m_io_k3b0(*this, "K3b_0") + , m_io_k3x0(*this, "K3%x_0", 0U) + , m_io_k3x1(*this, "K3%x_1", 0U) , m_io_k0b(*this, "K0b") , m_expansion(*this, "expansion") , m_palette(*this, "palette") @@ -184,34 +165,15 @@ private: required_device m_centronics; required_device m_cent_data_out; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_ldac; required_device m_rdac; required_device m_cass; required_ioport m_io_dsw; required_ioport m_io_fdc; required_ioport m_io_k0f; - required_ioport m_io_k300; - required_ioport m_io_k301; - required_ioport m_io_k310; - required_ioport m_io_k311; - required_ioport m_io_k320; - required_ioport m_io_k321; - required_ioport m_io_k330; - required_ioport m_io_k331; - required_ioport m_io_k340; - required_ioport m_io_k341; - required_ioport m_io_k350; - required_ioport m_io_k351; - required_ioport m_io_k360; - required_ioport m_io_k361; - required_ioport m_io_k370; - required_ioport m_io_k371; - required_ioport m_io_k380; - required_ioport m_io_k390; - required_ioport m_io_k3a0; - required_ioport m_io_k3b0; + required_ioport_array<12> m_io_k3x0; + required_ioport_array<8> m_io_k3x1; required_ioport m_io_k0b; required_shared_ptr m_expansion; @@ -370,8 +332,8 @@ void applix_state::port08_w(u8 data) membank("bank1")->set_entry(BIT(data, 6)); floppy_image_device *floppy = nullptr; - if (BIT(data, 2)) floppy = m_floppy0->get_device(); - if (BIT(data, 3)) floppy = m_floppy1->get_device(); + if (BIT(data, 2)) floppy = m_floppy[0]->get_device(); + if (BIT(data, 3)) floppy = m_floppy[1]->get_device(); m_fdc->set_floppy(floppy); @@ -943,8 +905,8 @@ void applix_state::applix(machine_config &config) m_cass->add_route(ALL_OUTPUTS, "lspeaker", 0.10); WD1772(config, m_fdc, 16_MHz_XTAL / 2); //connected to Z80H clock pin - FLOPPY_CONNECTOR(config, "fdc:0", applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:1", applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[0], applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[1], applix_floppies, "35dd", applix_state::floppy_formats).enable_sound(true); TIMER(config, "applix_c").configure_periodic(FUNC(applix_state::cass_timer), attotime::from_hz(100000)); scc8530_device &scc(SCC8530N(config, "scc", 30_MHz_XTAL / 8)); @@ -1048,41 +1010,13 @@ void applix_state::internal_data_write(offs_t offset, u8 data) case 0x0f: m_p1_data = m_io_k0f->read(); break; - case 0x30: - m_p1_data = m_io_k300->read(); - break; - case 0x31: - m_p1_data = m_io_k310->read(); - break; - case 0x32: - m_p1_data = m_io_k320->read(); - break; - case 0x33: - m_p1_data = m_io_k330->read(); - break; - case 0x34: - m_p1_data = m_io_k340->read(); - break; - case 0x35: - m_p1_data = m_io_k350->read(); - break; - case 0x36: - m_p1_data = m_io_k360->read(); + case 0x30: case 0x31: case 0x32: case 0x33: + case 0x34: case 0x35: case 0x36: + case 0x38: case 0x39: case 0x3a: case 0x3b: + m_p1_data = m_io_k3x0[m_p1 - 0x30]->read(); break; case 0x37: - m_p1_data = m_io_k370->read() | (m_io_k360->read() & 0x01); - break; - case 0x38: - m_p1_data = m_io_k380->read(); - break; - case 0x39: - m_p1_data = m_io_k390->read(); - break; - case 0x3a: - m_p1_data = m_io_k3a0->read(); - break; - case 0x3b: - m_p1_data = m_io_k3b0->read(); + m_p1_data = m_io_k3x0[7]->read() | (m_io_k3x0[6]->read() & 0x01); break; } } @@ -1095,29 +1029,9 @@ void applix_state::internal_data_write(offs_t offset, u8 data) case 0x0b: m_p1_data = m_io_k0b->read(); break; - case 0x30: - m_p1_data = m_io_k301->read(); - break; - case 0x31: - m_p1_data = m_io_k311->read(); - break; - case 0x32: - m_p1_data = m_io_k321->read(); - break; - case 0x33: - m_p1_data = m_io_k331->read(); - break; - case 0x34: - m_p1_data = m_io_k341->read(); - break; - case 0x35: - m_p1_data = m_io_k351->read(); - break; - case 0x36: - m_p1_data = m_io_k361->read(); - break; - case 0x37: - m_p1_data = m_io_k371->read(); + case 0x30: case 0x31: case 0x32: case 0x33: + case 0x34: case 0x35: case 0x36: case 0x37: + m_p1_data = m_io_k3x1[m_p1 - 0x30]->read(); break; case 0x38: m_p1_data = 0xff; diff --git a/src/mame/bondwell/bw12.cpp b/src/mame/bondwell/bw12.cpp index be39a356ad7..b81e7bcf380 100644 --- a/src/mame/bondwell/bw12.cpp +++ b/src/mame/bondwell/bw12.cpp @@ -78,8 +78,8 @@ void bw12_state::floppy_motor_on_off() if (m_motor0 || m_motor1) { m_motor_on = 1; - m_floppy0->mon_w(0); - m_floppy1->mon_w(0); + m_floppy[0]->mon_w(0); + m_floppy[1]->mon_w(0); m_floppy_timer->adjust(attotime::never); } else @@ -90,8 +90,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(bw12_state::floppy_motor_off_tick) { if (m_motor0 || m_motor1) return; - m_floppy0->mon_w(1); - m_floppy1->mon_w(1); + m_floppy[0]->mon_w(1); + m_floppy[1]->mon_w(1); m_motor_on = 0; } diff --git a/src/mame/bondwell/bw12.h b/src/mame/bondwell/bw12.h index 028560e2169..72e55a57b43 100644 --- a/src/mame/bondwell/bw12.h +++ b/src/mame/bondwell/bw12.h @@ -53,8 +53,7 @@ public: , m_palette(*this, "palette") , m_centronics(*this, CENTRONICS_TAG) , m_ram(*this, RAM_TAG) - , m_floppy0(*this, UPD765_TAG ":1:525dd") - , m_floppy1(*this, UPD765_TAG ":2:525dd") + , m_floppy(*this, UPD765_TAG ":%u:525dd", 1U) , m_floppy_timer(*this, FLOPPY_TIMER_TAG) , m_rom(*this, Z80_TAG) , m_char_rom(*this, "chargen") @@ -112,8 +111,7 @@ protected: required_device m_palette; required_device m_centronics; required_device m_ram; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_floppy_timer; required_memory_region m_rom; required_memory_region m_char_rom; diff --git a/src/mame/fairlight/cmi.cpp b/src/mame/fairlight/cmi.cpp index 77dae268f3c..c774ae3b709 100644 --- a/src/mame/fairlight/cmi.cpp +++ b/src/mame/fairlight/cmi.cpp @@ -209,8 +209,7 @@ public: , m_midi_out(*this, "midi_out_%u", 1U) , m_midi_in(*this, "midi_in_%u", 1U) , m_qfc9_region(*this, "qfc9") - , m_floppy0(*this, "wd1791:0") - , m_floppy1(*this, "wd1791:1") + , m_floppy(*this, "wd1791:%u", 0U) , m_wd1791(*this, "wd1791") , m_channels(*this, "cmi01a_%u", 0) , m_screen(*this, "screen") @@ -375,8 +374,7 @@ protected: required_device_array m_midi_in; required_memory_region m_qfc9_region; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_wd1791; required_device_array m_channels; @@ -1318,14 +1316,10 @@ void cmi_state::write_fdc_ctrl(u8 data) int drive = data & 1; int side = BIT(data, 5) ? 1 : 0; - switch (drive) - { - case 0: m_wd1791->set_floppy(m_floppy0->get_device()); break; - case 1: m_wd1791->set_floppy(m_floppy1->get_device()); break; - } + m_wd1791->set_floppy(m_floppy[drive]->get_device()); - if (m_floppy0->get_device()) m_floppy0->get_device()->ss_w(side); - if (m_floppy1->get_device()) m_floppy1->get_device()->ss_w(side); + if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->ss_w(side); + if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->ss_w(side); m_wd1791->dden_w(BIT(data, 7) ? true : false); @@ -2201,8 +2195,8 @@ void cmi_state::cmi2x(machine_config &config) FD1791(config, m_wd1791, 16_MHz_XTAL / 8); // wd1791_interface m_wd1791->intrq_wr_callback().set(FUNC(cmi_state::wd1791_irq)); m_wd1791->drq_wr_callback().set(FUNC(cmi_state::wd1791_drq)); - FLOPPY_CONNECTOR(config, "wd1791:0", cmi2x_floppies, "8dsdd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "wd1791:1", cmi2x_floppies, "8dsdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], cmi2x_floppies, "8dsdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], cmi2x_floppies, "8dsdd", floppy_image_device::default_mfm_floppy_formats); SPEAKER(config, "mono").front_center(); diff --git a/src/mame/hp/hp64k.cpp b/src/mame/hp/hp64k.cpp index 695464a4a5e..f51a348b77c 100644 --- a/src/mame/hp/hp64k.cpp +++ b/src/mame/hp/hp64k.cpp @@ -250,15 +250,10 @@ private: required_device m_cpu; required_device m_crtc; required_device m_palette; - required_ioport m_io_key0; - required_ioport m_io_key1; - required_ioport m_io_key2; - required_ioport m_io_key3; + required_ioport_array<4> m_io_key; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_ss0; - required_device m_ss1; + required_device_array m_floppy; + required_device_array m_ss; required_ioport m_rear_panel_sw; required_ioport m_rs232_sw; required_device m_beeper; @@ -302,8 +297,7 @@ private: bool m_floppy_mdci; bool m_floppy_intrq; bool m_floppy_drq; - bool m_floppy0_wpt; - bool m_floppy1_wpt; + bool m_floppy_wpt[2]; uint8_t m_floppy_drv_ctrl; // U39 uint8_t m_floppy_status; // U25 @@ -378,15 +372,10 @@ hp64k_state::hp64k_state(const machine_config &mconfig, device_type type, const m_cpu(*this , "cpu"), m_crtc(*this , "crtc"), m_palette(*this , "palette"), - m_io_key0(*this , "KEY0"), - m_io_key1(*this , "KEY1"), - m_io_key2(*this , "KEY2"), - m_io_key3(*this , "KEY3"), + m_io_key(*this , "KEY%u" , 0U), m_fdc(*this , "fdc"), - m_floppy0(*this , "fdc:0"), - m_floppy1(*this , "fdc:1"), - m_ss0(*this , "fdc_rdy0"), - m_ss1(*this , "fdc_rdy1"), + m_floppy(*this , "fdc:%u" , 0U), + m_ss(*this , "fdc_rdy%u" , 0U), m_rear_panel_sw(*this , "rear_sw"), m_rs232_sw(*this , "rs232_sw"), m_beeper(*this , "beeper"), @@ -430,8 +419,8 @@ void hp64k_state::machine_reset() m_floppy_drv_ctrl = ~0; m_floppy_if_state = HP64K_FLPST_IDLE; m_current_floppy = nullptr; - m_floppy0_wpt = false; - m_floppy1_wpt = false; + m_floppy_wpt[0] = false; + m_floppy_wpt[1] = false; m_beeper->set_state(0); m_baud_rate->str_w((m_s5_sw->read() >> 1) & 0xf); m_16x_clk = (m_rs232_sw->read() & 0x02) != 0; @@ -554,10 +543,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(hp64k_state::hp64k_kb_scan) unsigned i; ioport_value input[ 4 ]; - input[ 0 ] = m_io_key0->read(); - input[ 1 ] = m_io_key1->read(); - input[ 2 ] = m_io_key2->read(); - input[ 3 ] = m_io_key3->read(); + input[ 0 ] = m_io_key[ 0 ]->read(); + input[ 1 ] = m_io_key[ 1 ]->read(); + input[ 2 ] = m_io_key[ 2 ]->read(); + input[ 3 ] = m_io_key[ 3 ]->read(); for (i = 0; i < 128; i++) { if (++m_kb_row_col >= 128) { @@ -854,8 +843,8 @@ void hp64k_state::hp64k_update_floppy_irq(void) void hp64k_state::hp64k_update_drv_ctrl(void) { - floppy_image_device *floppy0 = m_floppy0->get_device(); - floppy_image_device *floppy1 = m_floppy1->get_device(); + floppy_image_device *floppy0 = m_floppy[0]->get_device(); + floppy_image_device *floppy1 = m_floppy[1]->get_device(); floppy0->mon_w(BIT(m_floppy_drv_ctrl , 1)); floppy1->mon_w(BIT(m_floppy_drv_ctrl , 4)); @@ -881,9 +870,9 @@ void hp64k_state::hp64k_update_drv_ctrl(void) floppy_image_device *new_drive; if (!BIT(m_floppy_drv_ctrl , 3)) { - new_drive = m_floppy1->get_device(); + new_drive = m_floppy[1]->get_device(); } else if (!BIT(m_floppy_drv_ctrl , 0)) { - new_drive = m_floppy0->get_device(); + new_drive = m_floppy[0]->get_device(); } else { new_drive = nullptr; } @@ -921,10 +910,10 @@ WRITE_LINE_MEMBER(hp64k_state::hp64k_floppy1_rdy) void hp64k_state::hp64k_floppy_idx_cb(floppy_image_device *floppy , int state) { - if (floppy == m_floppy0->get_device()) { - m_ss0->a_w(!state); - } else if (floppy == m_floppy1->get_device()) { - m_ss1->a_w(!state); + if (floppy == m_floppy[0]->get_device()) { + m_ss[0]->a_w(!state); + } else if (floppy == m_floppy[1]->get_device()) { + m_ss[1]->a_w(!state); } if (floppy == m_current_floppy) { @@ -934,9 +923,9 @@ void hp64k_state::hp64k_floppy_idx_cb(floppy_image_device *floppy , int state) void hp64k_state::hp64k_floppy_wpt_cb(floppy_image_device *floppy , int state) { - if (floppy == m_floppy0->get_device()) { + if (floppy == m_floppy[0]->get_device()) { logerror("floppy0_wpt %d\n" , state); - if (m_floppy0_wpt && !state) { + if (m_floppy_wpt[0] && !state) { BIT_SET(m_floppy_status , 2); hp64k_update_floppy_irq(); } @@ -945,10 +934,10 @@ void hp64k_state::hp64k_floppy_wpt_cb(floppy_image_device *floppy , int state) } else { BIT_CLR(m_floppy_status, 1); } - m_floppy0_wpt = state; - } else if (floppy == m_floppy1->get_device()) { + m_floppy_wpt[0] = state; + } else if (floppy == m_floppy[1]->get_device()) { logerror("floppy1_wpt %d\n" , state); - if (m_floppy1_wpt && !state) { + if (m_floppy_wpt[1] && !state) { BIT_SET(m_floppy_status , 5); hp64k_update_floppy_irq(); } @@ -957,7 +946,7 @@ void hp64k_state::hp64k_floppy_wpt_cb(floppy_image_device *floppy , int state) } else { BIT_CLR(m_floppy_status, 4); } - m_floppy1_wpt = state; + m_floppy_wpt[1] = state; } } @@ -1414,22 +1403,22 @@ void hp64k_state::hp64k(machine_config &config) FLOPPY_CONNECTOR(config, "fdc:0", hp64k_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats, true); FLOPPY_CONNECTOR(config, "fdc:1", hp64k_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats, true); - TTL74123(config, m_ss0, 0); - m_ss0->set_connection_type(TTL74123_NOT_GROUNDED_NO_DIODE); - m_ss0->set_resistor_value(RES_K(68.1)); + TTL74123(config, m_ss[0], 0); + m_ss[0]->set_connection_type(TTL74123_NOT_GROUNDED_NO_DIODE); + m_ss[0]->set_resistor_value(RES_K(68.1)); // Warning! Duration formula is not correct for LS123, actual capacitor is 10 uF - m_ss0->set_capacitor_value(CAP_U(16)); - m_ss0->set_b_pin_value(1); - m_ss0->set_clear_pin_value(1); - m_ss0->out_cb().set(FUNC(hp64k_state::hp64k_floppy0_rdy)); - - TTL74123(config, m_ss1, 0); - m_ss1->set_connection_type(TTL74123_NOT_GROUNDED_NO_DIODE); - m_ss1->set_resistor_value(RES_K(68.1)); - m_ss1->set_capacitor_value(CAP_U(16)); - m_ss1->set_b_pin_value(1); - m_ss1->set_clear_pin_value(1); - m_ss1->out_cb().set(FUNC(hp64k_state::hp64k_floppy1_rdy)); + m_ss[0]->set_capacitor_value(CAP_U(16)); + m_ss[0]->set_b_pin_value(1); + m_ss[0]->set_clear_pin_value(1); + m_ss[0]->out_cb().set(FUNC(hp64k_state::hp64k_floppy0_rdy)); + + TTL74123(config, m_ss[1], 0); + m_ss[1]->set_connection_type(TTL74123_NOT_GROUNDED_NO_DIODE); + m_ss[1]->set_resistor_value(RES_K(68.1)); + m_ss[1]->set_capacitor_value(CAP_U(16)); + m_ss[1]->set_b_pin_value(1); + m_ss[1]->set_clear_pin_value(1); + m_ss[1]->out_cb().set(FUNC(hp64k_state::hp64k_floppy1_rdy)); SPEAKER(config, "mono").front_center(); BEEP(config, m_beeper, 2500).add_route(ALL_OUTPUTS, "mono", 1.00); diff --git a/src/mame/lsi/octopus.cpp b/src/mame/lsi/octopus.cpp index 9844e2c0f6c..f1ecfa114a6 100644 --- a/src/mame/lsi/octopus.cpp +++ b/src/mame/lsi/octopus.cpp @@ -155,8 +155,7 @@ public: m_pic2(*this, "pic_slave"), m_rtc(*this, "rtc"), m_fdc(*this, "fdc"), - m_floppy0(*this, "fdc:0"), - m_floppy1(*this, "fdc:1"), + m_floppy(*this, "fdc:%u", 0U), m_kb_uart(*this, "keyboard"), m_pit(*this, "pit"), m_ppi(*this, "ppi"), @@ -243,8 +242,7 @@ private: required_device m_pic2; required_device m_rtc; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_kb_uart; required_device m_pit; required_device m_ppi; @@ -560,12 +558,12 @@ void octopus_state::cntl_w(uint8_t data) switch(m_current_drive) { case 1: - m_fdc->set_floppy(m_floppy0->get_device()); - m_floppy0->get_device()->mon_w(0); + m_fdc->set_floppy(m_floppy[0]->get_device()); + m_floppy[0]->get_device()->mon_w(0); break; case 2: - m_fdc->set_floppy(m_floppy1->get_device()); - m_floppy1->get_device()->mon_w(0); + m_fdc->set_floppy(m_floppy[1]->get_device()); + m_floppy[1]->get_device()->mon_w(0); break; } logerror("Selected floppy drive %i (%02x)\n",m_current_drive,data); @@ -586,10 +584,10 @@ void octopus_state::gpo_w(uint8_t data) switch(m_current_drive) { case 1: - m_floppy0->get_device()->ss_w((data & 0x04) >> 2); + m_floppy[0]->get_device()->ss_w((data & 0x04) >> 2); break; case 2: - m_floppy1->get_device()->ss_w((data & 0x04) >> 2); + m_floppy[1]->get_device()->ss_w((data & 0x04) >> 2); break; default: logerror("Attempted to set side on unknown drive %i\n",m_current_drive); @@ -967,8 +965,8 @@ void octopus_state::octopus(machine_config &config) FD1793(config, m_fdc, 16_MHz_XTAL / 8); m_fdc->intrq_wr_callback().set(m_pic1, FUNC(pic8259_device::ir5_w)); m_fdc->drq_wr_callback().set(m_dma2, FUNC(am9517a_device::dreq1_w)); - FLOPPY_CONNECTOR(config, "fdc:0", octopus_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "fdc:1", octopus_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], octopus_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], octopus_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats); SOFTWARE_LIST(config, "fd_list").set_original("octopus"); PIT8253(config, m_pit, 0); diff --git a/src/mame/luxor/abc1600.cpp b/src/mame/luxor/abc1600.cpp index d62b677f5dc..edb9f34e637 100644 --- a/src/mame/luxor/abc1600.cpp +++ b/src/mame/luxor/abc1600.cpp @@ -364,9 +364,9 @@ void abc1600_state::fw0_w(uint8_t data) // drive 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, 2)) floppy = m_floppy2->get_device(); + for (int n = 0; n < 3; n++) + if (BIT(data, n)) + floppy = m_floppy[n]->get_device(); m_fdc->set_floppy(floppy); @@ -1025,9 +1025,9 @@ void abc1600_state::abc1600(machine_config &config) m_fdc->intrq_wr_callback().set(m_cio, FUNC(z8536_device::pb7_w)); m_fdc->drq_wr_callback().set(FUNC(abc1600_state::update_drdy0)); - FLOPPY_CONNECTOR(config, SAB1797_02P_TAG":0", abc1600_floppies, nullptr, abc1600_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, SAB1797_02P_TAG":1", abc1600_floppies, nullptr, abc1600_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, SAB1797_02P_TAG":2", abc1600_floppies, "525qd", abc1600_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[0], abc1600_floppies, nullptr, abc1600_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[1], abc1600_floppies, nullptr, abc1600_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[2], abc1600_floppies, "525qd", abc1600_state::floppy_formats).enable_sound(true); ABCBUS_SLOT(config, m_bus0i, 64_MHz_XTAL / 16, abc1600bus_cards, nullptr); m_bus0i->irq_callback().set(m_cio, FUNC(z8536_device::pa7_w)); diff --git a/src/mame/luxor/abc1600.h b/src/mame/luxor/abc1600.h index ca3caddb2fa..5359b9374ee 100644 --- a/src/mame/luxor/abc1600.h +++ b/src/mame/luxor/abc1600.h @@ -74,9 +74,7 @@ public: m_rtc(*this, E050_C16PC_TAG), m_nvram(*this, NMC9306_TAG), m_ram(*this, RAM_TAG), - m_floppy0(*this, SAB1797_02P_TAG":0"), - m_floppy1(*this, SAB1797_02P_TAG":1"), - m_floppy2(*this, SAB1797_02P_TAG":2"), + m_floppy(*this, SAB1797_02P_TAG":%u", 0U), m_bus0i(*this, BUS0I_TAG), m_bus0x(*this, BUS0X_TAG), m_bus1(*this, BUS1_TAG), @@ -101,9 +99,7 @@ private: required_device m_rtc; required_device m_nvram; required_device m_ram; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; + required_device_array m_floppy; required_device m_bus0i; required_device m_bus0x; required_device m_bus1; diff --git a/src/mame/luxor/ds90.cpp b/src/mame/luxor/ds90.cpp index 43e6e167d2f..ffd137378b9 100644 --- a/src/mame/luxor/ds90.cpp +++ b/src/mame/luxor/ds90.cpp @@ -50,13 +50,9 @@ public: m_dmac(*this, MC68450_TAG), m_cio(*this, Z8536A_TAG), m_nvram(*this, NMC9306_TAG), - m_scc0(*this, Z8530A_0_TAG), - m_scc1(*this, Z8530A_1_TAG), - m_scc2(*this, Z8530A_2_TAG), + m_scc(*this, {Z8530A_0_TAG, Z8530A_1_TAG, Z8530A_2_TAG}), m_fdc(*this, FD1797_TAG), - m_floppy0(*this, FD1797_TAG":0"), - m_floppy1(*this, FD1797_TAG":1"), - m_floppy2(*this, FD1797_TAG":2"), + m_floppy(*this, FD1797_TAG":%u", 0U), m_sasi(*this, "sasi:7:scsicb") { } @@ -68,13 +64,9 @@ private: required_device m_dmac; required_device m_cio; required_device m_nvram; - required_device m_scc0; - required_device m_scc1; - required_device m_scc2; + required_device_array m_scc; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; + required_device_array m_floppy; required_device m_sasi; virtual void machine_reset() override; @@ -129,15 +121,15 @@ void x37_state::x37(machine_config &config) NMC9306(config, m_nvram, 0); E0516(config, E050_16_TAG, 32'768); - SCC8530N(config, m_scc0, 6000000); - SCC8530N(config, m_scc1, 6000000); - SCC8530N(config, m_scc2, 6000000); + SCC8530N(config, m_scc[0], 6000000); + SCC8530N(config, m_scc[1], 6000000); + SCC8530N(config, m_scc[2], 6000000); FD1797(config, m_fdc, 16'000'000/16); - FLOPPY_CONNECTOR(config, FD1797_TAG":0", x37_floppies, nullptr, x37_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, FD1797_TAG":1", x37_floppies, nullptr, x37_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, FD1797_TAG":2", x37_floppies, "525qd", x37_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[0], x37_floppies, nullptr, x37_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[1], x37_floppies, nullptr, x37_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[2], x37_floppies, "525qd", x37_state::floppy_formats).enable_sound(true); NSCSI_BUS(config, "sasi"); NSCSI_CONNECTOR(config, "sasi:0", default_scsi_devices, "s1410"); diff --git a/src/mame/motorola/exorciser.cpp b/src/mame/motorola/exorciser.cpp index 07ca51092e4..acfbce7eaeb 100644 --- a/src/mame/motorola/exorciser.cpp +++ b/src/mame/motorola/exorciser.cpp @@ -169,10 +169,7 @@ public: , m_printer(*this, "printer") , m_acia_prn(*this, "acia_prn") , m_fdc(*this, "fdc") - , m_floppy0(*this, "floppy0") - , m_floppy1(*this, "floppy1") - , m_floppy2(*this, "floppy2") - , m_floppy3(*this, "floppy3") + , m_floppy(*this, "floppy%u", 0U) { } void exorciser(machine_config &config); @@ -210,6 +207,7 @@ private: required_device m_printer; required_device m_acia_prn; required_device m_fdc; + required_device_array m_floppy; // RS232 bit rate generator clocks DECLARE_WRITE_LINE_MEMBER(write_f1_clock); @@ -243,10 +241,6 @@ private: static void exorciser_rs232_devices(device_slot_interface &device); static void floppy_formats(format_registration &fr); - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; }; void exorciser_state::dbg_map(address_map &map) @@ -601,7 +595,7 @@ void exorciser_state::machine_reset() m_restart_count = 0; - m_fdc->set_floppies_4(m_floppy0, m_floppy1, m_floppy2, m_floppy3); + m_fdc->set_floppies_4(m_floppy[0], m_floppy[1], m_floppy[2], m_floppy[3]); m_irq = 1; m_stop_address = 0x0000; @@ -710,11 +704,8 @@ void exorciser_state::exorciser(machine_config &config) m_fdc->irq_handler().set(m_mainirq, FUNC(input_merger_device::in_w<0>)); m_fdc->nmi_handler().set(m_mainnmi, FUNC(input_merger_device::in_w<3>)); - FLOPPY_CONNECTOR(config, m_floppy0, mdos_floppies, "8dssd", exorciser_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, mdos_floppies, "8dssd", exorciser_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy2, mdos_floppies, "8dssd", exorciser_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy3, mdos_floppies, "8dssd", exorciser_state::floppy_formats).enable_sound(true); - + for (auto &floppy : m_floppy) + FLOPPY_CONNECTOR(config, floppy, mdos_floppies, "8dssd", exorciser_state::floppy_formats).enable_sound(true); } /* ROM definition */ diff --git a/src/mame/nokia/mikromik.cpp b/src/mame/nokia/mikromik.cpp index 4f5f848025c..d028d02f4a4 100644 --- a/src/mame/nokia/mikromik.cpp +++ b/src/mame/nokia/mikromik.cpp @@ -216,8 +216,8 @@ WRITE_LINE_MEMBER( mm1_state::llen_w ) WRITE_LINE_MEMBER( mm1_state::motor_on_w ) { LOG("MOTOR %u\n", state); - m_floppy0->mon_w(!state); - m_floppy1->mon_w(!state); + m_floppy[0]->mon_w(!state); + m_floppy[1]->mon_w(!state); } diff --git a/src/mame/nokia/mikromik.h b/src/mame/nokia/mikromik.h index f58c2f02f35..91484ef17ea 100644 --- a/src/mame/nokia/mikromik.h +++ b/src/mame/nokia/mikromik.h @@ -52,8 +52,7 @@ public: m_mpsc(*this, UPD7201_TAG), m_hgdc(*this, UPD7220_TAG), m_palette(*this, "palette"), - m_floppy0(*this, UPD765_TAG ":0:525qd"), - m_floppy1(*this, UPD765_TAG ":1:525qd"), + m_floppy(*this, UPD765_TAG ":%u:525qd", 0U), m_rs232a(*this, RS232_A_TAG), m_rs232b(*this, RS232_B_TAG), m_rs232c(*this, RS232_C_TAG), @@ -89,8 +88,7 @@ private: required_device m_mpsc; required_device m_hgdc; required_device m_palette; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_rs232a; required_device m_rs232b; required_device m_rs232c; diff --git a/src/mame/osborne/osborne1.cpp b/src/mame/osborne/osborne1.cpp index e49ee6dcdbe..67b4e80d891 100644 --- a/src/mame/osborne/osborne1.cpp +++ b/src/mame/osborne/osborne1.cpp @@ -141,8 +141,7 @@ public: m_acia(*this, "acia"), m_fdc(*this, "mb8877"), m_ieee(*this, IEEE488_TAG), - m_floppy0(*this, "mb8877:0"), - m_floppy1(*this, "mb8877:1"), + m_floppy(*this, "mb8877:%u", 0U), m_keyb_row(*this, { "ROW0", "ROW1", "ROW3", "ROW4", "ROW5", "ROW2", "ROW6", "ROW7" }), m_btn_reset(*this, "RESET"), m_cnf(*this, "CNF"), @@ -218,8 +217,7 @@ private: required_device m_acia; required_device m_fdc; required_device m_ieee; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; // user inputs required_ioport_array<8> m_keyb_row; @@ -499,13 +497,13 @@ void osborne1_state::video_pia_port_b_w(u8 data) if (BIT(data, 6)) { - m_fdc->set_floppy(m_floppy0->get_device()); - m_floppy0->get_device()->mon_w(0); + m_fdc->set_floppy(m_floppy[0]->get_device()); + m_floppy[0]->get_device()->mon_w(0); } else if (BIT(data, 7)) { - m_fdc->set_floppy(m_floppy1->get_device()); - m_floppy1->get_device()->mon_w(0); + m_fdc->set_floppy(m_floppy[1]->get_device()); + m_floppy[1]->get_device()->mon_w(0); } else { @@ -1018,8 +1016,8 @@ void osborne1_state::osborne1_base(machine_config &config) MB8877(config, m_fdc, MAIN_CLOCK/16); m_fdc->set_force_ready(true); - FLOPPY_CONNECTOR(config, m_floppy0, osborne1_floppies, "525ssdd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, m_floppy1, osborne1_floppies, "525ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], osborne1_floppies, "525ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], osborne1_floppies, "525ssdd", floppy_image_device::default_mfm_floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("osborne1"); } diff --git a/src/mame/osborne/vixen.cpp b/src/mame/osborne/vixen.cpp index 96b04d48b01..835cf2e7b92 100644 --- a/src/mame/osborne/vixen.cpp +++ b/src/mame/osborne/vixen.cpp @@ -93,8 +93,7 @@ public: , m_ieee488(*this, IEEE488_TAG) , m_palette(*this, "palette") , m_ram(*this, RAM_TAG) - , m_floppy0(*this, FDC1797_TAG":0") - , m_floppy1(*this, FDC1797_TAG":1") + , m_floppy(*this, FDC1797_TAG":%u", 0U) , m_rs232(*this, "rs232") , m_rom(*this, Z8400A_TAG) , m_sync_rom(*this, "video") @@ -145,8 +144,7 @@ private: required_device m_ieee488; required_device m_palette; required_device m_ram; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_rs232; required_region_ptr m_rom; required_region_ptr m_sync_rom; @@ -609,8 +607,8 @@ void vixen_state::i8155_pc_w(uint8_t data) // drive 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); @@ -861,8 +859,8 @@ void vixen_state::vixen(machine_config &config) FD1797(config, m_fdc, 23.9616_MHz_XTAL / 24); m_fdc->intrq_wr_callback().set(FUNC(vixen_state::fdc_intrq_w)); - FLOPPY_CONNECTOR(config, FDC1797_TAG":0", vixen_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, FDC1797_TAG":1", vixen_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[0], vixen_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppy[1], vixen_floppies, "525dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true); IEEE488(config, m_ieee488); m_ieee488->srq_callback().set(FUNC(vixen_state::srq_w)); m_ieee488->atn_callback().set(FUNC(vixen_state::atn_w)); diff --git a/src/mame/osi/osi.cpp b/src/mame/osi/osi.cpp index 81d691b02a0..2d6e06aeaa8 100644 --- a/src/mame/osi/osi.cpp +++ b/src/mame/osi/osi.cpp @@ -711,8 +711,8 @@ void c1pmf_state::machine_start() c1p_state::machine_start(); // drive select logic missing - if (m_floppy0->get_device()) - m_floppy0->get_device()->setup_index_pulse_cb(floppy_image_device::index_pulse_cb(&c1pmf_state::floppy_index_callback, this)); + if (m_floppy[0]->get_device()) + m_floppy[0]->get_device()->setup_index_pulse_cb(floppy_image_device::index_pulse_cb(&c1pmf_state::floppy_index_callback, this)); } // disk format: 1 head, 36 tracks (? - manual displays a directory listing with 40 tracks), @@ -869,8 +869,8 @@ void c1pmf_state::c1pmf(machine_config &config) CLOCK(config, "floppy_clock", XTAL(4'000'000)/8).signal_handler().set("acia_1", FUNC(acia6850_device::write_txc)); // 250 kHz - FLOPPY_CONNECTOR(config, "floppy0", osi_floppies, "ssdd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "floppy1", osi_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], osi_floppies, "ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], osi_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats); /* internal ram */ m_ram->set_default_size("20K"); diff --git a/src/mame/osi/osi.h b/src/mame/osi/osi.h index 83c29a272a5..b1a10c3ef1f 100644 --- a/src/mame/osi/osi.h +++ b/src/mame/osi/osi.h @@ -121,8 +121,7 @@ class c1pmf_state : public c1p_state public: c1pmf_state(const machine_config &mconfig, device_type type, const char *tag) : c1p_state(mconfig, type, tag) - , m_floppy0(*this, "floppy0") - , m_floppy1(*this, "floppy1") + , m_floppy(*this, "floppy%u", 0U) { } void c1pmf(machine_config &config); @@ -138,8 +137,7 @@ protected: void c1pmf_mem(address_map &map); private: - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; }; class uk101_state : public sb2m600_state diff --git a/src/mame/robotron/a5105.cpp b/src/mame/robotron/a5105.cpp index 22eca5732c5..5b58ff4fe1f 100644 --- a/src/mame/robotron/a5105.cpp +++ b/src/mame/robotron/a5105.cpp @@ -52,10 +52,7 @@ public: , m_cass(*this, "cassette") , m_beep(*this, "beeper") , m_fdc(*this, "upd765a") - , m_floppy0(*this, "upd765a:0") - , m_floppy1(*this, "upd765a:1") - , m_floppy2(*this, "upd765a:2") - , m_floppy3(*this, "upd765a:3") + , m_floppy(*this, "upd765a:%u", 0U) , m_video_ram(*this, "video_ram") , m_ram(*this, RAM_TAG) , m_gfxdecode(*this, "gfxdecode") @@ -101,10 +98,7 @@ private: required_device m_cass; required_device m_beep; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; + required_device_array m_floppy; required_shared_ptr m_video_ram; required_device m_ram; required_device m_gfxdecode; @@ -370,10 +364,8 @@ void a5105_state::a5105_memsel_w(uint8_t data) void a5105_state::a5105_upd765_w(uint8_t data) { - m_floppy0->get_device()->mon_w(!BIT(data,0)); - m_floppy1->get_device()->mon_w(!BIT(data,1)); - m_floppy2->get_device()->mon_w(!BIT(data,2)); - m_floppy3->get_device()->mon_w(!BIT(data,3)); + for (int n = 0; n < 4; n++) + m_floppy[n]->get_device()->mon_w(!BIT(data,n)); m_fdc->tc_w(BIT(data, 4)); } diff --git a/src/mame/sinclair/beta_m.cpp b/src/mame/sinclair/beta_m.cpp index a64778af78d..d9ab4f5eaf8 100644 --- a/src/mame/sinclair/beta_m.cpp +++ b/src/mame/sinclair/beta_m.cpp @@ -31,10 +31,7 @@ beta_disk_device::beta_disk_device(const machine_config &mconfig, const char *ta : device_t(mconfig, BETA_DISK, tag, owner, clock) , m_betadisk_active(0) , m_wd179x(*this, "wd179x") - , m_floppy0(*this, "wd179x:0") - , m_floppy1(*this, "wd179x:1") - , m_floppy2(*this, "wd179x:2") - , m_floppy3(*this, "wd179x:3") + , m_floppy(*this, "wd179x:%u", 0U) , m_control(0) , m_motor_active(false) { @@ -127,8 +124,7 @@ void beta_disk_device::param_w(uint8_t data) { if (m_betadisk_active == 1) { - floppy_connector* connectors[] = { m_floppy0, m_floppy1, m_floppy2, m_floppy3 }; - floppy_image_device* floppy = connectors[data & 3]->get_device(); + floppy_image_device* floppy = m_floppy[data & 3]->get_device(); m_control = data; m_wd179x->set_floppy(floppy); @@ -181,13 +177,12 @@ void beta_disk_device::fdc_hld_w(int state) void beta_disk_device::motors_control() { - floppy_connector* connectors[] = { m_floppy0, m_floppy1, m_floppy2, m_floppy3 }; for (int i = 0; i < 4; i++) { if (m_motor_active && (m_control & 3) == i) - connectors[i]->get_device()->mon_w(CLEAR_LINE); + m_floppy[i]->get_device()->mon_w(CLEAR_LINE); else - connectors[i]->get_device()->mon_w(ASSERT_LINE); + m_floppy[i]->get_device()->mon_w(ASSERT_LINE); } } @@ -293,10 +288,8 @@ void beta_disk_device::device_add_mconfig(machine_config &config) { KR1818VG93(config, m_wd179x, 8_MHz_XTAL / 8); m_wd179x->hld_wr_callback().set(FUNC(beta_disk_device::fdc_hld_w)); - FLOPPY_CONNECTOR(config, m_floppy0, beta_disk_floppies, "525qd", beta_disk_device::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, beta_disk_floppies, "525qd", beta_disk_device::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy2, beta_disk_floppies, "525qd", beta_disk_device::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy3, beta_disk_floppies, "525qd", beta_disk_device::floppy_formats).enable_sound(true); + for (auto &floppy : m_floppy) + FLOPPY_CONNECTOR(config, floppy, beta_disk_floppies, "525qd", beta_disk_device::floppy_formats).enable_sound(true); } //------------------------------------------------- diff --git a/src/mame/sinclair/beta_m.h b/src/mame/sinclair/beta_m.h index fbf90773b38..cb25d6d0aa9 100644 --- a/src/mame/sinclair/beta_m.h +++ b/src/mame/sinclair/beta_m.h @@ -52,10 +52,7 @@ private: uint8_t m_betadisk_active; required_device m_wd179x; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; + required_device_array m_floppy; void fdc_hld_w(int state); void motors_control(); u8 m_control; diff --git a/src/mame/skeleton/gimix.cpp b/src/mame/skeleton/gimix.cpp index 98ac1c0d377..19331f47d81 100644 --- a/src/mame/skeleton/gimix.cpp +++ b/src/mame/skeleton/gimix.cpp @@ -72,10 +72,7 @@ public: , m_maincpu(*this, "maincpu") , m_irqs(*this, "irqs") , m_fdc(*this, "fdc") - , m_floppy0(*this, "fdc:0") - , m_floppy1(*this, "fdc:1") - , m_floppy2(*this, "fdc:2") - , m_floppy3(*this, "fdc:3") + , m_floppy(*this, "fdc:%u", 0U) , m_ram(*this, RAM_TAG) , m_rom(*this, "roms") , m_acia1(*this, "acia1") @@ -125,10 +122,7 @@ private: uint8_t m_task; uint8_t m_task_banks[16][16]; uint8_t m_selected_drive; - bool m_floppy0_ready; - bool m_floppy1_ready; - bool m_floppy2_ready; - bool m_floppy3_ready; + bool m_floppy_ready[4]; uint8_t m_pia1_pa; uint8_t m_pia1_pb; @@ -142,10 +136,7 @@ private: required_device m_maincpu; required_device m_irqs; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; + required_device_array m_floppy; required_device m_ram; required_memory_region m_rom; required_device m_acia1; @@ -286,22 +277,22 @@ void gimix_state::dma_w(offs_t offset, uint8_t data) if(data & 0x01) { m_selected_drive = 1; - m_fdc->set_floppy(m_floppy0->get_device()); + m_fdc->set_floppy(m_floppy[0]->get_device()); } else if(data & 0x02) { m_selected_drive = 2; - m_fdc->set_floppy(m_floppy1->get_device()); + m_fdc->set_floppy(m_floppy[1]->get_device()); } else if(data & 0x04) { m_selected_drive = 3; - m_fdc->set_floppy(m_floppy2->get_device()); + m_fdc->set_floppy(m_floppy[2]->get_device()); } else if(data & 0x08) { m_selected_drive = 4; - m_fdc->set_floppy(m_floppy3->get_device()); + m_fdc->set_floppy(m_floppy[3]->get_device()); } else { @@ -309,29 +300,14 @@ void gimix_state::dma_w(offs_t offset, uint8_t data) m_fdc->set_floppy(nullptr); } - if(m_selected_drive != 1) + for(int n = 0; n < 4; n++) { - m_floppy0->get_device()->mon_w(1); - m_floppy0_ready = false; - logerror("FDC: Floppy drive 0 motor off\n"); - } - if(m_selected_drive != 2) - { - m_floppy1->get_device()->mon_w(1); - m_floppy1_ready = false; - logerror("FDC: Floppy drive 1 motor off\n"); - } - if(m_selected_drive != 3) - { - m_floppy2->get_device()->mon_w(1); - m_floppy2_ready = false; - logerror("FDC: Floppy drive 2 motor off\n"); - } - if(m_selected_drive != 4) - { - m_floppy3->get_device()->mon_w(1); - m_floppy3_ready = false; - logerror("FDC: Floppy drive 3 motor off\n"); + if(m_selected_drive != n + 1) + { + m_floppy[n]->get_device()->mon_w(1); + m_floppy_ready[n] = false; + logerror("FDC: Floppy drive %d motor off\n", n); + } } break; case 1: @@ -341,28 +317,8 @@ void gimix_state::dma_w(offs_t offset, uint8_t data) m_dma_status |= 0x12; else m_dma_status &= ~0x12; - if(data & 0x40) - { - if(m_selected_drive == 1) - m_floppy0->get_device()->ss_w(1); - if(m_selected_drive == 2) - m_floppy1->get_device()->ss_w(1); - if(m_selected_drive == 3) - m_floppy2->get_device()->ss_w(1); - if(m_selected_drive == 4) - m_floppy3->get_device()->ss_w(1); - } - else - { - if(m_selected_drive == 1) - m_floppy0->get_device()->ss_w(0); - if(m_selected_drive == 2) - m_floppy1->get_device()->ss_w(0); - if(m_selected_drive == 3) - m_floppy2->get_device()->ss_w(0); - if(m_selected_drive == 4) - m_floppy3->get_device()->ss_w(0); - } + if(m_selected_drive != 0) + m_floppy[m_selected_drive - 1]->get_device()->ss_w(BIT(data, 6)); if((data & 0x80) == 0) m_irqs->in_w<6>(0); break; @@ -384,29 +340,11 @@ void gimix_state::dma_w(offs_t offset, uint8_t data) uint8_t gimix_state::fdc_r(offs_t offset) { // motors are switched on on FDC access - if(m_selected_drive == 1 && m_floppy0_ready == false) - { - m_floppy0->get_device()->mon_w(0); - m_floppy0_ready = true; - logerror("FDC: Floppy drive 0 motor on\n"); - } - if(m_selected_drive == 2 && m_floppy1_ready == false) - { - m_floppy1->get_device()->mon_w(0); - m_floppy1_ready = true; - logerror("FDC: Floppy drive 1 motor on\n"); - } - if(m_selected_drive == 3 && m_floppy2_ready == false) + if(m_selected_drive != 0 && !m_floppy_ready[m_selected_drive - 1] && !machine().side_effects_disabled()) { - m_floppy2->get_device()->mon_w(0); - m_floppy2_ready = true; - logerror("FDC: Floppy drive 2 motor on\n"); - } - if(m_selected_drive == 4 && m_floppy3_ready == false) - { - m_floppy3->get_device()->mon_w(0); - m_floppy3_ready = true; - logerror("FDC: Floppy drive 3 motor on\n"); + m_floppy[m_selected_drive - 1]->get_device()->mon_w(0); + m_floppy_ready[m_selected_drive - 1] = true; + logerror("FDC: Floppy drive %d motor on\n", m_selected_drive - 1); } return m_fdc->read(offset); } @@ -414,14 +352,12 @@ uint8_t gimix_state::fdc_r(offs_t offset) void gimix_state::fdc_w(offs_t offset, uint8_t data) { // motors are switched on on FDC access - if(m_selected_drive == 1) - m_floppy0->get_device()->mon_w(0); - if(m_selected_drive == 2) - m_floppy1->get_device()->mon_w(0); - if(m_selected_drive == 3) - m_floppy2->get_device()->mon_w(0); - if(m_selected_drive == 4) - m_floppy3->get_device()->mon_w(0); + if(m_selected_drive != 0 && !m_floppy_ready[m_selected_drive - 1]) + { + m_floppy[m_selected_drive - 1]->get_device()->mon_w(0); + m_floppy_ready[m_selected_drive - 1] = true; + logerror("FDC: Floppy drive %d motor on\n", m_selected_drive - 1); + } m_fdc->write(offset,data); } @@ -497,10 +433,7 @@ void gimix_state::machine_reset() m_irqs->in_w<6>(0); m_task = 0x00; m_selected_drive = 0; - m_floppy0_ready = false; - m_floppy1_ready = false; - m_floppy2_ready = false; - m_floppy3_ready = false; + std::fill(std::begin(m_floppy_ready), std::end(m_floppy_ready), false); m_lowerram->set_base(m_ram->pointer()); if(m_ram->size() > 65536) m_upperram->set_base(m_ram->pointer()+0x10000); @@ -530,8 +463,8 @@ void gimix_state::machine_start() m_bank[bank]->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,m_upperram); } } - m_floppy0->get_device()->set_rpm(300); - m_floppy1->get_device()->set_rpm(300); + m_floppy[0]->get_device()->set_rpm(300); + m_floppy[1]->get_device()->set_rpm(300); } void gimix_state::driver_start() diff --git a/src/mame/skeleton/xor100.cpp b/src/mame/skeleton/xor100.cpp index fe21a14871b..ee35c987ea3 100644 --- a/src/mame/skeleton/xor100.cpp +++ b/src/mame/skeleton/xor100.cpp @@ -207,10 +207,9 @@ void xor100_state::fdc_dcont_w(uint8_t data) // drive 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, 2)) floppy = m_floppy2->get_device(); - if (BIT(data, 3)) floppy = m_floppy3->get_device(); + for (int n = 0; n < 4; n++) + if (BIT(data, n)) + floppy = m_floppy[n]->get_device(); m_fdc->set_floppy(floppy); @@ -523,10 +522,10 @@ void xor100_state::xor100(machine_config &config) m_ctc->zc_callback<2>().set(FUNC(xor100_state::ctc_z2_w)); FD1795(config, m_fdc, 8_MHz_XTAL / 4); - FLOPPY_CONNECTOR(config, WD1795_TAG":0", xor100_floppies, "8ssdd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, WD1795_TAG":1", xor100_floppies, "8ssdd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, WD1795_TAG":2", xor100_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, WD1795_TAG":3", xor100_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], xor100_floppies, "8ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], xor100_floppies, "8ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[2], xor100_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[3], xor100_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats); CENTRONICS(config, m_centronics, centronics_devices, "printer"); m_centronics->ack_handler().set(I8255A_TAG, FUNC(i8255_device::pc4_w)); diff --git a/src/mame/skeleton/xor100.h b/src/mame/skeleton/xor100.h index 04751838180..65020eff7bc 100644 --- a/src/mame/skeleton/xor100.h +++ b/src/mame/skeleton/xor100.h @@ -42,10 +42,7 @@ public: , m_ram(*this, RAM_TAG) , m_centronics(*this, CENTRONICS_TAG) , m_s100(*this, S100_TAG) - , m_floppy0(*this, WD1795_TAG":0") - , m_floppy1(*this, WD1795_TAG":1") - , m_floppy2(*this, WD1795_TAG":2") - , m_floppy3(*this, WD1795_TAG":3") + , m_floppy(*this, WD1795_TAG":%u", 0U) , m_rom(*this, Z80_TAG) , m_bank1(*this, "bank1") , m_bank2(*this, "bank2") @@ -88,10 +85,7 @@ private: required_device m_ram; required_device m_centronics; required_device m_s100; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; + required_device_array m_floppy; required_memory_region m_rom; required_memory_bank m_bank1; required_memory_bank m_bank2; diff --git a/src/mame/sony/smc777.cpp b/src/mame/sony/smc777.cpp index d90ed523f5f..2ad35265e09 100644 --- a/src/mame/sony/smc777.cpp +++ b/src/mame/sony/smc777.cpp @@ -66,8 +66,7 @@ public: , m_screen(*this, "screen") , m_crtc(*this, "crtc") , m_fdc(*this, "fdc") - , m_floppy0(*this, "fdc:0") - , m_floppy1(*this, "fdc:1") + , m_floppy(*this, "fdc:%u", 0U) , m_beeper(*this, "beeper") , m_gfxdecode(*this, "gfxdecode") , m_palette(*this, "palette") @@ -125,8 +124,7 @@ private: required_device m_screen; required_device m_crtc; required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_beeper; required_device m_gfxdecode; required_device m_palette; @@ -472,7 +470,7 @@ void smc777_state::fdc1_select_w(uint8_t data) // x--- ---- SIDE1: [SMC-70] side select // ---- --x- EXDS: [SMC-70] external drive select (0=internal, 1=external) // ---- ---x DS01: select floppy drive - floppy = (data & 1 ? m_floppy1 : m_floppy0)->get_device(); + floppy = m_floppy[data & 1]->get_device(); m_fdc->set_floppy(floppy); @@ -1136,8 +1134,8 @@ void smc777_state::smc777(machine_config &config) m_fdc->drq_wr_callback().set(FUNC(smc777_state::fdc_drq_w)); // does it really support 16 of them? - FLOPPY_CONNECTOR(config, "fdc:0", smc777_floppies, "ssdd", floppy_image_device::default_mfm_floppy_formats); - FLOPPY_CONNECTOR(config, "fdc:1", smc777_floppies, "ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], smc777_floppies, "ssdd", floppy_image_device::default_mfm_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], smc777_floppies, "ssdd", floppy_image_device::default_mfm_floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("smc777"); QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(smc777_state::quickload_cb)); diff --git a/src/mame/wang/wangpc.cpp b/src/mame/wang/wangpc.cpp index cf36650214f..7bb281518e2 100644 --- a/src/mame/wang/wangpc.cpp +++ b/src/mame/wang/wangpc.cpp @@ -68,8 +68,7 @@ public: m_epci(*this, SCN2661_TAG), m_fdc(*this, UPD765_TAG), m_ram(*this, RAM_TAG), - m_floppy0(*this, UPD765_TAG ":0:525dd"), - m_floppy1(*this, UPD765_TAG ":1:525dd"), + m_floppy(*this, UPD765_TAG ":%u:525dd", 0U), m_centronics(*this, CENTRONICS_TAG), m_cent_data_in(*this, "cent_data_in"), m_cent_data_out(*this, "cent_data_out"), @@ -107,8 +106,7 @@ private: required_device m_epci; required_device m_fdc; required_device m_ram; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; required_device m_centronics; required_device m_cent_data_in; required_device m_cent_data_out; @@ -134,14 +132,10 @@ private: void deselect_drive2_w(uint8_t data); uint8_t select_drive2_r(); void select_drive2_w(uint8_t data); - uint8_t motor1_off_r(); - void motor1_off_w(uint8_t data); - uint8_t motor1_on_r(); - void motor1_on_w(uint8_t data); - uint8_t motor2_off_r(); - void motor2_off_w(uint8_t data); - uint8_t motor2_on_r(); - void motor2_on_w(uint8_t data); + uint8_t motor1_on_r(offs_t offset); + void motor1_on_w(offs_t offset, uint8_t data); + uint8_t motor2_on_r(offs_t offset); + void motor2_on_w(offs_t offset, uint8_t data); uint8_t fdc_reset_r(); void fdc_reset_w(uint8_t data); uint8_t fdc_tc_r(); @@ -245,8 +239,8 @@ void wangpc_state::select_drive() { floppy_image_device *floppy = nullptr; - if (m_ds1) floppy = m_floppy0; - if (m_ds2) floppy = m_floppy1; + if (m_ds1) floppy = m_floppy[0]; + if (m_ds2) floppy = m_floppy[1]; m_fdc->set_floppy(floppy); } @@ -337,60 +331,34 @@ void wangpc_state::select_drive2_w(uint8_t data) select_drive2_r(); } -uint8_t wangpc_state::motor1_off_r() +uint8_t wangpc_state::motor1_on_r(offs_t offset) { - if (LOG) logerror("%s: Drive 1 motor OFF\n", machine().describe_context()); - - m_floppy0->mon_w(1); + if (!machine().side_effects_disabled()) + motor1_on_w(offset, 0); return 0xff; } -void wangpc_state::motor1_off_w(uint8_t data) +void wangpc_state::motor1_on_w(offs_t offset, uint8_t data) { - motor1_off_r(); -} - -uint8_t wangpc_state::motor1_on_r() -{ - if (LOG) logerror("%s: Drive 1 motor ON\n", machine().describe_context()); - - m_floppy0->mon_w(0); + if (LOG) logerror("%s: Drive 1 motor %s\n", machine().describe_context(), offset ? "ON" : "OFF"); - return 0xff; -} - -void wangpc_state::motor1_on_w(uint8_t data) -{ - motor1_on_r(); + m_floppy[0]->mon_w(!offset); } -uint8_t wangpc_state::motor2_off_r() +uint8_t wangpc_state::motor2_on_r(offs_t offset) { - if (LOG) logerror("%s: Drive 2 motor OFF\n", machine().describe_context()); - - m_floppy1->mon_w(1); + if (!machine().side_effects_disabled()) + motor2_on_w(offset, 0); return 0xff; } -void wangpc_state::motor2_off_w(uint8_t data) +void wangpc_state::motor2_on_w(offs_t offset, uint8_t data) { - motor2_off_r(); -} - -uint8_t wangpc_state::motor2_on_r() -{ - if (LOG) logerror("%s: Drive 2 motor ON\n", machine().describe_context()); - - m_floppy1->mon_w(0); + if (LOG) logerror("%s: Drive 2 motor %s\n", machine().describe_context(), offset ? "ON" : "OFF"); - return 0xff; -} - -void wangpc_state::motor2_on_w(uint8_t data) -{ - motor2_on_r(); + m_floppy[1]->mon_w(!offset); } uint8_t wangpc_state::fdc_reset_r() @@ -462,8 +430,8 @@ uint8_t wangpc_state::status_r() data |= m_fdc->get_irq() << 3; data |= m_fdc_dd0 << 4; data |= m_fdc_dd1 << 5; - data |= m_floppy0->exists() ? 0 : 0x40; - data |= m_floppy1->exists() ? 0 : 0x80; + data |= m_floppy[0]->exists() ? 0 : 0x40; + data |= m_floppy[1]->exists() ? 0 : 0x80; return data; } @@ -754,10 +722,8 @@ void wangpc_state::wangpc_io(address_map &map) map(0x1006, 0x1006).rw(FUNC(wangpc_state::select_drive1_r), FUNC(wangpc_state::select_drive1_w)); map(0x1008, 0x1008).rw(FUNC(wangpc_state::deselect_drive2_r), FUNC(wangpc_state::deselect_drive2_w)); map(0x100a, 0x100a).rw(FUNC(wangpc_state::select_drive2_r), FUNC(wangpc_state::select_drive2_w)); - map(0x100c, 0x100c).rw(FUNC(wangpc_state::motor1_off_r), FUNC(wangpc_state::motor1_off_w)); - map(0x100e, 0x100e).rw(FUNC(wangpc_state::motor1_on_r), FUNC(wangpc_state::motor1_on_w)); - map(0x1010, 0x1010).rw(FUNC(wangpc_state::motor2_off_r), FUNC(wangpc_state::motor2_off_w)); - map(0x1012, 0x1012).rw(FUNC(wangpc_state::motor2_on_r), FUNC(wangpc_state::motor2_on_w)); + map(0x100c, 0x100f).rw(FUNC(wangpc_state::motor1_on_r), FUNC(wangpc_state::motor1_on_w)).umask16(0x00ff); + map(0x1010, 0x1013).rw(FUNC(wangpc_state::motor2_on_r), FUNC(wangpc_state::motor2_on_w)).umask16(0x00ff); map(0x1014, 0x1017).m(m_fdc, FUNC(upd765a_device::map)).umask16(0x00ff); map(0x1018, 0x1018).mirror(0x0002).rw(FUNC(wangpc_state::fdc_reset_r), FUNC(wangpc_state::fdc_reset_w)); map(0x101c, 0x101c).mirror(0x0002).rw(FUNC(wangpc_state::fdc_tc_r), FUNC(wangpc_state::fdc_tc_w)); @@ -1183,10 +1149,10 @@ WRITE_LINE_MEMBER( wangpc_state::bus_irq2_w ) void wangpc_state::machine_start() { // connect floppy callbacks - m_floppy0->setup_load_cb(floppy_image_device::load_cb(&wangpc_state::on_disk0_load, this)); - m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(&wangpc_state::on_disk0_unload, this)); - m_floppy1->setup_load_cb(floppy_image_device::load_cb(&wangpc_state::on_disk1_load, this)); - m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(&wangpc_state::on_disk1_unload, this)); + m_floppy[0]->setup_load_cb(floppy_image_device::load_cb(&wangpc_state::on_disk0_load, this)); + m_floppy[0]->setup_unload_cb(floppy_image_device::unload_cb(&wangpc_state::on_disk0_unload, this)); + m_floppy[1]->setup_load_cb(floppy_image_device::load_cb(&wangpc_state::on_disk1_load, this)); + m_floppy[1]->setup_unload_cb(floppy_image_device::unload_cb(&wangpc_state::on_disk1_unload, this)); m_led_diagnostic.resolve(); -- cgit v1.2.3