You are on page 1of 14

8259A KONTROLER PREKIDA U prethodnim odeljcima ovog poglavlja je pokazano kako se prekidi mogu koristiti u razne svrhe.

U malom sistemu, na primer, moemo da itamo ASCII karaktere sa tastature preko prekida; moemo da brojimo prekide da bi realizovali asovnik; moemo da detektujemo prekid koji govori o stanju uzbune ili o zavrenom poslu. Svaka od ovih primena zahteva poseban ulaz za prekide. Ako radimo sa 8086, imamo problem jer on ima samo dva ulaza za prekide: NMI i INTR. Ako sauvamo NMI za sluaj pada snage, ostaje nam samo jedan ulaz za prekide koji moemo da koristimo za druge namene. Za primene gde imamo prekide iz vie izvora, koristimo eksterni ureaj koji se zove Priority Interrupt Controller (PIC) da saguramo ove zahteve za prekid na jedan ulaz za prekid. U ovom poglavlju, pokazaemo kako se standardan PIC, Intel 8259A, povezuje u 8086 sistem, kako se inicijalizuje i kako se koristi da rukuje zahtevima za prekid iz vie izvora. 8259A pregled i povezivanje sa sistemom Da bismo pokazali kako radi 8259A u 8086 sistemu, treba prvo da se prisetimo kako radi 8086 INTR ulaz. Ako je 8086 IF postavljen i ako se na INTR pojavi visok nivo, 8086 e: 1. Poslati dva signala potvrde sa svog INTA pin na INTA pin 8259A PIC. Ovi signali govore 8259A da poalje eljeni tip prekida na 8086 na magistralu podataka; 2. Mnoi tim prekida koji je primio od 8259A sa 4 da bi izraunao adresu u IVT; 3. Stavlja flegove na stek; 4. Brie IF i TF; 5. Stavlja adresu povratka na stek; 6. Uzima poetnu adresu prekidne rutine iz IVT i smeta je u CS i IP; //code segme nt i instruction pointer 7. Izvrava prekidnu rutinu.

Sada pogledajmo malo blie kako 8259A funkcionie tokom ovog procesa. Za poetak, treba prouiti blok-dijagram sa slike 8-27. Na slici, prvo treba primetiti 8-bitnu magistralu podataka i pinove za kontrolne signale u gornjem levomuglu dijagrama. Magistrala podataka omoguava da se alju kontrolne rei do 8259A i da se itaju statusne rei iz njega. Signali RD i WR kontroliu ove transfere kada je ureaj selektovan postavljanjem signala CS na nizak nivo. 8-bitna linija podataka takoe omoguava da 8259A alje tipove prekida do 8086. Sledee, treba primetiti osam prekidnih ulaza obeleenih sa IR0 do IR7. Ako se 8259A ispravno aktivira, zahtev za prekid sa bilo kog od ovih ulaza e postaviti izlaz INT na visok nivo. Ako je ovaj pin povezan na ulaz INTR 8086 i ako je IF 8086 postavljen, onda e ovo uzrokovati prethodno opisanu reakciju na prekid. Ulaz INTA 8259A povezan je na izlaz INTA 8086. 8259A koristi prvi INTA impuls da odradi neke aktivnosti, zavisno od moda u akome se nalazi. Kada primi drugi INTA impuls, 8259A postavlja tip prekida a 8-bitnu magistralu podataka. Tip prekida koji alje do 8086 odreen je ulazom IR preko koga je stigao zahtev za prekid i brojem koji se alje 8259A kada se on inicijalizuje. Poenta je ovde u tome da se zahtevi za prekid sabiraju iz osam razliitih izvora u jedan ulaz 8086 (INTR) i alje do 8086 specificirani tip prekida za svaki od osam prekidnih ulaza. Postavlja se pitanje: ta se deava ako stignu istovremeno dva zahteva za prekid, recimo, sa ulaza IR2 i IR4? U modu fiksiranog prioriteta u kome 8259A obino radi, odgovor na ovo pitanje je veoma jednostavan. Ulaz IR0 je ulaz najvieg prioriteta, za njim je IR1,..., a najnii prioritet ima IR7. to znai da e, u sluaju da se dva zahteva za prekid pojave istovremeno, 8259A opsluiti prvo onaj sa viim prioritetom (pod pretpostavkom da ni jedan od njih nije maskiran).

Na dijagramu sa slike 8-27 vide se etiri kutije obeleene sa interrupt request register (IRR), interrupt mask register (IMR), inservice register (ISR) i priority resolver. IMR se koristi za deaktiviranje (maskiranje) ili aktiviranje (demaskiranje) pojedinanih ulaza za zahteve za prekid. Svaki bit ovog registra odgovara prekidu sa istim brojem. Prekid se demasira slanjem komandne rei sa 0 na mestu bita koji odgovara njegovom ulazu. IRR prati sa kog ulaza je postavljen zahtev za prekid. Ako ulaz ima aktivan zahtev za prekid, tada e odgovarajui bit IRR biti postavljen. Primetiti: zahtev za prekid mora ostati aktivan na ulazu IR sve do silazne ivice prvog INTA impulsa. ISR prati koji od ulaza za prekide se trenutno opsluuje. Za svaki ulaz koji se trenutno opsluuje, odgovarajui bit e biti postavljen u ISR. Priority solver ponaa se kao ''sudija'' koji odreuje kada se opsluuje zahtev za prekid sa nekog od ulaza. Kao jedan od primera kako ovo radi, pretpostavimo da su IR2 i IR4 demaskirani i da zahtev za prekid dolazi sa ulaza IR4. zahtev za prekid sa IR4 e postaviti bit 4 u IRR. Priority resolver e detektovati da je ovaj bit postavljen i proveriti bitove u ISR da vidi da li se trenutno oplsuuje prekid vieg prioriteta. Ako je tako, to se vidi iz toga to je odgovarajui bit postavljen u ISR, onda priority resolver nita ne preduzima. Ako nije tako, onda priority resolver aktivira kolo koje alje zahtev za prekid do 8086. kada 8086 odgovori sa INTA impulsima, 8259A e poslati tip prekida koji je specificiran za IR4 kada je 8259A inicijalizovan. Kao to smo rekli ranije, 8086 e upotrebiti tip prekida koji dobija od 8259A da pronae i izvri prekidnu rutinu koja je napisana za prekid sa ulaza IR4.

Sada, pretpostavimo da dok 8086 izvrava prekidnu rutinu za IR4, stie zahtev za prekid sa ulaza IR2 8259A. Ovo e postaviti bit 2 IRR. Poto smo pretpostavili da IR2 nije maskiran, priority resolver e detektovati da je ovaj bit postavljen u IRR i doneti odluku da li da poalje jo jedan zahtev za prekid do 8086. Da bi doneo odluku, priority resolver gleda u ISR. Ako je bit vieg prioriteta postavljen u ISR, izvrava se prekid vieg prioriteta. Priority resolver e ekati dok se bit vieg prioriteta u ISR ne resetuje pre nego to poalje zahtev za prekidom do 8086. Ako priority resolver otkrije da novi prekid ima vei prioritet od prekida najvieg prioriteta koji se trenutno opsluuje, postavie odgovarajui bit u ISR i aktivirati kolo koje alje novi INT signal do 8086. Za na primer, IR3 ima vii prioritet od IR4, tako da e priority resolver postaviti bit 2 ISR i aktivirati kolo koje alje novi INT signal do 8086. Ako je 8086 INTR ulaz ponovo aktiviran instrukcijom STI na poetku prekidne rutine za IR4, kao to je prikazano na slici 8-28a, onda e ovaj novi signal INT prekinuti ponovo 8086. Kada 8086 alje drugi INTA impuls kao odgovor na ovaj prekid, 8259A e poslati tip prekida za IR2 prekidnu rutinu. 8086 e upotrebiti dobijeni broj tipa da pronae i izvri IR2 prekidnu rutinu. Na kraju IR2 prekidne rutine, do 8259A aljemo komandnu re koja resetuje bit 2 ISR, tako da prekidi nieg prioriteta mogu da se opslue. Posle toga, instrukcija IRET na kraju IR2 prekidne rutine vraa kontrolu prekinutoj IR4 prekidnoj rutini. Na kraju IR4

prekidne rutine, aljemo do 8259A komandnu re koja resetuje bit 4 ISR tako da prekidi nieg prioriteta mogu da budu opslueni. IRET instrukcija na kraju IR4 prekidne rutine vraa kontrolu glavnom programu. Ovo sve zvui veoma neuredno, ali je u stvari samo specijalan sluaj ugneenih procedura. U sluaju da IR4 prekidna rutina nije ponovo aktivirala 8086 INTR ulaz instrukcijom STI, 8086 nee odgovoriti na INT signal koji je uzrokovan sa ulaza IR2 dok se ne zavri IR4 prekidna rutina, kao to je prikazano na slici 8-28b. Pre nego to opiemo kako se 8259A inicijalizuje, opisaemo detaljnije kako se povezuje u mikroraunarski sistem. 8259A veza sa sistemom

Ulaz A0 8259A koristi se za selekciju jedne od dve interne adrese ureaja. Ovaj pin je povezan na adresnu liniju A1, tako da su interne sistemske adrese 8259A FF00H i FF02H (potsetimo se da je u jednom od ranijih poglavlja odreeno da je poetna adresa 8259A FF00H). Osam linija za podatke 8259A uvek je povezano na niu polovinu magistrale podataka zato to 8086 oekuje da e primiti tipove prekida po ovim linijama. RD i WR su povezani za sistemske RD i WR linije. INTA iz 8086 je povezan na INTA ulaz 8259A. Zahtev za prekid INT 8259A, povezan je na INTR ulaz 8086. Viekorisniki pin SP / EN je povezan na +5V jer koristimo samo jedan 8259A u sistemu. Kada se samo jedan 8259A koristi u sistemu, kaskadne linije (CAS0, CAS1 i CAS2) mogu da budu

ostavljene nepovezane. Osam IR ulaza su slobodni za signale prekida. Neiskorieni IR ulazi treba da budu povezani na masu tako da um ne moe sluajno da uzrokuje prekid.

Na slici 8-14 je isprekidanim crtama prikazano kako jo jedan 8259A moe da se doda u sistem SDK-86, kako bi postojalo ukupno 15 ulaza za prekide. Ako je to potrebno,

po jedan 8259A moe da se povee na svaki od ulaza 8259A, kada postoji ukupno 64 ulaza za prekide. Treba primetiti da, kako 8086 ima samo jedan ulaz INTR samo jedan INT pin 8259A moe da se vee na njega. 8259A koji je svojim INT pinom vezan direktno na 8086 naziva se master. Pinovi INT drugih 8259A povezuju se na IR ulaze mastera. Ovi drugi, kaskadni 8259A, nazivaju se slave. Signal INTA 8086 vezuje se i na master i na sve slave-ove. Svaki 8259A ima svoje adrese tako da komandne rei mogu biti upisane u njega i statusne rei iitane iz njega. Za kaskadno vezani (kaskadni) 8259A na slici 8-14 I/O adrese e biti FF08H i FF0AH. Kaskadni pinovi (CAS0, CAS1 i CAS2) master-a povezani su na odgovarajue pinove slave-a. Za master, ovi pinovi rade kao izlazi, a za slave rade kao ulazi. Jo jedna razlika je to je SP / EN pin slave-a vezan na masu da bi taj 8259A ''znao'' da je slave. Ukratko, evo kako master i slave rade kada slave primi zahtev za prekid na neki od svojih IR ulaza. Ako je taj IR ulaz demaskiran i ako ima vii prioritet od svih drugih prekida koji se trenutno opsluuju u master-u, tada e master poslati INT signal do 8086 INTR ulaza. Ako je 8086 iNTR ulaz aktiviran, 8086 e proi kroz svoju INTR proceduru i poslati dva INTA impulsa i master-u i slave-u. Slave ignorie prvi od njih, ali master kada ga dobije izbacuje 3-bitni identifikacioni broj slave-a na CAS0, CAS1 i CAS2 linije. (Svaki slave u toku inicijalizacije dobija bitni identifikacioni ID broj). Ovo aktivira slave. Kada dobije drugi INTA impuls, slave e poslati tip prekida do 8086 preko osam niih linija magistrale podataka. Ako se zahtev za prekid direktno vodi na jedan od IR ulaza master-a, master e poslati tip prekida do 8086 kada dobije drugi INTA impuls od njega. Inicijalizacija 8259A Prvi korak u inicijalizaciji bilo kog ureaja je odreivanje poetne sistemske adrese sa eme ili iz memorijske mape sistema. Za ovaj primer koristiemo sliku 8-14, sa koje se vidi da je poetna sistemska adresa za 8259A FF00H. Sledei korak je odreivanje internih adresa za ureaj. Za 8259A dve interne adrese biraju se visokim ili niskim nivoom na pinu A0. Na slici 8-14 ovaj pin je povezan na sistemsku adresnu liniju A1, tako da su interne adrese 0 i 2. Dalje, interne adrese se dodaju na sistemsku adresu ureaja da bi se izraunala sistemska adresa za svaki interni deo ureaja. Dakle, sistemske adrese za ovaj 8259A su FF00H i FF02H.

Dalje, treba pogledati sliku 8-29a na kojoj je format rei koje se alju 8259A pri inicijalizaciji. Da bi se odredilo koje komandne rei inicijalizacije (initialization

command word ICW) su potrebne za razne primene 8259A, na slici 8-29b je dijagram koji ovo pokazuje. Prema ovom dijagramu, ICW1 i ICW2 moraju biti poslate svakom 8259A u sistemu. Ako sistem ima slave 8259A, onda re jedna ICW3 mora biti poslata master-u, a drugaija ICW3 slave-u. Ako je re o 8086 sistemu ili ako hoemo da specificiramo neke specijalne uslove, mora se poslati ICW4 master-u i svakom od slaveova. Sada emo pogledati formate svih ICW. Prva stvar koju treba uoiti kd svih formata ICW na slici 8-29a je da je na levom kraju bit obeleen sa A0 koji u stvari nije deo komandne rei. Ovaj bit govori koja je interna adresa na koju treba poslati kontrolnu re. A0=0 na levoj strani ICW1, na primer, govori da se ICW1 alje na internu adresu 0, to za na 8259A odgovara adresi FF00H. Sledei korak procedure inicijalizacije je formiranje kontrolnih rei. Najnii bit ICW1 govori 8259A da li je potrebno da trai ICW4 ili ne. Poto koristimo ureaj u 8086 sistemu, potrebna nam je ICW4. Zato postavljamo bit D0 na 1. Za sada nam je potreban samo jedan 8259A, tako da emo bit D1 postaviti takoe na 1. Kada se koristi 8086, bit D2 je ''don't care'', tako da emo njega postaviti na 0. Bit D3 se koristi da se izabere leveltriggered ili edge-triggered mod. U level-triggered modu, obrada e biti zatraena kada se na IR ulazu pojavi visok nivo. U edge-triggered modu, nivo na ulazu IR

mora promeniti nivo sa niskog na visoki i ostati na visokom nivou dok god se prekid ne obradi. Obino se koristi edge-triggered mod, da povorka pravougaonih impulsa ne bi uzrokovala viestruki prekid. Postavljanjem D3 na 0 se ovo podeava. Bit D4 mora da bude 1. Za rad

u sistemu 8086, bitovi D5, D6 i D7 su ''don't care'' bitovi, tako da emo ih postaviti na 0 (radi jednostavnosti). Prema tome, ICW za na primer je 00010011. U sistemu 8086, ICW2 se koristi da se saopti 8259A koji tip prekida da alje kao odgovor na prekid sa ulaza IR0. Kao odgovor na prekide sa bilo kog drugog ulaza, 8259A e automatski dodati broj IR ulaza ovom osnovnom broju i poslati zbir kao tip prekida za taj ulaz do 8086. Poto su tipovi prekida 0-31 ili rezervisani ili popunjeni, tip 32 (dec) je najmanji broj koji moe da se upotrebi. Ako poaljemo do 8259A ICW2 = 00100000 = 32 dec, 8259A e poslati ovaj broj kao tip za prekid sa ulaza IR0. Kao tip za prekid sa ulaza IR1 poslae 33,..., kao tip za prekid sa ulaza IR7 poslae 39. U svakoj ICW2 koja se alje 8259A, najnia tri bita moraju biti 0 jer on njih automatski tumai kao broj IR ulaza. Poto ne koristimo slave u ovom primeru, ne moramo slati ICW3. Ako se koristi slave, mora se poslati ICW3 master-u da bi mu se saoptilo na kojim IR ulazima ima slave-ove. On mora ovo da zna da bi znao kada da alje ID brojeve slave-ova linijama CAS0, CAS1 i CAS2. Re ICW3 se mora poslati svakom slave-u, da bi mu se saoptio njegov ID. Ovaj broj je jednak broju IR ulaza master-a na koji je vezan njegov INT izlaz. Kada master poalje ID broj preko svojih CAS linija, slave e prepoznati svoj ID i postaviti tip prekida do 8086 kada primi impuls INTA . Za na primer, jedini razlog slanja ICW4 je da se 8259A obavesti da radi u 8086 sistemu. Ovo radimo postavljanjem bita DO na 1. Jedan od interesantnih bitova ove rei je D1, koji se zove automatic-end-of-interrupt. Ako je ovaj bit postavljen u ICW4, 8259A e automatski resetovati bit u ISR koji odgovara zahtevu za prekid koji je prihvaen kada se pojavi drugi INTA impuls. Ovo omoguava da 8259A moe da reaguje na druge prekide (sa ulaza nieg prioriteta). Drugim reima reeno, prekidi nieg prioriteta tada mogu da prekinu izvravanje prekidne rutine vieg prioriteta. Poto ne elimo da nam se ovo deava, ICW4 e u naem primeru biti 00000001. Pored ICW, na slici 8-29a su i komandne rei koje se zovu operation command words (OCWs). One su prikazane na slici 8-30. OCW1 mora biti poslata do 8259A da bi se demaskirali IR ulazi sa kojih hoemo da registrujemo zahteve za prekid. Za na primer, pretpostavimo da hoemo da koristimo samo ulaze IR2 i IR3. Poto 0 na poziciji bita OCW1 demaskira odgovarajui IR ulaz, OCW1 e u naem primeru biti 111110011. OCW2 se uglavnom koristi za resetovanje bitova u ISR. Ovo se obino radi na kraju prekidne rutine, ali moe i bilo gde u njoj. Na ovaj nain se omoguava prihvatanje zahteva za prekid nieg prioriteta. U malim sistemima obino se koristi nespecifina komandna re End-of-Interrupt. OCW2 je u ovom sluaju 00100000. Kada 8259A primi ovu OCW, automatski e resetovati registar ISR. Ako hoemo da resetujemo odreeni bit u ISR, moe se u 8259A poslati OCW2 sa 011 na mestu bitova D7, D6 i D5, i broj ISR bita koji hoemo da resetujemo u najnia 3 bita rei. Takoe se moe upotrebiti re OCW2 da se saopti 8259A da rotira prioritete IR ulaza tako da, kada se prekid sa nekog od ovih ulaza opslui, pada na najnii prioritet. Ostale informacije o OCW2 i OCW3 mogu se pronai u Intelovoj dokumentaciji za 8259A. Sada kada smo odredili strukturu potrebnih ICW i OCW, sledei korak je napisati instrukcije kojima se one alju do 8259A. Na slici 8-31 je prikazan program na asembleru koji inicijalizuje 8259A i koji prikazuje mnoge koncepte prikazane u ovom poglavlju. Ovaj program se moe koristiti kao ablon za pisanje programa koji opsluuju jedan ili vie prekida. Ovaj program

inicijalizuje SDK-86 sistem sa slike 8-14 za generisanje asovnika sa sekundama, minutima i satima koji formira prekid frekvencije 1Hz i itanja sa ASCII tastature realizovano preko prekida. Ovaj program pretpostavlja da je PCLK frekvencije 2.4576 MHz sa ploe prikljuen na ulaz CLK brojaa 0 8254, da je GATE ulaz brojaa 0 8254 povezan na +5V i da je OUT pin brojaa 0 povezan na IR0 ulaz 8259A. Takoe je pretpostavljeno da je impuls pritisnutog tastera na ASCII tastaturi povezan na ulaz IR2 8259A. U programu, prva je deklaracija AINT_TABLE koja rezervie prostor za vektore prekidnih rutina. Deklaracija TYPE_64 DW 2 DUP(0), na primer, odvaja po jedno mesto veliine rei za ofset prekidne rutine tipa 64 i za adresu poetka segmenta ove prekidne rutine. Deklaracija TYPE_65 DW 2 DUP(0) odvaja po jedno mesto veliine rei za ofset prekidne rutine tipa 65 i za adresu poetka segmenta ove prekidne rutine... Primetiti: zbog naina na koji radi program EXE2BIN, deklaracija AINT_TABLE mora biti prva linija programa, tako da bi bila locirana na adresi 0000:0001H, gde i mora da bude da bi program radio kako treba kada se primeni na SDK-86 plou.

Sledee to treba da uradimo u programu je da deklariemo segment podataka i da odvojimo memorijske lokacije za brojanje sekundi, minuta i sati i smetanje 100 karaktera proitanih sa tastature. Posle segmenta podataka se deklarie stek segment. Na poetku glavnog programa, inicijalizuje se registar segmenta steka i registar stek pointera. Onda se inicijalizuje registar DS koji pokazuje na IVT.

Sledee etiri instrukcije uitavaju adrese prekidnih rutina za asovnik i tastaturu na mesto za tipove prekida 64 i 66 u IVT. Kada se uita IVT, mi ASSUME DS:DATA i inicijalizujemo DS da pokazuje na segment podataka koji sadri podatke za asovnik i tastaturu. Sledei korak je inicijalizacija 8259A koju smo objasnili u prethodnom odeljku. Bit A0 pored ICW1 je 0, tako da se ICW1 alje na niu adresu u 8259A, FF00H. Za ovaj primer smo izabrali tip 64 da odgovara prekidu sa ulaza IR0, tako da je potrebna ICW2 01000000. Bit A0 pored ICW2 je 1, tako da e ICW2 biti poslata na viu adresu u 8259A, FF02H. Slino, ICW4 i OCW1 se alju na adresu FF02H. Sledei deo glavnog programa inicijalizuje broja 0 8254 na mod 3, BCD brojanje i itanje/upis nii pa vii bajt. Da bi se proizveo signal uestanosti 1Hz od datog PCLK, u broja 0 se upisuje re 2458. Ovo nee dati tano 1Hz, ali je onoliko blizu koliko moe da bude sa datom frekvencijom ulaznog takta brojaa. Na kraju, poto je tajmer inicijalizovan, aktiviramo 8086 INTR ulaz instrukcijom STI tako da 8086 moe da reaguje na INT signale koje mu alje 8259A i eka na prekid vrtei se u petlji HERE:JUMP HERE. Za ove dve prekidne rutine, pokazujemo samo koncept i End-of-Interrupt instrukcije. Prekidne rutine inae moraju biti deklarisane sa ''far'' tako da asembler uita vrednosti i za CS i za IP iz IVT. Takoe, treba staviti End-of-Interrupt instrukciju na kraj svake prekidne rutine. Potsetimo se iz prethodnog odeljka da 8259A, kada odgovara na signal sa svog IR ulaza, postavlja odgovarajui bit u ISR. Ovaj bit mora biti resetovan negde pri kraju prekidne rutine, tako da priority resolve moe da reaguje na budue zahteve za prekid nieg prioriteta. Na kraju prekidnih rutina u naem primeru to je uinjeno slanjem OCW2 u 8259A. OCW2 je 00100000 i govori 8259A da resetuje bit u ISR koji odgovara prekidu koji se trenutno opsluuje. Ovo je nespecifina End-of-Interrupt (EOI) instrukcija. Primene softverskih prekida U jednom od prethodnih odeljaka ovog poglavlja, opisali smo kako se instrukcija softverskog prekida 8086, INT N moe upotrebiti da se testira bilo koji tip prekidne rutine. Na primer, za testiranje tipa 64 nije potreban dodatni hardver, ve samo instrukcija INT 64. Jo jedna bitna primena softverskih prekida je pozivanje Basic Input Output System- a (BIOS), procedure raunara tipa IBM PC. Ove procedure u sistemskoj ROM izvode specifine funkcije ulaza/izlaza, kao to je itanje karaktera sa tastature, ispisivanje nekih od njih na CRT ili itanje informacija sa diska. Da bi se pozvala jedna od ovih procedura, uitavaju se zahtevani parametri u specificirane registre i izvrava INT N instrukcija. N je u ovom sluaju tip prekida koji vodi do eljene procedure. Evo jednog primera kako moe da se koristi BIOS. Pretpostavimo da, kao deo programa na asembleru kojim hoemo da pokrenemo raunar tipa IBM PC, hoemo da poaljemo neke karaktere na tampa. Instrukcija INT 17H moe da se upotrebi da bi se ovo obavilo. Na slici 8-32 je prikazano zaglavlje INT 17H procedure iz IBM PC BIOS listinga. Treba primetiti da se registri DX, AH i AL koriste za prenos zahtevanih parametara proceduri. Takoe, treba primetiti da se ova procedura koristi za dve razliite operacije: inicijalizaciju porta tampaa i slanje karaktera na tampa. Operacija koju izvodi

procedura je odreena brojem koji se dostavlja proceduri u registru AH. AH=1 znai inicijalizaciju porta tampaa, AH=0 znai tampanje karaktera iz AL, a AH=2 znai itanje statusa tampaa i vraanje tog statusa preko registra AH. Ako pokuaj tampanja karaktera nije bio uspean iz nekog razloga, kao to je da tampa nije bio ukljuen, ili nije bio izabran ili je zauzet, preko AH se vraa 01. Na slici 8-33 je prikazano kako se procedura INT 17H poziva da inicijalizuje tampa i kako se poziva neprekidno da alje niz karaktera na tampa. Treba primetiti da smo postavili karaktere carriage return i linefeed posle niza karaktera zato to tampa nee tampati liniju dok ne primi carriage return. Glavna prednost pozivanja procedura softverskim prekidom je to ne mora da se brine o apsolutnoj adresi na kojoj se procedura nalazi ni o povezivanju sa programom. Sve to treba znati je tip prekida za proceduru i kako se prosleuju parametri proceduri. Ovo znai da e program koji napiemo za IBM raunar raditi na kompatibilnom COMAQ raunaru, iako su BIOS drajveri za tampa locirani na razliitim apsolutnim adresama. Kasnije emo pokazati jo primena BIOS-a.

You might also like