фдеукю у-ьфшдЖ ввз"шярюсщь D356 47C0 35F8 F55E 8A52 A88F F3F8 B003 03EB 3D7F
Интересный случай. У меня есть одно предположение почему так может быть. Запусти здесь чтение кнопкой Test (добавил её на форму). Она должна попытаться прочитать 10 первых треков диска. Если головка не будет отъезжать на нулевой трек каждый раз, то тогда я переделаю работу с драйвером по схеме как сделано в этой кнопке. Если будет, то тогда не знаю в чём причина.
NaN в таблице исправил.
Отлично. Переделал работу с драйвером. В первой версии при чтении трека или сектора драйвер каждый раз открывался и потом закрывался. Я этот код скопипастил из примеров к драйверу, знал что это неэффективно, но потом забыл про это увлекшись чтением своего архива дисков, потому что у меня это всё работало. Видимо это и приводило к возврату головки на нулевой трек.
CPLx(13.04.2020)
Сделал карту образа. Лог ошибок убрал, т.к. он стал не нужен. Я его использовал чтобы видеть какие треки дали ошибки. Теперь они видны на карте. (Полный лог всё равно оставил, решил что всё-таки он мне может быть полезен. Его по-прежнему можно отключить в командной строке.)
На карте показываются сектора: good, zero, bad и bad21. Bad21 это когда сектор дает ошибку 21, то есть вероятно не угадан формат верхней стороны или диск неформатирован. То есть это такая ошибка которую стоит отличать от других. В остальных случаях сектор обозначается просто как bad (чаще всего это ошибка 23 - CRC error). Zero это good-сектор заполненный нулями.
Над картой есть толстая черная черта - она обозначает область чтения и строится по параметрам Track From и Track To. Эти параметры можно теперь задать мышью, сделав "выделение" мышью на карте образа.
Тонкая черная черта над картой надчеркивает область 160-168 треков, просто чтобы знать где она.
Добавил кнопку Driver Version. Показывает версию драйвера, тип контроллера и поддерживаемые скорости. Тип контроллера у меня оказался 82077, и похоже это что-то очень старое. Хотел сделать измерение вращения диска, но у меня это не заработало (функция драйвера измеряющая время вращения постоянно выдает ноль). Не знаю, может заработало бы у других. А может и нет.
При запуске приложения образ теперь создается автоматически, поэтому не надо больше нажимать Create. Сама кнопка Create переименована в New.
Ну вот вроде и все изменения.
PS
Забыл написать: двойной клик по области "толстой черной полосы" устанавливает область чтения с 0 до 180.
Последний раз редактировалось CPLx; 18.04.2020 в 15:55.
Увидел здесь на форуме идею чтения трека с позиционированием с обратной стороны. Я подумал что идея в том что головка не успевает стать на трек и можно прочитать трек слегка сдвинутой головкой. По-началу отнесся к этому скептически, потому что head settle time составляет всего 15 мс (оборот диска - 200 мс), но всё равно решил проверить чтобы убедиться в том что это не будет работать. Написал код чтения диска в обратном направлении: со 159 трека по нулевой. И оказалось что процент битых секторов стал меньше почти в 2 раза у меня на моём плохо читающемся диске (у меня все диски плохо читающиеся). Делал много тестов и результаты достаточно стабильные, в том числе на других дисках: обратное чтение дает значительно меньше bad-секторов чем прямое. Возможно это лишь особенность моего дисковода и моих дисков, но особенность интересная.
Было сделано 2 алгоритма обратного чтения: быстрый и медленный. В обоих случаях треки перебирались в обратном направлении - со 159 по 0. При быстром алгоритме трек читался в прямом направлении, то есть сектора читались с 1 по 16. В медленном алгоритме сектора внутри трека читались в обратном направлении: с 16 по 1, на что уходило в 16 раз больше времени, т.к. на каждый сектор требовался целый оборот диска, поэтому этот алгоритм я назвал медленным.
Еще сделал алгоритм чтения в прямом режиме, но с обратным позиционированием при ошибке. Работает так: читает в прямом режиме как обычно, а если встречается ошибка, то головка сдвигается на 2 цилиндра вперед, потом снова назад на нужный цилиндр, таким образом приезжает на него с обратной стороны (со стороны центра диска).
Результаты такие (через запятую перечислено количество bad-секторов в результате трех экспериментов):
(Во всех случаях сектор читался в 3 попытки)Код:Прямое чтение: 215, 198, 203 Быстрое обратное чтение: 116, 87, 82 Медленное обратное чтение: 95, 122, 91 Прямое с обратным позиционированием при ошибке: 112, 104, 103
Для примера, на карте образа одного из дисков это выглядело так:
Таким образом, получилось что быстрое обратное чтение мало чем отличается от медленного по числу bad-секторов, но скорость имеет гораздо выше. Прямое чтение с обратным позиционированием дало результат примерно такой же, но работает тоже значительно медленнее из-за частого позиционирования. Поэтому из этих трех экспериментальных алгоритмов я решил оставить только алгоритм быстрого обратного чтения и повесить его на кнопку Read Backward.
Почему чтение улучшается при обратном движении головки это отдельный вопрос. Моё предположение таково, что головки немного отклоняются при движении по диску (они подвешены на гибком основании), поэтому движение в разных направлениях приводит к отклонению головок в разную сторону. Одним из самых эффективных способов улучшения чтения что я знаю это небольшой сдвиг головок рукой, меньше миллиметра. Обратное чтение позволяет получить подобный эффект, хотя и в значительно меньшей степени, без прикосновения к головкам руками. Этот диск, на котором делались эксперименты, может быть прочитан на 100% если сдвигать головки вручную. С помощью многократного чтения (прямое + обратное) удавалось достичь цифры 78 bad-секторов без сдвига головок руками.
Еще догадался как измерить скорость вращения диска с помощью простого чтения (очень хотелось померять скорость диска, а функция драйвера у меня не работает, либо я неправильно её использую). Читается один и тот же сектор и замеряется частота чтения. Оказалось что диск у меня вращается со скоростью 295 оборотов в минуту. По логу выложенном в этом сообщении можно вычислить что скорость вращения диска составила 288 об/мин. Фунцию измерения скорости вращения диска также добавил.
Сделал help, в котором нет ничего нового и который представляет собой сокращенную версию первого поста из этой темы.
Новую версию добавил в первое сообщение темы.
Black Cat / Era CG(23.04.2020), Djoni(29.04.2020), Serebriakov(29.04.2020), SoftLight(22.04.2020), Titus(29.04.2020), Tuvic(23.04.2020)
CPLx, а можно добавить формат CP/M-дискет Корвета в вашу утилиту?
Стандартный формат *.kdi - это простая посекторная копия 800 KБ = 2 стороны * 80 дорожек * 5 секторов * 1024 байта.
Пустой образ или битые сектора заполняются символом с HEX: E5 (судя по анализу образов, именно этим символом в Корветовских дискетах заполнены пустые байты, а не нулем NULL).
Вот здесь можно взять примеры образов.
Последний раз редактировалось Serebriakov; 29.04.2020 в 12:17.
Всё гораздо проще - люфт механизма позиционирования головок. Особенно сильно этим страдает советский 5305. У 5311 и 5313 такое тоже может проявляться, но обычно в том случае, если провода к головке задубели и не дают нормально подойти к треку с одной стороны. На Тиках не встречал, на дисководах с червячным приводом тоже. Обычно на дорожку становятся намертво. Но иногда тоже может помочь в чтении подойти с обратной стороны. Я обычно на сбойных секторах помогаю головке пальцем, подталкивая немного или в одном, или в другом направлении.
На MFM-винчестерах вообще есть механизм микростеппинга, когда можно активировать этот режим и головка будет делать шаги меньше, чем шаг между дорожками для восстановления информации.
С уважением, Александр.
Scorpion ZS-256 Turbo+ GMX-2048
SID-Blaster/ZX
Музей ретрокомпьютеров в Минске!
Здесь ничего нет => http://byteman.by
И здесь тоже --->>> http://bytespace.by
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)