home *** CD-ROM | disk | FTP | other *** search
- ; NOREPEAT.ASM - DISABLES TYPEMATIC KEY REPETITIONS
- ; =================================================
- CSEG SEGMENT
- ASSUME CS:CSEG
- ORG 100H
- ;
- START: JMP SHORT INITIALIZE
- ;
- OLDINT9 DD ?
- LAST_KEY DB 0FFH ;INITIALLY SET TO A USED SCAN CODE
- ;
- ; NEW INTERRUPT 9 (KEYBOARD ROUTINE)
- ; ----------------------------------
- NEWINT9 PROC FAR
- STI
- PUSH AX
- ;
- IN AL,60H ;GET SCAN CODE FROM KEYBOARD
- CMP AL,CS:LAST_KEY ;IS IT SAME AS LAST KEY
- JE IGNORE ;IF IT IS, IGNORE IT
- ;
- MOV CS:LAST_KEY,AL ;NOW THIS BECOMES THE LAST KEY
- POP AX ;RESTORE THE STACK
- JMP CS:[OLDINT9] ;ALLOW THE ROM TO PROCESS THE KEY
- ;
- IGNORE: IN AL,61H ;GET KEYBOARD STATUS
- MOV AH,AL
- OR AL,80H
- OUT 61H,AL ;RESET KEYBOARD
- XCHG AL,AH ;GET BACK ORIGINAL KEYBOARD STATUS
- OUT 61H,AL ;RESTORE KEYBOARD STATUS
- ;
- MOV AL,20H
- OUT 20H,AL ;RESET INTERRUPT CONTROLLER
- ;
- POP AX
- IRET ;RETURN FROM INTERRUPT
- NEWINT9 ENDP
- ;
- ; PROGRAM INSTALLATION
- ;---------------------
- ASSUME DS:CSEG
- INITIALIZE:
- MOV AX,3509H ;SETUP TO GET OLD INT9 VECTOR
- INT 21H
- MOV WORD PTR [OLDINT9], BX
- MOV WORD PTR [OLDINT9+2],ES
- ;
- MOV DX,OFFSET NEWINT9
- MOV AX,2509H ;SETUP TO THANGE VECTOR
- INT 21H ;DOS FUNCTION TO CHANGE VECTOR
- ;
- MOV DX,OFFSET INITIALIZE ;BYTES TO STAY RESIDENT
- INT 27H ;TERMINATE AND STAY RESIDENT
- ;
- CSEG ENDS
- END START