Menampilkan Karakter dan Memindahkan Posisi Kursor
Pada artikel kali ini akan dibahas bagaimana cara menampilkan karakter menggunakan interupsi 10 heksadesimal servis 09 heksadesimal secara lebih mendalam lagi dari artikel sebelumnya disini. Untuk lebih jelasnya, berikut ini adalah prosedur yang digunakan untuk menjalankan interupsi 10 heksadesimal servis 09 heksadesimal:
: Register AH
berisi nilai 9 heksadesimal. 13
: Register AL berisi
kode ASCII dari huruf/karakter yang akan dicetak.
: Register BH berisi
halaman layar, halaman pertama nilainya 0.
: Register BL berisi
nilai warna huruf/karakter (warna asal adalah 7).
: Register CH dan CL
menentukan banyaknya karakter pada AL akan dicetak.
Jika cuma 1 huruf, maka CH = 0 dan CL
= 1.
|
Permasalahan ketika kita mencetak karakter menggunakan interupsi 10 heksadesimal servis 09 heksadesimal adalah setelah karakter ditampilkan dilayar, posisi kursor tidak berpindah ke kolom berikutnya. Akibatnya adalah ketika karakter berikutnya akan ditampilkan maka karakter yang sebelumnya akan tertimpa dengan karakter yang baru. Solusi untuk mengatasi permasalahan ini adalah sebelum karakter ditampilkan kita harus mengetahui posisi kursor, kemudian mencetak karakter tersebut dan mengubah posisi kursor setelah karakter dicetak. Untuk melakukan hal tersebut maka kita harus tahu cara mengetahui posisi kursor dan cara memindahkan posisi kursor.
Untuk mengetahui posisi kursor dapat menggunakan interupsi 10 heksadesimal servis 03 heksadesimal. Berikut ini adalah prosedur untuk menjalakan interupsi 10 heksadesimal servis 03 heksadesimal:
: Register AH
harus bernilai 3 heksadesimal.
: Register
BH berisi nomor halaman tampilan, halaman pertama nilainya 0.
|
Setelah interupsi dilakukan maka register DH berisi nomor baris dan register DL berisi nomor kolom. Sedangkan untuk memindahkan posisi kursor adalah dengan menggunakan interupsi 10 heksadesimal servis 02 heksadesimal. Berikut ini adalah prosedurnya:
: Register AH
harus bernilai 2 heksadesimal.
: Register BH
berisi nomor halaman tampilan, halaman pertama nilainya 0.
: Register DH
berisi nomor baris (dimulai dari 0 sampai 24).
: Register DL berisi nomor kolom (dimulai dari 0 sampai
batas akhir dikurangi 1).
|
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define VIDEO_INT 0x10
#define UCHAR unsigned char
void getCursorPos(UCHAR *y,UCHAR *x);
void setCursorPos(UCHAR y,UCHAR x);
void writeChar(UCHAR letter, UCHAR attr);
int main(void)
{
UCHAR baris, kolom;
getCursorPos(&baris, &kolom); // Baca posisi kursor
writeChar('M', 0x1f); // Cetak huruf M
setCursorPos(baris, ++kolom); // Pindahkan kursor
writeChar('B', 0x1f); // Cetak huruf B
setCursorPos(baris, ++kolom); // Pindahkan kursor
getch();
return EXIT_SUCCESS;
}
void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi kursor
{
UCHAR row, col;
asm mov ah, 0x03; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Reguster BH = 0 heksadesimal
asm mov VIDEO_INT; // Lakukan interupsi
asm mov row, dh; // Salin register DH ke row
asm mov col, dl; // Salin register DL ke col
*y = row; *x = col; // Salin row ke y, col ke x
return;
}
void setCursorPos(UCHAR y,UCHAR x) // Memindahkan posisi kursor
{
asm mov ah, 0x02; // Register AH = 2 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov dh, y; // Register DH = letak baris
asm mov dl, x; // Register DL = letak kolom
asm int VIDEO_INT; // Lakukan interupsi
return;
}
void writeChar(UCHAR letter,UCHAR attr) // Mencetak huruf
{
asm mov ah, 0x09; // Register AH = 9 heksadesimal
asm mov al, letter; // Register AL = hurufnya
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov bl, 0x09; // Register BL = warna huruf
asm mov ch, 0x00; // Register CH dan CL menentukan
asm mov cl, 0x0a; // banyak pencetakan
asm int VIDEO_INT; // Lakukan interupsi
return;
}
|
Hasil output dari program tersebut saat berhasil running adalah sebagai berikut:
Keterangan:
Hasil output dari program tersebut adalah tampilan text M disisi kiri atas layar / parameter y dan text B ada disisi kanan tengah layar / parameter x dengan warna text adalah biru,
Setelah memahami cara menampilkan karakter dengan warna karakternya, tentu akan timbul pertanyaan tentang bagaimana cara menampilkan string (rangkaian karakter) dengan warna-warna karakternya. Dan untuk menjawab pertanyaan itu mari kita pelajari kode program berikut ini.
& Berikut ini adalah contoh program untuk menampilkan string (rangkaian karakter) dengan warna-warna karakternya.
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define VIDEO_INT 0x10
#define UCHAR unsigned char
void getCursorPos(UCHAR *y, UCHAR *x);
void setCursorPos(UCHAR y, UCHAR x);
void writeChar(UCHAR letter, UCHAR attr);
void writeString(UCHAR *str, UCHAR attr);
int main(void)
{
UCHAR baris, kolom;
getCursorPos(&baris, &kolom);
writeChar('#', 0x1a);
setCursorPos(baris, ++kolom);
writeString("Mencetak String", 0x49);
getCursorPos(&baris, &kolom);
setCursorPos(baris, ++kolom);
writeChar('#', 0x1c);
setCursorPos(baris, ++kolom);
getch();
return EXIT_SUCCESS;
}
void getCursorPos(UCHAR *y, UCHAR *x)
{
UCHAR row, col;
asm mov ah, 0x03;
asm mov bh, 0x00;
asm int VIDEO_INT;
asm mov row, dh;
asm mov col, dl;
*y = row; *x = col;
return;
}
void setCursorPos(UCHAR y, UCHAR x)
{
asm mov ah, 0x02;
asm mov bh, 0x00;
asm mov dh, y;
asm mov dl, x;
asm int VIDEO_INT;
return;
}
void writeChar(UCHAR letter, UCHAR attr)
{
asm mov ah, 0x09;
asm mov al, letter;
asm mov bh, 0x00;
asm mov bl, attr;
asm mov ch, 0x00;
asm mov cl, 0x0a;
asm int VIDEO_INT;
return;
}
void writeString(UCHAR *str, UCHAR attr)
{
UCHAR x, y;
getCursorPos(&y, &x);
for (; *str != '\0'; str++)
{
if (x > 79)
{
y++; x = 0;
}
setCursorPos(y, x++);
writeChar(*str, attr);
}
return;
}
|
Pada program kali ini merupakan pengembangan dari program sebelumnya. Pada program ini terdapat fungsi writeString, fungsi ini menggunakan parameter str dan attr. Parameter str dikirimkan secara acuan dan berisi rangkaian karakter (string) yang akan dicetak. Sedangkan parameter attr dikirimkan secara nilai untuk menentukan warna string saat ditampilkan. Fungsi writeString memanggil fungsi writeChar untuk mencetak rangkaian karakternya satu per satu.
Berikut ini adalah script coding diatas yang dikerjakan pada lembar project Borlan C++:
Hasil output dari program tersebut saat berhasil running adalah sebagai berikut:
Keterangan:
Hasil output dari program tersebut adalah menampilkan karakter (tagar/# dan kalimat "mencetak string") dengan kombinasi warna pada background dan karakter itu sendiri.
Conversion Conversion Emoticon Emoticon