page 60,132 title "KEYSOUND.ASM - intercetta INT 09h. Emette un beep per ogni tasto premuto" ;-------------------------------------------------------------------------- ; KEYSOUND.ASM ;-------------------------------------------------------------------------- ; ; KEYSOUND incercetta il gestore int09h per la tastiera per emettere un ; suono ad ogni pressione di un tasto ; int09h e' hardware e viene emesso alla pressione ed al rialscio di un tasto ; il suono invece viene generato solo alla pressione ; ; da compilare normalmente. ; se si desidera tradurre in un file .com operare nel suguente modo: ; EXE2BIN keysound.com keysound.exe ; DEL keysound.exe ; ; in questo caso e' necessario attivare l'istruzione ORG 0100H che segue la ; l'apertura del segmento. Questa direttiva indica al dos che il programma ; deve essere caricato all'indirizzo 100h, che e' l'indirizzo per i file.COM ;DA COMPILARE: ; MASM KEYSOUND ; LINK KEYSOUND ; EXE2BIN KEYSOUND.EXE KEYSOUND.COM ; DEL KEYSOUND.EXE ;-------------------------------------------------------------------------- ; Autore Pino Contini 17/09/94 ;-------------------------------------------------------------------------- ;=================================== C O D E =============================== ; CODE SEGMENT ORG 0100H ; COM file origin ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE ENTRY: JMP INSTALL HEX09_INT: ; Salva tutti i registri PUSH CX PUSH AX MOV AX,00Fh OUT 61h,AX ;beep on MOV CX,2000 ;imposto la durata del beep suono: LOOP suono ;ciclo di attesa MOV AX,0 OUT 61h,AX ;beep off POP AX POP CX JMP OLD_09H_VECTOR ;======================= VARIABILI DI MEMORIA ============================= ;Codific del salto al vecchio gestore OLD_09H_VECTOR: DB 0EAH ;istruzione di codice per un jump intrasegme. OLD_09O DW ? ;offset del vecchio vettore int. OLD_09S DW ? ;segment del vecchio vettore int. DW 0000H PROTECT EQU $-ENTRY msg DB 13,10 ;a capo DB " KEYSOUND !! d'ora in poi ogni tasto suona...",13,10 DB " ...e' una realizzazione PinoContini1994(c). ",13,10,"$" ;=================== Routine di Installazione ============================= ;operazioni di installazione ; 1. prendere il vettore per INT 09H e memorzzarli in OLD_09O OLD_09S ; 2. protegge la memoria ed esci ;-------------------------------------------------------------------------- INSTALL: PUSH CS ;non necessario POP DS ;per un file .com ;Usa DOS INT 21H servizio 35h per ottenere il vettore ;originale per INT 09h MOV AH,35h MOV AL,09H ;interrupt desiderato INT 21H ;ES-> indirizzo del segmento dell'interrupt attuale ;BX-> offset dell'interrupt attuale MOV OLD_09O,BX MOV OLD_09S,ES ;Usa DOS INT 21H servizio 25h impostare il nuovo vettore ;per INT 09H MOV AH,25h MOV AL,09H ;in un file .COM data segment = code segment MOV DX,OFFSET HEX09_INT ;offset della routine INT 21H mov dx,OFFSET msg ;Carica La Locazione Di Stringa mov ah,09h ;Visualizza La Chiamata Di Stringa int 21h ;esco al DOS proteggendo la routin in memoria MOV AH,49 ;codice del servizio richiesto MOV AL,0 ;nessun errore riportato in uscita MOV DX,((OFFSET PROTECT + 15)/16)+16 INT 21H CODE ENDS END ENTRY