Ага, сенкс, зафиксировал ссылки, кой что ещё нашел, поиграем.
-=-
Несколько слов про формат MX от ДВК. Очень странное решение. Ладно бы рессурсы экономили, но контроллер MX размером с половину агатовской материнки.
Тут его лучшее и единственное найденное мной описание:
https://zx-pk.ru/threads/20541-kontroll … rammy.html
Описание достаточно полное, хотя у меня и осталось немного вопросов и их пришлось разбирать на примерах.
Итак:
Формат основан на самом простом алгоритме кодирования - ЧМ - т.е. тут на поверхности чередуются синхробиты (всегда "1") и биты данных (любые значния). Этот же тип кодирования использован в Микроше, но там всё сделано хорошо и удобно, а что здесь ? Здесь странно и неудобно:
1) Тут оперируют не байтами, но словами по 16 бит. Вроде бы логично для 16-битной архитектуры, но не для контроллера: если однокристальные 8-битные регистры найти не сложно, то 16-битные я не припомню.
2) Синхронизация контроллера по словам происходит только после индексного отверстия, по факту чтения
сигнатурного слова. Всё. Судя по всему, поймав это слово, контроллер больше синхронизоваться нигде не собирается.
2.5) После сигнатурного слова есть ещё слово номера цилиндра. Слова головки, в общем случае, нет.
У меня два диска, записанных на одной ДВК. Один использовался в верхнем дисководе (a'la системный), второй - в нижнем (рабочий). Сегодня выяснил, что на одном номера цилиндов идут подряд (80 штук), на другом - через 1 (40 штук). Почему - самому интересно :)
3) Отсюда получается, что GAP-полей на треке нет, только между началом и концом дорожки.
4) Отсюда получается, трек - это один большой сектор.
5) Зачем-то его разделили на 11 частей по 256 байт. У каждой части своя CRC. (Может быть чтобы иметь побольше надёжность работы CRC?).
6) Но логично преположить, что любой сбой чтения в одной из этих частей с немалой вероятностью ломает чтение всех остальных частей до конца дорожки. Просто потому, что контроллер теряет синхронизацию по слову и, собственно, восстановить он её нигде не может, кроме как в начале дорожки.
Чем это всё плохо для моста3:
1) Нужно читать либо 2 оборота либо от индекса. И то и другое замедляет процесс.
Чтение от индекса я уже попробовал: Linux - не realtime система и если я слежу за индексом, реально чтение начинается где-то чуть позднее вводной сигнатуры (настройка и запуск семплера требуют времени или что-то ещё).
Чтобы сделать чтение в 2 оборота надо будет немного подкрутить настройки ядра, где драйвер SPI. Иначе не хватает запланированного год назад объёма буфера.
2) Коту под хвост алгоритмы "вытягивания" данных. Потому что это работает по всему треку целиком и если в форматах, где сектора разделены, можно вытащить их независимо (на разных настройках декодеров разные сектора), то здесь, если читается первый сектор и не читается второй, то поправив настройки декодеров можно прочитать второй, но - если не повезёт - не прочитается первый... а без него и второй тоже окажется недоступен.
3) Опознавание формата. Всё, что известено: в начале дорожки несколько нулей и слово-сигнатура (16 бит).
Ну так себе... В общем, оказалось, что если сделать реверс дорожки, то тоже несложно найти после индекса эти 16 бит ... ну, где нибудь после индекса :))
<а реверс - дело обычное для чтения "перевёрнутых" дисков на двухголовочных дисководах>.
Пробовал проверять сигнатуру и слово номера цилиндра - но это тоже так себе проверка. Ненадёжная.
Т.е. более-менее надёжное решение - проверять CRC первого сектора. Если совпала- наш формат.
Но реверс для этого формата пока исключил из настроек декодера.