A. 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 fungsi-fungsi 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.
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 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->writeString("Input satu karakter:");
layar->setCursorPos(4, 34);
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
...");
Pada kode program contoh11.cpp
fungsi getKey adalah fungsi yang digunakan untuk input satu karakter. Fungsi
getKey tidak memerlukan parameter dan mengembalikan nilai bertipe unsigned
character (didefinisikan dalam file screen.cpp sebagi UCHAR). Nilai yang
dikembalikan oleh fungsi ini adalah karakter yang diketikan pada tombol
keyboard. Fungsi ini sama dengan fungsi standar getch.
Setelah
mempelajari cara memasukan satu karakter, maka langkah berikutnya adalah
mempelajari cara mendeteksi penekanan tombol-tombol extended. Project
contoh12.ide berikut ini memberikan contoh cara mendeteksi penekanan tombol F1,
F2, F3, dan F4.
Contoh 12:
#include
<stdlib.h>
#include
"screen.cpp"
#define
KEY_INT 0x16 /* Nomor interupsi keyboard */
#define
KEY_F1 0x3b /* Kode scan tombol F1 */
#define
KEY_F2 0x3C /* Kode scan tombol F2 */
#define
KEY_F3 0x3d /* Kode scan tombol F3 */
#define
KEY_F4 0x3e /* Kode scan tombol F4 */
#define
TRUE 1
UCHAR
getSpecialKey(void);
int
main(void)
{
Screen
*layar = new Screen();
UCHAR
tombol;
layar->setMode(0x03);
layar->setCursorPos(5,
9);
layar->writeString("Tekan
F1, F2, F3");
layar->setCursorPos(6,
9);
layar->writeString("Tekan
F4 untuk berhenti");
layar->setCursorPos(8,
9);
Pada kode program contoh12.cpp
fungsi getSpecialKey adalah fungsi yang digunakan untuk mendeteksi penekanan
tombol-tombol khusus. Perhatikanlah pada baris kelima sampai baris kedelapan,
karena setiap tombol khusus memiliki kode tersendiri maka pada baris kelima
sampai kedelapan dideklarasikan konstanta untuk tombol F1 sampai F4. Kode scan
untuk tombol F1 adalah 3b heksadesimal, F2 adalah 3c heksadesimal, dan
seterusnya. Bandingkanlah kode program contoh11.cpp dengan kode program
contoh12.cpp pada fungsi getKey dan getSpecialKey. Pada fungsi getKey nilai yang
dijadikan sebagai nilai kembali fungsi (return value) adalah nilai yang
tersimpan di register AL, sedangkan pada fungsi getSpecialKey nilai yang
dikembalikan adalah nilai yang tersimpan di register AL.


Tidak ada komentar:
Posting Komentar