Memilih Mode Video pada BIOS
Mode video adalah cara layar monitor menampilkan output, apakah output yang ditampilkan dalam bentuk matriks-matriks teks atau dalam bentuk picture element (pixel). Pada artikel kali ini akan dibahas cara menggunakan mode video teks. Mode teks sendiri memiliki beberapa mode lain yang dapat dipilih,namun dimasa kini normalnya mode video yang digunakan adalah mode teks 25 baris 80 kolom dan mampu menampilkan 16 warna yang berbeda. Pada tabel dibawah ini akan menjelaskan beberapa mode video teks :
Tabel Mode Video Teks
Nomor
(heksadesimal)
|
Mode
|
00
|
Hitam-putih, 25 baris, 40 kolom
|
01
|
16 warna, 25 baris, 40 kolom
|
02
|
16 warna gray text, 25 baris, 80 kolom
|
03
|
16 warna, 25 baris, 80 kolom
|
07
|
Monochrome, 25 baris, 80 kolom
|
Prosedur dalam memilih mode video menggunakan interupsi 10 heksadesimal adalah sebagai berikut:
& Register AH harus bernilai 0.
& Register AL berisi nomor dari mode video
yang akan digunakan.
|
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#define VIDEO_INT 0x10 //
Nomor interupsi 10h
#define UCHAR unsigned char
void setMode(UCHAR mode); //
Deklarasi fungsi untuk mengubah
mode video
int main(void)
{
printf("Tekan ENTER
untuk mengubah mode...\n");
getch();
setMode(0x02); //
Ubah mode video
printf("Mode 02 heksadesimal...\n"); // Informasi
printf("Tekan ENTER
kembali ke mode normal..\n");
getch();
setMode(0x03); //
Kembali ke mode normal
printf("mode
normal\n");
getch();
return EXIT_SUCCESS;
}
void setMode(UCHAR mode)
{
union
REGS in, out; //
Deklarasi variabel
in.h.ah =
0x00; //
Register AH = 0
in.h.al =
mode; //
Register AL = mode
int86(VIDEO_INT, &in, &out); //
Jalankan interupsi
return;
}
|
Dalam program tersebut mode video yang digunakan adalah 02 heksadesimal,dan kemudian dikembalikan lagi ke dalam mode video normal yaitu 03.
Berikut ini adalah contoh program diatas saat dikerjakan pada lembar project BorlanC++.
Berikut ini adalah contoh program diatas saat dikerjakan pada lembar project BorlanC++.
Hasil output dari program tersebut saat berhasil running adalah sebagai berikut:
Keterangan:
Hasil running dari program tersebut adalah menampilkan text informasi (1,2 dan 3) secara cantinue / berurutan dengan efek clear screen.
Hasil output dari program yang dibuat menimbulkan efek clear screen,lantas bagaimana cara untuk menghilangkan efek clear screen tersebut? Jawabannya adalah dengan menset bit ke-7 pada pada register AL menjadi 1.
& Berikut adalah contoh program yang sama seperti pada contoh program sebelumnya,namun pada program ini bit ke-7 pada register AL akan diset menjadi 1 untuk menghilangkan efek clear screen dan menggunakan teknik inline assembly.
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#define VIDEO_INT 0x10 //
Nomor interupsi 10h
#define UCHAR unsigned char
void setMode(UCHAR mode); //
Deklarasi fungsi unkuk
int main(void) //
mengubah mode video
{
printf("Tekan ENTER untuk mengubah mode...\n");
getch();
setMode(0x02); //
Ubah Mode Video
printf("Mode 02 heksadesimal...\n"); // Informasi
printf("Tekan ENTER kembali ke mode normal..\n");
getch();
setMode(0x03); //
Kembali ke mode normal
printf("Mode normal\n");
getch();
return EXIT_SUCCESS;
}
void setMode(UCHAR mode)
{
asm mov ah, 0x00; //
Register AH = 0
asm mov al, mode; //
Register AL = mode
asm or al, 0x70; //
OR-kan dengan 70 heksadesimal
asm int VIDEO_INT; //
Lakukan interupsi
return;
}
|
Sama seperti dalam contoh program sebelumnya,pada contoh program ini pun masih menggunakan mode video 02 heksadesimal dan kemudian dikembalikan lagi ke dalam mode video normal yaitu 03 heksadesimal. Hanya yang membedakan pada contoh program ini adalah dihilangkannya efek clear screen,dan menggunakan teknik inline assembly.
Berikut ini adalah contoh program diatas yang dikerjakan pada lembar project Borlan C++.
Berikut ini adalah contoh program diatas yang dikerjakan pada lembar project Borlan C++.
Berikut ini adalah contoh program diatas yang dikerjakan pada lembar project Borlan C++.
Hasil output dari program tersebut setelah berhasil running pun sama dengan seperti diartikel sebelumnya yaitu menampilkan informasi dari mode video,sebagai berikut:
Keterangan:
Tampilan text informasi mode video (1.2 dan 3) ditampilkan secara continue/berurutan tanpa adanya efek clear screen.
Fungsi dari kedua contoh program diatas adalah digunakan untuk mengubah mode video. Lantas bagaimana jika pada kasus dimana kita tidak mengetahui mode video yang sedang digunakan? Jawabnya adalah dengan menjalankan interupsi 10 heksadesimal servis 0f heksadesimal. Setelah interupsi ini dijalankan register AH berisi banyaknya kolom, register AL berisi nomor mode video yang digunakan dan register BH berisi nomor halaman tampilan yang digunakan.
& Berikut adalah contoh program yang digunakan untuk mengetahui mode video yang sedang digunakan.
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#define VIDEO_INT 0x10
void getMode(union REGS *reg);
int main(void)
{
union REGS layar;
getMode(&layar);
printf("Informasi Layar Monitor\n");
printf("Banyak kolom\t\t: %d\n", layar.h.ah);
printf("Nomor mode\t\t: %0x\n", layar.h.al);
printf("Halaman tampilan\t: %d\n", layar.h.bh);
getch();
return EXIT_SUCCESS;
}
void getMode(union REGS *reg)
{
union REGS *in;
in->h.ah = 0x0f;
int86(VIDEO_INT, in, reg);
return;
}
|
Pada program tersebut yang kita jalankan adalah interupsi 10 heksadesimal servis 0f heksadesimal. Saat interupsi tersebut dijalankan register AH akan menampilkan banyaknya kolom, sedangkan register AL akan menampilkan nomor mode video dan register BH akan menampilkan nomor halaman tampilan yang sedang digunakan.
Hasil output dari program tersebut saat berhasil running adalah sebagai berikut:
Keterangan:
Register AH > menampilkan banyak kolom
Register AL > menampilkan nomor mode video
Register BH > menampilkan halaman tampilan
Conversion Conversion Emoticon Emoticon