Устройство
Рассматриваемое устройство - это не часть технических средств, которая была разработана, чтобы продемонстрировать, как писать драйвер устройства в системе 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. Биты порта управления устройства