Подготовка к работе с манипулятором "мышь". Общее описание драйвера мыши.
Управление курсором
При установке стандартных текстовых или графических режимов IBM драйвер самостоятельно рисует, удаляет и перемещает указатель мыши, что существенно упрощает структуру прикладных задач, работающих с мышью. Тем не менее, задача должна иметь возможность влиять на выполнение драйвером указанных действий. Для этого в базовый набор команд включено 9 функций, коды которых в табл. 6.1 начинаются и заканчиваются символом "*".
Они позволяют задаче в нужные моменты времени включать и выключать курсор и изменять его форму. По умолчанию драйвер выбирает изображение указателя мыши (курсора) в зависимости от установленного видеорежима. В графических режимах оно имеет форму наклоненной влево стрелки, а в текстовых – прямоугольника. В текстовых режимах курсор перемещается не плавно, а скачками из одного знакоместа в другое. Задача может задавать размер этого скачка при обычном и быстром перемещении мыши.
Остается только сожалеть о том, что эти полезные функции нельзя использовать при работе в графических режимах VESA. Как уже говорилось в предисловии к разделу 6.1, драйвер не может определить характеристики этих режимов, необходимые для построения изображения курсора.
Установочные команды
Наиболее важной функцией драйвера является увязка перемещений мыши с позицией курсора на экране. При выполнении этой функции используются внутренние переменные и счетчики позиций, которые должны иметь определенные значения. Часть из них зависит от характеристик мыши и формируется при установке или инициализации драйвера. Другая часть значений зависит от установленного видеорежима, их должна определять задача.
Функции с кодами 00, 04, 07, 08, OFh, 13h, lAh, IBh, 21h позволяют изменять текущие настройки драйвера. С их помощью задача может инициализировать драйвер, установить пределы и скорость перемещения курсора, изменить чувствительность драйвера к перемещениям мыши. Подробное описание этих функций приведено в следующем разделе.
Информационные команды
Для определения текущих координат мыши и состояния ее кнопок предназначены функции с кодами оз, 05, об и овь. Примеры использования этих функций мы рассмотрим при описании работы с мышью в режиме опроса ее состояния.
Обслуживание прерываний
Альтернативой режиму опроса состояния является режим прерываний, при котором задача получает информацию от драйвера только при наступлении конкретного события – изменения позиции мыши или состояния ее кнопок. В теле задачи должны быть предусмотрены подпрограммы, выполняющие действия, связанные с данным событием (или событиями), например перемещение рисунка курсора на новое место. С помощью функций с кодами ось, I4h, I8h и I9h задача может сообщить драйверу адрес прерывающей подпрограммы и событие, на которое она реагирует. Примеры использования этих функций мы рассмотрим при описании работы с мышью в режиме прерываний.
Специальные функции
Пять команд с кодами I5h, I6h, I7h, iFh и 20h выполняют специфические действия, которые нужны только в особых случаях. В первую очередь к ним относится смена драйвера при выполнении задачи (как правило, системной, а не прикладной). Простой замены содержимого вектора 33h в этом случае недостаточно, поскольку при первоначальной установке драйвера настраивается контроллер прерываний и изменить эти настройки можно только с помощью специальной функции iFh, которая выполняет полную дезактивацию драйвера и возвращает в регистрах es:bx (возможно es:dx) содержимое вектора 33h. Дезактивированный драйвер остается в оперативной памяти. После этого задача может устанавливать свой драйвер или использовать вектор ззь для других целей. Перед выходом из задачи работа драйвера восстанавливается с помощью функции 20Ь, которая не требует задания входных параметров.
В некоторых случаях может понадобиться сохранить текущие настройки драйвера перед их изменением и спустя некоторое время восстановить первоначальные значения. Все внутренние переменные и счетчики хранятся в специальном буфере состояния драйвера. Порядок действий при сохранении и восстановлении содержимого этого буфера следующий. С помощью функции 15Ь задача определяет размер буфера состояния, выделяет соответствующее пространство оперативной памяти и помещает адрес его начала в регистры es:dx. После этого она запрашивает выполнение функции 1бb, которая сохраняет текущее состояние. Теперь можно изменять текущие установки драйвера мыши.
Для восстановления исходного состояния адрес буфера, в котором оно записано, надо поместить в регистры es:dx и обратиться к драйверу с запросом 17b.
Такова общая характеристика базового набора функций, выполняемых драйвером мыши. Теперь мы переходим к рассмотрению способов программирования работы с ним в режимах VESA.