

                    Zum Thema Colorcycling
                    

Colorcycling ist echt nichts Schweres. Man bezeichnet damit das
Vorgehen, eine Farbpalette 'rotieren' zu lassen.
Das heit: Man nehme die, zugegeben kleine, Farbpalette mit den
Farbeintrgen: 0,1,5,8,29. Nun lt man sie rotieren. Beim nch-
sten Schritt sehe sie so aus: 1,5,8,29,0 (nach links rotiert)
oder 29,0,1,5,8 (nach rechts) - je nachdem, fr welche Richtung
man sich entscheidet. Die nchste Umformung drfte klar sein:
entweder 5,8,29,0,1 ode 8,29,0,1,5 usw. usf....

Also eine ganz einfache Sache, die aber nette Effekte erzeugen
kann (siehe Plasma).

Es gibt verschiedene Mglichkeiten, die Farbpalette rotieren zu
lassen. Eine mchte ich Euch hier vorstellen.

1) Man lese die Farbtabelle aus (erste Farbe: a, letzte Farbe: b)
2) Linksrotieren: Man trage die Farbtabelle so ein, da Farbe a+1
   an die Stelle a, a+2 an a+1... b an Stelle b-1 fllt. Die
   Stelle, an der zuvor b stand, wird nun mit a gefllt.
   Rechtsrotieren: Man trage Farbe b-1 bei b, b-2 bei b-1... a
   bei a+1 ein. Farbe b wird bei a festgelegt.
3) Wieder von vorne

Alles klar? Nein? Stimmt!

Farbtabelle auslesen:
 Es gibt zwei Mglichkeiten, die Farbtabelle auszulesen. Zum
 einen mittels dem BIOS und zum anderen durch direkte PORT-Adres-
 sierung. Da das BIOS, wie auch sonst immer, zu langsam ist,
 nehmen wir die zweite Variante. Ich hatte zwar schon in der
 letzten Ausgabe beschrieben, wie das geht, werde mich hier aber
 gerne noch mal wiederholen.
 Es gibt drei PORT-Adressen, die wir kennen mssen:


               $03C7              Lese-Port
               $03C8              Schreib-Port
               $03C9              Daten-Port


 Wollen wir die Farbe 89 auslesen, so mssen wir diesen Wert (89)
 an den Port $03C7 schicken und dann am Datenport zuerst den Rot-
 Wert, dann den Grn-Wert und dann den Blau-Wert der Farbe aus-
 lesen. Also drei Byte pro Farbe. Am besten wir haben ein Feld,
 das 768 Bytes gro ist. Dann knnen wir, wenn wir wollen, alle
 256 Farben dort abspeichern.

Farbtabelle schreiben:
 Drfte wohl klar sein, oder?
 Eintragen der Farbe xy: Wert xy an Portadresse $03C8 schicken.
 Danach R,G und B-Werte nach $03C9.

Hier nun noch ein Programm im 'Pseudocode':

VARIABLE PAL: FELD 768 BYTES gro

PROZEDUR GetPal
Schleife 1 : Farbe = Farbenzhler (von 0 bis 255)
 PORT $03C7 = Farbe
 Schleife 2 : RGB = RGW-Zhler (von 1 bis 3)
  PAL[Farbe,RGB] = PORT $03C9
 Ende Schleife 2
Ende Schleife 1

PROZEDUR SetPal
Schleife 1 : Farbe = Farbenzhler (von 0 bis 255)
 PORT $03C8 = Farbe
 Schleife 2 : RGB = RGW-Zhler (von 1 bis 3)
  PORT $03C9 = PAL[Farbe,RGB]
 Ende Schleife 2
Ende Schleife 1

PROZEDUR CyclePalette
Solange kein Tastendruck 'TU'
 GetPal
 Hilfe = PAL[0]
 Schleife : Farbe = Farbenzhler (von 1 bis 255)
  Pal[Farbe-1] = Pal[Farbe]                {Linksrotieren}
 Pal[255] := Hilfe
 SetPal

ENTE

Beim setzen der Palette wre es brigens noch sinnvoll, auf den
'Vertical Retrace' zu warten, da es sonst 'Schnee' am Bildschirm
gibt! Dies macht man, indem man den PORT $03DA ausliest und dann
prft, ob das Bit#3 (also das 4.Bit) gesetzt ist. Ist das der
Fall, dann ist gerade ein vertikaler Retrace 'am laufen' und die
Palette kann beliebig gendert werden.

In den einzelnen Rubriken werdet Ihr speziell fr 256 Farben noch
Beispielprogs frs Colorcycling finden.


                                                      Kemil

