Myszka

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
pasta20
-
Posty: 30
Rejestracja: 06 wrz 2005, 0:49
Kontakt:

Myszka

Post autor: pasta20 » 17 mar 2008, 17:12

Mam do napisania program pod dosa w borlandzie 3.11 w C
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 prawo
A to jest część kodu:

Kod: Zaznacz cały

#include<stdio.h>
#include<conio.h>

#include<dos.h>


struct REGPACK reg;

void main ()
{
clrscr ();

reg.r_ax=0x000;
intr(0x33, &reg);

//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, &reg);


//ukryj kursor
printf("Ukryj kusor myszki\n");
getch();
reg.r_ax=0x002;
intr(0x33, &reg);

//wyswietl kursor
printf("Wyswietl kusor myszki\n\n");
getch();
reg.r_ax=0x001;
intr(0x33, &reg);



//polozenie kursora myszki
reg.r_ax=0x003;
intr(0x33, &reg);
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", &reg.r_cx);

printf("\nUstal polozenie kursora oY (0-199): ");
scanf("%d", &reg.r_dx);
intr(0x33, &reg);

//polozenie kursora myszki
reg.r_ax=0x003;
intr(0x33, &reg);

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,&reg);

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,&reg);
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,&reg);

printf ("Nacisnij przyciski kilka razy...\n");
delay (2000);

reg.r_ax=0x006;
reg.r_bx=0x000;
intr (0x33,&reg);
printf ("Zwolniles %d x ",reg.r_bx);
printf ("\nGdy zwalniano, kursor byl w oX: %d , oY %d",reg.r_cx,reg.r_dx);

getch();
}
Czy o to chodzi, kurcze dopiero zaczynam i niemam pojęcia jak to jest adresowane, szukam jakiegoś kursu c do programowania urządzeń w c.
Ostatnio zmieniony 17 mar 2008, 19:39 przez pasta20, łącznie zmieniany 1 raz.

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 05 kwie 2008, 21:16


ODPOWIEDZ