Последний раз редактировалось dk_spb; 31.08.2016 в 08:41.
Про пресловутый "desync A1" - http://vak.ru/doku.php/proj/megadrive/mfm?do=export_raw.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Леонид, я согласен, что написаное мной не верно с точки зрения документации и возможно неграмотно технически.
Но разбираясь с форматом 840кб я рассматривал контроллер и сам Агат как черный ящик, на вход которого нужно подать определенный битовый поток. Который будет воспринят как дискета.
На самом деле конечно используется последовательность A4 FF разделенная 2 мкс интервалом нулевого уровня. Но для меня это выглядело как 12 FF. Минус один бит с начала, плюс один в конце первого байта, т.к. 2 мкс пауза декодировалась у меня в дополнительный 0.
Для целей эмуляции использование последовательности 12FF даже удобнее т.к. не требуется вставлять эту паузу между битами в функции стриминга битового потока.
P.S. Статью исправлю. Добавлю картинку с логического анализатора с десинк последовательностью.
Спасибо за конструктивную критику.
Дык, я сам учусь. Пока что очень много нестыковок в понимании вопроса:
1. Импульсы с привода идут в инверсной логике (нам важен передний фронт, он же отрицательный фронт, он же переход с единицы на ноль, он же изменение напряжения с 5В до 0В, а вот длительность активного состояния [логический ноль] импульса может варьироваться, зависит от начинки дисковода и номинала подтягивающего резистора перед триггером Шмитта в контроллере) с одинарным, полуторным, и двойным периодом. С одинарным периодом кодируются последовательные одинаковые биты данных (...111... или ...000...), причем определить до самосинхронизации, что это, единицы или нули, то есть фронт поймали в середине единицы или в начале нуля - невозможно. Еще раз обращаю внимание, что я говорю о битах данных. С полуторным периодом кодируется изменение битов данных (...100... или ...001...), здесь тоже нельзя определить, что именно пришло. А вот с двойным периодом кодируется единственная возможная комбинация данных (...101...), вот здесь у нас и происходит самосинхронизация. И далее мы уже можем определять, где приходит следующий фронт, в середине или в начале битового интервала. Но с какого из битов в любой восьмерке последовательных бит начинается байт???
2. Последний бит от 0xA4 (младший, равный нулю) после предпоследнего (тоже равного нулю), затем пауза в полинтервала 2 мкс, затем первый бит от 0xFF (старший, равный единице) будут закодированы с двойным периодом, что декодируется как ...101... Как мы определим синхросбой???
3. По ссылке выше, применительно к ВГ93/i8272:
Биты b3..b1=001 от маркера 0xC2 закодируются с периодом в два с половиной! Невалидная кодировка, как реагировать?Код:При записи маркеров байты C2 и A1 кодируются специальным образом, с нарушением обычных правил MFM: ^ ^ C ^ 2 ^ A ^ 1 ^ ^ Биты | _1 _1 _0 _0 | _0 _0 _1 _0 | _1 _0 _1 _0 | _0 _0 _0 _1 | ^ MFM с нарушением | 01 01 00 10 | 10 **00** 01 00 | 01 00 01 00 | 10 **00** 10 01 |
Биты b3..b1=000 от маркера 0xA1 закодируются с двойным периодом, и декодируются как 101! Как фиксировать синхросбой???
Последний раз редактировалось LeoN65816; 09.09.2016 в 18:55.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Описываю, то что я вижу: импульсы логической единицы (0В) имеют длину примерно 1 мкс, длительность логического нуля (5В) различна (от 3 до 7 мкс в среднем).
Когда я проигрываю закодированный в MFM образ диска на вход контроллера, каждый 1 бит я выдаю как: "0В, пауза 1 мкс, 5В, пауза 1 мкс". Каждый 0 как: "пауза 2 мкс". Биты естественно передаются в обратном порядке от старшего к младшему.
Соответственно, А4 FF выглядит в закодированном виде как: 01000100100100100101010101010101, при использовании в качестве синхропоследовательности в агат эти байты передаются как 0100010010010010, пауза 2 мкс,0101010101010101 или 010001001001001000101010101010101.
Таким образом, если использовать в эмуляторе дисковода в качестве desync, последовательность "10001001001001000101010101010101" которую я назвал 12FF, то не нужно дополнительно вставлять между определенными байтами паузу, а можно просто передать битовый поток по алгоритму описанному выше.
Фуф, еле осилил вот это, тоже есть интересное.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ночку провёл с Орлом и в итоге появился прототип реплики линка номер два для 840кб контроллера дисковода.
Плату планируется вставлять в параллельный порт лэптопа, ставить в слот контроллер и писать образы дисков на 3.5 дюймовый дисковод. Буду заказывать 5 платок, если кому-то интересно - отпишитесь. Тогда можем заказ увеличить.
Биты данных чередуются с синхробитами. Синхробиты должны быть всегда. Отсутствие синхробита и есть синхросбой.
После обнаружения синхросбоя байт начинает читаться заново, при этом сначала идёт поиск еденичного бита. Синхросбой обычно делается не на последнем бите, данные маркера должны быть таковы, чтобы после синхросбоя гарантированно произшёл ещё один синхросбой на последнем бите, при чём в нужном месте, т.е. чтобы не было смещения, когда вместо битов данных читаются синхробиты.
Последний раз редактировалось b2m; 29.09.2016 в 10:56.
(неинтересная практическая часть поскипана).
Последний раз редактировалось dk_spb; 04.10.2016 в 16:19.
Мда, как я погляжу, описание практической реализации железки для чтения любых FM/MFM дисков вызвало большой интерес и бурные обсуждения.
Ладно, разговоры о теории тоже важны.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)