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