A. Interupsi DOS untuk Mendeteksi,
Mengaktifkan dan Menonaktifkan Mouse
Disk Operating System (DOS) baik
pada mode real maupun mode terproteksi (DPMI) menyediakan sebuah software
interrupt khusus untuk mengaktifkan dan menonaktifkan mouse (tetikus),
yaitu interupsi 33 heksadesimal. Interupsi 33 heksadesimal menyediakan servis
untuk mendeteksi mouse, menampilkan atau menyembunyikan posisi kursor,
mengetahui posisi kursor mouse, mengetahui status penekanan tombol mouse,
mengetahui jenis mouse, mengaktifkan dan menonaktifkan driver mouse, membatasi
koordinat mouse dan lain-lain.
Karena pada awalnya DOS tidak
mendukung penggunaan mouse secara built-in, maka dibutuhkan driver khusus
agar mouse bisa diprogram menggunakan interupsi 33 heksadesimal. Driver mouse
harus di-install terlebih dahulu jika kita ingin memprogram mouse pada
mode real DOS. Caranya adalah dengan menambahkan perintah DEVICE=MOUSE.SYS pada
file CONFIG.SYS jika driver yang dimiliki berbentuk file MOUSE.SYS, atau dengan
menjalankan perintah MOUSE pada command prompt jika driver yang dimiliki
adalah MOUSE.COM. Namun jika kita menjalankan DOS pada mode DPMI Microsoft
Windows, kita tidak membutuhkan driver mouse karena Microsoft Windows telah
menyediakan dan menjalankan driver mouse tersebut pada saat start-up.
B. Mendeteksi Mouse dan Jumlah
Tombol pada Mouse
Untuk mengetahui apakah mouse
pada PC siap digunakan atau sudah terinstal dengan benar, kita dapat
menggunakan interupsi 33 heksadesimal servis 0. Interupsi 33 heksadesimal
servis 0 dapat digunakan untuk mendeteksi mouse dan mengetahui jumlah tombol
yang dimiliki oleh mouse tersebut. Berikut ini akan dijelaskan prosedur untuk
menjalankan interupsi 33 heksadesimal servis 0.
Register AX harus bernilai 0.
Jalankan interupsi 33
heksadesimal.
Setelah interupsi dijalankan:
Register AX akan bernilai 0
jika mouse atau driver-nya tidak terinstal.
Register AX akan bernilai
0xffff heksadesimal jika mouse dan driver-nya terinstal dengan benar.
Register BX berisi nilai yang
menunjukan jumlah tombol mouse.
Pointer mouse akan direset dan
disembunyikan. Koordinat awal pointer mouse adalah ditengah layar.
Berikut ini adalah contoh program
untuk mempraktekkan interupsi 33 heksadesimal servis 0. Simpan project berikut
ini dengan nama contoh18.ide pada direktori yang sama dengan file screen.cpp
dan keyboard.cpp. 54
contoh18.cpp:
#include
<stdlib.h>
#include "screen.cpp"
#include "keyboard.cpp"
#define MOUSE_INT 0x33 /* Nomor interupsi mouse */
UCHAR detectMouse(UCHAR *btn);
int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
UCHAR str[5];
UCHAR status, button;
/* Panggil fungsi deteksi mouse */
status = detectMouse(&button);
layar->setMode(0x03);
layar->setCursorPos(5, 14);
layar->writeString("Deteksi Mouse");
layar->setCursorPos(7, 14);
layar->writeString("Status:");
layar->setCursorPos(8, 14);
layar->writeString("Tombol:");
layar->setCursorPos(7, 22);
if (status)
layar->writeString("Siap digunakan");
else
layar->writeString("Tidak terinstal");
layar->setCursorPos(8, 22);
layar->writeChar(button | 0x30);
tombol->getString(str, 0);
delete layar;
delete tombol;
return EXIT_SUCCESS;
}
Fungsi
detectMouse pada contoh18.cpp menerima sebuah parameter yang
dikirimkan
secara referensi, yaitu btn. Setelah fungsi detectMouse dijalankan maka
parameter btn berisi nilai yang menunjukan jumlah tombol mouse. Fungsi
detectMouse akan mengembalikan nilai lebih dari 0 jika mouse dan drivernya
terinstal dengan benar dan akan mengembalikan nilai 0 jika mouse atau drivernya
tidak terinstal.
C.
Menampilkan dan Menyembunyikan Pointer Mouse
Pointer mouse
sama halnya dengan kursor keyboard yang dapat disembunyikan dan ditampilkan
kembali. Untuk menampilkan pointer mouse digunakan interupsi 33 heksadesimal
servis 1, sedangkan untuk menyembunyikan pointer mouse digunakan interupsi 33
heksadesimal servis 2. Berikut ini adalah prosedur untuk menampilkan dan
menyembunyikan mouse.
Menampilkan
pointer mouse:
Register AH
harus berisi nilai 0.
Register AL
harus berisi nilai 1.
Lakukan
interupsi 33 heksadesimal.
Menyembunyikan
pointer mouse:
Register AH
harus berisi nilai 0.
Register AL
harus bernilai 2.
Lakukan
interupsi 33 heksadesimal.
Berikut ini
adalah contoh program untuk mempraktekkan cara menampilkan pointer mouse.
Simpan project berikut ini dengan nama contoh19.ide pada direktori yang sama
dengan screen.cpp.
contoh19
#include <dos.h>
#include <stdlib.h>
#include "screen.cpp"
#define MOUSE_INT 0x33
UCHAR detectMouse(UCHAR *btn);
void showMouse(void);
int main (void)
{
Screen *layar = new Screen();
UCHAR state, btn;
layar->setMode(0x03);
layar->setCursorPos(4, 14);
state = detectMouse(&btn);
if (state)
{
layar->writeString("Mouse siap digunakan.");
showMouse();
}
else
{
layar->writeString("Mouse tidak siap.");
}
delay(5000);
delete layar; return EXIT_SUCCESS;
}
UCHAR detectMouse(UCHAR *btn)
{
UCHAR state, button;
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x00; /* Register AL = 0, AH:AL = 0:0 */
asm int MOUSE_INT; /* Laksanakan interupsi 0x33 */
asm mov state, al; /* Salin nilai AL ke state */
asm mov button, bl; /* Salin nilai BL ke button */
*btn = button;
return state;
}
void showMouse(void)
{
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x01; /* Register AL = 0, AX = 0 */
asm int MOUSE_INT; /* Lakukan interupsi */
return;
}
Program
contoh19.cpp ketika dijalankan akan mendeteksi mouse. Jika mouse siap digunakan
maka pointer mouse akan dimunculkan menggunakan fungsi showMouse, tetapi jika
mouse tidak terdeteksi maka akan ditampilkan pesan bahwa mouse tidak bisa
digunakan. Agar pointer mouse dapat ditampilkan, program contoh19.cpp harus
dijalankan dalam mode full screen, caranya adalah dengan menekan tombol
kombinasi ALT+Enter. Program akan berhenti secara otomatis setelah lima detik.
Setelah bisa menampilkan pointer mouse, program contoh20.ide berikut ini akan
menunjukan cara menyembunyikan pointer mouse.


Tidak ada komentar:
Posting Komentar