Rabu, 29 Juni 2016

Contoh 15 (Coding) dan Gambarnya

#include <stdlib.h>
#include "screen.cpp"
#define KEY_INT 0x16
#define KEY_ESC 0x1b
#define STATE_RSHIFT 0x01
#define STATE_LSHIFT 0x02
#define STATE_CTRL 0x04
#define STATE_ALT 0x08
#define STATE_SCROLL 0x10
#define STATE_NUM 0x20
#define STATE_CAPS 0x40
#define STATE_INS 0x80
#define TRUE 1
UCHAR getKeyState(UCHAR key);
int main(void)
{
Screen *layar = new Screen();
UCHAR tombol;
layar->setMode(0x03);
layar->setCursorPos(4, 14);
layar->writeString("SHIFT KANAN :");
layar->setCursorPos(5, 14);
layar->writeString("SHIFT KIRI :");
layar->setCursorPos(6, 14);
layar->writeString("CTRL :");
layar->setCursorPos(7, 14);
layar->writeString("ALT :");
layar->setCursorPos(8, 14);
layar->writeString("SCROLL LOCK :");
layar->setCursorPos(9, 14);

layar->writeString("NUM LOCK :");
layar->setCursorPos(10, 14);
layar->writeString("CAPS LOCK :");
layar->setCursorPos(11, 14);
layar->writeString("INS - Hentikan Program");
while (TRUE)
{
asm mov ah, 0x01; /* Menyembunyikan kursor */
asm mov ch, 0x20; /* Register CX = 2000 heksadesimal */
asm mov cl, 0x00;
asm int 0x10; /* BIOS Video Interupt Service 1 */
layar->setCursorPos(4, 30);
if (getKeyState(STATE_RSHIFT))
layar->writeString("DITEKAN");
else
layar->writeString("DILEPAS");
layar->setCursorPos(5, 30);
if (getKeyState(STATE_LSHIFT))
layar->writeString("DITEKAN");
else
layar->writeString("DILEPAS");
layar->setCursorPos(6, 30);
if (getKeyState(STATE_CTRL))
layar->writeString("DITEKAN");
else
layar->writeString("DILEPAS");
layar->setCursorPos(7, 30);
if (getKeyState(STATE_ALT))
layar->writeString("DITEKAN");
else
layar->writeString("DILEPAS");
layar->setCursorPos(8, 30);
if (getKeyState(STATE_SCROLL))
layar->writeString("ON ");
else
layar->writeString("OFF");
layar->setCursorPos(9, 30);
if (getKeyState(STATE_NUM))
layar->writeString("ON ");
else
layar->writeString("OFF");
layar->setCursorPos(10, 30);

if (getKeyState(STATE_CAPS))
layar->writeString("ON ");
else
layar->writeString("OFF");
layar->setCursorPos(11, 14);
if (getKeyState(STATE_INS)) break;
}
delete layar;
return EXIT_SUCCESS;
}
UCHAR getKeyState(UCHAR key)
{
UCHAR state;
asm mov ah, 0x02; /* Register AH = 2 */
asm int KEY_INT; /* Lakukan interupsi 16 heksadesimal */
asm and al, key; /* AND-kan register AL sesuai tombol */
asm mov state, al; /* Salin nilai register AL ke state */
return state;
}


Gambarnya Sebagai Berikut :



Penjelasannya :


Pada program contoh15.cpp, fungsi getKeyState adalah fungsi yang digunakan untuk mengetahui status tombol. Perhatikanlah baris 7 sampai baris 14! Pada baris ketujuh sampai keempat belas dideklarasikan konstanta STATE_RSHIFT dan STATE_INS. Konstanta-konstanta ini digunakan untuk mengetahui status penekanan tombol Shift kanan sampai tombol Ins. Konstanta-konstanta inilah yang dikirimkan sebagai parameter pada fungsi getKeyState. Pada baris 114, setelah interupsi dijalankan nilai register AL di-AND-kan dengan nilai yang dikirimkan parameter fungsi getKeyState. Sebagai contoh, untuk mengetahui status tombol Shift kanan sedang ditekan atau dilepas, ditentukan dari nilai bit pertama pada register AL. Untuk mengetahui apakah nilai bit pertama 1 atau 0, maka nilai pada register AL harus di-AND-kan dengan nilai 0x01 atau 00000001 binari atau nilai konstanta STATE_RSHIFT. Kemudian nilai register AL yang telah di-AND-kan dijadikan nilai kembali fungsi getKeyState.


0 komentar:

Posting Komentar

Posting Lebih Baru Posting Lama Beranda

Diberdayakan oleh Blogger.

Facebook

Popular Posts

Formulir Kontak

Nama

Email *

Pesan *

Subscribe Here

Ad Home

Random Posts

Recent Posts

Recent

Header Ads

Popular Posts

Flickr

Newsletter

Subscribe Our Newsletter

Enter your email address below to subscribe to our newsletter.

Ad Banner

About Us

Random Posts

Popular Posts

 

Followers

 

Social Share Icons

Templates by Nano Yulianto | CSS3 by David Walsh | Powered by {N}Code & Blogger