PDA

Просмотр полной версии : Протокол управления флоппи приводом



Asd1995sse
09.11.2023, 14:53
Доброго времени суток. Задумал я некое устройство, которое будет полноценно работать с флоппи приводами. Планируется работа с любыми форматами дискет, до которых доберутся мои руки.
В данный момент пишется аппаратный драйвер ну и по факту сделано все самое простое:
- Переход к 0 дорожке
- Переход к нужной дорожке
- Управление мотором
- Детект наличия дискеты / открытия шторки
Но тут подкралось самое интересное, это чтение и запись.
В чем вопрос же. Как я понял у нас применяется MFM кодирование, но оно идет на всех дискетах или нет? По информации с кучи сайтов и как обычно с вики, информация расходится. Самое интересное, что у нас есть только индекс начала дорожки, но нет никакого строб сигнала, а значит как я понял придется создавать буфер неизвестного объема, чтобы в него получить сырые данные и при этом делать расчет, исходя из оборотов диска(я уже предвкушаю, что там будет некая коррекция т.к. у нас обороты 300-360). Что меня конкретно интересует в большей степени так это литература по данному вопросу. Заранее благодарю всех за помощь!

dk_spb
09.11.2023, 15:03
Хочется именно свой велосипед?
Или чем-то не устраивает масса существующих?

>Как я понял у нас применяется MFM кодирование
У Вас - это у кого?

> что у нас есть только индекс начала дорожки, но нет никакого строб сигнала
Понял, вопросы снимаю ;-)

MM
09.11.2023, 18:38
нет никакого строб сигнала
Посоветую ознакомится с платой КНГМД от ДВК ( контроллер ФМ ) :
https://www.emuverse.ru/wiki/%D0%94%D0%92%D0%9A
Особенно с его ТО
Далее - с устройством БМК контроллера МФМ КР1801ВП1-128 :
https://forum.pk-fpga.ru/viewtopic.php?f=43&t=5482 ( потребуется очень старый браузер, т.к. сертификат просрочен ).
Так же полезным будет ознакомится с принципом декодирования потока в 1818ВГ93.

Т.е. по сути обмен данными идет программно-аппаратно. Для типового чтения в ВП1-128 нет необходимости в сигнале "Индекс". Сигнал "Индекс" нужен в основном только для форматирования.

IanPo
10.11.2023, 09:28
Непонятно, чего вы хотите от этого "устройства". Я бы для себя сформулировал, какие функции оно будет выполнять.


В чем вопрос же. Как я понял у нас применяется MFM кодирование, но оно идет на всех дискетах или нет?
FM - устаревший тип, если планируете его реализовывать, то советую это делать после MFM - он гораздо более актуален.


как я понял придется создавать буфер неизвестного объема, чтобы в него получить сырые данные и при этом делать расчет, исходя из оборотов диска
Про емкости https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D0%B5%D1%82%D0%B0
У MFM в два раза больше, чем форматная емкость


(я уже предвкушаю, что там будет некая коррекция т.к. у нас обороты 300-360).
Обороты влияют не столько на емкость, сколько на скорость обмена.


Что меня конкретно интересует в большей степени так это литература по данному вопросу. Заранее благодарю всех за помощь!
Даташиты на дисководы TEAC http://www.bitsavers.org/pdf/teac/
Даташиты на контроллеры WD http://www.bitsavers.org/components/westernDigital/

anasana
10.11.2023, 12:37
т.к. у нас тут тема лёгкого чтения о сложных вопросах, подскажите, а как и может чем распарсить данные трека дискеты читая его с заду-наперёд, когда поток с носителя будет идти с обратного направления. Допустим вот пусть когда диск станет вращаться в противоположную сторону.
Основная задача - как-то вычитать все контрольные суммы на треке. если по обычному считывать, то КС за сбойным сектором так же страдает и толку от неё никакого, а вот если бы её цапнуть со другой стороны с которой ещё нет сбоя синхронизации?
и тогда останется просто брутфорсом перебрать до совпадения КС, обычно со второй половины, данные с битого сектора.

dk_spb
10.11.2023, 12:56
Таки перевервнуть диск? Правда будет сдвиг по дорожкам.

У меня написана приблуда, которая позволяет видет на экране (hex и данные) битовый поток. И его можно двигать побитно влево и вправо. Причем цветом подсвечивает сбой синхронизации (для FM или MFM, не для других). То есть если где-то потерялся битик - можно и увидеть где и данные содрать.

Asd1995sse
11.11.2023, 10:07
>Как я понял у нас применяется MFM кодирование
У Вас - это у кого?
Понял, вопросы снимаю ;-)
Не совсем корректно выразился, я имел ввиду какой тип кодирования используется при записи/чтения, но мне уже ниже подсказали.
Масса существующих не устраивает по нескольким причинам:
Во первых не везде есть низкоуровневый доступ к железу, а там где есть такой функционал, скорей всего работать на современных ОС либо не будет, либо работать будет через костыли.
Во вторых это вытекает из первого пункта - не хочу иметь дома тупо комп, для работы с дискетами. Хоть это и не существенно, хочу спокойно работать на своем пк и при этом не пользоваться удаленным рабочим столом для того, чтобы в очередной раз снять образ с дискеты, на которой есть файлы, представляющие собой историческую ценность.
Ну и последний пункт, просто мне это интересно, вот и решил попробовать.

- - - Добавлено - - -


Непонятно, чего вы хотите от этого "устройства". Я бы для себя сформулировал, какие функции оно будет выполнять.


FM - устаревший тип, если планируете его реализовывать, то советую это делать после MFM - он гораздо более актуален.


Про емкости https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D0%B5%D1%82%D0%B0
У MFM в два раза больше, чем форматная емкость


Обороты влияют не столько на емкость, сколько на скорость обмена.


Даташиты на дисководы TEAC http://www.bitsavers.org/pdf/teac/
Даташиты на контроллеры WD http://www.bitsavers.org/components/westernDigital/

Что я хочу от устройства - от части подключил к USB, получил полноценный флоппи привод с низкоуровневым доступом. Но сам драйвер можно будет использовать и автономно, например читалка дискет, которая будет работать без ПК и писать образ сразу на флеш накопитель.
Про типы я спрашивал для уточнения, что конкретно применяется. Разумеется я буду сначала делать MFM декодер/энкодер.
Про обороты я имел ввиду, что сам поток данных надо будет правильно "захватить" в массив. Ведь я не могу просто так взять и записать в переменную поток, мне надо будет исходя из скорости вращения диска рассчитать примерное время одного бита данных, чтобы например если будет идти последовательно 11 или 00 у нас не возникало проблем. В общем тактирование будет весьма интересным, а еще по любому делать ФАПЧу.

IanPo
11.11.2023, 17:37
Достаточно записывать 1 трек 1 стороны в массив, потом менять сторону и трек. Такое МК с памятью 64КБ + USB могут вполне. А скорости usb более чем достаточно даже для передачи на ходу. У дисководов скорость обмена до 500 Кбит/с (HD).

breeze
13.11.2023, 13:24
Есть проект, схожий, как вы хотите, но для чтения записи амижных дискет под виндой для arduino. Думаю можно покопаться и понять как происходит управление там.

Здесь про само исследование — https://amiga.robsmithdev.co.uk/history

Здесь про сборку проекта — https://amiga.robsmithdev.co.uk/instructions

ну и сами сырки можно глянуть — https://github.com/RobSmithDev/ArduinoFloppyDiskReader

Eltaron
13.11.2023, 21:53
Что меня конкретно интересует в большей степени так это литература по данному вопросу
Вот тут человек все сделал и для FM, и для MFM: https://github.com/keirf/greaseweazle
Если все-таки хочется сделать свое, то можно использовать эти исходники как документацию