Вход

Просмотр полной версии : Трюки с контроллером FDD 82077



Titus
10.06.2011, 16:15
Задался целью проверить, чего полезного в плане чтения RAW-данных с дискеты может дать стандартный PC-шный контроллер 82077 (и его аналоги), и был весьма разочарован. Работаю с ним через драйвер fdrawcmd.sys.

Единственная команда для чтения трека целиком IOCTL_FDCMD_READ_TRACK, и та сделана весьма бестолково. Эта команда читает последовательно все сектора на диске от индексного отверстия до сектора с номером EOT. Причем, считает, что все эти сектора одинакового размера, какого задашь. Так как размер сектора можно задавать вплоть до 16кб, то это позволяет нам считать всю RAW-информацию с трека в составе первого встретившегося сектора. Одно но - внутри сектора контроллер не проверяет наличие маркера синронизации 100010010001001, и если встречаются склейки (а это вполне нормально, если информация на трек была записана не единым потоком, а многослойно, например форматирование/запись), то в этих местах синхронизация теряется, и данные на рассинхронизированных участках восстановлению не подлежат. Таким образом, при чтении всей дорожки в виде единого большого сектора, мы имеем RAW-данные с произвольным выпадением некоторой информации из-за рассинхронизации. Можно, конечно, многократно прочитать дорожку, в надежде, что те места, которые рассинхронизировано прочитались в прошлый раз, прочитаются корректно, но что-то мне подсказывает, что это 'прокатит' далеко не во всех случаях.
Вариант номер 2. Допустим, у нас стандартный TR-DOS-диск с 16 секторами на дорожке по 256 байт. Делаем чтение трека, установив размер сектора 512 байт, и получаем каждый второй сектор в корректном, правильно-синхронизированном виде, с 'приклеенной' в конце информацией о своей контролльной сумме и заголовке следующего сектора. Но такой метод не позволяет вынуть информацию о нечетных секторах, т.к. команда чтения RAW-данных синхронизируется только от индексного маркера. Словом, и тут засада.

p.s.: Может кто-то еще проводил эксперементы, и знает другие методы чтения хотя бы контрольной суммы секторов?

Anykey
10.06.2011, 16:37
Я пытался использовать команду IOCTL_FDCMD_READ_TRACK,
но ей необходимо чтобы дисководов было два и во втором тоже
должна стоять дискета (это что-то для калибровки).
Решил пользоваться только сканированием дорожки
и чтением.

Titus
10.06.2011, 16:52
Я пытался использовать команду IOCTL_FDCMD_READ_TRACK,
но ей необходимо чтобы дисководов было два и во втором тоже
должна стоять дискета (это что-то для калибровки).
Решил пользоваться только сканированием дорожки
и чтением.
Знаю про этот способ, но он не подходит, т.к. для этого нужно два дисковода. А у меня, да и вообще на новых матерях, в биосе поддерживается только один дисковод.

goodboy
10.06.2011, 18:51
изучи исходники mktrd, может чего-нибудь узнаешь нового.

Titus
10.06.2011, 19:17
изучи исходники mktrd, может чего-нибудь узнаешь нового.
Судя по исходнику - это простая посекторная читалка. Без всяких наворотов.