First commit ~0,10
This commit is contained in:
146
INT_KEY/INT_KEY.ASM
Normal file
146
INT_KEY/INT_KEY.ASM
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
_TEXT SEGMENT BYTE PUBLIC 'CODE'
|
||||
|
||||
ASSUME CS:_TEXT
|
||||
|
||||
PUBLIC DIR_MEM_TECLA
|
||||
|
||||
DIR_MEM_TECLA DD 0
|
||||
|
||||
PUBLIC VECTOR_TECLADO
|
||||
|
||||
VECTOR_TECLADO DD 0
|
||||
|
||||
PUBLIC GUARDA_VECTORES
|
||||
|
||||
GUARDA_VECTORES PROC NEAR
|
||||
PUSH AX
|
||||
PUSH BX
|
||||
PUSH ES
|
||||
MOV AH,35h ;Guarda el vector del teclado.
|
||||
MOV AL,09h
|
||||
INT 21h
|
||||
MOV WORD PTR CS:[VECTOR_TECLADO],BX
|
||||
MOV WORD PTR CS:[VECTOR_TECLADO+2],ES
|
||||
POP ES
|
||||
POP BX
|
||||
POP AX
|
||||
RET
|
||||
GUARDA_VECTORES ENDP
|
||||
|
||||
PUBLIC _SET_VECTORES
|
||||
|
||||
_SET_VECTORES PROC NEAR
|
||||
CALL GUARDA_VECTORES
|
||||
PUSH BP
|
||||
MOV BP,SP
|
||||
PUSH AX
|
||||
PUSH DS
|
||||
PUSH DX
|
||||
PUSH SI
|
||||
|
||||
LDS SI,[BP+4]
|
||||
MOV WORD PTR CS:[DIR_MEM_TECLA],SI
|
||||
MOV WORD PTR CS:[DIR_MEM_TECLA+2],DS
|
||||
|
||||
MOV DX,OFFSET CS:TECLADO
|
||||
MOV AX,_TEXT
|
||||
MOV DS,AX
|
||||
MOV AL,09h
|
||||
MOV AH,25h
|
||||
INT 21h ;Cambia el vector del teclado.
|
||||
|
||||
POP SI
|
||||
POP DX
|
||||
POP DS
|
||||
POP AX
|
||||
POP BP
|
||||
RET
|
||||
_SET_VECTORES ENDP
|
||||
|
||||
PUBLIC _UNSET_VECTORES
|
||||
|
||||
_UNSET_VECTORES PROC NEAR
|
||||
PUSH BP
|
||||
MOV BP,SP
|
||||
PUSH AX
|
||||
PUSH DS
|
||||
PUSH DX
|
||||
|
||||
MOV DX,WORD PTR CS:[VECTOR_TECLADO]
|
||||
MOV AX,WORD PTR CS:[VECTOR_TECLADO+2]
|
||||
MOV DS,AX
|
||||
MOV AL,09h
|
||||
MOV AH,25h
|
||||
INT 21h ;Repone el vector del teclado.
|
||||
|
||||
POP DX
|
||||
POP DS
|
||||
POP AX
|
||||
POP BP
|
||||
RET
|
||||
_UNSET_VECTORES ENDP
|
||||
|
||||
PUBLIC TECLADO
|
||||
|
||||
TECLADO PROC FAR
|
||||
PUSH AX
|
||||
PUSH BX
|
||||
PUSH DS
|
||||
PUSH SI
|
||||
LDS SI,CS:[DIR_MEM_TECLA]
|
||||
IN AL,60h
|
||||
MOV AH,AL
|
||||
IN AL,61h
|
||||
OR AL,10000000b
|
||||
OUT 61h,AL
|
||||
AND AL,01111111b
|
||||
OUT 61h,AL
|
||||
MOV AL,AH
|
||||
MOV BL,AL
|
||||
MOV BH,00h
|
||||
AND BX,007Fh
|
||||
CMP AL,00h
|
||||
JE TECLEADO
|
||||
CMP AL,0E0h
|
||||
JE TECLEADO
|
||||
CMP AL,0F0h
|
||||
JE TECLEADO
|
||||
CMP BYTE PTR [SI],0E0h ;<3B>ltima tecla
|
||||
JNE NO_DOBLE
|
||||
ADD BX,128
|
||||
NO_DOBLE: TEST AL,80h
|
||||
JZ NO_SOLT
|
||||
MOV BYTE PTR [BX+SI],0
|
||||
JMP TECLEADO
|
||||
NO_SOLT: MOV BYTE PTR [BX+SI],1
|
||||
TECLEADO: MOV [SI],AL ;<3B>ltima tecla
|
||||
LDS SI,CS:[DIR_MEM_TECLA]
|
||||
MOV BYTE PTR [SI+84],0
|
||||
MOV BYTE PTR [SI+85],0
|
||||
MOV AL,[SI+42]
|
||||
OR AL,[SI+54]
|
||||
CMP AL,1
|
||||
JNE NO_IMPR_PANT
|
||||
CMP BYTE PTR [SI+55],1
|
||||
JNE NO_IMPR_PANT
|
||||
MOV BYTE PTR [SI+84],1
|
||||
NO_IMPR_PANT: MOV AL,[SI+29]
|
||||
OR AL,[SI+157]
|
||||
CMP AL,1
|
||||
JNE NO_PAUSA
|
||||
CMP BYTE PTR [SI+69],1
|
||||
JNE NO_PAUSA
|
||||
MOV BYTE PTR [SI+85],1
|
||||
NO_PAUSA: MOV AL,20h
|
||||
OUT 20h,AL
|
||||
POP SI
|
||||
POP DS
|
||||
POP BX
|
||||
POP AX
|
||||
IRET
|
||||
TECLADO ENDP
|
||||
|
||||
_TEXT ends
|
||||
|
||||
end
|
Reference in New Issue
Block a user