Rabu, 29 Juni 2016

Pertemuan 10

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