Selasa, 09 Desember 2014

Mengunci CAPSLOCK (Residen)

Assalamu'alaikum
Silakan download tutorial ini >>Mengunci Capslock.docx
MENGUNCI CAPS LOCK
Pada alamat 40h:17h terdapat data tentang status tombol keyboard dimana bit ke 7 digunakan untuk menandakan keadaan dari tombol caps lock. Bit tersebut akan bernilai 1 bila caps lock sedang aktif dan 0 bila caps lock tidak aktif. Dengan mengubah bit ke 7 pada alamat 40h:17h tersebut kita bisa menyalakan tombol caps lock tanpa menekannya.

Aksi MACRO
MOV AX,40h
MOV ES,AX                                  ; ES=40h
MOV AX,ES:[17h]                       ; AX=40h:17h
OR AX,01000000b                     ; Jadikan bit ke 7 menjadi 1
MOV ES:[17h],AX                       ; Masukkan kembali ke 40h:17h
ENDM

.MODEL SMALL
.CODE
ORG 100h
TData: JMP Res_kan
NoInt EQU 1Ch
Bag_Res PROC
PUSH AX ;
PUSH BX ;
PUSH CX ;
PUSH DX ;
PUSH ES                                       ; Simpan isi semua register
PUSH DI ;
PUSH DS ;
PUSH SI ;
Aksi
POP SI ;
POP DS ;
POP DI ;
POP ES ;
POP DX                                         ; Kembalikan isi semua register
POP CX ;
POP BX ;
POP AX ;
IRET                                               ; Akhir dari interupt handler
Bag_Res ENDP
Res_Kan :
MOV AH,25h ;
MOV AL,NoInt                            ; Untuk merubah vektor interupsi
LEA DX,Bag_Res                        ; 1Ch menuju 'Bag_Res'
INT 21h ;
LEA DX,Res_Kan ;
INT 27h                                        ; Untuk meresidenkan bagian
END TData                                  ; 'Bag_Res'

Pada program kita kali ini yang dibelokkan adalah interupsi 1Ch. Handler Interupsi ini secara defaultnya hanyalah berisi perintah IRET karena interupsi ini memang disediakan untuk digunakan oleh pemakai.
Interupsi 1Ch terjadi kurang lebih 18,2 kali setiap detiknya. Karenanya dengan menggunakan interupsi 1Ch ini penekanan tombol Caps Lock menjadi seakan-akan tidak berarti lagi karena selalu dinyalakan oleh program kita.





Sekian
Wassalamu'alaikum

0 komentar:

Posting Komentar