summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ti99/peb
diff options
context:
space:
mode:
author Michael Zapf <github@mizapf.de>2024-04-01 00:08:08 +0200
committer Michael Zapf <github@mizapf.de>2024-04-01 00:08:08 +0200
commit90b4007b6b4f698e771e9f9161b3569b98dd86fb (patch)
tree227aaeb031518e2151aabe23a5a0041100cf3c77 /src/devices/bus/ti99/peb
parentc5b1b043f3b62298bd3dec8fb32c842d2d99f033 (diff)
ti99: Using device arrays instead of multiple similar devices.
Diffstat (limited to 'src/devices/bus/ti99/peb')
-rw-r--r--src/devices/bus/ti99/peb/bwg.cpp47
-rw-r--r--src/devices/bus/ti99/peb/bwg.h6
-rw-r--r--src/devices/bus/ti99/peb/cc_fdc.cpp40
-rw-r--r--src/devices/bus/ti99/peb/cc_fdc.h6
-rw-r--r--src/devices/bus/ti99/peb/hfdc.cpp56
-rw-r--r--src/devices/bus/ti99/peb/hfdc.h11
-rw-r--r--src/devices/bus/ti99/peb/myarcfdc.cpp38
-rw-r--r--src/devices/bus/ti99/peb/myarcfdc.h6
-rw-r--r--src/devices/bus/ti99/peb/ti_fdc.cpp33
-rw-r--r--src/devices/bus/ti99/peb/ti_fdc.h5
10 files changed, 93 insertions, 155 deletions
diff --git a/src/devices/bus/ti99/peb/bwg.cpp b/src/devices/bus/ti99/peb/bwg.cpp
index c6a671e2633..3f6d21a293b 100644
--- a/src/devices/bus/ti99/peb/bwg.cpp
+++ b/src/devices/bus/ti99/peb/bwg.cpp
@@ -60,7 +60,7 @@
#define LOG_MOTOR (1U << 8) // Show motor operations
#define LOG_CONFIG (1U << 9) // Configuration
-#define VERBOSE (LOG_CONFIG | LOG_WARN)
+#define VERBOSE (LOG_GENERAL | LOG_CONFIG | LOG_WARN)
#include "logmacro.h"
DEFINE_DEVICE_TYPE(TI99_BWG, bus::ti99::peb::snug_bwg_device, "ti99_bwg", "SNUG BwG Floppy Controller")
@@ -94,10 +94,7 @@ snug_bwg_device::snug_bwg_device(const machine_config &mconfig, const char *tag,
m_address(0),
m_dsrrom(nullptr),
m_buffer_ram(*this, BUFFER),
- m_flopcon0(*this, "0"),
- m_flopcon1(*this, "1"),
- m_flopcon2(*this, "2"),
- m_flopcon3(*this, "3"),
+ m_floppy(*this, "%u", 0),
m_sel_floppy(0),
m_wd1773(*this, FDC_TAG),
m_clock(*this, CLOCK_TAG),
@@ -359,10 +356,10 @@ void snug_bwg_device::crureadz(offs_t offset, uint8_t *value)
if ((offset & 0x00f0)==0)
{
// Check what drives are not connected
- reply = ((m_floppy[0] != nullptr)? 0 : 0x02) // DSK1
- | ((m_floppy[1] != nullptr)? 0 : 0x04) // DSK2
- | ((m_floppy[2] != nullptr)? 0 : 0x08) // DSK3
- | ((m_floppy[3] != nullptr)? 0 : 0x01); // DSK4
+ reply = ((m_floppy[0]->get_device() != nullptr)? 0 : 0x02) // DSK1
+ | ((m_floppy[1]->get_device() != nullptr)? 0 : 0x04) // DSK2
+ | ((m_floppy[2]->get_device() != nullptr)? 0 : 0x08) // DSK3
+ | ((m_floppy[3]->get_device() != nullptr)? 0 : 0x01); // DSK4
// DIP switches for step and date/time display
if (m_dip1 != 0) reply |= 0x10;
@@ -467,11 +464,11 @@ void snug_bwg_device::select_drive(int n, int state)
LOGMASKED(LOG_WARN, "Warning: DSK%d selected while DSK%d not yet unselected\n", n, m_sel_floppy);
}
- if (m_floppy[n-1] != nullptr)
+ if (m_floppy[n-1]->get_device() != nullptr)
{
m_sel_floppy = n;
- m_wd1773->set_floppy(m_floppy[n-1]);
- m_floppy[n-1]->ss_w(m_crulatch0_7->q7_r());
+ m_wd1773->set_floppy(m_floppy[n-1]->get_device());
+ m_floppy[n-1]->get_device()->ss_w(m_crulatch0_7->q7_r());
}
}
}
@@ -482,7 +479,7 @@ void snug_bwg_device::sidsel_w(int state)
if (m_sel_floppy != 0)
{
LOGMASKED(LOG_CRU, "Set side (bit 7) = %d on DSK%d\n", state, m_sel_floppy);
- m_floppy[m_sel_floppy-1]->ss_w(m_crulatch0_7->q7_r());
+ m_floppy[m_sel_floppy-1]->get_device()->ss_w(m_crulatch0_7->q7_r());
}
}
@@ -506,7 +503,8 @@ void snug_bwg_device::motorona_w(int state)
// Set all motors
for (auto & elem : m_floppy)
- if (elem != nullptr) elem->mon_w((state==ASSERT_LINE)? 0 : 1);
+ if (elem->get_device() != nullptr)
+ elem->get_device()->mon_w((state==ASSERT_LINE)? 0 : 1);
// The motor-on line also connects to the wait state logic
operate_ready_line();
@@ -546,17 +544,12 @@ void snug_bwg_device::device_reset()
m_WDsel = false;
m_WDsel0 = false;
- m_floppy[0] = m_flopcon0->get_device();
- m_floppy[1] = m_flopcon1->get_device();
- m_floppy[2] = m_flopcon2->get_device();
- m_floppy[3] = m_flopcon3->get_device();
-
- for (int i=0; i < 4; i++)
+ for (auto &flop : m_floppy)
{
- if (m_floppy[i] != nullptr)
- LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", i, m_floppy[i]->name());
+ if (flop->get_device() != nullptr)
+ LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", flop->basetag(), flop->get_device()->name());
else
- LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", i);
+ LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", flop->basetag());
}
m_wd1773->set_floppy(nullptr);
@@ -612,10 +605,10 @@ void snug_bwg_device::device_add_mconfig(machine_config& config)
MM58274C(config, CLOCK_TAG, 32.768_kHz_XTAL).set_mode_and_day(1, 0); // 24h, sunday
- FLOPPY_CONNECTOR(config, m_flopcon0, bwg_floppies, "525dd", snug_bwg_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon1, bwg_floppies, "525dd", snug_bwg_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon2, bwg_floppies, nullptr, snug_bwg_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon3, bwg_floppies, nullptr, snug_bwg_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], bwg_floppies, "525dd", snug_bwg_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], bwg_floppies, "525dd", snug_bwg_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[2], bwg_floppies, nullptr, snug_bwg_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[3], bwg_floppies, nullptr, snug_bwg_device::floppy_formats).enable_sound(true);
RAM(config, BUFFER).set_default_size("2K").set_default_value(0);
diff --git a/src/devices/bus/ti99/peb/bwg.h b/src/devices/bus/ti99/peb/bwg.h
index f1fbb9957ad..ced48131918 100644
--- a/src/devices/bus/ti99/peb/bwg.h
+++ b/src/devices/bus/ti99/peb/bwg.h
@@ -112,11 +112,7 @@ private:
required_device<ram_device> m_buffer_ram;
// Link to the attached floppy drives
- required_device<floppy_connector> m_flopcon0;
- required_device<floppy_connector> m_flopcon1;
- required_device<floppy_connector> m_flopcon2;
- required_device<floppy_connector> m_flopcon3;
- floppy_image_device* m_floppy[4];
+ required_device_array<floppy_connector, 4> m_floppy;
// Currently selected floppy drive (1-4, 0=none)
int m_sel_floppy;
diff --git a/src/devices/bus/ti99/peb/cc_fdc.cpp b/src/devices/bus/ti99/peb/cc_fdc.cpp
index ec3717530ea..88fa46d2aa3 100644
--- a/src/devices/bus/ti99/peb/cc_fdc.cpp
+++ b/src/devices/bus/ti99/peb/cc_fdc.cpp
@@ -78,10 +78,7 @@ corcomp_fdc_device::corcomp_fdc_device(const machine_config &mconfig, device_typ
m_wdc(*this, WDC_TAG),
m_decpal(*this, dpname),
m_ctrlpal(*this, cpname),
- m_flopcon0(*this, "0"),
- m_flopcon1(*this, "1"),
- m_flopcon2(*this, "2"),
- m_flopcon3(*this, "3"),
+ m_floppy(*this, "%u", 0),
m_motormf(*this, MOTORMF_TAG),
m_tms9901(*this, TMS9901_TAG),
m_buffer_ram(*this, BUFFER),
@@ -367,10 +364,10 @@ void corcomp_fdc_device::select_dsk(int state)
}
LOGMASKED(LOG_DRIVE, "Select drive DSK%d\n", m_selected_drive);
- if (m_floppy[m_selected_drive-1] != nullptr)
+ if (m_floppy[m_selected_drive-1]->get_device() != nullptr)
{
- m_wdc->set_floppy(m_floppy[m_selected_drive-1]);
- m_floppy[m_selected_drive-1]->ss_w(m_tms9901->read_bit(tms9901_device::INT15_P7));
+ m_wdc->set_floppy(m_floppy[m_selected_drive-1]->get_device());
+ m_floppy[m_selected_drive-1]->get_device()->ss_w(m_tms9901->read_bit(tms9901_device::INT15_P7));
}
}
}
@@ -381,7 +378,7 @@ void corcomp_fdc_device::side_select(int state)
if (m_selected_drive != 0)
{
LOGMASKED(LOG_DRIVE, "Set side (bit 7) = %d on DSK%d\n", state, m_selected_drive);
- m_floppy[m_selected_drive-1]->ss_w(state);
+ m_floppy[m_selected_drive-1]->get_device()->ss_w(state);
}
}
@@ -394,8 +391,10 @@ void corcomp_fdc_device::motor_w(int state)
m_wdc->set_force_ready(state==ASSERT_LINE);
// Set all motors
- for (auto & elem : m_floppy)
- if (elem != nullptr) elem->mon_w((state==ASSERT_LINE)? 0 : 1);
+ for (auto &elem : m_floppy)
+ if (elem->get_device() != nullptr)
+ elem->get_device()->mon_w((state==ASSERT_LINE)? 0 : 1);
+
operate_ready_line();
}
@@ -430,17 +429,12 @@ void corcomp_fdc_device::device_start()
void corcomp_fdc_device::device_reset()
{
- m_floppy[0] = m_flopcon0->get_device();
- m_floppy[1] = m_flopcon1->get_device();
- m_floppy[2] = m_flopcon2->get_device();
- m_floppy[3] = m_flopcon3->get_device();
-
- for (int i=0; i < 4; i++)
+ for (auto &flop : m_floppy)
{
- if (m_floppy[i] != nullptr)
- LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", i, m_floppy[i]->name());
+ if (flop->get_device() != nullptr)
+ LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", flop->basetag(), flop->get_device()->name());
else
- LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", i);
+ LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", flop->basetag());
}
m_decpal->set_board(this);
@@ -530,10 +524,10 @@ void corcomp_fdc_device::common_config(machine_config& config)
m_motormf->set_clear_pin_value(1);
m_motormf->out_cb().set(FUNC(corcomp_fdc_device::motor_w));
- FLOPPY_CONNECTOR(config, "0", ccfdc_floppies, "525dd", corcomp_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, "1", ccfdc_floppies, "525dd", corcomp_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, "2", ccfdc_floppies, nullptr, corcomp_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, "3", ccfdc_floppies, nullptr, corcomp_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], ccfdc_floppies, "525dd", corcomp_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], ccfdc_floppies, "525dd", corcomp_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[2], ccfdc_floppies, nullptr, corcomp_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[3], ccfdc_floppies, nullptr, corcomp_fdc_device::floppy_formats).enable_sound(true);
// SRAM 2114 1Kx4
RAM(config, BUFFER).set_default_size("1k").set_default_value(0);
diff --git a/src/devices/bus/ti99/peb/cc_fdc.h b/src/devices/bus/ti99/peb/cc_fdc.h
index 49530f8e428..62dc5b9adb7 100644
--- a/src/devices/bus/ti99/peb/cc_fdc.h
+++ b/src/devices/bus/ti99/peb/cc_fdc.h
@@ -89,11 +89,7 @@ protected:
void operate_ready_line();
// Link to the attached floppy drives
- required_device<floppy_connector> m_flopcon0;
- required_device<floppy_connector> m_flopcon1;
- required_device<floppy_connector> m_flopcon2;
- required_device<floppy_connector> m_flopcon3;
- floppy_image_device* m_floppy[4];
+ required_device_array<floppy_connector, 4> m_floppy;
// Motor monoflop
required_device<ttl74123_device> m_motormf;
diff --git a/src/devices/bus/ti99/peb/hfdc.cpp b/src/devices/bus/ti99/peb/hfdc.cpp
index a18adb9aed9..ad116788507 100644
--- a/src/devices/bus/ti99/peb/hfdc.cpp
+++ b/src/devices/bus/ti99/peb/hfdc.cpp
@@ -102,13 +102,8 @@ myarc_hfdc_device::myarc_hfdc_device(const machine_config &mconfig, const char *
m_motor_on_timer(nullptr),
m_hdc9234(*this, FDC_TAG),
m_clock(*this, CLOCK_TAG),
- m_flopcon0(*this, "f1"),
- m_flopcon1(*this, "f2"),
- m_flopcon2(*this, "f3"),
- m_flopcon3(*this, "f4"),
- m_hardcon0(*this, "h1"),
- m_hardcon1(*this, "h2"),
- m_hardcon2(*this, "h3"),
+ m_floppy(*this, "f%u", 1),
+ m_harddisk(*this, "h%u", 1),
m_current_floppy(nullptr),
m_current_harddisk(nullptr),
m_current_floppy_index(NONE),
@@ -734,7 +729,7 @@ void myarc_hfdc_device::connect_floppy_unit(int index)
LOGMASKED(LOG_LINES, "Select floppy drive DSK%d\n", index+1);
// Connect new drive
- m_current_floppy = m_floppy_unit[index];
+ m_current_floppy = m_floppy[index]->get_device();
m_current_floppy_index = index;
// We don't use the READY line of floppy drives.
@@ -764,7 +759,7 @@ void myarc_hfdc_device::connect_harddisk_unit(int index)
LOGMASKED(LOG_LINES, "Select hard disk WDS%d\n", index+1);
// Connect new drive
- m_current_harddisk = m_harddisk_unit[index];
+ m_current_harddisk = m_harddisk[index]->get_device();
m_current_hd_index = index;
LOGMASKED(LOG_LINES, "Connect index callback WDS%d\n", index+1);
@@ -826,8 +821,8 @@ void myarc_hfdc_device::set_floppy_motors_running(bool run)
}
// Set all motors
- for (auto & elem : m_floppy_unit)
- if (elem != nullptr) elem->mon_w((run)? 0 : 1);
+ for (auto & elem : m_floppy)
+ if (elem->get_device() != nullptr) elem->get_device()->mon_w((run)? 0 : 1);
}
/*
@@ -949,30 +944,21 @@ void myarc_hfdc_device::device_reset()
m_selected = false;
m_lastval = 0;
m_readyflags = 0;
-
- m_floppy_unit[0] = m_flopcon0->get_device();
- m_floppy_unit[1] = m_flopcon1->get_device();
- m_floppy_unit[2] = m_flopcon2->get_device();
- m_floppy_unit[3] = m_flopcon3->get_device();
- m_harddisk_unit[0] = m_hardcon0->get_device();
- m_harddisk_unit[1] = m_hardcon1->get_device();
- m_harddisk_unit[2] = m_hardcon2->get_device();
-
- for (int i=0; i < 4; i++)
+ for (auto &flop : m_floppy)
{
- if (m_floppy_unit[i] != nullptr)
- LOGMASKED(LOG_CONFIG, "FD connector %d with %s\n", i+1, m_floppy_unit[i]->name());
+ if (flop->get_device() != nullptr)
+ LOGMASKED(LOG_CONFIG, "FD connector %d with %s\n", flop->basetag(), flop->get_device()->name());
else
- LOGMASKED(LOG_CONFIG, "FD connector %d has no floppy attached\n", i+1);
+ LOGMASKED(LOG_CONFIG, "FD connector %d has no floppy attached\n", flop->basetag());
}
- for (int i=0; i < 3; i++)
+ for (auto &hard : m_harddisk)
{
- if (m_harddisk_unit[i] != nullptr)
- LOGMASKED(LOG_CONFIG, "HD connector %d with %s\n", i+1, m_harddisk_unit[i]->name());
+ if (hard->get_device() != nullptr)
+ LOGMASKED(LOG_CONFIG, "HD connector %d with %s\n", hard->basetag(), hard->get_device()->name());
else
- LOGMASKED(LOG_CONFIG, "HD connector %d has no drive attached\n", i+1);
+ LOGMASKED(LOG_CONFIG, "HD connector %d has no floppy attached\n", hard->basetag());
}
// Disconnect all units
@@ -1073,15 +1059,15 @@ void myarc_hfdc_device::device_add_mconfig(machine_config& config)
m_hdc9234->dmaout_cb().set(FUNC(myarc_hfdc_device::write_buffer));
// First two floppy drives shall be connected by default
- FLOPPY_CONNECTOR(config, m_flopcon0, hfdc_floppies, "525dd", myarc_hfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon1, hfdc_floppies, "525dd", myarc_hfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon2, hfdc_floppies, nullptr, myarc_hfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon3, hfdc_floppies, nullptr, myarc_hfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], hfdc_floppies, "525dd", myarc_hfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], hfdc_floppies, "525dd", myarc_hfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[2], hfdc_floppies, nullptr, myarc_hfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[3], hfdc_floppies, nullptr, myarc_hfdc_device::floppy_formats).enable_sound(true);
// Hard disks don't go without image (other than floppy drives)
- MFM_HD_CONNECTOR(config, m_hardcon0, hfdc_harddisks, nullptr, MFM_BYTE, 3000, 20, MFMHD_GEN_FORMAT);
- MFM_HD_CONNECTOR(config, m_hardcon1, hfdc_harddisks, nullptr, MFM_BYTE, 3000, 20, MFMHD_GEN_FORMAT);
- MFM_HD_CONNECTOR(config, m_hardcon2, hfdc_harddisks, nullptr, MFM_BYTE, 3000, 20, MFMHD_GEN_FORMAT);
+ MFM_HD_CONNECTOR(config, m_harddisk[0], hfdc_harddisks, nullptr, MFM_BYTE, 3000, 20, MFMHD_GEN_FORMAT);
+ MFM_HD_CONNECTOR(config, m_harddisk[1], hfdc_harddisks, nullptr, MFM_BYTE, 3000, 20, MFMHD_GEN_FORMAT);
+ MFM_HD_CONNECTOR(config, m_harddisk[2], hfdc_harddisks, nullptr, MFM_BYTE, 3000, 20, MFMHD_GEN_FORMAT);
MM58274C(config, CLOCK_TAG, 0).set_mode_and_day(1, 0); // 24h, sunday
diff --git a/src/devices/bus/ti99/peb/hfdc.h b/src/devices/bus/ti99/peb/hfdc.h
index 53215eb2e4f..a600412849a 100644
--- a/src/devices/bus/ti99/peb/hfdc.h
+++ b/src/devices/bus/ti99/peb/hfdc.h
@@ -99,17 +99,10 @@ private:
required_device<mm58274c_device> m_clock;
// Link to the attached floppy drives
- required_device<floppy_connector> m_flopcon0;
- required_device<floppy_connector> m_flopcon1;
- required_device<floppy_connector> m_flopcon2;
- required_device<floppy_connector> m_flopcon3;
- floppy_image_device* m_floppy_unit[4];
+ required_device_array<floppy_connector, 4> m_floppy;
// Link to the attached hard disks
- required_device<mfm_harddisk_connector> m_hardcon0;
- required_device<mfm_harddisk_connector> m_hardcon1;
- required_device<mfm_harddisk_connector> m_hardcon2;
- mfm_harddisk_device* m_harddisk_unit[3];
+ required_device_array<mfm_harddisk_connector, 3> m_harddisk;
// Currently selected floppy drive
floppy_image_device* m_current_floppy;
diff --git a/src/devices/bus/ti99/peb/myarcfdc.cpp b/src/devices/bus/ti99/peb/myarcfdc.cpp
index 96677bcd751..6d96c9587c1 100644
--- a/src/devices/bus/ti99/peb/myarcfdc.cpp
+++ b/src/devices/bus/ti99/peb/myarcfdc.cpp
@@ -64,10 +64,7 @@ myarc_fdc_device::myarc_fdc_device(const machine_config &mconfig, const char *ta
m_buffer_ram(*this, BUFFER_TAG),
m_pal(*this, PAL_TAG),
m_dsrrom(nullptr),
- m_flopcon0(*this, "0"),
- m_flopcon1(*this, "1"),
- m_flopcon2(*this, "2"),
- m_flopcon3(*this, "3"),
+ m_floppy(*this, "%u", 0),
m_banksel(false),
m_cardsel(false),
m_selected_drive(0),
@@ -278,8 +275,8 @@ void myarc_fdc_device::fdc_mon_w(int state)
// Do not start the motors when no drive is selected. However, motors
// can always be stopped.
if (m_selected_drive != 0 || state==1)
- for (int i = 0; i < 4; i++)
- if (m_floppy[i] != nullptr) m_floppy[i]->mon_w(state);
+ for (auto &flop : m_floppy)
+ if (flop->get_device() != nullptr) flop->get_device()->mon_w(state);
}
/*
@@ -303,7 +300,7 @@ void myarc_fdc_device::sidsel_w(int state)
if (m_selected_drive != 0)
{
LOGMASKED(LOG_DRIVE, "Set side = %d on DSK%d\n", state, m_selected_drive);
- m_floppy[m_selected_drive-1]->ss_w(state);
+ m_floppy[m_selected_drive-1]->get_device()->ss_w(state);
}
}
@@ -339,12 +336,12 @@ void myarc_fdc_device::drivesel_w(int state)
}
else
{
- if (m_floppy[driveno-1] != nullptr)
+ if (m_floppy[driveno-1]->get_device() != nullptr)
{
m_selected_drive = driveno;
LOGMASKED(LOG_DRIVE, "Select drive DSK%d\n", driveno);
- m_wdc->set_floppy(m_floppy[driveno-1]);
- m_floppy[driveno-1]->ss_w(m_drivelatch->q2_r());
+ m_wdc->set_floppy(m_floppy[driveno-1]->get_device());
+ m_floppy[driveno-1]->get_device()->ss_w(m_drivelatch->q2_r());
}
}
}
@@ -360,17 +357,12 @@ void myarc_fdc_device::device_start()
void myarc_fdc_device::device_reset()
{
- m_floppy[0] = m_flopcon0->get_device();
- m_floppy[1] = m_flopcon1->get_device();
- m_floppy[2] = m_flopcon2->get_device();
- m_floppy[3] = m_flopcon3->get_device();
-
- for (int i=0; i < 4; i++)
+ for (auto &flop : m_floppy)
{
- if (m_floppy[i] != nullptr)
- LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", i, m_floppy[i]->name());
+ if (flop->get_device() != nullptr)
+ LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", flop->basetag(), flop->get_device()->name());
else
- LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", i);
+ LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", flop->basetag());
}
if (ioport("CONTROLLER")->read()==0)
@@ -467,10 +459,10 @@ void myarc_fdc_device::device_add_mconfig(machine_config& config)
DDCC1_PAL(config, PAL_TAG, 0);
// Floppy drives
- FLOPPY_CONNECTOR(config, "0", myarc_ddcc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, "1", myarc_ddcc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, "2", myarc_ddcc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, "3", myarc_ddcc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], myarc_ddcc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], myarc_ddcc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[2], myarc_ddcc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[3], myarc_ddcc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
}
ioport_constructor myarc_fdc_device::device_input_ports() const
diff --git a/src/devices/bus/ti99/peb/myarcfdc.h b/src/devices/bus/ti99/peb/myarcfdc.h
index e6785aab737..6bd5a416a97 100644
--- a/src/devices/bus/ti99/peb/myarcfdc.h
+++ b/src/devices/bus/ti99/peb/myarcfdc.h
@@ -85,11 +85,7 @@ private:
uint8_t* m_dsrrom;
// Link to the attached floppy drives
- required_device<floppy_connector> m_flopcon0;
- required_device<floppy_connector> m_flopcon1;
- required_device<floppy_connector> m_flopcon2;
- required_device<floppy_connector> m_flopcon3;
- floppy_image_device* m_floppy[4];
+ required_device_array<floppy_connector, 4> m_floppy;
// Debugger accessors
void debug_read(offs_t offset, uint8_t* value);
diff --git a/src/devices/bus/ti99/peb/ti_fdc.cpp b/src/devices/bus/ti99/peb/ti_fdc.cpp
index 41a29a0bfec..2bb69dfbca6 100644
--- a/src/devices/bus/ti99/peb/ti_fdc.cpp
+++ b/src/devices/bus/ti99/peb/ti_fdc.cpp
@@ -56,9 +56,7 @@ ti_fdc_device::ti_fdc_device(const machine_config &mconfig, const char *tag, dev
m_crulatch(*this, "crulatch"),
m_motormf(*this, "motormf"),
m_dsrrom(nullptr),
- m_flopcon0(*this, "0"),
- m_flopcon1(*this, "1"),
- m_flopcon2(*this, "2"),
+ m_floppy(*this, "%u", 0),
m_sel_floppy(0)
{
}
@@ -258,7 +256,8 @@ void ti_fdc_device::dvena_w(int state)
// Set all motors
for (auto & elem : m_floppy)
- if (elem != nullptr) elem->mon_w((state==ASSERT_LINE)? 0 : 1);
+ if (elem->get_device() != nullptr)
+ elem->get_device()->mon_w((state==ASSERT_LINE)? 0 : 1);
// The motor-on line also connects to the wait state logic
operate_ready_line();
@@ -285,7 +284,7 @@ void ti_fdc_device::sidsel_w(int state)
// Select side of disk (bit 7)
LOGMASKED(LOG_CRU, "Set side (bit 7) = %d\n", state);
if (m_sel_floppy > 0)
- m_floppy[m_sel_floppy-1]->ss_w(state);
+ m_floppy[m_sel_floppy-1]->get_device()->ss_w(state);
}
/*
@@ -328,11 +327,11 @@ void ti_fdc_device::select_drive(int n, int state)
LOGMASKED(LOG_WARN, "Warning: DSK%d selected while DSK%d not yet unselected\n", n, m_sel_floppy);
}
- if (m_floppy[n-1] != nullptr)
+ if (m_floppy[n-1]->get_device() != nullptr)
{
m_sel_floppy = n;
- m_fd1771->set_floppy(m_floppy[n-1]);
- m_floppy[n-1]->ss_w(m_crulatch->q7_r());
+ m_fd1771->set_floppy(m_floppy[n-1]->get_device());
+ m_floppy[n-1]->get_device()->ss_w(m_crulatch->q7_r());
}
}
}
@@ -362,16 +361,12 @@ void ti_fdc_device::device_reset()
m_inDsrArea = false;
m_WDsel = false;
- m_floppy[0] = m_flopcon0->get_device();
- m_floppy[1] = m_flopcon1->get_device();
- m_floppy[2] = m_flopcon2->get_device();
-
- for (int i=0; i < 3; i++)
+ for (auto &flop : m_floppy)
{
- if (m_floppy[i] != nullptr)
- LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", i, m_floppy[i]->name());
+ if (flop->get_device() != nullptr)
+ LOGMASKED(LOG_CONFIG, "Connector %d with %s\n", flop->basetag(), flop->get_device()->name());
else
- LOGMASKED(LOG_CONFIG, "No floppy attached to connector %d\n", i);
+ LOGMASKED(LOG_CONFIG, "Connector %d has no floppy attached\n", flop->basetag());
}
m_sel_floppy = 0;
@@ -402,9 +397,9 @@ void ti_fdc_device::device_add_mconfig(machine_config& config)
m_fd1771->drq_wr_callback().set(FUNC(ti_fdc_device::fdc_drq_w));
m_fd1771->hld_wr_callback().set(FUNC(ti_fdc_device::fdc_hld_w));
- FLOPPY_CONNECTOR(config, m_flopcon0, tifdc_floppies, "525dd", ti_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon1, tifdc_floppies, "525dd", ti_fdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_flopcon2, tifdc_floppies, nullptr, ti_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], tifdc_floppies, "525dd", ti_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], tifdc_floppies, "525dd", ti_fdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[2], tifdc_floppies, nullptr, ti_fdc_device::floppy_formats).enable_sound(true);
LS259(config, m_crulatch); // U23
m_crulatch->q_out_cb<0>().set(FUNC(ti_fdc_device::dskpgena_w));
diff --git a/src/devices/bus/ti99/peb/ti_fdc.h b/src/devices/bus/ti99/peb/ti_fdc.h
index eb5eb1b8054..cfe822c0dae 100644
--- a/src/devices/bus/ti99/peb/ti_fdc.h
+++ b/src/devices/bus/ti99/peb/ti_fdc.h
@@ -104,10 +104,7 @@ private:
uint8_t* m_dsrrom;
// Link to the attached floppy drives
- required_device<floppy_connector> m_flopcon0;
- required_device<floppy_connector> m_flopcon1;
- required_device<floppy_connector> m_flopcon2;
- floppy_image_device* m_floppy[3];
+ required_device_array<floppy_connector, 3> m_floppy;
// Currently selected floppy drive
int m_sel_floppy;