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