Startseite   |  Site map   |  A-Z artikel   |  Artikel einreichen   |   Kontakt   |  
  


informatik artikel (Interpretation und charakterisierung)

Grafik

Mode x-


1. Java
2. Viren



Bei der Verwendung von Sprites (siehe unten) ergibt sich die Notwendigkeit von Bildschirmseiten. Diese Seiten können einfach hintereinander im Bildschirmspeicher abgelegt werden und über Register 0Ch und 0Dh (Linear Starting Address) gewählt werden. Das Problem besteht beim Mode 13h (siehe oben) jedoch darin, daß das ganze Bild bereits fast 64 KB (genau 64.000 Bytes) groß ist. Eine Bildschirmseite belegt also schon den gesamten im Hauptspeicher eingeblendeten Videospeicher (0A0000h - 0AFFFFh), was es der CPU unmöglich macht, die zweite Bildschirmseite anzusprechen . Modifikationen sind also nur über die Segmentselektoren des VGA möglich, die aber bei jedem Hersteller anders programmiert werden. Die Lösung dieses Problems findet sich im Mode X, der auch eine hohe Zugriffsgeschwindigkeit bietet. Im Mode X werden bei einem Byte-Zugriff vier Pixel auf einmal kopiert, außerdem werden Read-Mode 0 und Write-Mode 1 verwendet, die weder aufwendige interne Adreßumwandlungen erfordern noch Daten an die CPU schicken, was den Geschwindigkeitsvorteil gegenüber 32-Bit-Zugriffen der CPU ausmacht.

Initialisierung:
Das Wichtigste ist die Abschaltung des Chain-4-Mechanismus, so daß wieder freier Zugriff auf einzelne Planes möglich ist, außerdem muß sichergestellt werden, daß der Odd/Even-Mode (Plane-Selektion durch unterstes Offset-Bit) ausgeschaltet ist, dazu muß nur im TS-Register 4 (Memory Mode) Bit 3 (Enable Chain4) gelöscht und Bit 2 (Odd/Even-Mode) gesetzt werden. Je nach Grafikkarte (es lebe die Kompatibilität) muß noch der Speicherzugriff auf Byte-Adressierung geschaltet werden, also zunächst Doubleword-Adressierung aus Bit 6 in CRTC-Register 14h (Underline Row Address) löschen und Bit 6 in CRTC-Register 17h (CRTC-Mode) setzen. Sinnvollerweise wird jetzt noch der Bildschirmspeicher gelöscht, weil an den vom Mode 13h unbenutzten Stellen des Bildschirmspeichers, die jetzt sichtbar werden, noch "Bit-Müll" aus anderen Videomodi stehen kann. Am einfachsten geht das über das Write Plane Mask Register 2 des Timing-Sequenzers, in dem zum Löschen des Bildschirmspeichers alle Planes eingeschaltet werden, so daß 32.000 Word-Zugriffe oder 16.000 DWord-Zugriffe ausreichen, um alle vier Bildschirmseiten zu löschen. Die weitere Grafikprogrammierung muß nun aber direkt in Assembler erfolgen, da weder vom BIOS noch irgendeiner Hochsprache auch nur die geringste Unterstützung zu erwarten ist.

Aufbau:
In sämtlichen Plane-basierten Grafikmodi verbergen sich hinter einer Speicheradresse gleich 4 Byte, jeweils eins pro Plane. Die 4 Bytes liegen quasi übereinander an einer Adresse, daher auch der Begriff der Plane (Ebene). Die Planes sind quasi unabhängige Speicher, die sich einzeln ansprechen lassen, aber bei der Darstellung des Bildes auf dem Monitor parallel verwendet werden, d. h. die Daten aus allen vier Planes werden gleichzeitig gelesen. Im weiteren Aufbau gibt es jedoch gravierende Unterschiede zwischen den 16-Farben-Modi und Mode X. 16 Farben lassen sich durch 4 Bit darstellen, daher auch die 4 Planes. Hier wird nämlich Bit 0 eines Punktes im entsprechenden Bit der Plane 0 gespeichert, Nit 1 in Plane1 usw. Anders sieht es dagegen im Mode X aus, hier reichen 4 Bit für die Adressierung eines Punktes nicht mehr aus, so daß ein Punkt jetzt ein Byte einer bestimmten Plane verwendet. Dabei werden die Planes byteweise aufgefüllt, d. h. Punkt 0 befindet sich an Offset 0 in Plane 0, Punkt 1 am gleichen Offset in Plane 1, erst Punkt 4 steht an Offset 1, wobei wieder Plane 0 verwendet wird.
Die Punktnummer läßt sich im Mode X errechnen wie im Mode 13h (320 x Y + X). Plane und Offset lassen sich nach folgenden Formeln berechnen:
Plane = X mod 4

Offset = Y x 80 + X div 4
Dieses Verfahren entspricht exakt dem, das der Mode 13h standardmäßig verwendet, mit einem Unterschied: Der Offset wird durch Shiften der Punktnummer um 2 Bit nach rechts gebildet, nicht durch Maskieren, so daß im Speicher keine Lücken zwischen den Punkten entstehen und somit vier Seiten in die 256 KB Bildschirmspeicher passen. Bei der Selektion der Plane im Mode X muß allerdings noch zwischen Schreib- und Lesezugriffen unterschieden werden: Beim Lesen wird die Plane-Nummer in Register 4 (Read Plane Select) des GDC geschrieben, beim Schreiben dagegen ist es möglich, mehrere Planes gleichzeitig anzusprechen (wie schon beim Bildschirmlöschen gezeigt). Daher wird eine Maske in Register 2 (Write Plane Mask) des TS gesetzt, die erst aus der Plane-Nummer erzeugt werden muß. Es gilt folgende Formel:

Maske = 1 shl Plane-Nummer
Aus Plane 2 wird somit die Maske 1 shl 2 = 4 = 0100.
Ein Wort noch zur byteweisen Adressierung seitens der CPU: Es drängt sich förmlich die Versuchung auf, mittels 32-Bit-Zugriffen auf die Grafikdaten zuzugreifen (wozu hat man denn einen 386er?) oder wenigstens 16 Bit zu nutzen (das kann theoretisch schon der XT). Wer dies versucht, wird jedoch schon bald eines Besseren belehrt: Das Bild wird völlig verzerrt dargestellt, was sich durch die Vorgehensweise der CPU beim Speicherzugriff erklären läßt. Wenn die CPU ein Word (entsprechendes gilt für ein Doubleword) kopiert (per movsw), zerlegt sie diesen Kopiervorgang natürlich nicht in einzelne Byte-Bewegungen, sondern liest ein Wort komplett und schreibt es wieder komplett zurück. Der VGA kann jedoch in seinen vier Latches, die ja als Zwischenspeicher dienen, nur 4 Byte aufnehmen. Daher stehen nach dem Lesezugriff dort nur die 4 High-Bytes der gelesenen Words. Beim folgenden Schreibzugriff werden sowohl die 4 High- als auch die Low-Bytes auf den gleichen, den Latches entsprechenden Wert gesetzt. Am Bildschirm zeigt sich dies darin, daß immer zwei (bei 32-Bit-Zugriffen sogar vier) aufeinanderfolgende Viererblöcke den gleichen Inhalt haben, eine vernünftige Bilddarstellung also nicht mehr möglich ist.
Höhere Auflösungen im Mode X:
Der Mode X bietet den großen Vorzug, mit vier Bildschirmseiten arbeiten zu können, aber an der Auflösung hat er gegenüber seinem Vorgänger Mode 13h nichts geändert. Für bestimmte Anwendungen ist aber eine höhere Auflösung erforderlich. Dafür gibt es selbstverständlich die Super-VGA-Auflösungen, die zwar für jede Karte unterschiedlich angesprochen werden, was man aber zur Not über VESA-Treiber in den Griff bekommen kann. Das größere Problem taucht dann auf, wenn man auch in der hohen Auflösung mehrere Bildschirmseiten benutzen möchte. Zwar sind kaum noch VGA-Karten im Verkehr, die weniger als 1 MB Speicher besitzen, so daß selbst der 800 x 600-Punkte-Modus theoretisch zwei Bildschirmseiten im Speicher unterbringen könnte, aber eine Verwaltung von Bildschirmseiten ähnlich dem Linear-Starting-Address-Register ist unter VESA nicht vorgesehen; eine direkte Programmierung wirft wieder das bei Super-VGA unvermeidliche Kompatibilitätsproblem auf. Auf der Suche nach einem höherauflösenden Modus, der aber auch das Seitenkonzept unterstützt, fällt auf, daß der Mode X ganze vier Bildschirmseiten unterstützt, man aber in vielen Fällen nur zwei benötigt. Eine Verdoppelung der Auflösung auf 320 x 400 ist also ohne weiteres möglich. Daß 320 x 400 und nicht 640 x 200 verwendet wird, hängt mit dem eigentlichen Aufbau der 200-Zeilen-Modi auf VGA-Karten zusammen. 200 Zeilen können VGAs nämlich gar nicht explizit ansprechen (Miscellaneous-Output-Register, Bit 6-7 erlauben nur die Werte 350, 400, 480 und teilweise 768 Zeilen vertikale Auflösung). Daß sie es dennoch können, verdanken sie einer Fähigkeit, genannt Double-Scan. Das bedeutet nichts anderes, als daß bei einer physikalischen Vertikalauflösung von 400 Zeilen jede Zeile zweimal dargestellt und somit in y-Richtung verdoppelt wird, was zu einer Auflösungshalbierung führt. Dabei muß weder das horizontale noch das vertikale Timing verändert werden, weil physikalisch weiterhin 400 Zeilen zu je 320 Punkten dargestellt werden. Das macht es sehr einfach, diesen Mechanismus wieder auszuschalten: Im Register 9 des CRTC (Maximum Row Address) müssen 5 Bit gelöscht werden, Bit 7 und Bits 0 - 3. Je nach VGA-BIOS erfolgt die Verdoppelung über das eigentlich dafür vorgesehene Bit 7 (Double Scan Enable) oder Bits 0 - 3, die im Textmodus angeben, wie viele Scan-Zeilen pro Zeichen-Zeile benötigt werden. Dabei muß dieser Wert um 1 vermindert in das Register geschrieben werden. Im Grafikmodus entspricht der Registerwert dann der Anzahl Kopien, die von der Zeile zusätzlich dargestellt werden. Benutzt man hier größere Werte, kann man die vertikale Auflösung immer weiter herunterteilen bis zu einer Auflösung von 320 x 25 bzw. in Verbindung mit Bit 7 sogar 320 x 12.5. Daß dies keinen Sinn ergibt (Ausnahme: siehe Effekte), ist offensichtlich, aber es zeigt die Bedeutung und Anwendung dieses Registers. Um also wieder die ursprünglichen Zeilen zu erhalten, müssen nur die genannten Bits des Registers gelöscht werden. Wie gesagt sind keine Timing-Veränderungen nötig, auch ein Umschreiben der Mode-X-bezogenen Routinen ist nicht erforderlich, weil der Aufbau exakt gleichgeblieben ist. Im Prinzip werden die 200 Zeilen des normalen Mode X beim Umschalten auf 400 Zeilen am oberen Rand "zusammengeschoben" und geben den Blick frei auf die darunterliegenden 200 Zeilen, die im VGA-Speicher direkt darauf folgen. Es steht jetzt also in allen Routinen ein vergrößerter Wertebereich der Koordinaten zur Verfügung, der frei benutzt werden kann, da Sicherheitsabfragen dort aus Geschwindigkeitsgründen sowieso nichts zu suchen haben. Die einzige Änderung bezieht sich auf das Umschalten der Bildschirmseiten, statt vier Seiten à 64.000 Byte stehen jetzt nur noch zwei Seiten à 128.000 Byte zur Verfügung. Dies spielt beim Umschalten eine Rolle, weil die Startadresse in diesem Fall nicht mehr zwischen 0 und 16.000 umgeschaltet wird, sondern zwischen 0 und 128.000. Außerdem steht keine "Reserveseite" für ein Hintergrundbild mehr zur Verfügung, weil nahezu die gesamten 256 KB belegt sind (256 KB - 256.000 Byte = 6 KB sind noch ganz am Ende frei und können für kleine (!) Sprite-Hintergründe verwendet werden). Hintergründe müssen in diesem Modus also aus dem Hauptspeicher in den VGA kopiert werden. Beim Erstellen eines Hintergrunds ist übrigens auch das äußerst ungewohnte Seitenverhältnis von 320 : 400 zu berücksichtigen, das sehr flache, breite Rechtecke als Bildschirmpunkte erzeugt, so daß Kreise keine Kreise mehr sind, sondern sehr flache Ellipsen. Ein Bild sollte deshalb am besten in einer "quadratischen" Auflösung (z. B. 640 x 480) erstellt und dann auf 320 x 400 heruntergerechnet werden. Neben dieser neuen Auflösung lassen sich auch Grafikmodi mit noch höherer Auflösung erzeugen. Dabei entstehen sehr kuriose Auflösungen wie 512 x 400 oder 320 x 480. Abgesehen von der weit komplizierteren Initialisation dieser Modi, die eine komplette Umprogrammierung der Timing-Register erfordern, bieten sie auch keine erwähnenswerten Vorteile gegenüber Super-VGA-Modi, weil sie weit über den für Seitenprogrammierung maximalen Speicherverbrauch hinausschießen. Eine Seite läßt sich zwar auf jeder Standard-VGA darstellen, zwei Seiten überschreiten jedoch die 256 KB, die für die allgemeingültigen Adressierungsmethoden die oberste Grenze der Adressierbarkeit darstellen. Für höhere Adressen kommt das Problem der Inkompatibilität der Super-VGA-Karten zum Tragen, so daß man auch gleich einen Super-VGA-Modus verwenden kann, der dann wenigstens ein vernünftiges Seitenverhältnis aufweist.

 
 



Datenschutz
Top Themen / Analyse
indicator Von der Subventionslogik zur Leistungs- und Qualitätslogik
indicator Dateiverwaltung
indicator Einleitung, Anforderungen an Netzwerke, ISO-OSI-Modell
indicator Oberon - Die Programmiersprache
indicator Der Sinn und Zweck von Samba
indicator Die Zusammenstellung des Multimedia-PC
indicator Das Abilene-Netz / Internet2
indicator Sortiermethoden
indicator NetBEUI
indicator Modem--




Datenschutz
Zum selben thema
icon Netzwerk
icon Software
icon Entwicklung
icon Windows
icon Programm
icon Unix
icon Games
icon Sicherheit
icon Disk
icon Technologie
icon Bildung
icon Mp3
icon Cd
icon Suche
icon Grafik
icon Zahlung
icon Html
icon Internet
icon Hardware
icon Cpu
icon Firewall
icon Speicher
icon Mail
icon Banking
icon Video
icon Hacker
icon Design
icon Sprache
icon Dvd
icon Drucker
icon Elektronisches
icon Geschichte
icon Fehler
icon Website
icon Linux
icon Computer
A-Z informatik artikel:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #

Copyright © 2008 - : ARTIKEL32 | Alle rechte vorbehalten.
Vervielfältigung im Ganzen oder teilweise das Material auf dieser Website gegen das Urheberrecht und wird bestraft, nach dem Gesetz.
dsolution