14
8. Standard Grafikadapter & SVGA 8.1 Adapter-Stammbaum Monochrome Display Adapter (MDA): MDA CGA EGA Hercules SVGA TIGA Windows- Beschleunigerkarten VGA Ansteuerung digital Ansteuerung analog Monochrom - schwarz/weiss, nur Text, keine Pixelgrafik, - 25 Zeilen mit 80 Zeichen, Color Graphics Adapter (CGA): - 640 * 200 Punkte, - 8 * 8 Zeichenmatrix, - Text mit 16 Farben, - Grafik mit 4 Farben. Hercules S/W mit 720 * 350 Pixeln. Enhanced Graphics Adapter (EGA): - 16 aus 64 Farben sind wählbar, - Maskierung der Farbebenen, - bis 8 * 14 Zeichenmatrix, - BIOS auf Adapterkarte, - 640 * 350 Pixel. 1 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

Monochrome Display Adapter (MDA): Monochrom · 8.1 Adapter-Stammbaum • Monochrome Display Adapter (MDA): MDA CGA EGA Hercules SVGA Windows- TIGA Beschleunigerkarten VGA ... •

  • Upload
    dokhanh

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

8. Standard Grafikadapter & SVGA

8.1 Adapter-Stammbaum

• Monochrome Display Adapter (MDA): MDA

CGA

EGA

Hercules

SVGA

TIGAWindows- Beschleunigerkarten

VGA

Ansteuerung digital

Ansteuerung analog

Monochrom- schwarz/weiss, nur Text, keine Pixelgrafik, - 25 Zeilen mit 80 Zeichen,

• Color Graphics Adapter (CGA): - 640 * 200 Punkte, - 8 * 8 Zeichenmatrix, - Text mit 16 Farben, - Grafik mit 4 Farben.

• Hercules S/W mit 720 * 350 Pixeln. • Enhanced Graphics Adapter (EGA):

- 16 aus 64 Farben sind wählbar, - Maskierung der Farbebenen, - bis 8 * 14 Zeichenmatrix, - BIOS auf Adapterkarte, - 640 * 350 Pixel.

1 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

• Video Graphics Array (VGA): - 320 * 200 Pixel mit 256 Farben aus 2**18, - 640 * 480 Pixel mit 16 Farben aus 2**18, - maximal 64 KByte pro Farb-Ebene.

• Super VGA (SVGA/XGA): - Höhere Auflösung, linearer Bildschirmspeicher möglich, Bank-Select Register, - Kompatibilität auf Grund standardisierter BIOS-Aufrufe.

• Beschleunigerkarten mit umfangreichen HW-Funktionen für 3D-Grafik: - nach Vorgabe durch DirectDraw & Direct3D, - OpenGL als Alternative zu MS-Direct3D, - eventuell Koordinaten transformieren, - BitBlockTransfer, Glyphen zeichnen, - Polygone zeichnen und schattieren, - Dreiecke zeichnen & bewegen, - texturieren ...

• ATI Radeon Karten für Plurix: - Keine Registerdokumentation für neue Modelle, - Unterstützung für Modelle 7000 bis 9250, - Mobile Radeon in Arbeit.

2 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.2 Konfigurierung und Ansteuerung

8.2.1 Direkte Konfigurierung über VGA-Register im E/A-Raum: • Mühselig und für höhere Funktionen herstellerabhängig:

- Grosse Anzahl von Geräteregistern und Bitfeldern, - Zeitkritische Umschaltvorgänge.

• Taktung der Bildpunkte und Erzeugen der Bildfrequenz: - Pixeltakt mithilfe einer PLL erzeugen (verschiedene Frequenzteiler), - Anzahl Pixel pro Zeile bestimmen, Strahlrücklauf pro Zeile,

- Anzahl Zeilen pro Bild, vertikaler Strahlrücklauf.

• Speicherung der Bildpunkte für VGA Adapter: - 128 KB Pixelspeicher in den Realspeicher eingeblendet, - Bei SVGA nur ein Ausschnitt eingeblendet, - Direkter Pixelzugriff möglich, - Video-Fenster bei $a0000, - maximal 480*640.

• Interpretation der Bytes im Grafikspeicher: - Als attributierte Buchstaben (Vordergrund- & Hintergrundfarbe, Blinken), - Als separate Farbebenen mit selektivem Ebenenzugriff, - Als 4-Bit oder 8-Bit Pixel.

3 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.2.2 Softwareunterstützung für die Grafikausgabe:

• Uneinheitliche Registerschnittstelle, Zugriff soweit möglich über BIOS: - BIOS auf Hauptplatine oder/und im Adapter-ROM, - BIOS hauptsächlich für die Initialisierung: - BIOS eigentlich nur für Real-Mode.

• Erzeugen des Bildes: - entweder die Bildpunkte direkt in den Grafikspeicher schreiben, - oder Grafikbibliotheken mit 3D-Funktionen verwenden.

• Über DOS: - ohne echte Grafik, nur Spezialbuchstaben, mager.

• Linux Treiber: - XFree 386, OpenGL, Direct Rendering Interface, - Dokumentation der Hardware unvollständig.

• Microsoft DirectDraw und Direct3D: - SW-Emulation nicht implementierter Funktionen, - Beschleuniger-Schnittstelle z.B. für Spiele, - echte 3D Modellierungen.

4 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.2.3 Zugriff über BIOS

• Standardisierte Initialisierung von: - Farbmodell (Masked, Indexed, True-Color), - Speichermodell (Linearer Framebuffer), - Auflösung & Bildfrequenz einstellen.

• Aufruf des BIOS: - über INT $10, Funktion in AH, - Unterfunktion AL, evtl. Teilfunktion in DL.

• Motherboard BIOS für MDA & CGA. • BIOS Routinen im ROM der EGA/VGA Adapterkarte:

- installiert in INT $10, Motherboard BIOS über INT $42.

• BIOS Ergänzung für SVGA Adapter (VESA): - ergänzend zum EGA/VGA BIOS, ebenfalls aus Adapter ROM, - INT $10, Funktion $4f, ...

• BIOS Datenbereich zur Ablage & Sicherung des Bildformates: - ab $40:$10 bei MDA, CGA Adapter, - Zusätzlich ab $40:84 für EGA, VGA.

5 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.3 Videospeicherorganisation

8.3.1 Map-Mask Register

640 K

CPU-RAM

Map-Mask Register

Pixel

Video-RAM

DAC

- Interessant aber veraltet. - schont den Real-Mode Adressraum, - spartSpeicherzugriffe im Real-Mode. - Videomodi[13,14,15,17] können

gleichzeitig in mehrere Ebenen schreiben.

- 16 Farbwerte mit 4 Ebenen. - =< 128 KByte pro Farbebene.

8.3.2 High-Color & True-Color 15 bis 32 Bit

RGB Pixel

Analog

Video-Out

DAC

DAC

- 15/16 Bit/Pixel (High-Color). - 24/32 Bit/Pixel (True-Color). - Z-Puffer, Alpha Puffer etc..

6 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.3.3 Palettenregister

• Ab VGA analoges Signal aus den DAC (Dig.-Analog Convertert) zum Bildschirm.

• Farbwert im Grafikspeicher abgespeichert. • Pro Pixel 4 Farbbits. • 16 Palettenregister à 6 Bits.

4 Bit

Analog

Video- Out

DACDACDAC

CLUT - Color Lookup Table

16 Paletten- register

Color Page Register

• 4*64 Farbtabelleneinträge. • Tabellenseite umschalten.

7 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.3.4 Indexed Color

• Nur die wichtigsten Farben werden in die Farbtabelle aufgenommen. - 15 Bit Farbtabelleneintrag: 5R, 5G, 5B, - 16 Bit Farbtabelleneintrag: 5R, 6G, 5B, - 24 Bit Farbtabelleneintrag: 8R, 8G, 8B.

• Die Farbtabelle kann jeweils für ein gegebenes Bild optimiert werden. • Ein Pixel beschreibt maxi-

mal 256 Farbwerte.

8 Bit Pixel

Analog Video- Out

DAC DAC DAC

CLUT – Color Lookup Table

• Jeweils auf die Farbtabelle für das Vordergrundfenster umschalten.

8 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.4 VESA Standard für SVGA BIOS Aufrufe

• VESA = Video Electronic Standards Association: 3Dlabs, Apple, ATI, Evans & Sutherland, Fujitsu, Genesis, Hewlett-Packard, Hitachi Ltd., IBM, Intel, Matrox, Microsoft, NVidia, Qualcomm, Samsung, Sony, Sun, Texas Instruments, Trident,ViewSonic, WayTech, XFree 86 Project

• Linearer Framebuffer bei VESA 3.0 möglich. • Erweiterter Registersatz gegenüber VGA. • Pixel-Speicher für Super VGA:

- 2 Speicherseiten: a0000-bffff, e4000-effff.

In

dexi

erte

Ger

äter

egis

ter

PC-B

us

DatenIndex

• I/O Adressen für (Super) VGA (hex): - 3b4-3b5 (monchrom), 3ba (status), - 3d0-3d7, 3da-3dc (Color), - 3c0-3cf (EGA/VGA).

• Zugriff auf weitere Geräte-Register nach Indexierung an Port $3d4: - Indexregister: $3d4 - Datenregister: $3d5

9 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.4.1 Z.B. Videospeicher einblenden

• Im Protected Mode können auch große Video-Speicherbereiche ganz in den Adressraum gelegt werden („Linear Framebuffer“).

• Problem: Im Real-Mode kann nur ein Teil des Video-Speichers in den CPU-Adressraum eingeblendet werden.

• Bank-Select Register bildet den CPU-Adressbereich $a0000-$affff in das Video-RAM ab.

640 K Bank-Select

Video-RAM

CPU-RAM

Granula- rität

Display• Die Plazierung kann nur auf mindestens 1 KByte Grenzen geschehen: - vorzugsweise über SVGA-BIOS, - oder über Bank-Select Register.

• Leider haben dieGrafik-Adapter normalerweise kein Protected Mode BIOS.

10 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.4.2 SVGA BIOS Aufrufskonvention • Parameter in CPU Registern beim SVGA-Aufruf („Registerschnittstelle“):

- :Immer INT $10, Funktion $4f in AH, Subfunktion in AL .

• SVGA-Info ermitteln: - AL =$00, Rückgabe eines Info-Records (s. Programm).

• SVGA-Modus ermitteln: - AL =$01, Rückgabe eines Info-Records (s. M. Tischer).

• SVGA-Modus einstellen: - AL =$02, gewünschter Modus in BX.

• SVGA-Modus ermitteln: - AL =$03, Rückgabe des Modus in BX.

• SVGA-Status sichern/wiederherstellen: - AL =$04, (siehe M. Tischer).

• CPU-Fenster auf Video-Speicher abbilden: - AL =$05, stückweise Fensteradresse in DX (s. Progr.).

• SVGA-Abtastzeile einstellen: - AL =$06, SVGA-Anzeigebeginn in Video-RAM setzen.

11 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.4.3 VESA Videomodi

• SVGA-Modi $100 oder größer, zusätzlich zu MDA, CGA, EGA Modi. • Verbreitet sind VESA 1.0 und VESA 2.0 nicht jedoch VESA 3.0.

Video-Modus Grafik Auflösung Farben$100 ja 640*400 256$101 ja 640*480 256$102 ja 800*600 16$103 ja 800*600 256$104 ja 1024*768 16

VESA $105 ja 1024*768 256$106 ja 1280*1024 16$107 ja 1280*1024 256$108 Text 60*80$109 Text 25*132$10a Text 43*132$10b Text 50*132$10c Text 60*132$03 Text 25*80 16

MDA, CGA, VGA $18 ja 640*480 16 $19 ja 320*200 256

12 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

8.4.4 Programmbeispiel SVGADemo.PAS • VESA Informationsrecord vereinbaren, holen und prüfen. • Grafikspeicherbänke in Hauptspeicher einblenden & mit Pixeln füllen.

program SVGADemo; (* Super VGA Demo *) uses dos; type InfoPtr = ^ InfoBuf; IntPtr = ^ IntWurm; CharPtr = ^ CharWurm; IntWurm = array[ 0..127 ] of integer; CharWurm = array[ 0..255 ] of char; InfoBuf = record signatur : array[ 0..3 ] of char; (* "VESA" *) version : integer; (* 1, 2, 3 ...*) manufact: CharPtr; (* Name des Herstellers *) implFunc: integer; suppMods: IntPtr; (* einstellbare Grafikmodi *) reserved: CharWurm; end; var infAdr : InfoPtr; adrval : longint; reg : registers;

13 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

14 Systemprogrammierung I, Sommer 2005, © VS Informatik, Ulm, P. Schulthess

procedure RamWindow( bank, farb: integer ); var offset: longint; begin with reg do begin (* set Video-Bank: *) dx := bank; ah := $4f; al := $05; bx := $0000 (* page 0 *); Intr( $10, reg ); if ( ah=0 ) and ( al=$4f ) then (* ok *) else writeln( 'SVGA Error in Subfunction 5' ); end; (* with *); for offset:=0 to 60000 do (* set pixel *) mem[ $a000 : offset ] := farb; end; begin new(infAdr); adrVal:=longint(infAdr); with reg do begin (* Now obtain and verify SVGA-Info: *) ah := $4f; al := $00; es := adrVal shr 16; di := adrVal and $ffff; (* Infobuffer, segment and offset *) Intr( $10, reg ); if (ah=0) and (al=$4f) then (* ok *) else writeln('No SVGA-Bios'); (* and now set some SVGA-Videomode : *) ah := $4f; al := $02; bx := $101; (*Videomodes ..$101..105.. etc. *) Intr( $10, reg ); if ( ah=0) and ( al=$4f ) then (* ok *) else writeln( 'SVGA Error in Subfunction 2' ); end; RamWindow( 0, 40 ); RamWindow( 1, 50 ); RamWindow( 2, 60 ); RamWindow( 3, 70 ); RamWindow( 4, 80 ); RamWindow( 5, 90 ); readln; end.