summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/bbc/fdc/opus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/bbc/fdc/opus.cpp')
-rw-r--r--src/devices/bus/bbc/fdc/opus.cpp77
1 files changed, 43 insertions, 34 deletions
diff --git a/src/devices/bus/bbc/fdc/opus.cpp b/src/devices/bus/bbc/fdc/opus.cpp
index f6b07df6bcb..2eaa599fc97 100644
--- a/src/devices/bus/bbc/fdc/opus.cpp
+++ b/src/devices/bus/bbc/fdc/opus.cpp
@@ -12,10 +12,12 @@
**********************************************************************/
-
#include "emu.h"
#include "opus.h"
+#include "formats/acorn_dsk.h"
+#include "formats/fsd_dsk.h"
+
//**************************************************************************
// DEVICE DEFINITIONS
@@ -28,16 +30,18 @@ DEFINE_DEVICE_TYPE(BBC_OPUS1770, bbc_opus1770_device, "bbc_opus1770", "Opus D-DO
//-------------------------------------------------
-// MACHINE_DRIVER( opus2791 )
+// FLOPPY_FORMATS( floppy_formats )
//-------------------------------------------------
-FLOPPY_FORMATS_MEMBER( bbc_opusfdc_device::floppy_formats )
- FLOPPY_ACORN_SSD_FORMAT,
- FLOPPY_ACORN_DSD_FORMAT,
- FLOPPY_FSD_FORMAT,
- FLOPPY_OPUS_DDOS_FORMAT,
- FLOPPY_OPUS_DDCPM_FORMAT
-FLOPPY_FORMATS_END0
+void bbc_opusfdc_device::floppy_formats(format_registration &fr)
+{
+ fr.add_mfm_containers();
+ fr.add(FLOPPY_ACORN_SSD_FORMAT);
+ fr.add(FLOPPY_ACORN_DSD_FORMAT);
+ fr.add(FLOPPY_FSD_FORMAT);
+ fr.add(FLOPPY_OPUS_DDOS_FORMAT);
+ fr.add(FLOPPY_OPUS_DDCPM_FORMAT);
+}
static void bbc_floppies_525(device_slot_interface &device)
{
@@ -48,6 +52,10 @@ static void bbc_floppies_525(device_slot_interface &device)
device.option_add("525qd", FLOPPY_525_QD);
}
+//-------------------------------------------------
+// ROM( opus )
+//-------------------------------------------------
+
ROM_START( opus8272 )
ROM_REGION(0x4000, "dfs_rom", 0)
ROM_DEFAULT_BIOS("ddos305")
@@ -98,8 +106,8 @@ void bbc_opus8272_device::device_add_mconfig(machine_config &config)
I8272A(config, m_fdc, 20_MHz_XTAL / 5, true);
m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w));
- FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
}
void bbc_opus2791_device::device_add_mconfig(machine_config &config)
@@ -108,8 +116,8 @@ void bbc_opus2791_device::device_add_mconfig(machine_config &config)
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
m_fdc->hld_wr_callback().set(FUNC(bbc_opusfdc_device::motor_w));
- FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
}
void bbc_opus2793_device::device_add_mconfig(machine_config &config)
@@ -118,8 +126,8 @@ void bbc_opus2793_device::device_add_mconfig(machine_config &config)
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
m_fdc->hld_wr_callback().set(FUNC(bbc_opusfdc_device::motor_w));
- FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
}
void bbc_opus1770_device::device_add_mconfig(machine_config &config)
@@ -127,8 +135,8 @@ void bbc_opus1770_device::device_add_mconfig(machine_config &config)
WD1770(config, m_fdc, DERIVED_CLOCK(1, 1));
m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w));
- FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[0], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true);
}
const tiny_rom_entry *bbc_opus8272_device::device_rom_region() const
@@ -164,8 +172,7 @@ bbc_opus8272_device::bbc_opus8272_device(const machine_config &mconfig, const ch
device_t(mconfig, BBC_OPUS8272, tag, owner, clock),
device_bbc_fdc_interface(mconfig, *this),
m_fdc(*this, "i8272"),
- m_floppy0(*this, "i8272:0"),
- m_floppy1(*this, "i8272:1")
+ m_floppy(*this, "i8272:%u", 0)
{
}
@@ -173,8 +180,7 @@ bbc_opusfdc_device::bbc_opusfdc_device(const machine_config &mconfig, device_typ
device_t(mconfig, type, tag, owner, clock),
device_bbc_fdc_interface(mconfig, *this),
m_fdc(*this, "fdc"),
- m_floppy0(*this, "fdc:0"),
- m_floppy1(*this, "fdc:1"),
+ m_floppy(*this, "fdc:%u", 0),
m_drive_control(0)
{
}
@@ -224,15 +230,17 @@ uint8_t bbc_opus8272_device::read(offs_t offset)
break;
case 0x06:
- if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(1);
- if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(1);
+ if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->mon_w(1);
+ if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->mon_w(1);
+ [[fallthrough]];
case 0x04:
data = m_fdc->msr_r();
break;
case 0x05:
- if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0);
- if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0);
+ if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->mon_w(0);
+ if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->mon_w(0);
+ [[fallthrough]];
case 0x07:
data = m_fdc->fifo_r();
break;
@@ -249,15 +257,16 @@ void bbc_opus8272_device::write(offs_t offset, uint8_t data)
case 0x01:
switch (data & 0x01)
{
- case 0: floppy = m_floppy1->get_device(); break;
- case 1: floppy = m_floppy0->get_device(); break;
+ case 0: floppy = m_floppy[1]->get_device(); break;
+ case 1: floppy = m_floppy[0]->get_device(); break;
}
m_fdc->set_floppy(floppy);
break;
case 0x05:
- if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(0);
- if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(0);
+ if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->mon_w(0);
+ if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->mon_w(0);
+ [[fallthrough]];
case 0x07:
m_fdc->fifo_w(data);
break;
@@ -291,8 +300,8 @@ void bbc_opusfdc_device::write(offs_t offset, uint8_t data)
// bit 0: drive select
switch (BIT(data, 0))
{
- case 0: floppy = m_floppy0->get_device(); break;
- case 1: floppy = m_floppy1->get_device(); break;
+ case 0: floppy = m_floppy[0]->get_device(); break;
+ case 1: floppy = m_floppy[1]->get_device(); break;
}
m_fdc->set_floppy(floppy);
@@ -309,8 +318,8 @@ void bbc_opusfdc_device::write(offs_t offset, uint8_t data)
}
}
-WRITE_LINE_MEMBER(bbc_opusfdc_device::motor_w)
+void bbc_opusfdc_device::motor_w(int state)
{
- if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);
- if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(!state);
+ if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->mon_w(!state);
+ if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->mon_w(!state);
}