Lucrarea nr. 4
Introducere
Schema generală a unei interfețe video
Programarea controller-ului CRT
Partea de circuistică a standardului VGA (Video Graphics Array) conține un buffer video, un convertor numeric - analogic (DAC) și un modul de test. Cei 256Ko de memorie video (minimul) sunt mapați în patru plane de câte 64Ko (pagina 0 până la 3). Convertorul numeric - analogic stabilește ieșirea analogică pentru monitor (prin connectorul plăcii video). Modulul de test este folosit pentru detectarea tipului de monitor folosi (Monocrom sau Color).
Placa video VGA suportă toate modurile video: Monochrome Display Adapter (MDA), Color/Graphics Adapter (CGA), Enhanced Graphics Adapter (EGA). Când monitorul este monocrom, culorile vor apărea ca nuanțe de gri.
Modurile video disponibile la VGA:
Toate plăcile video utilizate în calculatoarele compatibile IBM cuprind un bloc de citire și decodificare a datelor din memoria video. De exemplu generatorul de caractere alfanumerice translatează codurile ASCII din memoria video într-un model de puncte care construiește caracterul pe ecran. Decodificatorul de atribute convertește alte date din memoria video în semnale care produc culorile, sublinierea, și altele. Toate aceste componente specializate sunt programabile.
Controller-ul CRT
Controller-ul CRT generează semnalele de sincronizare pe orizontală și pe verticală. În plus incrementează numărătorul pentru adresarea memoriei video cu o rată dată de semnalele de sincronizare. Circuitele de afișare citesc datele din memoria video folosind adresa generată de CRT, decodifică informația din respectiva locație și trimite semnalele de culoare și intensitate monitorului împreună cu semnalele de sincronizare.
Controller-ul CRT mai îndeplinește și alte câteva funcții. Dintre acestea amintim: determinarea dimensiunii și a poziției cursorului, selectarea porțiunii din memoria video care va fi afișată, localizarea porțiunilor subliniate și detectarea semnalelor generate de un creion optic.
În plăcile video MDA, CGA și Hercules, controller-ul CRT este un singur circuit (chip) Motorola 6845. La plăcile video EGA, controller-ul CRT este un circuit LSI dedicat, proiectat de IBM. La MCGA, CRTC este o parte din Memory Controller Gate Array. CRTC-ul plăcii VGA este parte componentă dintr-un singur circuit Video Graphics Array. Indiferent de implementarea hardware, CRTC poate fi programat să genereze o gamă de parametrii de sincronizare în toate aceste subsisteme. Înainte de a intra în detaliile de programare ale controller-ului CRT, este interesant să trecem în revistă modul în care semnalele de sincronizare generate de CRT controlează afișarea imaginii pe monitor.
Ciclul de reîmprospătare a afișării
Imaginea video este reîmprospătată de 50-80 ori pe secundă, în funcție de configurația plăcii video. În timpul fiecărui ciclu de reîmprospătare, spotul de electroni balează ecranul de la stânga la dreapta și de sus în jos, începând cu prima linie din rastru. După parcurgera unei linii de la stânga la dreapta, spotul este poziționat în la începutul liniei următoare până la parcurgerea tuturor liniilor. După aceasta spotul se reîntoarce în colțul stânga sus al ecranului și reîncepe baleerea liniilor.
Sincronizarea pe orizontalăPe măsură ce spotul de electroni baleează ecranul . La începutul parcurgerii fiecărei linii spotul de electroni este activat de semnalul Display Enable generat de CRTC. Pe măsură ce spotul balează linia curentă, circuitele de afișare folosesc numărătorul de adrese pentru citirea secvenței de biți din memoria video. Datele sunt decodificate și folosite la generarea semnalelor de culoare și intensitate pentru controlul monitorului. Pe măsură ce spotul de electroni parcurge linia, culoarea și intensitatea lui variază corespunzător acestor semnale.
Aproape de marginea din dreapta a ecranului, CRTC dezactivează semnalul Display Enable și nu mai afișează nimic. CRTC generează semnalul de sincronizare pe orizontală, care comandă monitorului să mute spotul la începutul liniei următoare și se reia baleerea liniei.
Scurta perioadă de timp dintre sfârșitul afișării unei linii de date și începutul liniei următoare se numește timp de întoarcere pe orizontală. Deoarece timpul de întoarcere pe orizontală (timpul necesar deflecției pe orizontală) este mai mic decât intervalul ( ) pe orizontală, există o zonă (overscan) la marginile fiecărei linii (fig).
În timpul perioadei de overscan, spotul poate fi lasat activat, afișând o imagine, o margine, o culoare. Motivul principal pentru care a fost lăsată această porțiune de overscan este pentru a asigura o margine de eroare pentru centrarea rastrului, astfel încât să nu se piardă informația de la marginea ecranului.
Sincronizarea pe verticală
După ce spotul a baleat toate liniile din rastru, semnalul Display Enable este dezactivat. CRTC generează un semnal de sincronizare pe verticală, care-i specifică monitorului să mute spotul din partea de jos a ecranului în colțul stânga sus. Intervalul de timp de mutare pe verticală este mai mic decât intervalul (blanking) pe verticală, astfel că și aici apare un (overscan) la marginile de sus și jos al rastrului.
3. Programarea controller-ului CRTInterfața programabilă a controller-ului CRT este bine definită și ușor de folosit.
EGA
Controller-ul CRT folosit în Enhanced Graphics Adapter este un circuit LSI dedicat care conține un set de registre diferit de cel al controller-ului 6845. Interfața programabilă este similară cu cea a circuitului 6845, dar conținutul și formatul registrelor diferă de cele ale lui 6845.
CRTC EGA suportă un set de funcții mai mare decât cel oferit de 6845. Astfel CRTC poate genera o întrerupere hardware la începutul intervalului (blanking) pe verticală; poate afișa două porțiuni discontinue din memoria video.
Registru |
Nume |
Acces |
00H |
Horizontal Total |
Write only |
01H |
Horizontal Display Enable End |
Write only |
02H |
Start Horizontal Blanking |
Write only |
03H |
End Horizontal Blanking |
Write only |
04H |
Start Horizontal Retrace |
Write only |
05H |
End Horizontal Retrace |
Write only |
06H |
Vertical Total |
Write only |
07H |
Overflow |
Write only |
08H |
Preset Row Scan |
Write only |
09H |
Maximum Scan Line Address |
Write only |
0AH |
Cursor Start |
Write only |
0BH |
Cursor End |
Write only |
0CH |
Start Address High |
Read/Write |
0DH |
Start Address Low |
Read/Write |
0EH |
Cursor Location High |
Read/Write |
0FH |
Cursor Location Low |
Read/Write |
10H |
Vertical Retrace Start |
Write only |
10H |
Light Pen High |
Read only |
11H |
Vertical Retrace End |
Write only |
11H |
Light Pen Low |
Read only |
12H |
Vertical Display Enable End |
Write only |
13H |
Offset (Logical Line Width) |
Write only |
14H |
Underline Location |
Write only |
15H |
Start Vertical Blanking |
Write only |
16H |
End Vertical Blanking |
Write only |
17H |
Mode Control |
Write only |
18H |
Line Compare |
Write only |
Tabelul
O caracteristică curioasă a controller-ului CRT EGA este registrul de depășire (Overflow register - 07H). Deoarece o placă video EGA poate afișa un rastru cu mai mult de 256 de linii, registrul care conține numărul de linii de scanare trebuie să aibă 9 biți în loc de 8. Astfel bitul cel mai semnificativ al numărului de linii este conținut în registrul de depășire.
Adresa de port a registrului de adrese al controller-ului este 3B4H iar portul pentru date este 3B5H. La plăcile video EGA și VGA se pot trimite controller-ului atât adresa registrului care se accesează cât și data care este înscrisă în respectivul registru:
mov dx,3B4H ; registrul de adresare mov ax,080CH ; AL - numărul registrului, AH - data out dx,ax
VGA
Din punct de vedere funcțional registrele controller-ului VGA sunt un superset al setului de registre al controller-ului EGA. Registrele controller-ului VGA sunt adresabile prin aceleași adrese de port ca și la EGA. În plus față de EGA au mai fost adăugat un număr de biți pentru a acoperi necesitatea de adresare a 400 de linii câte suportă o placă VGA. Însă, spre deosebire de EGA, controller-ul VGA nu suportă folosirea creionului optic.
Cel mai important lucru este că registrele standardului EGA sunt menținute, cu aceleași adrese și la VGA. Astfel că programele scrise pentru EGA pot rula și pe o placă VGA.
Spre deosebire de registrele controller-ului EGA, cele ale controller-ului VGA sunt atât pentru citire cât și pentru scriere. În plus registrele de sincronizare pe orizontală și pe verticală (registrele CRTC de la 00H până la 07H) pot fi protejate la scriere prin setarea pe 1 a bitului 7 din registrul 11H.
Pentru a folosi efectiv controller-ul CRT trebuie cunoscute câteva informații cu privire la specificațiile de timp proprii controller-ului. Aceste informații au la bază următoarele trei constrângeri: lățimea de bandă a semnalului video trimis monitorului și rata de sincronizare pe orizontală și verticală.
Plăcile video pentru calculatoarele IBM PC afișează pixelii la o rată stabilită de hardware. Această rată este cunoscută sub numele de lățime de bandă video, rata de punct sau rata de pixel; iar oscilatorul care generează această rată se numește ceas de punct (dot clock). Plăcile video MDA, CGA și Hercules folosesc un singur ceas de punct; însă la plăcile EGA și VGA există mai mult de o frevență de pixel (Tabelul).
Placa video |
Video Bandwidth (MHz) |
Horizontal Scan (KHz) |
Vertical Scan (Hz) |
EGA |
|||
640x350 color |
16.257 |
21.85 |
60 |
640x200 color |
14.318 |
15.75 |
60 |
720x350 mono |
16.257 |
18.43 |
50 |
VGA |
|||
640x400 mono/color |
25.175 |
31.50 |
70 |
720x400 mono/color |
28.322 |
31.50 |
70 |
640x480 mono/color |
25.175 |
31.50 |
60 |
640x350 mono/color |
25.175 |
31.50 |
70 |
Tabelul
Dându-se o frecvență de pixel, CRTC trebuie programat astfel încât frecvențele de scanare pe orizontală și pe verticală trimise monitorului să fie limitate la frecvențele pe care le suportă monitorul.
Sincronizarea pe orizontală
Sincronizarea pe verticală
Registrul de stare CRT
Toate plăcile video au un registru de stare CRT accesibil doar în citire. Acest registru se poate accesa prin portul de intrare/ieșire 3BAH la plăcile MDA și Hercules și prin portul 3DAH la CGA și MCGA; la plăcile EGA și VGA acest registru este văzut la portul 3BAH în configurațiile monocrome și la 3DAH în configurațiile color. În general doi dintre cei opt biți ai acestui registru reflectă starea curentă a semnalelor de sincronizare pe orizontală și verticală generate de CRTC. Acești biți de stare pot fi folosiți pentru sincronizarea citirilor de reîmprospătare din memoria video cu ciclul de refresh al ecranului, pentru minimizarea interferențelor cu imaginea afișată.
Din păcate semnificația biților de stare ai registrului de stare CRT diferă în funcție de tipul plăcii video (Tabelul). De aceea programele trebuie să determine ce tip de placă video este folosită în sistem înainte de a folosi informația de stare din registru.
Tabelul
Modurile video
În ciuda constrângerilor de timp impuse de frecvența de pixel și de frecvențele de scanare pe orizontală și pe verticală ale monitorului, toate plăcile video, cu excepția MDA, pot fi programate cu un număr de parametrii CRTC. Aceasta face posibilă existența a mai multor moduri video.
.2.1 Modurile grafice
.2.2 Modurile alfanumerice (text)
Să se implementeze o aplicație ce realizează: