«Мышь» является одним из периферийных устройств ПЭВМ и в данный момент стала практически его неотъемлемой частью. Для работы с «мышью» применяются загружаемые драйверы устройства «мышь». Все такие драйверы следуют единому стандарту, определенному фирмой Microsoft для ее драйвера MOUSE.СОМ в документе «Mouse User's Guide». Точнее говоря, эти драйверы обязаны поддерживать определенный набор функций, но, помимо того, они могут иметь и дополнительные возможности. Мы рассмотрим только те функции которые поддерживаются драйвером фирмы Microsoft.
Обмен с драйвером мыши осуществляется обращением к Int 33h; параметры функций задаются в регистрах АХ, ВХ, СХ и DX. Прежде чем вызывать функции драйвера, прикладная программа должна проверить, что драйвер мыши установлен. Для этого она должна выполнить следующие действия:
— прочитать содержимое вектора Int 33h (адрес 0:0CCh); если он равен 0:0 или указывает на команду IRET, то драйвер не установлен;
— если содержимое вектора отлично от нуля, то вызвать функция 00h; если эта функция вернет АХ=-1, то драйвер установлен и мышь инициализирована.
Доступ к драйверу мыши посредством Int 33h может использоваться как ассемблерными программами, так и программами, написанными на языках высокого уровня, например, на Бейсике, Си, Паскале, Фортране или Коболе.
Замечания.
Программа работающая с мышью , должна учитывать следующие требования:
1. Если программа перехватывает Int 10h, то она должна гарантировать, что функция 00h (сменить видеорежим) будет отработана драйвером мыши
2. Драйвер мыши гарантирует правильность работы с экраном, если Ваша программа осуществляет вывод на экран через Int 10h или через ДОС. Если же вывод производится прямой записью в видеопамять, то программа должна вызвать функцию 02h (скрыть курсор) перед выводом и функцию 01h (показать курсор) после вывода.
3. Вы можете работать с мышью двумя способами:
Явно вызывая Int33h или задав свою программу обработки событий. В последнем случае драйвер будет вызывать Вашу подпрограмму всякий раз, когда произойдет заданное событие (см. функцию 0Ch).