Дисципліни:
Розрахункова – графічна робота
На тему:

Функції BIOS для роботи з мишкою.

Дисципліна: Системне програмування
ВНЗ:НУ «ЛП»
Формат: Word Doc

Переглядів: 1297 Додано: 2015-04-14




Частина тексту

Робота з мишкою

Все спілкування з мишею в DOS виконується через переривання 33h, оброблювач якого встановлює драйвер миші, що завантажується зазвичай під час запуску системи. Сучасні драйвери підтримують близько 60 функцій які дозволяють налаштовувати дозвіл миші, профілі прискорення, віртуальні координати, додаткові оброблювачі подій і т.д. Більшість цих функцій використовуються рідко.

Основні функції.

  1. 33h, AX = 0: Ініціалізація миші

     Вхід:   AX – 0000h

     Вихід: AX = 0000h, якщо мишка або драйвер мишки не встановлені

  1.                  = 0FFFFh, якщо драйвер і мишка встановленні
  2.                  = число кнопок:

                           0002 або 0FFFFh – дві

                           0003 – три

                           0000 – інша кількість    

Виконується апаратний і програмний збій миші і драйвера.

  1. 33h, AX = 1: Показати курсор

     Вхід:   AX – 0001h

  1. 33h, AX = 2: Сховати курсор

     Вхід:   AX – 0002h

Драйвер миші підтримує внутрішній лічильник, який керує видимістю курсору мишки. Функція 2 зменшує значення лічильника на одиницю , а функція 1 збільшує його, але тільки до значення 0. Якщо значення лічильника – від’ємне число, то він схований, якщо 0 – видимий. Це дозволяє процедурам, які використовують прямий вивід у відеопам’ять, викликати функцію 2 на самому початку і 1 в самому кінці, не турбуючись про те, в якому стані був курсор мишки у програмі, що викликала цю процедуру.

  1. 33h, AX = 3: Визначити стан мишки

     Вхід:   AX – 0003h

     Вихід: BX = стан кнопок:

                           біт 0: нажата ліва кнопка

                           біт 1: нажата права кнопка

                           біт 2: нажата середня кнопка

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

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

         Координати, які повертаються, співпадають з координатами пікселів відповідної точки на екрані в більшості графічних режимів, крім 04,05, ОDh,13h, де Х – координату мишки треба поділити на 2, щоб отримати  номер стовпця відповідної точки на екрані. В текстових режимах обидві координати потрібно поділити на 8 для отримання номеру рядка і стовпця відповідно.

         В більшості випадків ця функція не використовується в програмах, оскільки для того, щоб реагувати на натискання кнопки чи переміщення мишки в задану область, треба викликати це переривання постійно, що призводить до витрати часу процесора. Функція 5 (визначити положення курсору при останньому натисканні кнопки), 6 (визначити положення курсору при останньому натисканні кнопки) і 0Bh (Визначити відстань, що пройдена мишкою) допоможуть оптимізувати роботу програми, яка самостійно «слідкує» за всіма переміщеннями мишки. Однак ефективніше вказати драйверу і контролювати її переміщення (чим він, власне кажучи, і займається постійно) і передавати управління на програму за умови виконання раніше заданої умови, наприклад користувач натискає на ліву кнопку мишки. Такий сервіс забезпечує функція 0Ch – встановити оброблювач подій.

  1. 33h, AX = 0Ch: Встановити оброблювач подій

     Вхід:   AX – 000Ch

  1.                  : DX = адрес оброблювача
  2.                  = умова виклику

                           біт 0: будь-яке переміщення миші

                           біт 1: натискання лівої клавіші

                           біт 2: відпускання лівої клавіші

                         біт 3: натискання правої клавіші

                         біт 4: відпускання правої  клавіші

                         біт 5: натискання середньої кнопки

                         біт 6: відпускання середньої кнопки

                СX = 0000h – відмінити оброблювач

Оброблювач подій повинен бути оформлений, як подальша процедура (тобто закінчиться командою RETF).  На вході в процедуру оброблювача АХ містить умову виклик, BX – стан кнопок, CX, DX – X – і Y- координати курсору, SI, DI – лічильники кінцевого переміщення по горизонталі і вертикалі (одиниці вимірювання для цих лічильників – мікі, 1/200 дюйма), DS – сегмент даних  драйвера миші. Перед завершенням програми встановлений оброблювач подій повинен бути обов’язково видалений (виклик функцій 0Сh c CX = 0), оскільки при першому ж виконанні умови управління буде передано в адресу пам’яті, з якого починається оброблювач.

Функція 0Ch використовується так часто, що в неї появилось декілька модифікацій – функція 14h, дає можливість встановити одночасно три оброблювачі з різними умовами, і функція 18h, також дозволяє встановити три оброблювачі і включає умови виклику стану клавіш Shift, Ctrl і Alt. Скористаємось стандартною функцією 0Ch, щоб написати просту програму для малювання.

; mousedr. asm

; Малює на екрані прямі лінії, які закінчуються в позиціях, які вказуються мишкою.

;

           .model    tiny

           .code

           org         100h                                  ; COM – файл.

           .186                                                 ; Для команди shr cx,3.

start:

           mov       ax, 12h

 int          10h                                ; Відеорежим 640х480.

 mov       ax, 0                                  ; Ініціалізація миші. 

 int          33h

 mov       ax, 1                                  ; Показати курсор миші.

 int          33h

 

 mov       ax, 000Ch                        ; Установити оброблювач подій миші.

 mov       сx, 0002h                        ; Подія – натискання лівої кнопки.

 mov       dx, offset handler            ; ES:DX – адреса оброблювача.

 int          33h

 

 mov       ah, 0                                ; Очікування натискання будь-якої клавіши.   

 int          16h

 mov       ax, 000Ch

           mov       сx, 0000h                        ; Видалити оброблювач подій миші.

 int          33h

 mov       ax, 3                               ; Текстовий режим.

 int          10h

 ret                                                 ; Кінець програми.

 

Задача 1

Написати з використанням циклів і оформити згідно вимог програму на асемблері для рисування вказаним кольором прямокутника заданого розміру у місці екрану, заданому координатами лівої верхньої вершини за допомогою мишки.

Варіант 25

Ширина     50       

Висота       75       

Колір          5