diff options
author | 2020-06-17 15:40:54 +0100 | |
---|---|---|
committer | 2020-06-17 15:48:26 +0100 | |
commit | c6d5c5e7d276579e2598db677ac56bc636f545d3 (patch) | |
tree | f3f9af9bb25c1f1724b8cd99bebd23b4fb879bb7 /src/devices/bus/bbc/fdc | |
parent | fb3758b6675450a12767c1ab6b621bff5b727836 (diff) |
bbc_cv1797: Implemented side and motor control, and now works.
Diffstat (limited to 'src/devices/bus/bbc/fdc')
-rw-r--r-- | src/devices/bus/bbc/fdc/cv1797.cpp | 60 | ||||
-rw-r--r-- | src/devices/bus/bbc/fdc/cv1797.h | 11 |
2 files changed, 32 insertions, 39 deletions
diff --git a/src/devices/bus/bbc/fdc/cv1797.cpp b/src/devices/bus/bbc/fdc/cv1797.cpp index cc29926e692..752b8d80128 100644 --- a/src/devices/bus/bbc/fdc/cv1797.cpp +++ b/src/devices/bus/bbc/fdc/cv1797.cpp @@ -6,6 +6,10 @@ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/ComputerVillage_FDC.html + Notes: + Everything seems to work, but schematic required to confirm implementation + of side and motor control. + **********************************************************************/ @@ -59,12 +63,12 @@ ROM_END void bbc_cv1797_device::device_add_mconfig(machine_config &config) { FD1797(config, m_fdc, 8_MHz_XTAL / 8); - m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w)); m_fdc->drq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::drq_w)); - m_fdc->hld_wr_callback().set(FUNC(bbc_cv1797_device::motor_w)); + m_fdc->sso_wr_callback().set(FUNC(bbc_cv1797_device::fdc_sso_w)); + m_fdc->hld_wr_callback().set(FUNC(bbc_cv1797_device::fdc_hld_w)); - FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, m_floppy1, bbc_floppies_525, "525qd", floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppies[0], bbc_floppies_525, "525qd", floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, m_floppies[1], bbc_floppies_525, "525qd", floppy_formats).enable_sound(true); } const tiny_rom_entry *bbc_cv1797_device::device_rom_region() const @@ -84,9 +88,8 @@ bbc_cv1797_device::bbc_cv1797_device(const machine_config &mconfig, const char * : device_t(mconfig, BBC_CV1797, tag, owner, clock) , device_bbc_fdc_interface(mconfig, *this) , m_fdc(*this, "fd1797") - , m_floppy0(*this, "fd1797:0") - , m_floppy1(*this, "fd1797:1") - , m_drive_control(0) + , m_floppies(*this, "fd1797:%u", 0) + , m_floppy(nullptr) { } @@ -96,7 +99,6 @@ bbc_cv1797_device::bbc_cv1797_device(const machine_config &mconfig, const char * void bbc_cv1797_device::device_start() { - save_item(NAME(m_drive_control)); } @@ -110,11 +112,11 @@ uint8_t bbc_cv1797_device::read(offs_t offset) if (offset & 0x04) { - data = m_fdc->read(offset & 0x03); + data = 0xfe; } else { - data = m_drive_control; + data = m_fdc->read(offset & 0x03); } return data; } @@ -123,36 +125,30 @@ void bbc_cv1797_device::write(offs_t offset, uint8_t data) { if (offset & 0x04) { - m_fdc->write(offset & 0x03, data); - } - else - { - floppy_image_device *floppy = nullptr; - - m_drive_control = data; - logerror("fdc: Drive control %02x\n", 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; - } - m_fdc->set_floppy(floppy); + m_floppy = m_floppies[BIT(data, 0)]->get_device(); + m_fdc->set_floppy(m_floppy); // bit 1: side select - if (floppy) - floppy->ss_w(BIT(data, 1)); + if (m_floppy) + m_floppy->ss_w(BIT(data, 1)); // bit 2: density m_fdc->dden_w(!BIT(data, 2)); - - // bit 6: reset - //m_fdc->mr_w(!BIT(data, 6)); } + else + { + m_fdc->write(offset & 0x03, data); + } +} + +WRITE_LINE_MEMBER(bbc_cv1797_device::fdc_sso_w) +{ + // TODO: schematic required to confirm usage. } -WRITE_LINE_MEMBER(bbc_cv1797_device::motor_w) +WRITE_LINE_MEMBER(bbc_cv1797_device::fdc_hld_w) { - 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) + m_floppy->mon_w(!state); } diff --git a/src/devices/bus/bbc/fdc/cv1797.h b/src/devices/bus/bbc/fdc/cv1797.h index 86207c8fcd0..8f0b272be86 100644 --- a/src/devices/bus/bbc/fdc/cv1797.h +++ b/src/devices/bus/bbc/fdc/cv1797.h @@ -27,8 +27,6 @@ class bbc_cv1797_device : public device_bbc_fdc_interface { public: - static constexpr feature_type imperfect_features() { return feature::DISK; } - // construction/destruction bbc_cv1797_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -46,13 +44,12 @@ protected: private: DECLARE_FLOPPY_FORMATS(floppy_formats); - DECLARE_WRITE_LINE_MEMBER(motor_w); + DECLARE_WRITE_LINE_MEMBER(fdc_sso_w); + DECLARE_WRITE_LINE_MEMBER(fdc_hld_w); required_device<fd1797_device> m_fdc; - required_device<floppy_connector> m_floppy0; - optional_device<floppy_connector> m_floppy1; - - int m_drive_control; + required_device_array<floppy_connector, 2> m_floppies; + floppy_image_device* m_floppy; }; |