ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Керування станом курсора “миші” (видимий та невидимий курсор)

Після проведеної ініціалізації програма повинна “включити” курсор, що робить його видимим на екрані. Ця операція деблокує секцію обробника переривань від адаптера, яка працює з відеопам’яттю. Відразу після ініціалізації курсор виключений, стан курсора відслідковує спеціальна внутрішня змінна, що встановлюється після ініціалізації “миші” в –1. Керування внутрішнім прапорцем здійснюють дві функції переривання 33h:

- AX=0001h, що робить курсор видимим, тобто змінює на 1 прапорець видимості;

- AX=0002h, яка робить курсор невидимим, тобто зменшує на 1 прапорець видимості.

Якщо прапорець уже дорівнює 0, його подальше збільшення функцією AX=0001h не виконується. Але функція AX=0002h зменшує прапорець, навіть якщо він уже рівний –1. У зв’язку з цим відразу після ініціалізації виконується функція включення курсора і на кожну наступну операцію включення повинна приходитися рівно одна (і ніяк не більше) операція виключення. В протилежному випадку курсор “миші” не буде з’являтися на екрані після його включення.

Всі зміни інформації на екрані слід виконувати з виключеним курсором для запобігання непередбачених ускладнень. справа у тому. що зміни, проведені точно під курсором “миші”, не будуть “відомі” драйверу курсора і при переміщенні у нову позицію екрана драйвер відновить не нове, а попереднє значення відеопам’яті. Після виконання змін на екрані слід знову включити курсор. Виключення курсора скидає як форму, так і установлення “гарячої плями” графічного курсора.

 

2.11.6 Читання позиції курсора і стану кнопок “миші”

 

Після того, як виконано всі необхідні підготовчі операції, програма може використовувати пристрій “миші” для введення інформації. Інформація, що вводиться, – це поточна позиція курсора і стан кнопок пристрою. Періодичне введення інформації з “миші” і попадання курсора в ті або інші області екрана дозволяє виконувати потрібні дії: відкривати підменю, виконувати заливку якимось кольором та багато чого іншого. Визначення стану кнопки (натиснута, відпущена, натиснута двічі) використовується як команда на виконання програмою додаткових дій. В наш час склався певний стандарт використання кнопок “миші”. Наприклад, натискання лівої кнопки (для “правши”) означає вибір того чи іншого пункту меню або включення якогось режиму. У багатьох прикладних програмах натискання лівої кнопки аналогічне натисканню клавішi ENTER. Швидке дворазове натискання лівої або правої кнопки пристрою у деяких випадках використовується як додаткова команда на виконання будь-яких дій програми, наприклад, запуск будь-якої програми на виконання. Права кнопка, навпаки, відміняє зроблений раніше вибір, тобто часто служить аналогом клавіші клавіатури ESC.

Для визначення поточного стану пристрою використовуються функції AX=0003h; 0005h; 0006h; 000Bh.

На вході:

AX = 0003h – визначення місцеположення курсора і стану кнопок пристрою.

На виході:

BL = байт стану кнопок пристрою:

біт 0: 1 – натиснуто ліву кнопку, 0 – не натиснуто ліву кнопку);

біт 1: 1 – натиснуто праву кнопку, 0 – не натиснуто праву кнопку);

біт 2: 1 – натиснуто середню кнопку (для Mouse System), 0 – не натиснуто;

біти 3-7 – не використовуються;

CX = горизонтальна координата курсора “миші” (номер стовп-чика на екрані);

DX = вертикальна координата курсора (номер рядка на екрані).

У графічному режимі повертаються піксельні координати, а у текстовому – віртуальні піксельні координати (див. опис функцій AX=0007h та AX=0008h), і для отримання номерів текстового рядка і стовпчика слід розділити значення, які повертаються у регістрах СX та DX, на число 8.

На вході:

AX = 0005h – визначення кількості натискань кнопок “миші”;

AX = 0006h – визначення кількості відпускань кнопок “миші”;

BХ – ідентифікатор кнопки пристрою:

= 0 – запит про ліву кнопку;

= 1 – запит про праву кнопку;

= 2 – запит про середню кнопку (для Mouse Systems).

На виході:

ВХ = кількість натискань (відпускань) кнопок пристрою з моменту останнього звернення до функцій або з моменту ініціалізації “миші”, якщо запит виконується вперше;

CX = горизонтальна координата курсора “миші” (номер стовпчика на екрані) в момент натискання вказаної кнопки;

DX = вертикальна координата курсора (номер рядка на екрані) в момент натискання вказаної кнопки.

У графічному режимі повертаються піксельні координати, а у тек­стовому – віртуальні піксельні координати (див. опис функцій AX=0007h та AX=0008h), і для отримання номерів текстового рядка і стовпчика необхідно розділити значення, які повертаються у регістрах СX та DX, на число 8. Лічильник кількості натискань (відпускань) зберігає значення від 0 по EFFFh. Після виклику функції AX=0005h або AX=0006h відповідний лічильник занулюється.

На вході:

AX = 000Bh – визначення значення лічильників сигналів міккі.

На виході:

CX = переміщення курсора миші по горизонталі в міккі з моменту останнього виклику даної функції або з моменту ініціалізації “миші”, якщо запит виконується вперше;

DX = переміщення курсора миші по вертикалі в міккі з моменту останнього виклику даної функції або з моменту ініціалізації “миші”, якщо запит виконується вперше.

Значення, що містять регістри СX та DX на виході, мають цілий тип. Від’ємні значення відповідають руху курсора вліво або донизу, додатні – вправо або вгору. Після кожного виклику функції значення лічильників занулюються. Для перерахунку значень лічильників у пікселі графічного режиму або у віртуальні пікселі текстового режиму використовується функція AX=001Вh, яка визначає поточне значення чутливості по горизонталі та по вертикалі.

 

Позиціонування курсора миші пристроєм

І прикладною програмою

При переміщенні пристрою по столу драйвер переміщає курсор “миші” по екрана без будь-якої участі програми. Однак і прикладна програма має можливість керувати позицією курсора “миші”, для цього використовується функція AX=0004h.

На вході:

AX = 0004h – установлення курсора “миші” і внутрішніх лічильників позиції в нове місце на екрані;

CX = горизонтальна координата курсора “миші”;

DX = вертикальна координата курсора “миші”.

На виході: функція нічого не повертає.

Нові координати задаються для графічного режиму в пік селах, а для текстового – у віртуальних пікселах. Тому при необхідності установлення пристрою в потрібні текстовий рядок або стовпчик їх номери множаться на число 8. Дана функція не перетинає границі, встановлені функціями AX=0007h та AX=0008h. При запиті позиціонування на точку екрана поза діапазонами переміщення курсора останній “натикається” на найближчу границю, але не перетинає її.

Наявність функції керування позицією курсора “миші” дозволяє організувати керування єдиним курсором на екрані як самим пристроєм, так і з клавіатури. Така можливість керування рухами курсора часто використовується при побудові різноманітних текстових редакторів. Функція прийому клавіатурного введення постійно аналізує поточну позицію курсора “миші” і приводить у відповідність до неї позицію текстового курсора BIOSа. При натисненні клавіш клавіатури зі стрілками (Left, Right, Up, Down і ін.) виконується позиціонування курсора “миші”. Розглянуті дії приводять до того, що поточна позиція курсора, відома BIOSу для виведення інформації на екран, керується як пристроєм, так і клавішами зі стрілками.

2.11.8 Приклад програми для керування пристроєм “миша”

У текстовому режимі роботи відеоадаптера

 

Наведена нижче програма демонструє принципи програмування пристрою “миша” з використанням функцій переривання INT 33h.

При одночасному виконанні двох умов – попаданню текстового курсора “миші” у прямокутник екрана дисплея з координатами лівого верхнього кута X1=6, Y1=1, координатами правого нижнього кута X2=25, Y2=8, та натисненні лівої клавіші “миші” – на екран дисплея виводиться рядок символів ‘*’.

 

 

NAME MOUSE5

.MODEL TINY

CODE SEGMENT

ASSUME CS:CODE

ORG 100H

BEGIN: JMP MAIN

PRESS DW ?

X DW ?

Y DW ?

MAIN PROC

MOV AX,0

INT 33H

MOV AX,1

INT 33H

MOV PRESS,0

M1: MOV AX,3

INT 33H

MOV PRESS,BX

MOV X,CX

MOV Y,DX

CMP X,48

JL M1

CMP X,200

JG M1

CMP Y,8

JL M1

CMP Y,200

JG M1

CMP PRESS,1

JNE M1

CALL OUTPUT

RET

MAIN ENDP

OUTPUT PROC

MOV AH,2

MOV DH,10

MOV DL,5

MOV BH,0

INT 10H

MOV AH,9

MOV AL,'*'

MOV CX,40

MOV BL,0E1H

INT 10H

RET

OUTPUT ENDP

CODE ENDS

END BEGIN

 

 

Порядок виконання роботи

 

1. Вивчити теоретичну частину даної лабораторної роботи.

2. Скласти програму для керування пристроєм “миша” в текстовому режимі роботи відеоадаптера з використанням функцій переривання int 33h.

3. Скласти програму для керування пристроєм “миша” в графічному режимі роботи відеоадаптера з використанням функцій переривання int 33h.

 

 

Література

 

1. Григорьев В. Л. Программирование однокристальных микропроцессоров. – М.: Энергоатомиздат, 1987.

2. Использование Turbo Assembler при разработке программ. – Киев, ”Диалектика”, 1994. – 288 с.

3. Абель П. Язык Ассемблера для IBM РС и программирования/ Пер. с англ. – М.: Высш. школа, 1992 – 447 с.

4. Финогенов К.Г. Основы языка ассемблера. – М.: Радио и связь, 1999.-288 с.

5. Юров В. Assembler: Учебник. – СПб и др.: Питер, 2000. – 622 с.

 

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти