Rabu, 17 Mei 2017

Interupsi BIOS untuk Memilih Mode Video pada Operasi Layar Program C++


Interupsi BIOS untuk Memilih Mode Video pada Operasi Layar Program C++

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. Tabel berikut menjelaskan beberapa mode video teks.

Prosedur untuk 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.
Sebagai contoh, berikut ini adalah 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 contoh project cpp003.ide dan nama file kode program contoh project cpp003.cpp.

*anda bebas menentukan nama penyimpanan sesuka anda
#include<conio.h>
#include<dos.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>

#define VIDEO_INT 0x10
#define UCHAR unsigned char

void setMode(UCHAR mode);
int main(void)
{
  textcolor(6);
  cprintf("Tekan ENTER Untuk Mengubah Mode...\n");
  getch();

  textcolor(5);
  setMode(0x01);
  cprintf("Mode 02 Heksadesimal.\n"); cout<<endl;
  printf("Tekan ENTER Kembali Ke Mode Normal...");
  getch();

  textcolor(9);
  setMode(0x03);
  cprintf("++++++Mode Normal++++++\n");
  getch();

  return EXIT_SUCCESS;
}
void setMode(UCHAR mode)
{
  union REGS in, out;

  in.h.ah = 0x00;
  in.h.al = mode;

  int86(VIDEO_INT, &in, &out);

  return;
}


Berikut ini adalah contoh codingan contoh project cpp003 yang sama seperti di atas:

Berikut ini adalah output atau hasil keluaran yang sudah di running:




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 contoh project cpp003, namun bit ke-7 pada register AL akan diset menjadi 1 dan menggunakan teknik inline assembly. Simpan project berikut dengan nama contoh project cpp04.ide dan nama file kode program contoh project cpp004.cpp.

*anda bebas menentukan nama penyimpanan sesuka anda
#include<conio.h>
#include<dos.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>

#define VIDEO_INT 0x10
#define UCHAR unsigned char

void setMode(UCHAR mode);

int main(void)
{
  printf("Tekan Enter Untuk Mengubah Mode.\n");
  getch();

  setMode(0x01);
  printf("Mode 01 Heksadesimal\t\t\n");
  printf("Tekan Enter Kembali Ke Mode Normal...");
  getch();

  setMode(0x03);
  textcolor(14);
  cprintf("++++++Mode Normal++++++\n");
  getch();
  return EXIT_SUCCESS;
}

void setMode(UCHAR mode)
{
  asm mov ah, 0x00;
  asm mov al, mode;
  asm or al, 0x80;
  asm int VIDEO_INT;

  return;
}


Berikut ini adalah contoh codingan contoh project cpp004 yang sama seperti di atas:

Berikut ini adalah output atau hasil keluaran yang sudah di running:



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, simpan project berikut ini dengan nama file contoh project cpp005.ide dan kode program contoh project cpp005.cpp.

*anda bebas menentukan nama penyimpanan sesuka anda
#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 = 0x0e;
  in->h.al = 0x01;
  in->h.bh = 0x04;
  int86(VIDEO_INT, in, reg);
  return;
}

Berikut ini adalah contoh codingan contoh project cpp005 yang sama seperti di atas:

Berikut ini adalah output atau hasil keluaran yang sudah di running:

Sekian tutotial dari saya mengenai Interupsi BIOS untuk Memilih Mode Video pada Operasi Layar Program C++. Jika program di atas tidak mau running, coba anda periksa lagi codingan yang anda ketikan sebelumnya karena program Borland C++ ini sangat sensitive, jika salah sedikit dan tidak akan mau running. Jadi, harus teliti ya teman-teman dalam mengetikan program di Borland C++.

Related Posts

Interupsi BIOS untuk Memilih Mode Video pada Operasi Layar Program C++
4/ 5
Oleh

Subscribe via email

Like the post above? Please subscribe to the latest posts directly via email.