256 - und keine Farbe weniger! Nachdem ich in der letzten Ausgabe den Aufbau eines PCX-Bildes in 256 Farben erlutert habe, will ich Euch nun einen 256-Farben Modus nher bringen. Dabei nehme ich mir den einfachsten heraus: 320x200 - den Modus 13h. Alles, was ich hier sage bzw. schreibe trifft weitestgehend auch fr die anderen 256-Farben Modis zu, nur die Auflsung ist halt anders. Vielleicht schreibe ich ja auch irgendwann einmal etwas dazu (VESA-Treiber...). Dieser Artikel gliedert sich ganz grob in zwei Abschnitte: I - Grundlegendes zum Modus 13h II - Vier Grafikseiten realisiert im Modus 13h. Der erste Punkt wird in dieser Ausgabe behandelt, der zweite in der nchsten. Eine kleine Einfhrungsgeschichte: Die ersten VGA-Grafikkarten wurden 1987 von IBM auf den Marktge- worfen. Mit ihre Einfhrung wurde ein neuer Standard gesetzt, der es bis heute auch geblieben ist (allerdings von den Super-VGA- Karten nochmals erweitert wurde). VGA-Karten senden, im Gegensatz zu allen vorherigen Karten, ihre Farbsignale nicht mehr digital sondern analog zum Monitor. Da- durch kann eine weit hhere Farbanzahl realisiert werden - bei 'normalen' VGAs mehr als 262143 (262144...)! Das war gegenber der EGA-Karte, die gerade mal 64 Farben generieren konnte, ein extremer Fortschritt. Allerdings wurde mit der VGA-Karte nur ein Modus eingefhrt, der mehr als 16 Farben gleichzeitig darstellen konnte, was die EGA-Karte schlielich auch schon implementiert war. Dieser Modus trgt die Nummer 13h und bietet dem User, im Gegensatz zur 'Spitzenauflsung' von 640x480, lediglich 320x200 Pixel, das aber bei 256 Farben! Die hhere Farbanzahl gleichte die geringere Auflsung mehr als aus. Obwohl heute schon wesent- lich hhere Auflsungen bei hherer Farbanzahl mglich sind, wird der Modus 13h, zumindest im Spielebereich, immer noch am hufig- sten gebraucht. Das hat er wahrscheinlich seiner sehr leichten Handhabung zu verdanken, die ich im folgenden Text erlutern wer- de. Nun denn. Zu aller erst der Videospeicher. Der Modus 13h bentigt fr eine Bildschirmseite genau 64000 Bytes. Diese Zahl lt sich ermittlen, indem man die horizontale Auflsung (320) mit der ver- tikalen Auflsung (200), und das Ergbenis wiederum mit der ben- tigten Anzahl Bytes fr einen Pixel (in diesem Fall ein Byte pro Pixel) mal nimmt. Man erhlt also den schon vorher genannten Wert von 64000. Da dieser Wert noch gut in das Segment bei $A000, das Segment, in das der Videospeicher eingeblendet wird, pat, gibt es keine Probleme mit hin und herschieben dieses Fensters oder setzen einzelner Punkte mittels verschiedener Bitplanes und Latch-Registern, wie es zum Beispiel im Modus 12h (640x480x16) der Fall ist. Man kann Punkte ganz einfach setzen und abfragen, indem man einfach das Byte an die gewnschten Speicheradresse ldt bzw. diese ausliest. Ganz einfach, ehrlich! Da, wie schon gesagt, ein Pixel genau ein Byte belegt, findet man also bei $A000:$0000 den Pixel, der oben links eingeblendet wird. Bei $A000:$0001 steht dann der 2. Pixel von links usw. Die zweite Zeile fngt danach bei $A000:$0050 an... Will man den Offset eines beliebigen Punktes x/y ermitteln, dann lt sich dieser nach folgender Formel berechnen: Offset = x + (y * 80). Punkt geht zwar eh' vor Strichrechnung, zur besseren Darstellung habe ich die Klammern aber gesetzt. Dieser Offsetwert gilt na- trlich nur, wenn man den Punkt oben links mit 0/0 und nicht mit 1/1 festlegt. Will man das, dann mu man einfach von x und y je- weils 1 abziehen (Offset = (x-1) + ((y-1) * 80)). Mit der 'Pseudoanweisung' '$A000:$0000 = Farbe' lt sich dann ein Punkt setzen, mit 'Farbe = $A000:$0000' ein Farbwert ausle- sen. Wirklich einfach, oder? Nun eine Quizfrage: Was mu man machen, um eine Farbe an die Koordinate 1/0 zu setzen? Wer mir die richtige Lsung schickt, verliert eine Schokolade... :-). Tja, eigentlich war das alles so einfach, da ich jetzt schon fertig bin. Oder wollt Ihr vielleicht noch etwas ber die Fest- legung von Farben in diesem Modus hren? Ich hab's geahnt... (Warum kann ich nicht einmal meine Klappe halten?). Na schn, weiter geht's mit der DAC-Farbtabelle. DAC, was is'n das? Kann man das essen? Trinken? Sex? ...? So oder hnlich hren sich jetzt auch bestimmt Eure Fragen an, stimmt's? Meine Antwort: Nein, weder noch (wer htt's gedacht...)! Doch nun wieder zum Thema: DAC steht fr Digital to Analog Converter und ist das Ding, das die digitalen Farben des Rechners in analoge Farben fr den Moni- tor umwandelt. Nun zur DAC-Farbtabelle: Wie Ihr vielleicht hoffentlich oder auch nicht wit... h, was? Ach ja: Ein Farbton besteht aus 3 Farbkom- ponenten: einem Rot-Wert, einem Grn-Wert und einem Blau-Wert, kurz RGB-Werte genannt. Die die 'normale' (keine Super-VGAs...) 256 Farben gleichzeitig darstellen kann, brauchte man etwas, wo man diese Farben ablegen konnte. Genau diese Aufgabe bernimmt die DAC-Farbtabelle. Hier finden sich 256 RGB-Werte, jeweils fr eine Farbe einer. Da jeder einzelne Wert aus einem Byte besteht (eigentlich sind es nur 6 Bit, aber das ist jetzt egal), ergibt sich eine Anzahl von 768 Bytes (256 * 3). Um nun einen Eintrag der Farbtabelle zu ndern oder auszulesen, bentigt man 3 Port- adressen: PortNr. Bedeutung 3C8h Port fr Schreibzugriff 3C7h Port fr Lesezugriff 3C9h Datenport Mchte man die Farbe 26 ndern, dann mu man dafr den Wert 26 an den Port 3C8h schicken, und dann nacheinander erst den Rot- Wert, dann den Grn-Wert und dann den Blau-Wert an der Port- adresse 3C9h ausgeben. Will man den RGB-Wert der Farbe 37 haben, dann lade man Port 3C7h mit 37, und lese dann erst den R-Wert, dann den Grn- Wert und dann den Blau-Wert am Datenport aus. Einfach, nicht? Es mag passieren, da bei mehrmaligen Lesezugriffen keine ver- nnftigen Ergebnisse geliefert werden. Ist das der Fall, dann sollte man eine 'kurze Pause' nach jedem Lesezugriff einle- gen. Noch etwas zu den 6 Bits von oben: Jeder der drei RGB-Werte besteht in echt nicht aus 8 Bits (ein Byte) sondern lediglich aus 6! Das heit nur, da der R-Wert 63 (00111111b) und z.B. der Wert 200 (11001000b) identisch sind. Das ist alles! Tja, ich glaube, hoffe und meine, da das jetzt wirklich alles gewesen ist. Sollte es nicht so sein, dann fragt, wie auch sonst immer, bei uns nach! Man sieht sich beim nchsten Teil im nch- sten STOD. Bis dann, Kemil