MDA CGA EGA Hercules SVGA TIGA Windows
Transcrição
MDA CGA EGA Hercules SVGA TIGA Windows
8. Standard Grafikadapter 8.1 Adapter-Stammbaum • Monochrome Display Adapter (MDA): - nur Text, keine Pixelgrafik, - 25 Zeilen mit 80 Zeichen, - schwarz/weiss. • Color Graphics Adapter (CGA): - 640 * 200 Punkte, - 8 * 8 Zeichenmatrix, - Text mit 16 Farben, - Grafik mit 4 Farben. MDA Monochrom Hercules CGA EGA VGA • Hercules Karte 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. Systemprogrammierung I, Sommer 2000, P. Schulthess Ansteuerung digital Ansteuerung analog SVGA WindowsBeschleunigerkarten 1 TIGA • 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): - empfohlen als Kompatibilitäts-Basis, - Bank-Select Register, - Höhere Auflösung. • Texas Instruments Graphics Array (TIGA): - programmierbarer Graphikprozessor, - wenig Abwärtskompatibilität. • Beschleunigerkarten mit umfangreichen HW-Funktionen: - 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 ... Systemprogrammierung I, Sommer 2000, P. Schulthess 2 8.2 Konfigurierung und Ansteuerung 8.2.1 Direkte Konfigurierung über Geräteregister im E/A-Adressraum: • Grosse Anzahl von Geräteregistern. • Mühselig und herstellerabhängig. • 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: - maximal 128KiloBytes (zu klein für moderne Adapter), Grafikspeicher ist in den Realspeicher eingeblendet, Bei SVGA nur ein Ausschnitt eingeblendet, Direkter Pixelzugriff möglich, Video-Fenster bei $a0000. • Interpretation der Bytes im Grafikspeicher: - Als attributierte Buchstaben (Vordergrund- & Hintergrundfarbe, Blinken), - Als separate Farbebenen mit selektivem Ebenenzugriff, - Als 4-Bit oder 8-Bit Pixel. Systemprogrammierung I, Sommer 2000, P. Schulthess 3 8.2.2 Softwareunterstützung für die Grafikausgabe: • Entweder direkt in den Grafikspeicher schreiben, oder 3D-Funktionen verwenden. • BIOS hauptsächlich für die Initialisierung: - BIOS auf Hauptplatine oder/und im Adapter-ROM, - BIOS eigentlich nur für Real-Mode. • Über DOS: - ohne echte Grafik, nur Spezialbuchstaben, mager. • Linux Treiber: - XFree 386, OpenGL, Direct Rendering Interface, • Microsoft DirectDraw und Direct3D: - Beschleuniger-Schnittstelle z.B. für Spiele, - SW-Emulation nicht implementierter Fkt., - Leistungspotential nicht ausgeschöpft - echte 3D Modellierungen. Systemprogrammierung I, Sommer 2000, P. Schulthess 4 8.2.3 Zugriff über BIOS • Standardisierte Initialisierung von: - Speichermodell (Linearer Framebuffer), - Farbmodell (Masked, Indexed, True-Color), - Auflösung und 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): - aus Adapter ROM, - INT $10, Funktion $4f, ... - ergänzend zum EGA/VGA BIOS. • BIOS Datenbereich zur Ablage des Bildformates: - ab $40:$10 bei MDA, CGA Adapter, - Zusätzlich ab $40:84 für EGA, VGA. Systemprogrammierung I, Sommer 2000, P. Schulthess 5 8.3 Videospeicherorganisation 8.3.1 Map-Mask Register CPU-RAM • Für aktuelle Grafiksysteme irrelevant. Video-RAM • Schreiben gleichzeitig in mehreren Ebenen im Videomodus (13,14,15,17): • 16 Farbwerte mit 4 Ebenen. • maximal 128 KByte pro Farbebene. Map-Mask Register 640 K Pixel • spart Adressbereich im Real-Mode. 8.3.2 High-Color und True-Color 15 bis 32 Bit RGB Pixel • 15/16 Bit pro Pixel (High-Color). • 24/32 Bit pro Pixel (True-Color). DAC DAC DAC • Z-Puffer, Alpha Puffer etc.. Systemprogrammierung I, Sommer 2000, P. Schulthess 6 Analog Video-Out 8.3.3 Palettenregister • Ab VGA analoges Signal aus den DAC (Dig.-Analog Convertert) zum Bildschirm. • Farbwert im Grafikspeicher abgespeichert. • Pro Pixel 4 Farbbits. 4 Bit CLUT Color Lookup Table • 16 Palettenregister à 6 Bits. • 4 * 64 Farbtabelleneinträge. • Tabellenseite umschalten. 16 Palettenregister Color Page Register Systemprogrammierung I, Sommer 2000, P. Schulthess 7 Analog Video-Out DAC DAC DAC 8.3.4 Indexed Color CLUT – Color Lookup Table • 256 Farbwerte pro Pixel. • Farbtabelleneinträge: - 15 Bit (5R, 5G, 5B), - 16 Bit (5R, 6G, 5B), - 24 Bit (8R, 8G, 8B). • Optimieren der Farbtabelle für ein gegebenes Bild. • Farbtabelle jeweils für das Vordergrundfenster. Systemprogrammierung I, Sommer 2000, P. Schulthess Analog Video-Out DAC DAC DAC 8 Bit Pixel 8 8.3.5 Videospeicher einblenden Video-RAM • Im Protected Mode werden auch große VideoSpeicher ganz in den Adressraum gelegt. • Problem: Im Real-Mode kann nur ein Teil des Video-Speichers in den CPU-Adressraum eingeblendet werden. Display CPU-RAM • Bank-Select Register bildet den CPU-Adressbereich $a0000-$affff in das Video-RAM ab. 640 K • Die Plazierung kann nur auf mindestens 1 KByte Grenzen geschehen: Systemprogrammierung I, Sommer 2000, P. Schulthess 9 Bank-Select Granularität 8.4 SVGA VESA Standard • 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 • Speicher für Super VGA: - Speicherseite[0]: 000a0000-000bffff - Speicherseite[1]: 000e4000-000effff • I/O Adressen für Super VGA (Laut PnP): - 03b4-03b5 - 03c0-03cf 03ba-03ba 03bf-03bf 03d0-03d7 03da-03dc • Zugriff auf weitere Register nach Indexierung an Port $3d4: - Indexregister: - Datenregister: $3d4 3d5 • Linearer Framebuffer bei VESA 3.0 möglich. Systemprogrammierung I, Sommer 2000, P. Schulthess 10 8.4.1 VESA Videomodi • SVGA-Modi $100 oder größer, zusätzlich zu den MDA, CGA, EGA Modi. • Verbreitet sind VESA 1.0 und VESA 2.0 nicht jedoch VESA 3.0. VESA MDA, CGA, VGA Systemprogrammierung I, Sommer 2000, P. Schulthess Video-Modus Grafik $100 ja $101 ja $102 ja $103 ja $104 ja $105 ja $106 ja $107 ja $108 Text $109 Text $10a Text $10b Text $10c Text $03 Text $18 ja $19 ja Auflösung 640*400 640*480 800*600 800*600 1024*768 1024*768 1280*1024 1280*1024 60*80 25*132 43*132 50*132 60*132 25*80 640*480 320*200 11 Farben 256 256 16 256 16 256 16 256 16 16 256 8.4.2 VESA SVGA-BIOS Aufrufe: • Immer INT $10, Funktion $4f (in AH). • 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, Systemprogrammierung I, Sommer 2000, P. Schulthess SVGA-Anzeigebeginn in Video-RAM setzen. 12 8.4.3 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; Systemprogrammierung I, Sommer 2000, P. Schulthess 13 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. Systemprogrammierung I, Sommer 2000, P. Schulthess 14