|
|
|
Ahora veremos la
forma de programar este periférico tan usado hoy en
día, y que soporta todo tipo de aplicaciones, empezando por
sistemas operativos con entornos gráficos (como el Windows)
y acabando por videojuegos, y esto no es extraño, ya que la comodidad
que ofrece es muy alta, y es por eso que vamos a explicar como programarlo,
y después podremos aplicarlo a cualquier campo, ya que un
programa que tiene opción de utilizar el mouse es mucho más
fácil de usar y atractivo que otro que no disponga de este.
Al igual que con otros periféricos, hay en la BIOS una interrupción que se encarga de manejar este dispositivo. Son una serie de funciones que normalmente acompaña en un disco al ratón, y que lo cargamos mediante un archivo que queda residente en memoria (mouse.com, mouse.sys, etc.). Está interrupción es la 33h, la cual nos ofrece todo un surtido de funciones para que podamos manejar el mouse, desde comprobar tipo de mouse, botones, hasta poder cambiar la velocidad a la cual queremos que vaya el mouse (sensibilidad) y limitar las coordenadas por donde queremos que se mueva en pantalla. Para manejar el mouse tenemos dos posibilidades, y como casi siempre, la más eficaz es la más difícil. Estos son el control del ratón mediante el método polling y el control mediante interrupción. Mediante polling significa que cada vez que queramos saber las coordenadas del ratón o que botones hay pulsados tendremos que llamar a las funciones de la interrupción 33h para que se encarguen de ese trabajo, pero es muy lento, ya que se pierde mucho tiempo, pues tenemos que estar “preguntando” todo el rato en que posición tenemos el ratón y si se ha pulsado alguna tecla. Mediante el segundo método esto cambia, ya que un controlador que instalaremos se encargará de ir actualizando unas variables que indicarán en cada momento la posición del ratón y si hay algún botón pulsado, y la gracia está en que sólo las actualizará cuando detecte algún movimiento del ratón, de manera que el ahorro de recursos del sistema con respecto al método polling (en la que estamos preguntando todo el rato) es considerable. Ahora vamos a ver algunos de los servicios de la interrupción 33h y que son los más utilizados a la hora de programar el mouse.
Ahora veremos como funciona cada
función una por una.
Entrada: AX =
0000h Reseteo del driver del ratón
Función 01h Entrada: AX = 0001h Muestra el cursor del ratón Salida:
No devuelve nada
Función 02h Entrada: AX = 0002h Oculta el cursor del ratón Salida:
No devuelve nada
Función 03h Entrada: AX = 0003h
Leer posición (x, y) y estado de los botones
Cuando estamos en el modo gráfico 13h (320x200) las coordenadas no corresponden con las que nos devuelve la función y tendremos que dividir entre dos el eje horizontal (x). Eje
X: de 0 a 639 (dividimos entre 2)
En modo texto tendremos que multiplicar
las coordenadas por ocho, tanto en eje horizontal (x) como en vertical
(y). La función siguiente solos nos sirve en modo 13h.
Función 04h Entrada: AX = 0004h
Posiciona el cursor del ratón
Salida: No devuelve nada Debemos tener en cuenta lo dicho
anteriormente, y transformar las coordenadas para el modo en el que estemos
trabajando.
Funciones 07h y 08h Entrada:
AX = 0007h Limita movimiento horizontal del ratón.
Salida:
No devuelve nada
Entrada: AX =
0008h Limita movimiento vertical del ratón
Estas funciones hacen que se limite el
ratón a un área. Esto nos puede servir por ejemplo, para
cuando sale un mensaje en nuestro programa, el usuario centre la atención
en esa zona restringiendo las coordenadas a las de donde está el
mensaje. Acuérdense de que también debemos convertir las
coordenadas a las del modo que estemos usando.
Función 09h Entrada: AX = 0009h
Cambia apariencia del cursor.
Salida:
No devuelve nada
Esta funcion cambia la apariencia del cursor
de nuestro mouse. En la librería mouse.h podrás encontrar
varios cursores. La función que se encarga de esto es la siguiente:
Función 0Ch Entrada: AX = 000Ch
Instalar el controlador de eventos
ES:DX = Dirección del controlador que queremos instalar Salida: No devuelve nada Esta función es la que hace
que un controlador nos vaya actualizando una serie de variables que
cada una nos indicará una cosa. Aquí por controlador entendemos
una función que vaya pasando los valores de CX, DX, etc. que serán
los que actualizará el driver a nuestras variables para que
después nosotros podamos leer, un ejemplo de un controlador podría
ser el siguiente:
No hace falta decir que las variables tiene que ser de tipo global. La información que el driver del ratón pasa a nuestro controlador de eventos es la siguiente: BX = Estado actual de los botones
En fin, esto es todo lo que hay que saber para poder programar mínimamente bien el mouse.
Ejemplo Librería gráfica: vgalib.h
|