Matakuliah : T0074 / Grafika Komputer Tahun : 2005 Versi : Versi 1 / Revisi 0 Pertemuan 5 Pemrograman Grafik dengan instruksi primitif dan dengan bahasa pemrograman C/C++ dalam grafika komputer.
Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Mahasiswa mampu menghasilkan program grafik dengan instruksi primitif dan dengan bahasa pemrograman C/C++ dalam grafika Komputer.(OpenGl.)
Materi 1 : Program dengan instruksi primitif Outline Materi Materi 1 : Program dengan instruksi primitif Materi 2 : Penggunaan C/C++ dalam grafika Komputer(OpenGl).
Oleh : Djunaidy Santoso M.Kom. Pokok Bahasan (5) : Pemrograman grafik dengan akses memori langsung dan menggunakan fasilitas ROM BIOS dengan pemrograman bahasa C/C++(OFC) Oleh : Djunaidy Santoso M.Kom.
Pokok Bahasan (5) : Pemrograman grafik dengan akses memori langsung dan menggunakan fasilitas ROM BIOS dengan pemrograman bahasa C/C++(OFC)
INSTRUKSI PRIMITIF Jika kita hendak mengaktifkan modus grafik, maka pertama kali instruksi yang kita gunakan adalah “setmode()”. Kita memiliki dua pilihan untuk memprogramkan grafik :mengakses memori video secara langsung, atau memggunakan fasilitas yang disediakan oleh ROM BIOS Cara yang pertama umumnya lebih sulit membuat programnya, namun memiliki kecepatan proses yang lebih tinggi dibanding cara yang kedua. Pada pertemuan ini akan membahas cara membuat instruksi primitif dengan menggunakan ROM BIOS. Sebagian di antaranya telah kita bahas pada pertemuan yang lalu.
Menempatkan Posisi Kursor Membaca Posisi Kursor Set Modus Video Sudah kita bahas pada pertemuan yang lalu Menempatkan Posisi Kursor Membaca Posisi Kursor Pada modus teks kita bisa melihat posisi kursor. Namun pada modus grafik kursor itu tidak terlihat. ROM BIOS Video Service 03h Service 3 (03h) : Read Cursor Position INPUT TO BIOS OUTPUT FROM BIOS AH = 03 h DH = Row number BH = Page Number DL = Column number (0 for CGA graphics modes) CH = Cursor starting scan line CL = Cursor ending scan line void getxy (int ^column, ^int row, int page) { reg.h.ah = 3; reg.h.bh = page; int86 (0x10, ®, ®); ^row = reg.h.dh; ^column = reg.h.dl; }
Set dan Menentukan Page Aktif Pemanfaatan page bisa ditemui pada program animasi karena adanya kesempatan untuk saling bergantian “menggambar” di memori dan menampilkan di layar di antara page yang satu dengan yang lainnya. ROM BIOS Video Service 05h Service 5 (05h) : Set Active Display Page INPUT TO BIOS OUTPUT FROM BIOS AH = 05h no data returned AL = Active Page Number (0 for CGA graphics modes) void setpage (int page) { reg.h.ah = 5; reg.h.al = page; int86(0x10, ®, ®); }
ROM BIOS Video Service 0fh Service 15 (0fh) : Get Current Video Mode INPUT TO BIOS RETURN FROM BIOS AH = 0fH AL = Current display mode AH = Number of characters per line BH = Active dislplay page number void setpage (int page) { reg.h.ah = 0x0f; int86 (0x10, &ref, ®); return (reg.h.bh); }
ROM BIOS Video Service 06h Service 6 (06h) : Scroll Window Up Membuat Window Baru ROM BIOS Video Service 06h Service 6 (06h) : Scroll Window Up INPUT TO BIOS RETURN FROM BIOS AH = 06h No data return AL = Number of character line to scroll BH = Display attribute for blank lines CH = Row number for upper left corner CL = Column number for upper left corner DH = Row number for lower right corner DL = Column number for lower right corner
void setwindow (int x1, int y1, int x2, int y2, int color) { reg.h.ah = 6; reg.h.al = 0; reg.h.bh = color; reg.h.cl = x1; reg.h.ch = y1; reg.h.dl = x2; reg.h.dh = y2; int86 (0x10, ®, ®); }
Scroll Windows Up & Down ROM BIOS Video Service 07h Service 7 (07h) : Scroll Window Down INPUT TO BIOS RETURN FROM BIOS No data return AL = Number of character lines to scroll BH = Display attribute for blank lines CH = Row number for upper left corner CL = Column number for upper left corner DH = Row number for lower left corner DL = Column number for upper left corner
void scrollwindowUp (int x1, int y1, int x2, int y2, int color) { reg.h.ah = 6; reg.h.al = 1; /* jumlah baris yang di-scroll reg.h.bh = color; reg.h.cl = x1; reg.h.ch = y1; reg.h.dl = x2; reg.h.dh = y2; int86 (0x10, ®, ®); }
void scrollwindowDn (int x1, int y1, int x2, int y2, int color) { reg.h.ah = 7; reg.h.al = 1; reg.h.bh = color; reg.h.cl = x1; reg.h.ch = y1; reg.h.dl = x2; reg.h.dh = y2; int86 (0x10, ®, ®); }
Membaca Satu Karakter dari Layar Pada pembacaan satu karakter di posisi kursor, jika karakter tsb. Sesuai dengan pola huruf ASCII, maka nilai ASCII akan diberikan. Jika tidak dijumpai, maka nilai 00h akan diberikan. Fungsi ini bisa dijalankan pada modus grafik sebagaimana halnya modus teks. Pada modus teks pasti akan diberikan nilai ASCII. ROM BIOS Video Service 08h Service 8 (08h) : Read Character and Attribute INPUT TO BIOS RETURN FROM BIOS AH = 08H AH = attribute of text character BH = Active Page AL = ASCII character at cursor Location
int readChar (int page, char *attr) { reg.h.ah = 8; reg.h.bh = page; int86 (0x10, ®, ®); *attr = reg.h.ah; return (reg.h.al); }
Menulis Satu Karakter ke Layar Pada modus grafik hasil penulisan satu karakter tidak akan membuat posisi kursor bergeser dengan sendirinya. Ini adalah tanggung jawab pemrogram untuk menggeser kursor tersebut. Attribute yang dapat diberikan di sini hanyalah warna huruf / foreground. ROM BIOS Video Service 09h Service 9 (09h) : Write Character and Attribute INPUT TO BIOS RETURN FROM BIOS AH = 08H AH = attribute of text character BH = Active Page AL = ASCII character at cursor Location
int readChar (int page, char *attr) { reg.h.ah = 8; reg.h.bh = page; int86 (0x10, ®, ®); *attr = reg.h.ah; return (reg.h.al); }
CLOSING Mahasiswa mampu menghasilkan program grafik dengan instruksi primitif dan penggunaan dengan bahasa pemrograman C/C++ dalam Grafika Komputer.(OpenGl)