О программе  Немного истории  Информация
 Форум  Файлы  Ссылки

  • Исходные тексты ZX Spectrum Navigator. [05.12.2019]
  • Контроллер Intel 8272A. [24.01.2003]


    Контроллер Intel 8272A.

    Сергей Пашкович, Новосибирск, 06.06.1991
    Крупнин Роман, Нижний Новгород, 24.01.2003

    Оглавление

    Предисловие
    MFM запись данных гибкого диска
    Разделение двоичных разрядов
    Поле синхронизации и байт идентификатора
    Полный формат дорожки
    Контроллер гибкого диска INTEL 8272A
    Регистры 8272A
    Обзор команд 8272A
    Описание команд контроллера 8272A
    Байты состояния контроллера 8272A
    Контроллер гибкого диска AT
    Нормальные форматы дискеты PC

    Предисловие

    За основу данной статьи было взято руководство Сергея Пашковича «Защита от копирования, основанная на ключевом диске». Мною же оно было отредактировано для web, убрано все, что связано с защитой от копирования дискет, оставлены базовые параграфы, некоторые из них несколько дополнены.

    MFM запись данных гибкого диска

    Формат изменяемой частотной модуляции (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. (Отметим, что в поле данных первым записан старший байт).

    Описание байта идентификатора поля синхронизации:

    FC D7 - адресная метка индекса

    FE C7 - метка адреса идентификатора Сектора

    FB C7 - данные сектора

    F8 C7 - удаленные данные

    FE C7 - идентификатор дефектной дорожки IBM

    Хотя в документации фирмы INTEL поле синхронизации всегда относят к части предшествующего промежутка, мы будем рассматривать его как часть последующего поля данных.

    Полный формат дорожки

    Точка ссылки для всех дисковых операций - физическая индексная метка, которая генерируется индексным отверстием дискеты. Весь формат дорожки начинающийся с физической индексной метки и может быть описан следующим образом:

    - Физическая индексная метка
    - Прединдексный промежуток (GAP 5)
    - Индексная метка адреса (IAM)
    - Послеиндексный промежуток (GAP 1)
    Для n от 1 до N-1, где N - число секторов на дорожке :
    - Идентификатор сектора n
    - Промежуток после идентификатора (GAP 2)
    - Данные сектора n
    - Промежуток после данных (GAP 3)
    Для последнего сектора данных на дорожке :
    - Идентификатор сектора n
    - Промежуток после идентификатора (GAP 2)
    - Данные сектора n
    - Последний промежуток (GAP 4)

    Индексная метка адреса (которая не используется для другой цели 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, но будет принимать дискеты с этими промежутками, отличающимися от стандарта и имеет способность измерять фактическую длину промежутка.

    Контроллер гибкого диска INTEL 8272A

    Команды выполняются 8272A в три последовательных фазы: фазу команды, фазу выполнения и фаза результата. В течение фазы команды ЦП инструктирует 8272A, что нужно делать. В течение фазы выполнения FDC выполняет запрашиваемое действие. Все пересылки данных пользователя (если они есть) производятся в течение фазы выполнения.

    За фазой выполнения следует фаза результата, когда FDC возвращает данные состояния.

    В то время как FDC запросы данных в течение фаз команды и результата могли задерживаться до бесконечности (данные будут сохраняться в внутренних регистрах контроллера 8272A), все запросы FDC в течение фазы выполнения должны удовлетворяться немедленно, или FDC будет генерировать ошибку ожидания и завершит операцию. Строго говоря, запрос данных не может задерживаться дольше времени пересылки 8 битов. Следовательно, на 360-KБ дисководе, который работает на 250K (1K здесь = 1000) бит в секунду (Kбод), FDC будет передавать байт данных каждые 32 mks или 31250 байтов на секунду.

    Хотя сам 8272A может действовать как в режиме прямого доступа к памяти (DMA), так и без него, только относительно быстрый ЦП способен на передачу данных с такой скоростью. Выполнение FDC в