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