MS-DOS для программиста



Команды для контроллера НГМД


Контроллер НГМД может выполнять 15 операций, или команд. Команда разделяется на три фазы - командная фаза, фаза выполнения, фаза результата. В командной фазе программа должна передать контроллеру всю информацию, необходимую для команды. В фазе выполнения команда выполняется, и в фазе результата программа получает от контроллера информацию о состоянии контроллера.

Информация, необходимая для команды, передается контроллеру через порт данных 3F5h. В соответствии с форматом команды программа должна последовательно вывести в этот порт код команды и все параметры.

Прежде чем программа начнет командную фазу, она должна убедиться в том, что контроллер завершил выполнение предыдущей операции и готов к приему команды. Для этого программа должна прочитать байт основного состояния контроллера из порта с адресом 3F4h и проверить биты 6 и 7. Бит 6 должен быть установлен в 0. Это означает, что данные будут передаваться от процессора к контроллеру. Бит 7 должен быть установлен в 1 - это готовность контроллера к приему команды.

Фаза выполнения начинается после установки битов 6 и 7 байта основного состояния в 1. После завершения команды контроллер формирует сигнал запроса прерывания.

В фазе результата процессор считывает состояние контроллера. Это состояние хранится в нескольких внутренних регистрах контроллера:

  • RS - регистр основного состояния ;
  • ST0, ST1, ST2, ST3 - регистры дополнительного состояния .
  • Регистр основного состояния доступен через порт 3F4h, содержимое остальных регистров процессор считывает после выполнения контроллером команды через порт данных 3F5h.

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

    Обозначение Описание
    MT Двухсторонняя операция
    MFM Двойная/одинарная плотность записи
    SK Пропуск удаленных данных
    HDS Номер головки для двухстороннего НГМД
    DS1, DS0 Номер выбираемого НГМД
    C Номер цилиндра
    H Номер головки для двухстороннего НГМД
    R Номер сектора
    N Число байт в секторе
    EOT Номер последнего сектора на дорожке
    GPL Размер промежутка
    DTL Количество считываемых или записываемых байт
    SC Количество секторов в цилиндре
    D Данные
    PCN Номер цилиндра после выполнения команды чтения состояния прерывания
    SRT Время шага, мс
    HUT Время разгрузки головки
    HLT Время загрузки головки
    ND Режим прерывания
    NCN Номер цилиндра после поиска
    <


    Содержание  Назад  Вперед