You are on page 1of 0

Ionel Daniel MORARIU

INTERFEE I
PROTOCOALE DE COMUNICAIE
ndrumar de laborator











Editura Universitii Lucian Blaga din SIBIU
2007
Interfee i protocoale de comunicaie 2



Refereni tiinifici:
Prof. univ. dr. ing. Nicolae PU, Universitatea Politehnica Bucureti
Prof. univ. dr. ing. Lucian VINAN, Universitatea Lucian Blaga din Sibiu



Tehnoredactare: Daniel MORARIU


Descrierea CIP a Bibliotecii Naionale a Romniei
MORARIU, IONEL DANIEL
Interfee i protocoale de comunicaie: ndrumar de laborator /
Morariu Ionel Daniel - Sibiu
Editura Universitii Lucian Blaga din Sibiu, 2007
Bibliogr.
ISBN 978-973-739-447-7
004.35

Cuprins 3
CUPRINS

Introducere ........................................................................................................... 7
1 Medii de programare .................................................................................... 9
1.1 Scopul lucrrii ......................................................................................... 9
1.2 Consideraii generale ............................................................................... 9
1.3 Comanda perifericelor sub sistemul de operare MS-DOS...................... 9
1.3.1 Faciliti oferite de limbajul Borland C++ 3.1 pentru lucrul cu
perifericele ........................................................................................ 9
1.3.1.1 Folosirea asamblrii direct din programul C ............................. 9
1.3.1.2 Accesul fizic la regitrii microprocesorului............................... 9
1.3.1.3 Inserarea de instruciuni scrise n asamblare direct n C ......... 10
1.3.1.4 Utilizarea sistemului de ntreruperi al microprocesorului
8086 ......................................................................................... 10
1.3.1.5 Instalarea handler-elor utilizator .............................................. 12
1.3.1.6 Funcii de tip interrupt .......................................................... 13
1.3.1.7 Funcii pentru scrierea/citirea n/din porturi ............................ 14
1.3.1.8 Funcii pentru accesul direct la memorie ................................. 15
1.4 Accesul la interfee sub sistemele de operare Windows
NT/2000/XP .......................................................................................... 16
1.4.1 Driverul NTPort Library ............................................................. 18
1.4.2 Driverul PortTalk ............................................................................ 21
2 Sistemul Video ............................................................................................. 23
2.1 Scopul lucrrii ....................................................................................... 23
Interfee i protocoale de comunicaie 4
2.2 Consideraii generale ............................................................................. 23
2.3 Tipuri de adaptoare video ..................................................................... 23
2.4 Serviciile BIOS referitoare la seturile de caractere din modurile
alfanumerice .......................................................................................... 24
2.5 Sistemul video modul grafic .............................................................. 27
2.6 Serviciile BIOS pentru lucrul cu modurile grafice INT 10h ............. 28
2.7 Probleme propuse .................................................................................. 29
3 Gestiunea tastaturii ..................................................................................... 30
3.1 Scopul lucrrii ....................................................................................... 30
3.2 Consideraii generale ............................................................................. 30
3.3 Portul de tastatur Codurile de scanare .............................................. 32
3.4 Buffer-ul de tastatur - Codurile ASCII i codurile de scanare ............ 32
3.5 Serviciile BIOS ale ntreruperii INT 16h .............................................. 34
3.6 Probleme propuse .................................................................................. 35
4 Nivelul fizic de acces la disc ........................................................................ 37
4.1 Scopul lucrrii ....................................................................................... 37
4.2 Servicii BIOS - INT 13h, Servicii DOS - INT 25h, INT 26h ............... 37
4.3 Pachetul de citire / scriere pentru INT 25h, INT 26h ........................... 39
4.4 ntreruperea INT 13h ............................................................................ 40
4.5 Probleme propuse .................................................................................. 46
5 Interfaa IDE/ATA ...................................................................................... 51
5.1 Scopul lucrrii ....................................................................................... 51
5.2 Registrele interfeei ATA ...................................................................... 51
5.3 Execuia transferurilor de date .............................................................. 56
Cuprins 5
5.4 Comenzi ATA ....................................................................................... 57
5.5 Probleme propuse .................................................................................. 59
6 Comunicaia serial. Standardul RS-232C ............................................... 61
6.1 Scopul lucrrii ....................................................................................... 61
6.2 Consideraii generale ............................................................................. 61
6.3 Regitrii asociai cuplorului de comunicaie serial ............................. 63
6.4 ntreruperea 14h .................................................................................... 67
6.5 Probleme propuse .................................................................................. 69
7 Citirea cartelelor electronice ...................................................................... 70
7.1 Scopul lucrrii ....................................................................................... 70
7.2 Consideraii generale ............................................................................. 70
7.3 Organizarea memoriei ........................................................................... 70
7.4 Principiul de funcionare ....................................................................... 72
7.5 Probleme propuse .................................................................................. 72
8 Utilizarea comunicaiei paralele n PC ...................................................... 73
8.1 Scopul lucrrii ....................................................................................... 73
8.2 Consideraii generale ............................................................................. 73
8.3 Portul unidirecional pe 4 bii ............................................................... 74
8.4 Portul bidirecional pe 8 bii (SPP) ....................................................... 75
8.5 Portul EPP (Enhanced Parallel Port) ..................................................... 75
8.5.1 Regitrii modului EPP ..................................................................... 76
8.6 Portul ECP (Enhanced Capabilities Port) ............................................. 77
8.6.1 Regitrii modului ECP .................................................................... 78
8.7 Portul SPP standard ............................................................................... 80
Interfee i protocoale de comunicaie 6
8.8 Regitrii asociai unui cuplor de comunicaie paralel ......................... 80
8.9 ntreruperea BIOS 17h .......................................................................... 81
8.10 Probleme propuse .................................................................................. 83
9 Magistrale .................................................................................................... 86
9.1 Scopul lucrrii ....................................................................................... 86
9.2 Consideraii generale ............................................................................. 86
9.3 Magistrala ISA ...................................................................................... 86
9.4 Magistrala PCI ...................................................................................... 88
9.4.1 Regitrii magistralei PCI ................................................................. 89
9.5 Magistrala AGP ..................................................................................... 91
9.6 Circuitul EEPROM 93C46.................................................................... 92
9.7 Probleme propuse .................................................................................. 94
Anexa 1 ............................................................................................................... 96
Anexa 2 ............................................................................................................... 99
Anexa 3 ............................................................................................................. 101
Bibliografie selectiv ....................................................................................... 103
Introducere 7
Introducere

Alturi de procesor, sistemele de intrare ieire reprezint o parte important a
unui calculator. Interaciunea omului cu calculatorul are loc prin intermediul
acestor sisteme de intrare ieire, astfel c performanele sistemului de calcul
depind de relaia dintre procesor i memorie, pe de o parte i dispozitivele de
intrare ieire, pe de alt parte. Dei n ultimul timp viteaza de lucru a
procesoarelor a crescut extraordinar de mult instruciunile vor fi executate tot la
rata la care acestea sunt furnizate din memorie sau citite de pe unitile de disc.
Pe lng faptul c unele periferice au un rol important asupra vitezei de lucru a
unui calculator, altele permit conectarea calculatorului la diferite procese
tehnologice industriale. Sunt tot mai dese cazurile n care calculatorul este
folosit la supravegherea sau controlul proceselor tehnologice iar comunicaia
ntre calculator i proces se realizeaz prin intermediul interfeelor standard de
care acesta dispune. De aceea aceast carte i propune s prezinte posibiliti de
a dezvolta aplicaii i a comunica cu astfel de procese prin descrierea resurselor
i a protocoalelor interfeelor disponibile pe un PC. Aceast carte se dorete a fi
un ghid util pentru cei care vor s dezvolte aplicaii care s comande diferite
dispozitive sau procese folosind calculatorul.
Cartea de fa este destinat n principal a fi un ndrumar de laborator la
disciplina Interfee i protocoale de comunicaie existent n planul de
nvmnt al specializrii Calculatore i Automatizri. Nu se ncearc
prezentarea n aceast carte a tuturor perifericelor existente care pot fi conectate
la un calculator ci se prezint doar cteva care sunt foarte utilizate, cartea
propunndu-i prezentarea interfeelor standard i a protocoalelor folosit de
acestea pentru a fi posibil dezvoltarea de noi periferice i comunicarea cu
acestea. La finele fiecrui capitol sunt propuse spre rezolvare cteva probleme
care necesit utilizarea interfeei prezentate.
Cartea este organizat pe 9 capitole. n primul capitol se prezint facilitile
oferite de mediile de programare de nivel nalt (Visual C, C++ Builder, Borland
C++), n dezvoltarea de aplicaii pentru comanda perifericelor. n acest capitol
sunt abordate mediile de programare uzuale care pot fi utilizate pentru
programarea perifericelor. Nu vor fi prezentate aici mediile de programare
dedicate, existente, care mascheaz nelegerea la nivel hardware a modului de
funcionare a acestor interfee i care vor face obiectul unei alte cri. Capitolul 2
este dedicat prezentrii sistemului video (i mai ales a plcii video) precum i
Interfee i protocoale de comunicaie 8
modului low-level de programare a acestuia. n capitolul 3 se prezint tastatura
cu modul ei de funcionare ca i dispozitiv de intrare i de ieire precum i
resursele hardware disponibile. n capitolul 4 se ia n vizor unitile de disc ca i
unele dintre cele mai utilizate periferice i se prezint modul de organizare a
informailor i modul de acces la acestea folosind serviciile BIOS urmnd ca n
capitolul 5 s se prezinte modul fizic de acces la aceste informaii i comenzile
interfeei ATA. n capitolul 6 se prezint caracteristicile comunicaiei seriale, n
special standardul RS232 existent pe calculator, precum i protocolul de
comunicaie i resursele hardware puse la dispoziie pentru a comunica pe
interfaa serial. Capitolul 7 este dedicat prezentrii structurilor cartelelor
electronice, a modului de citire al acestora i a posibilitii de conectare a
acestora la un calculator. Caracteristicile de comunicaie ale portului paralel
precum i regitrii de comunicaie sunt prezentai n capitolul 8. De asemenea se
prezint toate tipurile de porturi paralele existente i modul de dezvoltare de
aplicaii pentru acestea. n capitolul 9 se prezint magistralele existente n
interiorul calculatorului precum i modul de dezvoltare de aplicaii pentru a
lucra cu plcile de extensie conectate prin aceste magistrale. n anexe sunt
prezentate cteva aplicaii simple dezvoltate n limbajul C++ care exemplific
posibiliti de programare i accesare a ctorva perifericelor.
Spernd c aceast carte va fi util cititorilor, autorul ateapt comentarii i
sugestii privind mbuntirea coninutului crii pe adresa:
daniel.morariu@ulbsibiu.ro
Daniel MORARIU

Medii de programare 9
1 Medii de programare
1.1 Scopul lucrrii
Lucrarea i propune familiarizarea studenilor cu funciile puse la dispoziie de
diferitele medii de programare pentru dezvoltarea de aplicaii care s permit
lucrul cu diferite dispozitive conectate la calculator. Se ncearc familiarizarea
studenilor cu dezvoltarea acestor tipuri de aplicaii.
1.2 Consideraii generale
O dat cu apariia sistemelor de operare moderne au fost restricionate o mare
parte din metodele clasice de accesare i de lucru cu perifericele. n acest capitol
sunt prezentate att o parte din metodele vechi pentru lucrul cu perifericele
disponibile numai sub sistemele de operare MS-DOS, Windows 95/98/Me care
nu sunt aa de restrictive, din punct de vedere al accesului la porturi, precum i
metodele puse la dispoziie n sistemele de operare bazate pe tehnologia NT.
1.3 Comanda perifericelor sub sistemul de operare MS-DOS
1.3.1 Faciliti oferite de limbajul Borland C++ 3.1 pentru lucrul cu
perifericele
1.3.1.1 Folosirea asamblrii direct din programul C
Limbajul C ofer posibilitatea programrii mixte att n limbajul C ct i n
limbajul de asamblare, astfel beneficiind att de structurile de date puternice ale
limbajului de nivel nalt ct i de viteza de execuie a programelor scrise n
limbajul de asamblare.
1.3.1.2 Accesul fizic la regitrii microprocesorului
Se poate face folosind variabilele puse la dispoziie de mediul C:
_AX, _AH, _AL, _BX, _BH, _BL, _CX, _CH, _CL, _DX, _DH, _DL, _SI,
_DI, _BP, _SP, _CS, _ES, _DS, _SS, _FLAGS.
Interfee i protocoale de comunicaie 10
Exemplu:
_AX = 0x1122;
1.3.1.3 Inserarea de instruciuni scrise n asamblare direct n C
Se face folosind prefixul asm.
Exemplu:
asm mov ax, 1122h
Pentru scrierea mai multor instruciuni succesive n limbajul de asamblare se pot
folosi acoladele, la fel ca pentru orice instruciuni compus.
asm {
xor eax,eax
mov dx,378h
in al,dx
}
Programele care conin linii asm trebuie s anune acest lucru compilatorului
prin directiva
#pragma inline
1.3.1.4 Utilizarea sistemului de ntreruperi al microprocesorului
8086
Ofer posibilitatea unui apel indirect la o subrutin a crei adres este nscris
ntr-un cmp din tabloul vectorilor de ntreruperi al microprocesorului.
Funciile pentru utilizarea ntreruperilor software sunt:
void int86(int nr_intr, union REGS *inregs, union REGS
*outregs);
void int86x(int nr_intr, union REGS *inregs, union REGS
*outregs, struct SREGS *segregs);
Cele dou funcii permit apelul ntreruperilor software sub limbajul C oferind
accesul la regitrii procesorului imediat naintea apelului ntreruperii ct i
imediat dup execuia acesteia. Astfel parametrul nr_intr reprezint numrul
ntreruperii care se dorete a fi apelat, *inregs reprezint adresa unei structuri
care conine valorile ce vor fi scrise n regitrii procesorului nainte de a se apela
ntreruperea specificat iar *outregs reprezint adresa unei structuri n care se
vor scrie valorile aflate n regitrii procesorului dup execuia ntreruperii
specificate. Diferena ntre int86(...) i int86x(...) const n faptul c int86x()
permite modificarea registrelor de segment. Funciile ncarc registrele
Medii de programare 11
microprocesorului cu valorile din inregs, execut ntreruperea software
specificat, i ntorc n outregs valorile registrelor dup execuie.
Transferul de parametrii prin registrele microprocesorului ctre subrutina de
servire a ntreruperii se poate face prin urmtoarele structuri de date care sunt
declarate n biblioteca dos.h.
struct BYTEREGS {
unsigned char al, ah, bl, bh;
unsigned char cl, ch, dl, dh;
};
struct WORDREGS {
unsigned int ax, bx, cx, dx;
unsigned int si, di, cflag, flags;};
struct REGS {
struct WORDREGS x;
struct BYTEREGS h;
};
struct SREGS {
unsigned int es;
unsigned int ds;
unsigned int ss;
unsigned int cs
};
Structura BYTEREGS definete variabilele care fac legtura cu regitrii
procesorului cu acces pe octet iar structura WORDREGS definete variabilele
care fac legtura cu regitrii cu acces pe cuvnt ai procesorului. Structura REGS
folosit n cadrul funciilor int86(...) i int86x(...) ca fiind union definete
variabile care fac legtura att cu regitrii de acces pe cuvnt ct i pe octet ai
procesorului. Specificarea structurii REGS ca i union ofer posibilitatea ca cele
dou variabile definite de tip BYTEREGS i WORDREGS s foloseasc acelai
spaiu de memorie att pentru definirea variabilelor pe cuvnt ct i a celor pe
octet.
Un exemplu simplu care folosete structurile definite i funcia int86 pentru
apelul ntreruperii INT 21h subfuncia 01h (citirea unui caracter de la tastatur)
este:
#include <dos.h>
union REGS r_in,r_out;
void main(){
r_in.h.ah=0x01;
int86(0x21,&r_in, &r_out);
}
Interfee i protocoale de comunicaie 12
1.3.1.5 Instalarea handler-elor utilizator
n ceea ce privete implementarea de noi rutine de tratare a ntreruperilor
hardware i software i instalarea acestora n locul celor existente (instalarea
handler-elor utilizator), limbajul C pune la dispoziie urmtoarele funcii,
echivalente celor din limbajul de asamblare:
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

void interrupt(*old_intr)(__CPPARGS);
void interrupt newIntr(__CPPARGS)
{...
}
Aceast funcie reprezint echivalentul C al funciei 35h a ntreruperii 21h.
Prima instruciune definete o variabil de tip interrupt numit old_intr n care
se poate salva adresa vechii rutine de tratare a ntreruperii pentru a permite
restaurarea ulterioar a acestei. Ce-a de-a doua instruciune reprezint declararea
unei nou rutine de tratare a ntreruperii. Definirea constantei __CPPARGS
care este folosit ca i parametru la cele dou instruciuni este necesar pentru a
putea face diferena (la nivel de compilator) ntre definirea unei ntreruperi n C
i a unei ntreruperi n C++.
Adresa unei rutine de tratare a ntreruperii poate fi preluat folosind funcia
getvect cu prototipul:
old_intr = getvect(nr_intr);
Funcia va fi apelat cu un ntreg nr_intr reprezentnd indexul ntreruperii la
care se dorete preluarea vectorului de ntrerupere i va ntoarce adresa rutinei
de tratare a ntreruperii respective, vzut ca o funcie de tip interrupt care va fi
salvat n old_intr.
Un exemplu care citete adresa rutinei de tratare a ntreruperii 21h i o salveaz
ntr-o variabil:
void interrupt(*old_21h)(...)
//declaraie pointer la o funcie de tip ntrerupt

old_21h = getvect(0x21);
// citirea vectorului de ntrerupea
Medii de programare 13
Aceast funcie este folosit de obicei pentru salvarea adresei rutinei de tratare a
unei ntreruperi nainte de a indirecta ntreruperea respectiv ctre noua rutin
proprie. Salvarea permite apelul vechii rutine direct din noua rutin proprie i
restaurarea vechiului vector dac este cazul i dac restaurarea mai poate fi
posibil.
Pentru scrierea n tabela vectorilor de ntreruperi a noii adrese a rutinei de tratare
ntreruperii se poate folosi funcia setvect cu prototipul:
void setvect(int nr_intr, void newIntr);
Aceast funcie este echivalent funciei 35h a ntreruperii 21h. Funcia este
apelat cu un parametru ntreg nr_intr ce reprezint indexul ntreruperii ce se
dorete indirectat i cu un al doilea parametru newIntr reprezentnd adresa noii
rutine de tratare a ntreruperii respective, vzut ca o funcie de tip interrupt.
Exemplu: pentru a indirecta ntreruperea 21h se pot folosi urmtoarele linii de
program:
void interrupt new_21h()
{
//corp funcie noua ntrerupere
}
void main(void)
{
...
setvect(0x21,new_21h);
}
1.3.1.6 Funcii de tip interrupt
Definirea unei funcii ca fiind de tip interrupt are ca efect urmtoarele:
1. La intrare n funcie se vor executa automat urmtoarele instruciuni din
limbajul de asamblare:
push ax, bx, cx, dx, es, ds, si, di, bp
mov bp,DGROUP
mov ds,bp ;poziioneaz de pe zona de date a
;programului
mov bp,sp ;permite accesarea ulterioar a
;regitrilor salvai
Obs. Ultima linie apare doar dac programul este compilat cu opiunea
Standard Stake Frame activ.
Interfee i protocoale de comunicaie 14
2. La ieirea din funcie se vor executa urmtoarele instruciuni:
pop bp, di, si, ds, es, dx, cx, bx, ax
iret
Obs: Datorit restaurrii din stiv a tuturor regitrilor implicai n ntoarcerea de
parametrii de ctre anumite ntreruperi, n forma prezentat nu se pot ntoarce
valori valide folosind funcii de tip interrupt. Ca urmare, se poate deduce c
folosirea funciilor de tip nterrupt este util la indirectarea ntreruperilor
hardware sau a ntreruperilor software care nu ntorc parametri. ntr-o astfel de
situaie, relativ des ntlnit, coninutul unei funcii de tip interrupt poate arta la
fel ca n exemplul urmtor:
void interrupt new_21()
{
old_21h(); //apelul vechii rutine de tratare
//a ntreruperii
//operaii de salvare a datelor n
//variabile program
}
1.3.1.7 Funcii pentru scrierea/citirea n/din porturi
Pentru scrierea n port limbajul C pune la dispoziie urmtoarele funcii definite
n biblioteca dos.h i n biblioteca conio.h:
//n biblioteca dos.h
void outportb ( unsigned portID, unsigned char val);
void outport ( unsigned portID, unsigned val);

//n biblioteca conio.h
unsigned outpw( unsigned portID, unsigned int val);
int outp ( unsigned portID, int val);
Funcia outportb permite scrierea unui octet (specificat n parametrul val) la
adresa de port specificat prin parametrul portID. Funcia outport permite
scrierea un cuvnt specificat n parametrul val la adresa de port specificat n
parametrul portID. Instruciunile outpw i outp sunt macrouri care permit
scrierea la portul specificat prin portID a unei valori specificate n val.
Pentru citirea dintr-un port n limbajul C se pot folosi urmtoarele instruciuni:
//n biblioteca dos.h
unsigned char inportb( unsigned portID);
unsigned inport ( unsigned portID);

//n biblioteca conio.h
unsigned inpw (unsigned portID);
int inp (unsigned portID);
Medii de programare 15
Funcia inportb permite citirea unui octet de la adresa de port specificat ca i
parametru al funciei portID. Funcia inport permite citirea uni cuvnt de la
adresa de port specificat.
Un exemplu simplu care permite trimiterea de semnale direct la difuzorul
(speaker-ul) calculatorului prin scrierea n portul 61h (bitul 0 i 1) activnd sau
dezactivnd producerea de sunete cu o anumit frecvent pe speaker. Frecventa
semnalului este scris n portul 42h dup ce s-a specificat n portul 43h valoarea
b6h.
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#define ESC 27

void main()
{ int gata = 1,frecventa = 150, divizor;
unsigned short value;
while(gata){
switch(getch()){
case ESC: gata = 0;break;
case '+': frecventa++; break;
case '-': frecventa--; break;
}
if (frecventa == 0)
frecventa = 1;
//specificare frecven
divizor = 1193180/ frecventa;
outport(0x43, 0xb6); // programare timer 2
outport(0x42, (short)( divizor % 256));
outport(0x42, (short)( divizor / 256));
//validare speaker
value = inport(0x61);
value = value | 0x03; // activare speaker
outport(0x61, value);
}
value = inport(0x61);
value = value & (0xFF - 0x03); // dezactivare
outport(0x61, value); //speaker
}
1.3.1.8 Funcii pentru accesul direct la memorie
Limbajul C prin intermediul bibliotecii dos.h pune la dispoziie funcii care
permit scrierea i citirea unei anumite zone de memorie specificat prin adresa
de segment i adresa de offset. Astfel pentru citirea unui octet de la o adres
Interfee i protocoale de comunicaie 16
specificat de memorie exist funcia peekb iar pentru citirea unui cuvnt de la
o adres de memorie exist funcia peek. Prototipurile celor dou funcii sunt:
int peek (unsigned adrSegment, unsigned adrOffset);
char peekb(unsigned adrSegment, unsigned adrOffset);
Adresa de la care se dorete citirea este specificat prin adres de segment
(parametrul adrSegment) i prin adres de offset (parametrul adrOffset).
Pentru scrierea la o adres specificat de memorie a unui cuvnt sau a unui octet
sunt puse la dispoziie funciile poke i pokeb definite n biblioteca dos.h.
void poke (unsigned adrSegment, unsigned adrOffset, int
value);
void pokeb(unsigned adrSegment, unsigned adrOffset, char
value);
Funcia poke permite scrierea unui cuvnt iar funcia pokeb permite scrierea
unui octet specificat prin parametrul value la adresa de segment adrSegment
i la adresa de offset adrOffser.
De asemenea limbajul C mai pune la dispoziie macrouri care permit definirea
de variabile de tip pointer spre o anumit zon de memorie specificat. De altfel
pune la dispoziie macrouri care permit citirea adresei de segment i a adresei de
offset la care s gsete o anumite variabil.
void far *MK_FP(unsigned adrSeg, unsigned adrOff);
unsigned FP_SEG(void far *p);
unsigned FP_OFF(void far *p);
Macroul MK_FP permite crearea unei variabile care pointeaz spre zona de
memorie specificat prin adresa de segment adrSeg i adresa de offset
adrOff. Folosind aceast variabil de tip pointer se poate scrie i citi zona
respectiv de memorie. Macroul FP_SEG permite citirea adresei de segment n
care se gsete definit variabila specificat ca i parametru. Macroul FP_OFF
permite citirea adresei de offset la care se gsete definit variabila specificat
ca i parametru.
1.4 Accesul la interfee sub sistemele de operare Windows
NT/2000/XP
Aceste sisteme de operare, spre deosebire de sistemele Windows 95/98/Me,
utilizeaz nivele de privilegii ale procesorului. Nivelul la porturile de I/O este
controlat de nivelul privilegiilor de I/O (IOPL Input/Output Privilege Level)
din registrul indicatorilor de condiii i de harta drepturilor de I/O din segmentul
Medii de programare 17
de stare al procesorului TSS (Task State Segment). Astfel de cte ori se ncearc
accesul la un port de I/O dintr-un program utilizator obinuit se va genera o
excepie de instruciune privilegiat.
Procesorul recunoate patru nivele de privilegiu al programelor (de la 0 la 3).
Nivelul 0, cel mai privilegiat reprezint nivelul nucleu. Nivelul 3, nivelul cel
mai puin privilegiat, reprezint nivelul programelor utilizator. Cei doi bii IOPL
din registrul indicatorilor de condiii indic nivelul de privilegiu pe care trebuie
s l aib un proces pentru a putea executa instruciunile privilegiate, asemenea
instruciuni fiind i cele de scriere / citire din porturi.
Harta drepturilor de I/O din segmentul de stare al procesorului conine cte un
bit pentru fiecare adres de I/O i poate fi utilizat pentru a permite programelor
care nu au un nivel de privilegiu suficient de mare s poat accesa porturile de
I/O. Dac bitul corespunztor unei adrese de I/O este setat, o instruciune de I/O
cu acea adres va genera o excepie, iar n caz contrar operaia de I/O va fi
permis. Procesorul testeaz drepturile de I/O atunci cnd se execut o
instruciune de I/O ntr-un proces, iar procesul respectiv nu are un nivel de
privilegiu suficient pentru execuia instruciunii.
O alt problem care apare n limbajele de nivel nalt pentru accesul la porturi
este aceea c aceste limbaje nu mai pun la dispoziie funcii pentru accesul direct
la porturile de I/O, funcii care n variantele mai vechi ale acestor limbaje erau
disponibile (funciile inport i outport prezentate mai sus).
Exist dou soluii pentru accesul la porturile de I/O sub sistemele de operare
Windows NT/2000/XP. Prima este de a se utiliza un driver de dispozitiv care
ruleaz cu nivelul de privilegiu 0, driver care s permit accesul la porturi.
Datele sunt transferate ntre un program utilizator i driver prin intermediul
apelurilor funciei sistem DeviceIOControl, operaia care trebuie executat de
driver fiind indicat printr-un cod de control IOCTL (I/O Control). Pentru
simplificarea programelor utilizator, driverul poate pune la dispoziie i unele
funcii de I/O similare cu funciile inport i outport puse la dispoziie n trecut de
mediile de dezvoltare n limbajul C. De exemplu, aceste funcii pot fi furnizate
sub forma unor biblioteci DLL (Dynamic Link Library). Astfel, nu va mai fi
necesar apelul direct al funciei sistem DeviceIoControl.
Aceast soluie este cea recomandat pentru accesul la porturi. Totui,
dezavantajul utilizrii unui asemenea driver de dispozitiv este c eficiena
transferurilor de date va fi redus. La fiecare apel al unei funcii pentru citirea
sau scrierea unui octet, procesorul trebuie s comute de la execuia cu nivelul de
Interfee i protocoale de comunicaie 18
privilegiu 3 la cea cu nivelul de privilegiu 0, iar dup execuia operaiei s se
realizeze comutarea invers. ns, driverul poate pune la dispoziie i funcii
pentru citirea i scrierea unui bloc de date, n locul citirii i scrierii unui singur
octet. A doua soluie pentru accesul la porturile de I/O const n modificarea
hrii drepturilor de I/O pentru a permite unui anumit proces accesul la unele
porturi. Dei aceast metod nu este recomandat, ea permite rularea unor
aplicaii existente sub sistemele de operare Windows NT/2000/XP.
1.4.1 Driverul NTPort Library
Exist mai multe drivere disponibile pentru accesul la porturile I/O sub
sistemele de operare bazate pe tehnologia NT. n cadrul acestui laborator se vor
prezenta dou dintre acesta. Driver-ul NTPortLibrary pus la dispoziie de firma
Yeal Soft Studo care ofer librriile i fiierele de interfa pentru mai multe
limbaje de nivel nalt cum ar fi Visual C++, C++ Builder, Visual Basic i
Delphy. Pentru aceste limbaje de programare de nivel nalt se pune la dispoziie
funcii pentru activarea sau dezactivarea anumitor porturi precum i funcii
pentru citirea unui octet / cuvnt / dublu-cuvnt de la un port de intrare i
scrierea unui octet / cuvnt la un port de ieire.
Acest driver necesit o instalare n prealabil deoarece are nevoie de nregistrarea
unor anumite dll-uri n sistemul de operare.
n continuare vom prezenta doar modul de utilizare al acestui driver pentru
limbajul Borland C++ Builder. Pentru utilizarea funciilor de acces la porturi
(Inport, Outport) in aplicaii create n acest limbaj sunt necesare urmtori pai:
1. Se creeaz un proiect pentru aplicaia care se dorete realizat.
2. n proiectul astfel creat se include fiierul bcbport.lib. Includerea
acestui fiier se face accesnd meniul Project -> Add To project....
Pentru a putea include acest fiier n fereastra de dialog care apare se
selecteaz tipul de fiiere cu extensia lib. Fiierul bcbport.lib va fi
copiat n prealabil n directorul n care se gsete proiectul.
3. n fiierul cpp n care se dorete utilizarea funciilor de acces la porturi se
include fiierul ntport.h pus la dispoziie de driverul de acces la porturi.
Acest fiier conine prototipurile funciilor care vor putea fi utilizate
pentru accesul la porturile de intrare ieire. i acest fiier va fi copiat n
prealabil n directorul n care se gsete proiectul.
Medii de programare 19
n fiierul ntport.h sunt definite mai multe prototipuri de funcii de intrare
ieire astfel:
//pentru operaii de citire din port
WORD Inp (WORD PortAddress); //citete un octet
WORD Inport (WORD PortAddress); //citete un octet
WORD Inpw (WORD PortAddress); //citete un cuvnt
WORD InportW(WORD PortAddress); //citete un cuvnt
DWORD Inpd (WORD PortAddress); //citete un dublu-
//cuvnt
DWORD InportD(WORD PortAddress); //citete un dublu-
//cuvnt

// pentru operaii de scriere n port
void Outp (WORD PortAddress, WORD Data); //octet
void Outport (WORD PortAddress, WORD Data); //octet
void Outpw (WORD PortAddress, WORD Data); //cuvnt
void OutportW(WORD PortAddress, WORD Data); //cuvnt
void Outpd (WORD PortAddress, DWORD Data); //dublu-
//cuvnt
void OutportD(WORD PortAddress, DWORD Data); //dublu-
//cuvnt
Funciile sunt asemntoare cu cele definite n vechia versiune pentru MS-DOS
a limbajului C. Aceste instruciuni permit citirea unui octet, cuvnt sau a unui
dublu-cuvnt de la adresa de port specificat ca i parametru prin PortAddress
precum i scrierea a unui octet, cuvnt sau dublu cuvnt specificat n parametrul
Data la adresa de port specificat prin PortAddress.
Un exemplu simplu care permite trimiterea de semnale direct la difuzorul
(speaker-ul) calculatorului prin scrierea n portul 61h (bitul 1 i 2) activnd sau
dezactivnd producerea de sunete cu o anumit frecvent pe speaker. Frecventa
semnalului este scris n portul 42h dup ce s-a specificat n portul 43h valoarea
b6h.
Un exemplu simplu care scriind n portul 61h (bitul 1 i 2) activeaz sau
dezactiveaz producerea de semnale direct pe difuzorul (speaker-ul)
calculatorului folosind funciile definite de biblioteca NTPort pentru scrierea i
citire din porturi. Frecventa semnalului este scris n portul 42h dup ce s-a
specificat n portul 43h valoarea 0b6h. Se prezint interfaa pentru aceast
aplicaii i codul surs din fiierul Speacer_unit.cpp din acest proiect.
Interfee i protocoale de comunicaie 20

// Speacer_unit.cpp
//---------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include Speaker_unit.h
#include ntport.h

//---------------------------------------------------
#pragma package(smart_init)
#pragma resource *.dfm
TForm1 *Form1;

//------------------------------------------------
__fastcall Tform1::Tform1(Tcomponent* Owner) :
Tform(Owner)
{
}

//---------------------------------------------------
void __fastcall Tform1::btnSoundClick(Tobject *Sender)
{
int divizor = 1193180 / StrToInt(valFrecventa->
Caption);
// timer 2, square wave
Outport(0x43, 0xb6);
Outport(0x42, (short)( divizor % 256));
Outport(0x42, (short)( divizor / 256));
//validare speaker
short value = Inport(0x61);
value = value | 0x03; // activare speaker
Outport(0x61, value);
}

//---------------------------------------------------
void __fastcall TForm1::btnNoSoundClick(TObject *Sender){
short value = Inport(0x61);
value = value & (0xFF - 0x03); // dezactivare speaker
Outport(0x61, value);
Medii de programare 21
}

//---------------------------------------------------
void __fastcall TForm1::btnIncreaseFreqClick(TObject
*Sender)
{
int value = StrToInt(valFrecventa->Caption);
value ++;
valFrecventa->Caption = IntToStr(value);
}

//--------------------------------------------------
void __fastcall TForm1::btnDescFreqClick(TObject *Sender)
{
int value = StrToInt(valFrecventa->Caption);
value--;
if (value == 0) value = 1;
valFrecventa->Caption = IntToStr(value);
}
1.4.2 Driverul PortTalk
Este un alt driver care permite accesul la porturile de I/O. Acesta nu necesit
instalare i pune la dispoziie doar fiierele de interfa pentru mediul de
dezvoltare Microsoft Visual C++ 6.0. Acest driver pune la dispoziie doar funcii
pentru citirea / scrierea n port pe octet i pe cuvnt. Pe lng aceste funcii,
driverul mai dispune de funcii pentru modificare hrii drepturilor de I/O ale
unui proces. Pachetul conine, n plus un program AllowIo.exe care permite
unui program existent (Dos sau Windows) accesul la porturile ale cror adrese
sunt specificate ca parametrii n linia de comand.
Pentru utilizarea funciilor de acces la porturi (inport, outport) in Visual C++
sunt necesare urmtoarele operaii:
1. Se copiaz fiierele PortTalk_IOCTL.c i PortTalk_IOCTL.h n directorul
n care se gsete proiectul aplicaiei.
2. Se include n fiierul surs al aplicaie fiierul PortTalk_IOCTL.h
folosind linia:
#include PortTalk_IOCTL.h
3. nainte de utilizarea funciilor de I/O se apeleaz funcia OpenPortTalk();
4. La sfritul aplicaiei se apeleaz funcia ClosePortTalk();
Interfee i protocoale de comunicaie 22
n fiierul PortTalk_IOCTL.c funciile inportb i outportb sunt definite astfel:
void outportb(unsigned short PortAddress, unsigned char
Data);
unsigned char inportb(unsigned short PortAddress);
Fiierele PortTalk_IOCTL.c i PortTalk_IOCTL.h nu trebuiesc incluse n
proiectul aplicaiei, ci doar copiate n directorul proiectului.
Programul AllowIo.exe, care permite modificarea hrii drepturilor de I/O
pentru programele existente, poate fi lansat n execuie din linie de comand. Ca
i parametri se introduc numele programului executabil pentru care se solicit
accesul la porturi, urmat de lista porturilor de I/O la care se dorete accesul. Prin
specificarea unei adrese de I/O se va acorda accesul la 8 porturi consecutive
ncepnd de la adresa respectiv. De exemplu, pentru accesul programului
Port.exe la toate registrele portului paralel LPT1 se va introduce comanda:
allowio.exe Port.exe 0x378
Pentru accesul la toate porturile de I/E se poate specifica opiunea /a.
Sistemul Video 23
2 Sistemul Video
2.1 Scopul lucrrii
Lucrarea are ca scop familiarizarea studenilor cu tipurile de adaptoare video
existente i cu modul de funcionare al acestora. Se prezint att funciile puse la
dispoziie pentru utilizarea acestor adaptoare n modul text ct i funciile pentru
utilizarea acestora n modul grafic.
2.2 Consideraii generale
Sistemul video este compus n principal din dou pri:
- un monitor (display), folosit pentru reprezentarea informaiilor de tip text
i grafic
- un adaptor video reprezentat printr-un dispozitiv pentru conversia
semnalelor digitale transmise de procesor n semnale pentru controlul
monitorului.
2.3 Tipuri de adaptoare video
MDA - Monochrome Display Adapter cel mai vechi adaptor, permite numai
modul text 80*25 (80 coloane i 25 linii);
CGA Color Graphics Adapter permite lucrul cu 4 culori principale, modul
text 80*25 i 40*25 precum i modul grafic cu rezoluia 640*200;
HGC Hercules Graphics Card permite lucru cu nalt rezoluie n mod text i
n mod grafic o rezolzie de 640*350 i 16 culori;
VGA Video Graphics Array permite folosirea a maximum 256 culori i o
rezoluie de 640*480 n modul grafic;
Super VGA permite o rezoluie de pn la 1024*768 i a 16 bii pe culoare;
XGA eXtended Graphics Adapter.
Interfee i protocoale de comunicaie 24
2.4 Serviciile BIOS referitoare la seturile de caractere din
modurile alfanumerice
Un caracter este definit n memoria video printr-o matrice de pixeli, ale crui
dimensiuni depind de modul alfanumeric curent. Dimensiunile standard de
caractere sunt 8*8, 8*14, 8*16, 9*14, 9*16.
Serviciile BIOS au scopul de a ncrca seturi de caractere standard sau definite
de utilizator. Programatorul poate ncrca un set de caractere n dou moduri:
- folosind una din funciile 0h..4h, funcie care execut automat i un apel
al funciei de setare a modului alfanumeric corespunztor, fr a terge
coninutul memoriei video.
- Folosind una din funciile 10h..14h, dup care programatorul trebuie s
apeleze funcia de setare a modului alfanumeric, iar pagina 0 de memorie
video trebuie s fie activ.
Serviciile referitoare la seturile de caractere sunt subfuncii ale funciei 11h a
ntreruperii 10h.
Subfuncia 00h:- ncarc n memorie, n mod text un set de caractere definit de
utilizator.
AH=11h (funcia)
AL=00h (subfuncia)
BL-numrul blocului n care se va ncrca setul de caractere (0..4)
BH numrul de octei pe caracter (max. 32)
CX numrul de caractere de ncrcat
DX ofsetul primului caracter n blocul de memorie selectat
ES:BP pointer la setul de caractere ce se dorete ncrcat
ntoarce nimic.
Subfuncia 01h:- ncrcarea setului monocrom 9*14 din ROM.
AH=11h
AL=01h
Sistemul Video 25
BL-numrul blocului n care se va ncrca setul de caractere (0..4)
ntoarce nimic.
Subfuncia 02h:- ncrcarea setului 8*8 din ROM.
AH=11h
AL=02h
BL-numrul blocului n care se va ncrca setul de caractere (0..4)
ntoarce nimic.
Subfuncia 03h:- setarea blocului activ (setului de caractere).
AH=11h
AL=03h
BL valoarea ce va fi ncrcat n registrul de selectare a setului de
caractere activ.
ntoarce nimic.
Subfuncia 04h:- ncrcarea setului monocrom 8*16 din ROM.
AH=11h
AL=04h
BL-numrul blocului n care se va ncrca setul de caractere (0..4)
ntoarce nimic.
Subfuncia 10h:- ncrcarea n memorie a unui set de caractere definit de
utilizator.
AH=11h
AL=10h
BL numrul blocului n care se va ncrca setul de caractere (0..4)
BH numrul de octei pe caracter (maxim 32)
CX numrul de caractere de ncrcat
DX ofsetul primului caracter n blocul de memorie selectat
Interfee i protocoale de comunicaie 26
ES:BP pointer la setul de caractere ce se dorete ncrcat
ntoarce nimic.
Subfuncia 11h:- ncrcarea setului monocrom 9*14 din ROM.
AH=11h
AL=11h
BL numrul blocului n care se va ncrca setul de caractere (0..4)
ntoarce nimic.
Subfuncia 12h:- ncrcarea setului monocrom 8*8 din ROM.
AH=11h
AL=12h
BL numrul blocului n care se va ncrca setul de caractere (0..4)
ntoarce nimic.
Subfuncia 14h:- ncrcarea setului monocrom 8*16 din ROM.
AH=11h
AL=14h
BL numrul blocului n care se va ncrca setul de caractere (0..4)
ntoarce nimic.
Subfuncia 30h:- citirea informaiilor despre seturile de caractere existente n
ROM.
AH=11h
AL=30h
BL - numrul setului de caractere
0 partea superioar a setului de caractere 8*8 definit de utilizator
(mod grafic)
1 partea inferioar a setului de caractere 8*8 definit de utilizator
(mod grafic)
Sistemul Video 27
2 setul de caractere 8*14 din ROM
3 partea inferioar a setului de caractere 8*8 din ROM
4 partea superioar a setului de caractere 8*8 din ROM
5 setul de caractere 9*14
6 setul de caractere 8*16
7 setul de caractere 9* 16
ntoarce:
CX numrul de octei /caracter din setul de caractere selectat
DL numrul de rnduri de caractere pe ecran
ES:BP adresa din memorie a setului de caractere specificat.
2.5 Sistemul video modul grafic
Modurile grafice standard recunoscute de adaptorul superVGA sunt:
Adaptor Mod grafic
Numr
culori
Numr
pagin
Adresa de
baz
Rezoluie
04h CGA 4 1 B8000h 320*200
05h CGA 4 1 B8000h 320*200
06h CGA 2 2 B80000h 640*200
0Dh EGA 16 8 A0000h 320*200
0Eh EGA 16 4 A0000h 640*350
0Fh EGA 4 1 A0000h 640*350
10h EGA 16 2 A0000h 640*350
11h VGA 2 1 A0000h 640*480
12h VGA 16 1 A0000h 640*480
13h VGA 256 1 A0000h 320*200
SVGA 256 1 A0000h 640*480
Interfee i protocoale de comunicaie 28
Memoria video poate fi scris sau citit att cu ajutorul ntreruperilor (rutinelor)
BIOS ct i prin scrierea direct n memoria video, prin instruciuni de scriere
direct (MOV). Folosirea rutinelor BIOS este simpl ns foarte nceat n
comparaie cu accesarea direct.
2.6 Serviciile BIOS pentru lucrul cu modurile grafice INT 10h
AH=00h selectarea modului video. Selecteaz modul video i terge ecranul,
schimbnd i dimensiunea cursorului. Pentru modul grafic cursorul
nu este afiat.
AL = codul modului video.
ntoarce: nimic.
AH=0Ch scrierea unui element de imagine. Scrie un punct de o culoare
specificat la o coordonat ecran specificat.
AL = valoarea pentru culoarea elementului de imagine.
CX = ncrcat cu coordonata orizontal a elementului de imagine.
DX = ncrcat cu coordonata vertical a elementului de imagine.
BH = numrul paginii video pentru moduri grafice cu mai mult de o
pagin.
ntoarce: nimic.
AH=0Dh citirea unui element de imagine. ntoarce culoarea unui element de
imagine aflat la o poziie ecran specificat.
CX = ncrcat cu coordonata orizontal a elementului de imagine.
DX = ncrcat cu coordonata vertical a elementului de imagine.
BH = numrul paginii video pentru moduri grafice cu mai mult de o
pagin.
ntoarce:
AL = valoarea pentru culoarea elementului de imagine.
AH=0Eh scrierea unui caracter n mod TTY (TeleType). Scrie un caracter
la poziia curent a cursorului i avanseaz cursorul.
Sistemul Video 29
AL = caracterul de scris.
BL = culoarea caracterului pentru modul grafic.
BH = numrul paginii video pentru moduri grafice cu mai mult de o
pagin.
ntoarce: nimic.
AH=0Fh obinerea modului video curent. ntoarce numrul modului video
curent i anumite informaii despre acesta.
ntoarce:
AL = numrul modului video;
AH = numrul de caractere pe rnd;
BH = numrul paginii video active.

2.7 Probleme propuse
Problema 1. S se scrie un program n C care ncarc i activeaz setul de
caractere monocrom 8*8.
Problema 2. S se scrie un program C care baleiaz toate seturile de caractere
din ROM la apsarea tastei + cresctor de la subfuncia 0h la subfuncia 14h i
descresctor la apsarea tastei -. Programul va fi prsit la apsarea tastei 0.
Problema 3. S se scrie un program care la apsarea tastei 9 baleiaz toate
modurile grafice din tabelul prezentat desennd un ptrat, iar la apsarea tastei
+ sau - baleiaz toate culorile modului grafic curent. Se va afia pe ecran i
modul video curent.
Problema 4. S se scrie un program care deseneaz un ptrat n modul 13h,
baleiind toate cele 256 de culori prin scrierea direct n memorie video. (Vezi
anexa 1).
Interfee i protocoale de comunicaie 30
3 Gestiunea tastaturii
3.1 Scopul lucrrii
Lucrarea are ca scop familiarizarea cu modul de lucrul al tastaturii. Este
prezentat modul de gestiune al buffer-ului de tastatur precum i modul de
funcionare al ntreruperii hardware a tastaturii INT 09h i a portului de
tastatur.
3.2 Consideraii generale
Exist patru posibilitii de accesare a tastaturii:
folosind serviciile DOS ale ntreruperii INT 21h
folosind serviciile BIOS ale ntreruperii INT 16h
folosind ntreruperea generat de tastatur INT 09h
prin citirea i scrierea direct n portul de tastatur
Serviciile ntreruperi INT 21h sunt cele mai simple pentru accesarea tastaturii,
dar i cele mai lente. Serviciile BIOS constituie modul de baz de accesare a
tastaturii oferind posibilitatea procesrii diferitelor taste speciale cum ar fi
tastele funcionale i tastele de control al cursorului.
ntreruperea hard 09h nu este destinata folosirii de ctre utilizator, ea este
generat de ctre controlorul de tastatur la fiecare apsare sau eliberare a unei
taste. Aceast ntrerupere poate fi totui rescris de ctre utilizator.
Accesarea direct a portului de tastatur constituie modul cel mai rapid dar i cel
mai dificil mod.
La fiecare apsare a unei taste, aciunea este anunat BIOS-ului prin
intermediul ntreruperii 09h. ntreruperea 09h apeleaz o rutin de tratare a
ntreruperii care citete portul de tastatur (60h) pentru a prelua codul tastei
apsate. Codul (scancodul) este transferat BIOS-ului care l translateaz ntr-un
cod de doi octei. Octetul mai puin semnificativ conine valoarea ASCII a
caracterului, iar octetul mai semnificativ conine codul scan. Tastele speciale
(cele numerice i cele funcionale) conin 0 n octetul mai puin semnificativ i
Gestiunea tastaturii 31
codul scan al tastei n octetul mai semnificativ. Codurile astfel translatate sunt
memorate la adresa dat de valoarea din locaia 0000:041Eh (n zona tampon a
tastaturii), unde sunt pstrate pn cnd sunt citite de un anumit program.
O facilitate a tastaturii este cea de a repeta automat codul emis la meninerea
unei taste apsate, dac acest timp depete o jumtate de secund se genereaz
automat codul tastei de zece ori pe secund.
Controlul operrii cu tastatura este realizat de BIOS, prin utilizarea zonelor de
memorie rezervate n acest scop. Aceste zone pot fi utilizate pentru a citi starea
tastaturii sau pentru a modifica modul de operare al acesteia. Octeii standard
rezervai care memoreaz starea tastaturii se afl la adresele 417h i 418h,
semnificaia biilor fiind urmtoarea:
Octetul de stare de la adresa 417h:
Bit
Semnificaie
7 6 5 4 3 2 1 0
X Starea tastei Insert: 1- activa, 0- inactiv
X Starea tastei Caps Lock: 1-activa, 0- inactiv
X Starea tastei Num Lock: 1-activa, 0- inactiv
X Starea tastei Scroll Lock: 1-activa, 0- inactiv
X Starea tastei Alt: 1-activa, 0- inactiv
X Starea tastei Ctrl: 1-activa, 0- inactiv
X Starea tastei Shift stnga: 1-activa, 0- inactiv
X Starea tastei Shift dreapta: 1-activa, 0- inactiv
Octetul de stare de la adresa 418h:
Bit
Semnificaie
7 6 5 4 3 2 1 0
X Tasta Ins apsata=1
X Tasta Caps Lock apsat=1
X Tasta Num Lock apsat=1
Interfee i protocoale de comunicaie 32
X Tasta Scroll Lock apsat=1
X Tastele Ctrl-Num Lock apsate=1
X 1=activ semnalul de la tastatura de PcJr
0 Nefolosit
0 Nefolosit
3.3 Portul de tastatur Codurile de scanare
Tastatura trimite un singur cod spre calculator numit codul de scanare
(scancodul) care codific tasta i starea acesteia (o tast poate avea dou stri
apsat sau eliberat ). BIOS-ul realizeaz conversia din codul de scanare n cod
ASCII. Codurile de scanare reprezint un numr de ordine al tastei respective i
anume un ntreg pe 8 bii avnd valoarea cuprins ntre 1 i numrul total de
taste. La apsarea unei taste, controlul este preluat de handler-ul ntreruperii 09h,
aceasta citete codul de scanare din portul de tastatur de la adresa 60h. Dac o
tast este apsat un timp mai ndelungat, acelai cod de scanare este generat n
mod repetat pn la eliberarea tastei. Codul de scanare generat la eliberarea unei
taste este acelai cu cel de la apsarea tastei cu excepia bitului 7 (cel mai
semnificativ bit) care este pe 1. Astfel, de exemplu, tasta ESC (care este
prima tast de pe tastatur) produce codul 01h la apsare i codul 81h la
eliberare.
3.4 Buffer-ul de tastatur - Codurile ASCII i codurile de scanare
Buffer-ul de tastatur este o poriune din zona de date BIOS folosit pentru
memorarea temporar a informaiei introduse de la tastatur. La apsarea unei
taste, handler-ul ntreruperii hard 09h plaseaz codul de scanare i codul ASCII
corespunztor tastei apsate n acest buffer.
Buffer-ul de tastatur este caracterizat de urmtorii parametrii:
buffer start reprezint adresa de nceput a buffer-ului n zona de date
BIOS
buffer end reprezint adresa de sfrit a buffer-ului n zona de date
BIOS
Gestiunea tastaturii 33
buffer head reprezint adresa primului caracter care trebuie citit de ctre
sistem
buffer tail - reprezint adresa locaiei la care se va insera de ctre handler-
ul ntreruperii 09h urmtorul caracter
Sistemul de operare seteaz valorile pentru buffer start i buffer end la ncrcare
i nu le modific n timpul lucrului.
Imediat dup ncrcarea sistemului de operare parametrii pentru buffer start,
buffer end i buffer tail au aceeai valoare iniial.
La tastarea unei comenzi caracterele care compun comanda vor fi depuse pe cte
2 octei (unul pentru codul ASCII i unul pentru codul SCAN) i n buffer,
inclusiv Enter-ul (terminatorul de comand). Dac sistemul de operare nu este
ocupat cu execuia altor operaii caracterele sunt preluate din buffer iar
parametrii buffer head i buffer tail sunt setai la aceeai valoare care pointeaz
la octetul imediat urmtor ultimului caracter din comand. n cazul n care un
caracter nu este preluat din buffer, parametrul buffer head este pstrat
nemodificat i pointeaz spre cel mai vechi caracter din buffer care nu a fost
preluat nc iar parametrul buffer tail va pointa spre urmtoarea locaia goal din
buffer.
n zona de date BIOS se gsesc adresele parametrilor buffer-ului de tastatur
care sunt:
buffer start la adresa: 0040:0080h de obicei 01Eh
buffer stop la adresa: 0040:0082h de obicei 03Eh
buffer head la adresa: 0040:001Ah- adresa capului zonei tampon a
tastaturii (de unde ncepe irul de caractere nepreluate nc)
buffer tail la adresa: 0040:001Ch- adresa cozii zonei tampon a tastaturii
(unde se termin irul de caractere)
Buffer-ul funcioneaz ca o structur de tip QFIFO (coad ciclic), aceasta
nsemnnd c dup ce ultima locaie a fost ocupat se va nscrie automat n
primul octet al buffer-ului i ca atare parametrul buffer tail va fi iniializat cu
valoarea de start a buffer-ului.
Handlerul ntreruperii 09h citete codurile scan de la tastatur i le convertete n
aciuni sau n coduri de caractere dup cum urmeaz:
Interfee i protocoale de comunicaie 34
Pentru tastele ASCII cnd este ntlnit un scan code codul ASCII i codul
SCAN al tastei sunt plasate n zona tampon a tastaturii care se afl la adresa
0000:041Eh i are o dimensiune de 32 octei. Codurile sunt plasate n zona
tampon la locaia adresat de pointerul cozii zonei tampon. n urma acestei
operaii pointerul cozii de ateptare este incrementat cu 2.
Dac au fost apsate tastele ALT, CTRL, sau SHIFT se actualizeaz octeii de
stare de la adresa 0000:0417h i 0000:0418h
Dac a fost apsat combinaia CTRL+ALT+DEL, octeii de la adresa
0000:0472h sunt iniializai cu valoarea 1234h i se pred controlul rutinei de
iniializare.
3.5 Serviciile BIOS ale ntreruperii INT 16h
Funcia AH=00h - Citirea (ateptarea) codului unei taste apsate.
ntoarce:
AL codul ASCII al caracterului (dac AL este zero, AH este codul ASCII
extins);
AH codul scan sau un cod ASCII extins.
Funcia AH=01h - Verificarea disponibilitii codului unei taste apsate
ntoarce:
ZF=1 codul nu este disponibil;
ZF=0 codul este disponibil;
AX poziionat la fel ca funcia 00h.
Funcia AH=02h - Citirea strii tastei Shift. Verificarea tastelor speciale apsate
ntoarce:
AL valorile corespunztoare ale tastei Shift i starea lock ca n switch-urile
tastaturii.
Funcia AH=05h - Scrie un caracter n buffer-ul de tastatur
CL = codul ASCII al caracterului;
Gestiunea tastaturii 35
CH = codul SCAN pentru tastele speciale (0 pentru tastele normale).
ntoarce: AL = starea (0- a reuit scrierea, 1- buffer-ul este plin)
Funcia AH=10h - Citete (ateapt) codul unei taste apsate specific pentru
tastatura cu 101 taste
ntoarce:
AL = codul ASCII al caracterului ( dac AL=0, AH se gsete codul
ASCII extins);
AH = codul SCAN sau codul ASCII extins.
Funcia AH=11h - Verific disponibilitatea codului unei taste, doar pentru
tastatura cu 101 taste
ntoarce:
ZF = 1 codul nu este disponibil;
ZF = 0 codul este disponibil;
AX este poziionat ca la funcia 10h.
Funcia AH = 12h - Citirea strii tastei SHIFT. Verificarea tastelor speciale
apsate
doar pentru tastatura cu 101 taste.
ntoarce:
AL valorile corespunztoare ale tastei Shift i starea lock ca n switch-urile
tastaturii.
3.6 Probleme propuse
Problema 1: S se scrie un program care s permit introducerea n buffer-ul de
tastatur a unei comenzi pentru sistemul de operare standard utiliznd serviciile
oferite de ntreruperea BIOS INT16h.
//scrie comanda CALC in buffer-ul de tastatur
#include<dos.h>
void main (void)
{
Interfee i protocoale de comunicaie 36
union REGS r; //declarm o variabil de tip REGS
r.h.ah = 0x05; //subfucncia 05h a lui INT 16h
r.h.ch = 0; //scrie un caracter in bufferul
r.h.cl = C; // de tastatur
int86(0x16,&r,&r); //apel INT 16h
r.h.ah = 0x05;
r.h.ch = 0;
r.h.cl = A;
int86(0x16,&r,&r);
r.h.ah = 0x05;
r.h.ch = 0;
r.h.cl = L;
int86(0x16,&r,&r);
r.h.ah = 0x05;
r.h.ch = 0;
r.h.cl = C;
int86(0x16,&r,&r);
r.h.ah = 0x05;
r.h.ch = 0; //codul ascii a tastei Enter este
r.h.cl = 0x0d; //format din 2 caractere 0x0d i
int86(0x16,&r,&r); //0x0a
r.h.ah = 0x05;
r.h.ch = 0;
r.h.cl = 0x0a;
int86(0x16,&r,&r);
}

Problema 2: S se scrie un program care permite introducerea unui ir de
maxim 16 caractere n buffer-ul de tastatur (fr s le afieze pe ecran) i
ulterior s afieze irul introdus prin citirea acestuia direct din buffer-ul de
tastatura n ordinea n care a fost introdus.

Problema 3. S se scrie un program care prin indirectarea ntreruperii INT 09h
s afieze pe ecran scan codul tastei apsate. (Se va realiza citirea din portul
de tastatur 60h).
Obs. ntreruperea 09h pe lng citirea din portul tastaturii (60h), realizeaz i
comunicarea cu controlorului de ntreruperi 8259A (transmite codul EOI End
of interrupt), de aceea la interceptarea lui INT 09h trebuie apelat i vechea
rutin a ntreruperii INT 09h.
Nivelul fizic de acces la disc 37
4 Nivelul fizic de acces la disc
4.1 Scopul lucrrii
Lucrarea are ca scop cunoaterea principiului de organizare i de funcionare a
unitilor de disc precum i a serviciilor la nivel BIOS i fizic puse la dispoziie
de interfa pentru comunica cu acestea.
4.2 Servicii BIOS - INT 13h, Servicii DOS - INT 25h, INT 26h
Serviciile BIOS - disc INT 13h constituie categoria de servicii low-level pentru
accesarea discului. Astfel, handler-ul acestei ntreruperi conine programe care
realizeaz operaii de I/O la nivel fizic, manevrnd datele pe disc la nivel de
sector. De fapt, orice cerere high-nivel de acces la disc va conduce eventual n
cele din urm la INT 13h (excepie fac cteva programe extrem de complicate
cum ar fi Disk Manager sau Disk Repairer care opereaz cu discul folosind
direct comenzile controller-ului de disc).
Din punct de vedere al programatorului, organizarea fizic a discurilor este
similar att pentru floppy discuri ct i pentru hard discuri. Toate informaiile
stocate pe disc sunt nregistrate pe piste, sub forma unor cercuri concentrice
aflate pe suprafaa fiecrui platan. Pistele sunt numerotate de la 0, pornind din
exterior spre interior. Un disc conine mai multe mii de piste pe fiecare platan.
Fiecare pist e divizat n uniti mai mici numite sectoare, care sunt numerotate
de la 1. Numrul de sectoare de pe o pist variaz n funcie de tipul unitii de
disc. La calculatoarele compatibile IBM PC, sectoarele create prin procedura de
formatare standard conin 512 octei de date, la care se adaug un numr de
octei utilizai pentru controlul intern al unitii i pentru detecia i corecia
erorilor ceea ce explic diferena dintre dimensiunea formatat i neformatat a
discului.
ntreruperea 13h folosete adresarea fizic a datelor pe disc. Aceasta include
numrul de cilindru, numrul de cap (numrul de fat) i numrul de sector.
Serviciul BIOS furnizeaz de asemenea operaii de format /read /write pentru
sectoare de lungime ne-standard i astfel pot fi prelucrate sectoare scrise sub alte
sisteme de operare n afara de MS-DOS. Astfel, dei DOS-ul folosete numai
Interfee i protocoale de comunicaie 38
sectoare de 512 octei, BIOS-ul poate suporta sectoare de 128, 256, 512 sau
1024 octei i deci se poate citi discuri scrise sub alte sisteme de operare.
n afar de serviciile BIOS disc, se pot obine diverse informaii referitoare la
disc prin intermediul a 3 elemente din tabela vectorilor de ntrerupere i anume
vectorii 1Eh, 41h i 46h. Aceti vectori pointeaz la tabele de parametri pentru
floppy disc, primul hard disc i al doilea hard disc din sistem. Adresele acestor
vectori sunt:
- 0000:0078h pentru INT 1Eh;
- 0000:0104h pentru INT 41h;
- 0000:0118h pentru INT 46h.
De exemplu, adresa tabelei de parametri pentru floppy-disc se poate obine
astfel:
XOR AX,AX
MOV ES,AX ;ES <-- segment IVT
LES BX,ES:[78h] ;ES:BX <-- adresa tabela parametri
;floppy
Tabela de parametri pentru floppy disc se afl n ROM-BIOS i ocup 11 octei.
Informaiile din tabel se refer la lungimea sectorului n octei, lungimea
zonelor (GAP) dintre sectoare, informaii de timming cap /motor unitate etc.
n mod similar, tabela de parametri pentru hard disc (vectorul 41h) poate fi
folosit pentru a obine informaii precum numrul de cilindri i capete. Dac
exista un al 2-lea hard disc n sistem, vectorul 46h va pointa la o tabela de
parametri cu aceeai structura i aceleai semnificaii ca i cea pointat de
vectorul 41h.
Obs: exist totui sisteme aa-numite compatibile IBM-PC care nu respect
semnificaia vectorilor 41h i 46h, folosind aceti vectori ntr-un mod
nestandard, de aceea se recomanda folosirea cu atenie a acestor vectori.
DOS-ul prezint anumite funcii similare cu cele BIOS dar care proceseaz
discuri logice. Exist astfel doua moduri principale de acces al discului prin
intermediul acestor servicii DOS:
- citire absolut a discului logic - ntreruperea 25h;
- scriere absolut a discului logic - ntreruperea 26h.
Nivelul fizic de acces la disc 39
n acest sens, sistemul de operare MS-DOS folosete adresa logic pentru
accesarea datelor pe disc. Aceast adres are o singur component i anume
numrul logic al sectorului. Cu alte cuvinte, MS-DOS-ul trateaz discul ca o
secven continu de sectoare numerotate de la 0 pn la numrul maxim de
sectoare de pe disc. Numrul 0 corespunde primului sector de pe prima pista
(cea mai dinafar) pe fata 0 (prima fata).
Pentru ca procesul de citire scriere date pe disc s decurg mai rapid se folosete
tehnica de ntreesere (interleaving). Aceast tehnic presupune c sectoarele de
pe o pist sunt numerotate cu un offset constant numit factor de ntreesere
(interleaving factor). De exemplu, dac pista const din 9 sectoare i factorul de
ntreesere este 5 atunci sectoarele sunt localizate n urmtoarea ordine: 1, 6, 2,
7, 3, 8, 4, 9, 5.
Obs: - alegerea valorii optime pentru factorul de ntreesere constituie o
problema relativ complicat. n acest sens exista mai multe utilitare dedicate
iar anumite sisteme PC prezint rutine BIOS interne pentru determinarea i
setarea optim a acestui factor;
- dac un disc conine mai multe discuri logice (hard disc partiionat) DOS-ul va
numerota sectoarele independent pentru fiecare disc logic;
- pentru a valida BIOS-ul s foloseasc adresele logice de sector, acestea trebuie
convertite mai nti n forma sector fa - pist.
n principiu, funciile realizate de ntreruperile 25h i 26h sunt foarte
asemntoare cu cele ale serviciului BIOS INT 13h fiind astfel folosite pentru
citire /scriere sectoare disc. Se pot deci folosi aceste ntreruperi pentru editarea
i analizarea zonelor de disc ne-accesibile prin sistemul de fiiere cum ar fi de
exemplu sectorul de boot sau directorul rdcina. n versiunile de DOS mai
vechi (sub 3.31) aceste ntreruperi vor citi date (sectoare de pe disc) plasndu-le
intr-un buffer de memorie (pointat de DS:BX) i respectiv vor scrie date pe disc
prelundu-le din buffer-ul de memorie. n acest caz vor putea fi procesate
discuri logice cu o capacitate pn la 32 Mo.
4.3 Pachetul de citire / scriere pentru INT 25h, INT 26h
n cadrul versiunilor mai recente, ntreruperile 25h i 26h folosesc conceptul de
pachet de citite /scriere. Adresa pachetului de citire /scriere pentru INT 25h/
Interfee i protocoale de comunicaie 40
INT26h este transmisa prin registrele DS:BX. Registrul CX va conine valoarea
-1 (0FFFFh). Structura pachetului de citire /scriere este urmtoarea:
Offset Mrime (octei) Semnificaie
00h 4 Adresa primului sector logic de procesat
04h 2 Nr. de sectoare de procesat
06h 4 Adresa buffer (Offset, segment) pentru
scriere/citire pe/de pe disc
n cazul apariiei unei erori la execuia INT 25h, INT 26h, registrul AX va
conine un cod de eroare. Valoarea din AL constituie o extensie a codului de
eroare transmis handler-ului ntreruperii INT 24h, iar valoarea din AH descrie
eroarea apruta astfel:
01h - comanda greita sau necunoscuta;
02h - marca de adresa greita sau inexistenta;
03h - disc write -protected (pentru INT 26h);
04h - sector nelocalizat (negsit);
08h - eroare DMA;
10h - eroare de transfer de date;
20h - eroare controller;
40h - eroare operaie seek;
Daca nu exista erori, CF=0 i AL=00h.
Obs: - ntreruperile 25h i 26h salveaz n stiva registrul de fanioane => dup
terminarea execuiei acestor ntreruperi utilizatorul va trebui fie sa restaureze
registrul de fanioane din stiva fie sa ajusteze valoarea SP prin incrementarea cu
2 pentru a alinia stiva n poziia iniiala.
4.4 ntreruperea INT 13h
Se prezint cteva din funciile des folosite ale ntreruperii BIOS low-level INT
13h de acces al discului la nivel fizic.
Nivelul fizic de acces la disc 41
Funcia 00h - Resetare sistem disc - funcia iniializeaz controller-u de disc
recalibreaz unitile de disc ataate la controller. Operaia de
recalibrare (RTZ - Return To Zero) presupune poziionarea
capetelor de citire /scriere la pista 0. Funcia se folosete n
scopul pregtirii discului i controller-ului n vederea unor
operaii de I/O i dup o eroare de I/O cu discul nainte ca
programul sa reia operaia care a produs eroarea. Daca
iniializarea se aplica hard discului va fi de asemenea iniializat i
controller-ul de floppy. O unitate de disc, fiind constituita i
dintr-o parte mecanic, este supusa uneori unor erori de hazard,
motiv pentru care n aceste situaii se recomanda iniializarea i
repetarea operaiei de cel puin 3 ori.
- parametri de intrare: - AH = 00h
- DL = unitatea de disc:
- 00h-7Fh - floppy disc;
- 80h-FFh - hard disc;
- parametri de ieire:
- daca funcia s-a executat fr erori (cu succes):
- CF=0 - execuie fr erori;
- AH=00h;
- daca funcia s-a executat cu erori (insucces):
- CF=1 - execuie cu erori;
- AH = octet cod eroare;
Observaii: octetul cod de eroare codific diverse tipuri de erori dintre care, cele
mai uzuale sunt cele legate de: tentativ de scriere pe un disc protejat la scriere
(03h), operaie de iniializare fr succes la hard disc (05h), detecie sector
defect la hard disc (0Ah), respectiv pist defect la hard disc (0Bh), eroare de
controller disc (20h) etc.
Funcia 01h - ntoarce stare disc - funcia citete i ntoarce starea ultimei
operaii de I/O cu discul. Introducerea parametrilor de intrare se
face similar cu funcia 00h. Starea este ntoars sub forma
Interfee i protocoale de comunicaie 42
aceluiai octet cod eroare n registrul AH iar registrul AL va
ntoarce valoarea 00h.
Funcia 02h - Citire sector - funcia citete unul sau mai multe sectoare de pe
un disc ntr-un buffer de memorie.
- parametri de intrare:
- AH=02h
- AL =nr. de sectoare de citit
- CH= nr. pista (cilindru)
- CL = biii 0-5: nr. sector n cadrul pistei;
biii 6-7:cei mai semnificativi 2 bii ai numrului pistei (hard disc);
- DH =numr cap;
- DL =unitate de disc:
- 00h-7Fh - floppy disc;
- 80h-FFh hard disc;
- ES:BX = segment: Offset buffer memorie;
- parametri de ieire:
- execuie fr erori:
- CF=0 - execuie fr erori;
- AH=00h;
- AL =nr. de sectoare citite;
- execuie cu erori:
- CF=1 - execuie cu erori;
- AH =octet cod eroare;
Observaii: - n cadrul hard discurilor cei mai semnificativi 2 bii (biii 8 i 9) ai
numrului de cilindru (pista) sunt plasai n biii 6 i 7 ai registrului
CL. Aceti 2 bii mpreuna cu cei 8 bii ai registrului CH formeaz
numrul complet al cilindrului:
Nivelul fizic de acces la disc 43
CH CL

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CL CL CL CL CL CL CL CL CH CH S S S S S S

Nr. cilindru low Nr. cilindru Nr. Sector
high
n cazul n care dorim de exemplu s citim de pe pista 731 ncepnd cu sectorul 10
registrul CX va trebui ncrcat cu valoarea totala 0DBCAh.
Dac se execut funcia pentru citirea a mai mult de un sector i apar erori n
timpul citirii, operaia se va ncheia dup sectorul n care a aprut eroarea.
Funcia 03h - Scriere sector - funcia scrie unul sau mai multe sectoare pe un
disc dintr-un buffer de memorie. Parametri de intrare i de ieire
sunt transmii n mod similar cu funcia 02h.
Funcia 04h - Verificare sector - funcia verific dac datele dintr-un anumit nr.
de sectoare pot fi citite (compara datele din sectoare folosind
coduri CRC). Parametri sunt aceiai ca i n cazul funciei 02h.
Funcia 08h - ntoarce parametri unitii de disc - funcia ntoarce parametri
unitii de disc specificate.
- parametri de intrare:
- AH=08h
- DL = unitate de disc:
- 00h-7Fh - floppy disc;
- 80h-FFh hard disc;
- parametri de ieire:
- daca funcia s-a executat fr erori (cu succes):
- CF=0 - execuie fr erori;
Interfee i protocoale de comunicaie 44
- BL = tipul unitii de disc floppy (PC-AT , PS/2);
- 01h=>360K, 40 piste, 5.25";
- 02h=>1.2 M, 80 piste, 5.25";
- 03h=>720K, 80 piste, 3.5";
- 04h=>1.44M, 80 piste, 3.5";
- CH =nr. maxim piste;
- CL = biii 0-5, nr. maxim sector;
biii 6-7, cei mai semnificativi 2 bii pentru nr. maxim
piste;
- DH = nr. maxim cap;
- DL = nr. de uniti de disc pe primul controller;
- daca funcia s-a executat cu erori:
- CF=1 - execuie cu erori;
- AH = octet cod eroare;
- ES:DI = segment: offset al tabelei cu parametrii unitii de
disc;
Observaii:
- n sistem pot exista mai multe controllere de disc, fiecare poate suporta doua
uniti de disc.
- n cadrul sistemelor IBM-PC-XT funcia este suportat numai pentru hard disc.
Funcia 0Dh - Reset sistem hard disc - funcia este similara cu funcia 00h
numai ca acioneaz asupra controller-ului de hard disc. Se va
specifica n registrul DL unitatea de hard disc: 80h-FFh.
Funcia 0Ch - Cutare (poziionare) pist - funcia poziioneaz capetele de
citire /scriere ale hard discului pe pista specificat (cilindrul
specificat).
- parametri de intrare:
- AH=0Ch;
Nivelul fizic de acces la disc 45
- CH = nr. cilindru (cei mai puin semnificativi 8 bii);
- CL = biii 6-7, cei mai semnificativi 2 bii ai nr. cilindru;
- DH = nr. cap;
- DL = unitate hard disc: 80h-FFh;
- parametri de ieire:
- execuie fr erori:
- CF=0 - execuie fr erori;
- AH=00h;
- execuie cu erori:
- CF=1 - execuie cu erori;
- AH = octet cod eroare;
Observaii: - funcia nu realizeaz un transfer de date ci numai poziionarea
corespunztoare a capetelor i este suportata numai de hard discuri.
Funcia 10h - ntoarce stare unitate hard disc - funcia acioneaz numai
asupra hard discului. Ca i n cazul celorlalte funcii, returneaz
n AH valoarea 00h daca discul este pregtit pentru operaii de
I/O, altfel returneaz n AH un octet de cod de eroare. n
registrul DL se va specifica unitatea de hard disc: 80h-FFh.
Funcia 11h - Recalibrare hard disc - funcia realizeaz operaia de recalibrare
(aduce capetele de citire /scriere la pista 0). Parametri sunt
transmii n mod similar cu celelalte funcii referitoare la hard
disc. De fapt, aceast funcie este apelat n cadrul funciilor 00h
i 0Dh.
Observaii: - n general, n cazul apariiei unei erori semnalizata de fanionul
CF=1, se recomand reluarea funciei respective de cel puin 3 ori,
iar n cazul meninerii erorii se va prelucra respectiva eroare n
conformitate cu codul ntors n registrul AH.
Interfee i protocoale de comunicaie 46
4.5 Probleme propuse
Problema 1: S se scrie un program care afieaz coninutul directorului
rdcina de pe discul curent folosind INT 25h astfel:
- se va obine discul curent de pe care se va afia directorul rdcina (folosind
ntreruperea INT 21h subfuncia AH =19h, ntoarce n AL discul curent).
Intrare: AH=19h
Ieire: AL numr unitate curent (0-A, 1-B, 2-C,...);
- se va citi sectorul de boot pentru a obine numrul de intrri n directorul
rdcina i adresa de start a directorului rdcina folosind ntreruperea INT
25h astfel:
AL= numr unitate (0=A, 1=B, etc.);
CX=0FFFFh;
DS:BX =seg: offset bloc parametri.
- pentru calculul efectiv al numrului de intrri i al adresei de start se vor lua
n considerare urmtoarele:
o n sectorul de boot, la offset-ul 11h, se afl codificat pe un cuvnt
numrul maxim de intrri din directorul rdcina
o directorul rdcina ocup n ntregime un anumit numr de sectoare
o n sectorul de boot, la offset-ul 10h, se afla codificat pe un octet
numrul copiilor FAT, la ofsetul 16h se afla codificat pe un cuvnt
numrul de sectoare dintr-o copie FAT, iar la ofsetul 0Eh se afla
codificat pe un cuvnt numrul de sectoare care preced FAT 1.
o Spaiul de pe disc este distribuit n principiu astfel:
Sector de boot;
FAT #1 (File Allocation Table tabela Alocrii Fiierelor);
FAT #2 (copie FAT #1);
Director rdcin;
Nivelul fizic de acces la disc 47
Zona de date.
- se va citi pe rnd cte un sector din directorul rdcina afindu-se
coninutul sau astfel:
o se va citi sectorul curent folosind INT 25h.
o se vor testa pe rnd intrrile de director din sector astfel:
daca primul octet al intrrii este 0 => intrare nefolosit =>
restul intrrilor vor fi de asemenea nefolosite => se va termina
afiarea i se va iei din program;
daca intrarea respectiva constituie o intrare tears anterior
(codul E5h) => se va trece la urmtoarea intrare;
daca intrarea respectiva este utilizata => se va afia numele i
eventuala extensie precizndu-se la afiare daca este vorba de
un subdirector (<SUBDIR>) sau eticheta de volum
(<VOLUM>);
se vor afia pe un ecran cele 16 intrri ale unui sector dup
care, la apsarea unei taste, se va trece la urmtorul ecran
(urmtorul sector).
Informaia de baz relativ la un fiier este pstrat n intrarea de director a
respectivului fiier. O intrare de director ocup 32 octei n urmtorul format:
Ofset Mrime Semnificaie
00h 8 numele subdirectorului /fiierului (maxim 8 caractere)
08h 3 extensia (maxim 3 caractere)
0Bh 1 atributele fiierului
0Ch 10 rezervai
16h 2 ora crerii sau a ultimei modificri
18h 2 data crerii sau a ultimei modificri
1Ah 2 Numrul primului cluster din lan
1Ch 4 Dimensiunea fiierului n octei
Interfee i protocoale de comunicaie 48
Numele fiierului este format din 8 caractere. Dac primul octet este 00h atunci
nsemn c intrarea n director nu a fost folosit niciodat, dac este 0E5h nsemn
c fiierul respectiv a fost ters.
Atributele fiierului au urmtoarea semnificaie:
7 6 5 4 3 2 1 0
X X Arhiva Director Volum Sistem Ascuns Read-only
- bit 7 nefolosit;
- bit 6 nefolosit;
- bit 5 fiier de tip arhiv. Acest bit este poziionat ori de cte ori fiierul
este modificat;
- bit 4 subdirector;
- bit 3 identificator de volum. Un singur fiier poate avea acest atribut i
trebuie s se afle n directorul rdcin;
- bit 2 fiier sistem, nu poate fi gsit prin operaiile obinuite de cutare n
director. Este folosit pentru desemnarea fiierelor ce formeaz
sistemul de operare;
- bit 1 fiier ascuns, nu poate fi gsit prin operaiile obinuite de cutare
n director;
- bit 0 fiier protejat la scriere. Fiierul poate fi doar citit.
Problema 2: S se scrie un program de test al rutinei de tratare a erorii critice
INT 24h astfel:
- n principiu programul de test va ncerca o operaie simpl cu discul care
poate genera o eroare critic (de ex. ncercarea de creare director pe o unitate
de dischet funcia 39h, INT 21h)
- ntr-o prim faz se va reindirecta INT 24h (se va scrie o procedur de
redirectare INT 24h) astfel:
- obinerea i salvarea vectorului INT 24h (cel vechi), cu funcia 35h, INT
21h.
- instalarea vectorului nou (utilizator) INT 24h, cu funcia 25h, INT 21h.
- setarea adresei (nou) INT 24h n zona de PSP ncepnd la ofsetul 12h
folosind funcia 51h, INT 21h:
- parametrii intrare: AH=51h
Nivelul fizic de acces la disc 49
- parametrii ieire: BX = adresa segment PSP dup care se va depune
noua adres ncepnd la ofsetul 12h n cadrul PSP n ordinea Offset :
Segment
- se va scrie noua rutin INT 24h astfel:
- se va seta un semafor soft de eroarea
- se va obine adresa de revenire n programul ntrerupt inndu-se cont de
urmtoarele considerente:
- la intrarea n rutina INT 24h stiva are urmtorul coninut:
SP-> dword adresa de revenire;
Word fanioane salvate din rutina INT 21h la intrarea n
INT24h;
Word AX la intrarea n INT 24h;
Word BX la intrarea n INT 24h;
Word CX la intrarea n INT 24h;
Word DX la intrarea n INT 24h;
Word SI la intrarea n INT 24h;
Word DI la intrarea n INT 24h;
Word BP la intrarea n INT 24h;
Word DS la intrarea n INT 24h;
Word ES la intrarea n INT 24h;
Dword adres rentoarcere la apelul INT 24h;
Word fanioane salvate ale aplicaiei DOS la intrarea n
INT21h.
- se vor reface registrele AX, BX,ES din stiva i se vor restaura flag-urile
aplicaiei DOS
- se va seta flag-ul de Carry
- se va ncrca n AL=0- codul de revenire n aplicaie inndu-se cont c
rutina standard INT 24h ntoarce sistemului de operare un cod de revenire n
aplicaie astfel:
AL=00h ignorare - se ignor eroarea;
Interfee i protocoale de comunicaie 50
=01h retry rencercarea operaiei;
=02h abort terminarea aplicaiei (CTRL BREAK INT 23h);
=03h - fail ntoarcerea la aplicaie, indicnd insuccesul funciei DOS.
- se va reveni n aplicaie cu un salt la adresa de revenire

Programul principal va decurge astfel:
- se va apela rutina de reindirectare INT 24h;
- se va apela funcia care va ncerca operaia cu discul . dac operaia cu discul
reuete se va restaura INT 24h original i se va ncheia programul. Pentru
restaurarea INT 24h original se poate apela o rutin care va folosi pentru
restaurare funcia 25h, INT 21h.
n caz de insucces al operaiei cu discul se va testa dac este vorba de o eroare
critic prin testarea semaforului soft poziionat pe noua rutin INT 24h ( de ex.
Se poate apela o rutin care va citi numai semaforul i l va ntoarce prin
intermediul unui registru). n cazul n care nu este vorba de o eroare critic se va
citi numai semaforul i l va ntoarce prin intermediul unui registru . n cazul n
care nu este vorba de o eroare critic se va restaura INT 24h original i se va
ncheia programul.
Dac este vorba de o eroare critic, se va reseta semaforul soft , eventual tot
printr-o rutin , se va afia un mesaj de atenionare de forma Eroare disc INT
24h apsai o tast pentru rencercare sau ESC pentru abandonare i se va da
posibilitatea de abandon sau rencercare operaie cu discul.
O posibil implementare a acestei aplicaii este prezentat n Anexa 2.
Interfaa IDE/ATA 51
5 Interfaa IDE/ATA
5.1 Scopul lucrrii
Lucrarea are ca scop prezentarea regitrilor i a comenzilor interfeei ATA care
permit accesul la nivel fizic la informaiile stocate pe unitile de disc.
5.2 Registrele interfeei ATA
IDE este cea mai rspndit interfa pentru unitile de discuri fixe. Denumirea
de IDE (Integrated Drive Electronics) se refer la unitile de discuri care au un
controler integrat. Aceast interfa mai este cunoscut i sub numele de ATA
(AT Attachment) care reprezint standardul ANSI care definete interfaa de
conectare la calculatoarele AT.
Interfaa de comunicaie cu unitile de disc pune la dispoziie la nivel fizic o
serie de registre de I/O. Datele sunt transferate n paralel pe 16 bii ntre
memoria calculatorului i buffer-ul unitii de discuri sub aciunea comenzilor
transmise n prealabil de la calculator. Datele citite de pe suport sunt memorate
n buffer-ul unitii, urmnd a fi transferate calculatorului, iar datele transferate
din memoria calculatorului sunt memorate n buffer-ul unitii urmnd a fi scrise
pe suport.
ntr-un sistem exist de obicei mai multe interfee ATA. n continuare sunt
prezentate adresele pentru patru asemenea interfee:
Interfaa 1: adrese 1F0h 1F7h, IRQ 14;
Interfaa 2: adrese 170h 177h, IRQ 15 sau IRQ 10;
Interfaa 3: adrese 1E8h 1EFh, IRQ 12 sau IRQ 11;
Interfaa 4: adrese 168h 16Fh, IRQ 10 sau IRQ 9.
Toi regitrii sunt pe 16 bii i sunt accesai att de ctre disc ct i de ctre
program de acea scrierea acestor regitrii trebuie s se fac respectnd riguros
condiiile cerute. Aceti regitrii au urmtoarele funcii (voi prezenta doar
regitrii pentru interfaa 1) :

Interfee i protocoale de comunicaie 52
1F0h - Registru de date
1. la citire: conine cei 16 bii citii din buffer-ul unitii;
2. la scriere: - conine cei 16 bii care se doresc scrii pe disc.
1F1h registrul de eroare / setare caracteristici
1. La citire reprezint registrul de eroare i conine starea ultimei
comenzi executate de unitatea de discuri sau conine un cod de
diagnosticare. La terminarea fiecrei comenzi, cu excepia
comenzilor Execute Device Diagnostic sau Device Reset, coninutul
acestui registru este valid dac bitul ERR din registrul de stare este 1.
La terminarea execuiei unei comenzi Execute Device Diagnostic sau
Device Reset acest registru conine un cod de diagnosticare.
Semnificaia biilor registrului de eroare variaz n funcie de comanda care a
fost executat. Semnificaia biilor pentru comenzile de citire / scriere este:
7 6 5 4 3 2 1 0
ICRC UNC MC IDNF MCR ABRT MN X
- bit 7 (ICRC Interface CRC) indic prin valoarea 1 apariia unei erori
CRC n timpul transferului la nivelul interfeei ATA;
- bit 6 (UNC Uncorrectable Data Error) dac este 1 indic apariia
unei erori care nu a putut fi corectat;
- bit 5 (MC Media Changed) este rezervat pentru discurile amovibile
i este pe 1 cnd exist un nou suport n unitate;
- bit 4 (IDNF ID Not Found) indic faptul c sectorul cerut nu a fost
gsit;
- bit 3 (MCR Media Change Requested) este rezervat pentru dicurile
amovibile i este pe 1 cnd este detectat o cerere de
eliminare a suportului;
- bit 2 (ABRT Aborted Command) indic abandonarea comenzi cerute
deoarece comanda sau parametrii acesteia nu sunt valizi;
- bit 1 (NM No Media) rezervat discurilor amovibile i indic c nu
exist suport n unitatea cerut;
- bit 0 rezervat.
Interfaa IDE/ATA 53
2. La scriere reprezint registrul de setare caracteristici i poate fi
utilizat pentru specificarea diferitelor caracteristici ale interfeei, de
exemplu, pentru validarea sau invalidarea memoriei cache prin
comanda SetFeatures. Este permis scrierea acestui registru numai
dac biii BSY i DRQ din registru de stare sunt 0.
1F2h registrul contor de sectoare
Acest registru este nscris cu numrul sectoarelor de date care trebuiesc
transferate ntr-o operaie de citire sau scriere ntre calculator i unitate.
Registrul trebuie nscris numai dac biii BSY i DRQ din registrul de stare
sunt ambii egali cu 0. Coninutul acestui registru devine un parametru al
comenzii atunci cnd codul comenzii este nscris n registrul de comand.
Pentru comenzile de acces la suport acest registru conine valoarea 0 la
terminarea comenzii dac nu au fost erori. n cazul apariiei unei erori acest
registru conine numrul de sectoare care trebuie transferat n scopul
terminrii operaiei.
1F3h registrul de adres
Conine adresa inferioar LBA pentru interfaa LBA pe 32 i 48 bii
numrul sectorului asupra cruia se va lucra.
1F4h registrul de adres
Conine adresa mijlocie LBA pentru interfaa LBA pe 48 bii i adresa
superioar pentru interfaa LBA cu acces pe 32 bii reprezint valoarea cea
mai puin semnificativ din numrul cilindrului asupra cruia se va lucra.
1F5h registrul de adres
Conine adresa superioar LBA pentru interfaa LBA cu acces pe 48 bii i
este 0 pentru interfaa LBA cu acces pe 32 bii reprezint valoarea cea mai
semnificativ din numrul cilindrului asupra cruia se va lucra.
Ultimele 3 registre prezentate permit nscrierea adresei sectorului la comenzile
de citire / scriere care utilizeaz adresarea LBA. Registrele trebuiesc nscrise
numai dac bitul BSY i bitul DRQ din registrul de stare sunt egali cu 0.
Coninutul acestor registre devin parametrii ai comenzii atunci cnd codul
comenzii este nscris n registrul de comand.

Interfee i protocoale de comunicaie 54
1F6h registrul selecie dispozitiv
Acest registru se utilizeaz pentru adresarea unitii de discuri i a sectorului.
Registrul trebuie nscris numai dac bitul BSY i bitul DRQ din registrul de
stare sunt ambii egali cu 0. Semnificaia biilor din acest registru este
urmtoarea:
7 6 5 4 3 2 1 0
X LBA X DEV HS3 HS2 HS1 HS0
- bit 7 rezervat;
- bit 6 (LBA ) selecteaz modul de adresare pentru sectoare. Dac acest
bit este 0 se selecteaz adresarea CHS, dac este 1 se
selecteaz adresarea LBA;
- bit 5 rezervat;
- bit 4 ( DEV Device Select) selecteaz prin valoarea 0 prima unitate
(master) de pe interfaa ATA iar prin valoarea 1 cea de-a
doua unitate (slave) de pe interfaa ATA;
- bit 3 0 (HS3, HS2, HS1 i HS0) dac bitul LBA este 0 aceti 4
bii conin numrul capului din cadrul adresei CHS. Dac
bitul LBA este 1 aceti bii conin cei mai semnificativi 4
bii ai adresei LBA n cazul adresrii pe 28 bii i sunt
nedefinii n cazul adresrii pe 48 bii.
1F7h registru de comand sau de stare dispozitiv
1. La scriere n acest registru se scrie codul comenzii care trebuie
transmis controlerului unitii de discuri. Execuia comenzii ncepe
imediat dup ce codul comenzii este nscris n registrul de comand.
Scrierea acestui registru terge orice condiie de ntrerupere. Cu
excepia comenzii Device Reset registrul de comand trebuie nscris
numai dac bitul BSY i bitul DRQ din registrul de stare sunt ambii
egali cu 0.
2. La citire reprezint registrul de stare care conine starea curent a
unitii. Dac bitul BSY este 0 ceilali bii ai registrului conin
informaii valide, n caz contrar informaiile coninute de ceilali bii
sunt invalide. Dac acest registru este citit de calculator n timpul
Interfaa IDE/ATA 55
unei ntreruperi n curs, condiia de ntrerupere este tears.
Semnificaia biilor din acest registru este urmtoarea:
7 6 5 4 3 2 1 0
BSY DRDY DF DSC DRQ CORR IDX ERR
- bit 7 (BSY - Busy) este pe 1 ori de cte ori unitatea de discuri are
controlul asupra registrelor interfeei, cu excepia registrului de control al
dispozitivului i registrului alternativ de stare. Dac bitul BSY este pe 1
unitatea va ignora o scriere n oricare din registrele asupra crora are
controlul. Unitatea va modifica starea bitului DRQ numai dac bitul BSY
este setat. Dac bitul BSY este 0, unitatea va modifica numai biii DRDY,
DF, DSC , CORR i IDX din registrul de stare i coninutul registrului de
date.
- bit 6 (DRDY Device Ready) este setat pe 1 pentru a indica faptul c
unitatea de discuri accept comenzi. Dac starea acestui bit se modific,
unitatea nu trebuie s modifice din nou starea bitului pn la citirea
registrului de stare de ctre calculator. Dac bitul DRDY este 0, unitatea
va accepta i va ncerca execuia comenzilor Device Reset i Execute
Device Diagnostic. Celelalte comenzi nu vor fi acceptate, fiind setat bitul
ABRT din registrul de eroare i bitul ERR din registrul de stare, naintea
resetrii bitului BSY pentru a indica terminarea comenzii.
- bit 5 (DF Device Fault) indic prin valoarea 1 detectarea unei erori de
dispozitiv.
- bit 4 (DSC Device Seek Complete) indic prin valoarea 1 poziionarea
capetelor unitii de discuri deasupra unei piste. La apariia unei erori,
acest bit nu trebuie modificat de unitate pn la citirea registrului de stare
de ctre sistem, dup care bitul DSC va indica starea curent.
- bit 3 (DRQ Data Request) indic prin valoarea 1 faptul c unitatea de
discuri este gata pentru transferul datelor ntre calculator i unitate. Dup
ce calculatorul nscrie codul unei comenzi n registrul de comand,
unitatea seteaz bitul BSY la valoarea 1 sau bitul DRQ la valoarea 1 pn
la terminarea comenzii sau pn la eliberarea magistralei n cazul unei
comenzi suprapuse.
- bit 2 (CORR Corrected Data) este utilizat pentru a indica o eroare de
date corectabil. Aceast condiie nu determin ncheierea unui transfer de
Interfee i protocoale de comunicaie 56
date. Acest bit nu mai este folosit n ultimele versiuni ale standardului
ATA.
- bit 1 (IDX Index) este specific diferiilor productori. Acest bit nu mai
este definit n ultimele versiuni ale standardului ATA.
- bit 0 (ERR Error) este 1 n momentul n care a aprut o eroare n
timpul execuiei comenzii precedente. Bii din registrul de eroare vor
conine informaii suplimentare despre cauza erori.
5.3 Execuia transferurilor de date
n specificaia ATA sunt definite protocoalele utilizate pentru transferurile de
date ntre calculator i unitatea i durata ciclilor de citire / scriere.
Un exemplu de protocol pentru citire n modul PIO, care este un protocol de
transfer fr confirmare, i care pentru fiecare cuvnt transferat procesorul
trebuie s execute o secven de program.
1. Se ateapt ca bitul BSY s devin 0 prin interogarea registrului de stare;
2. Se scrie n registrul de selecie al dispozitivului valoarea corespunztoare
pentru dispozitiv;
3. Se ateapt bitul BSY=0 i bitul DRDY =1;
4. Se scriu parametrii comenzii n registrele corespunztoare;
5. Se scrie codul comenzi n registrul de comand;
6. Unitatea setaz bitul BSY i se pregtete pentru transferul primului bloc
de date;
7. Cnd blocul este disponibil unitatea seteaz bitul DRQ. Dac apare o
eroare sunt setai biii corespunztori de eroare i de stare. n final unitatea
reseteaz bitul BSY i activeaz semnalul INTRQ;
8. Cnd se detecteaz bitul BSY pe 0 sau s-a generat o ntrerupere
calculatorul citete i salveaz coninutul registrului de date;
9. Dac DRQ este setat, calculatorul transfer un bloc de date prin citirea
registrului de date;
Interfaa IDE/ATA 57
10. Ca rspuns la citirea registrului de stare, unitatea dezactiveaz semnalul
INTRQ. Ca rspuns la citirea ntregului bloc de date, se execut una din
urmtoarele operaii:
a. Dac nu a aprut nici o eroare unitatea seteaz bitul BSY i
secvena de mai sus se repet de la pasul 7;
b. Dac a aprut o eroare unitatea terge bitul DRQ iar execuia
comenzii este terminat;
c. Dac s-a transferat ultimul bloc, unitatea terge bitul DRQ, execuia
comenzii fiind terminat.
5.4 Comenzi ATA
n continuare sunt prezentate principalele comenzi ATA, codurile acestora i
regitrii care trebuiesc ncrcai cu parametrii comenzii.
Comand Cod
Registru afectat
1F1h 1F2h 1F35h 1F6h
Check Power Mode E5h D
Device Configuration Identify B1h C2h D
Device Configuration Restore B1h C0h D
Device Configuration Set B1h C3h
Device Reset 08h D
Download Microcode 92h X X X X
Execute Device Diagnostic 90h
Flush Cache E7h D
Flush Cache Ext EAh D
Get Media Status DAh D
Identify Device ECh D
Identify Packet Device A1h D
Idle E3h X D
Interfee i protocoale de comunicaie 58
Idle Immediate E1h D
Media Eject EDh D
Media Lock DEh D
NOP 00h D
Packet A0h X X X D
Read Buffer E4h D
Read DMA C8h X X X
Read DMA Ext 25h X X D
Read Multiple C4h X X X
Read Multiple Ext 29h X X D
Read Sector(s) 20h X X X
Read Sector(s) Ext 24h X X D
Read Verify Sector(s) 40h X X X
Read Verify Sector(s) 42h X X D
Seek 70h X X
Service A2h D
Set Features EFh X X X D
Set Max Address F9h X X
Set Max Address Ext 37h X D
Sleep E6h D
Standby E2h X D
Standby Immediate E0h D
Write Buffer E8h D
Write DMA CAh X X X
Write DMA Ext 35h X X D
Write Multiple C5h X X X
Interfaa IDE/ATA 59
Write Multiple Ext 39h X X D
Write Sector(s) 30h X X X
Write Sector(s) 34h X X D
5.5 Probleme propuse
Problema 1: S se scrie un program care utiliznd comanda Identify Device
(codul ECh) adresat controlerului de disc va determina parametrii unitii de disc
(numr de cilindrii, capete, sectoare pe pist) precum i tipul unitii de disc
(model, revizie, numr de serie). Pe baza numrului total de sectoare adresabile,
calculai capacitatea total n GB a discului, innd cont c un sector conine 512
octei.
Protocolul pentru transmiterea comenzii Identify Device i preluarea informaiilor
ntoarse de unitate este:
1. Se ateapt ca bitul BSY din registrul de stare s devin 0;
2. Se nscrie n registrul de comand codul comenzii (ECh);
3. Se ateapt ca bitul BSY din registrul de stare s devin 0;
4. Se ateapt ca bitul DRQ din registrul de stare s devin 1;
5. Se citete un cuvnt din registrul de date i se memoreaz;
6. Dac nu s-au citit toate cele 256 de cuvinte, se continu cu operaia de la
pasul 3.
Obs:
Comanda Identify Device permite citirea parametrilor unitii de discuri. La
recepionarea acestei comenzi unitatea transmite un bloc de 256 cuvinte cu
informaii care conin toate detaliile asupra unitii: productorul, model, seria,
parametri de funcionare etc. Semnificaia celor 256 de cuvinte ntoarse de
controlerul de disc pentru comanda Identify Devive este:

Cuvnt Semnificaie
0 Informaii generale de configuraie;
Interfee i protocoale de comunicaie 60
1,2 Numr de cilindrii pentru modul de transfer implicit;
3 Numr de capete pentru modul de transfer implicit;
4,5 Nespecificai;
6 Numr de sectoare pe pist pentru modul de transfer implicit;
7,8,9 Nespecificai;
10-19 Numr de serie (dac cuvntul 10 nu este 0000h seria este
reprezentat pe 20 caractere ACSII);
20-22 Nespecificai;
23-26 Revizie (dac cuvntul 23 nu este 0000h codul de revizie reprezin 8
caractere ASCII);
27-46 Model (dac cuvntul 27 nu este 0000h modelul este reprezentat pe
40 de caractere ASCII);
47-53 Nespecificat;
54 Numr de cilindrii pentru modelul de translatare curent;
55 Numr de capete pentru modelul de translatare curent;
56 Numr de sectoare pe pist pentru modelul de translatare curent;
57-58 Numr de sectoare n modul pentru modul de translatare curent;
59 Nespecificat;
60-61 Numrul total de sectoare adresabile (adresare pe 28 de bii);
62-159 Nespecificai;
160-255 Rezervai;

Comunicaia serial. Standardul RS-232C 61
6 Comunicaia serial. Standardul RS-232C
6.1 Scopul lucrrii
Lucrarea prezint portul serial standard disponibil n calculatoarele compatibile
IBM i urmrete familiarizarea studenilor cu principiile de comunicaie serial.
Sunt prezentate regitrii interfeei de comunicaie serial, modul de utilizare i
ntreruperile aferente acesteia.
6.2 Consideraii generale
Porturile seriale sunt folosite n general pentru dispozitivele care trebuie s
comunice bidirecional cu sistemul; printre acestea numrndu-se modemul,
mouse-ul, scannerul, digitizorul sau orice alt dispozitiv care trimite i primete
date de la PC.
Interfaa serial asincron este dispozitivul de baz n comunicaia dintre
sisteme. Se numete asincron pentru c nu exist nici un semnal de
sincronizare sau de ceas, astfel nct caracterele pot fi trimise la orice interval de
timp ( ca atunci cnd operatorul introduce date de la tastatur). Fiecare caracter
transmis printr-o linie serial este ncadrat de un semnal de start i unul de stop.
Un singur bit 0, numit bit de start, precede fiecare caracter, pentru a anuna
sistemul destinatar c urmtorii opt bii constituie un octet de date. Caracterul
este urmat de unu sau doi bii de stop, care anun terminarea transmiterii lui. La
recepie, caracterele sunt recunoscute dup semnalele de start i de stop, i nu
dup temporizarea sosirii lor. Interfaa asincron este orientat spre caracter i
are o suprasarcin (un excedent de date) de aproximativ 20% datorit
informailor suplimentare necesare identificrii fiecrui caracter. Portul serial
existent n PC respect standardul RS 232 (Reference Standard 232).
Atributul serial se refer la datele transmise pe o linie, biii succedndu-se n
serie pe msur ce sunt transmii. Acest tip de comunicaie, se folosete la
sistemul telefonic, deoarece el furnizeaz cte o linie de date pentru fiecare
direcie.
Standardul RS 232 este cel mai folosit standard de cuplare serial a dou
echipamente de calcul. Cuplele de legtur serial prezente n PC sunt cu 9,
respectiv cu 25 pini. Semnalele prezente n cupla cu 9 pini sunt:
Interfee i protocoale de comunicaie 62
Pin1: DCD (Data Carrier Detect) detecie purttoare (intrare);
Pin2: RD recepie date (intrare);
Pin3: TD transmisie date(ieire);
Pin4: DTR (Data Terminal Ready) terminal pregti (ieire);
Pin5: GND masa;
Pin6: DSR (Data send ready)- modem pregtit (intrare);
Pin7: RTS (Request to send) cerere de emisie (ieire);
Pin 8: CTS (clear to send) gata de emisie (intrare);
Pin9: RI (Ring indicator) indicator de apel (intrare).
Lungimea maxim a liniei de comunicaie pentru care schimbul de informaie
este corect este de 15m.
n PC comunicaia serial se poate face prin intermediul a patru porturi COM.
Zona de date BIOS conine o list a celor patru adrese de baz corespunztoare
celor patru porturi ( adresele 0:0400h0:0407h). n cursul rutinei de iniializare
POST se testeaz i se iniializeaz porturile COM1 i COM2. Adresele de port
corespunztoare acestora sunt:
COM1 3F8h..3FFh;
COM2 2F8h..2FFh.
Asupra celor patru porturi se poate opera direct, prin instruciuni de intrare /
ieire sau prin intermediu ntreruperii BIOS 14h. Aceast ntrerupere va lucra cu
oricare din cele patru porturi, cu condiia ca adresa de baz a portului serial
solicitat s se gseasc n tabela din zona de date BIOS. Totodat, este necesar
ca dou porturi s nu mpart acelai spaiu de adresare, caz n care nici unul va
funciona corect.
Utilizarea porturilor seriale se poate face prin interogare , sau prin ntreruperi. n
acest din urm caz liniile de ntrerupere folosite, corespunztoare controlului de
ntreruperi 8259A sunt:
COM1 IRQ4 INT 0Ch;
COM2 IRQ3 INT 0Bh.
Comunicaia serial. Standardul RS-232C 63
6.3 Regitrii asociai cuplorului de comunicaie serial
Regitrii asociai unui cuplor de comunicaie serial sunt (adresele sunt date
pentru COM 1):
3F8h registrul de date, registrul de divizare
1. La scriere: registrul de date, coninnd cei 8 bii ai caracterului ce
trebuie transmis. Cnd bitul DLAB=1, conine octetul inferior al
divizorului frecvenei ceasului, care mpreun cu octetul superior, scris la
adresa 3F9h determin rata transmisiei seriale dup cum urmeaz:
Rata Valoarea de divizare (zecimal)
110 1536
150 768
300 384
600 192
1200 96
2400 48
4800 24
9600 12
19200 6
115200 3
2. La citire: buffer de recepie, coninnd cei 8 bii ai caracterului recepionat
3F9h registrul validare ntrerupere, registrul de divizare
1. La scriere: Cnd bitul DLAB =1 conine octetul superior al valorii de
divizare a frecvenei ceasului. Cnd DLAB =0 reprezint registrul de
validare ntreruperi:
7 6 5 4 3 2 1 0
0 0 0 0 IMODEM IERR IE IRD
Interfee i protocoale de comunicaie 64
- bit 0 (IRD) valoarea 1 valideaz generarea unei ntreruperi la recepie
de date;
- bit 1 (IE) valoarea 1 valideaz generarea unei ntreruperi cnd
buffer-ul de emisie este gol;
- bit 2 (IERR) valoarea 1 valideaz generarea unei ntreruperi la
detectarea unei erori sau oprire;
- bit 3 (IMODEM) valoarea 1 valideaz generarea unei ntreruperi la
schimbarea strii modem-ului (CTS,DSR,RI,RLSD);
- bit 4..7 au valoarea 0 (sau 1 depinznd de productorul plcii de
baz).
3FAh registrul cauz a ntreruperii
1. La citire: registrul cauz a ntreruperii. La apariia unei ntreruperi citirea
acestui registru determin natura ntreruperii. Semnificaia biilor este
urmtoarea:
bit 0 valoarea 1 specific faptul c ntreruperea este activ (poate fi
folosit pentru interogare);
bit 2,1 valoarea 00 specific ntreruperea cauzat de o eroare (suprascriere,
paritate, ncadrare) sau oprire. Este resetat prin citirea
registrului de stare a liniei (3FDh);
valoarea 10 specific faptul c sunt date recepionate disponibile.
Este resetat prin citirea bufferului de recepie (3F8h);
valoarea 01 specific faptul c bufferul de emisie este gol. Este
resetat prin scrierea n bufferul de emisie(3F8h);
valoarea 11 specific faptul c ntrerupere este cauzat de
schimbarea strii modem-ului. Este resetat prin citirea
registrului de stare a modem-ului (3Feh);
bit 37 sunt 0.
3FBh registrul de control al liniei
Disponibil la scriere sau citire:

Comunicaia serial. Standardul RS-232C 65
7 6 5 4 3 2 1 0
DLAB SLinie X P1 P0 Stop WL1 WL0
- bit 0,1(WL0,WL1) - reprezint lungimea cuvntului de date:
- 00=5 bii;
- 01= 6 bii;
- 10= 7 bii;
- 11=8 bii.
- bit 2(Stop) - numrul de bii de stop: 0=1, 1=2;
- bit 3,4(P0,P1) - paritate: x0=fr,01=impar,11=par;
- bit 5 - nu este folosit de ctre BIOS;
- bit 6(SLine) - valideaz controlul opririi, 1=transmisia ncepe prin
emiterea de 0-uri (spaii);
- bit 7(DLAB) - DLAB (Divisor Latch Access Bit),
- 1=se programeaz rata de transmisie;
- 0=normal.
3FCh: registrul de control al modem-ului
Disponibil numai pentru scriere:
7 6 5 4 3 2 1 0
0 0 0 X OUT2 OUT1 RTS DTR
- bit 0 - 1=activeaz DTR, 0=dezactiveaz DTR;
- bit 1 - 1=activeaz RTS, 0=deactiveaz RTS;
- bit 2 - 1=activeaz OUT1;
- bit 3 - 1=activeaz OUT2 (necesar n cazul lucrului prin ntreruperii);
- bit 4 - 1=activeaz bucla pentru testare;
- bit 5..7: sunt 0.
Interfee i protocoale de comunicaie 66
3FDh: registrul de stare a liniei.
Disponibil pentru citire. Biii 1..4 cauzeaz generarea unei ntreruperi dac
aceasta este valid.
- bit 0 1 = date receptate. Este resetat prin citirea buffer-ului de recepie;
- bit 1 1 = eroare de suprascriere, caracterul precedent fiind pierdut;
- bit 2 1 = eroare de paritate. Este resetat prin citirea registrului de stare a
liniei;
- bit 3 1 = eroare de ncadrare, caracterul recepionat conine un bit de stop
invalid;
- bit 4 1 = este indicat oprirea ; se recepioneaz spaii;
- bit 5 1 = buffer de emisie gol, este cerut emisia urmtorului caracter;
- bit 6 1 = transmitorul este inactiv, nici o dat nefiind procesat;
- bit 7 nefolosit.
3Feh: registrul de stare al modem-ului.
Disponibil pentru citire. Biii 0..3 determin generarea unei ntreruperi dac
aceasta este validat.
7 6 5 4 3 2 1 0
DCD RI DSR CTS DCD RI DSR CTS
- bit 0 1 = delta CTS i-a schimbat starea;
- bit 1 1 = delta DSR i-a schimbat starea;
- bit 2 1 = se detecteaz fronturi ale semnalului RI;
- bit 3 1 = delta DCD i-a schimbat starea;
- bit 4 1 = CTS este activ;
- bit 5 1 = DSR este activ;
- bit 6 1 = RI este activ;
- bit 7 1 = DCD este activ.
Comunicaia serial. Standardul RS-232C 67
6.4 ntreruperea 14h
ntreruperea 14h pune la dispoziie urmtoarele servicii pentru interfaa
serial
AH=00h- iniializarea portului serial
La apel: DX = numrul portului (0,1)
AL = parametrii de iniializare, conform urmtoarelor cmpuri;
Bit: 0,1: lungimea cuvntului de date(10=7bii,11=8bii);
2: numrul biilor de stop(0=1,1=2);
3,4: paritatea (x0=far,01=impar, 11=par);
5..7: rata de transmisie: 000=110, 000=150, 010=300, 011=600,
100=1200, 101=2400, 110=4800, 111=9600.
La revenire: AH= starea linii seriale
Bit: 0: 1 = date receptate;
1: 1 = eroare de suprascriere, caracterul precedent fiind pierdut;
2: 1 = eroare de paritate;
3: 1 = eroare de ncadrare;
4: 1 = oprire detectat;
5: 1 = buffer de transmisie gol;
6: 1 = registrul de deplasare la transmisie gol;
7: 1 = timeout.

AH= stare modem
Bit: 0: 1 = delta CTS;
1: 1 = delta DSR;
2: 1 = se detecteaz fronturi ale semnalului RI;
Interfee i protocoale de comunicaie 68
3: 1 = delta DCD;
4: 1 = CTS este activ;
5: 1 = DSR este activ;
6: 1 = RI este activ;
7: 1 = DCD este activ;
AH=01h- emisie caracter
La apel: DX = numrul portului (0,1)
AL = caracterul ce trebuie emis
La revenire: AL = codul caracterului transmis
Dac bitul 7 al lui AH este setat a intervenit o eroare i
ceilali 7 bii ai lui AH conin starea liniei de comunicaie (ca
mai sus)
AH=02h recepie caracter
La apel: DX = numrul portului
La revenire:
AL = caracterul emis;
AH este diferit de zero dac a aprut o eroare.
Ah=03h citirea strii portului serial
La apel: DX = numrul portului(0..1);
La revenire: AH starea liniei seriale (ca mai sus).
O problem obinuit existent n transmisiile seriale este aceea a protocolului
de comunicaie ntre emitor i receptor. La emitor / receptor exist n mod
obinuit cte un buffer de dimensiune finit pentru datele ce urmeaz a fi emise /
recepionate. Cnd buffer-ul este plin calculatorul ignor datele noi pn ce
buffer-ul se golete suficient.
Pentru evitarea acestui fenomen se implementeaz protocoale hard sau soft, prin
intermediul crora emitorul i receptorul i semnalizeaz unul altuia umplerea
buffer-ului propriu.
Comunicaia serial. Standardul RS-232C 69
Protocolul XON/XOFF este un protocol soft care funcioneaz pe urmtorul
principiu: cnd buffer-ul de recepie este plin , receptorul trimite un caracter
XOFF (19 n zecimal) pentru a comunica emitorului s opreasc emisia
datelor. Cnd buffer-ul de recepie devine suficient de gol, receptorul trimite un
caracter XON (17 n zecimal) pentru a indica faptul c transmisia datelor poate
rencepe. Cnd este folosit protocolul XON / XOFF codurile XON i XOFF vor
fi folosite ntotdeauna ca i coduri de control i nu ca date, deci acest protocol nu
este recomandat n cazul transmisiilor binare.
6.5 Probleme propuse
Problema 1. S se configureze portul serial pentru transmiterea i recepia
datelor la diferite rate de comunicaie prin polling (interogare).(Se va modifica
rata de la 110 la 115200).
Problema 2. S se realizeze un program de comunicaie pe portul serial ntre
dou calculatoare (prin polling).
Problema 3. S se realizeze un program de comunicaie pe portul serial prin
ntrerupere, indirectnd ntreruperea 0Ch. (Vezi Anexa 3).
Obs: - La iniializarea portului serial se va activa IRQ4 n controlerul 8259A
resetnd bitul 4 din octetul citit de la portul 21h.
- La prsirea rutinei de tratare a ntreruperii 0Ch trebuie semnalizat
controlerului de ntreruperi (8259A) faptul ca aceast ntrerupere s-a
ncheiat prin scrierea cuvntului 20h (EOI) la portul 20h.

Interfee i protocoale de comunicaie 70
7 Citirea cartelelor electronice
7.1 Scopul lucrrii
Lucrarea are ca scop prezentarea modului de funcionare a cartelelor electronice
i propune o conectare a acestora pe un port de comunicaie serial, chiar dac
acestea nu folosesc protocolul de comunicaie serial pentru transmiterea
informailor.
7.2 Consideraii generale
O cartel telefonic, este o memorie de tip EPROM, avnd dou zone de
memorie i o capacitate de 128, 256 sau 512 bii. Ea are o ieire serial, un
contor de adrese i civa pini de control. Semnificaia pinilor este urmtoarea:
Pin Semnificaie
Pin 1 Vcc
Pin 2 RST
Pin 3 CLK
Pin 4 GND
Pin 5 Vpp
Pin 6 I/O
7.3 Organizarea memoriei
n prima zon de memorie sunt stocate date referitoare la productor (un cod al
acestuia), seria cartelei, valoarea cartelei, date i centre de distribuie. Aceast
zon este protejat la scriere, prin arderea unui fuzibil intern de ctre productor
n timpul procesului de fabricaie.
n cea de-a doua zon de memorie sunt coninute datele referitoare la creditul
rmas disponibil pe cartel. nscrierea de date n aceast zon se face pe
principiul programrii EPROM-urilor i de aceea nu este posibil ca s
rencrcm o cartel telefonic, ci doar s-i micorm creditul rmas. Pentru a
Citirea cartelelor electronice 71
putea fi rencrcat, o cartel telefonic trebuie mai nti tears prin expunerea
la raze ultraviolete, dar aceasta nu este posibil deoarece cartela nu este prevzut
cu o fereastr de tergere ca n cazul EPROM-urilor de uz general.
Cartelele telefonice utilizate n Romnia sunt memorii de 128 de bii i sunt
realizate n tehnologie CMOS. Din aceti 128 de bii, primi 64 sunt protejai la
scriere (Read Only), urmtorii 40 de bii sunt de tip Read-Write i ultimi 24 sunt
setai n 1 logic din fabricaie. Harta memoriei este prezentat n tabelul
urmtor (pentru o cartel telefonic francez):
Octet Bit Valoarea hexa
1-2 116 10h/2Bh
3 1724 2Fh

4

2532
2Ah productor: Solaic
4Ah productor: ODS
8Ah productor: G+D
CAh productor: Gemplus
5-8 3364 Identificatorul productorului
9-13 65104 Zona de numrare
14-16 105128 Zona de bii setai pe 1
Identificatorul cartelei este o zon de 40 de bii read-only ce conine numrul de
serie al cartelei, valoarea iniial, data de fabricaie, centrele de distribuie ale
cartelei.
Zona de numrare conine date despre valoarea creditului rmas disponibil pe
cartel. Numrarea unitilor rmase disponibile se face n octal i are la baz
urmtorul principiu: valoarea fiecrui octet din cei cinci ce compun zona de
numrare va fi dat de numrul de bii setai n 1 logic astfel : 00001111 va fi
egal cu 4, 00011111 va fi egal cu 5. Valoarea total a unitilor disponibile se
calculeaz ca fiind

4
0
*
8
k
k
k
V
unde V
k
este valoarea octetului k.
Exemplu:
Octet 9 Octet 10 Octet 11 Octet 12 Octet 13
00000111 00111111 01111111 00000001 00000011
Interfee i protocoale de comunicaie 72
3(octal) 6(octal) 7(octal) 1(octal) 2(octal)
Total uniti: 3*8
4
+ 6*8
3
+ 7*8
2
+ 1*8
1
+ 2*8
0
= 15818 uniti
7.4 Principiul de funcionare
In ceea ce privete transferarea datelor din cartel n calculator trebuie respectat
urmtorul protocol de comunicaie:
Iniierea pornete prin resetarea cartelei telefonice astfel: se trece liniile RST si
CLK pe 0 pentru o perioada de timp, urmat de trecerea liniei RST pe 1 i
dup o perioada de timp i a liniei CLK. Dup aceast operaiune, indicatorul de
adres (contorul de adres) care stocheaz poziia de citire din memoria cartelei,
va fi resetat la valoarea 0. Trebuie avut n vedere c acest indicator nu poate fi
resetat atta timp ct are valoarea cuprins ntre 0 i 7. Pentru a putea reseta,
acest indicator trebuie incrementat astfel ca valoarea lui s depeasc valoarea
7. Incrementarea se face innd linia de reset n starea logic 1 i aplicarea
unui numr de impulsuri pe linia de tact.
Pentru extragerea datelor se procedeaz astfel: se seteaz linia de reset n starea
logic 1 iar pe linia CLK se aplic un semnal de tact. Indicatorul de adres
este incrementat cu 1 la fiecare front descresctor al semnalului de tact, iar
datele coninute n fiecare bit adresat sunt scoase la ieire spre pinul I/O pe
fiecare front cresctor al tactului. Decrementarea indicatorului de adrese se
realizeaz prin resetarea cartelei i implicit a indicatorului dup care se
incrementeaz indicatorul la valoarea dorit. Primul bit care se obine este bitul
0 (cel mai puin semnificativ) din primul octet. Dispozitivul inverseaz hardware
valoare de pe pinul I/O de aceea valoare obinut trebuie inversat software.
Obs. Linia RST de la cartel este legata la linia RTS a portului serial, linia CLK
de la cartel este legata la linia DTR de la portul serial iar linia de I/O de la
cartela este conectata la linia CTS din portul serial.
7.5 Probleme propuse
Problem: S se scrie un program care citete o cartel telefonic i afieaz
datele citite n valoarea lor hexa precum i numrul de uniti rmase disponibile
pe cartel.
Utilizarea comunicaiei paralele n PC 73
8 Utilizarea comunicaiei paralele n PC
8.1 Scopul lucrrii
Lucrarea prezint porturile paralele ale calculatoarelor compatibile IBM PC i
urmrete familiarizarea studenilor cu diferite soluii de conectare a unor
echipamente externe la aceste porturi. Sunt prezentate semnalele i regitrii
disponibili ai interfeei pentru toate cele trei tipuri de porturi paralele: portul
bidirecional standard, portul EPP i portul ECP. De asemenea sunt prezentate
metodele de transfer al datelor ntre dou calculatoare prin interogare i
ntreruperi.
8.2 Consideraii generale
Porturile paralele se folosesc n primul rnd pentru imprimante i funcioneaz
normal ca porturi unidirecionale, dei cteodat pot fi folosite i bidirecional.
Un port paralel are opt linii pentru transmiterea simultan a tuturor biilor unui
octet de date prin intermediul a opt fire. Interfaa este rapid i, de obicei,
rezervat pentru imprimante, nu pentru comunicaia dintre calculatoare. O
problem a porturilor paralel este c nu se pot extinde cablurile la orice lungime
fr a amplifica semnalul, ntruct apar erori de transmisie a datelor.
Semnalele pinilor pentru portul paralel din PC standard (SPP):
Pin Descriere Direcia Registrul Inversat hard
1 Strob Ieire /Intrare Control Da
2 Bit de date 0 Ieire Date
3 Bit de date 1 Ieire Date
4 Bit de date 2 Ieire Date
5 Bit de date 3 Ieire Date
6 Bit de date 4 Ieire Date
7 Bit de date 5 Ieire Date
8 Bit de date 6 Ieire Date
Interfee i protocoale de comunicaie 74
9 Bit de date 7 Ieire Date
10 Confirmare Intrare Stare
11 Ocupat Intrare Stare Da
12 Terminare hrtie Intrare Stare
13 Selecie Intrare Stare
14 Salt la rnd nou automat Ieire /Intrare Control Da
15 Eroare Intrare Stare
16 Iniializare imprimant Ieire /Intrare Control
17 Selecie intrare Ieire /Intrare Control Da
18 retur bit 0 (mas) Intrare
19 retur bit 1 (mas) Intrare
20 retur bit 2 (mas) Intrare
21 retur bit 3 (mas) Intrare
22 retur bit 4 (mas) Intrare
23 retur bit 5 (mas) Intrare
24 retur bit 6 (mas) Intrare
25 retur bit 7 (mas) Intrare
Exist mai multe tipuri de porturi paralele:
- unidirecionale pe patru bii;
- bidirectional pe 8 bii SPP (Standard Parallel Port);
- EPP (Enhanced Parallel Port);
- ECP (Enhanced Capabilites Port).
8.3 Portul unidirecional pe 4 bii
Natura unidirecional a portului paralel al calculatorului PC original este
conform utilizrii sale iniiale, i anume transmiterea de date ctre o
imprimant. Totui, existau situaii n care era de dorit s ai un port
Utilizarea comunicaiei paralele n PC 75
bidirecional, de exemplu cnd sunt necesare semnale venite de la o imprimant.
Acest port a fost modificat astfel nct s permit utilizarea unei intrri pe patru
bii pentru a prelua patru linii de semnale. Astfel, aceste porturi puteau s
furnizeze ieiri pe 8 bii sau s preia intrri pe 4 bii. Aceste porturi ating de
obicei rate de transfer de 40-60 Ko pe secund, cu anumite modificri pot ajunge
la 140 Ko pe secund.
8.4 Portul bidirecional pe 8 bii (SPP)
Aceste porturi, lansate n 1987, se ntlnesc n calculatoarele personale actuale i
sunt denumite porturi paralele de tip PS/2. Prin aceste porturi se poate comunica
ntre calculator i diferite dispozitive periferice, oferind o rat de 80 pn la
300Ko . De fapt este portul unidirecional pe 4 bii la care s-au mai definit
civa dintre pinii anterior nefolosii ai conectorului paralel i prin definirea unui
bit de stare care s indice direcia n care circul informaia de-a lungul canalului
de date.
8.5 Portul EPP (Enhanced Parallel Port)
Aceasta este o specificaie mai nou, denumit cteodat port paralel Fast
Mode(n mod rapid). Portul EPP lucreaz la o frecven mai mare i ofer o
cretere de 10 ori a capacitii de transfer fa de un port paralel convenional. A
fost conceput pentru periferice care utilizeaz porturi paralele, cum ar fi
adaptoarele LAN, uniti de disc i uniti de band. Ratele de transfer ale
acestui port sunt de la 500KB/s pn la 2 MB/s pe secund. Portul EPP
genereaz i controleaz toate transferurile la i de la periferic. Pentru a utiliza
modul EPP, un set diferit de regitrii i etichete sunt asignate pentru fiecare
linie.
Semnalele pinilor pentru portul paralel n modul EPP
Pin Semnalele SPP Semnalele EPP IN/OUT Funcia
1 Strobe Write Out 0 indic scriere
1 indic citire
2-9 Data 0-7 Data 0-7 IN/OUT Busul de date bidirecional
10 Ack Interrupt In Linia de ntrerupere
Interfee i protocoale de comunicaie 76
11 Busy Wait In Utilizat pentru sincronizare.
Un ciclu poate fi startat
cnd linia este n 0i
terminat cnd este n 1
12 Paper out - In Neutilizat n EPP mode
13 Select - In Neutilizat n EPP mode
14 Auto Linefeed Data Strobe Out 0 indic transfer de date
15 Error - In Neutilizat n EPP mode
16 Initialize Reset Out Reset activ pe 0
17 Select Printer Address Strobe Out 0 transfer de adres
18-
25
Ground Ground GND
Paper Out, Select i Error nu sunt folosite n modul EPP. Aceste linii pot fi
utilizate n alt scop de ctre utilizator. Starea acestor linii pot fi determinate n
orice moment citind regitrii modului SPP.
8.5.1 Regitrii modului EPP
Portul EPP are un set suplimentar de regitrii n comparaie cu modul SPP.
Totui regitrii modului SPP nu sunt nlocuii ci sunt completai cu alii noi.
n tabelul urmtor sunt prezentate adresele portului EPP.
Adresa Tipul registrului Read /write
Baza +0 Date (SPP) Write
Base +1 Stare (SPP) Read
Base + 2 Control (SPP) Write
Base + 3 Adrese (EPP) Read /Write
Base + 4 Date (EPP) Read /Write
Base + 5 Nedefinit (transfer pe 16 /32 bii)
Base + 6 Nedefinit (transfer pe 32 bii)
Base + 7 Nedefinit (transfer pe 32 bii)
Utilizarea comunicaiei paralele n PC 77
Primele 3 adrese sunt exact ca la modul SPP i se utilizeaz n acelai fel. Restul
sunt utilizate doar n modul EPP. Pentru a trimite date pe portul paralel setat n
modul EPP datele se pot scrie la adresa Base +0, i astfel se obine o
comunicaie la fel ca pe portul SPP standard. Pentru o comunicaie pe portul
EPP cu un dispozitiv compatibil, datele trebuie scrise la adresa Base +4 i portul
va genera toate semnalele de sincronizare necesare. Datele recepionate se citesc
din acelai registru. Dac se dorete trimiterea unei adrese aceasta trebuie scris
la adresa Base+3.
8.6 Portul ECP (Enhanced Capabilities Port)
Este un alt tip de port paralel de mare vitez realizat de firma Microsoft n
colaborare cu Hewlett-Packard, oferind performane mbuntite dar necesit o
logic hardware special. Spre deosebire de EPP, portul ECP nu a fost gndit
pentru periferice care lucreaz cu sistemele portabile prin portul paralel; scopul
su fiind acela de a permite ataarea ieftin a unei imprimante de foarte mare
performan. Mai mult portul ECP necesit utilizarea unui canal DMA, ceea ce
la portul EPP nu este specificat, astfel c pot aprea conflicte cu alte dispozitive
care utilizeaz transferul DMA. Cele mai multe calculatoare au capacitatea de a
lucra n modul ECP sau EPP. De obicei, portul EPP este o soluie bun pentru
perifericele care utilizeaz porturile.
De asemenea se utilizeaz un buffer de tip FIFO pentru transferul i recepia
datelor.
Pini cuplorului de comunicaie pentru portul paralel n modul ECP.
Pin Semnalele
SPP
Semnalele ECP IN/OUT Funcia
1 Strobe HostCLK Out 0 indic c datele sunt
valide pentru a fi preluate
2-9 Data 0-7 Data 0-7 IN/OUT Busul de date bidirecional
10 Ack PeriphCLK In 0 indic c datele de la
dispozitiv sunt valide
11 Busy PeriphAck In 1 indic c se transmit
date
0 ciclul de comand
Interfee i protocoale de comunicaie 78
12 Paper out NAckReverse In 0 - Ack pentru dispozitiv
13 Select X-Flag In Extensibility Flag
14 Auto
Linefeed
Host Ack Out 1 se transmit date
0 ciclu de comand
15 Error Periph Request In 0 datele de la dispozitiv
sunt disponibile
16 Initialize nReverseRequest Out 0 se recepioneaz
datele de la periferic
1 se transmit date la
periferic
17 Select
Printer
1284 Active Out 1 1284 transfer mode
18-
25
Ground Ground GND
Liniile HostAck i PeriphAck indic dac semnalele de pe liniile de date sunt
date sau comenzi.
8.6.1 Regitrii modului ECP
Adresa Tipul registrului Read /write
Baza +0 Date (SPP) Write
Adresa FIFO (ECP) Read /Write
Base +1 Stare (SPP, ECP) Read/ Write
Base + 2 Control (SPP, ECP) Read/ Write
Base + 400h Date FIFO (modul FIFO) Read /Write
Date FIFO (modul ECP) Read /Write
Test FIFO (Modul Test) Read /Write
Configurare regitri A
(modul configurare)
Read /Write
Base + 401h Configurare regitri B
Utilizarea comunicaiei paralele n PC 79
(modul configurare)
Base + 402h Extended Control Register
(toate modurile)
Read /Write
Cel mai important registru de la portul ECP este registrul ECR (Extended
Control Register). Acest registru seteaz modul de operare al portului ECP plus
strile memoriei FIFO. Setarea acestui registru este urmtoarea:
BIT
7 : 5 Select Curent mode of Operation
000 Standard mode
001 Byte Mode
010 Paralel port FIFO Mode
011 ECP FIFO mode
100 EPP mode
101 Reserved
110 FIFO test mode
111 Configuration mode
4 ECP Interrupt Bit
3 DMA Enable Bit
2 ECP Service Bit
1 FIFO full
0 FIFO empty
Cei mai semnificativi bii din ECR seteaz modul de operare. Sunt posibile 7
moduri dar nu toate porturile suport toate modurile. De exemplu EPP mode nu
este disponibil la toate porturile .
Prin regitri de configurare A i B se poate configura modul de utilizare al
portului ECP, tipul semnalului de ntrerupere, numrul de bii de date,
ntreruperea pe care s se activeze, numrul canalului DMA etc.
Interfee i protocoale de comunicaie 80
8.7 Portul SPP standard
n PC comunicaia paralel se face prin intermediul a trei porturi de
comunicaie, denumite LPT1, LPT2 i LPT3. Zona de date BIOS conine,
ncepnd de la adresa 0:0408h o list a adreselor de baz corespunztoare
cuploarelor paralele. Adresele pentru LPT1 i LPT2 sunt:
LPT1 378h37fh
LPT2 278h27fh
Asupra acestor porturi se poate opera direct, prin instruciuni de intrare ieire
(in, out), sau prin intermediul ntreruperii BIOS 17h.
Utilizarea comunicaiei paralele se poate face prin interogare,(polling), sau prin
ntreruperi. Liniile de ntrerupere folosite, corespunztoare controlorului de
ntreruperi 8259A, respectiv tipurile corespunztoare ale ntreruperilor n PC,
sunt
LPT1 IRQ7 INT 0Fh
LPT2 IRQ5 INT 0Dh
8.8 Regitrii asociai unui cuplor de comunicaie paralel
Regitrii pentru cuplorul de comunicaie paralel LPT1 sunt:
Adresa 378h registrul de date al cuplorului paralel
Scriere: conine codul ASCII trimis imprimantei;
Citire: conine ultimul caracter trimis.
Adresa 37Ah Citire / scriere registrul de control al imprimantei
7 6 5 4 3 2 1 0
0 0 0 IRQ SLCT IN INIT AUTO LF STROB
Bit:
0 - Strob, este 1 la transmiterea unui octet;
Utilizarea comunicaiei paralele n PC 81
1 - AUTO LineFeed, 1 cauzeaz trimiterea automat a unui LF dup
un CR;
2 - INIT, iniializare, 0- reseteaz imprimanta;
3 - SLCT IN, selecie, 1 selecteaz imprimanta;
4 - IRQ Enable, validare ntreruperi, 1 permite generarea unei
ntreruperi hardware cnd ACK este 0;
5,6,7 sunt 0 (sau 1 depinde de tipul placi de baz).
Adresa 379h Citire registrul de stare al imprimantei
7 6 5 4 3 2 1 0
BUSY ACK PE SLCT ERROR 0 0 0
Bit: 0,1,2 sunt 0
3 ERROR, cnd e 0 imprimanta semnalizeaz o eroare
4 SLCT, 1: imprimanta e selectat
5 PE, 1: lips hrtie n imprimant
6 ACK, 0 : este permis trimiterea urmtorului caracter
7 BUSY, 0 bufferul imprimantei este plin, imprimanta
este decuplat sau a aprut o alt eroare

8.9 ntreruperea BIOS 17h
pune la dispoziie urmtoarele servicii pentru interfa paralel
AH = 00h imprimarea unui caracter
La apel:
AL codul ASCII al caracterului;
DX numrul imprimantei (0,1 sau 2).
La revenire
Interfee i protocoale de comunicaie 82
AH starea imprimantei
Bit 0 1: timeout;
Bit 1,2 nefolosii;
Bit 3 1: eroare I/O;
Bit 4 0: imprimant decuplat, 1: imprimant selectat;
Bit 5 1: lips hrtie n imprimant;
Bit 6 1:ACK;
Bit 7 1: imprimant ready;
AH = 01h Iniializarea portului paralel
La apel:
DX numrul imprimantei;
La revenire:
AH starea imprimantei ( la fel ca la funcia 0).
AH = 02h citirea strii imprimantei
La apel:
DX numrul imprimantei;
La revenire:
AH starea imprimantei( la fel ca la funcia 0).
Sincronizarea pe portul SPP se poate realiza n 5 pai (de exemplu sincronizarea
cu imprimanta):
1. Se scriu datele n portul de date;
2. Se verific dac imprimanta este ocupat. Dac este ocupat ea nu va
recepiona datele i astfel datele scrise vor fi pierdute;
3. Se trece pinul Strobe pe 0. Astfel imprimanta va prelua corect datele de pe
liniile de date;
4. Dup aproximativ 5 microsecunde se trece pinul Strobe n 1;
5. Se verific Ack de la periferic.
Utilizarea comunicaiei paralele n PC 83
8.10 Probleme propuse
Problema 1
S se scrie un program care afieaz pe un display conectat la portul paralel
toate valorile de la 0 la F (numr n hexa) n ordine cresctoare. Se va realiza
direct scrierea n regitrii cuplorului de comunicaie.
Obs: - valorile B i D se vor afia pe display cu litere mici pentru a nu se
confunda cu cifrele 8 i 0.
- ntre display i portul paralel sunt realizate urmtoarele conexiuni, biii
de date D0-D7 ai portului paralel sunt conectai la cte o celul (led) al
display-ului n felul urmtor:

Pin Descriere Celul display
Pin 2 (Bit de date 0) a
Pin 3 (Bit de date 1) b
Pin 4 (Bit de date 2) c
Pin 5 (Bit de date 3) d
Pin 6 (Bit de date 4) e
Pin 7 (Bit de date 5) f
Pin 8 (Bit de date 6) g
Pin 9 (Bit de date 7) punct
Pin 25 (masa) GND


b
c
d
e
f
g
a
Interfee i protocoale de comunicaie 84
Problema 2
S se scrie un program de comand a unui motor pas cu pas pe portul paralel.
Sunt realizate urmtoarele legturi ntre motor i portul paralel:
- comand nfurarea 1 a motorului - la pinul 2 al portului paralel(bit de
date 0 n reg. 378h);
- comand nfurarea 2 - la pinul 3 (bit de date 1 n registrul
378h);
- comand nfurarea 3 - la pinul 4 (bit de date 2 n registrul
378h);
- comand nfurarea 4 - la pinul 5 (bit de date 3 n registrul
378h).
n funcie de sensul de rotaie dorit se poate comanda nfurrile n diferite
direcii. Pentru un cuplu al motorului mai bun se poate comanda la un moment
dat 2 nfurri (comand cu micro-pire).
Exemplu de comand (comanda cu micro-pire):
- nfurarea 1;
- nfurarea 1 i 2;
- nfurarea 2;
- nfurarea 2 i 3;
- nfurarea 3;
- nfurarea 3 i 4;
- nfurarea 4;
- nfurarea 4 i 1.

Problema 3
S se realizeze un program de comunicaie ntre dou calculatoare utiliznd
cuplorul paralel de comunicaie.

Observaii
1.Comunicaia se va realiza utiliznd un cablu de comunicaie paralel cu
11 fire care realizeaz urmtoarele legturi:

Utilizarea comunicaiei paralele n PC 85
Pin Descriere Pin Descriere
Pin 2 (Bit de date 0) Pin 15 (Eroare)
Pin 3 (Bit de date 1) Pin 13 (Select)
Pin 4 (Bit de date 2) Pin 12 (Paper end)
Pin 5 (Bit de date 3) Pin 10 (Acknowledge)
Pin 6 (Bit de date 4) Pin 11 (Busy)
Pin 15 (Eroare) Pin 2 (Bit de date 0
Pin 13 (Select) Pin 3 (Bit de date 1)
Pin 12 (Paper end) Pin 4 (Bit de date 2)
Pin 10 (Acknowledge) Pin 5 (Bit de date 3)
Pin 11 (Busy) Pin 6 (Bit de date 4)
Pin 25 (masa) Pin 25 (masa)
2. nainte de transmiterea datei se va realiza o sincronizare ntre cele dou
calculatoare.
3. Cuplorul de comunicaie inverseaz bitul Busy prin hard

Problema 4
S se scrie un program care inditecteaz ntreruperea serviciilor pentru
imprimant (INT 17h), cu scopul salvrii ntr-un fiier a tuturor datelor trimise
spre imprimant.
Interfee i protocoale de comunicaie 86
9 Magistrale
9.1 Scopul lucrrii
Lucrarea i propune familiarizarea studenilor cu modul de comunicaie a unui
calculator compatibil IBM cu plcile de extensie conectate pe magistralele ISA
sau PCI disponibile n aceste calculatoare. De asemenea sunt prezentate regitrii
asociai magistralei PCI pentru identificarea i comanda cu plcile de extensie
conectate pe magistrala PCI.
9.2 Consideraii generale
Magistralele reprezint cile de transmitere a semnalelor ntre diferitele
elemente ale unui sistem de calcul precum i protocoalele folosite pentru
transmiterea informaiilor. Din acest punct de vedere magistralele se grupeaz n
magistrale paralele i magistrale seriale. Dup modul de control al transferului
de informaii, magistralele pot fi sincrone sau asincrone. La magistralele
sincrone toate operaiile sunt sincronizate de un semnal de ceas i necesit un
numr ntreg de perioade de ceas, numite cicluri de magistral. Magistralele
asincrone nu utilizeaz un semnal de ceas iar ciclurile de magistral pot avea n
acest caz orice durat, i aceasta nu trebuie s fie aceeai ntre toate perechile de
dispozitive.
Magistralele permit efectuarea transferului de date ntre calculator i diferitele
plci de extensie. Magistralele grupeaz semnale de tipul linii de date, linii de
adres, linii de comand /stare, linii de alimentare etc.
Exist mai multe magistrale standardizate n interiorul calculatorului.
9.3 Magistrala ISA
Magistrala ISA (Industry Standard Arhitecture) este arhitectura de magistral
utilizat la primul IBM PC n 1982. Iniial a fost o magistral pe 8 bii, dar mai
trziu a fost extins a 16 bii i utilizat n modelul IBM PC/AT, lansat pe pia
n 1984. Poate prea uimitor c o arhitectur att de veche este folosit n zilele
noastre n sistemele de nalt performan, dar aceasta se ntmpl din cauza
siguranei, accesibilitii i compatibilitii sale, la care de adaug faptul c
Magistrale 87
aceast veche magistral continu s fie mai rapid dect multe din perifericele
pe care le conectm la ea. Exist dou versiuni de magistrale ISA, care se
deosebesc prin numrul de bii de date ce pot fi transferai simultan: magistrala
pe 8 bii i magistrala pe 16 bii. Versiunea pe 8 bii era utilizat n PC i XT la
4.77MHz. versiunea pe 16 bii a fost utilizat n AT i lucra la 6MHz i apoi la
8MHz. Ulterior, productorii au stabilit la 8.33MHz valoarea frecvenei standard
a magistralei ISA, pentru a asigura compatibilitatea cu versiunile vechi. Exist
sisteme n care magistrala ISA poate funciona la frecvene mai mari, dar unele
adaptoare nu pot face fa vitezelor de lucru mari.
Redm n continuare semnificaia pinilor primului segment al unui slot ISA pe 8
bii:
PIN Nume Semnal PIN Nume Semnal
B1 Mas A1 Verificare canal I/O
B2 Reset A2 Data bit 7
B3 +5Vcc A3 Data bit 6
B4 IRQ9 A4 Data bit 5
B5 -5Vcc A5 Data bit 4
B6 DMA Request 2 A6 Data bit 3
B7 -12Vcc A7 Data bit 2
B8 0 Wait A8 Data bit 1
B9 +12Vcc A9 Data bit 0
B10 Masa A10 Canal I/O ready
B11 Scriere memorie MemW A11 Activare adres AEN
B12 Citire memorie MemR A12 Linie adrese 19
B13 Scriere I/O IOWR A13 Linie adrese 18
B14 Citire I/O IORD A14 Linie adrese 17
B15 DMA Acknowledge 3 A15 Linie adrese 16
B16 DMA Request 3 A16 Linie adrese 15
Interfee i protocoale de comunicaie 88
B17 DMA Acknowledge 1 A17 Linie adrese 14
B18 DMA Request 1 A18 Linie adrese 13
B19 Refre A19 Linie adrese 12
B20 Clock (8.33MHz) A20 Linie adrese 11
B21 IRQ 7 A21 Linie adrese 10
B22 IRQ 6 A22 Linie adrese 9
B23 IRQ 5 A23 Linie adrese 8
B24 IRQ 4 A24 Linie adrese 7
B25 IRQ 3 A25 Linie adrese 6
B26 DMA Acknowledge 2 A26 Linie adrese 5
B27 Terminal count A27 Linie adrese 4
B28 BALE A28 Linie adrese 3
B29 +5Vcc A29 Linie adrese 2
B30 Oscilator (14.3MHz) A30 Linie adrese 1
B31 Masa A31 Linie adrese 0
Dezavantajul major al acestei magistrale este viteza relativ sczut. Aceast
limitare a vitezei este o consecin a epocii primului sistem PC, la care
magistrala de I/O opera la aceeai vitez cu magistrala procesorului. n timp ce
viteza magistralei procesorului a crescut, magistrala I/O a cunoscut doar ajustri
ale vitezei nominale, n principal prin creterea limii de band. Magistrala I/O
trebuia s lucreze la o vitez sczut deoarece imensa majoritate a adaptoarelor
instalate funcionau doar la viteze mai mici.
9.4 Magistrala PCI
Propus de firma Intel in 1992, magistrala local denumit PCI (Peripheral
Component Interconnected) se dorea s permit interconectarea circuitelor
rapide pe placa de baz. Intel trebuia s modifice arhitectura magistralei locale
Magistrale 89
pentru a mri performanele sistemului, ceea ce implica i modificarea
circuitelor interfa pentru periferice.
Magistrala PCI urma s se conecteze la magistrala local a procesorului prin
intermediul unui circuit special destinat acestui scop. Astfel, la fiecare
schimbare a procesorului i a magistralei locale, trebuia schimbat doar circuitul
de legtur, circuitele de interfa cu perifericele nefiind afectate.
Iniial specificaia PCI nu prevedea conectori de extensie. Intel a actualizat
specificaiile PCI pentru ca aceasta s admit i conectori de extensie. Astfel,
ajungndu-se la ce-a mai utilizat arhitectur de magistral.
Pe magistrala PCI sunt posibile transferuri de 32 sau de 64 bii, lucrnd, n
versiunea 2.1 la o frecven de 66 MHz, ceea ce permite obinerea unei rate
maxime de transfer de 264MB/s.
Magistrala PCI este conectat la magistrala sistem a procesorului prin
intermediul unui bridge, avnd acces direct la memoria principal astfel nct
transferurile ntre procesor i memoria cache, respectiv ntre dispozitivele de I/O
i memoria principal pot avea loc simultan. Astfel pe magistrala PCI se pot
conecta dispozitive de vitez ridicat care solicit n msur redus procesorul.
9.4.1 Regitrii magistralei PCI
Pe magistrala PCI fiecare dispozitiv funcional dispune de un bloc de 64 cuvinte
duble rezervat pentru regitrii de configuraie. Formatul primelor 16 cuvinte este
predefinit de specificaiile PCI. Aceasta reprezentnd antetul de configuraie al
dispozitivului. n specificaia PCI sunt descrise 2 forme ale antetului. Tipul 0
este specific dispozitivelor dezvoltate pe PCI i va fi descris n continuare. Tipul
1 este specific punilor de legtur (bridge) ntre dou magistrale PCI pentru
sistemele cu mai multe magistrale PCI.
Pentru tipul 0 registrele din antet sunt utilizate pentru identificarea
dispozitivului, controlul funciilor sale i detectarea strii acestuia.
00h Registru identificare productor / dispozitiv
Acest dublu registru este disponibil numai pentru citire.
Octeii 1 i 0 din acest registru (cmps cei mai puin semnificativi 16 bii)
identific productorul dispozitivului. Valoarea 0FFFFh este rezervat i este
Interfee i protocoale de comunicaie 90
ntoars automat de bridge-ul PCI cnd se ncearc citirea registrului de
identificare al productorului dintr-un dispozitiv inexistent.
Octeii 3 i 2 din acest registru (cms cei mai semnificativi 16 bii) identific
tipul dispozitivului i este asignat de productor.
01h Registru de comand i de stare
Octeii 1 i 0 din acest registru (cmps 16 bii) sunt utilizai de registrul de
comand. Din cei 16 bii rezervai sunt utilizai doar primii 10 bii ceilali fiind
rezervai pentru dezvoltri ulterioare. Dintre funciile care pot fi specificate de
aceti regitrii sunt:
- validare dispozitive;
- validare acces la memoria dispozitivului (dac acesta dispune de
memorie);
- valideaz funcia de master a dispozitivului (dac acesta are aceast
funcie);
- validare monitorizare cicluri speciale PCI utilitare pentru
transmiterea de mesaje dispozitivelor sclave;
- Validare paritate cnd este validat, dispozitivul va raporta erorile de
paritate;
- Actualizarea regitrilor de palet a culorilor ale unei interfee VGA
fr confirmarea acceptri datelor util cnd n sistem se folosea i
un accelerator grafic separat de placa grafic.
Octeii 3 i 2 din acest registru (cms 16 bii) reprezint registrul de stare care
pstreaz starea evenimentelor legate de PCI. Acest registru poate fi citit, iar la
scriere fiind posibile doar tergerea valorilor nu i activarea lor. Acest registru
conine informaii legate de frecvena de funcionare, raportarea paritii,
abandonarea unei comunicaii dac este n modul slave, semnalarea unei erori de
sistem, etc.
02h Registru identificare revizie i cod clas
Primul octet (cmps octet) conine o valoare specificat de productor care
reprezint numrul de revizie al dispozitivului.
Ceilali 3 octei reprezint codul de clas care identific clasa de baz,
subfuncia i interfaa de programare a dispozitivului. Clasa de baz a
Magistrale 91
dispozitivului reprezint funcia acestuia i este codificat pe un octet.
Urmtorul octet reprezint o subclas a dispozitivului i n anumite cazuri
ultimul octet reprezint o interfa de programare.
03h Registrul tipului de antet, dimensiune cache, contor ntrziere
Primul octet reprezint dimensiunea cache-ului dac este utilizat, cel de-al
doilea reprezint contor de ntrziere introdus de dispozitiv. Al treilea bit
reprezint formatul antetului de configuraie. Actualmente fiind definite 2
formate ale antetelor.
04h-09h Registre de adrese de baz
6 regitrii pe 32 bii fiecare n care se pot specifica adresa care se dorete
accesat n dispozitiv
0Bh Registru identificare productor subsistem, identificare subsistem
Acest dublu registru este disponibil numai pentru citire.
Octeii 1 i 0 din acest registru (cmps cei mai puin semnificativi 16 bii)
identific productorul subsistemului utilizat de dispozitiv n cazul acesta
folosete un subsistem.
Octeii 3 i 2 din acest registru (cms cei mai semnificativi 16 bii) identific
tipul subsistemului i este asignat de productor.
0Ch Registru adres de baz memorie ROM
n cazul n care dispozitivul folosete o memorie ROM de extensie n acest
registru se specific adresa acestei memorii pentru sistem.
9.5 Magistrala AGP
Magistrala AGP (Accelerated Graphics Port) este o nou interconexiune pentru
acceleratoarele grafice din sistemele bazate pe procesoare Pentium utilizate
pentru grafic 3D i redarea secvenelor video. Aceast tehnologie mbuntete
performanele sistemului punnd la dispoziie o cale rapid ntre controlerul
grafic i memorie sistem. Astfel se permite controlerului grafic s fac accese
direct n memoria sistem n timpul interpretrii grafice, fr s le mai ncarce n
prealabil n memoria video local. Segmentele din memoria sistem care pot fi
accesate de controlerul grafic pot fi rezervate n mod dinamic de ctre sistemul
Interfee i protocoale de comunicaie 92
de operare. Astfel se permit rezoluii mari ale ecranului i se elimin restriciile
de dimensiune pe care memoria video local le impunea asupra texturilor care
trebuiau afiate.
AGP este un port i nu o magistral, deoarece la o magistral se pot conecta mai
multe dispozitive, n timp ce pe AGP exist o singur conexiune doar ntre placa
video i procesor. AGP este o interfa de 64 bii care poate funciona la 66 Mhz
(AGP 1X) i se bazeaz pe extensia la 64 bii a specificaiei PCI 2.1.
Avantajul AGP este c poate funciona la viteza maxim a magistralei sistem n
comparaie cu PCI care funciona la jumtatea acestei viteze. Pe lng dublarea
vitezei magistralei, AGP a definit i un mod 2X care utilizeaz un protocol
special care permite dublarea volumului de date care se transmit pe port la
aceeai frecven. Creterea este obinut prin transferarea datelor att pe frontul
cresctor ct i pe cel descresctor al ceasului de 66MHz. Ajungndu-se astfel la
o rat de transfer de 533Mb/s.
9.6 Circuitul EEPROM 93C46
Se consider o plac conectat pe magistrala ISA care rspunde la o adres de
forma 110A.AAAA, deci n domeniul 0C000h0D000h unde sunt cuprinse
modulele suplimentare de BIOS.
Placa conine o memorie de tip EPROM de 2ko care poate fi doar citit i
rspunde la adresa de mai sus cu linia A11 pe 0 i un circuit de memorie
secvenial de tip EEPROM care rspunde tot la adresa de mai sus dar cu A11
pe 1.
Circuitul de memorie EEPROM (93C46) este organizat ca 64 de cuvinte a cte
16 bii fiecare. Dintre principalele caracteristici ale acestui tip de memorie
EEPROM aminti:
- peste 10000 operaii de tergere / scriere;
- timp de meninere a informaiei de minim 10 ani;
- numr nelimitat de accese de citire;
- accesare pe cuvnt;
- necesit o singur alimentare chiar i pentru operaia de scriere.
Pini circuitului EEPROM 93C46 sunt:
Magistrale 93
- Pin 1: CS (cip select) semnal selecie circuit;
- Pin 2: CLK (clock) semnal sincronizare circuit cu dispozitivul de
comand;
- Pin 3: DI (data input) pin disponibil pentru nscrierea datelor
secvenial;
- Pin 4: DO (data output) pin disponibil pentru citirea secvenial a
datelor din circuit.
Acest circuit permite scrierea unei singure locaii sau a ntregului circuit iar
citirea se face locaie cu locaie. Pentru selectarea diferitelor funcii circuitul
recunoate 7 comenzi:
Comand Aciune
0000.XXXX
Inhibare scriere
0001.XXXX
Scrie tot EEPROM-ul cu aceeai valoare
0010.XXXX
terge tot EEPROM-ul
0011.XXXX
Activare scriere
01AA.AAAA
Scriere locaie
10AA.AAAA
Citire locaie
11AA.AAAA
tergere locaie
Unde AA.AAA reprezint adresa locaiei de memorie care se dorete accesat
iar XXXX reprezint faptul c acei bii nu sunt luai n considerare.
Astfel dup operaia de resetare a circuitului care const n selectarea
circuitului, punerea pinului DI pe 1 i setarea i resetarea clock-ului, circuitul
interpreteaz urmtorii 8 bii ca fiind comanda i adresa astfel: n cazul
comenzilor care specific o adres fix primii 2 bii reprezint comanda iar
urmtorii 6 bii (2
6
=64 locaii) reprezint adresa locaiei. Pentru comenzile care
nu specific o locaie anume primii patru bii reprezint comanda iar urmtorii
sunt neglijai.
Comanda de tergere dup primirea comenzii de tergere i a locaiei dorite,
locaia respectiv este nscris cu valoarea FFFF. Aceasta este singura
posibilitate prin care se poate nscrie n circuit o valoare mai mare n
hexayecimal dect cea existent nainte. Deci nainte de scrierea unei noi valori,
Interfee i protocoale de comunicaie 94
pentru a putea fi siguri c se nscrie valoarea dorit, locaia respectiv trebuie n
prealabil tears.
La recepionarea comenzii de scriere, dup citirea octetului de comand,
circuitul ateapt introducerea unui cuvnt de 16 bii care cuprinde valoarea
care se dorete a fi scris n locaia respectiv, cuvnt care se introduce
secvenial, ncepndu-se cu bitul cel mai semnificativ i terminndu-se cu bitul
cel mai puin semnificativ.
La recepionarea comenzii de citire a unei locaii, dup octetul respectiv
circuitul pune pe linia D0, disponibil pentru urmtoarele tacte, cuvntul ce se
afl n locaia specificat ncepnd cu bitul cel mai semnificativ.
Pentru ultimele 4 comenzi, cale care ncep cu 00, circuitul ateapt introducerea
tuturor celor 8 bii din comand dar ultimi 4 bii nu i ia n considerare. Pentru
comanda 0001 (Scrie tot circuitul la fel) circuitul ateapt introducerea
urmtorilor 16 bii care reprezint valoarea ce se dorete a fi scris, dup care se
nscrie valoarea respectiv n toate cele 64 de locaii. Comanda 0010
realizeaz nscrierea n toate locaiile memoriei a valorii FFFF. Ultimele dou
comenzi 0000 i 0011 realizeaz blocarea / deblocarea circuitului de
memorie n cea ce privete operaiile de scriere.
9.7 Probleme propuse
Problema 1: Se consider un circuit de memorie de tip 93C46 conectat pe o
magistral ISA. S se scrie un program care permite scrierea i citirea tuturor
celor 64 de locaii de memorie din acest circuit.
Pinii circuitului EEPROM 93C46 sunt legai la magistrala de date conform
urmtorului tabel:
Pin EEPROM Linia de date a magistralei
Pin 1: CS (cip select) D1 (linia de date 1)
Pin 2: CLK (clock) D2 (linia de date 2)
Pin 3: DI (data input) D0 (linia de date 0)
Pin 4: D0 (data output) D4 (linia de date 4)
Pe tot parcursul scrierii i citirii linia de date D3 trebuie inut pe 0.
Magistrale 95
O procedur de scriere n circuitul de memorie ar arta sub forma:
#define ADRSEGM 0xD000

void scriere(unsigend char aValue)
{
unsigend int adrSegm = ADRSEGM;
aValue &= 0xf7; //form D3 pe 0 tot
//timpul
adrSegm |= 0x0080; // A11 pe 1
pokeb(adrSegm, 0, aValue); //se memoreaz datele
//de intrare n buffer
adrSegm = ADRSEGM; //A11 pe 0
pokeb(adrSegm, 0, aValue); // datele din buffer
// sunt disponibile la
//ieire
}

O procedur de citire din circuitul de memorie ar avea urmtoarea form:
unsigned char citire(void)
{
int value;
unsigend int adrSegm = ADRSEGM;
adrSegm |= 0x0080; // A11 pe 1
value = peek(adrSegm, 0); // memorm datele
//de ieire n buffer
value &= 0x10; //pstrm doar D0
return (value);
}
Interfee i protocoale de comunicaie 96
Anexa 1
//deseneaz un dreptunghi in modul grafic 12h si 13h
//folosind ntreruperea int 10h
//la apsarea tastelor + sau - se modifica culoarea
//la apsarea tastei d se modifica modul de scriere al
//unui pixel prin accesul direct la memoria video
//la apsarea tastei i se modifica modul de scriere al
//unui pixel folosind int 10h
//la apsarea tastei c se afieaz pe ecran toate
//culorile modului curent
//la apsarea tastei 2 se modifica in modul grafic 12h
//la apsarea tastei 3 se specifica modul grafic 13h
//la apsarea tastei ESC se termin aplicaia

#include <dos.h>
#include <conio.h>
#define ESC 27
short mod_acces = 0;

//seteaza un mod video specificat
void SetVideoMode(unsigned short aVideoMode)
{
union REGS r;
r.h.ah = 0x00;
r.h.al = aVideoMode;
int86(0x10,&r,&r);
}
//citeste modul video curent folosind int 10h
unsigned short GetVideoMode(void)
{
union REGS r;
r.h.ah = 0x0F;
int86(0x10,&r,&r);
return r.h.al;
}
//afiseaza un pixel pe ecran folosind int 10h sau scrierea
//direct in memorie in functie de variabila mod_acces
void PutPixel(int aRand,int aColoana, short aCuloare)
{
union REGS r;
if (mod_acces == 0)
{
if (GetVideoMode() == 0x12)
pokeb(0xA000,640*aRand+aColoana,aCuloare);
else
Anexa 1 97
pokeb(0xA000,320*aRand+aColoana,aCuloare);
}else
{
r.h.ah = 0x0c;
r.h.bh = 0;
r.x.dx = aRand;
r.x.cx = aColoana;
r.h.al = aCuloare;
int86(0x10,&r,&r);
}
}
//deseneaza un dreptunghi pe ecran la coordonatele
//(aX_i,aY_i)-(aY_f,aY_f)
void dreptunghi(int aX_i, int aX_f, int aY_i, int aY_f,
short aCuloare)
{
for(int i = aX_i; i <= aX_f; i++)
for(int j = aY_i; j <= aY_f; j++)
PutPixel(i, j, aCuloare);
}

void main(void)
{
short mode = GetVideoMode();
SetVideoMode(0x12);
short color = 1, gata = 0;
do{
if(gata == 0)
{
if(GetVideoMode() == 0x12)
dreptunghi(0,199,0,319,color);
else
dreptunghi(0,199,0,319,color);
}
gata = 1;
switch(getch())
{
case ESC:gata = 2; break;
case '+':
{
color++;
color %= 16;
gata = 0;
}; break;
case '-':
{
color = (color == 0) ? 16 : color-1;
gata = 0;
Interfee i protocoale de comunicaie 98
}; break;
case 'c':
{
int y_start=0,y_stop=0;
if(GetVideoMode() == 0x12)//are 12
//culori,640*480
for(int g = 0; g < 16; g++)
{
y_start = y_stop;
y_stop = y_start + 480 / 16;
dreptunghi(y_start,y_stop,0,639,g);
}
else
{//pentru modul 13h care are 256
//culori,320*200
for(int g = 0; g < 200; g++)
{
y_start = y_stop;
y_stop = y_start + 1;
dreptunghi(y_start,y_stop,0,319,g);
}
}
}; break;
case 'd': mod_acces = 0; gata = 0; break;
case 'i': mod_acces = 1; gata = 0; break;
case '2': SetVideoMode(0x12); gata = 0; break;
case '3': SetVideoMode(0x13); gata = 0; break;
}
}while (gata != 2);
SetVideoMode(mode);
}

Anexa 2 99
Anexa 2
// program de test al rutinei de tratare a erorii
// critice INT 24h
#pragma inline
#include <dos.h>
#include <stdio.h>

void interrupt(*old_24)(...);
unsigned int old_24_seg;
unsigned int old_24_off;
unsigned semafor = 0;

void interrupt new_24(...)
{
Semafor = 1;

asm {
mov [semafor],1
pop ax;
pop ax;
pop ax;
mov bp, sp;
mov ax, [bp+18];
mov word ptr cs:[Intoarce], ax;
mov ax, [bp+20];
mov word ptr cs:[Intoarce+2], ax;
pop ax;
pop bx;
pop cx;
pop si;
pop di;
pop bp;
pop ds;
pop es;
pop ax;
pop ax;
popf;
STC;
mov al,3;
jmp dword ptr cs:[Intoarce];
Intoarce dw 0,0
}
}


Interfee i protocoale de comunicaie 100
void main(void)
{
union REGS r;
unsigned g = 0;
char dir[6] = {'b',':','\\','a','s',0};
old_24 = getvect(0x24); //citesc vechiul handler
old_24_off = FP_OFF(old_24);
old_24_seg = FP_SEG(old_24);
printf("\nInstalare handler nou int 24");
setvect(0x24,new_24); //setez noul handler
do
{
asm{
mov ah, 39h;
lea dx, dir
int 21h
}
if (semafor == 1)
{
printf("\nEroare disk int 21 -ESC pentru
parasire");
r.h.ah = 0;
int86(0x18,&r,&r);
if (r.h.ah == 1)
g = 1;
}
}while (g == 0);
setvect(0x24, old_24); //restaurez vechiul handler
}

Anexa 3 101
Anexa 3
// program de indirectare ntrerupere 0Ch pentru
// emisie i recepie caractere pe portul serial
#include <stdio.h>
#include <conio.h>
#include <dos.h>

unsigned int re = 0,em = 0,er = 0,modem = 0;
char q1 = 0,w1 = 0;
void interrupt(*old_0c)(...);

void interrupt newInt_0c(...)
{
q1=inportb(0x3fa); //registrul cauza a ntreruperii
q1=q1 & 0x07;
switch (q1)
{
case 0x00:{//eroare
w1=inportb(0x3fd);
er++;
};break;
case 0x02:{//emisie
outportb(0x3f8,'A');
em++;
};break;
case 0x04:{//receptie
w1=inportb(0x3f8);
re++;
};break;
case 0x06:{//schimbarea stare modem
w1=inportb(0x3fe);
modem++;
outportb(0x3f8,'b');
};break;
}
outport(0x20,0x20);
}
void main(void)
{
char a;
clrscr();
old_0c=getvect(0x0c);

outportb(0x3fb,0x80); //DLAB=1-programam rata de
//transmisie
Interfee i protocoale de comunicaie 102
outportb(0x3f8,0x10); //110 baud
outportb(0x3f9,0x04);

outportb(0x3fb,0x07); //DLAB=0, 8biti de date,2 de
//stop, fara paritate

printf("Activam DTR,RTS\n");
outportb(0x3fc,0x0b); //activam DTR,RTS si OUT2

printf("Setam intreruperea\n");
setvect(0x0c,newInt_0c);

printf("Activam intreruperea\n");
//activare intrerupere emisie /receptie

outportb(0x3f9,0x03); //interupere la receptie date si
//bufer emisie gol

printf("Activam 8259\n");
a = inportb(0x21);
a = a & 0xef;
outportb(0x21,a); //activare IRQ4 in 8259a

union REGS r;
char c2;
printf( "Bucla\n");
do
{
if (kbhit())
{
a = getch();
outportb(0x3f8,a);
}
delay(20);
gotoxy(1,7);
printf("Am receptionat %c\n",w1);
printf("Receptie = %d Emisie=%d \n",re,em);
printf("eroare = %d modem=%d \n",er,modem);
} while (a != 0x0d);
a = inportb(0x21);
a = a | 0x10;
outportb(0x21,a); //dezactivare IRQ4 in 8259a

setvect(0x0c,old_0c);
}

Bibliografie selectiv 103
Bibliografie selectiv
[1] Hennessy, Patterson, Computer Architecture. A Quantitative Approach,
Morgan Kaufmann Series, Ediia a 3-a, 2003
[2] Hans Peter Messmer, The Indispensable PC Hardware Book, Ediia a 3-a,
Addison-Weslez Publisher, 1994
[3] Scott Mueller, PC Depanare i Modernizare, ediia a 2-a, Editura Teora
Bucureti, 1997
[4] Z.F. Baruch, Sisteme de Intrare Ieire ale calculatoarelor, Editura Albastr
Cluj Napoca, 2000
[5] Interfacing The Standard Parallel Port,
www.beyondlogic.org/spp/parallel.htm
[6] Interfacing the Serial Port, www.beyondlogic.org/serial/serial.htm
[7] Intel Corporation, AGP Interface Specification,
http://members.datafast.net.au/dft0802/specs/agp30.pdf
[8] Intel, Compaq, HP,... Universal Serial Bus Specification, 2000,
www.intel.com/technology/usb/spec.htm
[9] Leo F. Dozle, Computer Peripherals, Ediia a 2-a, Prentice Hall, 1999
[10] William Buchamen, PC Interfacing, Communications and Windows
Programming, Addison-Wesley Longman, Prima ediie, 1999
[11] A.S. Tanenbaum, Operating Systems Design and Implementation,
Prentice Hall Software Series, Ediia a 3-a, 2006

You might also like