Kamis, 23 Juni 2016

pertemuan 11

Mengaktifkan dan Menonaktifkan Driver Mouse
Mouse dan driver-nya yang telah terinstal dengan benar dapat diaktifkan dan dinonaktifkan. Jika suatu driver mouse dinonaktifkan maka pointernya tidak bisa digerakan dan koordinatnya tidak akan berubah, walaupun mouse digerak-gerakan. Untuk mengaktifkan driver mouse digunakan interupsi 33 heksadesimal servis 20 heksadesimal. Sedangkan untuk menonaktifkan driver mouse dapat digunakan interupsi 33 heksadesimal servis 1f heksadesimal.
Berikut ini adalah prosedur untuk mengaktifkan dan menonaktifkan mouse:
Mengaktifkan driver mouse:
  Register AH harus bernilai 0.
  Register AL harus bernilai 20 heksadesimal
.  Laksanakan interupsi 33 heksadesimal. Menonaktifkan driver mouse:
 Register AH harus bernilai 0.
  Register AL harus bernilai 1f heksadesimal.
  Laksanakan interupsi 33 heksadesimal. Setelah interupsi 33 heksadesimal servis 1f heksadesimal dijalankan:
 Jika interupsi berhasil dilaksanakan maka register AX bernilai 001f heksadesimal.
  Jika interupsi gagal dilaksanakan maka register AX bernilai ffff heksadesimal.
Untuk mempraktekkan prosedur mengaktifkan dan menonaktifkan mouse, pelajari kode program berikut :
#include <dos.h>
#include <stdlib.h>
#include "screen.cpp" 
#define MOUSE_INT 0x33

UCHAR detectMouse(UCHAR *btn);
void showMouse(void);
void enableMouse(void);
UCHAR disableMouse(void);

int main (void)
{
Screen *layar = new Screen();
UCHAR state, btn;

layar->setMode(0x03);
layar->setCursorPos(4, 14); 59


state = detectMouse(&btn);

if (state)
{
layar->writeString("Mouse siap digunakan.");
layar->setCursorPos(6, 14);
layar->writeString("Driver mouse dinonaktifkan.");

showMouse(); disableMouse();
delay(7000);

layar->setCursorPos(6, 14);
layar->writeString("Driver mouse diaktifkan kembali.");

enableMouse();
}
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 = 1, AH:AL = AX = 1 */
asm int MOUSE_INT; /* Tampilkan pointer mouse */


return state;
}
hasil outputnya adalah:


Mengetahui Koordinat Pointer Mouse
Seperti halnya kursor keyboard yang ditampilkan di layar monitor, pointer mouse pun menempati koordinat tertentu di layar. Untuk mengetahui letak atau posisi koordinat pointer mouse dilayar dapat digunakan interupsi 33 heksadesimal servis 3. Berikut ini adalah prosedur untuk mengetahui koordinat pointer mouse.
 Register AH harus bernilai 0.
  Register AL harus bernilai 3 heksadesimal.
  Lakukan interupsi 33 heksadesimal. Setelah interupsi dilaksanakan:
  Register CX menunjukkan posisi horizontal pointer mouse (sumbu X).
  Register DX menunjukkan posisi vertikal pointer mouse (sumbu Y).
  Register BX menunjukkan tombol mouse yang ditekan. Jika nilai register BX sama dengan 1 berarti tombol kiri mouse yang ditekan. Jika tombol kanan mouse yang ditekan, nilai register BX sama dengan 2.
  Posisi vertikal dan horizontal pointer mouse dimulai dari posisi 0.
Dari prosedur yang telah dijelaskan diatas, dapat disimpulkan bahwa interupsi 33 heksadesimal servis 3 selain dapat digunakan untuk mengetahui posisi koordinat pointer mouse, juga dapat digunakan untuk mengetahui status penekanan tombol mouse. Berikut ini adalah contoh program untuk mempraktekan interupsi 33 heksadesimal servis 3.
kode prohram :
#include <stdlib.h>
#include "screen.cpp"
#include "keyboard.cpp"

#define MOUSE_INT 0x33
#define MOUSE_RIGHT_CLICK 0x02

#define USHORT unsigned short int
UCHAR detectMouse(UCHAR *btn);
void getMousePos(USHORT *row, USHORT *col, UCHAR *btn);
void showMouse(void);

int main(void)
{
Screen *layar = new Screen();
Keyboard *tuts = new Keyboard(layar);
USHORT baris, kolom;
UCHAR status, button, str[5];
status = detectMouse(&button);

layar->setMode(0x03);
layar->setCursorPos(4, 14);
tuts->hideCursor(); 
if (!status)
{
layar->writeString("Mouse tidak siap! Tekan ENTER ...");
tuts->getString(str, 0);

delete tuts; delete layar;
exit(EXIT_FAILURE);
}

layar->writeString("Deteksi Koordinat Pointer Mouse");
layar->setCursorPos(6, 14);
layar->writeString("X:");
layar->setCursorPos(7, 14);
layar->writeString("Y:");
layar->setCursorPos(9, 14);
layar->writeString("Klik kanan untuk berhenti");
showMouse();

while (TRUE)
{
/* Periksa koordinat dan penekanan tombol mouse */
getMousePos(&baris, &kolom, &button);
baris /= 8; kolom /= 8; /* kolom dan baris dibagi 8 */
gcvt((double) kolom, 2, str);
layar->setCursorPos(6, 17); layar->writeString(” ”);
layar->setCursorPos(6, 17); layar->writeString(str); 
gcvt((double) baris, 2, str);
layar->setCursorPos(7, 17); layar->writeString(” ”);
layar->setCursorPos(7, 17); layar->writeString(str);

if (button == MOUSE_RIGHT_CLICK) break;
}

delete tuts; 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 getMousePos(USHORT *row, USHORT *col, UCHAR *btn)


void showMouse(void)
{
asm mov ah, 0x00;
asm mov al, 0x01;
asm int MOUSE_INT;
return;
}
hasil outputnya adalah;

0 komentar:

Posting Komentar

http://www.resepkuekeringku.com/2014/11/resep-donat-empuk-ala-dunkin-donut.html http://www.resepkuekeringku.com/2015/03/resep-kue-cubit-coklat-enak-dan-sederhana.html http://www.resepkuekeringku.com/2014/10/resep-donat-kentang-empuk-lembut-dan-enak.html http://www.resepkuekeringku.com/2014/07/resep-es-krim-goreng-coklat-kriuk-mudah-dan-sederhana-dengan-saus-strawberry.html http://www.resepkuekeringku.com/2014/06/resep-kue-es-krim-goreng-enak-dan-mudah.html http://www.resepkuekeringku.com/2014/09/resep-bolu-karamel-panggang-sarang-semut-lembut.html