Драйверы устройств в системе Windows

Устройство


     Рассматриваемое устройство  - это  не часть  технических средств, которая  была  разработана,   чтобы  продемонстрировать,  как   писать драйвер  устройства  в  системе   Windows.  Скорее,  это   виртуальное устройство,  полностью   реализованное  в   программном   обеспечении. Программа-пример  выполняется   только  с   виртуальным   устройством, которое  автор  определил  работая  с  системой  Windows в расширенном режиме (Enhanced mode) процессора  386, и при условии,  что установлен виртуальный драйвер  устройства (VxD).  Далее в  статье более детально будет  описан  исходный  код  для  этого  устройства. На данный момент следует знать, что устройство имеет  два порта: порт состояния и  порт управления, оба на  одном и том  же адресе. На  рис. 1 показаны  биты, используемые  в  порте  состояния.  Бит  2  указывает, что имела место ошибка  устройства,  бит  1  показывает,  что  запрос  на   прерывание является отложенным, а бит 0  указывает, что устройство занято. Бит  7 говорит о  том, что  устройство есть  в наличии.  В этом случае данный бит  равен  нулю.  Если  же  устройство  не установлено или к нему нет доступа, то бит принимает значение, равное 1.

 +--------------------------------------------------------+

 |    7            6...3            2        1       0    |

 +---------+-------------------+---------+-------+--------+

 | PRESENT |                   |  ERROR  |  IRQ  |  BUSY  |

 +---------+-------------------+---------+-------+--------+

PRESENT - устройство есть в наличии;

ERROR   - произошла ошибка устройства;

IRQ     - прерывание отложено;

BUSY    - устройство занято.

(Остальные биты игнорируются для дальнейшей совместимости.)

     Рис. 1. Биты порта состояния устройства

     На рис. 2 показаны биты,  используемые в порте управления. Бит  1 указывает устройству,  что ЦПУ  закончило обработку  прерывания. Бит 0 показывает,  что  устройство  может  начать обработку ввода-вывода. (В данный момент  не следует  заострять внимание  на том,  что фактически устройство  делает.  Вместо  этого,  необходимо уделить внимание тому, как  написать  драйвер  для  такого  устройства,  которое обеспечивает аппаратные прерывания.)

 +--------------------------------------------------------+

 |                 7...2                     1       0    |

 +---------------------------------------+-------+--------+

 |   1     1     1      1      1      1  |  EOI  | START  |

 +---------------------------------------+-------+--------+

EOI   - сигнал для устройства, подтверждающий прием прерывания;

START - сигнал для устройства начинать пересылку ввода-вывода.

(Остальные биты должны быть установлены в 1 для дальнейшей совместимости.)

     Рис. 2. Биты порта управления устройства



Содержание раздела