• Tidak ada hasil yang ditemukan

FUNGSI / MAKRO SISTEM INTERUPSI DOS & AKSES PORT

N/A
N/A
Protected

Academic year: 2021

Membagikan "FUNGSI / MAKRO SISTEM INTERUPSI DOS & AKSES PORT"

Copied!
8
0
0

Teks penuh

(1)

FUNGSI / MAKRO SISTEM

INTERUPSI DOS & AKSES PORT

system()

Fungsi system() memungkinkan untuk menjalankan perintah DOS dari program C.

Fungsi ini akan melibatkan file DOS bernama COMMAND.COM, ketika melaksanakan

perintah DOS. Untuk menunjukkan lokasi COMMAND.COM, kita bisa mengaturnya

melalui variabel COMSPEC dalam DOS.

Bentuk deklarasi int system(const char *perintah) Prototipe pada file header stdlib.h atau process.h

Contoh 13.1:

Menggambarkan cara melaksanakan berbagai perintah DOS (seperti TYPE, DIR) dari

program C.

/*---*/ /* contoh pemakaian fungsi system() */ /*---*/

#include <stdio.h> /* prototipe gets() */

#include <conio.h> /* prototipe cprintf(), getch() & clrscr() */

#include <stdlib.h> /* prototipe exit(), system() */

#include <string.h> /* prototipe strchr(), strcpy() & strcat() */ void dir(void); void type(void); void del(void); void ke_dos(void); main() { char pilihan; do { clrscr();

cprintf(“ MENGAKSES PERINTAH DOS MELALUI C”); cprintf(“1. Melihat isi direktori\r\n”);

cprintf(“2. Melihat isi file\r\n”); cprintf(“3. Menghapus file\r\n”); cprintf(“4. ke DOS sementara\r\n”); cprintf(“5. selesai\r\n\r\n”);

cprintf(“pilihan ( 1. . 5 )? : ”); do

pilihan = getch();

(2)

case ‘1’ : dir(); break; case ‘2’ : type(); break; case ‘3’ : del(); break; case ‘4’ : ke_dos(); break; } } while (pilihan != ‘5’); } void dir(void) { clrscr(); system(“dir”);

cprintf(“\r\nTekan sembarang tombol”); getch(); } void type(void) { char perintah[80]; char namafile[80]; clrscr();

cprintf(“File yang akan dilihat isinya? : “); gets(namafile);

strcpy(perintah, “TYPE ”); strcat(perintah, namafile); system(perintah);

cprintf(\r\nTekan sembarang tombol”); getch(); } void del(void) { char perintah[80]; char namafile[80]; clrscr();

cprintf(“File yang akan dihapus? : “); gets(namafile);

strcpy(perintah, “DEL ”); strcat(perintah, namafile); system(perintah);

cprintf(\r\nTekan sembarang tombol”); getch();

}

void ke_dos(void) {

system(“”); /* di sistem dos, hingga perintah EXIT diberikan */ }

(3)

int86()

Fungsi int86() bermanfaat untuk melakukan interupsi secara software terhadap prosesor

komputer. Dalam hal ini :

Nmrintr

Nomor interupsi yang akan dilakukan

*inregs

Berisi data masukan bagi register dari prosessor

*outregs

Berisi data keluaran dari register, setelah interupsi dilaksanakan

Keluaran fungsi int86() berupa nilai register AX (nilai dari AX, setelah interupsi

dilaksanakan). Namun, jika carry flag (outregs Æ x.cflag) tidak bernilai sama dengan nol,

berarti ada suatu kesalahan.

Bentuk deklarasi int int86 (int nmrintr, union REGS *inregs,

union REGS *outregs ); Prototipe pada file header dos.h

Catatan:

REGS merupakan tipe union yang definisinya ada pada file judul dos.h. Definisinya adalah

sebagai berikut :

Struct WORDREGS

{

unsigned int ax, bx, cx, dx, si, di, cflag;

}

Struct BYTEREGS

{

unsigned char al, ah, bl, bh, cl, ch, dl, dh;

} union REGS { struct WORDREGS x; struct BYTEREGS h; }

Tampak bahwa pada union REGS :

1. h.al adalah byte orde terendah dari x.ax (register AL byte terendah dari register AX).

2. h.ah adalah byte orde tertinggi dari x.ax (register AH byte tertinggi dari register AX).

3. h.bl adalah byte orde rendah dari x.bx.

4. dll.

Contoh pemakaian int86(), yaitu untuk mengatur bentuk kursor. Bentuk kursor

sesungguhnya dapat diatur dengan menjalankan interupsi nomor 0x10, fungsi nomor 0x01.

Caranya, sebelum interupsi, register-register yang perlu diisi adalah :

(4)

Adapun data untuk pengaturan bentuk kursor adalah sebagai berikut :

Bentuk Kursor

Untuk Adapter

Normal Tersembunyi Besar

CGA

• Posisi garis awal

0x06 0x20 0x00

• Posisi garis akhir

0x07 0x20 0x07

Monochrome

• Posisi garis awal

0x0C 0x20 0x00

• Posisi garis akhir

0x0D 0x20 0x0D

Contoh 13.2:

Program berikut ini dapat digunakan untuk mengatur bentuk kursor baik yang menggunakan

adapter CGA maupun monochrome. Untuk mendeteksi mode layar yang sedang aktif,

program memanfaatkan fasilitas interupsi nomor 0x10, nomor fungsi 0x0F. Caranya

mula-mula register AH diisi dengan 0x0F. Setelah interupsi dijalankan, mode layar dapat diperiksa

pada register AL. Jika register AL bernilai 7, berarti bahwa mode yang aktif adalah mode

monochrome.

/*---*/ /* contoh pemakaian fungsi Int86() */ /* untuk mengatur bentuk kursor */ /*---*/ #include <conio.h> #include <dos.h> void kursor_besar(void); void kursor_sembunyi(void); void kursor_normal(void); void mode_video(void); main() { clrscr()

cputs(“ DEMO KURSOR\r\n\r\n”); kursor_besar();

cputs(“ KURSOR BESAR (Tekanlah sembarang tombol)”); getch();

clrscr()

kursor_sembunyi();

cputs(“ KURSOR SEMBUNYI (Tekanlah sembarang tombol)”); getch();

clrscr()

kursor_normal();

cputs(“ KURSOR NORMAL (Tekanlah sembarang tombol)”); getch();

(5)

void kursor_besar(void) /* Fungsi untuk membuat kursor berukuran besar */ {

union REGS inregs, outregs; inregs.h.ah = 0x01; inregs.h.ch = 0x00; if (mode_video() == MONO) inregs.h.cl = 0x0D; else inregs.h.cl = 0x07;

int86(0x10, &inregs, &outregs); }

void kursor_sembunyi(void) /* Fungsi untuk menyembunyikan kursor */ {

union REGS inregs, outregs; inregs.h.ah = 0x01;

inregs.h.ch = 0x20; inregs.h.cl = 0x20;

int86(0x10, &inregs, &outregs); }

void kursor_normal(void) /* Fungsi untuk menormalkan bentuk kursor */ {

union REGS inregs, outregs; inregs.h.ah = 0x01; if (mode_video() == MONO) { inregs.h.ch = 0x0C; inregs.h.cl = 0x0D; } else { inregs.h.ch = 0x06; inregs.h.cl = 0x07; int86(0x10, &inregs, &outregs); }

void mode_video(void) /* Fungsi untuk memperoleh mode video */ {

union REGS inregs, outregs; inregs.h.ah = 0x0F;

int86(0x10, &inregs, &outregs); return (outregs.h.al);

}

(6)

intdos()

Fungsi intdos() bermanfaat untuk menjalankan interupsi 0x21, yang melibatkan suatu fungsi

DOS. Dalam hal ini, fungsi DOS yang dilaksanakan ditentukan melalui register AH

(inregs → h.ah).

Bentuk deklarasi int intdos ( union REGS *inregs,

union REGS *outregs ); Prototipe pada file header dos.h

Hasil fungsi intdos() berupa isi register AX. Namun, jika carry flag (inregs → x.cflag) tidak

bernilai sama dengan nol, berarti ada suatu kesalahan.

Contoh 13.3:

Contoh berikut ini digunakan untuk mencetak string ke printer dengan menggunakan fasilitas

fungsi DOS nomor 0x05.

/*---*/ /* contoh pemakaian fungsi Intdos */ /* untuk mencetak string ke printer */ /*---*/

#include <dos.h>

void cetak_string(char *str);

main()

{

char *str = “MENCETAK STRING MENGGUNAKAN FUNGSI DOS 0x05” ; cetak_string(str);

}

void cetak_string(char *str) {

int indeks;

union REGS inregs, outregs; inregs.h.ah =

0x05

;

while (str[indeks]) {

inregs.h.dl = str[indeks++]; /* karakter yang akan dicetak */ intdos(&inregs, &outregs); /* Cetak karakter */

} }

(7)

inportb()

inportb() berfungsi untuk mendapatkan data sebuah byte dari port bernomor nmrport.

Bentuk deklarasi Unsigned char inportb( int nmrport );

Prototipe pada file header dos.h

inportb() dapat berupa fungsi atau makro. Jika file dos.h disertakan, inport() diperlakukan

sebagai makro. Inportb() diperlakukan sebagai fungsi, jika file dos.h tidak dilibatkan dalam

program, atau bila file dos.h disertakan, tetapi sesudah #include <dos.h> terdapat pengarah

preposessor berupa : # undef inportb.

outportb()

outportb() berfungsi untuk menempatkan nilai (berukuran 1 byte) ke port bernomor

nmrport.

Bentuk deklarasi void outportb( int nmrport, unsigned char nilai );

Prototipe pada file header dos.h

Catatan :

outportb() dapat berupa fungsi atau makro.

Contoh 13.4

Contoh berikut ini memberikan gambaran pemakaian outportb(). Dalam hal ini, fungsi

outportb() dipakai untuk mengatur warna pinggir layar.

/*---*/ /* contoh pemakaian fungsi outportb() */ /* untuk mengatur warna pinggir layar. */ /* khusus adapter CGA. */ /*---*/

#include <dos.h> main()

{

int warna;

for (warna=15; warna>=0; warna--) {

outportb(0x3D9, warna); /* Ubah warna pinggir layar */ delay(2000); /* Tunda sebentar */

} }

(8)

inport()

inport() berfungsi untuk mendapatkan data berukuran dua byte dari port bernomor nmrport.

Bentuk deklarasi Unsigned char inport( int nmrport );

Prototipe pada file header dos.h

Catatan :

Inport() dapat berupa fungsi atau makro.

outport()

outport() berfungsi untuk menempatkan nilai (berukuran 2 byte) ke port bernomor nmrport.

Bentuk deklarasi void outport( int nmrport, unsigned char nilai );

Prototipe pada file header dos.h

Catatan :

Referensi

Dokumen terkait

Peraturan Daerah Daerah Khusus Ibukota Jakarta Nomor 11 Tahun 1988 tentang Ketertiban Umum Dalam Wilayah Daerah Khusus Ibukota Jakarta (Lembaran Daerah Daerah, Khusus Ibukota

Purchasing pertanyaan untuk kepentingan audit 19 Agustus 2011 (8 jam) 08.00-09.00 09.00-12.00 Mempersiapkan diri untuk melakukan wawancara dengan divisi Marketing Ethical

Produk yang diharapkan akan dihasilkan melalui penelitian pengembangan berupa model sarana pembelajaran atletik alat lempar cakram melalui modifikasi ukuran berat,

 Ip(x,y)=255*[Io(x,y)-min]/(max-min)  Objek yang dikenali pada citra rontgen terkadang memiliki tepi yang kurang jelas sehingga tersamarkan dengan objek lain.

NIP 196101011988031009 Penata Tk.I/Kepala UPT BP4K2P Kecamatan Tilatang KamangUPT Badan Pelaksana Penyuluhan Pertanian, Perikanan, Kehutanan dan Ketahanan Pangan Kec..

Kompetensi Dasar IPK Indikator Soal Level Kognitif Bentuk soal Nomor soal Sko r 3.1.1 Mengidentifikasi interaksi sosial dalam ruang dan pengaruhnya terhadap kehidupan

Abstrak Pada dasarnya aliran fluida pada sistem perpipaan akan mengalami penurunan tekanan pressure drop .Hal ini dapat disebabkan karena beberap hal , diantaranya adalah aliran

Ekstrak Etanol Daun Pare terbukti mempunyai efek antihiperpigmentasi dan seluruh kelompok EEDP mempunyai efek yang lebih baik dibanding dengan sediaan krim