03.03.2013 Aufrufe

MDA CGA EGA Hercules SVGA TIGA Windows ...

MDA CGA EGA Hercules SVGA TIGA Windows ...

MDA CGA EGA Hercules SVGA TIGA Windows ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

8. Standard Grafikadapter<br />

8.1 Adapter-Stammbaum<br />

• Monochrome Display Adapter (<strong>MDA</strong>):<br />

- nur Text, keine Pixelgrafik,<br />

- 25 Zeilen mit 80 Zeichen,<br />

- schwarz/weiss.<br />

• Color Graphics Adapter (<strong>CGA</strong>):<br />

- 640 * 200 Punkte,<br />

- 8 * 8 Zeichenmatrix,<br />

- Text mit 16 Farben,<br />

- Grafik mit 4 Farben.<br />

• <strong>Hercules</strong> Karte S/W mit 720 * 350 Pixeln.<br />

• Enhanced Graphics Adapter (<strong>EGA</strong>):<br />

- 16 aus 64 Farben sind wählbar,<br />

- Maskierung der Farbebenen,<br />

- bis 8 * 14 Zeichenmatrix,<br />

- BIOS auf Adapterkarte,<br />

- 640 * 350 Pixel.<br />

<strong>MDA</strong><br />

<strong>CGA</strong><br />

<strong>EGA</strong><br />

VGA<br />

<strong>SVGA</strong><br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 1<br />

Monochrom<br />

<strong>Hercules</strong><br />

<strong>Windows</strong>-<br />

Beschleunigerkarten<br />

Ansteuerung<br />

digital<br />

Ansteuerung<br />

analog<br />

<strong>TIGA</strong>


• Video Graphics Array (VGA):<br />

- 320 * 200 Pixel mit 256 Farben aus 2**18,<br />

- 640 * 480 Pixel mit 16 Farben aus 2**18,<br />

- maximal 64 KByte pro Farb-Ebene.<br />

• Super VGA (<strong>SVGA</strong>/XGA):<br />

- empfohlen als Kompatibilitäts-Basis,<br />

- Bank-Select Register,<br />

- Höhere Auflösung.<br />

• Texas Instruments Graphics Array (<strong>TIGA</strong>):<br />

- programmierbarer Graphikprozessor,<br />

- wenig Abwärtskompatibilität.<br />

• Beschleunigerkarten mit umfangreichen HW-Funktionen:<br />

- nach Vorgabe durch DirectDraw & Direct3D,<br />

- OpenGL als Alternative zu MS-Direct3D,<br />

- eventuell Koordinaten transformieren,<br />

- BitBlockTransfer, Glyphen zeichnen,<br />

- Polygone zeichnen und schattieren,<br />

- Dreiecke zeichnen & bewegen,<br />

- texturieren ...<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 2


8.2 Konfigurierung und Ansteuerung<br />

8.2.1 Direkte Konfigurierung über Geräteregister im E/A-Adressraum:<br />

• Grosse Anzahl von Geräteregistern.<br />

• Mühselig und herstellerabhängig.<br />

• Zeitkritische Umschaltvorgänge.<br />

• Taktung der Bildpunkte und Erzeugen der Bildfrequenz:<br />

- Pixeltakt mithilfe einer PLL erzeugen (verschiedene Frequenzteiler),<br />

- Anzahl Pixel pro Zeile bestimmen, Strahlrücklauf pro Zeile,<br />

- Anzahl Zeilen pro Bild, vertikaler Strahlrücklauf.<br />

• Speicherung der Bildpunkte für VGA Adapter:<br />

- maximal 128KiloBytes (zu klein für moderne Adapter),<br />

- Grafikspeicher ist in den Realspeicher eingeblendet,<br />

- Bei <strong>SVGA</strong> nur ein Ausschnitt eingeblendet,<br />

- Direkter Pixelzugriff möglich,<br />

- Video-Fenster bei $a0000.<br />

• Interpretation der Bytes im Grafikspeicher:<br />

- Als attributierte Buchstaben (Vordergrund- & Hintergrundfarbe, Blinken),<br />

- Als separate Farbebenen mit selektivem Ebenenzugriff,<br />

- Als 4-Bit oder 8-Bit Pixel.<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 3


8.2.2 Softwareunterstützung für die Grafikausgabe:<br />

• Entweder direkt in den Grafikspeicher schreiben, oder 3D-Funktionen verwenden.<br />

• BIOS hauptsächlich für die Initialisierung:<br />

- BIOS auf Hauptplatine oder/und im Adapter-ROM,<br />

- BIOS eigentlich nur für Real-Mode.<br />

• Über DOS:<br />

- ohne echte Grafik, nur Spezialbuchstaben, mager.<br />

• Linux Treiber:<br />

- XFree 386, OpenGL, Direct Rendering Interface,<br />

• Microsoft DirectDraw und Direct3D:<br />

- Beschleuniger-Schnittstelle z.B. für Spiele,<br />

- SW-Emulation nicht implementierter Fkt.,<br />

- Leistungspotential nicht ausgeschöpft<br />

- echte 3D Modellierungen.<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 4


8.2.3 Zugriff über BIOS<br />

• Standardisierte Initialisierung von:<br />

- Speichermodell (Linearer Framebuffer),<br />

- Farbmodell (Masked, Indexed, True-Color),<br />

- Auflösung und Bildfrequenz einstellen.<br />

• Aufruf des BIOS:<br />

- über INT $10, Funktion in AH,<br />

- Unterfunktion AL, evtl. Teilfunktion in DL.<br />

• Motherboard BIOS für <strong>MDA</strong> & <strong>CGA</strong>.<br />

• BIOS Routinen im ROM der <strong>EGA</strong>/VGA Adapterkarte:<br />

- installiert in INT $10, Motherboard BIOS über INT $42.<br />

• BIOS Ergänzung für <strong>SVGA</strong> Adapter (VESA):<br />

- aus Adapter ROM,<br />

- INT $10, Funktion $4f, ...<br />

- ergänzend zum <strong>EGA</strong>/VGA BIOS.<br />

• BIOS Datenbereich zur Ablage des Bildformates:<br />

- ab $40:$10 bei <strong>MDA</strong>, <strong>CGA</strong> Adapter,<br />

- Zusätzlich ab $40:84 für <strong>EGA</strong>, VGA.<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 5


8.3.1 Map-Mask Register<br />

• Für aktuelle Grafiksysteme irrelevant.<br />

• Schreiben gleichzeitig in mehreren<br />

Ebenen im Videomodus (13,14,15,17):<br />

• 16 Farbwerte mit 4 Ebenen.<br />

• maximal 128 KByte pro Farbebene.<br />

• spart Adressbereich im Real-Mode.<br />

8.3.2 High-Color und True-Color<br />

• 15/16 Bit pro Pixel (High-Color).<br />

• 24/32 Bit pro Pixel (True-Color).<br />

• Z-Puffer, Alpha Puffer etc..<br />

8.3 Videospeicherorganisation<br />

640 K<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 6<br />

CPU-RAM<br />

Map-Mask<br />

Register<br />

Video-RAM<br />

15 bis 32 Bit<br />

RGB Pixel<br />

DAC<br />

DAC<br />

DAC<br />

Pixel<br />

Analog<br />

Video-Out


8.3.3 Palettenregister<br />

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

• Farbwert im Grafikspeicher abgespeichert.<br />

• Pro Pixel 4 Farbbits.<br />

• 16 Palettenregister à 6 Bits.<br />

• 4 * 64 Farbtabelleneinträge.<br />

• Tabellenseite umschalten.<br />

4 Bit<br />

16 Paletten-<br />

register<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 7<br />

Color Page<br />

Register<br />

CLUT -<br />

Color<br />

Lookup<br />

Table<br />

Analog<br />

Video-Out<br />

DAC<br />

DAC<br />

DAC


8.3.4 Indexed Color<br />

• 256 Farbwerte pro Pixel.<br />

• Farbtabelleneinträge:<br />

- 15 Bit (5R, 5G, 5B),<br />

- 16 Bit (5R, 6G, 5B),<br />

- 24 Bit (8R, 8G, 8B).<br />

• Optimieren der Farbtabelle<br />

für ein gegebenes Bild.<br />

• Farbtabelle jeweils für das<br />

Vordergrundfenster.<br />

8 Bit Pixel<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 8<br />

CLUT –<br />

Color<br />

Lookup<br />

Table<br />

Analog<br />

Video- Out<br />

DAC<br />

DAC<br />

DAC


8.3.5 Videospeicher einblenden<br />

• Im Protected Mode werden auch große Video-<br />

Speicher ganz in den Adressraum gelegt.<br />

• Problem: Im Real-Mode kann nur ein Teil des<br />

Video-Speichers in den CPU-Adressraum<br />

eingeblendet werden.<br />

• Bank-Select Register bildet den CPU-Adressbereich<br />

$a0000-$affff in das Video-RAM ab.<br />

• Die Plazierung kann nur auf mindestens 1<br />

KByte Grenzen geschehen:<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 9<br />

CPU-RAM<br />

Video-RAM<br />

640 K Bank-Select<br />

Display<br />

Granula-<br />

rität


8.4 <strong>SVGA</strong> VESA Standard<br />

• VESA = Video Electronic Standards Association:<br />

3Dlabs, Apple, ATI, Evans & Sutherland, Fujitsu, Genesis, Hewlett-Packard,<br />

Hitachi Ltd., IBM, Intel, Matrox, Microsoft, NVidia, Qualcomm, Samsung,<br />

Sony, Sun, Texas Instruments, Trident,ViewSonic, WayTech, XFree 86 Project<br />

• Speicher für Super VGA:<br />

- Speicherseite[0]: 000a0000-000bffff<br />

- Speicherseite[1]: 000e4000-000effff<br />

• I/O Adressen für Super VGA (Laut PnP):<br />

- 03b4-03b5 03ba-03ba 03bf-03bf<br />

- 03c0-03cf 03d0-03d7 03da-03dc<br />

• Zugriff auf weitere Register nach Indexierung an Port $3d4:<br />

- Indexregister: $3d4<br />

- Datenregister: 3d5<br />

• Linearer Framebuffer bei VESA 3.0 möglich.<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 10


8.4.1 VESA Videomodi<br />

• <strong>SVGA</strong>-Modi $100 oder größer, zusätzlich zu den <strong>MDA</strong>, <strong>CGA</strong>, <strong>EGA</strong> Modi.<br />

• Verbreitet sind VESA 1.0 und VESA 2.0 nicht jedoch VESA 3.0.<br />

Video-Modus Grafik Auflösung Farben<br />

$100 ja 640*400 256<br />

$101 ja 640*480 256<br />

$102 ja 800*600 16<br />

$103 ja 800*600 256<br />

$104 ja 1024*768 16<br />

VESA $105 ja 1024*768 256<br />

$106 ja 1280*1024 16<br />

$107 ja 1280*1024 256<br />

$108 Text 60*80<br />

$109 Text 25*132<br />

$10a Text 43*132<br />

$10b Text 50*132<br />

$10c Text 60*132<br />

$03 Text 25*80 16<br />

<strong>MDA</strong>, <strong>CGA</strong>, VGA $18 ja 640*480 16<br />

$19 ja 320*200 256<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 11


8.4.2 VESA <strong>SVGA</strong>-BIOS Aufrufe:<br />

• Immer INT $10, Funktion $4f (in AH).<br />

• <strong>SVGA</strong>-Info ermitteln:<br />

- AL =$00, Rückgabe eines Info-Records (s. Programm).<br />

• <strong>SVGA</strong>-Modus ermitteln:<br />

- AL =$01, Rückgabe eines Info-Records (s. M. Tischer).<br />

• <strong>SVGA</strong>-Modus einstellen:<br />

- AL =$02, gewünschter Modus in BX.<br />

• <strong>SVGA</strong>-Modus ermitteln:<br />

- AL =$03, Rückgabe des Modus in BX.<br />

• <strong>SVGA</strong>-Status sichern/wiederherstellen:<br />

- AL =$04, (siehe M. Tischer).<br />

• CPU-Fenster auf Video-Speicher abbilden:<br />

- AL =$05, stückweise Fensteradresse in DX (s. Progr.).<br />

• <strong>SVGA</strong>-Abtastzeile einstellen:<br />

- AL =$06, <strong>SVGA</strong>-Anzeigebeginn in Video-RAM setzen.<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 12


8.4.3 Programmbeispiel <strong>SVGA</strong>Demo.PAS<br />

• VESA Informationsrecord vereinbaren, holen und prüfen.<br />

• Grafikspeicherbänke in Hauptspeicher einblenden & mit Pixeln füllen.<br />

program <strong>SVGA</strong>Demo; (* Super VGA Demo *) uses dos;<br />

type InfoPtr = ^ InfoBuf;<br />

IntPtr = ^ IntWurm;<br />

CharPtr = ^ CharWurm;<br />

IntWurm = array[ 0..127 ] of integer;<br />

CharWurm = array[ 0..255 ] of char;<br />

InfoBuf = record<br />

signatur : array[ 0..3 ] of char; (* "VESA" *)<br />

version : integer; (* 1, 2, 3 ...*)<br />

manufact: CharPtr; (* Name des Herstellers *)<br />

implFunc: integer;<br />

suppMods: IntPtr; (* einstellbare Grafikmodi *)<br />

reserved: CharWurm;<br />

end;<br />

var infAdr : InfoPtr; adrval : longint; reg : registers;<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 13


procedure RamWindow( bank, farb: integer ); var offset: longint;<br />

begin with reg do begin (* set Video-Bank: *) dx := bank;<br />

ah := $4f; al := $05; bx := $0000 (* page 0 *);<br />

Intr( $10, reg );<br />

if ( ah=0 ) and ( al=$4f ) then (* ok *) else writeln( '<strong>SVGA</strong> Error in Subfunction 5' );<br />

end; (* with *);<br />

for offset:=0 to 60000 do (* set pixel *) mem[ $a000 : offset ] := farb;<br />

end;<br />

begin new(infAdr); adrVal:=longint(infAdr);<br />

with reg do begin (* Now obtain and verify <strong>SVGA</strong>-Info: *)<br />

ah := $4f; al := $00;<br />

es := adrVal shr 16; di := adrVal and $ffff; (* Infobuffer, segment and offset *)<br />

Intr( $10, reg );<br />

if (ah=0) and (al=$4f) then (* ok *) else writeln('No <strong>SVGA</strong>-Bios');<br />

(* and now set some <strong>SVGA</strong>-Videomode : *)<br />

ah := $4f; al := $02; bx := $101; (*Videomodes ..$101..105.. etc. *)<br />

Intr( $10, reg );<br />

if ( ah=0) and ( al=$4f ) then (* ok *) else writeln( '<strong>SVGA</strong> Error in Subfunction 2' );<br />

end;<br />

RamWindow( 0, 40 ); RamWindow( 1, 50 ); RamWindow( 2, 60 );<br />

RamWindow( 3, 70 ); RamWindow( 4, 80 ); RamWindow( 5, 90 );<br />

readln;<br />

end.<br />

Systemprogrammierung I, Sommer 2000, P. Schulthess 14

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!