

                      Der Grafikmodus 13h
                      


Wie in der letzten Ausgabe angekndigt, werde ich diesmal etwas
ber die Verwendung von 4 Grafikseiten im Modus 13h schreiben.
Allerdings ist das wiederum ein so weitlufiges Feld, soda ich
mich entschlossen habe, diesen Teil in zwei Abschnitte zu unter-
teilen. Der erste Abschnitt handelt nur ber die allgemeine Theo-
rie, die hinter dem ganzen steckt. Der zweite Abschnitt geht dann
ein wenig mehr auf die (theoretische) praktische Seite ein, also
mit Punktesetzen und so. Die reine Theorie findet Ihr hier, das
andere in der nchsten Ausgabe (hoffentlich vergess' ich das
nicht...).

Dazu sei ersteinmal folgendes gesagt: Ein Grafikseite bentigt
im Modus 13h ja genau 64000 Pixel (320x200), da ein Pixel durch
ein Byte reprsentiert wird. Nun hatten die frhesten VGA-Karten
aber immer 256 KB Grafikspeicher 'on board', was soviel heit,
da hier eigentlich 4 Seiten Platz htten (262144 DIV 64000 = 4).
Nur wird dieses ersteinmal durch die interne Verwaltung des
Grafikspeichers verhindert. Dem Programmierer erscheint es ja
so, da der Videospeicher der Grafikkarte linear im Hauptspei-
cher des Computers eingeblendet wird. Was auch immer das heien
mag: es ist sowieso nicht richtig, sondern lediglich ein Trug-
bild! Auch wenn man es eigentlich nicht mitbekommt, und wenn man
nur eine Grafikseite beansprucht es einem auch vollkommen egal
sein kann: diese Ansicht ist falsch. Die Bitplanes, die einem im
Modus 12h (640x480x16) auf Schritt und Tritt verfolgen, haben
auch in diesem Modus die Finger im Spiel. Tatschlich ist es so,
da ein Bild in 13h ber diese vier Bitplanes verteilt liegt.
Und zwar folgendermaen: Bei der Offsetadresse zum Videosegment,
die fr einen bestimmten Punkt steht, werden intern die Bits 0
und 1 als Index in eine der vier Bitplanes verstanden. Dann wer-
den diese Bits ausgeblendet und der briggebliebene Teil als Off-
set in die Bitplane verwendet.
Beispiel: Die Offsetadresse 000000-00b wird in der Bitplane 0 an
Offset 0 geschrieben. 000000-01b kommt in die Bitplane 1 an den
Offset 0. 000000-10b steht in BP#2 Offset 0 und 000000-11b in
BP#3 bei Offset 0. Das heit: Jeweils vier aufeinander folgende
Punkte stehen in verschiedenen Bitplanes aber an der selben Off-
setadresse. Der nchste Punkt in dieser Reihenfolge wre dann
000001-00b : BP#0, Offset 4. Darauf folgt 000001-01b: BP#1 und
Offset 4. Auch hier sieht man: Andere Bitplane, gleicher Offset.
Was jetzt auch noch deutlich werden soll, ist, da zwischen den
einzelnen Punkten in den verschiedenen Bitplanes jeweils 3 Byte
ungenutzt brach liegen (zwischen Pixel 0 und Pixel 5 bleiben drei
Byte in BP#0 leer - entsprechend in den anderen Bitplanes auch).

Nun drfte vielleicht auch klar werden, wo da Problem liegt,
wenn man 4 Bildschirmseiten realisieren will: Man mu die gesamte
Verwaltung des Grafikspeichers umschreiben. Doch zum Glck ist
das, auch wenn es anfnglich schlimmer klingt als es aussieht,
relativ leicht machbar.
Zum einen mu auf den sogenannten CHAIN4-MODUS verzichtet werden,
der dafr verantwortlich ist, da die Pixel ber die 4 Bitplanes
verteilt werden. Allerdings mu man sich dann von Hand bemhen,
die Pixel in die verschiedenen Bitplanes einzutragen (allerdings
dann natrlich ohne '3-Byte-Lcken'!). Neben dem Chain4-Modus mu
auch noch der ODD-EVEN-MODUS ausgestellt werden, der den kleinen
Bruder von Chain4 darstellt. Nun mu dem Computer auch noch mit-
geteilt werden, da er seine Daten nicht mehr in Viererschritten
in die Bitplanes legen soll, damit diese direkt hintereinander
abgelegt werden (vom Doubleword in den Byte Modus schalten).
Nachdem das alles getan ist, werden in jeder Bitplane nur noch
die ersten 16 KB belegt und man kann den sich daran anschlie-
enden, ununterbrochenen freien Speicherplatz fr weitere drei
Seiten benutzen.
Und stellt sich vielleicht die Frage, warum die erste Bitplane
nicht fr die erste Bildschirmseite, die zweite fr die zweite
Bildschirmseite etc. benutzt wird. Das ist leider nicht mglich,
auch wenn es wahrscheinlich die einfachste Mglichkeit wre, meh-
rere Seiten zu unterscheiden. Doch interne Umstnde lassen dies
nicht zu. Denn die ganze Controller, die bei der Sache beteiligt
sind, lassen sich leider nicht von dieser Aufteilung berzeugen.
Alles oben genannte lt sich zwar bewerkstelligen, doch bleibt
die Verteilung der Pixel immer auf die vier Bitplanes verteilt.

Nun aber wieder zu den Dingen, die getan werden mssen, um 4 Sei-
ten zu realisieren. Der erste Schritt ist, den Chain4 und den
Odd-Even-Modus auszustellen. Dies geschieht, indem man das Bit #4
im Register 05h des Graphics-Controllers lscht, das Bit #1 im
Register 06h des Graphics-Controller lscht und dann noch dem
Sequencer-Controller das ganze bekannt gibt, indem man das Bit #2
im Register 04h auf 1 und Bit #3 auf 0 setzt. Anschlieend mu
man von dem genannten Doubleword-Modus in den Byte-Modus schal-
ten. Dies geschieht, wenn man das Bit #6 im Register 14h des CRT-
Controllers lscht (von Doubleword zu Word), und dann zustzlich
das Bit #6 im Register 17h des CRT-Controllers auf 1 setzt (nun
von Word zu Byte). Das ist ersteinmal alles!

Tja, leider werdet Ihr damit jetzt nichts anfangen knnen. Ihr
knnt zwar von mir aus mal mit der Routine 'SOURCE\INIT13h.PAS'
herumspielen, doch werdet Ihr vorerst (wenn berhaupt) wohl
immernoch nur eine Seite sehen. Wie das genau abluft, erfahrt
Ihr in der nchsten Ausgabe. Bis dahin habe ich hoffentlich auch
ein fertiges Beispielprogramm fr Euch.

Viel Spa beim Tfteln,

                                                 Kemil

