Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Программирование контроллера НГМД 765 и микросхемы прямого доступа к памяти 8237

ОГЛАВЛЕНИЕ

   5.4.1  Программирование контроллера НГМД 765 и микросхемы прямого доступа к памяти 8237.


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

НГМД. За исключением случаев, связанных с защитой от копирования,
программистам не приходится программировать микросхему контролле-
ра НГМД прямо. Процедуры работы  с дисками, предоставляемые DOS и
BIOS эффективны и удобны, кроме того, очень рисковано писать свои
собственные  процедуры,  поскольку  ошибки  в них могут разрушить
дисковый каталог или таблицу размещения файлов, что вызовет  пол-
ное разрушение информации на диске.
   Нижеследующее  обсуждение  служит  цели  дать Вам только общее
представление.   Листинг  ROM-BIOS, приведенный в  конце  каждого
технического руководства по MS DOS, содержит код тщательно разра-
ботанных  процедур  для  форматирования дискет,  чтения и  записи
секторов, а также сброса и  получения  статуса накопителей. После
того, как Вы усвоите приведенный здесь материал, изучите процеду-
ры ROM-BIOS для продолжения Вашего образования в области операций
с дисками на низком уровне. Вам потребуется также документация по
микросхеме контроллера НГМД 8272A фирмы Intel, которая аналогична
микросхеме фирмы NEC.  В данной документации перечислены прерыва-
ния, генерируемые контроллером НГМД,  в то время как в документа-
ции  по  IBM PC этого списка нет.  Информация о микросхеме  8272A
может быть найдена во  втором  томе  Справочника  по  компонентам
микросистем (Microsystem Components Handbook).
   Контроллер НГМД может выполнять 15 операций, из которых  здесь
будут обсуждаться только три: операции поиска и чтения или записи
одного  сектора.   Понимание того как они работают  позволит  Вам
выполнить любую из оставшихся двенадцати,  при условии, что у Вас
будет  вышеупомянутая информация.  Чтение файла состоит в  поиске
его в  каталоге  [5.2.1],  определении  его  положения на диске с
помощью таблицы размещения файлов [5.1.1] и затем наборе операций
чтения одного сектора. Эта процедура включает 6 шагов:

1. Включение мотора и короткое ожидание, пока он наберет обороты.
2. Выполнение операции поиска и ожидание прерывания, указывающего
на завершение этой операции.
3. Инициализация микросхемы DMA для пересылки данных в память.
4. Посылка команды чтения контроллеру НГМД и ожидание прерывания,
указывающего, что пересылка данных завершена.
5. Получение информации о статусе контроллера НГМД.
6. Выключение мотора.

   Контроллер  НГМД  работает через три порта  ввода/вывода.   На
самом деле микросхема имеет  больше,  чем три регистра, но доступ
к  большинству  из них осуществляется через один порт.   Эти  три
порта такие:

   3F2H          регистр цифрового вывода
   3F4H          регистр статуса
   3F5H          регистр данных

   Первый шаг состоит в  доступе  к  регистру  цифрового  вывода.

Значение его битов следующее:

   биты 1-0     выбор накопителя, где 00 = A
                                      01 = B
                                      10 = C
                                      11 = D
          2     0 = сброс контроллера НГМД
          3     1 = разрешение прерывания FDC и доступа DMA
        7-4     1 = включение мотора накопителя D-A (бит 4 = A)

Это регистр только для записи, поэтому необходимо заботиться  обо
всех его битах. В нижеприведенном примере используется накопитель
A, поэтому цепочка битов должна выглядеть 00011100.  Такая  уста-
новка битов выбирает накопитель A, сохраняет установленным бит 2,
разрешающий работу с НГМД и включает мотор накопителя A. Не сбра-
сывайте бит 2 в ноль, так как в этом случае Вам придется произво-
дить  перекалибровку  накопителя,  действие,  которое  необходимо
очень редко.


   "Перекалибровка" накопителя подразумевает  возврат его головки
на нулевую дорожку.  Эта операция осуществляется посылкой простой
последовательности команд контроллеру  НГМД.  Контроллер НГМД уп-
равляет текущей позицией головки, за счет запоминания всех  изме-
нений позиции головки после  ее  начальной  установки  на нулевую
дорожку.   Когда контроллер НГМД сбрасывается, за счет  изменения
бита 2 регистра  цифрового  вывода,  то  значение текущей позиции
головки  устанавливается  в ноль, независимо от  того,  на  какой
дорожке находится головка на  самом  деле, что делает необходимым
перекалибровку. Обычно сброс контроллера НГМД производится только
в случае такой серьезной ошибки  накопителя,  после которой неиз-
вестно текущее состояние контроллера НГМД и накопителя.
   Отметим,  что  выбор накопителя и включение его  мотора -  это
отдельные действия. Контроллер  НГМД  может иметь доступ только к
одному  накопителю в данный момент времени, но мотры  могут  быть
включены у нескольких.  Моторы  могут  оставаться включенными еще
несколько  секунд  после  завершения обмена  данными, в  ожидании
следующего доступа к накопителю.  Такая стратегия позволяет избе-
жать  потери  времени  на повторное ожидание пока  мотор  наберет
скорость.  Напротив, мотор нельзя оставлять постоянно включенным,
так как это приведет к преждевременному износу дискет.
   Работа  микросхемы  контроллера НГМД разделяется на три  фазы:
командная фаза, фаза выполнения  и  фаза  результата. В командной
фазе один или более байтов посылаются в регистр данных.  Последо-
вательность байтов строго фиксирована и она меняется от команды к
команде. Затем контроллер НГМД выполняет команду и в это время он
находится в фазе выполнения.  Наконец,  во время фазы результата,
ряд байтов статуса считываются из регистра данных.  При этом обя-
зательно, чтобы не было ошибки в числе передаваемых или считывае-
мых данных в регистр данных в фазах командной и результата.
   Число  байтов  команды и результата меняется в зависимости  от
выполняемой контроллером  дисковой  операции. В техническом руко-
водстве по IBM PC приведены данные для всех 15 операций.   Первый
байт команды является  кодом,  определяющим  требуемую  операцию.
Номер  кода содержится в младших 5-ти битах байта  и в  некоторых
случаях в старших трех битах  закодирована добавочная информация.
В  большинстве случаев второй байт команды содержит номер накопи-
теля (0-3) в младших двух битах и  номер головки (0 или 1) в бите
2, все остальные биты игнорируются контроллером НГМД.  При опера-
ции поиска требуется  дополнительно еще только один байт, в кото-
ром  должен содержаться номер новой дорожки.  Чтение  или  запись
сектора требует  семи  дополнительных  командных  байтов, которые
идентичны в этих двух случаях. Байты с третьего по пятый содержат
текущий номер дорожки,  номер  головки  и  номер сектора. За ними
следуют  четыре байта, содержащие техническую информацию, необхо-
димую для контроллера НГМД.