Справочник программиста на персональном компьютере фирмы IBM. Ввод/вывод
Страница 20. Доступ к драйверу устройства


     7.2.4 Доступ к драйверу устройства.


   Драйвер устройства устанавливается путем включения имени гото-
вой программы в файл конфигурации системы.  Для установки пробной
программы поместите  в  файл  CONFIG.SYS  строку  DEVICE  = DEVI-
CE12.COM.   Затем перезагрузите систему для  установки  драйвера.
Если машина не будет  загружаться, то скорее всего имеется ошибка
в коде инициализации драйвера.
   После того как драйвер установлен, для доступа к нему пользуй-
тесь обычными функциями MS  DOS  прерывания  21H.   Какие функции
можно  использовать зависит от того, заменяет ли устройство стан-
дартное устройство DOS (как в приведенном примере) или оно добав-
ляется  как совершенно новое устройство.  Для замены стандартного
последовательного устройства,  назовите  драйвер  AUX, после чего
функции  3 [7.1.7] и 4 [7.1.6] прерывания 21H будут  осуществлять
соответственно ввод и  вывод.   Если  устройство параллельное, то
назовите  его  PRN, после чего функция 5 [6.3.1]  будет  выводить
данные на принтер.  Другой  возможностью  является  использование
функции 3FH [5.4.4] для ввода и [5.4.3] для вывода. В этом случае
используйте номер файла 3 - для последовательного  устройства и 4
- для параллельного.  Напоминаем, что при использовании предопре-
деленных номеров файла нет необходимости открывать устройство.
   Если устройство не заменяет  одно  из стандартных устройств MS
DOS (т.е.  если оно не названо одним из резервных слов, таким как
PRN, AUX и т.д.), то Вы можете открыть устройство с помощью одной

из функций для открытия файла.  Вы можете использовать как  метод
доступа с помощью управляющего  блока файла, так и метод дескрип-
тора файла, хотя последний предпочтительнее.  Чтобы быть  уверен-
ным, что Вы по ошибке не  откроете дисковый файл, поместите номер
файла в BX, 0 - в AL, посде чего выполните функцию 44H прерывания
21H. Это функция IOCTL и если  бит 7 значения, возвращаемого в DL
установлен, то драйвер устройства загружен.
   IOCTL  требует,  чтобы в байте атрибутов драйвера  была  соот-
ветствующая установка битов и чтобы по крайней мере основы проце-
дуры  обработки IOCTL имелись в процедуре обработчика  прерывания
драйвера. Функция IOCTL имеет 8  подфункций, пронумерованных от 0
до  7, при этом соответствующий кодовый номер помещается в AL при
вызове функции:

   0    Возвратить информацию об устройстве в DX
   1    Установить информацию об устройстве, используя DL (DH=0)
   2    Считать CX байтов от драйвера устройства через управля-
        щий канал и поместить их начиная с DS:DX
   3    Записать CX байтов в драйвер устройства через управляющий
        канал, взяв их начиная с DS:DX
   4    То же, что и 2, но использовать номер накопителя в BL,
        где 0 = накопитель по умолчанию, 1 = A и т.д.
   5    То же, что и 3, но использовать номер накопителя как в 5
   6    Получить статус ввода
   7    Получить статус вывода

   В  ответ возвращается различная информация, в  зависимости  от
того, какая функция вызвана. Для  подфункций 0 и 1 значение битов
регистра  DX следующее (при условии, что бит 7 = 1, что означает,
что доступ получен к устройству, а не к файлу):

   0    1 = устройство консольного ввода
   1    1 = устройство консольного вывода
   2    1 = нулевое устройство
   3    1 = устройство часы
   4    резерв
   5    1 = нет проверки на Ctrl-Z, 0 = есть проверка на Ctrl-Z
   6    1 = не конец файла, 0 = конец файла
   7    1 = устройство, 0 = дисковый файл
8-13    резерв
  14    1 = если можно использовать подфункции 2 и 3, 0 = нельзя
  15    резерв

   Подфункции 2-5 позволяют  программе  и устройству обмениваться
произвольными  управляющими строками.  Это  позволяет  передавать
управляющие сообщения  отдельно  от  основного потока данных, что
существенно упрощает дело.  При возврате AX будет содержать число
переданных байтов.  Подфункции 6-7 позволяют программе проверить,
готово  ли устройство для ввода или вывода.  Для  устройств в  AL
возвращается FF, если  устройство  готово и 0, если нет.  При ис-
пользовании с открытым файлом (бит 7 = 0) в AL возвращается FF до
тех пор, пока не будет доститгнут конец файла.
   Отметим, что в Бейсике 3.0 добавлены операторы IOCTL и IOCTL$.
Они позволяют бейсиковской программе, соответственно, посылать  и

принимать управляющие строки от драйвера устройства, которое было
предварительно  открыто оператором OPEN.  Выходная строка  должна
быть заключена в кавычки, как в IOCTL #3,"...". Подобным образом,
A$ = IOCTL$(3) принимает информацию о статусе через IOCTL.


 
« Предыдущая статья   Следующая статья »