Você está na página 1de 11

INT 33H

Esta es una interrupcin de DOS y ayuda a controlar el uso del mouse.


Se puede establecer el uso del ratn en modo texto y en modo grfico.
Para hacer uso del mouse se debe establecer el modo de video, inicializar mouse,
mostrar el puntero, realizar acciones de desplazamiento, seleccin, etc., y al final ocultar
el puntero.
Iniciacin del mouse
El servicio utilizado es el 00, este servicio inicializa el controlador del mouse como
sigue:

Establece el puntero en el centro de la pantalla


Si esta visible el apuntador lo oculta
Fija la pagina de despliegue del apuntador del ratn en cero
Establece el puntero de acuerdo al modo de video
Modo texto: rectngulo, color inverso
Modo grafico: forma de flecha
Establece la razn mickey a pxel
Razn hor: 8 a 8
Razn Vert: 16 a 8
Establece los limites horizontal y vertical para el puntero mximo y mnimo
Establece el umbral de velocidad doble a 64 mickey por segundo

Descripcin del servicio:


Registro
Valor
Servicio:00
AX

Retorna
Registro Valor
0000h, si no est disponible
AX
controlador
FFFFFh, si esta disponible
Nmero de botones del ratn
BX

Despliegue del puntero del mouse


Servicio utilizado 01,para mostrar el puntero del mouse
Descripcin del servicio:
Registro
Servicio:01
AX

Valor

Oculta el puntero del mouse


Servicio utilizado 02, se utiliza al final de la ejecucin del programa.
Descripcin del servicio:

Registro
Servicio:02
AX

Valor

Obtiene el estado del botn y la posicin del puntero del mouse


Servicio utilizado 03, retorna informacin til para el manejo del mouse.
Descripcin del servicio:
Registro
Valor
Servicio:03
AX

Retorna
Registro Valor
Estado de los botones de acuerdo a
BX
la posicin del bit, como sigue:
Bit 0: botn izquierdo, donde 0=
arriba, 1= abajo
Bit 1: botn derecho, donde 0=
arriba, 1= abajo
Bit 2: botn central, donde 0=
arriba, 1= abajo
Bits 3-15: reservados
Coordenada horizontal: x
CX
Coordenada vertical: y
DX

Nota: Las coordenadas son expresadas en trminos de pxeles, aun en modo texto (8
x byte para modo video 03)

Establece la posicin del puntero del mouse


Servicio utilizado 04, coloca el puntero en la nueva posicin, ajustando como sea
necesario si est fuera de los lmites mnimo y mximo.
Descripcin del servicio:
Registro
Valor
Servicio:04
AX
Posicin horizontal
CX
Posicin vertical
DX

Obtiene informacin de la pulsacin de los botones del mouse


Servicio utilizado 05, retorna el estado arriba-debajo de todos los botones, el conteo de
las presiones y posicin del botn requerido.
Descripcin del servicio:

Registro
Valor
Servicio:05
AX
Nmero del
BX
botn:
0 = izquierdo
1 = derecho
2 = central

Retorna
Registro Valor
Estado de los botones de a
AX
cuerdo a la posicin del bit
como sigue:
Bit 0: botn izquierdo, donde
0= arriba, 1= abajo
Bit 1: botn derecho, donde
0= arriba, 1= abajo
Bit 2: botn central, donde
0= arriba, 1= abajo
Bits 3-15: reservados
Contador de presiones del
BX
botn
Coordenada horizontal de la
CX
ltima presin del botn
Coordenada vertical de la
DX
ltima presin del botn

Nota: La operacin restablece el contador de presiones del botn en cero.

Fija los limites horizontales para el puntero del mouse


Servicio utilizado 07, fija los lmites horizontales mnimo y mximo para el puntero.
Descripcin del servicio:
Registro
AX
CX
DX

Valor
Servicio:07
Lmite inferior
Lmite superior

Nota: Si el nmero mnimo es mayor que el mximo, la operacin intercambia los


nmeros, tambin la operacin mueve al puntero al rea nueva.

Fija los limites verticales para el puntero del mouse


Servicio utilizado 08, fija los lmites verticales mnimo y mximo para el puntero.
Descripcin del servicio:
Registro
AX
CX
DX

Valor
Servicio:08
Lmite inferior
Lmite superior

Nota: Si el nmero mnimo es mayor que el mximo, la operacin intercambia los


nmeros, tambin la operacin mueve al puntero al rea nueva.

;-----------------------------------------------MANEJO DEL MOUSE EN MODO TEXTO


;-----------------------------------------------.MODEL SMALL
.STACK 100H
.DATA
MEN1 DB ' MOUSE NO DETECTADO$'
.CODE
MAIN PROC FAR
; Protocolo
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, @DATA
MOV DS, AX
; Protocolo (End)

; Inicializacion del mouse (begin)


CALL INIT_MOUSE
CMP AX,00
JE ERROR
CALL SHOW_CURSOR
MOV CX, 320
MOV DX, 240
CALL PUT_CURSOR
JMP EXIT
; Inicializacion del mouse (end)
ERROR: LEA DX,MEN1
CALL MENSAJE
CALL LEE
JMP SALTE
EXIT:

CALL
CALL
CALL
SALTE: CALL
RET
MAIN ENDP

LEE
OCULTA_MOUSE
RESTAURA
SAL_DOS

RESTAURA PROC
MOV AH, 00H
MOV AL, 03H
INT 10H
RET
RESTAURA ENDP
SAL_DOS PROC
MOV AH,4CH
INT 21H
RET
SAL_DOS ENDP
INIT_MOUSE PROC NEAR
MOV AX, 00H
INT 33H
RET
INIT_MOUSE ENDP

OCULTA_MOUSE PROC NEAR


MOV AX, 02H
INT 33H
RET
OCULTA_MOUSE ENDP

SHOW_CURSOR PROC NEAR


PUSH AX
MOV AX, 01H
INT 33H
POP AX
RET
SHOW_CURSOR ENDP
PUT_CURSOR PROC NEAR
PUSH AX
MOV AX, 04H
INT 33H
POP AX
RET
PUT_CURSOR ENDP

LEE PROC
PUSH AX
MOV AH,01
INT 21H
POP AX
RET
LEE ENDP
MENSAJE PROC
PUSH AX
MOV AH,09H
INT 21H
POP AX
RET
MENSAJE ENDP
END MAIN

;-----------------------------------------------MANEJO DEL MOUSE EN MODO GRAFICO


;-----------------------------------------------.MODEL SMALL
.STACK 100H
.DATA
MEN1 DB 'NO MOUSE DETECTADO$'
.CODE
MAIN PROC FAR
; Protocolo
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, @DATA
MOV DS, AX
; Protocolo (End)
CALL GRAFICO
; Inicializacion del mouse
CALL INIT_MOUSE
CMP AX,0000
JE ERROR
CALL SHOW_CURSOR
MOV CX, 620
MOV DX, 410
CALL PUT_CURSOR
JMP EXIT
ERROR: LEA DX,MEN1
CALL MENSAJE
CALL LEE
JMP SALTE
EXIT:

CALL LEE
CALL OCULTA_MOUSE
SALTE: CALL RESTAURA
CALL SAL_DOS
RET
MAIN ENDP
RESTAURA PROC
MOV AH, 00H
MOV AL, 03H
INT 10H
RET
RESTAURA ENDP
SAL_DOS PROC
MOV AH,4CH
INT 21H
RET
SAL_DOS ENDP

GRAFICO PROC NEAR


; Inicializa modo grafico 640x480x16 (Begin)
MOV AH, 00H
MOV AL, 12H

INT 10H
; Inicializa modo grafico 640x480x16 (End)
RET
GRAFICO ENDP
INIT_MOUSE PROC NEAR
MOV AX, 00H
INT 33H
RET
INIT_MOUSE ENDP
OCULTA_MOUSE PROC NEAR
MOV AX, 02H
INT 33H
RET
OCULTA_MOUSE ENDP

SHOW_CURSOR PROC NEAR


PUSH AX
MOV AX, 01H
INT 33H
POP AX
RET
SHOW_CURSOR ENDP
PUT_CURSOR PROC NEAR
PUSH AX
MOV AX, 04H
INT 33H
POP AX
RET
PUT_CURSOR ENDP

LEE PROC
PUSH AX
MOV AH,01
INT 21H
POP AX
RET
LEE ENDP
MENSAJE PROC
PUSH AX
MOV AH,09H
INT 21H
POP AX
RET
MENSAJE ENDP
END MAIN

;-----------------------------------------------MUESTRA LAS COORDENADAS DE LA POSICIN ACTUAL DEL PUNTERO DEL MOUSE


USO DE INT 21, SERVICIO 40
;-----------------------------------------------.MODEL SMALL
.STACK 100H
.DATA
XB
DW 00
YB
DW 00
VALASC DW 00
MEN1
DB 'Mouse no disponible...$'
DESPDATO LABEL BYTE
XMEN
DB 'x= '
XASCII DW ?
YMEN
DB ' y= '
YASCII DW ?
YXI DW 00
YXF DW 00
FPP DB 00
.CODE
MAIN
PROC FAR
;PROTOCOLO
PUSH DS
SUB
AX,AX
PUSH AX
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
;FIN PROTOCOLO

OTRO:

ERROR:
EXIT:

CALL
MOV
MOV
MOV
CALL
CALL
CMP
JE
CALL
MOV
CALL
CMP
JE
CALL
MOV
CALL
MOV
MOV
MOV
CALL
MOV
MOV
CALL
JMP
LEA
CALL
CALL
MOV
MOV
MOV

INITTEXT
FPP,3EH
YXI,00H
YXF,184FH
TEXTBACKGROUND
I_MOUSE
AX,00
ERROR
M_MOUSE
YXI,1843H
P_MOUSE ; SERVICIO 03
BX,01
EXIT
GOTOXY
AX,XB
CONV
AX,VALASC
XASCII,AX
AX,YB
CONV
AX,VALASC
YASCII,AX
DESPLIEGA ;SERVICIO 40 DE LA INT 21
OTRO
DX,MEN1
PRINTF
F_MOUSE
FPP,07H
YXI,00H
YXF,184FH

MAIN

I_MOUSE

I_MOUSE
M_MOUSE

M_MOUSE
C_MOUSE

C_MOUSE
F_MOUSE

F_MOUSE
C_CURSOR

C_CURSOR

CALL
MOV
INT
RET
ENDP

TEXTBACKGROUND
AX,4C00H
21H

PROC
MOV
INT
RET
ENDP

NEAR
AX,00
33H

PROC
PUSH
MOV
INT
POP
RET
ENDP

NEAR
AX
AX,01H
33H
AX

PROC
PUSH
MOV
INT
POP
RET
ENDP

NEAR
AX
AX,04H
33H
AX

PROC
PUSH
MOV
INT

NEAR
AX
AX,02H
33H

POP
RET
ENDP

AX

PROC
MOV
MOV
MOV
MOV
INT
RET
ENDP

NEAR
AH,02
BH,00
DH,00
DL,25
10H

P_MOUSE

PROC NEAR
;La subrutina devuelve XB,YB

SAL3:

MOV
AX,03 ;RETORNA BX = Edo DE LOS BOTONES Y
INT
33H
;RETORNA CX= COORD X, DX= COORD Y
CMP
BX,01 ; SI SE PULSO BOTON IZQ.
JE
SAL1
MOV AX,CX
; AUXILIAR DE LA COORDENADA HOR
MOV CL,3
SHR
AX,CL
;DIVIDE COORDENDA X / 8
SHR
DX,CL
;DIVIDE COORDENDA Y / 8
MOV CX,AX
;RECUPERANDO LA COORDENADA PARA MODO

TEXTO
CMP

CX,XB

; sI EXISTE MOVIMIEMTO ?

JNE
CMP
JE
MOV
MOV
RET
ENDP

SAL2:
SAL1:
P_MOUSE
CONV

C1:

CONV

PROC
MOV
MOV
LEA
CMP
JB
DIV
OR
MOV
DEC
OR
MOV
RET
ENDP

SAL2
DX,YB
SAL3
XB,CX
YB,DX

; SI
;NO
;REFRESCO DE COORDENADAS

NEAR
VALASC,2020H
CX,10
SI,VALASC+1
AX,CX
C1
CL
AH,30H
[SI],AH
SI
AL,30H
[SI],AL

;LIMPIANDO VALASC
; FACTOR DE DIVISIN
;AX CONTIENE LA COORDENADA
; SI ES MENOR
; SI MAYOR DIVIDE
;RESIDUO

;COCIIENTE

DESPLIEGA
PROC NEAR
; Servicio 40h :manejador de archivo para despliegue en pantalla
MOV
MOV
MOV
LEA
INT
RET
ENDP

DESPLIEGA
INITTEXT

INITTEXT
PRINTF

PRINTF

PROC
PUSH
MOV
MOV
INT
POP
RET
ENDP
PROC
PUSH
MOV
INT
POP
RET
ENDP

TEXTBACKGROUND

AH,40H
BX,01
;Nmero de dispositivo: 1 = pantalla
CX,11
;Total de caracteres a desplegar
DX,DESPDATO
; Area a desplegar
21H

NEAR
AX
AH,00H
AL,03H
10H
AX

NEAR
AX
AH,09H
21H
AX

PROC
PUSH
PUSH
PUSH
PUSH
MOV
MOV
MOV
MOV

NEAR
AX
BX
CX
DX
AX,0600H
BH,FPP
CX,YXI
DX,YXF

TEXTBACKGROUND
GOTOXY

GOTOXY
END

PROC
PUSH
PUSH
PUSH
MOV
MOV
MOV
INT
POP
POP
POP
RET
ENDP
MAIN

INT
POP
POP
POP
POP
RET
ENDP

NEAR
AX
BX
DX
AH,02H
BH,00H
DX,YXI
10H
DX
BX
AX

10H
DX
CX
BX
AX

Você também pode gostar