1. CEL ĆWICZENIA .
Celem ćwiczenia jest zapoznanie się z budową myszki, z jej zasadą działania oraz programowaniem za pomocą wybranych funkcji przerwania 33h BIOS'u .
2. WSTĘP TEORETYCZNY .
Mysz, urządzenie, które służy do komunikacji użytkownika z komputerem. W wielu przypadkach pozwala zastąpić klawiaturę, często jego użycie jest znacznie wygodniejsze. Myszy rozpowszechniły się wraz z powstaniem graficznych interfejsów w systemach operacyjnych. Urządzenie składa się z plastikowej obudowy, wewnątrz której znajduje się kulka obracająca się wraz z przesuwaniem myszy po powierzchni biurka. Na obudowie znajdują się dwa lub trzy przyciski, nowoczesne myszy są również wyposażone w pokrętło (jedno lub więcej) służące do przewijania długich dokumentów (np. stron WWW).
Myszka komunikuje się z komputerem za pomocą portu szeregowego. Znane są co prawda myszki współpracujące z kartą dedykowaną do ich obsługi (jest to rozwiązanie archaiczne), ewentualnie z kartami sterowników graficznych (rozwiązanie firmy ATI), jednak przeważająca większość myszek używa portu szeregowego.
Starsze wersje korzystały dodatkowo z przewodu klawiatury, ale wyłącznie dla zasilania swoich układów elektronicznych. Obecnie technologia CMOS pozwala na zastosowanie układów pobierających tak małą moc, że możliwe jest zasilanie myszki z wyjść portu szeregowego (napięciami ± 12 V).
2.1. SCHEMAT BLOKOWY PRZEDSTAWIAJĄCY PRZEPŁYW INFORMACJI Z URZĄDZENIA WSKAŹNIKOWEGO DO KOMPUTERA .
2.2. PRZETWORNIK RUCHU NA IMPULSY ELEKTRYCZNE .
Konstrukcja większości myszek oparta jest o kulkę wprawioną w ruch po przez przesunięcie myszki po stole. Do kulki przylegają dwa wałki odpowiedzialne za przenoszenie ruchu jej obrotu. Na wałkach tych umieszczone są specjalne tarcze posiadające na swym obwodzie otworki, zaś po bokach każdej tarczy znajdują się pary dioda świecąca -fotoelement. Kulka wprawiając w ruch wałki równocześnie wprawia w ruch tarczę z otworami, które teraz wraz z układami diod świecących i fotoelementów tworzą optomechaniczny przetwornik ruchu po stole na impulsy elektryczne. Każdy wałek z umieszczoną na nim tarczą odpowiada za jeden z kierunków : lewo-prawo i góra-dół. Tarcza ma szereg otworów na obwodzie, które podczas obrotu zasłaniają i odsłaniają światło z diody świecącej padające na fotoelement. Powoduje to generowanie ciągu impulsów elektrycznych o długości zależnej od przesunięcia myszki.
2.3. STEROWNIK MYSZKI (DRIVER) .
Za obsługę sygnałów przychodzących od myszki odpowiedzialny jest specjalny program obsługi zwany sterownikiem myszki.
Obsługa programowa myszek jest podobna. Możliwe jest wykorzystanie standardowego sterownika - programu obsługi myszki (ang. driver), dostarczonego razem z systemem operacyjnym DOS, o nazwie MOUSE.SYS, lub MOUSE.COM. Jednak zasadniczo różnią się dwa podstawowe standardy myszki : pierwszy nosi nazwę Mouse System Mouse (myszka trzyklawiszowa), zaś drugi Microsoft Mouse (myszka dwuklawiszowa). Istnieją jeszcze rozwiązania niezgodne z powyższymi standardami, ale są one coraz rzadziej stosowane.
Do obsługi myszki należy raczej stosować programy dostarczone razem z nią, ewentualnie z jej standardem. Niemniej jednak, niezależnie od samego sprzętu i sposobu porozumiewania się myszki z pracującym dla niej sterownikiem, sposób jej obsługi programowej jest identyczny (sterownik myszki pełni rolę taką jak BIOS, tzn. pośredniczy pomiędzy różnymi rozwiązaniami sprzętowymi, a programami). Ponieważ większość myszek komunikuje się ze sterownikiem w taki sam sposób, może być obsługiwana przez taki sam sterownik. Większość z nich może pracować w obu standardach.
2.4. KLAWIATURA MYSZKI .
Poza układem przeniesienia ruchu ręki myszka posiada jeszcze dwa lub trzy przyciski, którym przyporządkowana jest funkcja “klawiaturowa”. Lewy przycisk odpowiada najczęściej za klawiszowi ENTER, zaś prawy klawiszowi ESC.
Klawisze te wykonane są z elastycznego tworzywa, przez co możliwe jest ich dociskanie do znajdujących się pod nimi mikroprzełączników. Po wciśnięciu klawisza myszki (mikroprzełącznika) generowany jest niskonapięciowy sygnał, który przesyłany jest do mikrokontrolera.
2.5. INTERFEJS SZEREGOWY .
Przetworzone w mikrokontrolerze sygnały z przetwornika ruchu i układu klawiatury przesyłane są do komputera poprzez port szeregowy. W porcie tym wykorzystywana jest jedynie linia danych tego portu, a pozostałe połączenia służą jedynie do zasilania układów myszki.
DCD - sygnalizacja przesyłu danych
RXD - odbiór danych
TXD - transmisja danych
DTR - sygnał gotowości do nadawania
GND - masa
DSR - wstawienie sygnału gotowości do odbioru danych
RTS - żądanie transmisji
CTS - sygnał kasowania transmisji
RI - wskaźnik pierścieniowy
2.6. MIKROKONTROLER - DEKODER IMPULSÓW ELEKTRYCZNYCH.
Umieszczone na obwodzie każdej z tarcz otworki podczas obrotu tarczy zasłaniają i odsłaniają światło z diody padające na fotoelement. Powoduje to generowanie ciągu impulsów elektrycznych o długości zależnej od przesunięcia myszki. Za dekodowanie tych impulsów odpowiedzialny jest mikrokontroler, którym zwykle jest układ Intel 80C48. Przetwarza on uprzednio wzmocnione sygnały z fotoelementów na postać cyfrową, które następnie przesyłane są do komputera poprzez port szeregowy. Do mikrokontrolera dociera również niskonapięciowy sygnał generowany po wciśnięciu klawisza myszki.
2.7. OBSŁUGA MYSZKI.
Przerwanie 33h.
Programowa obsługa myszki odbywa się poprzez przerwanie 33h (Mouse Support). Warunkiem działania tego przerwania jest załadowanie sterownika myszki. Program sterujący dostarczony do myszy instaluje własną procedurę obsługi przerwania 33h procedura ta dostarcza programiście wszystkie usługi potrzebne do wykorzystania myszki zawarte w 30 funkcjach obejmujących wszystkie możliwe opcje obsługi tego urządzenia wskazującego.
Parametry tej procedury umieszcza się podobnie jak przy przerwaniach DOS i BIOS, w odpowiednich rejestrach. Następnie wykonuje się procedurę i w razie potrzeby odczytuje się zwracane wartości z poszczególnych rejestrów.
2.8. FUNKCJE PRZERWANIA 33h MYSZKI.
FUNKCJA |
OPIS |
00h |
Inicjalizacja myszki i sprawdzenie obecności jej sterowania |
01h |
Wyświetlanie kursora myszki |
02h |
Ukrycie kursora myszki |
03h |
Określenie pozycji i stanów przycisków myszki |
04h |
Określenie pozycji kursora |
05h |
Określenie liczby naciśnięć przycisków |
06h |
Określenie liczby zwolnień przycisków |
07h |
Ustawienie zasięgu poziomego |
08h |
Ustawienie zasięgu pionowego |
09h |
Zdefiniowanie kształtu kursora graficznego myszki |
0Ah |
Zdefiniowanie maski kursora tekstowego myszki |
0Bh |
Określenie odległości ostatniego przesunięcia |
0Ch |
Instalacja filtru zdarzeń generowanych przez myszkę |
0Dh |
Włączenie emulacji pióra świetlnego |
0Eh |
Wyłączenie emulacji pióra świetlnego |
0Fh |
Ustawienie prędkości ruchu kursora myszki |
10h |
Ustawienie granic obszaru ukrycia myszki |
13h |
Ustawienie maksymalnej prędkości |
14h |
Zmiana filtru zdarzeń |
15h |
Określenie rozmiaru bufora statusu myszki |
16h |
Zapamiętanie statusu myszki |
17h |
Odtworzenie statusu myszki |
18h |
Instalacja dodatkowego filtru zdarzeń |
19h |
Określenie adresu dodatkowego filtru zdarzeń |
1Ah |
Ustawienie czułości myszki |
1Bh |
Pobranie czułości myszki |
1Ch |
Ustawienie częstotliwości przerwań pochodzących od myszki |
1Dh |
Ustawienie wyświetlanej strony pamięci obrazu |
1Eh |
Pobranie numeru strony pamięci zawierającej kursor myszki |
24h |
Pobranie wersji, typu myszki i numeru przerwań (IRQ) |
2.9. OPIS WYBRANYCH FUNKCJI PRZERWANIA 33h .
Funkcja 00h - Inicjalizacja myszki i sprawdzenie obecności jej sterowania
Wejście: - AX = 0
Wyjście: - AX <> 0 - mysz zainstalowana
- AX = 0 - mysz nie zainstalowana
- BX - liczba przycisków
Funkcja 01h - wyświetlenie kursora myszki
Wejście: - AX = 1
Wyjście: - brak
Funkcja 02h - ukrycie kursora myszki
Wejście: - AX = 2
Wyjście: - brak
Funkcja 03h - określenie pozycji stanów przycisków myszki
Wejście: - AX = 3
Wyjście: - BX - stan przycisków
- CX - położenie poziome
- DX - położenie pionowe
W BX funkcja zwraca stan przycisków myszy. Informacje o stanie każdego z nich odczytać można testując poszczególne bity otrzymanej wartości:
bit 0 - gdy ustawiony, lewy przycisk wciśnięty,
bit 1 - przycisk prawy,
bit 2 - przycisk środkowy (w trybie PCMouse).
Funkcja 04h - określenie pozycji kursora
Wejście: - AX = 4
- CX = położenie poziome,
- DX = położenie pionowe,
Wyjście: - brak
Funkcja 05h - określenie liczby naciśnięć przycisków
Wejście: - AX = 5
- BX = numer badanego przycisku
(0-lewy, 1-prawy, 2-žrodkowy)
Wyjście: - AX - stan przycisków (jak w usłudze 3h),
- BX - liczba wciśnięć zadanego przycisku od czasu
ostatniego wywołania funkcji,
- CX - położenie poziome kursora podczas ostatniego
wciśnięcia,
-DX - położenie pionowe podczas ostatniego wciśnięcia.
Funkcja 06 - określenie liczby zwolnień przycisków
Wejście: - AX = 6
- BX = numer przycisku.
Wyjście: - AX - stan przycisków (jak w usłudze 3h),
- BX - liczba zwolnień zadanego przycisku od czasu
ostatniego wywołania funkcji,
- CX - położenie poziome kursora podczas ostatniego
zwolnienia,
- DX - położenie pionowe kursora podczas ostatniego
zwolnienia.
Funkcja 07h - ustawienie zasięgu poziomego
Wejście: - AX = 7
- CX = minimalne położenie poziome,
- DX = maksymalne położenie poziome,
Wyjście: - brak
W połączeniu z funkcją 8h pozwala na zdefiniowanie obszaru, w jakim może się poruszać kursor myszy.
Funkcja 08h - ustawienie zasięgu pionowego
Wejście: - AX = 8
- CX = minimalne położenie pionowe,
- DX = maksymalne położenie pionowe.
Wyjście: - brak
W połączeniu z funkcją 7h pozwala na zdefiniowanie obszaru, w jakim może się poruszać kursor myszy.
Funkcja 09h - zdefiniowanie kształtu kursora graficznego myszki
Wejście: - AX = 9
- BX = współrzędna pozioma punktu centralnego,
- CX = współrzędna pionowa punktu centralnego,
- ES:DX = adres obszaru definiującego.
Wyjście: - brak
Funkcja ta pozwala na zdefiniowanie dowolnego kształtu kursora graficznego. Kursor graficzny myszy można opisać dwoma tablicami o wymiarach 16*16 bitów.
Pierwsza tablica to tablica maski, druga to tablica wzorca. Tablica wzorca określa, który z 256 (16*16) punktów kursora ma być zapalony
a który zgaszony.
Funkcja 0Ah - zdefiniowanie maski kursora tekstowego myszki
Wejście: - AX = Ah
- BX = typ kursora
- CX = maska AND lub linia startowa
- DX = maska XOR lub linia końcowa
Wyjście: - brak
W BX umieszcza się wartość odpowiadającą typowi kursora (1 oznacza kursor sprzętowy, 0 oznacza kursor programowy). Dla kursora sprzętowego w parze rejestrów CX i DX umieszcza się odpowiednio początkową i końcową linię kursora (analogicznie jak przy ustawianiu kursora CRT za pomocą usługi BIOS). Inaczej ma się sprawa dla kursora programowego. Wtedy do rejestrów CX i DX wprowadza się maski obrazu i kursora. Znaczenie poszczególnych bitów obu masek przedstawia się następująco:
bit 15 - miganie (1-włączone)
bity 14-12 - kolor tła
bit 11 - rozjaśnienie (1-wąłączone)
bity 10-8 - kolor znaku
bity 7-0 - kod znaku
Przy wyświetlaniu kursora programowego obie maski stanowią o atrybutach znaku znajdującego się pod kursorem. Maska obrazu wyznacza atrybuty nie zmienione, maska kursora - atrybuty do zmiany i sposób ich modyfikacji.
Funkcja0Bh - określenie odległości ostatniego przesunięcia
Wejście: - AX = Bh
Wyjście: - CX - przemieszczenie poziome
- DX - przemieszczenie pionowe
Wartości zwracane w CX i DX są typu Integer. Określają, o ile przemieścił się kursor myszki od ostatniego wywołania tej funkcji.
Funkcja 0Ch - instalacja filtru zdarzeń generowanych przez myszkę
Wejście: - AX = Ch
- CX = maska zdarzeń
- ES:DX = adres procedury obsługi
Wyjście: - brak
Handler myszy udostępnia możliwość programowania asynchronicznej obsługi związanych z nią zdarzeń. Zdarzenia te wywołują przerwanie - program jego obsługi może wykonać skok do zdefiniowanej procedury. Maska (CX) określa, w wyniku jakich zdarzeń procedura ma być wykonywana. Każdy bit jest związany z jednym z nich. Bity odpowiadające interesującym nas zdarzeniom ustawiamy. A oto znaczenie każdego z nich:
bit 0 - zmiana położenia kursora
bit 1 - wciśnięcie lewego przycisku
bit 2 - zwolnienie lewego przycisku
bit 3 - wciśnięcie prawego przycisku
bit 4 - zwolnienie prawego przycisku
bit 5 - wciśnięcie środkowego przycisku
bit 6 - zwolnienie środkowego przycisku
bity 7-15 - nie używane
Funkcja 0Dh - włączenie emulacji pióra świetlnego
Wejście: - AX = Dh
Wyjście: - brak
Funkcja ta nie jest raczej używana, ponieważ niemal wszystkie programy mogące korzystać z pióra świetlnego mogą także obsługiwać mysz.
Funkcja0Eh - wyłączenie emulacji pióra świetlnego
Wejście: - AX = Eh
Wyjście: - brak
Funkcja 0Fh - ustawienie prędkości ruchu kursora myszki
Wejście: - AX = Fh
- CX = współczynnik dla ruchu poziomego
- DX = współczynnik dla ruchu pionowego
Wyjście: - brak
Wielkość współczynników określa stosunek odległości przebytej przez mysz do drogi kursora na ekranie. Im ich wartość jest niższa, tym szybciej porusza się kursor.
Funkcja 10h - ustawienie granic obszaru ukrycia myszki
Wejście: - AX = 10h
- CX = pozioma współrzędna lewego górnego rogu
- DX = pionowa współrzędna lewego górnego rogu
- SI = pozioma współrzędna prawego dolnego rogu
- DI = pionowa współrzędna prawego dolnego rogu
Wyjście: - brak
Funkcja ta pozwala użytkownikowi na zdefiniowanie fragmentu ekranu, wewnątrz którego kursor myszy będzie niewidoczny. W odpowiednich rejestrach podaje się współrzędne dwóch naprzeciwległych rogów tego obszaru.
Funkcja 13h - ustawienie maksymalnej prędkości
Wejście: - AX = 13h
- DX = szybkość przesuwu wyrażona w wielokrotnościach
1/200 cala na sekund
Wyjście: - brak
Funkcja14h - zmiana filtru zdarzeń
Wejście: - AX = 14h
- CX = nowa maska zdarzeń
- ES:DX = adres nowej procedury
Wyjście: - CX - poprzednia wartość maski
- ES:DX - adres poprzedniej procedury asynchronicznej
obsługi zdarzeń
Funkcja 15h - określenie rozmiaru bufora statusu myszki
Wejście: - AX = 15h
Wyjście: - BX - rozmiar pamięci wyrażony w bajtach potrzebny
do zapamiętania aktualnej konfiguracji myszy
Funkcja 16h - zapamiętanie statusu myszki
Wejście: - AX = 16h
- ES:DX = adres bufora, w którym zapamiętana zostanie
aktualna konfiguracja myszy (jego niezbędny
rozmiar można odczytać używając funkcji 15h)
Wyjście: - brak
Funkcja 17h - odtworzenie statusu myszki
Wejście: - AX = 17h
- ES:DX = adres bufora
Wyjście: - brak
Funkcja przywraca ustawienia myszy zapamiętane z pomocą funkcji 16h
Funkcja 18h - instalacja dodatkowego filtru zdarzeń
Wejście: - AX = 18h
- CX = maska zdarzeń dla dodatkowej procedury
- ES:DX = adres dodatkowej procedury
Wyjście: - AX = 0FFFFh oznacza wystąpienie błędu przy instalacji,
nie zmieniona wartość AX sygnalizuje poprawne wykonanie funkcji
Funkcja umożliwia instalację procedur obsługi różnych zdarzeń. W procedurach deklarowanych z pomocą tej funkcji można wykorzystywać przerwania systemowe.
Funkcja 19h - określenie adresu dodatkowego filtru zdarzeń
Wejście: - AX = 19h
- CX = maska identyfikująca dodatkową procedurę
Wyjście: - CX - maska, wartość 0 oznacza, że nie znaleziono
żadnej procedury
- ES:DX - adres znalezionej procedury
Funkcja 1Ah - ustawienie czułości myszki
Wejście: - AX = 1Ah
- BX = pionowa czułość
- CX = pozioma czułość
- DX = szybkość myszy
Wyjście: - brak
Funkcja realizuje "w jednym ruchu" funkcje 0Fh i 13h.
.
Funkcja 1Bh - pobranie czułości myszki
Wejście: - AX = 1Bh
Wyjście: - BX - czułość pozioma
- CX - czułość pionowa
- DX - szybkość przesuwu
Funkcja 1Ch - ustawienie częstotliwości przerwań pochodzących od myszki
Wejście: - AX = 1Ch
- BX = częstość (w przerwaniach na sekund`):
0 - przerwanie myszy nie jest wywoływane
1 - 30 przerwań w ciągu sekundy
2 - 50
3 - 100
4 - 200
Wyjście: - brak
Funkcja 1Dh - ustawienie wyświetlanej strony pamięci obrazu
Wejście: - AX = 1Dh
- BX = numer strony
Wyjście: - brak
Funkcja 1Eh - pobranie numeru strony pamięci zawierającej kursor myszki
Wejście: - AX = 1Eh
Wyjście: - BX - numer strony
Funkcja 24h - pobranie wersji, typu myszki i numeru przerwań (IRQ)
Wejście: - AX = 24h
Wyjście: - BX - numer wersji sterownika
(BH zawiera numer główny, BL - numer dodatkowy)
- CH - typ myszy
- CL - poziom przerwania sprzętowego myszy (0 dla PS/2)
3. PRZEBIEG ĆWICZENIA .
Przykładowe programy wykorzystujące przerwanie 33h.
3.1. Program sprawdzający zainstalowanie sterownika myszki.
procedure inicjacja;
var r:register;
begin
clrscr;
r.ax:=0;
intr($33,r);
if r,ax<>then
writeln('Mysz zainstalowana');
else
write('Mysz nie została zainstalowana');
readkey;
end;
3.2. Program wyświetlający kursor myszy w dowolnej pozycji ekranu.
procedure inicjacja;
var r:register;
a,b:integer;
begin
repeat
begin
readln(a);
readln(b);
clrscr;
r.ah:=$01;
r.ax:=1;
intr($33,r);
r.ah:=$04;
r.ax:=4;
r.cx:=a;
r.dx:=b;
writeln(r.cx);
writeln(r.dx);
delay(100);
end;
until keypressed;
end;
3.3. Ustalenie szybkości przesuwania myszki
procedure MouseSpeed (x : integer);
var
regs:registers;
begin
regs.ax:=$13;
regs.dx:=x;
intr($33,regs);
end;
MINIKONTROLER /
DEKODER IMPULSÓW LELKTRYCZNYCH
KLAWIATURA
MYSZKI
UKŁAD
WZM.
OPTOMECHANICZNY PRZETWORNIK RUCHU NA IMPULSY ELEKTRYCZNE
INTERFEJS SZEREGOWY
STEROWNIK MYSZKI
/DRIVER/