<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[ПЭВМ "Агат" 7-9: Форум &mdash; MFM кодек]]></title>
		<link>https://forum.agatcomp.ru//viewtopic.php?id=207</link>
		<atom:link href="https://forum.agatcomp.ru/extern.php?action=feed&amp;tid=207&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «MFM кодек».]]></description>
		<lastBuildDate>Mon, 12 Nov 2018 00:55:42 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: MFM кодек]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=2408#p2408</link>
			<description><![CDATA[<p>Поток чтения бьётся на равные отрезки времени t. В каждый отрезок времени на входе предполагается либо логический ноль либо единица (логика автомата может корректировать фазу и она выравнивает длительность единиц на входе, но пока это не важно).</p><p>Дешифратор имеет счётчик бит. Также он имеет несколько фаз (состояний), в которые переходит в зависимости от нескольких, ранее<br />принятых бит. Фаз всего 8. Я их ещё буду описывать на сайте. Но если совсем просто: каждый чётный бит считается битом данных, каждый нечётный - битом синхронизации. Таким образом можно для простоты считать, что фазы всего две - чётная и нечётная.</p><p>Если комбинация 10001 заходит на дешифратор с чётной фазы - то она валидная и декодируется в последовательность 101. Если с нечётной, то уже при обработке четвёртого бита автомат меняет фазу и сбрасывает счётчик принятых бит.<br />Сброс счётчика - это синхронизация по выходящим битам (ну или по байтам).</p><p>В любом случае последняя единица будет задвинута в накопительный регистр как декодированный бит данных, а фаза сменится на нечётную. Это - синхронизация по входящим битам.</p><p>Сброс счётчика бит (обычно он считает вверх до 8) - это и есть выделение начала байта. Так как именно по переполнении этого счётчика декодированный байт передаётся в регистр хранения, откуда его может забрать драйвер.</p><p>Пример кода расшифровки синхронизации:</p><p>ibuf - байт с ib_cnt накопленными входящими битами<br />obuf - байт с ob_cnt декодированными битами<br />prev_v, v, t&nbsp; - промежуточные переменные</p><div class="codebox"><pre><code>    while ib_cnt &gt; 1 do begin
      t := ibuf shr (ib_cnt - 2);  // Получили очередные два бита из входных данных
      case t of
        0: v := 0;
        1: v := 1;
        2: v := 0;
        3: RunError(3);  // двух соседних единиц быть не может
        else RunError(2); // ошибка логики программы
      end;  // v - декодированный бит данных

      if prev_v or v or t = 0 then begin // Если все три переменных равных нулю
        // Сихросбой, пропускаем один входной бит и сбрасываем счётчики бит выходного потока
        ob_cnt := 0;
        obuf := 0;
        dec(ib_cnt); // меняем фазу декодирования
        sync := True; // выставляем флаг сбоя синхронизации
      end else begin
        // Всё путём, добавляем полученный бит, выщёлкиваем два бита и идём дальше
        addbito(v);
        dec(ib_cnt, 2);
      end;
      ibuf := ibuf and mask[ib_cnt];

      prev_v := v;
    end;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Mon, 12 Nov 2018 00:55:42 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=2408#p2408</guid>
		</item>
		<item>
			<title><![CDATA[Re: MFM кодек]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=2405#p2405</link>
			<description><![CDATA[<p>Владимир, не злись, пожалуйста. И не нервничай, пожалуйста.<br />Лично у меня есть определенные непонятки. Ты выложил измышления, вроде как ты разобрался в этом, вот я и пытаюсь прояснить эти непонятки для себя...</p><p>Вот два непонятных момента:</p><p>1. Есть <span style="color: blue">...10001...</span>, контроллер может совершенно штатно декодировать в <span style="color: green">...101...</span> (однозначная ситуация в отличие от <span style="color: blue">...101010101010...</span>-&gt;<span style="color: green">...000000...</span> и <span style="color: blue">...010101010101...</span>-&gt;<span style="color: green">...111111...</span>), и эта же сигнатура <span style="color: blue">...10001...</span> используется для синхросбоя... Как это?</p><p>2. Как определить начало байта?</p>]]></description>
			<author><![CDATA[null@example.com (LeoN)]]></author>
			<pubDate>Sun, 11 Nov 2018 17:24:53 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=2405#p2405</guid>
		</item>
		<item>
			<title><![CDATA[Re: MFM кодек]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=2402#p2402</link>
			<description><![CDATA[<p>Я ещё не расписал. Это только одна глава, а их будет больше. И я нигде и никому не сообщал о том, что вообще закончил даже эту. На сайте ссылок на них нет, разве что из скрипта обновлений.</p><p>Про два варианта дешифратора не понял. Откуда два варианта? В смысле вг93 и агат ?</p><p>Про F5..55..99&nbsp; тоже не понял, а в чём проблема -то? Расшифрует.<br />Если ты про 100010001 - это нормальная последовательность.</p><div class="codebox"><pre><code>100010001
dsdsdsdsds
1 0 1 0 1</code></pre></div><p>Правила синхронизации не нарушены, нормально всё.</p><p>Только что значит &quot;А там у нас идут&quot; ? У кого &quot;нас&quot; ? агат или что?<br />Потому что у агата сигнатуры полей 6a 95 и 95 6a. Хотя контроллер агата никаких ограничений не накладывает на них.</p><br /><p>И про &quot;бит синхронизации&quot;. Само слово &quot;синхронизация&quot; идёт из агатовских мануалов. Текст же про агат.<br />Там есть такое &quot;синхросбой&quot;, &quot;запись синхросбоя&quot; и т.д. Cуть всех этих явлений именно в искажении потока таким образом, чтобы дешифратор попал в нетипичное, для обычного нормального чтения, состояние. Достигается это подменой (или дополнением) вот этого самого бита - я и называю его битом синхронизации. </p><p>Если говорить о работе агатовского дешифратора и синхронизации фазы приёма бита, то он синхронизуется по каждому фронту принятой единицы, будь то бит данных или бит ... как его назвать тогда ? тактирования ?</p><p>Можно привести ещё один довод за такое название: этот бит ставится в единицу в тот момент, когда среди данных появляется много нулей. Много нулей - это (даже если забыть о полосе пропускания дисковода) шанс для дешифратора потока рано или поздно рассинхронизоваться. Т.е. когда, наконец, появится единица,<br />есть вероятность, что декодер уже уйдёт по фазе настолько далеко, что ошибётся в числе прошедших нулей.<br />И таки тогда этот самый бит без названия становится синхронизующим работу дешифратора.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Sun, 11 Nov 2018 15:27:21 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=2402#p2402</guid>
		</item>
		<item>
			<title><![CDATA[MFM кодек]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=2401#p2401</link>
			<description><![CDATA[<p>Навеяно <a href="http://agatcomp.ru/Reading/fl840k_format.shtml">этим</a> и <a href="https://zx-pk.ru/threads/26895-chtenie-diskov-bez-agata.html">этим</a>.</p><p>Предлагаю &quot;закрепить&quot; для однозначного мыслеизъявления и однозначного понимания кого-либо:</p><p><strong>1</strong>. Терминология и обозначение. &quot;Данные&quot;, &quot;бит данных&quot; - именно данные, и ничего другого! Обозначаем дефолтным или зеленым цветом &quot;01010011&quot;, &quot;<span style="color: green">01010011</span>&quot;, &quot;$53&quot;, &quot;$<span style="color: green">53</span>&quot; и т.д. Скорость передачи 250 кб/с (хотя в АГАТе ~257 кб/с, но это не принципиально), значит длительность нуля равна длительности единицы и равна 4 мкс.</p><br /><p><strong>2</strong>. Терминология и обозначение. <strong>Физические/электрические</strong> &quot;сигналы/импульсы на разъёме дисковёрта&quot; обозначаем красным цветом. Примеры: &quot;<span style="color: red">...010110111011...</span>&quot; (смотрим осциллограммы чтения/записи в даташитах дисковёртов), &quot;<span style="color: red">...RNRNNRNNNRNN...</span>&quot;.</p><p><strong>а)</strong> &quot;<span style="color: red">0</span>&quot; - логический ноль, соответствует напряжению, близкому к 0 Вольт (насколько выходной буфер с открытым коллектором сможет прижать к земле), то, что мы видим мультиметром или осциллографом, <strong>активное</strong> состояние сигнала (инверсная логика). Он же &quot;<span style="color: red">R</span>&quot; (он же просто &quot;R&quot;) - &quot;current <strong>R</strong>everse&quot;, смена направления тока. <strong>Важно!</strong> &quot;<span style="color: red">0</span>&quot; и &quot;<span style="color: red">R</span>&quot; - это <strong>импульс</strong>, может быть периодическим (&quot;<span style="color: red">...RNRNRNRN...</span>&quot;, &quot;<span style="color: red">...RNNRNNRNN...</span>&quot;, &quot;<span style="color: red">...RNNNRNNNRNNN...</span>) и непериодическим (&quot;<span style="color: red">...RNRNN...</span>&quot;, &quot;<span style="color: red">...RNNRNNN...</span>&quot;, &quot;<span style="color: red">...RNRNNRNNN...</span>&quot;), зависит от самих записываемых/читаемых данных.</p><p><strong>б)</strong> &quot;<span style="color: red">1</span>&quot; - логическая единица, соответствует напряжению, близкому к напряжению питания (обычно 5 Вольт), обеспечивается притягиванием резистором к питалову, <strong>пассивное</strong> состояние сигнала (инверсная логика), именно так мы видим мультиметром или осциллографом. Он же &quot;<span style="color: red">N</span>&quot; (или просто &quot;N&quot;), он же &quot;Idle&quot;, он же &quot;простой&quot; (не от слова &quot;просто&quot;, а от слова &quot;стоять&quot;).</p><p><strong>в)</strong> Длительность <strong>импульса</strong> &quot;<span style="color: red">0</span>&quot; (или &quot;<span style="color: red">R</span>&quot;, или &quot;R&quot;) - <strong>не более</strong> половины длительности бита данных, то есть &lt;= 2мкс. При записи зависит от контроллера (частота тактирования секвенсера, мощность выходного каскада, номинал подтягивающего резистора на стороне дисковода), а при чтении от дисковода (усилители аналогового сигнала, тактирование и логика работы оцифровщика, номинал подтягивающего резистора на стороне контроллера). На практике <strong>значительно</strong> меньше половины длительности бита данных (в даташитах дисководов это оговорено), а у HD-дисководов даже меньше <strong>четверти</strong> длительности бита данных (это при 250 кб/с, а при 500 кб/с - меньше половины).</p><p><strong>г)</strong> Длительность простоя (считаю, что термин &quot;пауза&quot; здесь не уместен) &quot;<span style="color: red">1</span>&quot; (или &quot;<span style="color: red">N</span>&quot;, или &quot;N&quot;) - <strong>не менее</strong> половины длительности бита данных, то есть &gt;= 2 мкс.</p><p><strong>д)</strong> Сумма длительности импульса &quot;R&quot; и длительности простоя &quot;N&quot; <strong>до следующего импульса &quot;R&quot;</strong> (&quot;<span style="color: red">R</span>&quot;+&quot;<span style="color: red">N</span>&quot;=&quot;<span style="color: red">RN</span>&quot;, &quot;<span style="color: red">0</span>&quot;+&quot;<span style="color: red">1</span>&quot;=&quot;<span style="color: red">01</span>&quot;) равна ровно длительности бита данных, то есть 4 мкс - <strong>одинарный</strong> интервал.</p><p><strong>е)</strong> Сумма длительности импульса &quot;R&quot; и длительности двойного простоя &quot;NN&quot; <strong>до следующего импульса &quot;R&quot;</strong> (&quot;<span style="color: red">R</span>&quot;+&quot;<span style="color: red">NN</span>&quot;=&quot;<span style="color: red">RNN</span>&quot;, &quot;<span style="color: red">0</span>&quot;+&quot;<span style="color: red">11</span>&quot;=&quot;<span style="color: red">011</span>&quot;) равна ровно длительности <strong>полутора</strong> бит данных, то есть 6 мкс - <strong>полуторный</strong> интервал.</p><p><strong>ж)</strong> Сумма длительности импульса &quot;R&quot; и длительности тройного простоя &quot;NNN&quot; <strong>до следующего импульса &quot;R&quot;</strong> (&quot;<span style="color: red">R</span>&quot;+&quot;<span style="color: red">NNN</span>&quot;=&quot;<span style="color: red">RNNN</span>&quot;, &quot;<span style="color: red">0</span>&quot;+&quot;<span style="color: red">111</span>&quot;=&quot;<span style="color: red">0111</span>&quot;) равна ровно длительности <strong>двух</strong> бит данных, то есть 8 мкс - <strong>двойной</strong> интервал.</p><br /><p><strong>3</strong>. Терминология и обозначение. <strong>MFM-кодирование/представление</strong>, обозначаемое в разных источниках то цифрами &quot;0&quot; и &quot;1&quot;, то символами &quot;R&quot; и &quot;N&quot;. Реверс тока обозначают &quot;R&quot; или &quot;1&quot;, простой обозначают &quot;N&quot; или &quot;0&quot;. <strong>Предлагаю выделять синим цветом</strong>. Примеры: &quot;<span style="color: blue">...RNRNNRNNNRNN...</span>&quot;, что то же самое как &quot;<span style="color: blue">..101001000100...</span>&quot;. Очевидно, что &quot;<span style="color: red">...010110111011...</span>&quot;=&quot;<span style="color: red">...RNRNNRNNNRNN...</span>&quot;=&quot;...RNRNNRNNNRNN...&quot;=&quot;<span style="color: blue">...RNRNNRNNNRNN...</span>&quot;=&quot;<span style="color: blue">..101001000100...</span>&quot;. Длительности так же, как и в <strong>2. в)-ж)</strong>.</p><br /><p><strong>4</strong>. Терминология и обозначение. &quot;Бит данных&quot; и &quot;бит синхронизации&quot; в MFM-потоке <a href="http://agatcomp.ru/Reading/fl840k_format.shtml">здесь</a>.</p><p><strong>а)</strong> &quot;Бит данных&quot; - смотрим пункт <strong>1</strong>, и ничего более!</p><p><strong>б)</strong> Это в <strong>FM</strong>-потоке <strong>всегда</strong> есть <strong>однозначная</strong> информация о синхронизации, поэтому там как бы можно применить термин &quot;бит синхронизации&quot;. А в MFM-потоке это не так... Считаю, что этот термин здесь вообще не приемлим. Лично у меня в голове не укладывается, как <strong>информация о синхронизации</strong> может меняться... Вы можете себе представить, чтобы у UART-а стартовый бит был то 0, то 1, в зависимости от данных?... И так же со стоповым битом, в зависимости от данных?... Ну Вы же знаете как реагирует UART на такие ситуации! Frame Error!!!</p><br /><p><strong>5</strong>. Владимир, вот ты расписал <a href="http://agatcomp.ru/Reading/fl840k_format.shtml">у себя</a> и про синхросбой, и про два варианта дешифратора. Есть вопрос к тебе: предположим, что кортроллер уже успешно прочитал синхросбой и эпилог (или пролог? забыл уже... ну тот, который в начале) поля данных, читает данные. А там у нас идут $<span style="color: green">F5</span>, $<span style="color: green">55</span>, $<span style="color: green">99</span>, то есть <span style="color: green">...11110101 01010101 10101010...</span>, то есть <span style="color: blue">...0101010100010001 0001000100010001 0100010001000100...</span> <strong>Как он среагирует на это?</strong></p>]]></description>
			<author><![CDATA[null@example.com (LeoN)]]></author>
			<pubDate>Sun, 11 Nov 2018 14:54:50 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=2401#p2401</guid>
		</item>
	</channel>
</rss>
