Mirosław Toton

Udawany kolor

[VGAKOLOR.ZIP]

Asembler


Ostatnio zjawił się u mnie kolega z pewnym pytaniem. Mianowicie posiada on kartę graficzną Cirrus Logic (2MB VRAM) z monitorem monochromatycznym. Okazuje się, że niektóre gry i programy wymagają tego, by do komputera podpięty był monitor kolorowy. Gdy takowy nie zostanie wykryty w systemie zostanie wyświetlony na przykład taki komunikat: "This application needs a vga cards" lub "This program must be run on a system with a VGA card". Powstaje pytanie: Czy nie można jakoś obejść tego problemu? Przecież dla większości gier i programów nie ma większej różnicy, to jaki monitor jhest podpięty do karty.

Przyjrzałem się dokładniej w jaki sposób te programy, sprawdzają obecność kolorowego monitora w systemie. Okazało się, że realizowane jest poprzez funkcję 1ah, przerwania 10h karty video. Gdy wywołamy to przerwanie z wartościami: AH=1Ah i AL=0, to funkcja zwraca w BL liczbę określającą status aktywnej karty. Dla VGA z monitorem monochromatycznym jest to liczba 7, a dla VGA z monitorem VGA kolorowym jest to liczbza 8. (Więcej informacji o funkcji 1Ah przerwania 10h, można znaleźć w [1])

Teraz pozostaje tylko napisać nową procedurę obsługi funkcji 1Ah, tak aby każde jej wywołanie zwracało w rejestrze BL liczbę 8. Nową procedurę "podpinamy" rezydentnie pod przerwanie 10h i już mamy VGA "kolor". Mam nadzieję, że mój artykuł pomoże niektórym Praktykom w "nakłonieniu" opornych programów do współpracy.

Na załączonym wydruku znajduje się przykładowy program, realizujący wyżej opisany problem. Należy go skompilować do postaci *.com. Progam był testowany na komputerze 386DX 40MHz. Do assemblacji użyto Turbo Assemblera 4.1, a do linkowania Turbo Linka 7.1.30.1.

Literatura

[1] Krzysztof Łabanowski, Programowanie kart graficznych - wydanie drugie poprawione i uzupełnione, Lupus - Warszawa 1994

Stronę opracował Michał Szulowski