IBM - ENHANCED GRAPHICS ADAPTER (EGA) KARTICA INFORMATICA 3/1988 UDK 681.325 Matjaž Debevc Metka Zorič Rajko Svečko Dali Donlagič Tehniška fakulteta Maribor POVZETEK Na podroiju' računalniitva prihaja vedno bolj da izraza področje računalniške gra-fike. Osebni računalniki postajajo tudi vedno bolj pri»topni iirokim množicam uporabnikov. Trenutno najbolj aktualna možnost gra-fičnega prikazovanja nam podaja EGA grafična kartica za IBM in kompatibilne osebne računalnike. Delo opisuje zgradbo, osnovo in programiranje te kartice. ABSTRACT Computer graphics is becomlng more and more districtive in the •field of computers. Personal computers are becomlng acessible to a wide number of users. At the moment the EGA graphics card presents the best posBibillty of graphic display for IBM and a compatlble personal computers. The present thesis discribes the structure and programming of this card. 1. UVOD IBH - Enhanccd Graphic« Adaptcr Računalniška grafika je ena najbolj spektakularnih možnosti, ki nam jih dajejo računalniki. Računalniška grafika je poseben medij, ki omogoča najlažjo in najhitrejšo komunikacijo med človekom in strojem. CloveSko oko lahko dosti hitreje razbere informacijo z grafične slike, kakor pa s tabele, polne Številk. Dolga leta je bilo to področje izredno drago in težko dostopno. Zadnjih 30 let je čutiti enakomeren padec svetovnih cen na področju računalništva. Ta padec se giblje ;^a okoli 15X letno. To Je vzrok, da postajajo računalniki z velikimi zmogljivostmi vedno bolj dostopni. Povečanje zmogljivosti in padec cen se med drugim tudi čuti na področju osebnih računalnikov IBM in njemu kompatibiInih. Nekdaj niti pomisliti nI bilo mogoče na visoko zmogljivo grafiko. Slika, ki je bila nekoč narisana v nekaj minutah z majhno resolucijo zaslona, se danes nariSe v trenutku na visoko resolucijskem ekranu. Ni daleč čas, ko bo trodimenzionalna grafika čisto nekaj vsakdanjega. Na osebnih računalnikih IBM in nJemu kompatibiInih Je danes najbolj aktualna gra-fična kartica EGA, ki je naSla pot v marsikateri osebni računalnik in je največkrat obravnavana kot standard za ostale grafična kartice. EGA kartico imenujejo tudi IBM-HR (High Resolution) kartica. To je kartica, ki postavlja nove možnosti na.področju grafike na osebnih računalnikih, 2e več kot dve leti je ta kartica na trgu in že obstaja cela vsta tako Imenovanih kompatibiInih EGA kartic, V grafičnem načinu je. EGA kartica z resolucijo 640 « .350 točk za 150 grafičnih vrstic boljia od stare barvne grafična kartice C6A (Colour Graphic Adapt»r). TakSna resolucija nam omogoča ukinitev utripajoče slike, ne glede na to ali uporabljamo monohromatski zaslon ali novi IBM "Enhanced Color Dlsplay". Seveda omogoča EGA kartica tudi emullranje starega zaslona s resolucijo 320 » 200 ali 640 • 200 (glej Načini EGA kartice). Za individualno uporabo EGA kartice sedaj ne obstaja veliko uporabniških programskih paketov. Družba Borland International 64 predstavlja s svojim TURBO PASCAL-om verzija 4.0 zelo dober in tudi poceni programski paket, ki med drugim podpira tudi EGA kartico. Vendar običajno tako velikega programskega paketa niti ne potrebujemo. Poleg tega mora bi,ti program napisan v pascalu. Za pisanje samo nujno potrebnih, kratkih funkcij za uporabo EGA gra-fidne kartice je potrebno poznati zgradba in delovanje gra-fidne kartice. 2. 1. ZSRADBA EGA KARTICE Programiranje za EGA kartico je težko ie zaradi množice registrov (70), kakor tudi zaradi množice funkcij, ki jih ta kartica omogoča. Ze ko pogledamo v "Technical Reference Manual" in blokovni diagram za EGA kartico (slika 1), nam postane jasno, da je potrebno natančno razumevanje funkcij in registrov, de želimo, da bomo imeli pravilno delujod programski paket. Kot osnova nam »luži knjiga "IBM - Personal Computer, IBM - Enhanced Graphics Adapter". c»v M*«i.OVI C»V ^0««Tk.t 04 IS) —. HO * cun ISI AIUIB LSI Mir -1 6.1 ' 1 1 slika 1 I Blokovni diagram EGA kartice Glede na blokovni diagram delimo EGA kartica nai 2.1.1. CRT Controller CRTC (Cathode Ray Tube Controller) je po funkciji raztirjeni 6845. Generira »inhronizirane signale za horizontalne in vertikalne premike. Odgovar jajoiii parametri se programirajo v 19 CRT registrih. Vertikalni registri so dolgi 9 bitov, kar nam da resolucijo 512 slikovnih todk. Ce je drugi bit v "Mode Control Register" enak 1, se lahko resolucija podvoji na 1024 vrstic na sliko, kar pa pomeni, da potrebujemo poseben monitor. Nadalje skrbi CRTC za obnovitev slike shranjene v dinamidnem RAM-u. Naslov za obnovitev »like je dolg dva byta, kar pomeni, da CRTC dovoljuje naslavljanje do 64 Kb/tov. CRT kontroler dosežemo z vhodno/izhodnim naslovom 3'?4 in •3?5, kjer "7" pomeni B ali D.B uporabimo za Monochrome nadin, D pa za barvni nadin. 3?4 je naslovni register, medtem ko je 3?5 bralno pisalni podatkovni register. Vsebina registrov: 1. Address Register 2. HorizontalTotal Z. Horizontal Display End 4. Start Horizontal Blank 5. End Horizontal Blank 6. Start Horizontal Retrace 7. End Horizontal Retrace 8. Vertical Total 9. OverfloM 10. Preset Row Scan 11. Max Scan Line 12. Cursor Start 13. Cursor End 14. Start Address High 15. Start Address Low 16. Cursor Location High 17. Cursor Location Low 18. Vertical Retrace Start 19. Light Pen High 20. Vertical Retrace End 21. Light Pen Low 22. Vertical Display End 23. Offset 24. Underline Location 25. Start Vertical Blank 26. End Vertical Blank 27. Mode Control 28. Line Compare 2.1.2. Zaslonski pomnilnik Zaslonski pomnilnik se sestoji iz Štirih pomniInižkih prostorov (Bit Planeš). V osnovni verziji je vsak prostor velik 16 Kbytov in se nahaja na EGA kartici. V dveh korakih se lahko kapaciteta dvakrat poveda. Potem govorimo o 64, 128 ali 256 Kbytni EGA kartici. Slika z resolucijo 640 » 350 ima BO » 350 bytov. Organizacija slikovne todke v zaslonskem pomnilniku je v grafičnem načinu naslednja: Prvih osem slikovnih točk zaslona (zgornji levi kot !) se nahaja na naslovu OOOH slikovnega pomnilnika, naslednjih osem na naslovu OOIH itd. Prva slikovna točka znotraj enega byta je bit 7, naslednja Je bit 6. 2.1.3. Grafični in takstovni nadin Štirje pomnilniiki prostori zaslonskega pomnilnika reprezentirajo v grafidnem nadinu tudi naslov barvnih atributov ene slikovne todke (16 barv). Ta naslov je označen v Attribute-Controller-ju kot indeks v barvnem registru. Ved o tem je napisano v 65 poglavju o Attribut-Control1er-ju. Ce ima EGA kartica 64 Kbytov na voljo, lahko uporaDimo samo 4 barve. V tekstovnem načinu je pomnilnižki prostor znakovno kodni pomnilnik, pomnilniSki prostor 1 je pomnilnik za atribute, pomnilniški prostor 2 pa je znakovni generator. Ce se selektira tekstovni nadin, prenese BIOS enega od dveh znakovnih stavkov v pomniInižki prostor 2. 2.1.4. Sekvenčni genarator in niultiplexer Naslovni multiplexer (HUX) krmili naslove zaslonskega pomnilnika, ki pridejo enkrat direktno od CPU-ja (naložitev zaslonskega pomnilnika) in drugič od CRTC (zaslonska osvežitev). Sekvenčni generator {SEQ) generira krmilne signale za zaslonski pomnilnik in takt za zaslonsko ponavljanje. Map-Mask-Register omogoča individualno vpisovanje na zaslonski pomnilnik. Zraven lahko tudi izberemo določeno barvo. Za tekstovni način (A/N) se nahaja v Character-flap-Sel ect registru izbira itirih znakovnih stavkov. Sekvenčni register dosežemo z naslovi 3C4 (select naslova) in •'SCS (podatkovni vhoano - izhodni register). Vsebina registra : 1. Naslov 2. Rsset 3. Clocking Mode 4. Map Mask 5. Character Map Select 6. Memory Mode 2.1.5. 6rafi£ni kontroler Gra-fični kontroler lahko dela v dveh načinih; v gra-fičnem ali v tekstovnem. V gra-fičnem načinu se prenesejo podatki serijsko preko tako imenovanih Bit-Plane vodil CO, Cl, C2, C3 k Attribute Controler-ju. Ta štiri vodila, vsako za zaslonski pomniInižki prostor .(Bit Plane Map) tvorijo 16 možnih barv (glej Attribute Controller), Prvi gra-fični kontroler je za zaslonski pomnilniški prostor O in 1 (2 byta) , drugi grafični kontroler pa za ostala dva (2 in 3). Oba grafična kontrolerja imata vsak po 16 bitni podatkovni register, kjer se lahko vpiše ali bere 32 bitov slikovnih podatkov v enem pomnilniškem ciklusu. Nadalje se nahaja v obeh grafičnih kotrolerjih še krmiljenje za izbiro slikovne točke in njegove barve, kakor tudi štiri logične funkcije (zamenjava, AND, OR, XOR). Color-Compare register omogoča hkratno primerjanje z eno določeno barvo preko osmih slikovnih točk enega byta. V tekstovnem načinu se podatki transport i rajo direktno v Attribute-Controller. Register dosežemo z naslovi 3CE (select naslova) in 3CF (podatkovni vhodno izhodni naslov). Vsebina registra: 1. Graphics 1 Position 2. Graphics 2 Position 3. Graphics 1 & 2 naslov 4. Set/Reset 5. Enable Set/Reset 6. Color Compare 7. Data Rotate 8. Read Map Select 9. Mode Register 10. Mi3cel1aneous 11. Color Don't Čare 12. Bit Mask 2.1.6. Attribut Controller Ta kontroler je zadnja postaja slikovnih podatkov na poti k zaslonu. Ima 21 registrov. Prvih 16 naslovov so tako imenovani barvno paletni registri. Biti O do bita 5 teh 16 registrov omogočajo dinamično izbir.o 64 možnih barv. Barvno paletni register se naslavlja preko štirih vodil CO - C3, ki pridejo od grafičnega kontrolerja. To se dogaja serijsko, torej točka za točko. Preden enega od teh 16 registrov naslavljamo, gredo podatki tudi preko Color-Plane-Enable registra. Ponavadi se naslov pusti tukaj na miru, da imamo lahko na voljo 16 barv. Z Color-Plane-Enab1e registrom pa lahko omogočamo prikaz enega od štirih slik, ali pa kombinacijo teh štirih slik. V tekstovnem načinu se tekstovni podatki prenašajo paralelno iz slikovnega pomnilnika v Attribut Controller. Osvežilni naslov generiran od CRTC se naslavlja najprej na slikovni pomnilniški prostor O in 1. Byte naslova, shranjen v pomnilniškem prostoru 1 se prenese v Attribut Controller, kjer ima za vsakokratno prikazano črko svojo veljavnost. Prebrana znakovna koda iz pomni 1 niškega prostora O, na primer 41H za črko "A", se naslavlja v povezavi z Row-Scan-Count registrom zaslonskega pomni 1 niškega prostora 2, kjer se nahaja ta v ROM-u naložen znak. Prebrani biti se pošljejo skozi grafični koatroler k Attribut kontrolerju, skupaj z barvnimi vrednostmi in so nato vodeni serijsko dalje k zaslonu. Row-Scan-Count register nastavi vertikalno višino znaka na zaslonu, to pomeni število horizontalnih vrstic iz katerih je znak sestavljen. Znak je lahko velik maKimalno 66 32 znakov in se nastavi v CftTC registru 9. Vsebi na: M E M F M 10 640 X 200 640 X 350 640 X 350 16 4 4/16 1. Address Register 2. Palette Register 3. Mode Control Register 4. Overscan Color Register 5. Color Plane Enable Register 6. Horizontal Pel Panning Register PROGRAMIRANJE EGA KARTICE C - IBM Color zaslon, E - IBM Enhanced Color M - IBM Monochrom zaslon 3.1.1. Za vklop in izklop grafičnega zaslona uporabljamo naslednje BIOS funkcije« AH = Oi izbira BIOS nadina AL; EGA način po zgornji tabeli Prejine poglavje je bilo namenjeno spoznavanju zgradbe in strukture EGA kartice. To poglavje pa je namenjeno programiranju EGA kartice. Namesto da bi pisali velik programski grafični paket, včasih potrebujemo samo osnovne ukaze za risanje na ekran, kakor so na primer vklop, izklop grafike, risanje črte in brisanje zaslona. V resnici obstaja veliko programskih paketov, ki podpira grafiko na EGA kartici za IBM-PC in kompati biIne, vendar programerji, ki želijo imeti hitre in učinkovite programe raje sežejo po osnovnih funkcijah, ki jih lahko sami napišejo. Za programiranje EGA kartice potrebujemo ESA-BIOS funkcije. V ROM-u kartice se nahajajo poleg teh funkcij Se oba znakovna stavka in ena samostojna funkcija. EGA-BIOS vsebuje interrupt (prekinitvene) vektorje 05H in lOH. (H pomeni heksadecimalno). Interrupt 05H uporabimo za izpis na zaslon, medtem ko uporabljamo interrupt lOH za 19 krmilnih -funkcij EGA karti ce. Ker se na PC-ju največkrat uporabljata prevajalnika TURBO-PASCAL in TURBO-C od firme BORLAND, so tudi podrogrami napisani v teh dveh jezikih. Prenos na prevajalnike ostalih firm ni problematičen, samo potrebno je vedeti, kako kličemo BIOS funkcije. Programa vključujeta ukaze za vklop, izklop grafike, risanje točke (pixla) in brisanje ekrana. 3. 1. Nastavitev načina EGA kartice Kadar želimo risati z EGA kartico, najprej vklopiti EGA v ustrezni način. Delovni načini EGA kartice: moramo EGP C E C E C E C E C C C M C nači n 0 0 1 1 2 2 3 3 4 5 6 7 D resol 320 320 320 320 640 640 640 640 320 320 640 720 320 uci ja X X X X X X X X X X X X X 200 350 200 350 200 350 200 350 200 200 200 350 200 žtevilo barv 16 16/64 16 16/64 16 16/64 16 16/64 4 4 2 4 16 AH = OFH; prikaz trenut. zaslonskega statusa parametri, ki vračajo podatke so: AL: EGA - način AHt število znakov/vrstico BHt število trenutnih zaslonskih strani Podprograma: Ce uporabljamo verzijo 4.0 TURBO-PASCALA, potem v glavi programa vstavimo ; ušes DOS| tip pa je definiran z Registers. Kadar pa uporabljamo verzijo 3.0 pa je potrebno dodati : type Ragisters = record čase integer of 1: (ax,bx,cx,dx,bp,si,di,ds, es,flgsi integer); 2i (al,ah,bl,bh,cl ,c,dl ,dh: byte)j end; procedure Grafika(vklopi boolean); v ar rsgi Registers; načini integer; begin if vklop then begin < branje aktualne nastavitve zaslona > reg.axio *0F00; Intr(»lO.reg)j < shranitev načina > nacini» reg.al; < EQA način za Enhanced Color Display > reg.axi=: ; •nd else begin reg.ah:°> O; i izklop grafičnega načina > reg.axj" način; Intr(»lO,reg); end; endI 67 Jezik C: » include union REGS regj i nt način; Bra-f i ka(vklop) int vklop; AH = 07H; pomik trenutne strani navzdol AL; vstavitev okna CH: spodnji levi rob (vrstica) CLi spodnji levi rob (kolona) DH;• zgornji desni, rob (vrstica) DL: zgornji desni rob (kolona) BH: barva ozadja; Podprogram za brisanje ekrana v pascalu: i* (vklop) < reg.x.ax = OxOFOO; int86(OxlO,®,(ireg) ; reg.x.ax = 0x0010; intB6(0xl0,®,®); > el se < reg.h.ah = O; reg.x.ax = način; int86<0xl0,®,tireg) ; > 3.1.2. Za risanje to(ike uporabljamo naslednje BIOS -funkcije: AH = OCH; nariši gra-fiino točko BH: tekoča stran DX: V pozici ja (O - 349) CX: X pozicija (O - 639) AL; barva (O - 63) procedure brisiZaslon; begin reg.ahi« »07; reg.al:= O; rBg.chs= O; reg.cli= O; reg.dh;= 24; reg.dl:= 79; reg.bh;= O; Intr(»lO.reg); end; y C jeziku ; brisi Zaslon() < reg.h.ah = rsg.h.al = reg.h.ch = reg.h.cl = reg.h.dh = reg.h.dl = reg.h.bh = 0x07; 0; 0; 0; 24; 79; 0; < pomik strani navzdol } < vstavitev okna > < spodnji levi rob > < zgornji desni rob > < barva ozadja > int86(0xl0, ®, ®); AH = ODH; beri grafično točko BH: tekoča stran DX: Y pozicija (O - 349) CX: X pozicija (O - 639) Vrnjen parameter: AL: barva ieljene vrednosti LITERATURA Johnson Nelson; ADVANCED GRAPHICS IN C Programming and Technigues, EGA Users' Manual Podrogram za risanje točke v pascalu: IBM Personal Computer; IBM Enhanced Graphics Adapter procedure Točka(x,y,barva); begin reg.ah;= »OC; reg.cxi= x; reg.dxi= y; reg.al:= barva; Intr(«10,reg); end; < riSi grafično točko > IBM Personal Computer: TURBO PASCAL V4.0. Program v C jeziku: Točka 3.1.3. Za brisanje ekrana uporabimo naslednjo BIOS -funkcijo: