W sercu peceta

BIOS jest jednym z podstawowych elementów każdego komputera PC. W niewielkim skrawku pamięci umieszczonej na płycie głównej można znaleźć wiele ciekawych informacji na temat komponentów maszyny. Dlaczego więc nie spróbować “dobrać się” do nich samodzielnie?

Własnoręczne próby programistyczne mogą dać nam ogromną satysfakcję, którą trudno porównać z czymkolwiek innym. Początkujący adepci sztuki programistycznej muszą jednak przygotować się również na długie godziny spędzone nad upartym kompilatorem, dopatrującym się w każdym wierszu “źródła” ułomności kodera. Nieco nerwów mogą nam oszczędzić nowoczesne, wygodne środowiska programistyczne, przejmujące sporą część żmudnych obowiązków projektanta aplikacji. Jednym z lepszych narzędzi tego typu jest pakiet Delphi firmy Borland. Wersję Dephi 6 Personal, przeznaczoną do prywatnego użytku, umieściliśmy na CHIP-CD.

Wspomniany we wstępie BIOS, a dokładniej wykorzystywana przezeń pamięć parametrów konfiguracyjnych peceta, czyli CMOS, kryje w sobie wiele interesujących danych. Są to takie właściwości systemu, jak aktualny czas i data, dane zainstalowanych napędów dyskietek i dysków twardych, zaszyfrowane hasło dostępu do komputera i BIOS-u oraz wiele innych, szczegółowych informacji, dostępnych zazwyczaj poprzez setup komputera. Zanim rozpoczniemy jakiekolwiek zabawy z odczytywaniem zawartości CMOS-u, musimy sobie w pełni uzmysłowić związane z tym niebezpieczeństwa.

Narzędzie tortur peceta

Delphi 6, którego użyjemy do napisania przykładowego programu, jest doskonałym narzędziem RAD, kontynuującym dobre tradycje poprzednich pakietów Borlanda (patrz: recenzja Delphi 6 Enterprise w CHIP-ie 7/2001, 2 104). W najnowszej wersji aplikacji pojawiło się wiele nowości, z których najważniejszą jest chyba wprowadzenie biblioteki komponentów (CLX), wspólnej dla Delphi i Kyliksa (patrz: CHIP 4/2001, 2114).

Wersja Personal Delphi 6, którą można znaleźć na aktualnym CHIP-CD, wypada nieco mizernie w porównaniu z bardziej rozbudowanymi odmianami pakietu. Doskonałe środowisko IDE (Integrated Development Environment, czyli zintegrowane środowisko programistyczne) pozwala jednak łatwo i sprawnie tworzyć niekomercyjne programy. Podstawową wadę darmowej wersji Delphi, jaką jest brak zaawansowanych komponentów, można zaś w wielu przypadkach zniwelować, korzystając z darmowych rozwiązań oferowanych w Internecie. Adresy niektórych stron tego typu znajdują się w ramce “Info” na końcu tekstu.

Jak się do tego zabrać?

W pamięci CMOS przechowywane są podstawowe informacje, konieczne do funkcjonowania każdego peceta. Specyfikacja struktury tej pamięci jest już nieco wiekowa i niektórych danych, widocznych w oknach setupu komputera, nie uda nam się znaleźć w CMOS-ie. Mimo to warto “pogrzebać” nieco w tej części konfiguracji maszyny.

Środowisko IDE Delphi 6 Proffessional nie różni się na pierwszy rzut oka od odmian komercyjnych. Po bliższym przyjrzeniu się zauważymy jednak o wiele uboższą paletę komponentów, niedomagania debuggera i brak biblioteki CLX. Mimo to środowisko znakomicie nadaje się do “domowych” zastosowań.

Dostęp do CMOS-u uzyskamy za pośrednictwem odpowiedniego portu peceta. Porty to nic innego jak wydzielone komórki pamięci komputera, za pośrednictwem których uzyskujemy dostęp do większości “tradycyjnych” komponentów maszyny. Chociaż porty kojarzą nam się z interfejsem szeregowym (COM) i równoległym (LPT) peceta, pojęcie to jest znacznie szersze. Za pomocą portów możemy uzyskać dostęp do układów DMA, kontrolera przerwań, pamięci karty graficznej, kontrolera stacji dyskietek, karty dźwiękowej itd. Wśród możliwych zastosowań portów jest również zapis i odczyt danych z/do pamięci CMOS. Wykorzystywane są do tego celu dwa porty o adresach 70H i 71H (litera “H” oznacza wartości szesnastkowe). Pierwszy z nich to tzw. port adresowy, potrzebny do podania adresu w pamięci CMOS, do którego chcemy się odwołać. Port 71H służy do odczytu i zapisu danych w CMOS-ie.

W 32-bitowych systemach Microsoftu korzystanie z portów jest utrudnione – nie możemy ich używać bezpośrednio ze względu na przyjętą przez producenta Windows filozofię blokowania dostępu do fizycznych urządzeń. Posłużymy się jednak niewielkim, dodatkowym narzędziem – rodzajem sterownika pośredniczącego pomiędzy naszą aplikacją a systemem operacyjnym.

Początkowe efekty tworzenia programu nie są może imponujące, ale przy odrobinie chęci dojdziemy do zupełnie przyzwoitych rezultatów.

Będzie to darmowa biblioteka ZLPortIO autorstwa Alexandra Zloby. Pozwala ona na podstawowe operacje odczytu i zapisu do portów. Jedynym wymaganiem jest dołączenie do projektu w Delphi dwóch bibliotek (zlportio.pas i ddkint.pas) oraz dystrybuowanie wraz z programem sterownika zlportio.sys. Wszystkie trzy wymienione zbiory należy skopiować do katalogu projektu lub umieścić w ścieżce poszukiwań kompilatora i linkera. Autor pakietu dostarcza wraz z nim przykład działania biblioteki. Możemy rozpakować i skompilować pliki z katalogu Example, a następnie wypróbować działanie programu. Sugerowałbym jednak bardzo ostrożne używanie przycisku WritePort, jeśli nie jesteśmy pewni, do jakiego portu zapisujemy dane.

Przeczytaj to!
Niebezpieczne igraszki

Zanim rozpoczniemy jakiekolwiek działania związane z BIOS-em lub pamięcią CMOS, musimy sobie uzmysłowić potencjalne niebezpieczeństwa, wynikające z takich operacji. Błędne lub wpisane pod niewłaściwy adres CMOS-u dane mogą spowodować unieruchomienie komputera! Dlatego też starajmy się nie używać operacji zapisu do portu 71H bez wyraźnej konieczności. W przypadku zawieszenia komputera spowodowanego wpisaniem do CMOS-u nieprawidłowych informacji pomóc może reset BIOS-u za pomocą odpowiedniej zworki na płycie głównej (patrz: instrukcja płyty).

Info
Strona ZLPortIO
http://www.specosoft.com
Torry’s Delphi Page
http://pl.torry.net
Mapa pamięci CMOS komputera
http://www.bioscentral.com/ misc/cmosmap.htm
Na płycie CD-ROM dołączonej do numeru, w dziale Porady | Programowanie w Delphi znajdują się dodatkowe materiały do artykułu, a w dziale Wersje pełne – Delphi 6 Personal Edition.
Więcej:bezcatnews