Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

5.2.3.Основные функции интерфейса программы с манипулятором "мышь" (int 33н)

Функция инициализации и определения текущего состояния драйвера - AX = 0Н. Возвращает:

AX = 0Н - драйвер отсутствует (или нет аппаратуры);

AX = FFFFН - "мышь" готова к работе;

BX = 0000Н - неизвестное число кнопок;

BX = 0002Н - 2 кнопки;

BX = 0003Н - 3 кнопки.

Устанавливаются следующие параметры драйвера:

- курсор в центре и выключен;

- чувствительность по вертикали 2 микки/пиксел, по горизонтали 1 микки/пиксел;

- порог удвоенной скорости = 64 микки/сек.;

- форма курсора по умолчанию;

- координаты верхнего левого угла = (0,0), правый нижний = (максимальные координаты - 1).

Успешное завершение инициализации позволяет продолжить работу по подготовке к использованию "мыши". Следующая операция связана с определением типа и формы курсора. В текстовом режиме драйвер поддерживает 2 типа курсора:

- "жесткий", совпадающий с обычным курсором текстового режима;

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

Функция AX = 0AН задает BX = 00Н - программируемый курсор;

01Н - жесткий курсор;

CX - AND-маска экрана для программируемого курсора или номер верхней линии для жесткого курсора;

DX - XOR-маска экрана для программируемого курсора или номер нижней линии для жесткого курсора.

При формировании программируемого курсора модифицируется слово видеобуфера, соответствующего знакоместу:

screen_word = screen_word & AND_mask ^ XOR_mask.

При перемещении курсора прежнее содержимое видеобуфера восстанавливается. Распространенным является программированный курсор с AND_mask = FFFFН и XOR_mask = 7700Н. В этом случае инвертируется как цвет фона, так и цвет символа, что гарантирует видимость курсора.

В графическом режиме может быть описана любая собственная форма курсора в пределах прямоугольника 16х16. Функция AX = 0009Н. BX, CX - номера столбца и строки "горячего пятна". ES:DX - указатель на 32 символа масок (AND и XOR - маски по 16 слов).

Соотношение битов масок дает желаемый эффект:

В режиме 13Н (а также 4Н и 5Н) используются только четные столбцы в битовых масках (иначе курсор был бы очень большим).

Функция 9Н ничего не возвращает.

Курсор, видимый на любом фоне, образуется AND-маской = FFFFН и XOR-маской в форме курсора (единицами).

Для ограничения области перемещения "мыши" используют функции:

AX = 0007Н - установка вертикальных границ;

AX = 0008Н - установка горизонтальных границ;

CX, DX - min и max границы. Возврата нет.

В графическом режиме границы задаются в пикселах, для текстового режима в "виртуальных" пикселах из расчета размера знакоместа 8х8. Если минимальная граница больше максимальной, то функции меняют содержимое CX и DX. Если курсор находится вне диапазона, он отображается на границе. Для установки чувствительности драйвера используют AX = 000FН:

CX - по горизонтали (максимально микки/8 пикселов);

DX - по вертикали (максимально микки/8 пикселов), возврата нет, а минимальные значения СХ и DX равны по 1.

При движении "мыши" с высокой скоростью, превышающей порог удвоенной скорости, драйвер удваивает каждый сигнал о перемещении. Для далекого перемещения курсора нужно сделать "мышью" по столу резкое движение в нужном направлении, а затем медленно подвести курсор в точку. Установку порога удвоенной скорости выполняет AX = 0013Н со значением порога в DX. Функция AX = 001BН позволяет прочитать установку чувствительности (BX, CX) и порога (DX).

Включение курсора осуществляется AX = 0001Н, выключение AX = 0002Н.

Внутренняя переменная драйвера, отвечающая за видимость курсора, имеет значение 0-курсор видим или 1-курсор невидим. Функция 0001Н увеличивает переменную до 0-ля, 0002Н - уменьшает на 1. Поэтому на каждое выключение курсора должно приходится включение.

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