Documente Academic
Documente Profesional
Documente Cultură
Obiectiv disciplin:
Elaborarea aplica iilor multitasking
PC
Simplu
Complexitate medie
PC
PC
PC
MAXIMUM MODE GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND
20 21 1 40
MINIMUM MODE
Mod minim (monoprocesor)- semnalelede control magistrala sunt generate direct de 8086 - magistrala poate fi patajata cu DMA prin HOLD/HLDA
8086
/RQ,/GT0 /RQ,/GT1 /LOCK /S2 /S1 /S0 QS0 QS1 /TEST READY RESET
Mod maxim (multiprocessor sau cu coprocessor matematic) - semnalele de control magistrala sunt produse de un controller special (8288) - RQ/GT0 si RQ/GT1 - accesare magistrala de catre procesoare; LOCK blocare acces la magistrala - QS0 si QS1 pentru monitorizarea starii cozii de instructiuni
Registri: generali: de date 16b:AX,BX,CX,DX; 8b: AL,AH, etc de pointer i index: SP, BP, SI, DI segment: CS, DS, ES, SS pointer de instruc iuni: IP (adresa instr. CS:IP) indicatori de control i stare: 6 indicatori stare (CF, AF, ZF, SF, OF, PF) i 3 indicatori de control: DF=1 la instr pe iruri se folosete decrementarea (de la adrese mari la adrese mici, de la dreapta la stnga) TF=1 procesorul execut o instruc iune de depanare dup fiecare instruc iune IF=1 sunt recunoscute cereri de ntrerupere mascabile
Gestionare memorie: - pn la 1MB (2^20) - paginat pe segmente continue de 64kB (2^16) Adrese fizice - se folosesc regitri pe 16b adr_segment: adr_deplasament
adr_segment 2 4 + adr_deplasament
mai multe variante pentru a adresa aceeai loca ie Ex: (H ) F000:FFF0 FFFF:0 FF00:FF0
(F0000+FFF0=FFFF0+0=FF000+FF0=FFFF0)
OBS: 1 paragraf = 16B (2^4) Memoria organizata pe 2 bankuri: adrese pare >> magistrala date D0-D7, adrese impare >> magistrala date D8-D15
Tabela vectori ntreruperi: primul kB de memorie = 256 intrri Intrare / vector interupere = adr_segment (2B) i adr_depl (2B) pentru rutina de tratare
1kB
... Adr_segment (2B) Adr_deplas (2B) vector intrerupere pentru INT x (4 octeti)
4x ..
NMI
Tipul este 2
Intreruperi externe/hardware
Executie instructiune INT x - Salveaz reg indicatori in stiv - TF0, IF0 - Salveaz CS n stiv, salveaz IP n stiv - nscrie CS i IP cu vectorul de ntrerupere de la adresa fizic 4x Urmeaz salt la rutina de tratare Rutina se termin cu IRET care asigur refacerea par ial a contextului i revenire corect n program: Reface reg indicatori salvat n stiv Reface CS i IP cu valorile salvate n stiv
indicatori CS IP 1kB CS Adr_segment (2B) Adr_deplas (2B) 4x 0 IP Rutina de tratare intrerupe re x -----------IRET
stiva
OBS:
Diferit de CALL +RET IP sau far CALL +RET CS i IP Intreruperi hard: salvare toti registrii refacere completa context
Partajare vectori intrerupere !!! Unii vectori de intreruperi nu sunt acesibili programatorului exceptii
salveaz vector ntrerupere vechi scrie noul vector de ntrerupere daca este cazul, asigura executie servicii vechi In totalitate: prin apel veche rutina la sfarsit aplica ie: refacere vector ntrerupere vechi!!!!!
Probl. de reentran !!! marcare sectiune critica (SC) i for are IF=0 pe durata SC!!
INT 0BH IRQ3_8259_I BIOS COM (implicit mascat de 8259) INT 0CH IRQ4_8259_I BIOS COM (implicit mascat de 8259) INT 0DH IRQ5_8259_I BIOS LPT, disc INT 0EH IRQ6_8259_I BIOS disc flexibil INT 0FH IRQ7_8259_I BIOS LPT INT 70H IRQ0_8259_II BIOS ceas CMOS INT 71H IRQ1_8259_II BIOS redirectata spre INT0AH /cascadare INT 72H IRQ2_8259_II BIOS rezervata INT 73H IRQ3_8259_II BIOS rezervata Aceste tipuri rezulta din INT 74H IRQ4_8259_II BIOS rezervata cuvintele de initializare trimise INT 75H IRQ5_8259_II BIOS rezervata catre 8259_I si 8259_II INT 76H IRQ6_8259_II BIOS disc dur INT 77H IRQ7_8259_II BIOS rezervata 8259_I i 8259_II ini ializate de BIOS. Se pot schimba priorit ile prin programare -> nerecomandat.
8086 8259_II
IRQ7
8259_I
IRQ7 . . .
INT
INTR
. . . IRQ0
Controller tastatura
OBS: In rutina de tratare a unei intreruperi hard se poate genera o intrerupere soft (INT 08H INT 1CH) SO pot desconsidera sugestiile INTEL INT 05H INTEL depire limite super/infer intr-un bloc de date Bound Range Exceed INT 05H BIOS realizeaz print screen De aceea, cnd depirea este atins print screen
Prioritati:
INT interne/soft (fara INT 1), cu INT i mai prioritar ca INT j, dac 4 < i < j NMI INTR (mascabile) INT 1 diferit la 80386 (pas cu pas)
scade
I. 1. 3 BIOS
BIOS = ansamblu de rutine de tratare a unor ntreruperi ce asigur servicii de baz (pentru un hardware func ional) = interfat SO hardware
Ex: 0000:0400 H, 2B adresa COM1 0000:0408 H, 2B adresa LPT1 0000:041C H, 2B pointer pozitie curenta in coada tampon a tastaturii 0000:0440 H, 1B contor ce indic ce interval timp mai trebuie men inut pornit motorul unit ii floppy (motor oprit cand contorul este 0) 0000:04F0 H, 16B zon de comunica ie ntre aplica ii
ntreruperi BIOS
5, 8, 9, 10-1C, 4A, 70 1D, 1E, 1F, 41, 46 vectori de ntrerupere ce pointeaza spre tabele BIOS Se vor utiliza in acest curs INT08H, INT09H.
INT 08H ceas pentru aplicatii de timp real /implicit nemascata de 8259 IRQ0 _8259I Cererea de ntrerupere apare de la canal 0 / 8253 - implicit la fiecare 55msec (de 18.2 ori pe sec) Pe programarea implicit 8259 ntreruperea de nivel prioritar Rutina de tratare asigur: Incrementeaz contorul de la adresa 0000:046C H; dac valoarea acestuia indic scurgerea a 24 ore, atunci acesta devine 0 i se pozi ioneaza indicatorul de la adresa 0000:0470 citeste contorul de la adresa 0000:0440 daca valoarea este 0 oprete motorul la floppy i pozi ioneaz indicatorul de la 000:043F altfel decrementeaza contorul genereaza intrerupere utilizator INT 1CH rutina de tratare este implicit IRET achit ntrerurperea la 8259
INT 09H tastatura /implicit nemascata de 8259 IRQ1 _8259I Cererea de ntrerupere apare la fiecare apasare i eliberare de tast Pe programarea implicit 8259 ntreruperea de nivel prioritar maxim dup INT08H Rutina de tratare asigur: Citete cod scan al tastei (din port de adresa 60H); Determina codul ASCII Salveaz codul scan i ASCII ntr-o coad circular a tastaturii Coda tampon are 32 octe i (spa iu pentru 16 taste) ncepnd cu 0000:041E H Pointerul la pozi ia curent este la adresa 0000:041C H La salvare: OH OL
cod SCAN cod ASCII - pentru func ionale: OH OL cod ASCII extins 0
Dac au fost apasate tastele ALT, sau CTRL sau Shift sau INS sau CAPS se actualizeaza octetii de stare de la adresele 0000:0417 si 0000:0418 Aceti octe i pot fi citi i i cu INT 16H Dac s-a apsat CTR+ALT+DEL se nscrie 1234H la adresa 0000:0472 i se pred controlul rutinei de ini ializare n toate situa iile se reini ializeaz controlerul de tastatura pentru a se putea citi tasta urmtoare i se achita intreruperea la 8259 pentru o func ionare corecta!!!!!. Porturile 60H si 61H sunt folosite pentru comunicarea cu tastatura - citire 60H pentru aflare cod scan tasta (bit D7=0 la apasare si 1 la eliberare) - port 61H D7 D6 D5 D4 D3 D2 D1 D0 = 0 enable Pentru alte dispozitive = 1 disable periferice
Secven a de reini ializare controller tastatura: - obligatorie Citete octet_1 de la port 61H Pozi ioneaza in octetul citit bitul D7 pe 1 i scrie rezultatul n port 61H Scrie octet_1 (nemodificat) la portul 61H Sugestie rutina proprie de testare daca o tasta a fost apasata: Citeste port 60H Verifica daca este codul scan al tastei cautate Daca da executa serviciile suplimentare dorite Asigura servicii vechi ale rutinei (apel veche rutina) - servicii obligatorii: reinitializare controler tastatura i achitare intrerupere la 8259
INT 12H determin dimensiunea memoriei pentru DOS i aplica ii Valoarea este tiut de la initializare / testul de memorie Rutina de tratare asigur nscrierea lui AX cu informa iile luate de la 0000:0413H INT 13H servicii disc pachet de func ii ce permit acces la nivel de sector nainte de generarea ntreruperii: se nscrie AH cu numrul func iei se nscrie n DL numr unitate Exemple: func ia 00H: pozi ionare la 0 a controlerului de disc + calibrare func ia 01H: citire stare dup ultima opera ie efectuat (n AL se returneaz un cod de eroare) func ia 02H: citire sectoare func ia 03H: scriere sectoare Tabele parametri: disc floppy 0000:0078H; disc dur 0000:0104H
INT 14H servicii porturi seriale desi n zona BIOS este spa iu rezervat pentru 4 porturi COM, numai 2 sunt ini ializate implicit la pornirea calc func ia 00H: ini ializare nainte de generarea ntreruperii: AH = numrul func iei DX = 0 sau 1 (nr port COM) AL = parametri initializare returneaza: AX- stare func ia 01H: emitere caracter nainte de generarea ntreruperii: AH = numrul func iei DX = 0 sau 1 (nr port COM) AL = caracter returneaza: AX=stare func ia 02H: recep ie caracter nainte de generarea ntreruperii: AH = numrul func iei
DX = 0 sau 1 (nr port COM) returneaza: AL = caracter, AH=stare func ia 03H: citire stare nainte de generarea ntreruperii: AH = numrul func iei DX = 0 sau 1 (nr port COM) returneaza: AX=stare INT 15H diverse (ex: joystick, determinare disponibil memorie extended)
INT16H interfat tastatura - folosete informa iile nscrise de INT09H n coada tampon tastatura sau la octe ii de stare tastatura nainte de generarea ntrerurperii: se nscrie AH cu numrul func iei func ia 00H: ateapt cod tasta apsat i citete codul func ia 10H: idem pentru taste extinse func ia 01H: verific dac este un cod disponibil de tasta apasat returneaz: ZF=0 cod disponibil; n AL cod ASCII, n AH cod scan ZF=1 cod nedisponibil func ia 02H: citire stare
AL = shift status bits 0 = right shift key depressed 1 = left shift key depressed 2 = CTRL depressed 3 = ALT depressed 4 = SCROLL LOCK active 5 = NUM LOCK active 6 = CAPS LOCK active 7 = INSERT state active
INT 17H servicii port paralel func ia 00H: tiprire caracter nainte de generarea ntreruperii: AH = numrul func iei DX = 0 , 1, 2 (nr port LPT) AL = caracter de tiprit returneaza: AH=stare port func ia 01H: ini ializare port nainte de generarea ntreruperii: AH = numrul func iei DX = 0 , 1, 2 (nr port LPT) returneaza: AH- stare port func ia 02H: citire stare port nainte de generarea ntreruperii: AH = numrul func iei DX = 0 , 1, 2 (nr port LPT) returneaza: AH- stare port
INT 18H, 19H interpretor ROM BASIC pentru ncrcare SO INT 1AH - acces la ceas CMOS: actualizat fr interven ia CPU - acces la contor zona BIOS (tick count): actualizat de 18.2 ori pe secunda (valori: o ora:65543; 1 zi:1573040) de INT08H
- citire/scriere data (func ii 4/5) sau ora CMOS (func ii 2/3) - inscriere/anulare alarm: func ia 6: setare alarma la ora precizat se va executa rutina utilizator INT 4AH atentie: returneaza cod de eroare daca ceasul nu este functional!! sau alarma era deja setata functia 7: reset alarma pentru modificare ora alarma: reset alarma veche, apoi setare ora noua - citeste/scrie contor tick (functii 0/1) INT 1BH tratare Ctrl +BREAK - se execut daca se apas CTRL+BREAK - implicit: IRET; preluata de DOS
INT 1CH rutina ceas utilizator - generat de INT08H - implicit: IRET INT 4AH alarma utilizator - generat de INT 70H - implicit: IRET
INT 70H ceas CMOS pe IRQ0-8259II /implicit mascata la 8259 si CMOS - cererea de ntrerupere (dupa activare generare periodica in CMOS) apare de 1024 ori pe sec - dac ora_CMOS = ora_alarma, se genereaza INT 4AH
Tabele de parametri
INT 1DH tabel parametri video INT 1EH tabel parametri floppy (10B) folosita de INT 13H Ex: timp salt la alta pista, timp pozi ionare cap, dimensiune sector, numar sectoare etc INT 41H Tabel parametri disc dur (16B) folosita de INT 13H INT 46H Tabel parametri al doilea disc dur (16B) folosita de INT 13H INT 1FH Tabel cararactere ACSII set extins - folosita n mod grafic, coduri 128 255 (pentru coduri 0-127 in ROM la adresa F000: FA6E H) - la initializare pointerul este F000:0000, dar caracterele - nedisponibile; pot fi inscrise de SO. 1 caracter = 8B
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1
- dimensiune memorie pentru aplica ie limita superioara (SUP) de la AdrPSP:0002H SUP-AdrPSP=memorie alocat n paragrafe - f r header MCBZ i mediu