Paleta kolorów
W tym artykule dowiesz sie jak bawic sie kolorami wykorzystujac do tego nasza starenka VGA. Co prawda pewnie nikt z was nie ma juz prawdziwej VGA, ale chyba kazda z tych dzisiejszych super-mega-rakiet potrafi VGA emulowac (np. tryb 13h).
Na poczatek troche teorii. Obraz na ekranie jest rysowany tak (w duuuzym uproszczeniu oczywiscie), ze karta bierze sobie zawartosc kolejnej komorki pamieci z segmentu 0a000h i znajduje odpowiedni dla tej zawartosci kolor z palety. Jezeli w komorce pierwszej bedzie np. 36, to na monitorze zobaczymy w tym miejscu kropke w kolorze jaki jest zdefiniowany na 36 miejscu w palecie.
Kolor definiujemy przez okreslenie nasycenia 3 barwami - czerwona, zielona i niebieska. (jak sie przyblizysz odpowiednio blisko do monitora (albo lepiej TV) to na pewno zobaczysz takie male kolorowe kropeczki - wlasnie w tych kolorach). W trybie 13h mozemy ustalic wartosci RGB na 0-63. Przy ustawieniu 0,0,0 mamy kolor idealnie czarny, przy 63,63,63 - idealna biel. Color najbardziej czerwony to 63,0,0. Kolor zolty to mieszanka zielonego i czerwonego - czyli np. 50,50,0 - im mniejsze beda wartosci tym bardziej bedzie on przypominal brazowy. Mozesz sie tak bawic tymi kombinacjami caly dzien :-)
A jak definiuje sie kolor w palecie za pomoca assemblera? Bardzo prosto :-) Musimy tylko wyslac do portu 03c8h numer koloru, ktory chcemy zdefiniowac, a nastepnie do 03c9h po kolei trzy wartosci - R, G i B.
Aby wyslac cos do portu uzywamy instrukcji:
gdzie dx to numer portu a al wartosc tam wysylana
Aby ustawic kolor tla na niebieski trzeba wykonac nastepujacy kod:
Jest jeszcze jedna rzecz ktora powinienes wiedziec. Po ustawieniu koloru n - karta jest gotowa do przyjmowania ustawien koloru n+1. Nie musimy wiec ciagle wpisywac numeru koloru do 03c8h. Wystarczy ciagle pisac do 03c9h.
Na poczatek troche teorii. Obraz na ekranie jest rysowany tak (w duuuzym uproszczeniu oczywiscie), ze karta bierze sobie zawartosc kolejnej komorki pamieci z segmentu 0a000h i znajduje odpowiedni dla tej zawartosci kolor z palety. Jezeli w komorce pierwszej bedzie np. 36, to na monitorze zobaczymy w tym miejscu kropke w kolorze jaki jest zdefiniowany na 36 miejscu w palecie.
Kolor definiujemy przez okreslenie nasycenia 3 barwami - czerwona, zielona i niebieska. (jak sie przyblizysz odpowiednio blisko do monitora (albo lepiej TV) to na pewno zobaczysz takie male kolorowe kropeczki - wlasnie w tych kolorach). W trybie 13h mozemy ustalic wartosci RGB na 0-63. Przy ustawieniu 0,0,0 mamy kolor idealnie czarny, przy 63,63,63 - idealna biel. Color najbardziej czerwony to 63,0,0. Kolor zolty to mieszanka zielonego i czerwonego - czyli np. 50,50,0 - im mniejsze beda wartosci tym bardziej bedzie on przypominal brazowy. Mozesz sie tak bawic tymi kombinacjami caly dzien :-)
A jak definiuje sie kolor w palecie za pomoca assemblera? Bardzo prosto :-) Musimy tylko wyslac do portu 03c8h numer koloru, ktory chcemy zdefiniowac, a nastepnie do 03c9h po kolei trzy wartosci - R, G i B.
Aby wyslac cos do portu uzywamy instrukcji:
out dx,al
gdzie dx to numer portu a al wartosc tam wysylana
Aby ustawic kolor tla na niebieski trzeba wykonac nastepujacy kod:
mov dx,03c8h
xor al,al
out dx,al
inc dx
out dx,al
out dx,al
mov al,60
out dx,al
xor al,al
out dx,al
inc dx
out dx,al
out dx,al
mov al,60
out dx,al
Jest jeszcze jedna rzecz ktora powinienes wiedziec. Po ustawieniu koloru n - karta jest gotowa do przyjmowania ustawien koloru n+1. Nie musimy wiec ciagle wpisywac numeru koloru do 03c8h. Wystarczy ciagle pisac do 03c9h.
Autorem tekstu jest:
Jacek Popławski
Materiał dodany przez użytkownika: alphan
