Memanggil Interupsi BIOS dan DOS Menggunakan Fungsi int86
Borland C++ 5.02 menyediakan sebuah fungsi untuk menjalankan interupsi BIOS atau DOS, yaitu fungsi int86. Nama fungsi ini dideklarasikan di file header dos.h, berikut ini adalah sintaks dari fungsi int86:
int int86(int nomor, union REGS
*inregs,
union REG *outregs)
|
- int nomor, nomor interupsi yang akan dijalankan.
- union REGS *inregs, representasi register pada mikroprosesor yang berisi nilai yang akan digunakan untuk menjalankan interupsi.
- union REGS *outregs, representasi register pada mikroprosesor setelah interupsi dijalankan.
Pada fungsi int86, parameter nomor bertipe integer dan dikirimkan secara nilai (by value), sedangkan parameter inregs dan outregs merupakan tipe data union REGS yang telah didefinisikan pada header dos.h dan dikirimkan secara acuan (by reference). Diharapkan pembaca telah memahami tipe data union dan struktur serta pengiriman parameter secara acuan atau secara nilai. Fungsi int86 mengembalikan nilai bertipe integer dari register AX setelah interupsi dijalankan. Tipe data union REGS yang didefinisikan pada file header dos.h merupakan union yang terdiri dari struktur WORDREGS dan BYTEREGS. Berikut ini adalah deklarasi union REGS pada file header dos.h:
Sedangkan deklarasi struktur WORDREGS dan BYTEREGS adalah sebagai berikut:
union REGS {
struct WORDREGS x;
struct BYTEREGS h;
};
|
struct BYTEREGS {
unsigned char al, ah, bl, bh;
unsigned char cl, ch, dl, dh;
};
struct WORDREGS {
unsigned int ax, bx, cx, dx;
unsigned int si, di, cflag, flags;
};
|
Dari perincian diatas, dapat disimpulkan bahwa struktur BYTEREGS merepresentasikan register-register pada General Purpose Register yang berukuran 8 bit (1 byte), yaitu AL, AH, BL, BH, CL, CH, DL dan DH. Sedangkan struktur WORDREGS merepresentasikan register-register pada General Purpose Register yang berukuran 16 bit (2 byte) ditambah register SI, DI dan Flag Register. Struktur WORDREGS maupun BYTEREGS menempati lokasi memori yang sama dalam union REGS.
Berikut ini adalah contoh sederhana penggunaan int86 untuk mencetak karakter menggunakan interupsi BIOS 10 heksadesimal servis 09 heksadesimal. Simpan contoh dibawah ini dengan nama contoh project cpp001.ide dan kode program contoh project cpp001.cpp.
*anda bebas untuk menentukan nama penyimpanan sesuka anda
File header yang akan digunakan, yaitu conio.h, dos.h dan stdlib.h. conio.h digunakan karena kita akan menggunakan fungsi clrscr dan kita akan menggunakan fungsi getch, dos.h digunakan karena kita mendeklarasikan variabel in dan out menggunakan tipe union REGS dan kita akan memanggil fungsi int86, stdlib.h digunakan karena kita akan menggunakan nilai konstanta EXIT_SUCCESS. VIDEO_INT digunakan untuk mendeklarasikan konstanta yang bernilai 10 heksadesimal. Konstanta ini digunakan saat memanggil fungsi video int86 untuk menjalankan interupsi 10 heksadesimal servis 9 heksadesimal. Cobalah untuk mengganti nilai pada in.h.bl dari yang semula 0x90 menjadi nilai lain, misalnya 0x0a, 0x04, 0x08, 0x10. Pada in.h.ah, atau in.h.al dan sebagainya berarti memberikan nilai union REGS pada struktur BYTEREGS dengan nama h dan field ah atau al yang bertipe unsigned character.
Berikut ini adalah contoh condingan contoh project cpp001 yang sama seperti di atas:
Berikut ini adalah contoh sederhana penggunaan int86 untuk mencetak karakter menggunakan interupsi BIOS 10 heksadesimal servis 09 heksadesimal. Simpan contoh dibawah ini dengan nama contoh project cpp001.ide dan kode program contoh project cpp001.cpp.
*anda bebas untuk menentukan nama penyimpanan sesuka anda
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#define VIDEO_INT 0x10 // BIOS Video
Interrupt
int main(void)
{
union REGS in, out; // Deklarasi variabel
in.h.ah = 0x09; // AH = 9 heksadesimal
in.h.al = 'A'; // AL = 41 heksadesimal, huruf A
in.h.bh = 0x00; // BH = 0, halaman video
in.h.bl = 0x90; // BL = 90, warna huruf dan dasar
in.h.ch = 0x00; // CH dan CL menentukan banyak
in.h.cl = 0x08; // huruf yang akan dicetak
clrscr();
int86(VIDEO_INT, &in, &out);
getch();
return EXIT_SUCCESS;
}
|
Berikut ini adalah contoh condingan contoh project cpp001 yang sama seperti di atas:
Berikut ini adalah output atau hasil keluaran yang sudah di running:
Sekian tutotial dari saya mengenai bagaimana cara Memanggil Interupsi BIOS dan DOS Menggunakan Fungsi int86 Pada 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++.
Sekian tutotial dari saya mengenai bagaimana cara Memanggil Interupsi BIOS dan DOS Menggunakan Fungsi int86 Pada 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++.
Memanggil Interupsi BIOS atau DOS Menggunakan Fungsi int86 pada C++
4/
5
Oleh
Krisna Aji