Memilih Mode Video pada BIOS

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.
        &  Berikut ini adalah contoh program sederhana untuk memilih mode video 02 heksadesimal (16 warna gray text, 25 baris, 80 kolom) kemudian mengembalikannya menjadi mode video normal menggunakan fungsi int86.
#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++.
          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++.
          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.
          Berikut ini adalah contoh program diatas yang dikerjakan pada lembar project Borlan C++.
          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