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


Курсор и мышь


Курсор и мышь
Курсор и мышь Манипулятор "мышь" (далее просто мышь) является основным инструментом для поддержки диалога пользователя с задачей при работе в графических видеорежимах. С помощ...
Предварительные действия
Предварительные действия В данном разделе описана настройка драйвера и задачи на совместную работу. Выполняемые при этом действия не зависят от того, как задача взаимодействует с драйв...
Новое макроопределение
Новое макроопределение В примере 2.12 главы 2 были описаны макроопределения PushReg и PopReg, которые неоднократно использовались в примерах подпрограмм. Добавим к ним новое макроопред...
Пример 6 7 Макроопределение для обращений к драйверу мыши
Пример 6.7. Макроопределение для обращений к драйверу мыши Mouse macro fun ; номер функции задает параметр fun mov ax, fun&h ; номер функции помещается в ах int 33h ; обращение к...
Пределы перемещения и исходная позиция
Пределы перемещения и исходная позиция При работе в режимах VESA основное назначение драйвера заключается в отслеживании текущей позиции мыши и ее преобразовании в координаты курсора на...
Новые переменные
Новые переменные При выполнении подготовительных действий надо настроить не только драйвер, но и задачу. В процессе выполнения задачи будет неоднократно анализироваться перемещение мыш...
Пример 6 8 Переменные используемые при работе с мышью
Пример 6.8. Переменные, используемые при работе с мышью Winpnt dw 2 ; окно видеопамяти, в котором расположен курсор Offspnt dw 22848 смещение изображения курсора в этом окне Xpointer dw...
Пример 6 9 Настройка драйвера задачи и первый вывод курсора
Пример 6.9. Настройка драйвера, задачи и первый вывод курсора mouse 0 инициализация драйвера ; !! здесь желательно проверить содержимое регистров АХ и ВХ !! хог сх, сх СХ = Xmin = Ymin =...
Пример 6 9 предназначен для выполнения
Пример 6.9 предназначен для выполнения в режимах PPG, когда код точки занимает 1 байт. Если ваша задача работает с режимами direct color, то результат, вычисленный командой mul, надо допол...
Чувствительность курсора и мыши
Чувствительность курсора и мыши При установке драйвера по умолчанию выбирается режим работы, при котором перемещение мыши на 1 дюйм по горизонтали или вертикали вызывает перемещение ку...
Работа в режиме опроса драйвера мыши
Работа в режиме опроса драйвера мыши С манипулятором "мышь", как с большинством внешних устройств, задача может работать в режиме опроса его текущего состояния, или в режиме...
Управляющий алгоритм для режима опроса
Управляющий алгоритм для режима опроса...
Структура задачи
Структура задачи Прежде всего, давайте уточним некоторые общие вопросы. В структуре задачи, составленной для работы в режиме опроса, можно выделить следующие основные компоненты. Под...
Пример управляющего алгоритма
Пример управляющего алгоритма. Подготовительные действия и подпрограммы неоднократно обсуждачись и еще будут обсуждаться в тексте книги. Зцесь нас интересует управляющий алгоритм, который у...
Пример 6 10 Управляющий алгоритм для режима опроса
Пример 6.10. Управляющий алгоритм для режима опроса General : mov ah, 01 код функции опроса состояния клавиш int 16h опрос состояния клавиш jnz Preskey -> была нажата одна из клавиш...
Расшифровка и исполнение команд
Расшифровка и исполнение команд После чтения введенного символа в регистре ah находится scan code, а в регистре al — код ASCII, если таковой существует. Обычно для анализа используе...
Ввод спецификации файла
Ввод спецификации файла В примере 6.10 при опознании кода буквы N или п выводится подсказка оператору и вводится спецификация файла. Текст подсказки должен быть описан в разделе данных...
Завершение задачи
Завершение задачи Для завершения выполнения задачи и возврата в DOS оператор должен ввести букву х или х. Следует отметить, что для этой цели она используется во многих прикладных задач...
Пример 6 11 Завершение работы задачи и выход в DOS
Пример 6.11. Завершение работы задачи и выход в DOS eoprg: ; Сначала выполняются заключительные действия, а потом: mov ah, 4Ch ; код запроса "завершение задачи" int 21h ; обращ...
Использование стрелок
Использование стрелок В примере 6.10 показано, как можно управлять перемещениями указателя мыши с помощью клавиш, на которых нарисованы стрелки, направленные влево, вправо, вверх и вни...
Формирование кодов событий
Формирование кодов событий В примере 6.10 четвертая команда вызывает подпрограмму statins, текст которой приведен в примере 6.12. Она формирует и передает задаче данные о событиях, связ...
Функции драйвера
Функции драйвера Драйвер поддерживает три функции, которые позволяют получить разные данные о состоянии мыши. Функция Mouse 3 возвращает в регистрах bх, сх и dx текущие значения сче...
Взаимосвязь событий
Взаимосвязь событий В технической документации любые изменения в состоянии мыши принято называть событиями (event). Функция Mouse з возвращает данные об элементарных событиях, в общем...
Таблица 6 2 Перечень событий для одной кнопки мыши
Таблица 6.2. Перечень событий для одной кнопки мыши Код события Движение мыши Старое состояние Новое состояние 0...
Пример 6 12 Формирование кодов событий для двух кнопок
Пример 6.12. Формирование кодов событий для двух кнопок Statms : Mouse 3 опрос текущего состояния мыши xor al, al признак отсутствия движения стар XPointer, ex координата X изменилась ?...
Идентификация графических объектов
Идентификация графических объектов Кнопки манипулятора "мышь" используются для управления процессом выполнения задач. Выбор выполняемых действий зависит от объекта, на который...
Управление перемещением курсора
Управление перемещением курсора Необходимость перемещения курсора возникает при обработке тех событий, которым в табл. 6.2 соответствуют коды от 4 до 7. Перемещение в чистом виде вызыв...
Предварительные замечания
Предварительные замечания В зависимости от того, какая из кнопок является ведущей (обычно левая), имя подпрограммы, выполняющей перемещение курсора, располагается на пятом месте одного...
Пример 6 13 Группа подпрограмм для перемещения курсора
Пример 6.13. Группа подпрограмм для перемещения курсора Mothor: add Xpointer, bx изменение значения Xpointer jmp short setpos обход следующей команды Motver: add Ypointer, bx изменение зн...
Дополнительная точка входа
Дополнительная точка входа В описанной подпрограмме объединены восстановление исходного фона, вычисление адреса видеопамяти и построение изображения курсора. Иногда эти действия должны...
Работа в режиме прерываний
Работа в режиме прерываний Недостаток режима опроса заключается в том, что задача не узнает об изменении состояния мыши до тех пор, пока не обратится к драйверу. В некоторых случаях это...
Функции драйвера
Функции драйвера Для того чтобы при изменении состояния мыши драйвер мог прервать выполнение задачи, последняя должна с помощью специальных функций установить прерывающую подпрограмму....
Установка основной подпрограммы
Установка основной подпрограммы Драйвер может обслуживать только одну основную прерывающую подпрограмму. Для ее установки задаются адрес точки входа и маска события (или событий), при к...
Установка альтернативных подпрограмм
Установка альтернативных подпрограмм Учитывая, что основная подпрограмма может быть только одна, разработчики предусмотрели возможность установки трех альтернативных подпрограмм. Их при...
Ошибка в драйвере Mitsumi
Ошибка в драйвере Mitsumi Автор исследовал три драйвера мыши, разработанные фирмами Microsoft, Genius и Mitsumi. В последнем из них допущена трудно диагностируемая ошибка, она заключае...
Вызов подпрограммы драйвером
Вызов подпрограммы драйвером Если произошло событие, код которого указан в маске, то драйвер вызывает установленную подпрограмму. При входе в нее в регистрах bx, сх и dx находятся данн...
Общие требования к подпрограммам
Общие требования к подпрограммам При входе в подпрограмму регистр ds содержит сегмент оперативной памяти, в котором расположен драйвер. Поэтому выполнение подпрограммы должно начинаться...
Способы перемещения курсора
Способы перемещения курсора Основные действия, выполняющие перемещение курсора, были описаны в разделе на примере подпрограммы Motion. При работе в режиме прерываний задача должна иметь...
Подпрограмма Mousm
Подпрограмма Mousm Текст подпрограммы, перемещающей курсор по прерываниям, приведен в примере 6.14. В нем использованы имена переменных curmp и pntstat, их следует добавить к описанным...
Пример 6 14 Прерывающая подпрограмма для перемещения курсора
Пример 6.14. Прерывающая подпрограмма для перемещения курсора Mousm: mov ах, data ax = значение сегмента данных mov ds , ах установка сегмента данных mov es, Vbuff установка сегмента...
Изменение флага состояния
Изменение флага состояния Для того чтобы каждый раз не вспоминать о необходимости изменить текущее значение переменной pntstat, мы рекомендуем просто включить в текст подпрограмм showpn...
Установка Mousm
Установка Mousm Для установки подпрограммы Mousm после действий, описанных в примере 6,9, надо выполнить группу команд, приведенную в примере 6.15....
Пример 6 15 Установка прерывающей подпрограммы Mousm
Пример 6.15. Установка прерывающей подпрограммы Mousm ; Дополнение к примеру 6.9 push es ; сохраняем содержимое es push cs ; помещаем в стек содержимое cs pop es ; и выталкиваем его в...
Анализ состояния кнопок
Анализ состояния кнопок Текущее состояние мыши, как правило, надо анализировать в тех случаях, когда это необходимо для выполнения задачи. Поэтому мы рекомендуем, по крайней мере, на пе...
Универсальная подпрограмма
Универсальная подпрограмма Драйвер всегда обрабатывает только одно событие, это обстоятельство и использовано в подпрограмме Eventm. Она либо перемещает курсор, либо формирует новые зн...
Пример 6 16 Обслуживание прерываний от драйвера мыши
Пример 6.16 . Обслуживание прерываний от драйвера мыши Eventm: push ax ; сохранение содержимого ах mov ax, data ; ах = значение сегмента данных mov ds, ax установка сегмента данных po...
Построение рисунка курсора
Построение рисунка курсора При работе в текстовых или графических режимах IBM драйвер мыши самостоятельно определяет установленный видеорежим и в зависимости от этого выбирает способ по...
Курсоры для Windows
Курсоры для Windows Наиболее доступными являются файлы, содержащие рисунки курсоров, подготовленные в стандарте Windows. Операционные системы Windows используют курсоры различной формы...
Структура файлов Icon
Структура файлов Icon. Семейство Windows использует один общий стандарт icon для хранения файлов с заготовками рисунков курсоров и пиктограмм (значков). Спецификации файлов имеют тип (...
Пример 6 1 Распечатка (dump) файла Left_00 cur
Пример 6.1. Распечатка (dump) файла Left_00.cur Заголовок файла 000 00 00 02 00 01 00 20 20 00 00 ОЕ 00 04 00 30 01 010 00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00 020 00 00 01 00...
Предварительная подготовка рисунка
Предварительная подготовка рисунка В исходном виде рисунок курсора и маска не удобны для многократного использования. Их надо распаковать, перевернуть, по возможности сократить и хранит...
Пример 6 2 Поворот чернобелого рисунка или маски
Пример 6.2. Поворот черно-белого рисунка или маски mov si, di копируем адрес первой строки add si, 124 получаем адрес последней строки mov ex, 16 количество пар строк turn : mov eax, f...
Распаковка рисунка и маски
Распаковка рисунка и маски Повернутые рисунок и маску надо распаковать и сохранить в оперативной памяти. Для их хранения выделяется два массива, размером по 1024 байта (один байт на то...
Сокращение рисунка и маски
Сокращение рисунка и маски. При выполнении графических задач курсор перемещается достаточно часто, поэтому желательно сократить до минимума действия, связанные с его построением и пере...
Пример описания рисунка и маски
Пример описания рисунка и маски. В примере 6.3 заготовка рисунка и маска описаны на языке ассемблера. Это распакованный файл из примера 6.1, в котором переставлены не только строки, но и с...
Пример 6 3 Описание рисунка и маски курсора
Пример 6.3. Описание рисунка и маски курсора Pnt image db 00, 00, 00,00, 00, 00, 00 00,00, no, nn nn no oo db 00, 00, 00,00, 00, 00, 00, 00,00, 00, 00, 00, 00,00 db 00, 00, FF, 00, 00...
Немаскируемый курсор
Немаскируемый курсор При построении обычных рисунков их образы копируются в видеопамять, но если таким способом построить рисунок, образ которого приведен в примере 6.3, то изображение...
Предварительные замечания
Предварительные замечания Образ рисунка курсора можно хранить в любом сегменте оперативной памяти. Учитывая его небольшой размер (294 байта). мы будем считать, что он расположен в сегм...
Подпрограмма Tglpntr
Подпрограмма Tglpntr Текст подпрограммы, изменяющей состояние курсора на противоположное, приведен в примере 6.4. При каждом нечетном вызове Tglpntr рисунок курсора появляется на экран...
Пример 6 4 Подпрограмма переключения состояния курсора
Пример 6.4. Подпрограмма переключения состояния курсора Tglpntr: pusha сохранение содержимого регистров push Cur_win сохранение исходного окна ir.ov ax, Winpnt ax = окно с рисунком курсор...
Недостатки немаскируемого курсора
Недостатки немаскируемого курсора чевидными преимуществами работы с немаскируемым курсором являются следующие: для построения и удаления курсора нужна одна подпрограмма; подпрограмма...
Маскируемый курсор
Маскируемый курсор Маскировка является одним из способов исключения ненужных элементов изображения в процессе построения рисунка. Она применяется не только при выводе на экран курсоров...
Как производится маскировка
Как производится маскировка В предыдущем разделе мы использовали тот факт, что при определенных условиях команда хог инвертирует значение операнда-приемника. Заметим также, что у этой к...
Схема построения рисунка
Схема построения рисунка Для получения изображения маскируемого курсора на экране надо сохранить исходный фон, наложить на этот фон маску, полученный результат объединить с заготовкой р...
Подпрограмма Showpnt
Подпрограмма Showpnt Описанные действия выполняются в одном цикле, который повторяется для каждой точки прямоугольной области, в которой располагается рисунок курсора. Текст подпрограмм...
Пример 6 5 Подпрограмма построения
Пример 6.5. Подпрограмма построения рисунка маскируемого курсора Showpnt: pusha сохранение содержимого регистров push Cur win сохранение исходного окна mov ax, Winpnt ах = окно с рис...
Пример 6 6 Восстановление исходного
Пример 6.6. Восстановление исходного фона на месте рисунка курсора Hidepnt pusha сохранение содержимого регистров push Cur win сохранение исходного окна mov ax, Winpnt ах = окно с рис...
Замечания к описанным подпрограммам
Замечания к описанным подпрограммам В двух предыдущих разделах описаны действия, которые надо выполнить для построения или удаления изображения курсора. Здесь мы рассмотрим, как изменяю...
Промежуточные итоги
Промежуточные итоги При программировании конкретной задачи важно не только составить нужную подпрограмму, но и корректно ее использовать. Применительно к нашему случаю это означает сле...
Подготовка к работе с манипулятором "мышь"
Подготовка к работе с манипулятором "мышь" Манипулятор "мышь" преобразует свое перемещение в электрические сигналы и посылает их в компьютер. Наибольшее распространение...
Общее описание драйвера мыши
Общее описание драйвера мыши От манипулятора в компьютер поступает первичная информация, которая не пригодна для непосредственного использования в прикладных задачах. Предварительную об...
Установка драйвера
Установка драйвера Драйвер является резидентной, т. е. постоянно находящейся в памяти задачей. В процессе загрузки DOS находит файл, содержащий эту задачу, помещает его содержимое в опе...
Доступ к драйверу
Доступ к драйверу Если драйвер установлен, то при работе в среде DOS адрес его точки входа хранится в векторе ззь. Поэтому для обращения к нему прикладные задачи должны использовать ко...
Таблица 6 1 Список основных функций драйвера мыши
Таблица 6.1. Список основных функций драйвера мыши Код Запрашиваемое (исполняемое) действие 00 Инициализация драйвера (настройка...
Управление курсором
Управление курсором При установке стандартных текстовых или графических режимов IBM драйвер самостоятельно рисует, удаляет и перемещает указатель мыши, что существенно упрощает структур...
Установочные команды
Установочные команды Наиболее важной функцией драйвера является увязка перемещений мыши с позицией курсора на экране. При выполнении этой функции используются внутренние переменные и с...
Информационные команды
Информационные команды Для определения текущих координат мыши и состояния ее кнопок предназначены функции с кодами оз, 05, об и овь....
Примеры использования этих функций
Примеры использования этих функций мы рассмотрим при описании работы с мышью в режиме опроса ее состояния....
Обслуживание прерываний
Обслуживание прерываний Альтернативой режиму опроса состояния является режим прерываний, при котором задача получает информацию от драйвера только при наступлении конкретного события —...
Примеры использования этих функций
Примеры использования этих функций мы рассмотрим при описании работы с мышью в режиме прерываний....
Специальные функции
Специальные функции Пять команд с кодами I5h, I6h, I7h, iFh и 20h выполняют специфические действия, которые нужны только в особых случаях. В первую очередь к ним относится смена драйвер...








Начало