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

  • Исходные тексты 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 в режиме не-DMA на дисках двойной плотности требует по крайней мере ЦП 80286 с тактовой частотой 6 MГц, в то время, как дискета с высокой плотностью AT будет требовать все 10 МГц.

    Регистры 8272A

  • Чип 8272A связан с ЦП через два регистра: главный регистр состояния (MSR) и регистр данных (DR). MSR доступен только для чтения. DR может читаться или записываться, что определяется битом RQM MSR.


    Главный регистр состояния MSR. Только чтение (3F4h)

    Разряды DxB будут устанавливаться в 1, тогда соответствующий дисковод выполняет команду установки или перекалибровки. Бит CB устанавливается, тогда FDC выполняет операцию чтения или записи. NDM устанавливается, когда FDC находится в фазе выполнения и запрещены операции DMA (это указываеттакже, что большее количество данных должны подаваться или читать из DR). DIO будет единицей, если ЦП должен читать данные из DRА и нулем, если ЦП должен подавать данные в DR. RQM = 1 указывает, что DR готов переслать следующий байт. Направление пересылки зависит от значения DIO.

    8272A сохраняет текущий номер цилиндра во внутренних регистрах для каждого дисковода, соединенного с ним. Так как дисковод для гибких дискет не может отличать один цилиндр от другого (кроме цилиндра 0), это необходимо, чтобы выполнять операции установки, которые транслируются FDC в импульс шага дисковода. Эти регистры очищаются сбросом FDC (но дисковод гибкого диска не будет возвращаться на дорожку 0 при сбросе).

  • 8272A не может сам управлять состоянием двигателя дисковода, так что порт 3F2h (цифровой регистр вывода) обеспечивает такие операции. (См. рис.).


    Цифровой регистр вывода. Только запись. (3F2h)

    Биты DS1 и DS0 цифрового регистра вывода отменяют бит DS, определяемый в команде 8272A, так что можно изменять (заменять) дисковод в течение выполнения команды.

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

    Бит IE педназначен для применения в многоконтроллерных системах. Т.к. все FDC используют тот же самый IRQ 6 и канал 2 DMA, бездействующий контроллер может (или не может - нельзя сказать определенно) установить эту линию в низкий уровень, таким образом запрещая другим контроллерам доступ к системному обслуживанию.

  • Второй дополнительный регистр находится в 3F7h (регистр управления дискеты). (Этот регистр не существует на старых XT, но может часто быть обнаружен на поздних аналогах). Как мне хорошо известно, только два младших бита значимы для записи, и одиночный старший бит - для чтения.

    3F7h (запись) выбирает скорости пересылки:

    00 - 500 КБод (MFM)

    01 - 300 КБод (MFM)

    10 - 250 КБод (MFM)

    11 - 125 КБод (FM)

    Первые три значения (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 будет сбрасываться после первой установки цилиндра, отличного от нулевого.

  • Основной регистр команд/данных DR (3F5h). В него посылается код команды, затем параметры команды (если нужно), затем данные (если нужно). После посылки каждого байта нужно проверять бит 7 регистра состояния, пока он не станет равным 1, потом посылать следующий байт. После окончания операции из этого регистра читаются содержимое регистров состояния и другие данные (их количество зависит от того, какая команда выполнялась). Для каждой команды нужно считывать столько байтов результата, сколько требуется. Пока не будут считаны ВСЕ байты, контроллер не сможет перейти к выполнению следующей команды.

    Обзор команд 8272A

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

    Команды 8272A можно легко идентифицировать младшим полубайтом первого байта команды - см. таблицу (хотя некоторые из таких команд будут недопустимыми).

    x1ScanПросмотр на равно
    x2Read TrackЧтение дорожки
    x3SpecifyУстановить параметры дисковода
    x4Sense Drive StatusОпределить состояние дисковода
    x5Write DataЗаписать данные
    x6Read DataЧитать данные
    x7RecalibrateПрекалибровка
    x8Sense Interrupt StatusОпросить состояние прерывания
    x9Write Deleted DataЗаписывать удаленные данные
    xARead IDЧитать идентификатор
    xCRead Deleted DataЧитать удаленные данные
    xDFormat a trackФорматировать дорожку
    xFSeekУстановка
    Таблица. Коды операции 8272А

    Главная последовательность выполнения команды 8272А состоит из следующих шагов:

    0. Если DMA будет использоваться в операции, программируется канал 2 микросхемы 8237A для режима пересылки одиночного байта. (Примечание: сигнал счетчика терминала (TC) из DMA будет вызывать непосредственное завершение FDC-операций).

    1. Для каждого байта в команде, ждите, пока бит RQM не станет = 1, затем проверьте DIO: значение 0 указывает, что FDC готов принять команду, 1 означает, что ваша команда не распозналась FDC (последующее чтение из DR будет возвращать 80h) или что вы уже подали все данные в FDC (а также, что ваша команда недопустима). Если ваша команда не имеет фаз выполнения и кончания (например, Определить), вы останавливаетесь здесь.

    2. Если вы запиустили FDC в режиме не-DMA и команда пересылает данные в течение фазы выполнения (чтение, запись, форматирование), вы ждете, пока бит NDM равен нулю. Когда NDM станет = 1, для каждого читаемого или записываемого байта вы ждете установки бита RQM, и тогда записываете следующий байт в (или читаете его из) DR. Если вы не используете пересылку DMA-режима (или не пересылаете данные вообще), вы просто переходите к шагу 3.

    3. Конец фазы выполнения указывается IRQ 6 (int 0eh). Вы можете или разрешить 8272A прерывание и обнаруживать его в вашей подпрограмме обработки, или можете постоянно опрашивать регистр запроса прерывания 8259A (IRR). Если команда не имеет фазы выполнения (Опросить состояние дисковода), вы переходите к шагу 4.

    4. В фазе результата вы читаете состояние команды из FDC, тестируя бит RQM (убедитесь, что DIO = 1). 8272A может возвращать до трех байтов состояния (которые описываются ниже) наряду с другими данными, которые будут изменяться от команды к команде.

    Для команд чтения/записи/сравнения передаются следующие байты:

    • Код команды
      • биты 0-4 - собственно тип операции
        • 02h - чтение дорожки
        • 05h - запись данных
        • 06h - чтение данных
        • 09h - запись удаленных данных
        • 0Ch - чтение удаленных данных
        • 11h - сравнение на равно
        • 19h - сравнение на меньше или равно
        • 1Dh - сравнение на больше или равно
      • бит 5 - если он равен 0, то удаленный сектор считается последним в цилиндре, если 1, то удаленные сектора просто пропускаются
      • бит 6 - плотность (0 - SD, 1 - DD и HD)
      • бит 7 - многодорожечный режим (последним сектором будет последний сектор стороны 1).
      Таким образом, например, код 06h - чтение с SD-дискеты, код 46h - чтение с DD-дискеты, 26h и 66h - то же самое, пропуская удаленные сектора, 86h и C6h - то же, но читая обе стороны дискеты.
    • номер привода (биты 0,1) и головки (бит 2)
    • номер цилиндра (то есть дорожки)
    • номер стороны
    • номер сектора
    • код размера сектора (0 - 128 байт, 1 - 256 байт, 2 - 512 байт и т.д.)
    • номер последнего сектора на дорожке (8 или 9 для SD, 15 для DD и HD)
    • байт DTL, содержащий число байт, которое нужно обработать в 128-байтном секторе (все байты сверх этого числа будут пропущены). Для секторов больше 128 байт он игнорируется.

    Межсекторный промежуток GAP, зависящий от размера сектора и плотности дискеты:

    Размер SD DD
    128 07h -
    256 0Eh 0Eh
    512 1Bh 1Bh
    1024 47h 3Fh
    2048 C8h 99h
    4096 C8h C8h

    Затем нужно последовательно читать байты из регистра данных (команды чтения) или записывать их в регистр данных (команды записи/удаления). Когда будут переданы все байты, бит 5 регистра состояния примет значение 0. После этого нужно считать из регистра данных 8 байт результата:

    Описание команд контроллера 8272A


    MT - (MultiTrack) инструктирует продолжение операции чтения на дорожке 1 того же цилиндра.
    MFM - плотность (0 - SD, 1 - DD и HD).
    SK - заставляет FDC пропускать поля удаленных данных.
    HDS - указывает номер головки, используемой в операции.
    DS1, DS0 - представдяют номер дисковода.
    C/N/R/N - идентификатор начального сектора.
    EOT - количество секторов на дорожке.
    GPL - длина межсекторного промежутка.
    DTL - должен быть FFh при установленном MFM.

    Чтение данных (x6)

    Требуется: C/H/R/N/EOT/GPL/DTL
    Исполнение: Поля данных на дорожке считываются.
    Результат : ST0/ST1/ST2/C/H/R/N



    Чтение идентификатора сектора (xA)

    Требуется: C/H/R/N/EOT/GPL/DTL
    Исполнение: Считывается первый корректный идентификатор сектора (первый - значит первый достигнутый от текущего положения головки, а не первый после физической адресной метки)
    Результат: ST0/ST1/ST2/C/H/R/N

    Чтение удаленных данных (xС)

    Требуется: C/H/R/N/EOT/GPL/DTL
    Исполнение: Считываются удаленные данные на дорожке.
    Результат: ST0/ST1/ST2/C/H/R/N

    Чтение дорожки (x2)

    Требуется: C/H/R/N/EOT/GPL/DTL
    Исполнение: Читываются поля данных на дорожке.
    Результат: ST0/ST1/ST2/C/H/R/N

    Эта команда будет читать поля данных независимо от значений C/H/R/N, хранящихся в идентификаторах секторов. Поле данных, которое имеет допустимый идентификатор, может считаться этой командой. Хотя документация INTEL указывает, что команда чтения дорожки останавливается, когда на всей дорожке не обнаружены поля данных или счетчик секторов достиг значения EOT, эта команда будет завершаться, когда не обнаружена метка адреса данных был обнаружен после метки адреса идентификатора сектора с плохой CRC.

    Команда чтения дорожки принимает ЛЮБОЕ значение N, так что может читать межсекторный промежуток (или всю дорожку, если N достаточно большое) наряду с сектором данных. Сектора будут считываться в порядке их появления под головкой, то есть, если дорожка форматировалась с 8 секторами с 512 байтами (интерлив 1:1), и вы начинаете команду дорожки чтения с R = 1, N = 3, EOT = 4, сектора 1, 3, 5 и 7 будут считаны.



    Запись данных (x5)

    Требуется: C/H/R/N/EOT/GPL/DTL
    Исполнение: На дорожку записываются поля данных
    Результат: ST0/ST1/ST2/C/H/R/N

    Запись удаленных данных (x9)

    Требуется: C/H/R/N/EOT/GPL/DTL
    Исполнение: На дорожку записываются поля удаленных данных
    Результат: ST0/ST1/ST2/C/H/R/N

    Форматирование дорожки (xD)

    Требуется: N/SC/GPL/D
    Исполнение: Команда форматирует дорожку с SC секторами размером N. Сектора заполняются байтом D. Значения C/H/R/N для каждого сектора задаются пользователем (как в команде записи данных).
    Результат: ST0/ST1/ST2/C/H/R/N
    ПРИМЕЧАНИЕ: GPL=0 понимается как 100h.

    Просмотр на равно (x1)

    Требуется: C/H/R/N/EOT/GPL/STP
    Исполнение: Поля данных на дорожке читаются и сравниваются побайтно с данными, поставляемыми ЦП или DMA. Если условие просмотра не удовлетворено, просмотр продолжается в секторе R+STP.
    Результат : ST0/ST1/ST2/C/H/R/N

    Просмотр на меньше или равно (x9)

    Требуется: C/H/R/N/EOT/GPL/STP
    Исполнение: аналогично команде "Просмотр на равно"
    Результат: ST0/ST1/ST2/C/H/R/N

    Просмотр на больше или равно (xD)

    Требуется: C/H/R/N/EOT/GPL/STP
    Исполнение: аналогично команде "Просмотр на равно"
    Результат: ST0/ST1/ST2/C/H/R/N

    Перекалибровка (x7)

    Исполнение: перекалибруется выбранный дисковод.

    Все 4 дисковода могут перекалибровываться одновременно. 8272A может выполнять операции чтения или записи на любом другом дисководе. Таким образом, команда опроса состояния прерывания должна использоваться, чтобы различать прерывание, вызванное завершением перекалибровки от прерывания при завершении операции.

    FDC не будет разрешать любую команду на перекалибруемом дисководе до того, как проведен опрос состояния прерывания для установки завершения прерывания.



    Опрос состояния прерывания (x8)

    Результат: ST0/C
    ПРИМЕЧАНИЕ: когда IC = 10 (недопустимо), C не будет возвращаться.

    8272A будет генерировать запрос прерывания в любом из следующих случаев:

    A) Фаза результата начинается для команд чтения/записи/форматирования/просмотра.
    B) Изменился сигнал готовности на одном из дисководов.
    C) Выполняется установка/перекалибровка.
    D) Требуется не-DMA пересылка данных.

    Программа обработки прерывания может легко отличать эти случаи:

    Если NDM = 1,
    
    Тогда это - запрос пересылки данных,
    Иначе
    Если CB = 1
    Тогда начинается фаза результата,
    Иначе
    Если SE = 0
    Тогда это - изменение сигнала готовности,
    Иначе это - конец установки или перекалибровки.


    Установить параметры дисковода (x3)

    SRT - интервал скорости шага. Устанавливает минимальную задержку между двумя импульсами шага дисковода. (1-16 мс, SRT = 0Fh соответствует 1 мс). Более старые дисководы PC не выполняли 3- или 4-мс скорость шага, а некоторые не могут выполнить с 2- или даже 1-мс скорость шага.
    HUT - время разгрузки головки. Задержка между завершением операции чтения-записи и подъемом головки. (16-240 мс, HUT = 0 соответствует 16 мс). Оно обычно устанавливается в 240 мс.
    HLT - время загрузки головки. Задержка между командой загрузки головки и началом операции чтения-записи. (2-254 мс, HLT=1-2 ms). Обычно устанавливается в 2 мс.
    ND - 0: режим DMA. 1: не-DMA режим.

    Все таймеры внутри 8272A фактически синхронизируются по сигналу WR CLK, так что все значения, показанные здесь, правильны для WR CLK 500 КГц, или скорость пересылки данных составит 500 КБод. Понижение частоты WR CLK будет удлинять все внутренние счетчики задержек.



    Опрос состояния дисковода (x4)

    Результат: ST3.

    Установка (xF)

    См. перекалибровку.

    Байты состояния контроллера 8272A


    0-3 байты состояния контроллера 8272A

      ST0  

    IC - код прерывания:
    00 - Нормальное завершение команды.
    01 - Аварийное завершение команды (операция еще может быть выполнена, но должны проверяться другие коды условий).
    10 - Недопустимая команда.
    11 - Аварийное завершение (сигнал готовности диска изменился в течение выполнения).

    SE - Операция установки закончена.
    EC - Оборудование проверяет ошибку (получен сигнал неисправности от дисковода или цилиндр 0 не найден после 77 импульсов в течение перекалибровки).
    NR - Не готов (Дисковод стал не готовым в течение чтения или записи или запрошена сторона 1 для одностороннего диска).
    H - Адрес головки.
    DS0, DS1 - адрес дисковода.

      ST1  

    EN - Ошибка конца дорожки (FDC пытается обратиться к сектору за последним сектором дорожки). Этот флаг будет устанавливаться в 1 (и, следовательно, IC будет равен 01), если FDC читал сектор, определяемый как параметр команды EOT и сигнал TC низкий,так что каждая операция чтения в режиме не-DMA будет c ошибкой EN.
    DE - Ошибка данных. Адресная метка сектора или данных содержит недопустимую CRC.
    OR - Ошибка ожидания. 8272A не получил доступа к ЦП или DMA в течение определенного интервала времени (32 мкс на 360KБ дисководе) и данные были потеряны.
    ND - Сектор не обнаруженный. Определяемый сектор не был обнаружен в течение 2-х оборотов диска (то есть, с начала операции пришли два индексных импульса). Для многосекторных пересылок требуется 2-оборотное ожидание для каждого сектора отдельно.
    NW - Ошибка защиты записи. Сигнал защиты записи был обнаружен в течение операций запииси или форматирования.
    MA - Отсутствует метка адреса. Адресная метка cектора или данных не обнаружена.

      ST2  

    CM - Контрольная Метка. Обнаружена удаленная адресная метка в течение команды чтения данных или обнаружена адресная метка в течение команды чтения удаленных данных, и бит SK не установлен.
    DD - Ошибка данных. Неверная CRC сектора данных. Также будет установлен DE.
    WC - Ошибка адресации цилиндра. Адрес цилиндра на дорожке не соответствует определяемому.
    SH - Успешный просмотр. Условия команды просмотра были удовлетворены.
    SN - Просмотр не удовлетворен.
    BC - Ошибка дефектной дорожки. Аналогично WC, но адрес цилиндра дорожки - FFh.
    MD - Ошибка отсутствия адресной метки. Также будет устанавливаться MA.

      ST3  

    FT - Неисправность. Дисковод обнаружил неисправность.
    WP - Защита записи.
    RDY - Сигнал готовности дисковода. На PC и подсистемах дискет AT он будет всегда установлен, независимо, готов ли дисковод (или установлен вообще).
    T0 - Сигнал нудевой дорожки.
    TS - Двусторонний. На PC и подсистемах дискет AT он будет всегда 0.

    Контроллер гибкого диска AT

    Первоначальные PC и XT контроллеры гибкого диска были способны поддерживать 4 дискеты. AT FDC, хотя и совместимы по регстрам, может поддерживать только 2, так что можно устанавливать два FDC в AT. Большинство версий BIOS не поддеоживает второй FDC, и у нас никогда не было IBM AT, чтобы проверить, что же конкретно делает IBM AT BIOS. Первый FDC занимает диапазон адресов 3F0-3F7h, второй FDC находится в 370-377h. Вся приведенная здесь информация по первому FDC также применима и ко второму при установке этого диапазона адресов. 8272A (или его интегральный аналог) отображается к портам 3F4h (MSR) и 3F5h (DR).

    Нормальные форматы дискеты PC

    Первые стандарты PC предназначались для однодвухсторонних пятидюймовых дискет на 40 дорожек. Следуя спецификации INTEL, они имели 8 512-байтовых секторов на дорожке, таким образом, используя 4096 байтов (65%) из 6250-байтовой несформатной емкости дорожки. Сектора на дорожке располагались последовательно (интерлив 1:1), как во всех других стандартных форматах. Позднее диски с 9 и 10 сектораами на дорожке используют соответственно 74% и 82% общего пространства. Теоретическое ограничение для форматируемой емкости дорожки двойной плотности - примерно 89.2% (5575 байтов или 10.89 сектора на дорожке).

    Такое увеличение емкости дисков сделалось возможным благодаря высокой стабильности вращения в современных приводах. Хотя допускается отклонение в 2.5% от номинального времени вращения, мы никогда не встречали дисковод для гибких дискет с отклонением временем вращения выше 0.2%. Такая стабильность позволяет уменьшить длину межсекторного промежутка.

    Например, если возможное отклонение скорости вращения - ~2.5%, необходимо резервировать мехсекторный промежуток, достаточный, чтобы поддерживать любую длину сектора. Предположм, что дискета форматирована на дисководе с наименьшией скоростью вращения, и будет модифицирована на дисководе с самой быстрой скоростью вращения. В таком случае необходимо резервировать по крайней мере (512+62)*(2*2.5%) байт для межсекторного промежутка (62 - минимальный размер заголовка сектора для формата MFM). Это приведет к минимальному промежутку в 29 байтов, так что даже формат 10 секторов на дорожку будет нормальным при таких отклонениях.

    Чтобы поддерживать совместимость (по крайней мере, частичную) формата на 40 дорожек с 80-дорожечным дисководом высокой плотности (HD), первый моделируются путем пропуска всех нечетных дорожек. Следовательно, 360K диски, записываемые в 360K дисководе всегда можно прочитать на HD-дисководе, но 360K дискета записываемая в HD-дисководе может быть несовместимый с 360K дисководами.

    * * *

    Что еще почитать?

  • Фирменное описание 8272 от Intel
  • Описание контроллера Intel 8272 на русском языке





  • Всегда Ваш, RomanRom2