PCkurier - poradnik menedżera IT  
Szukaj:
    
Pomoc
 w Archiwum  w Wiadomościach
 
  Akademia   IT.Forum   IT Track   IT Kariera   Koszty IT
 
Strona główna
Produkt Roku
PCkurier PLUS
Wiadomości
Nowy numer
Archiwum
Prenumerata
Kurs HTML
Redakcja
REKLAMA
Zasoby WWW
Info
Pytamy
Czy uważasz za celowe testowanie w PCkurierze akcesoriów komputerowych
Tak
Nie
Wyniki
Polecamy
Serwer pod nadzorem
Microsoft Small Business Server 2000
Pora na Exchange 2000
Microsoft Small Business Server 2000
Buszujemy po Windows 2000
Microft Small Business Server 2000
Stereo i w kolorze
Komórki przyszłości
Rok pełen niespodzianek
Przegląd technologii 2002
Czekając na Bartona
Płyty główne
Biznes w ręku
Palmtopy
Koszty w karbach
Rachunek kosztów działań
Instalacja bez tajemnic
Microsoft Small Business Server 2000
Nasze nominacje
Produkt Roku 2002
Wydajemy
AEC Forum
Cad/Cam forum
CRN
Enter
Tele.Net Forum
PCkurier 23/1996 >> DLA PRAKTYKÓW >> _

XMODE w 16 kolorach

Autor: Daniel Rychcik

W numerze 20/95 PCkuriera w dziale Dla praktyków ukazał się artykuł p. Piotra Rotkiewicza opisujący możliwości uzyskania różnych trybów 256-kolorowych na karcie VGA. Po jego przeczytaniu nasunął mi się wniosek, że podobną metodę można zastosować również w trybach 16-kolorowych. Jest to o tyle ciekawe, że ze względu na dwukrotnie większą szykość przesyłania punktów między układami karty można uzyskać na ekranie spore rozdzielczości, porównywalne z trybami SVGA. Jako przykład wybrałem tryb 752 x 564 punkty. Taka rozdzielczość zachowuje proporcje ekranu 4:3, a poza tym pozwala użyć podobnych wartości rejestrów CRT, jak w opisywanym przez p. Rotkiewicza trybie 376x564 w 256 kolorach.

Procedura Initgraph rozpoczyna działanie od inicjacji trybu 640x480 w 16 kolorach. Nie zgadzam się tu z autorem wspomnianego artykułu, który proponuje inicjować tryb BIOS-u tylko w celu uruchomienia programów ze środowiska zintegrowanego. Uważam, że w procedurze, która będzie wywoływana prawdopodobnie tylko raz w całym programie, należy maksymalnie wykorzystać możliwości BIOS-u. Po pierwsze, zmniejsza to liczbę rejestrów karty wymagających bezpośredniej modyfikacji (dla omawianego trybu odpada cały sekwencer i prawie cały układ graficzny). Po drugie, nie trzeba wtedy synchronizować zmiany rejestrów CRT z wyświetlaniem, gdyż po inicjacji trybu sekwencer znajduje się jeszcze poza obszarem wyświetlania (BIOS przecież też musi się zsynchronizować).

Sterownik CRT jest programowany na taki sam sposób wyświetlania jak w artykule p. Rotkiewicza, ale wydaje mi się, że warto tu podać interpretację tych danych, a nie tylko wartości rejestrów.

Zegar punktu - 28,322 MHz
Szerokość wyświetlania - 94 znaki (752 punkty)
Początek powrotu poziomego - 98. znak
Koniec powrotu poziomego - 111. znak

Razem - 115 znaków w linii

Częstotliwość linii - 30,785 kHz
Częstotliwość ramki - 53,45 Hz
Wysokość obrazu - 564 linie
Początek powrotu pionowego - 567. linia
Koniec powrotu pionowego - 569. linia

Razem - 576 linii na ramkę

Mimo że wyświetlane są tylko 94 bajty, w pamięci rezerwujemy 96, co znakomicie upraszcza adresowanie (w celu obliczenia adresu punktu wykonujemy przesunięcie i trzy dodawania).

Przy wysyłaniu danych do sterownika CRT użyłem bezpośrednio zakodowanej instrukcji przesłania grupowego, dzięki czemu nie musiałem posługiwać się rejestrem DS. Rozwiązanie to wymaga jednak wyłączenia przerwań podczas przesyłania. Spowodowane jest to specyfiką procesorów x86, które po wywołaniu przerwania zapamiętują tylko jeden przedrostek - po powrocie z przerwania następne wartości byłyby pobierane z przypadkowego miejsca segmentu danych. Nie jest to jednak duża wada, gdyż przy zmianie rejestrów CRT i tak z reguły wyłączamy przerwania.

Kolejną czynnością jest wybranie trzeciego trybu zapisu i zerowego trybu odczytu płatów pamięci. Wybrałem ten tryb dlatego, że po ustaleniu koloru rysowania instrukcją OUT, wszystkie operacje rysowania mogą zostać wykonane przez pojedyncze dostępy do pamięci. Jest to typowy przypadek dla procedur typu linia czy okrąg. Oczywiście we własnych procedurach można ustawiać inne tryby (na przykład procedura wypełniania konturu powinna używać pierwszego trybu odczytu, a kopiowanie bitmap powinno się odbywać w drugim trybie zapisu), ale należy potem przywrócić standardowe ustawienia.

Ostatnią częścią procedury Initgraph jest ustalenie kolorów wyświetlania. Po inicjacji trybu 12H rejestry atrybutów wskazują na rejestry DAC odpowiadające kolorom EGA, co utrudnia uzyskiwanie np. płynnych przejść kolorów. Należy zatem ustawić rejestry palety na wartości od 0 do 15 i rejestr ramki na 16, a do odpowiednich rejestrów DAC załadować właściwe kolory. Takie rozwiązanie zachowuje liniowe odwzorowanie palety na przetwornik. Pozwala także na zdefiniowanie osobnego koloru ramki (w trybach standardowych zmiana rejestru DAC #0 powoduje również zmianę koloru ramki). Opisane czynności są wykonywane za pomocą funkcji systemowych, z powodów, o których wspomniałem.

Omówienia wymaga jeszcze funkcja Pixel. Pobiera ona bity z kolejnych płatów pamięci, tworząc w rejestrze CL kolor punktu. Po jej wywołaniu rejestr wyboru płatu pamięci do odczytu zawiera 3, co należy uwzględnić przy wywołaniu funkcji Pixel z wnętrza innej procedury używającej tego rejestru.

Pamięć ekranu nie jest w omawianym trybie w pełni wykorzystana, z prawej strony zostaje 16 kolumn, a poniżej ekranu ponad 118 linii. Mogą się one przydać do łatwej implementacji sprite'ów (o ile ktoś je będzie tworzyć w trybie 16-kolorowym) lub do realizacji ekranu wirtualnego.

Literatura:

[1] P. Rotkiewicz: "Co to jest XMODE", PCkurier 20/95, s. 87.

[2] M. Borkowski: "VGA - podbijanie rozdzielczości", Bajtek 3/95, s. 19.

[3] R. Wilton: "Komputerowe karty graficzne", Microsoft Press 1994.

[4] N. Kowalczyk, D. Krzemiński: "Sterownik graficzny VGA", Wydawnictwo Lupus 1993.


Zapraszamy
Bądź pierwszym z dziesięciu!

Pierwszych 10 osób, które prenumerują PCkuriera i zadzwonią 10 kwietnia w godzinach od 13:00 do 15:00 pod numer (22) 841-05-02 otrzyma dwuosobowe zaproszenie na film Pedro Almodovara: "Porozmawiaj z nią".

Pokaz filmu odbędzie się 14 kwietnia w kinie Wars w Warszawie o godz. 20:30.
Serdecznie zapraszamy!
Nawigacja
wybierz dział
i/lub numer,
a następnie rok
lub podaj ID artykułu
Poprzedni artykuł
Następny artykuł
Najświeższe artykuły na ten temat
12/2001 - Wiem, ale nie powiem - Dowody z wiedzą zerową i ślepe podpisy
12/2001 - Polsce z e nadal nie do twarzy - Społeczeństwo informacyjne
12/2001 - eEurope - europejska marszruta - Stary kontynent nadrabia dystans
Jeśli masz uwagi lub opinie, którymi chcesz podzielić się z innymi, wpisz je do tego formularza
Pseudonim *
Hasło *
Tytuł komentarza
Treść
Ocena
1 2 3 4 5 6 7 8 9 10
*) Jeśli nie masz hasła, to najpierw się zarejestruj, jeśli zapomniałeś hasła, to Ci je przypomnimy
Oferujemy
PCkurier PLUS - pierwsze ze specjalnych wydań PCkuriera, poświęcone zastosowaniu Linuksa w serwerach internetowych i intranetowych oraz infrastrukturze sieciowej - routerach i zaporach ogniowych. Zapraszamy do salonów prasowych EMPiK. PCkurier PLUS jest też do nabycia na stronie naszej prenumeraty!
Wiadomości | Nowy numer | Archiwum | Akademia | PCkurier PLUS | IT.Forum | IT Track
Koszty IT | Produkt Roku | Prenumerata | Redakcja | Reklama | Zasoby WWW | Kurs HTML
Lupus sp. z o.o. | Polityka prywatności | Wszelkie prawa zastrzeżone | Info | webmaster@pckurier.pl