Глава 7. Ввод/вывод.

Раздел 2. Создание драйвера устройства.

7.2.1 Создание заголовка драйвера.

Драйверы устройств должны создаваться в виде COM файлов {1.3.6}. Однако они не являются настоящими программами, поскольку у них отсутствует префикс программного сегмента. Чтобы добиться этого не надо включать оператор ORG 100H в начале программы, как это делается для COM файлов. Либо запишите ORG 0, либо вообще ничего не пишите. Драйвер должен быть описан как далекая (far) процедура, как и в любой программе. В нижеприведенном примере приведен начальный код для драйвера устройства с именем DEVICE12. Оно заменяет стандартное устройство AUX, используемое MS DOS, принимая вывод функции 4 прерывания 21H. Весь драйвер устройства состоит из кода этого раздела вместе с кодом, приведенном в следующих двух разделах; поместите их подряд один за другим, чтобы получить полную программу.

Драйвер устройства должен начинаться с заголовка драйвера. Он имеет длину 18 байтов, разделенных на 5 полей. Первое поле (DD) всегда содержит значение -1 (FFFFFFFFH), и когда MS DOS загружает драйвер, то оно заменяется на стартовый адрес следующего драйвера. Таким образом, система может искать следующий драйвер по цепочке. У последнего загруженного драйвера в этом поле остается значение -1.

Второе поле это байт атрибутов драйвера. Имеют значение только 7 битов этого слова:

 
бит 15   1 = символьное устройство, 0 = блочное устройство 
    14   1 = поддерживает IOCTL, 0 = не поддерживает IOCTL 
    13   1 = формат блоков IBM, 0 = другой формат блоков 
     3   1 = часы, 0 = не часы 
     2   1 = нулевое устройство, 0 = не нулевое устройство 
     1   1 = устройство стандартного вывода, 0 = нет 
     0   1 = устройство стандартного ввода, 0 = нет 
Обычно установлен только бит 15, или биты 15 и 14, если устройство поддерживает IOCTL (как обсуждается в {7.2.4}). Бит 13 устанавливается только для блочных устройств. Остальные биты используются для замены устройств, используемых MS DOS по умолчанию (устройствами стандартного ввода и вывода являются клавиатура и видеодисплей; устройство часов объединяет часы реального времени с часами времени суток BIOS; а нулевое устройство (NULL) - это псевдоустройство, используемое для тестовых целей).

Третье и четвертое поля содержат смещения для процедур стратегии и обработки прерывания, которые будут рассмотрены в следующих разделах. Hаконец, последнее поле содержит имя устройства. Имя может содержать до 8 символов и оно должно быть выравнено по левому краю с завершающими пробелами. Для замены существующих в DOS устройств, таких как LPT1 или COM1, используйте то же имя устройства, как в данном примере.

Hизкий уровень.

В данном примере создается драйвер для последовательного устройства. "DEVICE12" - имя файла, который должен быть указан в файле конфигурации сиситемы, чтобы этот драйвер был загружен. В байте атрибутов установлен только бит 15, указывая что это символьное устройство и что оно не поддерживает IOCTL. DEV_STRATEGY и DEV_INTERRUPT - имена процедур, обсуждаемых в следующих разделах. Устройство названо AUX, с тем чтобы заменить обычное устройство MS DOS с этим именем. Это позволяет очень просто обращаться к этому устройству, поскольку система имеет предопределенный номер файла для обращения к устройству AUX (последовательному). В пример включен начальный код для драйвера, определяющий его как COM программу.
CSEG SEGMENT PUBLIC 'CODE' 'устанавливаем кодовый сегмент
ORG 0 'эта строка необязательна
ASSUME CS:CSEG,DS:CSEG,ES:CSEG
DEVICE12 PROC FAR 'драйвер это далекая процедура
DD 0FFFFFFFFH 'адрес следующего драйвера
DW 8000H 'байт атрибутов
DW DEV_STATEGY 'адрес процедуры стратегии
DW DEV_INTERRUPT 'адрес процедуры прерывания
DB 'AUX ' 'имя устройство (дополненное пробелами)


<~-Раздел 2. Создание драйвера устройства.
Содержание
7.2.2 Создание стратегии устройства.-~>

Сайт управляется системой uCoz