Wednesday, May 17, 2017

Memilih Mode Video Pada C++

coding, C++, pemogramman

Memilih Mode Video Pada C++

     Mode video adalah cara layar monitor menampilkan output, apakah output yang ditampilkan dalam bentuk matriks-matriks teks atau dalam bentuk picture element (pixel). 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.
 
     berikut ini table menjelaskan beberapa mode video teks :
 Nomer (Heksadesimal)
 Mode
 00
Hitam-putih, 25 baris, 40 kolom 
 01
Hitam-putih, 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 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.

      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.
#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("Hai Ahmad ZakariaTekan ENTER untuk melihat NIM anda...\n"); 
getch(); 

setMode(0x01);                                            // Ubah mode video

printf("NIM 13161257.\n");                        // Informasi 
printf("Tekan ENTER unryuk melihat selengkapnya..."); 
getch(); 

setMode(0x03);                                            // Ahmad Zakaria NIM 13161257
printf("Ahmad Zakaria NIM 13161257\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; 
 }

      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 di atas namun bit ke-7 pada register AL akan diset menjadi 1 dan menggunakan teknik inline assembly.

      Berikut ini hasil foto codingan contoh di atas ;
C++, coding, pemogramman
      Dan berikut ini adalah hasil runing codingan contoh di atas :
C++, codingan, pemogramman
     
C++, codingan, pemogramman, runing

C++, coding, pemogramman, runing

#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("Hai Ahmad Zakaria tekan ENTER untuk melihat NIM anda ..!!\n");
getch();

setMode(0x01);                                                                     // Ubah mode video
printf("NIM anda adalah 13161257\n");                                      // Informasi
printf("Tekan ENTER untuk melihat kelas anda ...!!!");
getch();

setMode(0x03);                                                                     // Kembali ke mode normal
printf("Kelas anda adalah 13.2B.37\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;
 }

     
Berikut ini adalah foto codingan di atas :

C++, coding, pemogramman


Dan berikut ini adalah hasil runningan di atas :

C++, coding, pemogramman, runing

C++, coding, pemogramman, runing

C++, coding, pemogramman, runing

      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 ;
#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("Data Mahasiswa\n"); 
printf("NAMA\t\t: Ahmad Zakaria\n", layar.h.ah); 
printf("NIM\t\t: 13161257\n", layar.h.al); 
printf("Kelas\t\t: 132B37\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; 
}

      Berikut ini foto hasil codingan seperti contoh di atas;
C++, codingan, pemogramman

      Dan ini hasil runing codingan seperti contoh di atas :
C++, codingan, pemogramman, runing

Sekian dulu yang dapat saya sampaikan kurang lebihnya saya mohon maaf,
Wassallamuallaikum.wr.wb

Komentar spam dilarang
EmoticonEmoticon