From 59521cf6cf1981b006611ea0c8bf5b2649db81ac Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 12 Oct 2023 19:30:41 -0400 Subject: ep64_exdos, compis_fdc: Clean up code using device finder arrays for floppy drives --- src/devices/bus/ep64/exdos.cpp | 41 +++++++++++++++++-------------------- src/devices/bus/ep64/exdos.h | 8 ++------ src/devices/bus/isbx/compis_fdc.cpp | 18 ++++++++++------ src/devices/bus/isbx/compis_fdc.h | 4 +--- 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/devices/bus/ep64/exdos.cpp b/src/devices/bus/ep64/exdos.cpp index 37f382955eb..1f7b5d8af97 100644 --- a/src/devices/bus/ep64/exdos.cpp +++ b/src/devices/bus/ep64/exdos.cpp @@ -48,6 +48,8 @@ This PCB plugs into the external expansion connector on the right side of the ma #include "emu.h" #include "exdos.h" +#include "formats/ep64_dsk.h" + //************************************************************************** @@ -109,10 +111,9 @@ void ep64_exdos_device::device_add_mconfig(machine_config &config) { WD1770(config, m_fdc, 8_MHz_XTAL); - FLOPPY_CONNECTOR(config, m_floppy0, ep64_exdos_floppies, "35dd", ep64_exdos_device::floppy_formats); - FLOPPY_CONNECTOR(config, m_floppy1, ep64_exdos_floppies, nullptr, ep64_exdos_device::floppy_formats); - FLOPPY_CONNECTOR(config, m_floppy2, ep64_exdos_floppies, nullptr, ep64_exdos_device::floppy_formats); - FLOPPY_CONNECTOR(config, m_floppy3, ep64_exdos_floppies, nullptr, ep64_exdos_device::floppy_formats); + for (auto &floppy : m_floppy) + FLOPPY_CONNECTOR(config, floppy, ep64_exdos_floppies, nullptr, ep64_exdos_device::floppy_formats); + m_floppy[0]->set_default_option("35dd"); } @@ -128,11 +129,8 @@ ep64_exdos_device::ep64_exdos_device(const machine_config &mconfig, const char * device_t(mconfig, EP64_EXDOS, tag, owner, clock), device_ep64_expansion_bus_card_interface(mconfig, *this), m_fdc(*this, WD1770_TAG), - m_floppy0(*this, WD1770_TAG":0"), - m_floppy1(*this, WD1770_TAG":1"), - m_floppy2(*this, WD1770_TAG":2"), - m_floppy3(*this, WD1770_TAG":3"), - m_floppy(nullptr), + m_floppy(*this, WD1770_TAG":%u", 0U), + m_selected_floppy(nullptr), m_rom(*this, "rom") { } @@ -159,8 +157,8 @@ void ep64_exdos_device::device_reset() { m_fdc->reset(); - m_floppy = nullptr; - m_fdc->set_floppy(m_floppy); + m_selected_floppy = nullptr; + m_fdc->set_floppy(m_selected_floppy); m_fdc->dden_w(0); } @@ -191,7 +189,7 @@ uint8_t ep64_exdos_device::read() data |= m_fdc->intrq_r() << 1; data |= m_fdc->drq_r() << 7; - data |= (m_floppy ? m_floppy->dskchg_r() : 1) << 6; + data |= (m_selected_floppy ? m_selected_floppy->dskchg_r() : 1) << 6; return data; } @@ -218,19 +216,18 @@ void ep64_exdos_device::write(uint8_t data) */ - m_floppy = nullptr; - - if (BIT(data, 0)) m_floppy = m_floppy0->get_device(); - if (BIT(data, 1)) m_floppy = m_floppy1->get_device(); - if (BIT(data, 2)) m_floppy = m_floppy2->get_device(); - if (BIT(data, 3)) m_floppy = m_floppy3->get_device(); - - m_fdc->set_floppy(m_floppy); + m_selected_floppy = nullptr; - if (m_floppy) + for (int n = 0; n < 4; n++) { - m_floppy->ss_w(BIT(data, 4)); + if (BIT(data, n)) + m_selected_floppy = m_floppy[n]->get_device(); } + m_fdc->set_floppy(m_selected_floppy); + + if (m_selected_floppy) + m_selected_floppy->ss_w(BIT(data, 4)); + m_fdc->dden_w(BIT(data, 5)); } diff --git a/src/devices/bus/ep64/exdos.h b/src/devices/bus/ep64/exdos.h index cb5f9d47cc7..1cbf5a346a7 100644 --- a/src/devices/bus/ep64/exdos.h +++ b/src/devices/bus/ep64/exdos.h @@ -12,7 +12,6 @@ #pragma once #include "exp.h" -#include "formats/ep64_dsk.h" #include "imagedev/floppy.h" #include "machine/wd_fdc.h" @@ -47,11 +46,8 @@ private: static void floppy_formats(format_registration &fr); required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; - required_device m_floppy2; - required_device m_floppy3; - floppy_image_device *m_floppy; + required_device_array m_floppy; + floppy_image_device *m_selected_floppy; required_memory_region m_rom; }; diff --git a/src/devices/bus/isbx/compis_fdc.cpp b/src/devices/bus/isbx/compis_fdc.cpp index b7f48961e2e..cd247ccf026 100644 --- a/src/devices/bus/isbx/compis_fdc.cpp +++ b/src/devices/bus/isbx/compis_fdc.cpp @@ -9,6 +9,8 @@ #include "emu.h" #include "compis_fdc.h" +#include "formats/cpis_dsk.h" + //************************************************************************** // MACROS / CONSTANTS @@ -61,8 +63,9 @@ void compis_fdc_device::device_add_mconfig(machine_config &config) I8272A(config, m_fdc, 8'000'000, true); m_fdc->intrq_wr_callback().set(FUNC(compis_fdc_device::fdc_irq)); m_fdc->drq_wr_callback().set(FUNC(compis_fdc_device::fdc_drq)); - FLOPPY_CONNECTOR(config, m_floppy0, compis_floppies, "525qd", compis_fdc_device::floppy_formats); - FLOPPY_CONNECTOR(config, m_floppy1, compis_floppies, "525qd", compis_fdc_device::floppy_formats); + + for (auto &floppy : m_floppy) + FLOPPY_CONNECTOR(config, floppy, compis_floppies, "525qd", compis_fdc_device::floppy_formats); } @@ -79,8 +82,7 @@ compis_fdc_device::compis_fdc_device(const machine_config &mconfig, const char * device_t(mconfig, COMPIS_FDC, tag, owner, clock), device_isbx_card_interface(mconfig, *this), m_fdc(*this, I8272_TAG), - m_floppy0(*this, I8272_TAG":0"), - m_floppy1(*this, I8272_TAG":1") + m_floppy(*this, I8272_TAG":%u", 0U) { } @@ -171,6 +173,10 @@ void compis_fdc_device::opt0_w(int state) void compis_fdc_device::opt1_w(int state) { - m_floppy0->get_device()->mon_w(state); - m_floppy1->get_device()->mon_w(state); + for (auto &floppy : m_floppy) + { + floppy_image_device *fd = floppy->get_device(); + if (fd) + fd->mon_w(state); + } } diff --git a/src/devices/bus/isbx/compis_fdc.h b/src/devices/bus/isbx/compis_fdc.h index c3211c74e9a..3817ffb9ca1 100644 --- a/src/devices/bus/isbx/compis_fdc.h +++ b/src/devices/bus/isbx/compis_fdc.h @@ -12,7 +12,6 @@ #pragma once #include "isbx.h" -#include "formats/cpis_dsk.h" #include "imagedev/floppy.h" #include "machine/upd765.h" @@ -53,8 +52,7 @@ private: static void floppy_formats(format_registration &fr); required_device m_fdc; - required_device m_floppy0; - required_device m_floppy1; + required_device_array m_floppy; }; -- cgit v1.2.3