A. Interupsi BIOS untuk Operasi
Layar pada Modus Teks
Untuk melakukan operasi-operasi
pada layar seperti memilih mode video, menampilkan karakter dan lain-lain, BIOS
telah menyediakan nomor interupsi khusus, yaitu interupsi 10 heksadesimal.
Operasi-operasi yang akan dilakukan sebelum menjalankan interupsi ini ditentukan
oleh nilai yang disimpan dalam register AH.
B. Memilih Mode Video
Mode
video adalah cara layar monitor menampilkan output, apakah output yang
ditampilkan dalam bentuk matriks-matriks teks atau dalam bentuk picture
element (pixel). Pada sub bab ini akan dibahas cara menggunakan mode
video teks. Mode teks sendiri memiliki beberapa mode lain yang dapat dipilih,
normalnya mode yang digunakan pada layar monitor masa kini adalah mode teks 25
baris 80 kolom dan mampu menampilkan 16 warna yang berbeda.
Sebagai
contoh, berikut ini adalah hanya sebagian program untuk memilih mode video 01
heksadesimal (16 warna, 25 baris dan 40 kolom) kemudian mengembalikannya
menjadi mode video normal menggunakan fungsi int86. Simpan project berikut ini
dengan nama contoh03.ide dan nama file kode program contoh03.cpp.
Contoh
3:
#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(0x01); // Ubah mode video
printf("Mode 01 heksadesimal.\n"); // Informasi
printf("Tekan ENTER kembali ke mode normal...");
getch();
Pada
contoh diatas, setiap terjadi pergantian mode video akan selalu menimbulkan
efek clear screen. Bagaimana cara menghilangkan efek clear screen ini?
Jawabnya adalah dengan menset bit ke-7 pada register AL menjadi 1. Berikut ini
adalah contoh yang sama seperti pada contoh03.cpp, namun bit ke-7 pada register
AL akan diset menjadi 1 dan menggunakan teknik inline assembly.
Contoh
4:
#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(0x01); // Ubah mode video
printf("Mode 01 heksadesimal.\n"); // Informasi
printf("Tekan ENTER kembali ke mode normal...");
getch();
setMode(0x03); // Kembali ke mode normal
printf("Mode normal\n");
Kedua contoh program sebelumnya digunakan untuk
mengubah mode video. Bagaimana jika 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 ini adalah
contoh programnya.
Contoh 5:
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#define VIDEO_INT 0x10
void getMode(union REGS *reg);
10 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)
{







Tidak ada komentar:
Posting Komentar