Rabu, 22 Juni 2016

latihan-latihan BAB II

program dengan menggunakan int86 untuk menampilkan output seperti tulisan dibawah ini dengan warna huruf putih dan warna latar biru



kode program:
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#define VIDEO_INT 0x10 // Nomor interupsi 10h
#define UCHAR unsigned char
int main(void)
{
union REGS in, out; // Deklarasi fungsi untuk
// Pengeluaran mode video
UCHAR h1,h2,x,y;
h1 = h2 = x = y = 0;
for(h1 = 1;h1 < 5;h1++)
{
for(h2 = 0;h2 < h1;h2++)
{
in.h.ah = 0x02; // AH = 2 heksadesimal
in.h.bh = 0x00; // BH = 00, halaman video
in.h.bl = 0x07; // BL = 7, warna huruf dan dasar
in.h.dh = y;
in.h.dl = x;
int86(VIDEO_INT, &in, &out);
in.h.ah = 0x09; // AH = 9 heksadesimal
in.h.al = 0x41 + h2;
in.h.bh = 0x00; // BH = 0, halaman video
in.h.bl = 0x17; // BH = 17, halaman video
in.h.ch = 0x00; // CH dan CL menentukan
banyak
in.h.cl = 0x01; // huruf yang akan dicetak
int86(VIDEO_INT, &in, &out);
x += 2;
}
x = 0; y++;
}
getch();
return EXIT_SUCCESS;
}
hasil outputnya:


5.program untuk menampilkan output seperti dibawah ini menggunakan teknik inline assembly
kode program :
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define VIDEO_INT 0x10 // BIOS Video Interrupt
#define UCHAR unsigned char
int main(void)
{
union REGS in, out; // Deklarasi fungsi untuk
// pengeluaran mode video
UCHAR h1, h2, x, y;
h1 = h2 = x = y = 0;
for (h1 = 1; h1 < 6; h1++)
{
for (h2 = 0; h2 < h1; h2++)
{
asm mov ah, 0x02; // AH = 2 heksadesimal
asm mov bh, 0x00; // BH = 0, halaman video
asm mov bl, 0x07; // BL = 7, warna huruf dan dasar
asm mov dh, x;
asm mov dl, y;
asm int VIDEO_INT;
asm mov ah, 0x09; // AH = 9 heksadesimal
asm mov al, 0x41;
asm mov bh, 0x00; // BH = 0, halaman video
asm mov bl, 0x017; // BH = 17, halaman video
asm mov ch, 0x00; // CH dan CL menentukan banyak
asm mov cl, 0x01; // huruf yang akan dicetak
asm int VIDEO_INT;
x += 2;
}
x = 0; y++;
}
getch();
return EXIT_SUCCESS;
}
hasil outputnya :
6. dengan memanfaatkan pustaka class screen.cpp dapat di buat sebuah program dengan hasil output bingkai
kode program :
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#define VIDEO_INT 0x10
#define UCHAR unsigned char
void getCursorPos(UCHAR *y, UCHAR *x);
void setCursorPos(UCHAR y, UCHAR x);
void writeChar(UCHAR letter, UCHAR attr);
int main(void)
{
UCHAR baris, kolom;
getCursorPos(&baris,&kolom); // Baca posisi kursor
setCursorPos(5, 10);
writeChar(0xc9, 0x1f); // Cetak karakter
setCursorPos(5, 69); // Pindahkan kursor
writeChar(0xbb, 0x1f); // Cetak karakter
setCursorPos(19, 10);
writeChar(0xc8, 0x1f); // Cetak karakter
setCursorPos(19, 69); // Pindahkan kursor
writeChar(0xbc, 0x1f); // Cetak karakter
for(baris=6; baris<19; baris++)
{
setCursorPos(baris, 10);
writeChar(0xba, 0x1f); // Cetak karakter
setCursorPos(baris, 69); // Pindahkan kursor
writeChar(0xba, 0x1f); // Cetak karakter
}
for(kolom=11; kolom<69; kolom++)
{
setCursorPos(5, kolom);
writeChar(0xcd, 0x1f); // Cetak karakter
setCursorPos(19, kolom); // Pindahkan kursor
writeChar(0xcd, 0x1f); // Cetak karakter
}
getch();
return EXIT_SUCCESS;
}
void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi
{
// kursor
UCHAR row, col;
asm mov ah, 0x03; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm int VIDEO_INT; // Lakukan interupsi
asm mov row, dh; // Salin register DH ke row
asm mov col, dl; // Salin register DL ke col
*y = row; *x = col; // Salin row ke y, col ke x
return;
}
void setCursorPos(UCHAR y, UCHAR x) // Memindahkan
{ //
Posisi kursor
asm mov ah, 0x02; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov dh, y; // Register DH = letak baris
asm mov dl, x; // Register DL = letak kolom
asm int VIDEO_INT; // Lakukan interupsi
return;
}
void writeChar(UCHAR letter, UCHAR attr) // Mencetak
{
// huruf
asm mov ah, 0x09; // Register AH = 9 heksadesimal
asm mov al, letter; // Register AL = hurufnya
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov bl, attr; // Register BL = warna huruf
asm mov ch, 0x00; // Register CH dan CL menentukan
asm mov cl, 0x01; // banyak pencetakan
asm int VIDEO_INT; // Lakukan interupsi
return;
}
hasil outputnya adalah;

7Dengan memanfaatkan pustaka class screen.cpp buatlah sebuah program dengan ketentuan sebagai berikut:
 Pengguna menginputkan sebuah string pada halaman layar 0 (halaman pertama).
 String yang diketikan oleh pengguna akan ditampilkan setelah jeda 5 detik di halaman layar 1 (halaman kedua).
 Setelah jeda 5 detik di halaman 1, program akan kembali menampilkan halaman 0 kemudian membersihkan layar.
 Setelah jeda 5 detik di halaman 0, program kembali ke halaman 1 dan jeda kembali selama 3 detik kemudian program berhenti..
berikut kode programnya ;
#include<dos.h>
#include<stdlib.h>
#include "screen.cpp" // header screen.cpp
int main(void)
{
UCHAR i,j;
Screen *layar = new Screen();
layar->setAttribute(0x9f);
layar->setActivePage(0);
layar->writeString("Halaman pertama");
layar->setAttribute(0xcf);
layar->setActivePage(1);
layar->writeString("Halaman ke dua");
layar->setAttribute(0xcf);
layar->setActivePage(2);
for (i = 1; i < 11; i++)
{
j= i % 2;
layar->setVisualPage(j);
delay(2000);
}
delete layar;
return EXIT_SUCCESS;
}
hasil outputnya adalah :
8. program membuat progress bar dengan menggunakan screen.cpp
berikut kode programnya:

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#define VIDEO_INT 0x10
#define UCHAR unsigned char
void getCursorPos(UCHAR *y, UCHAR *x);
void setCursorPos(UCHAR y, UCHAR x);
void writeChar(UCHAR letter, UCHAR attr);
void writeString(UCHAR *str, UCHAR attr);
int main(void)
{
unsigned short int i, jeda;
setCursorPos(3,10);
writeString("Contoh Progress Bar", 0x0f); // Cetak String
setCursorPos(4,10);
writeString("-------------------", 0x0f); // Cetak String Garis
setCursorPos(5,10);
writeString("Waktu Jeda (maks. 3) : Detik", 0x0f); // Cetak String
setCursorPos(5,34);
scanf("%hu",&jeda);
jeda *= 100;
setCursorPos(8,10);
writeChar(0xda, 0x0f); // Cetak Sudut kiri atas
setCursorPos(8,34);
writeChar(0xbf, 0x0f); // Cetak sudut kanan atas
setCursorPos(10,10);
writeChar(0xc0, 0x0f); // Cetak sudut kiri bawah
setCursorPos(10,34);
writeChar(0xd9, 0x0f); // Cetak sudut kanan bawah
setCursorPos(9,10);
writeChar(0xb3, 0x0f); // Cetak garis tegak kiri
setCursorPos(9,34);
writeChar(0xb3, 0x0f); // Cetak garis tegak kanan
for(i=11; i<=33; i++)
{
setCursorPos(8,i);
writeChar(0xc4, 0x0f); // Cetak Character
setCursorPos(10,i); // Pindahkan kursor
writeChar(0xc4, 0x0f); // Cetak Character
}
for (i = 11; i <= 33; i++)
{
setCursorPos(9, i);
writeChar(0xdb,0x0e);
delay(jeda);
}
setCursorPos(9, 36);
writeString("SELESAI",0x0f);
getch();
return EXIT_SUCCESS;
}
void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi
{ // kursor
UCHAR row, col;
asm mov ah, 0x03; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm int VIDEO_INT; // Lakukan interupsi
asm mov row, dh; // Salin register DH ke row
asm mov col, dl; // Salin register DL ke col
*y = row; *x = col; // Salin row ke y, col ke x
return;
}
void setCursorPos(UCHAR y, UCHAR x) // Memindahkan
{ // Posisi kursor
asm mov ah, 0x02; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov dh, y; // Register DH = letak baris
asm mov dl, x; // Register DL = letak kolom
asm int VIDEO_INT; // Lakukan interupsi
return;
}
void writeChar(UCHAR letter, UCHAR attr) // Mencetak
{ // huruf
asm mov ah, 0x09; // Register AH = 9 heksadesimal
asm mov al, letter; // Register AL = hurufnya
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov bl, attr; // Register BL = warna huruf
asm mov ch, 0x00; // Register CH dan CL menentukan
asm mov cl, 0x01; // banyak pencetakan
asm int VIDEO_INT; // Lakukan interupsi
return;
}
void writeString(UCHAR *str, UCHAR attr) // Mencetak
{ // string
UCHAR x, y;
getCursorPos(&y, &x); // Simpan posisi kursor
for (; *str != '\0'; str++) // Loop sampai ditemukan
{ // NULL
if (x > 79)
{ // Jika sudah sampaikolom
y++; x = 0; // ke-80, pindah baris dan
} // pindah ke kolom ke-1
setCursorPos(y, x++); // Pindahkan posisi kursor
writeChar(*str, attr); // Cetak per karakter
}
return;
}
dan hasil outputnya :







0 komentar:

Posting Komentar

http://www.resepkuekeringku.com/2014/11/resep-donat-empuk-ala-dunkin-donut.html http://www.resepkuekeringku.com/2015/03/resep-kue-cubit-coklat-enak-dan-sederhana.html http://www.resepkuekeringku.com/2014/10/resep-donat-kentang-empuk-lembut-dan-enak.html http://www.resepkuekeringku.com/2014/07/resep-es-krim-goreng-coklat-kriuk-mudah-dan-sederhana-dengan-saus-strawberry.html http://www.resepkuekeringku.com/2014/06/resep-kue-es-krim-goreng-enak-dan-mudah.html http://www.resepkuekeringku.com/2014/09/resep-bolu-karamel-panggang-sarang-semut-lembut.html