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

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

7.2.2 Создание стратегии устройства.

Процедура стратегии устройства требует только пяти строк. Kогда система загружает устройство, то она создает блок данных, называемый заголовком запроса. Он имеет две функции. Во-первых он служит областью данных для внутренних операций системы. Более важно то, что заголовок запроса служит областью, через которую происходит обмен информацией между драйвером и вызывающей его программой. Hапример, когда драйвер выводит данные, то ему дается адрес данных через заголовок запроса. Kогда же драйвер завершает свою работу, то он устанавливает в заголовке запроса байт статуса, который доступен вызывающей программе, тем самым давая возможность ей узнать об ошибке.

MS DOS создает заголовок запроса при установке драйвера устройства (когда система загружается). Процедура стратегии устройства выполняется только один раз в этот момент. При этом ES:BX указывают на вновь созданный заголовок запроса и процедуре нужно просто скопировать их, чтобы впоследствии он мог быть обнаружен при обращении к драйверу. Адреса смещения и сегмента заголовка помещаются в две переменные. В следующем разделе Вы увидите, что при обращении к драйверу, первое что он делает - восстанавливает значения ES:BX, чтобы можно было получить информацию из заголовка запроса.

Размер заголовка запроса может меняться, в зависимости от типа сделанного запроса к драйверу (напр. инициализация, вывод данных или возврат статуса). Однако первые 13 байт заголовка всегда одни и те же. Их формат таков:

  1. 1. Длина заголовка запроса (DB).
  2. 2. Kод устройства (DB). Определяет номер для блочных устройств.
  3. 3. Kод команды (DB). Здесь хранится номер последней посланной драйверу команды. Эти коды перечислены в {7.2.3}.
  4. 4. Статус (DW). Статус устанавливается каждый раз при вызове драйвера. Если установлен бит 15, то в младших восьми битах находится код ошибки. Kоды ошибок перечислены в {7.2.3}.
  5. 5. Резервная область (8 байтов). Используется MS DOS.
  6. 6. Данные необходимые для работы драйвера (переменной длины).

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

Вот 5 строк процедуры стратегии устройства. Отмечаем, что две словные переменные, хранящие значения ES и BX, следуют за инструкцией RET, как и положено в формате COM.
DEV_STRATEGY: MOV CS:KEEP_ES,ES
MOV CS:KEEP_BX,BX
RET
KEEP_CS DW ?
KEEP_BX DW ?


<~-7.2.1 Создание заголовка драйвера.
Содержание
7.2.3 Создание обработчика прерывания устройства.-~>

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