INT_33H
Short Description
Download INT_33H...
Description
INT 33H Esta es una interrupción de DOS y ayuda a controlar el uso del mouse. Se puede establecer el uso del ratón en modo texto y en modo gráfico. Para hacer uso del mouse se debe establecer el modo de video, inicializar mouse, mostrar el puntero, realizar acciones de desplazamiento, selección, etc., y al final ocultar el puntero. Iniciación 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 ratón en cero Establece el puntero de acuerdo al modo de video Modo texto: rectángulo, color inverso Modo grafico: forma de flecha Establece la razón mickey a píxel Razón hor: 8 a 8 Razón Vert: 16 a 8 Establece los limites horizontal y vertical para el puntero máximo y mínimo Establece el umbral de velocidad doble a 64 mickey por segundo
Descripción del servicio:
Registro Valor Servicio:00 AX
Retorna Registro Valor 0000h, si no está disponible AX controlador FFFFFh, FFFFFh, si esta disponible Número de botones del ratón BX
Despliegue del puntero del mouse Servicio utilizado 01,para mostrar el puntero del mouse Descripción del servicio:
Registro Servicio:01 AX
Valor
Oculta el puntero del mouse Servicio utilizado 02, se utiliza al final de la ejecución del programa. Descripción del servicio:
Registro Servicio:02 AX
Valor
Obtiene el estado del botón y la posición del puntero del mouse Servicio utilizado 03, retorna información útil para el manejo del mouse. Descripción del servicio:
Registro Valor Servicio:03 AX
Retorna Registro Valor Estado de los botones de acuerdo a BX la posición del bit, como sigue: Bit 0: botón izquierdo, donde 0= arriba, 1= abajo Bit 1: botón derecho, donde 0= arriba, 1= abajo Bit 2: botón central, donde 0= arriba, 1= abajo Bits 3-15: reservados Coordenada horizontal: x CX Coordenada vertical: y DX
Nota: Las coordenadas son expresadas en términos de píxeles, aun en modo texto (8 x byte para modo video 03)
Establece la posición del puntero del mouse Servicio utilizado 04, coloca el puntero en la nueva posición, ajustando como sea necesario si está fuera de los límites mínimo y máximo. Descripción del servicio:
Registro Valor Servicio:04 AX Posición horizontal CX Posición vertical DX
Obtiene información de la pulsación de los botones del mouse Servicio utilizado 05, retorna el estado arriba-debajo de todos los botones, el conteo de las presiones y posición del botón requerido. Descripción del servicio:
Registro Valor Servicio:05 AX Número del BX botón: 0 = izquierdo 1 = derecho 2 = central
Retorna Registro Valor Estado de los botones de a AX cuerdo a la posición del bit como sigue: Bit 0: botón izquierdo, donde 0= arriba, 1= abajo Bit 1: botón derecho, donde 0= arriba, 1= abajo Bit 2: botón central, donde 0= arriba, 1= abajo Bits 3-15: reservados Contador de presiones del BX botón Coordenada horizontal de la CX última presión del botón Coordenada vertical de la DX última presión del botón
Nota: La operación restablece el contador de presiones del botón en cero.
Fija los limites horizontales para el puntero del mouse Servicio utilizado 07, fija los límites horizontales mínimo y máximo para el puntero. Descripción del servicio:
Registro AX CX DX
Valor Servicio:07 Límite inferior Límite superior
Nota: Si el número mínimo es mayor que el máximo, la operación intercambia los números, también la operación mueve al puntero al área nueva.
Fija los limites verticales para el puntero del mouse Servicio utilizado 08, fija los límites verticales mínimo y máximo para el puntero. Descripción del servicio:
Registro AX CX DX
Valor Servicio:08 Límite inferior Límite superior
Nota: Si el número mínimo es mayor que el máximo, la operación intercambia los números, también la operación 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 POSICIÓN 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 CALL MOV MOV MOV CALL CALL CMP JE CALL MOV OTRO:
ERROR: EXIT:
CMP JE CALL MOV CALL MOV MOV MOV CALL 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
CALL
DESPLIEGA ;SERVICIO 40 DE LA INT 21
JMP LEA CALL CALL MOV MOV MOV
OTRO DX,MEN1 PRINTF F_MOUSE FPP,07H YXI,00H YXF,184FH
CALL
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 DIVISIÓN ;AX CONTIENE LA COORDENADA ; SI ES MENOR ; SI MAYOR DIVIDE ;RESIDUO ;COCIIENTE
DESPLIEGA PROC NEAR ; Servicio 40h :manejador de archivo para despliegue en pantalla
DESPLIEGA INITTEXT
INITTEXT PRINTF
PRINTF
MOV MOV MOV LEA INT RET ENDP PROC PUSH MOV MOV INT POP RET ENDP
PROC PUSH MOV INT POP RET ENDP
AH,40H BX,01 ;Número 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
TEXTBACKGROUND
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
View more...
Comments