INT_33H

Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF