| О программе | Немного истории | Информация | |||||||||||||||||||||||||||||||||||||||
| Форум | Файлы | Ссылки | |||||||||||||||||||||||||||||||||||||||
|
Сергей Пашкович, Новосибирск, 06.06.1991
Крупнин Роман, Нижний Новгород, 24.01.2003
Предисловие MFM запись данных гибкого диска Разделение двоичных разрядов Поле синхронизации и байт идентификатора Полный формат дорожки Контроллер гибкого диска INTEL 8272A Регистры 8272A Обзор команд 8272A Описание команд контроллера 8272A Байты состояния контроллера 8272A Контроллер гибкого диска AT Нормальные форматы дискеты PC
За основу данной статьи было взято руководство Сергея Пашковича «Защита от копирования, основанная на ключевом диске». Мною же оно было отредактировано для web, убрано все, что связано с защитой от копирования дискет, оставлены базовые параграфы, некоторые из них несколько дополнены.
Формат изменяемой частотной модуляции (MFM) гибкого диска представлен в системе IBM 34 и часто называется двойной плотностью записи. Термин одинарная плотность записи соответствует обычной частотной модуляции формата IBM 3740 (FM), который использовал 4 мкс, чтобы записать один бит данных. Оригинал MFM записывает один бит в 2-мкс ячейку, но для пятидюймовых дискет IBM PC использовалась 4-мкс ячейка. Следовательно, бесформатный размер одной дорожки будет 6.1 КБ. Так называемые диски PC высокой плотности просто выполняют 2-мкс битовую ячейку оригинальной MFM-спецификации.
Запись данных в формате FM простая: начало каждого одноразрядного регистра определяется так называемым битом синхронизации, и фактические данные записаны в центре каждой ячейки (бит данных) (См. рис. 1a). Такая методика позволяет просто различать биты, но частотные затраты возрастают вдвое, так как необходимо сохранять данные. Однако, полное удаление битов синхронизации вызывовет появление большого числа нерасшированных нулевых битов из-за произвольных изменений скорости вращения диска и генератора котроллера.
Рис.1a. FM-запись данных. Из-за такого недостатка, наибольшее количество битов в MFM записывается следующим образом: бит синхронизации записывается в начале битовой ячейки, если в предыдущей и текущей ячейке не записаны биты (См. рис. 1b). Такое кодирование делает разделение битов рядов более трудной задачей, но перемещает биты синхронизации близко к началу битовой ячейки.
Рис.1b. MFM-запись данных. Легко увидеть, что значение и FM- и MFM-кодирования зависит от начальной позиции битовой ячейки. Например, если мы разместим биты, как показано подчеркнутыми штриховыми линиями на рис. 1b, последовательность 1100 станет 0010. Поэтому, для обеспения однозначного декодирования, каждое поле данных на дорожке сопровождается полем синхронизации.
MFM-поля синхронизации состоят из 96 битов нуля (то есть, ячейки с битом синхронизации) и без битов данных), с последующими тремя байтами A1h (10100001b). Нулевые биты позволяют правильно найти ячейку данных, и A1 - идентифицировать начало фактических байтов данных. Хотя во время форматимрования записывается 12 нулевых байтов, (это значение не может изменяться программным обеспечением), фактически нужен только 1 байт (8 битов), чтобы синхронизировать битовую ячейку. Другие 11 нулевых байтов нужны на всякий случай. FM-поля синхронизации просты - они состоят из 48 нулевых битов нуля. (Напротив, FDC нуждно 8 битов для безопасности). Различные поля данных (пользовательские и дополнительные) могут различаться по единственному байту сразу после поля синхронизации. Эти байты не могут смешиваться с данными пользователя, даже если последние содержат точную последовательность байтов синхронизации/идентификатора, потому что эти байты (и только эти байты) не используют стандарт синхронизирующих битов. К сожалению, мы имеем информацию относительно соответствующих битов синхронизации только для FM-кодирования. Байты идентификатора, по всей видимости, применяются также и в MFM. (Отметим, что в поле данных первым записан старший байт). Описание байта идентификатора поля синхронизации:
Хотя в документации фирмы INTEL поле синхронизации всегда относят к части предшествующего промежутка, мы будем рассматривать его как часть последующего поля данных.
Точка ссылки для всех дисковых операций - физическая индексная метка, которая генерируется индексным отверстием дискеты. Весь формат дорожки начинающийся с физической индексной метки и может быть описан следующим образом:
Для n от 1 до N-1, где N - число секторов на дорожке : Для последнего сектора данных на дорожке : Индексная метка адреса (которая не используется для другой цели 8272A) имеет несколько различных полей синхронизации: вместо A1h используется C2h (11000010b), за которым следует байт идентификатора FCh (11111100b). Поле идентификатора сектора содержит FEh за которым следуют однобайтовые значения C, H, R, N, где C - номер цилиндра, H - номер головки, R - номера сектора и N - код размера сектора. Эти байты (включая FEh ) сопровождаются 16-битовой циклической контрольной суммой (CRC), Размер данных пользователя в следующем поле данных может вычисляется как 128*2^N, то есть, N=0 определяет размер данных в 128 байтов, N=1 - 256 байтов, N=2 - 512 байтов, и так далее. C=H=R=N=FFh определяет дефектную дорожку IBM. Поле Данных содержит FBh, за которым следуют 128*2^N байт данных пользователя и два байта CRC. Как в идентификаторе сектора, так и в поле данных CRC вычисляется по формуле: x^16+x^12+x^5+1 с начальным значением FFh (как всегда, старший бит первый). Чип FDC INTEL 8272A не имеет возможности изменения программным обеспечением длины GAP1, GAP2 и GAP5, но будет принимать дискеты с этими промежутками, отличающимися от стандарта и имеет способность измерять фактическую длину промежутка.
Команды выполняются 8272A в три последовательных фазы: фазу команды, фазу выполнения и фаза результата. В течение фазы команды ЦП инструктирует 8272A, что нужно делать. В течение фазы выполнения FDC выполняет запрашиваемое действие. Все пересылки данных пользователя (если они есть) производятся в течение фазы выполнения. За фазой выполнения следует фаза результата, когда FDC возвращает данные состояния. В то время как FDC запросы данных в течение фаз команды и результата могли задерживаться до бесконечности (данные будут сохраняться в внутренних регистрах контроллера 8272A), все запросы FDC в течение фазы выполнения должны удовлетворяться немедленно, или FDC будет генерировать ошибку ожидания и завершит операцию. Строго говоря, запрос данных не может задерживаться дольше времени пересылки 8 битов. Следовательно, на 360-KБ дисководе, который работает на 250K (1K здесь = 1000) бит в секунду (Kбод), FDC будет передавать байт данных каждые 32 mks или 31250 байтов на секунду. Хотя сам 8272A может действовать как в режиме прямого доступа к памяти (DMA), так и без него, только относительно быстрый ЦП способен на передачу данных с такой скоростью. Выполнение FDC в режиме не-DMA на дисках двойной плотности требует по крайней мере ЦП 80286 с тактовой частотой 6 MГц, в то время, как дискета с высокой плотностью AT будет требовать все 10 МГц.
![]() Главный регистр состояния MSR. Только чтение (3F4h) Разряды DxB будут устанавливаться в 1, тогда соответствующий дисковод выполняет команду установки или перекалибровки. Бит CB устанавливается, тогда FDC выполняет операцию чтения или записи. NDM устанавливается, когда FDC находится в фазе выполнения и запрещены операции DMA (это указываеттакже, что большее количество данных должны подаваться или читать из DR). DIO будет единицей, если ЦП должен читать данные из DRА и нулем, если ЦП должен подавать данные в DR. RQM = 1 указывает, что DR готов переслать следующий байт. Направление пересылки зависит от значения DIO. 8272A сохраняет текущий номер цилиндра во внутренних регистрах для каждого дисковода, соединенного с ним. Так как дисковод для гибких дискет не может отличать один цилиндр от другого (кроме цилиндра 0), это необходимо, чтобы выполнять операции установки, которые транслируются FDC в импульс шага дисковода. Эти регистры очищаются сбросом FDC (но дисковод гибкого диска не будет возвращаться на дорожку 0 при сбросе).
![]() Цифровой регистр вывода. Только запись. (3F2h) Биты DS1 и DS0 цифрового регистра вывода отменяют бит DS, определяемый в команде 8272A, так что можно изменять (заменять) дисковод в течение выполнения команды. Установка бита EC в нуль сбрасывает контроллер, так любая операция (например, форматирование дорожки или запись данных) могут быть остановлены в любой момент. (Хотя должна соблюдаться особая осторожность, чтобы выполнить резкое завершение без биений). Бит IE педназначен для применения в многоконтроллерных системах. Т.к. все FDC используют тот же самый IRQ 6 и канал 2 DMA, бездействующий контроллер может (или не может - нельзя сказать определенно) установить эту линию в низкий уровень, таким образом запрещая другим контроллерам доступ к системному обслуживанию. 3F7h (запись) выбирает скорости пересылки: Первые три значения (00-10) приведены в руководствах. Хотя последнее значение неописано, оно работало на любом AT FDC, с которыми я когда-либо сталкиваться. (Это существенная скорость пересылки - она разрешает чтение-запись SD-дисков в дисководе на 360 КБ). Значения 00-10 предназначаются для применения с MFM-дискетами, так что они имеют импульсы в 1/4 длины цикла. Синхронизация на 125 КБод имеет импульсы в 1/8 длины цикла. Т.к. FDC не имеют FM-синхронизации на 175 КБод, диски одинарной плотности не могут записываться на дисководе с высокой плотностью (360 оборотов/мин.). Благодаря высокой защищености от ошибок FM-формата данных, диски одинарной плотности еще могут читаться в дисководе на 360 об./мин. FM-дискеты могут быть как читаться, так и писаться на 360Kб (300 об./мин.) дисководе. 3F7h (чтение) - изменение состояния дисковода: установка бита 7 (проверяют al, 80h) значит, что дискета заменялась. Индикатор смены MEDIA будет сбрасываться после первой установки цилиндра, отличного от нулевого.
Команды 8272A могут быть разделены на три группы: пересылка данных пользователя, управление диском и диагностические средства. Пересылка данных пользователя включает чтение данных, чтение удаленных данных, запись данных, запись удаленных данных и три команды просмотра: просмотр на равно, просмотр на меньше или равно и просмотр на большег или равно. Команды управления диском включаеют перекалибровку, установку, чтение состояния дисковода, чтение состояния прерывания и форматирование дорожки. Команды чтения идентификатора сектора и чтения дорожки могут рассматриваться, как диагностика. Все команды с нераспознаваемым первым байтом будут обрабатываться как недопустимая команда. Команды 8272A можно легко идентифицировать младшим полубайтом первого байта команды - см. таблицу (хотя некоторые из таких команд будут недопустимыми).
Главная последовательность выполнения команды 8272А состоит из следующих шагов: 0. Если DMA будет использоваться в операции, программируется канал 2 микросхемы 8237A для режима пересылки одиночного байта. (Примечание: сигнал счетчика терминала (TC) из DMA будет вызывать непосредственное завершение FDC-операций). 1. Для каждого байта в команде, ждите, пока бит RQM не станет = 1, затем проверьте DIO: значение 0 указывает, что FDC готов принять команду, 1 означает, что ваша команда не распозналась FDC (последующее чтение из DR будет возвращать 80h) или что вы уже подали все данные в FDC (а также, что ваша команда недопустима). Если ваша команда не имееÑ | |||||||||||||||||||||||||||||||||||||||||