A. Menampilkan Karakter dan Memindahkan Posisi Kursor
Program contoh01.cpp dan dan contoh02.cpp pada
bab 1 merupakan contoh program untuk menampilkan karakter/huruf pada layar
monitor. Pada sub bab ini akan dibahas cara menampilkan karakter menggunakan interupsi
10 heksadesimal servis 09 heksadesimal secara lebih mendalam. Untuk lebih
jelasnya, berikut ini adalah prosedur untuk menjalankan interupsi 10
heksadesimal servis 09 heksadesimal:
Register AH berisi nilai 9 heksadesimal.
: 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.
Permasalahan 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).
Berikut ini adalah contoh program untuk
menampilkan huruf D,O,D dan Y dengan warna dasar biru dan warna huruf putih.
Simpan project berikut ini dengan nama file contoh06.ide dan nama file kode
program.
Contoh 06.cpp:
#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 kursur
writeChar('D',
0x1f); // Cetak huruf D
setCursorPos(baris,
++kolom); // Pindahkan kursor
writeChar('O',
0x1f); // Cetak huruf O
setCursorPos(baris,
++kolom); // Pindahkan kursor
writeChar('D',
0x1f); // Cetak huruf D
setCursorPos(baris,
++kolom); // Pindahkan kursor
writeChar('Y',
0x1f); // Cetak huruf Y
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; // Register BH = 0 heksadesimal
asm int
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 = 3 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,
attr; // Register BL = warna huruf biru
asm mov ch,
0x00; // Register CH dan CL menentukan
asm mov cl,
0x01; // banyak pencetakan
asm int
VIDEO_INT; // Lakukan interupsi
return;
}
Program diatas terdiri dari empat fungsi,
yaitu fungsi main, getCursorPos, setCursorPos dan writeChar. Fungsi
getCursorPos berguna untuk mengetahui posisi kursor, fungsi ini mengirimkan
parameter y dan x secara acuan. Setelah pemanggilan fungsi, parameter x
menyimpan posisi kolom kursor sedangkan parameter y menyimpan posisi baris
kursor. Fungsi setCursorPos digunakan untuk memindahkan posisi kursor, fungsi
ini mengirimkan parameter y dan x secara nilai. Parameter y digunakan untuk
menentukan posisi baris sedangkan parameter x untuk menentukan posisi kolom
kursor. Fungsi getCursorPos hampir mirip dengan fungsi wherex dan wherey milik
Borland C++ atau Turbo Pascal, sedangkan fungsi setCursorPos hampir mirip
dengan fungsi gotoxy.
Fungsi writeChar digunakan untuk menampilkan
karakter, fungsi ini mengirimkan parameter letter dan attr secara nilai.
Parameter letter berisi karakter yang akan ditampilkan sedangkan parameter attr
menentukan atribut karakter (warna karakter dan warna dasar). Fungsi ini tidak
mengubah posisi kursor, oleh karena itu sesudah pemanggilan fungsi, untuk
memindahkan posisi kursor digunakan fungsi setCursorPos.
Program diatas terdiri dari empat fungsi,
yaitu fungsi main, getCursorPos, setCursorPos dan writeChar. Fungsi
getCursorPos berguna untuk mengetahui posisi kursor, fungsi ini mengirimkan
parameter y dan x secara acuan. Setelah pemanggilan fungsi, parameter x
menyimpan posisi kolom kursor sedangkan parameter y menyimpan posisi baris
kursor. Fungsi setCursorPos digunakan untuk memindahkan posisi kursor, fungsi
ini mengirimkan parameter y dan x secara nilai. Parameter y digunakan untuk
menentukan posisi baris sedangkan parameter x untuk menentukan posisi kolom
kursor. Fungsi getCursorPos hampir mirip dengan fungsi wherex dan wherey milik
Borland C++ atau Turbo Pascal, sedangkan fungsi setCursorPos hampir mirip
dengan fungsi gotoxy.

0 komentar:
Posting Komentar