BAB III
Input
Menggunakan Keyboard
3.1.
Interupsi BIOS untuk Input Melalui Keyboard
Keyboard atau papan ketik
merupakan alat input utama pada sebuah PC. Umumnya
seseorang yang sedang
mempelajari bahasa pemrograman C/C++ akan memanfaatkan fungsifungsi
standar
seperti
scanf,
getch, getchar, getche,
gets dan cin untuk bisa melakukan input
melalui keyboard, maka
pada bab ini akan dipelajari bagaimana fungsi-fungsi tersebut bekerja.
BIOS menyediakan sebuah
nomor interupsi khusus yang digunakan untuk melakukan
input melalui keyboard,
yaitu interupsi 16 heksadesimal. Operasi-operasi pada keyboard dapat
ditentukan melalui nomor
service yang disimpan pada register AH.
3.2.
Memasukan Satu Karakter dan Mendeteksi Penekanan Tombol Extended
Interupsi 16 heksadesimal
servis 0 heksadesimal adalah nomor interupsi yang dapat
digunakan untuk melakukan
input satu karakter melalui keyboard. Fungsi standar getch,
getchar, dan getche
memanfaatkan interupsi ini. Berikut ini adalah prosedur yang harus
dilakukan untuk melakukan interupsi 16 heksadesimal servis 0
heksadesimal:
& Register
AH harus bernilai 0.
& Jalankan
interupsi 16 heksadesimal.
Setelah Interupsi
dijalankan maka:
& Register
AH akan berisi dengan kode scan papan ketik.
& Register
AL berisi kode ASCII dari karakter yang diketikan atau bernilai 0 jika tombol
keyboard yang ditekan
adalah tombol extended.
Dari penjelasan diatas,
ada beberapa hal lagi yang harus lebih diperjelas. Karakter yang
diketikan melalui keyboard
tidak akan ditampilkan pada layar monitor dan posisi kursor tidak
akan berpindah. Tombol
keyboard yang diketikan dapat diketahui nilainya pada register AL, jika
register AL bernilai nol,
maka dapat disimpulkan bahwa tombol keyboard yang ditekan adalah
tombol extended
(tombol-tombol khusus).
Tombol extended atau
tombol khusus adalah tombol yang disediakan untuk maksud-
maksud tertentu dari
sebuah program. Contoh tombol-tombol khusus adalah tombol CTRL, ALT,
SHIFT, INS, F1, F2 dan
sebagainya. Untuk mengetahui tombol khusus apa yang ditekan ketika
register AL bernilai nol,
dapat diketahui dari nilai yang disimpan pada register AH. Nilai pada
register AH adalah keyboard
scan code yang memberitahukan tombol khusus apa yang ditekan.
Berikut ini adalah contoh
program yang menunjukan cara melakukan input satu karakter
menggunakan interupsi 16
heksadesimal servis 0 yang ditulis dengan teknik inline assembly
dan memanfaatkan pustaka
class screen.cpp yang telah dibuat pada bab sebelumnya. Buatlah
sebuah project seperti
yang dilakukan pada bab-bab sebelumnya, simpan project tersebut
dengan nama file
contoh11.ide dengan file kode program contoh11.cpp pada direktori yang
sama dengan file screen.cpp
CONTOH SCREEN CPP.11
#include
<stdlib.h>
#include
"screen.cpp"
#define
KEY_INT 0x16 /* Nomor interupsi
keyboard */
UCHAR
getKey(void);
int
main(void)
{
Screen *layar = new Screen();
UCHAR karakter;
layar->setMode(0x03);
layar->setCursorPos(4, 14);
layar->setAttribute(0x2f);//huruf putih
latar hijau
layar->writeString("Input satu
karakter:");
layar->setCursorPos(4, 35);
layar->setAttribute(0xe5);//huruf ungu
latar kuning
karakter = getKey();
layar->setCursorPos(5, 14);
layar->writeString("Karakter yang
anda ketik adalah");
layar->setCursorPos(5, 46);
layar->writeChar(karakter);
layar->setCursorPos(6, 14);
layar->writeString("Tekan sembarang
tombol ...");
getKey();
delete layar;
return EXIT_SUCCESS;
}
UCHAR
getKey(void)
{
UCHAR key;
asm mov ah, 0x00; /* Register AH = 0 */
asm int KEY_INT; /* Lakukan interupsi */
asm mov key, al; /* Salin nilai register AH ke key */
return key;
}


0 komentar:
Posting Komentar