Графические устройства

         

Макроопределение для обращений к драйверу мыши



Пример 6.7. Макроопределение для обращений к драйверу мыши

Mouse macro fun ; номер функции задает параметр fun
mov ax, fun&h ; номер функции помещается в ах
int 33h ; обращение к драйверу
endm ; конец макроопределения.

Макровызов этого определения имеет вид Mouse fun, где вместо fun указывается шестнадцатеричный номер вызываемой функции без буквы ь в конце. Обнаружив вызов, Макроассемблер находит одноименное определение, обрабатывает его и включает в задачу две команды. Первая из них пересылает в регистр ах указанный в макровызове код fun, к которому добавляется буква b. Вторая команда int ззь выполняет обращение в драйверу мыши. Например, на месте макровызова Mouse 21 в тексте задачи окажутся две следующие команды:

mov ax, 21h ; запись в ах кода 21h
int 33h ; обращение к драйверу мыши

Замечание 1
Замечание 1

Обратите внимание на то, что макровызов Mouse 2lh ассемблер воспримет как ошибку. Поэтому если вы предпочитаете указывать букву h после кода, то во второй строке примера 6.7 после слова fun надо убрать символы &h, которые вызывают добавление буквы h к коду функции.

Инициализация драйвера нужна для того, чтобы ликвидировать те изменения значений его внутренних переменных, которые могли оставить после себя другие задачи. Если по каким-то причинам эти изменения надо сохранить, то перед инициализацией производится сохранение буфера состояния драйвера, о чем говорилось в конце предыдущего раздела.

Функция Mouse о выполняет инициализацию драйвера и возвращает дополнительные данные в регистрах ах и bх.

Если драйвер мыши отсутствует в оперативной памяти, то регистр ах очищен. Это может означать либо отсутствие соответствующего файла в
autoexec.bat или в config.sys. либо отсутствие или неисправность мыши.

В процессе установки драйвер анализирует наличие и тип мыши, и если работа с ней невозможна, то установка не выполняется.

Если 15 регистре ах находится код OFFFFS-I, то инициализация выполнена успешно. В таком случае в регистре bх указано количество имеющихся у мыши кнопок.

После исполнения запроса Mouse 0 желательно проверить содержимое регистров ах и bх. Если драйвер отсутствует, то дальнейшее выполнение программы невозможно или для управления задачей должна использоваться клавиатура. Аналогично, если задача рассчитана на работу с тремя кнопками, а у мыши их только две, то придется либо прервать выполнение задачи, либо настроить ее на работу только с двумя кнопками.

Функция Mouse 21 аналогична функции Mouse 0, но при ее исполнении не производится аппаратный сброс мыши и не изменяются значения переменных, зависящих от ее технических характеристик. В большинстве случаев это различие не принципиально.



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