; Compilar con el MASM 5.0 de Microsoft o versión superior,
; luego crear el .exe con el LINK y por último con el exe2bin crear el .COM
; Este progrma sustituye el Ctrl + Alt + Del, pues la tecla Del se
; sustituye por el ESC causando un reset
; Es una forma de leer el teclado y controlar ciertas teclas
; que nos interesen y ejecutar algo. De esta forma nos encadenamos a la
; cadena principal del receptor de eventos de teclado en modo real.
; Este programa se queda residente a través de los servicios del DOS.
; Para más información caribbeansoft@excite.com
; Autor Wilfredo Pérez Velázquez
la21 segment para public 'code'
org 0100h
assume cs:la21,es:la21,ds:la21,ss:la21
ini proc near
jmp stay ; Salta al módulo que dejará el programa residente
; y así desechar este módulo que solo ocuparía espacio
; en memoria, el cual no es importante en el módulo del
; control de los eventos de teclado.
inter9:
pushf
push ax
in al,60h
cmp al,29 ;si se pulso la tecla ctrl left
jne notCTRL
mov cs:[flagKEY],01h
jmp salto9
notCTRL:
cmp al,157 ; si se dej¢ de pulsar ctrl left
je notKEY
cmp al,56 ;si se pulso alt
jne notALT
cmp cs:[flagKEY],01h
jne salto9
mov cs:[flagKEY],02h
jmp salto9
notALT:
cmp al,184 ;si se dejo de pulsar alt
je notKEY
cmp al,1 ;si se pulso ESC
jne salto9
cmp cs:[flagKEY],02h
jne notKEY
pushf ; de esta forma simulo un llamado a interrupción
push cs ; pues al retornar del tratamiento de los otros
call salto ; programas enlazados a la lista de la INT09H
; retorne el control a mí y provocar un reset en
; el ordenador
d1 db 0eah ; Esto es el código de un JUMP FAR
o1 dw 0 ; Dirección del BIOS donde se encuentra el módulo
o2 dw 0ffffh ; del reset creado por el fabricante
notKEY:
mov cs:[flagKEY],00h
salto9:
pop ax
popf
salto:
e9 db 0eah ; Esto es el código de un JUMP FAR
off9 dw 0 ; Aqui guardo la dirección del módulo que estaba
sgm9 dw 0 ; antes que yo en la lista de eventos de la INT 09H
flagKEY db 0
stay:
mov ah,49h ; Servicio del SO MS-DOS que indica que mi programa solo
mov es,cs:[002ch] ; ocupa cierta cantidad de memoria y libera la restante concedida por el DOS
int 21h
xor si,si ; este módulo es el que me posiciona sobre la
mov ds,si ; la lista de la interrupción 09H y me agrega a ella.
push cs
pop es
mov di,offset off9
mov si,0024h
push si
cld
cli
movsw
movsw
pop si
mov word ptr [si],offset inter9
inc si
inc si
mov [si],cs
sti
mov dx,offset mens
push cs
pop ds
mov ah,09h
int 21h ; Imprimo un Mensaje
push cs
pop ds
mov dx,offset stay
int 27h ; Me quedo residente abandonando el módulo que me deja residente y el resto
mens db 0ah,0dh,0ah,0dh,'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',0ah,0dh
mens1 db '³ ³',0ah,0dh
mens2 db '³ Por favor si U.D desea resetera su PC no apague esta a trav‚s del ³',0ah,0dh
mens9 db '³ interruptor, pues este sufre desgaste... solo haga uso de ‚l cuando termine ³',0ah,0dh
mens0 db '³ de trabajar. ³',0ah,0dh
mens7 db '³ ³',0ah,0dh
mens3 db '³ SUGERENCIA: ³',0ah,0dh
mens4 db '³ Para resetear solo pulse la siguiente combinaci¢n de teclas ³',0ah,0dh
mens8 db '³ ......... CTRL + ALT + ESC ......... ³',0ah,0dh
mens5 db '³ Gracias. ³',0ah,0dh
mens6 db 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ',0ah,0dh,0ah,0dh,'$'
ini endp
la21 ends
end ini
Comentarios sobre la versión: Versión 1 (1)