Memanggil Interupsi BIOS atau DOS Menggunakan Fungsi int86

Memanggil Interupsi BIOS atau DOS Menggunakan Fungsi int86


          Borland C++ 5.02 menyediakan fungsi untuk menjalankan interupsi BIOS atau DOS, yaitu fungsi int86. Fungsi ini dideklarasikan di file header dos.h, berikut ini adalah sintaks dari fungsi int86:
int86(int nomor,  union REGS *inregs, union REGS *outregs)
Keterangan:
 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).Fungsi int86 mengembalikan nilai 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:
union REGS {
  struct WORDREGS x;
  struct BYTEREGS h;
};
Sedangkan deklarasi struktur WORDREGS dan BYTEREGS adalah sebagai berikut:
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;
};
 Keterangan:
 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.
 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 contoh sederhana penggunaan fungsi int86 untuk mencetak karakter menggunakan interupsi BIOS 10 heksadesimal servis 09 heksadesimal:
#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  = 'B';                                             // AL = 41 heksadesimal, huruf B
in.h.bh = 0x00;                                        // BH = 0, halaman video
in.h.bl  = 0x09;                                         // BL = 9, warna huruf dan dasar
in.h.ch = 0x00;                                         // CH dan CL menentukan banyak
in.h.cl  = 0x09;                                         // huruf yang akan dicetak

clrscr();
int86(VIDEO_INT, &in, &out);
getch();

return EXIT_SUCCESS;
}
          Pada program diatas file header yang digunakan adalah conio.h, dos.h dan stdlib.h. Header conio.h digunakan untuk fungsi "clrscr" dan fungsi "getch". Header dos.h digunakan untuk mendeklarasikan variabel in dan out menggunakan tipe union REGS dan memanggil fungsi int86. Header stdlib.h digunakan untuk nilai konstanta EXIT_SUCCESS.
          VIDEO_INT adalah konstanta yang bernilai 10 heksadesimal.Konstanta ini digunakan untuk memanggil fungsi video int86 saat menjalankan interupsi 10 heksadesimal servis 9 heksadesimal.
          Pada contoh program diatas variabel yang digunakan bernama "in" dan "out".Pada contoh diatas 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 script coding diatas yang dikerjakan pada lembar project Borlan C++:
          Hasil output dari program tersebut saat berhasil running adalah sebagai berikut:
          Output dari program tersebut adalah tampilan variabel huruf "B" sebanyak 9 digit dengan warna huruf biru.
Oldest