O to instrukcja.
Ciekawi mnie to czy 33h to 0x33 czy 33x000
Niewiem takich podstaw. ;/
Kod: Zaznacz cały
Programowa obsługa myszki odbywa się poprzez przerwanie BIOS-a o numerze 33h.
Warunkiem działania tego przerwania jest załadowanie sterownika myszki.
Do wywołania przerwań BIOS-a używa się specjalnej instrukcji.
Intr(nr, rejestry) {unit DOS}
gdzie: nr jest numerem wywoływanego przerwania, zaś zmienna rejestry służy do
przekazywania parametrów między wywoływaną procedurą a programem użytkownika
Zmienna rejestry jest typu registers będącego standardowym typem jednostki
bibliotecznej DOS.
Poniżej zostaną przedstawione ważniejsze funkcje przerwania 33h, umożliwiające
realizację elementarnej obsługi myszki.
Funkcja 00h
Działanie: Funkcja zwraca informację o zainstalowaniu sterownika myszki i jej typie.
Parametry wejściowe:
AX 0x000
Wartości zwracane:
AX = 0x000 - sterownik nie zainstalowany
= 0xFFFF - sterownik zainstalowany,
BX = 0x0002 - mysz dwu przyciskowa
= 0x0003 - mysz trzy przyciskowa
= 0x0000 - inna.
Funkcja 01h
Działanie: Funkcja wyświetla kursor myszki.
Parametry wejściowe:
AX 0x001
Wartości zwracane: brak
Funkcja 02h
Działanie: Funkcja ukrywa kursor myszki.
Parametry wejściowe:
AX 0x002
Wartości zwracane: brak
Funkcja 03h
Działanie: Funkcja ta zwraca informację o współrzędnych kursora myszki i stanie jej
przycisków.
Parametry wejściowe:
AX 0x003
Wartości zwracane: BL stan przycisków myszki:
bity 7-3 niewykorzystane,
bit 2 1= naciśnięty środkowy przycisk,
bit 1 1= naciśnięty prawy przycisk,
bit 0 1= naciśnięty lewy przycisk
CX współrzędna X kursora myszki (0..639)
DX współrzędna Y kursora myszki (0:.199)
Funkcja 04h
Działanie: Funkcja ustala położenie kursora myszki.
Parametry wejściowe:
AX 0x004
CX współrzędna X kursora myszki (0..639)
DX współrzędna Y kursora myszki (0..199)
Wartości zwracane: brak
Uwaga: wartości współrzędnych zaokrąglane są do. rozdzielczości znakowej.
Funkcja 05h
Działanie: Funkcja ta zwraca informację o naciśnięciu przycisków myszki.
Parametry wejściowe:
AX 0x005
BX kod przycisku:
0x000 lewy, 0x001 prawy, 0x002 środkowy
Wartości zwracane: AL bieżący stan przycisków:
bity 7-3 niewykorzystane,
bit 2 1= naciśnięty środkowy przycisk,
bit 1 1= naciśnięty prawy przycisk,
bit 0 1= naciśnięty lewy przycisk
BX liczba naciśnięć danego przycisku od ostatniego wywołania funkcji 05h
CX współrzędna X kursora myszki w chwili naciśnięcia danego przycisku
DX współrzędna Y kursora myszki w chwili naciśnięcia danego przycisku
Funkcja 06h
Działanie: Funkcja ta zwraca informację o zwolnieniu przycisków myszki.
Parametry wejściowe:
AX 0x006 ;
BX kod przycisku:
0x000 lewy, 0x001 prawy, 0x002 środkowy
wartości zwracane: bieżący stan przycisków:
bity 7-3 niewykorzystane,
bit 2 1 = naciśnięty środkowy przycisk,
bit 1 1 = naciśnięty prawy przycisk,
bit 0 1 = naciśnięty lewy przycisk
BX liczba zwolnień danego przycisku od ostatniego wywołania funkcji 06h
CX współrzędna X kursora myszki w chwili zwolnienia danego przycisku
DX współrzędna Y kursora myszki w chwili zwolnienia danego przycisku
Funkcja 0B h
Działanie: Funkcja ta zwraca stan liczników położenia myszki.
Parametry wejściowe:
AX 0x00B
Wartości zwracane:
CX liczba jednostek, o które przesunięto myszkę w poziomie od ostatniego wywołania
funkcji 0x0B
DX liczba jednostek, o które przesunięto myszkę w pionie od ostatniego wywołania
funkcji 0x0B
Uwaga: jednostką (ang. mickey) jest najmniejsza odległość, na określenie której
pozwala czułość myszki (zwykle 1/200 do 1/400 cala). Wartości zwracane w rejestrach CX i
DX należy traktować jako liczby całkowite ze znakiem. Wartości dodatnie odpowiadają.
przesunięciu myszki w dół i w prawoKod: Zaznacz cały
#include<stdio.h>
#include<conio.h>
#include<dos.h>
struct REGPACK reg;
void main ()
{
clrscr ();
reg.r_ax=0x000;
intr(0x33, ®);
//sterownik
if (reg.r_ax==0x000) printf("Sterownik nie zainstalowany\n\n");
else printf("Sterownik zainstalowany \n\n");
//przyciski
if (reg.r_bx==0x002) printf("Mysz 2 przyciskowa\n\n");
else if (reg.r_bx==0x003) printf("Mysz 3 przciskowa\n\n");
else if (reg.r_bx==0x000) printf("Mysz inno przyciskowa\n\n");
//funkcje wysw. kursora myszki
//wyswietl kursor
printf("Wyswietl kusor myszki\n");
getch();
reg.r_ax=0x001;
intr(0x33, ®);
//ukryj kursor
printf("Ukryj kusor myszki\n");
getch();
reg.r_ax=0x002;
intr(0x33, ®);
//wyswietl kursor
printf("Wyswietl kusor myszki\n\n");
getch();
reg.r_ax=0x001;
intr(0x33, ®);
//polozenie kursora myszki
reg.r_ax=0x003;
intr(0x33, ®);
if (reg.r_bx==0x000)printf("Nie nacisnieto przycisku\n\n");
if (reg.r_bx==0x001)printf("Nacisniety lewy przycisk\n\n");
if (reg.r_bx==0x002)printf("Nacisniety prawy przycisk\n\n");
printf("Polozenie kursora oX = %d\n",reg.r_cx );
printf("Polozenie kursora oY = %d\n",reg.r_dx );
//ustalenie polozenia kursora myszki
reg.r_ax=0x004;
printf("\n\nUstal polozenie kursora oX (0-639): ");
scanf("%d", ®.r_cx);
printf("\nUstal polozenie kursora oY (0-199): ");
scanf("%d", ®.r_dx);
intr(0x33, ®);
//polozenie kursora myszki
reg.r_ax=0x003;
intr(0x33, ®);
printf("\n\nPolozenie kursora oX = %d\n",reg.r_cx );
printf("Polozenie kursora oY = %d\n",reg.r_dx );
//info o naciskaniu przyciskow
reg.r_ax=0x005;
reg.r_bx=0x000;
intr (0x33,®);
printf ("Nacisnij przyciski kilka razy...\n");
delay (2000);
// if (reg.r_bx==0x000)
// printf ("Przycisnieto lewy przycisk %d ",reg.r_bx);
// if (reg.r_bx==0x001)
// printf ("Przycisnieto prawy przycisk %d ",reg.r_bx);
reg.r_ax=0x005;
reg.r_bx=0x000;
intr (0x33,®);
printf ("Przycisnoles %d x ",reg.r_bx);
printf ("\nGdy nacisnieto, kursor byl w oX: %d , oY %d",reg.r_cx,reg.r_dx);
//zwolnienie przyciskow
reg.r_ax=0x006;
reg.r_bx=0x000;
intr (0x33,®);
printf ("Nacisnij przyciski kilka razy...\n");
delay (2000);
reg.r_ax=0x006;
reg.r_bx=0x000;
intr (0x33,®);
printf ("Zwolniles %d x ",reg.r_bx);
printf ("\nGdy zwalniano, kursor byl w oX: %d , oY %d",reg.r_cx,reg.r_dx);
getch();
}