Rabu, 29 Juni 2016

pertemuan 13




cara menggunakan interupsi 33 heksadesimal servis 5

berikut kode programnya :
#include <stdlib.h>
#include "screen.cpp"
#include "keyboard.cpp"
#define MOUSE_INT 0x33 /* Nomor interupsi mouse */
#define MOUSE_LEFT_BUTTON 0x00 /* Pilihan tombol kiri */
#define MOUSE_RIGHT_BUTTON 0x01 /* Pilihan tombol kanan */
#define USHORT unsigned short int
UCHAR detectMouse(UCHAR *btn);
USHORT getButtonClick(UCHAR btn, USHORT *row,
USHORT *col, USHORT maxclick);
void showMouse(void); 69

int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
USHORT jumlah, baris, kolom;
UCHAR status, button, str[5];
status = detectMouse(&button);
layar->setMode(0x03); layar->setCursorPos(4, 14);
showMouse(); 
if (!status)
{
layar->writeString("Mouse tidak siap! Tekan ENTER ...");
tombol->getString(str, 0);
delete layar; delete tombol;
exit(EXIT_FAILURE);
 }
layar->writeString("Klik kiri 5 kali untuk berhenti");
tombol->hideCursor();
jumlah = getButtonClick(MOUSE_LEFT_BUTTON,
&baris, &kolom, 5); 
delete tombol; 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;
}
USHORT getButtonClick(UCHAR btn, USHORT *row,
USHORT *col, USHORT maxclick)
{
USHORT click, nclick, x, y;
click = nclick = x = y = 0;
while (nclick < maxclick)
return;
 }
hasil outputnya :


Fungsi getButtonClick pada program contoh diatas digunakan untuk mendeteksi penekanan tombol sebanyak beberapa kali. Parameter btn yang bertipe unsigned character digunakan untuk menentukan tombol mouse (tombol kiri atau kanan) yang akan dibatasi penekanannya. Parameter col dan row bertipe unsigned integer yang dikirimkan secara referensi digunakan untuk mengetahui posisi baris dan kolom pointer mouse ketika tombol mouse terakhir kali ditekan. Parameter maxclick bertipe unsigned integer digunakan untuk menentukan banyak penekanan tombol mouse.
cara mengetahui pelepasan tombol mouse menggunakan interupsi 33 heksadesimal servis 6.
Kode program :
#include <stdlib.h>
#include "screen.cpp"
#include "keyboard.cpp"

#define MOUSE_INT 0x33 /* Interupsi mouse */
#define MOUSE_LEFT_BUTTON 0x00 /* Pilihan tombol kiri */
#define MOUSE_RIGHT_BUTTON 0x01 /* Pilihan tombol kanan */

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

 int main(void)
{

Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
USHORT jumlah, baris, kolom;
UCHAR status, button, str[5];
status = detectMouse(&button); 
layar->setMode(0x03); layar->setCursorPos(4, 14);
showMouse();
if (!status)
{
layar->writeString("Mouse tidak siap! Tekan ENTER ...");
tombol->getString(str, 0);
delete layar; delete tombol;
exit(EXIT_FAILURE);
}
layar->writeString("Lepas tombol kanan 5x untuk berhenti");
tombol->hideCursor(); 
jumlah = getButtonRelease(MOUSE_RIGHT_BUTTON,
&baris, &kolom, 5);
delete tombol; delete layar;
return EXIT_SUCCESS;
}
return;
 }
hasil outputnya adalah :
Fungsi getButtonRelease pada program digunakan untuk mendeteksi pelepasan tombol sebanyak beberapa kali. Parameter btn yang bertipe unsigned character digunakan untuk menentukan tombol mouse (tombol kiri atau kanan) yang akan dibatasi pelepasannya. Parameter col dan row bertipe unsigned integer yang dikirimkan secara referensi digunakan untuk mengetahui posisi baris dan kolom pointer mouse ketika tombol mouse terakhir kali dilepas. Parameter maxclick bertipe unsigned integer digunakan untuk menentukan banyak pelepasan tombol mouse.
Membuat Class untuk Menggunakan Mouse
Setelah memahami dan mempraktekkan teknik-teknik mengoperasikan mouse menggunakan teknik inline assembly, maka pada sub bab ini akan dibuat pustaka class (class library) untuk mengenkapsulasi fungsi-fungsi operasi mouse yang telah dipraktekkan pada contoh-contoh program sebelumnya. Pustaka class ini akan disimpan dalam file kode program mouse.cpp. Pustaka class.cpp akan bertindak seperti file screen.cpp dan keyboard.cpp yang menyediakan objek untuk operasi mouse. Perhatikan dan pelajari pustaka class mouse.cpp berikut ini, kemudian jelaskanlah letak perbedaan fungsi-fungsi anggota pada class Mouse dengan fungsi-fungsi pada contoh program sebelumnya.
Mouse.cpp:
/*
mouse.cpp
Class library untuk menggunakan mouse.
Hak Cipta Pebi Yudha K.
 Juni 2009

Disusun sebagai contoh program
Modul Praktikum Pemrograman C++ Lanjutan
AMIK BSI
*/

#define MOUSE_INT 0x33 /* Interupsi mouse */
#define MOUSE_READY 0xff /* Mouse siap digunakan */
#define MOUSE_NOT_READY 0x00 /* Mouse tidak siap */ 73

#define MOUSE_SUCCESS 0x1f /* Bisa dinonaktifkan */
#define MOUSE_FAILURE 0xff /* Tak bisa dinonaktifkan */
#define MOUSE_LEFT_CLICK 0x01 /* Klik tombol kiri */
#define MOUSE_RIGHT_CLICK 0x02 /* Klik tombol kanan */
#define MOUSE_LEFT_BUTTON 0x00 /* Pilih tombol kiri */
#define MOUSE_RIGHT_BUTTON 0x01 /* Pilih tombol kanan */
#define UCHAR unsigned char
#define USHORT unsigned short int
class Mouse
{
private:
UCHAR button; /* Banyaknya tombol mouse */
UCHAR isReady; /* Status mouse siap/tidak */
UCHAR clickMode; /* Klik kiri atau klik kanan */
USHORT x, y; /* Posisi koordinat mouse */

/* Mengetahui posisi koordinat pointer mouse */
 void getMousePos(void);

public:
Mouse(void); /* Konstruktor default */
~Mouse(void); /* Destruktor default */

UCHAR getState(void); /* Mouse siap/tidak siap */
UCHAR getNumButton(void); /* Cek jumlah tombol mouse */

UCHAR disableMouse(void); /* Nonaktifkan driver mouse */
void enableMouse(void); /* Aktifkan driver mouse */
/* Mendeteksi penekanan tombol mouse */
USHORT getButtonClick(UCHAR btn, USHORT maxclick);
/* Mendeteksi pelepasan tombol mouse */
USHORT getButtonRelease(UCHAR btn, USHORT maxrel);

/* Mengetahui klik kiri atau klik kanan setelah */
/* fungsi getMousePos dijalankan */
UCHAR getClickMode(void);
USHORT getX(void); /* Posisi horizontal mouse */
USHORT getY(void); /* Posisi vertikal mouse */
void hideMouse(void); /* Menyembunyikan pointer */
void showMouse(void); /* Menampilkan pointer */

/* Memindahkan pointer mouse di posisi tertentu */
void setMousePos(USHORT row, USHORT col);
/* Membatasi posisi koordinat mouse di layar */
void setMouseRegion(USHORT y1, USHORT x1,
USHORT y2, USHORT x2);
 };

Mouse::Mouse(void)
{

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; /* Deteksi mouse dan drivernya */
asm mov state, al; /* Salin nilai AL ke state */
asm mov button, bl; /* Salin nilai BL ke button */

 this->isReady = state;
this->button = button;
return;
}

 Mouse::~Mouse(void)
 {
return;
}
UCHAR Mouse::getState(void)
{
return this->isReady;
}

UCHAR Mouse::getNumButton(void)
{
return this->button;
}

UCHAR Mouse::disableMouse(void)
{
UCHAR state;

asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x1f; /* Register AL = 0x1f */
asm int MOUSE_INT; /* Nonaktifkan driver mouse */
asm mov state, al; /* Salin register AL ke state */
return state;
}
void Mouse::enableMouse(void)
{
asm mov ax, 0x0020; /* AH = 0, AL = 0x20 */
asm int MOUSE_INT; /* Aktifkan driver mouse */
return;
}
USHORT Mouse::getButtonClick(UCHAR btn, USHORT maxclick)
{
USHORT click, nclick, x, y;
click = nclick = x = y = 0;

while (nclick < maxclick)
{

asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x05; /* Register AL = 5, AX = 5 */
asm mov bh, 0x00; /* Register BH = 0 */
asm mov bl, btn; /* BL = tombol yang dipilih */
asm int MOUSE_INT; /* Deteksi status klik tombol */
asm mov click, bx; /* Banyaknya penekanan tombol */
asm mov x, cx; /* Posisi horizontal mouse */
asm mov y, dx; /* Posisi vertikal mouse */
nclick += click;
}
this->y = y; this->x = x;
return click;
}
USHORT Mouse::getButtonRelease(UCHAR btn, USHORT maxrel)
{
USHORT rel, nrel, x, y;
rel = nrel = x = y = 0;
while (nrel < maxrel)
{
asm mov ah, 0x00; /* Register AH = 0 */
asm mov al, 0x06; /* Register AL = 6, AX = 6 */
asm mov bh, 0x00; /* Register BH = 0 */
asm mov bl, btn; /* BL = tombol yang dipilih */
asm int MOUSE_INT; /* Deteksi pelepasan tombol */

asm mov rel, bx; /* Banyaknya pelepasan tombol */
asm mov x, cx; /* Posisi horizontal mouse */
asm mov y, dx; /* Posisi vertikal mouse */
nrel += rel;
}
this->y = y; this->x = x;
return rel;
}
void Mouse::getMousePos(void)
{
USHORT x, y;
UCHAR cmode;
asm mov ax, 0x0003; /* AH = 0, AL = 3, AX = 3 */
asm int MOUSE_INT; /* Deteksi posisi mouse */
asm mov x, cx; /* Posisi horizontal mouse */
asm mov y, dx; /* Posisi vertikal mouse */
asm mov cmode, bl; /* Tombol yang diklik */
this->y = y; this->x = x;
this->clickMode = cmode;


return;
 }

UCHAR Mouse::getClickMode(void)
{
this->getMousePos();
return this->clickMode;
}
USHORT Mouse::getX(void)
{
 return this->x;
}

USHORT Mouse::getY(void)
{
return this->y;
}

void Mouse::hideMouse(void)
{
asm mov ax, 0x0002; /* AH = 0, AL = 2, AX = 2 */
asm int MOUSE_INT; /* Sembunyikan pointer mouse */
return;
}
void Mouse::setMousePos(USHORT row, USHORT col)
{
asm mov ax, 0x0004; /* AH = 0, AL = 4, AX = 4 */
asm mov cx, col; /* Posisi horizontal mouse */
asm mov dx, row; /* Posisi vertikal mouse */
asm int MOUSE_INT; /* Pindahkan pointer mouse */
return;
}
void Mouse::setMouseRegion(USHORT y1, USHORT x1,
USHORT y2, USHORT x2)
{
asm mov ax, 0x0007; /* Register AX = 7 */
asm mov cx, x1; /* CX = batas horizontal minimal */
asm mov dx, x2; /* DX = batas horizontal maksimal */
asm int MOUSE_INT; /* Batasi posisi horizontal mouse */
asm mov ax, 0x0008; /* Register AX = 8 */
asm mov cx, y1; /* CX = batas vertikal minimal */
asm mov dx, y2; /* DX = batas vertikal maksimal */
asm int MOUSE_INT; /* Batasi posisi vertikal mouse */
return;
 }
void Mouse::showMouse(void)
 {
asm mov ax, 0x0001; /* AH = 0, AL = 1, AX = 1 */ 77

asm int MOUSE_INT; /* Tampilkan pointer mouse */
 return;
}
Setelah membuat pustaka class untuk operasi mouse, berikut ini akan diberikan contoh cara menggunakan pustaka class mouse.cpp. Objek yang harus diinstansiasikan dari pustaka class mouse.cpp adalah objek Mouse. Program berikut ini adalah program untuk mendeteksi pilihan yang ditampilkan dilayar. Pada layar monitor akan ditampilkan pilihan A, B, dan C. Jika pengguna mengklik A atau B maka muncul pesan bahwa pengguna telah memilih A atau B. Tetapi jika pengguna mengklik C maka program akan dihentikan.
Berikut kode program nya :
#include <stdlib.h>
#include "screen.cpp"
#include "keyboard.cpp"
#include "mouse.cpp"

int main(void)
{
Screen *layar = new Screen();
Keyboard *tombol = new Keyboard(layar);
Mouse *tikus = new Mouse();
UCHAR str[5];
USHORT x, y;

layar->setMode(0x03); layar->setCursorPos(4, 14);
tombol->hideCursor();
if (tikus->getClickMode() == MOUSE_LEFT_CLICK)
{
x = tikus->getX() / 8; /* Periksa posisi horizontal */
y = tikus->getY() / 8; /* Periksa posisi vertikal */

}
delete layar; delete tombol; delete tikus;
return EXIT_SUCCESS;
}
berikut hasil outputnya  :

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