Тема: MFM кодек
Предлагаю "закрепить" для однозначного мыслеизъявления и однозначного понимания кого-либо:
1. Терминология и обозначение. "Данные", "бит данных" - именно данные, и ничего другого! Обозначаем дефолтным или зеленым цветом "01010011", "01010011", "$53", "$53" и т.д. Скорость передачи 250 кб/с (хотя в АГАТе ~257 кб/с, но это не принципиально), значит длительность нуля равна длительности единицы и равна 4 мкс.
2. Терминология и обозначение. Физические/электрические "сигналы/импульсы на разъёме дисковёрта" обозначаем красным цветом. Примеры: "...010110111011..." (смотрим осциллограммы чтения/записи в даташитах дисковёртов), "...RNRNNRNNNRNN...".
а) "0" - логический ноль, соответствует напряжению, близкому к 0 Вольт (насколько выходной буфер с открытым коллектором сможет прижать к земле), то, что мы видим мультиметром или осциллографом, активное состояние сигнала (инверсная логика). Он же "R" (он же просто "R") - "current Reverse", смена направления тока. Важно! "0" и "R" - это импульс, может быть периодическим ("...RNRNRNRN...", "...RNNRNNRNN...", "...RNNNRNNNRNNN...) и непериодическим ("...RNRNN...", "...RNNRNNN...", "...RNRNNRNNN..."), зависит от самих записываемых/читаемых данных.
б) "1" - логическая единица, соответствует напряжению, близкому к напряжению питания (обычно 5 Вольт), обеспечивается притягиванием резистором к питалову, пассивное состояние сигнала (инверсная логика), именно так мы видим мультиметром или осциллографом. Он же "N" (или просто "N"), он же "Idle", он же "простой" (не от слова "просто", а от слова "стоять").
в) Длительность импульса "0" (или "R", или "R") - не более половины длительности бита данных, то есть <= 2мкс. При записи зависит от контроллера (частота тактирования секвенсера, мощность выходного каскада, номинал подтягивающего резистора на стороне дисковода), а при чтении от дисковода (усилители аналогового сигнала, тактирование и логика работы оцифровщика, номинал подтягивающего резистора на стороне контроллера). На практике значительно меньше половины длительности бита данных (в даташитах дисководов это оговорено), а у HD-дисководов даже меньше четверти длительности бита данных (это при 250 кб/с, а при 500 кб/с - меньше половины).
г) Длительность простоя (считаю, что термин "пауза" здесь не уместен) "1" (или "N", или "N") - не менее половины длительности бита данных, то есть >= 2 мкс.
д) Сумма длительности импульса "R" и длительности простоя "N" до следующего импульса "R" ("R"+"N"="RN", "0"+"1"="01") равна ровно длительности бита данных, то есть 4 мкс - одинарный интервал.
е) Сумма длительности импульса "R" и длительности двойного простоя "NN" до следующего импульса "R" ("R"+"NN"="RNN", "0"+"11"="011") равна ровно длительности полутора бит данных, то есть 6 мкс - полуторный интервал.
ж) Сумма длительности импульса "R" и длительности тройного простоя "NNN" до следующего импульса "R" ("R"+"NNN"="RNNN", "0"+"111"="0111") равна ровно длительности двух бит данных, то есть 8 мкс - двойной интервал.
3. Терминология и обозначение. MFM-кодирование/представление, обозначаемое в разных источниках то цифрами "0" и "1", то символами "R" и "N". Реверс тока обозначают "R" или "1", простой обозначают "N" или "0". Предлагаю выделять синим цветом. Примеры: "...RNRNNRNNNRNN...", что то же самое как "..101001000100...". Очевидно, что "...010110111011..."="...RNRNNRNNNRNN..."="...RNRNNRNNNRNN..."="...RNRNNRNNNRNN..."="..101001000100...". Длительности так же, как и в 2. в)-ж).
4. Терминология и обозначение. "Бит данных" и "бит синхронизации" в MFM-потоке здесь.
а) "Бит данных" - смотрим пункт 1, и ничего более!
б) Это в FM-потоке всегда есть однозначная информация о синхронизации, поэтому там как бы можно применить термин "бит синхронизации". А в MFM-потоке это не так... Считаю, что этот термин здесь вообще не приемлим. Лично у меня в голове не укладывается, как информация о синхронизации может меняться... Вы можете себе представить, чтобы у UART-а стартовый бит был то 0, то 1, в зависимости от данных?... И так же со стоповым битом, в зависимости от данных?... Ну Вы же знаете как реагирует UART на такие ситуации! Frame Error!!!
5. Владимир, вот ты расписал у себя и про синхросбой, и про два варианта дешифратора. Есть вопрос к тебе: предположим, что кортроллер уже успешно прочитал синхросбой и эпилог (или пролог? забыл уже... ну тот, который в начале) поля данных, читает данные. А там у нас идут $F5, $55, $99, то есть ...11110101 01010101 10101010..., то есть ...0101010100010001 0001000100010001 0100010001000100... Как он среагирует на это?