Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Функции прерывания MS-DOS 33h

1. Функция 00h- сброс драйвера мыши. Сбрасывает (инициализирует) драйвер мыши.

Входные данные: AX = 0000H

Выходные данные:AX = состояние мыши

AX = FFFFH: драйвер мыши установлен

AX = 0000H: ошибка, драйвер мыши не установлен

BX = число кнопок мыши

Примечания: Программа инициализации выполняет следующие задачи: перемещает маркер мыши в центр экрана и стирает его изображение на экране. После разрешения вывода маркера маркер мыши по умолчанию имеет вид инверсного прямоугольника. Этот маркер всегда воспроизводится на нулевой экранной странице независимо от текущего видеорежима. Областью перемещения мыши становится весь экран. Устанавливает обработчик событий (event handler) (по умолчанию не устанавливается). Устанавливает эмуляцию светового пера (по умолчанию не устанавливается). Задает скорость перемещения маркера мыши. По умолчанию относительная скорость равно 8 микки на 8 горизонтальных элементов и 16 микки на 16 вертикальных. Задает максимальную скорость мыши (по умолчанию равна 64 микки в секунду). Микки (mickey) – это самое маленькое расстояние, которое отслеживается мышью. Оно примерно равно 1/200 дюйма.

2. Функция 01h- вывод маркера мыши. Выводит на экран маркер мыши. Этот маркер отображает любое движение мыши, перемещаемой пользователем.

Входные данные: AX = 0001H

Выходные данные: Отсутствуют

Примечания: Эта функция увеличивает на единицу значение внутреннего счетчика, который определяет, должен ли маркер мыши быть виден на экране. После инициализации драйвера мыши функцией 00H этот счетчик содержит -1 (т.е. маркер мыши не виден). Когда после обращения к функции 01H значение этого счетчика становится нулевым, маркер мыши появляется на экране. Драйвер мыши отображает перемещение мыши даже тогда, когда маркер не воспроизводится на экране. После обращения к этой функции маркер может появляться не в том месте, в каком он находился в момент удаления маркера в результате обращения к функции 00H или 02H.

3. Функция 02h - удаление маркера мыши. Удаляет маркер мыши с экрана.

Входные данные: AX = 0002H

Выходные данные: Отсутствуют

Примечания: Эта функция уменьшает на единицу значение внутреннего счетчика, который определяет, должен ли маркер мыши быть виден на экране. Если счетчик имеет значение 0, то маркер мыши воспроизводится на экране; если счетчик имеет значение -1, то маркер удаляется с экрана. Драйвер мыши отображает перемещение мыши даже тогда, когда маркер не воспроизводится на экране. После обращения к этой функции маркер может появляться не в том месте, в каком он находился в момент удаления маркера в результате обращения к функции 00H или 02H.



4. Функция 03h - чтение положения маркера/состояния кнопок. Возвращает текущее положение маркера мыши и текущее состояние кнопок мыши.

Входные данные: AX = 0003H

Выходные данные: BX = состояние кнопок мыши

Бит 0 = 1:нажата левая кнопка

Бит 1 = 1:нажата правая кнопка

Бит 2 = 1:нажата средняя кнопка

Биты 3-15: не используются

CX = координата X

DX = координата Y

Примечания: Координаты, возвращаемые в регистрах CX и DX, являются координатами элементов изображения на виртуальном экране мыши, а не физическими координатами на реальном экране. Если на мыши имеются только две кнопки, то информация о центральной кнопке не имеет значения.

5. Функция 04h - перемещение маркера мыши. Перемещает активный маркер мыши в указанную точку экрана.

Входные данные: AX = 004H

CX = координата X

DX = координата Y

Выходные данные: Отсутствуют

Примечания: Координаты, возвращаемые в регистрах CX и DX, являются координатами элементов изображения на виртуальном экране мыши, а не физическими координатами на реальном экране. Если указанная в обращении позиция находится за пределами диапазона перемещения маркера мыши, заданного функциями 07H и 08H, то функция корректирует координаты таким образом, что маркер остается внутри диапазона. Маркер перемещается в новую позицию даже в том случае, если он не воспроизводится на экране. После того, как воспроизведение маркера мыши снова будет разрешено, он появится в новой позиции.

6. Функция 05h - определение числа нажатий кнопки мыши. Информирует вызывающую программу о том, сколько раз была нажата указанная кнопка мыши с момента последнего обращения к функции 05H. Функция 05H также сообщает вызывающей программе координаты маркера на экране в момент последнего нажатия кнопки.



Входные данные: AX = 0005H

BX = кнопка мыши

BX = 0: левая кнопка мыши

BX = 1: правая кнопка мыши

BX = 2: средняя кнопка мыши

Выходные данные:BX = состояние всех кнопок мыши:

Бит 0 = 1: нажата левая кнопка

Бит 1 = 1: нажата правая кнопка

Бит 2 = 1: нажата средняя кнопка

Биты 3-15: не используются

CX = горизонтальная координата в момент

последнего нажатия.

DX = вертикальная координата маркера в момент

последнего нажатия.

Примечания: Координаты, возвращаемые в регистрах CX и DX, являются координатами элементов изображения на виртуальном экране мыши, а не физическими координатами на реальном экране. При обращении к этой функции счетчик числа нажатий указанной клавиши сбрасывается в ноль.

7. Функция 06h - определение числа отпусканий кнопки мыши. Информирует вызывающую программу о том, сколько раз была отпущена указанная кнопка мыши с момента последнего обращения к функции 06H. Функция 06H также сообщает вызывающей программе координаты маркера на экране в момент последнего отпускания кнопки.

Входные данные: AX = 0006H

BX = кнопка мыши

BX = 0: левая кнопка мыши

BX = 1: правая кнопка мыши

BX = 2: средняя кнопка мыши

Выходные данные:BX = состояние всех кнопок мыши:

Бит 0 = 1

Бит 1 = 1

Бит 2 = 1

CX = горизонтальная координата маркера в

момент последнего отпускания кнопки.

DX = вертикальная координата маркера в момент

последнего отпускания кнопки.

Примечания: Координаты, возвращаемые в регистрах CX и DX, являются координатами элементов изображения на виртуальном экране мыши, а не физическими координатами на реальном экране. При обращении к этой функции счетчик числа нажатий указанной клавиши сбрасывается в ноль.

8. Функция 07h - задание диапазона перемещения по горизонтали. Определяет диапазон перемещения маркера мыши по горизонтали. После того, как диапазон установлен, пользователь не может вывести маркер мыши за его пределы.

Входные данные: AX = 0007H

CX = минимальная горизонтальная координата

маркера

DX = максимальная горизонтальная координата

маркера

Выходные данные: Отсутствуют

Примечание: Координаты, передаваемые в регистрах CX и DX, описывают положение элементов изображения на виртуальном экране мыши, а не физические координаты на реальном экране. Если в момент обращения к функции 07H маркер мыши находится за пределами устанавливаемого диапазона, то драйвер мыши автоматически перемещает его внутрь диапазона. Если значение DX меньше значения CX, то эти параметры меняются местами.

9. Функция 08h - задание диапазона перемещения мыши по вертикали. Определяет диапазон перемещения маркера мыши по вертикали. После того, как диапазон установлен, пользователь не может вывести маркер мыши за его пределы.

Входные данные: AX = 0008H

CX = минимальная вертикальная

координата маркера

DX = максимальная вертикальная координата

маркера

Выходные данные: Отсутствуют

Примечание: Координаты, передаваемые в регистрах CX и DX, описывают положение элементов изображения на виртуальном экране мыши, а не физические координаты на реальном экране. Если в момент обращения к функции 08H маркер мыши находится за пределами устанавливаемого диапазона, то драйвер мыши автоматически перемещает его внутрь диапазона. Если значение DX меньше значения CX, то эти параметры меняются местами.

10. Функция 09h - описание маркера мыши (в графическом режиме). Описывает внешний вид маркера мыши в графическом режиме, а также битовое поле, корректирующее элементы изображения вокруг маркера мыши.

Входные данные: AX = 0009H

BX = ширина маркера, начиная с левого края

битового поля

CX = высота маркера, начиная с верхнего края

битового поля

EX = адрес сегмента битового поля

DX = смещение битового поля

Выходные данные: Отсутствуют

Примечания: Битовое поле состоит из 64 байтов, из которых первые 32 являются результатом операции AND, а остальные 32 байта результат операции OR с текущими элементами изображения.

11. Функция 0ah- описание маркера мыши (в тестовом режиме). Описывает битовую маску, определяющую внешний вид маркера в текстовом режиме.

Входные данные: AX = 000AH

BX = тип маркера

BX = 0: программный

BX = 1: аппаратный

CX = маска AND (программный маркер) или

начальная линия (аппаратный маркер)

DX = маска XOR (программный маркер) или

конечная линия (аппаратный маркер)

Выходные данные: Отсутствуют.

Примечания: Если выбран программный маркер, то код символа, находящегося под маркером, и байт атрибутов этого символа логически умножаются (AND) на маску, заданную в регистре CX, а затем выполняется операция "исключающее или" (XOR) между результатом умножения и маской в регистре DX. Для байта атрибутов эти операции выполняются со старшим байтом регистров CX и DX (CH и DH), а для кода символа с младшим байтом (CL и DL). Аппаратный маркер имеет такую же форму как обычный текстовый курсор. В монохромном режиме значения начальной и конечной линий изменяются в диапазоне от 0 до 13. В цветном режиме значение линий изменяется от 0 до 7.

12. Функция 0bh - определение величины перемещения. Определяет расстояние между текущим положением мыши и положением мыши в момент последнего обращения к функции 0BH.

Входные данные: AX = 000BH

Выходные данные:CX = расстояние от последней

точки по горизонтали (в микки)

DX = расстояние от последней точки

по вертикали (в микки).

Примечания: Эти значения должны интерпретироваться как числа со знаком. Положительные значения указывают на перемещение в нижнюю или правую часть экрана, а отрицательные - в верхнюю или левую часть экрана. Расстояния выражены в микки (1 микки = 1/200 дюйма), а не в элементах изображения.

12. Функция 0fh - задание скорости маркера. Устанавливает соотношение между микки (1 микки = 1/200 дюйма) и элементами изображения на экране. Это соотношение определяет чувствительность мыши и скорость перемещения по экрану.

Входные данные: AX = 000FH

CX = число микки по горизонтали

DX = число микки по вертикали

Выходные данные: Отсутствуют.

Примечания: Значения регистров CX и DX могут изменяться в диапазоне от 1 до 32767. По умолчанию скорость задается равной 8 микки по горизонтали и 16 микки по вертикали. Таким образом, по горизонтали маркер двигается вдвое быстрее, чем по вертикали. Обращение к функции 00H (сброс драйвера мыши) отменяет любые установленные значения скорости и заменяет их значениями по умолчанию.

13. Функция 10h - область исключения. Описывает любую область экрана как область исключения. При входе в область исключения маркер мыши исчезает.

Входные данные: AX = 0010H

CX = координата X, верхний левый угол области

исключения

DX = координата Y, верхний левый угол области

исключения

SI = координата X, правый нижний угол области

исключения

DI = координата Y, правый нижний угол области

исключения

Выходные данные: Отсутствуют.

Примечания: Координаты, передаваемые в регистрах CX, DX, DI и SI описывают положение элементов изображения на виртуальном экране мыши, а не физические координаты на реальном экране. Обращение к функции 00H (сброс драйвера мыши) или к функции 01H (вывод маркера мыши) отменяет координаты области исключения.

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

Входные данные: AX = 0013H

DX = предельная скорость, выраженная в микки

на секунду

Выходные данные: Отсутствует

Примечания: 1 микки - 1/200 дюйма. Чтобы предотвратить удвоение скорости мыши, можно установить более высокий предел. Скорость свыше 5000 микки в секунду достичь практически невозможно.

15. Функция 1ah - задание чувствительности мыши. Определяет соотношение между физическим перемещением и перемещением маркера мыши. Определяет также максимальную скорость, при которой происходит удвоение скорости мыши.

Входные данные: AX = 001AH

BX = число микки по горизонтали

CX = число микки по вертикали

DX = предельная скорость для удвоения скорости

мыши

Выходные данные: Отсутствуют.

Примечания: Значения регистров CX и DX могут изменяться от 1 до 32767. По умолчанию устанавливается 8 микки по горизонтали и 16 микки по вертикали. Таким образом, по горизонтали маркер движется вдвое быстрее, чем по вертикали. Чтобы предотвратить удвоение скорости мыши, можно установить более высокий предел. Скорость свыше 5000 микки в секунду достичь практически невозможно. Обращение к функции 00H (сброс драйвера мыши) отменяет установленные ранее значения скорости и заменяет их значениями по умолчанию.

16. Функция 1bh - определение чувствительности мыши. Возвращает параметры, установленные ранее в результате обращения к функциям 1ah,0fh или 13h.

Входные данные: AX = 001BH

Выходные данные: BX = число микки по горизонтали

CX = число микки по вертикали

DX = предельное значение скорости

для удвоения скорости мыши

17. Функция 1ch - задание интенсивности аппаратных прерываний мыши. Определяет частоту считывания аппаратным обеспечением мыши текущего положения мыши и состояния ее кнопок

Входные данные: AX = 001CH

BX = интенсивность прерываний

Бит 0: прерывание отсутствует

Бит 1: 30 прерываний в секунду

Бит 2: 50 прерываний в секунду

Бит 3: 100 прерываний в секунду

Бит 4: 200 прерываний в секунду

Бит 5-15: не используются

Выходные данные: Отсутствуют.

Примечания: Эта функция может быть использована только для подключенной к порту мыши. Если в регистре BX установлены в единицу несколько битов, то действует только самый младший. Разрешение мыши возрастает с увеличением интенсивности прерываний. Увеличение числа прерываний от мыши снижает скорость выполнения основной программы.

18. Функция 1fh - деактивизация драйвера мыши. Переводит в неактивное состояние текущий драйвер мыши и возвращает адрес программы обработки прерывания, которая использовалась для прерывания 33H.

Входные данные: AX = 001FH

Выходные данные: AX = код ошибки:

AX = FFFFH: ошибка

AX = 001FH: ошибка

ES = адрес сегмента

использовавшегося обработчика событий

BX = смещение использовавшегося обработчика

событий

Примечания: Обращение к этой функции отключает все установленные ранее активные программы обработки драйверов мыши. Исключением является программа обработки прерывания 33H, но вызывающая программа может записать в этот вектор прерывания первоначальное значение, поскольку соответствующий адрес возвращается в регистрах ES:BX.

19. Функция 20h - активизация драйвера мыши. Активизирует драйвер мыши, отключенный ранее функцией 1FH.

Входные данные: AX = 0020H

Выходные данные: Отсутствуют.

20. Функция 21h - сброс драйвера мыши. Инициализирует драйвер мыши и запрещает маркер мыши и установленный на данный момент обработчик событий.

Входные данные: AX = 0021H

Выходные данные: AX = состояние ошибки:

AX = FFFFH: ошибка

AX = 0021H: без ошибок

BX = число кнопок мыши

Примечания: В отличие от функции 00H эта функция не выполняет полного аппаратного сброса устройства.

21. Функция 24h - определение типа мыши. Определяет тип установленной мыши и номер версии драйвера мыши.

Входные данные: AX = 0024H

Выходные данные: BH = целая часть номера версии

BL = дробная часть номера версии

CH = тип мыши:

CH = 1: параллельная мышь

CH = 2: последовательная мышь

CH = 3: подключенная к порту мышь

CH = 4: мышь PS/2

CH = 5: мышь фирмы "Хьюлетт Пакард"

CL = номер IRQ

CL = 0:PS/2

CL = 2,3,4,5 или 7: номер IRQ в PC.

Примечания: Если номер версии драйвера равен, например, 6.24, то значение 6 возвращается в регистре BH, а 24 в регистре BL.

 

Таким образом, функции драйвера вызываются через прерывание 33h. Записав номер функции в регистр AX, результат получаем в регистрах AX, BX, CX, DX. Для генерации программного прерывания процессора 8086 можно воспользоваться библиотечной функцией языка Си int86, которая имеет следующий прототип:

int int86(int intr_num, union REGS*inregs, union REGS*outregs); - функция генерирует программное прерывание микропроцессора 8086, причем номер прерывания определяется аргументом intr_num. Перед выполнением прерывания функция копирует значения регистров из объединения inregs в сами регистры. После возврата из прерывания, функция копирует текущие значения регистров в параметр outregs.

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.02 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал