<?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; Использование эмулятора дисковода для сдампливания дисков]]></title>
		<link>https://forum.agatcomp.ru//viewtopic.php?id=128</link>
		<atom:link href="https://forum.agatcomp.ru/extern.php?action=feed&amp;tid=128&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Использование эмулятора дисковода для сдампливания дисков».]]></description>
		<lastBuildDate>Sun, 24 Dec 2017 19:15:28 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Использование эмулятора дисковода для сдампливания дисков]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1481#p1481</link>
			<description><![CDATA[<div class="quotebox"><cite>LeoN пишет:</cite><blockquote><p>Отличная идея!<br /></p><div class="quotebox"><cite>sintech пишет:</cite><blockquote><p>Анализатор согласно формату <strong>находит все desync последовательности</strong></p></blockquote></div><p>Как он их находит? Расскажи, плиз.</p></blockquote></div><p>Я определил для себя &quot;магическую&quot; последовательность 0x89245555 (0100010010010010 <strong>0</strong> 0101010101010101), которая представляет из себя ни что иное как закодированные в MFM байты A4 FF разделенные 2мс промежутком. 2мс промежуток считывается как дополнительный 0 между единицами.<br />Алгоритм считывания простой:<br /></p><div class="codebox"><pre><code>     if (zero_len &lt; 450) {
        oneword = oneword &lt;&lt; 2 | B10;
      }
      else if (zero_len &gt; 450 &amp;&amp; zero_len &lt; 650) {
        oneword = oneword &lt;&lt; 3 | B100;
      }
      else if (zero_len &gt; 650) {
        oneword = oneword &lt;&lt; 4 | B1000;
      }</code></pre></div><p>zero_len это кол-во тиков процессора между единицами.</p><p>По итогам работы над этим проектом я понял, что время чтения дискеты, передачи на PC, преобразования и сохранения в DSK образ слишком большое, порядка 4-5 минут. Его можно сократить примерно в 2 раза, убрав трехкратное перечитывание дорожки для более надежного декодирования. Но все равно получается слишком медленно и не очень удобно.<br />Поэтому в финальной версии буду все-таки делать управление с кнопок в пакетном режиме: каждое нажатие кнопки будет считывать данные и сохранять в сыром формате на SD карту с именем IMAGE_XXX.NIB для последующего декодирования на PC.<br />Знания, полученные в ходе экспериментов, будут использованы для создания поддержки записи в текущей версии эмулятора. Тем не менее, запись будет работать только в тех программах, которые пишут посекторно, через RWTS. Программы, пишущие больше одной дорожки подряд, будут думать, что у них ничего не записалось.</p>]]></description>
			<author><![CDATA[null@example.com (sintech)]]></author>
			<pubDate>Sun, 24 Dec 2017 19:15:28 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1481#p1481</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование эмулятора дисковода для сдампливания дисков]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1477#p1477</link>
			<description><![CDATA[<p>Отличная идея!<br /></p><div class="quotebox"><cite>sintech пишет:</cite><blockquote><p>Анализатор согласно формату <strong>находит все desync последовательности</strong></p></blockquote></div><p>Как он их находит? Расскажи, плиз.</p>]]></description>
			<author><![CDATA[null@example.com (LeoN)]]></author>
			<pubDate>Wed, 20 Dec 2017 20:31:21 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1477#p1477</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование эмулятора дисковода для сдампливания дисков]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1475#p1475</link>
			<description><![CDATA[<p>Круто! Буду собирать себе эту штуку как только закончите с прошивкой.</p>]]></description>
			<author><![CDATA[null@example.com (Wierzbowsky)]]></author>
			<pubDate>Wed, 20 Dec 2017 12:03:22 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1475#p1475</guid>
		</item>
		<item>
			<title><![CDATA[Использование эмулятора дисковода для сдампливания дисков]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1474#p1474</link>
			<description><![CDATA[<p>В один прекрасный день мне пришла идея: если <a href="http://agatcomp.ru/Hard/DualDriveFddEmul.shtml">эмулятор</a> это полностью программно определяемое устройство, то почему бы не заставить его работать в обратном направлении?</p><p>Все управляющие сигналы с дисковода подведены к отдельным ножкам teensy, т.е. можно программно поменять входы с выходами и подключить к 34 контактному разъему вместо платы контроллера, сам дисковод стандартным PC кабелем.<br />Далее можно написать прошивку для контроллера, которая будет проходить по всем дорожкам и считывать данные, путем замера длинны паузы между импульсами нулевого уровня на выходе READ дисковода. Эти данные достаточно легко преобразовать в битовый поток, примерно как я описывал в <a href="https://github.com/sintech/AGAT/blob/master/docs/agat-840-analysis.md">https://github.com/sintech/AGAT/blob/ma … nalysis.md</a><br />Остается вопрос, где хранить сырые mfm данные? Можно конечно сохранять их на SD карте, но довольно неудобно управлять процессом тремя кнопками эмулятора.<br />Поэтому было решено передавать сырые данные каждой прочитанной дорожки по USB через RAWHid устройство, которым может притворяться Teensy.</p><p>В качестве основы для PC клиента я выбрал python, который имеет кроссплатформенные Hid библиотеки.<br />Данные через RAWHid можно передавать только блоками по 64 байта, поэтому на стороне Teensy прочитанные данные разбиваются на блоки со свом заголовком и метаданными (дорожка, номер блока и т.д.) и затем передаются на PC, где вновь объединяются и передаются в функцию анализатор.<br />Анализатор согласно <a href="https://github.com/sintech/AGAT/blob/master/docs/agat-840k-format.txt">формату</a> находит все desync последовательности и проходя по ним, считывает следующие два (четыре MFM) байта, если это поле адреса, то в словарь (python dict) сохраняется номер дорожки и сектора. Если недалеко от от поля адреса располагается поле данных, то производится его декодирование из MFM в обычный список байт и расчет контрольной суммы. Если КС совпадает с тем что считалось с диска, то поле данных также сохраняется в словарь. <br />Для надежности было решено считывать данные в течении трех оборотов дискеты, поэтому при анализе если блок данных совпадает с уже записанным в словарь, то счетчик успешных чтений инкрементируется, таким образом мы можем узнать качество прочитанного для каждого сектора в отдельности, или даже попробовать еще раз перечитать дорожку если у одного из секторов нет успешно прочитанных данных.<br />После того как все дорожки прочитаны, можно сохранить все поля данных в файл получив на выходе DSK образ дискеты. Но т.к. на вход программы передается сырой битовый поток, а также есть возможность сохранить информацию о начале и конце импульса индексного отверстия, то на выходе можно получить AIM, MFM или любой другой формат.<br />Управляет процессом чтения та же python программа, посылая в сторону эмулятора команды: включить двигатель, на какую дорожку передвинуть головку, выключить двигатель и т.д.</p><p>Определенный интерес представляет возможность сохранять статистическую информацию о распределении длительности пауз при чтении с диска, которую можно передавать на PC для дополнительного анализа. <br />Описанный подход к чтению информации абсолютно не привязан к формату Агат и позволит снимать данные с любых дискет которые только сможет прочитать дисковод.</p><p>Уже готова альфа версия в виде отдельной прошивки для Teensy в составе <a href="http://agatcomp.ru/Hard/DualDriveFddEmul.shtml">эмулятора дисковода 140+840</a>, требуются минимальные изменения схемы (соединить три контакта 34 разъема). В дальнейшем планируется выпустить новую прошивку с возможностью переключения режимов путем, например зажатия кнопки при включении питания эмулятора.</p><p>Скоро будет демо, и видео работы ;)</p><p>Жду советов и предложений.</p>]]></description>
			<author><![CDATA[null@example.com (sintech)]]></author>
			<pubDate>Tue, 19 Dec 2017 21:33:36 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1474#p1474</guid>
		</item>
	</channel>
</rss>
