diff options
Diffstat (limited to 'src/devices/bus/bbc/fdc/opus.cpp')
-rw-r--r-- | src/devices/bus/bbc/fdc/opus.cpp | 77 |
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); } |