Pamięć CMOS-RAM 545
Rozdział 10. Pamięć CMOS-RAM
Oprócz pamięci operacyjnej (RAM) i stałej (ROM), w komputerze PC/AT występuje trzeci rodzaj pamięci, a mianowicie CMOS-RAM, zwany też NVR (ang. Non- Yolatile RAM— pamięć nieulotna o swobodnym dostępie). Pamięć ta charakteryzuje się stosunkowo dużym czasem dostępu (co w tym przypadku nie odgrywa żadnej roli) i bardzo małym poborem prądu. W przeciwieństwie do pamięci RAM, nie wymaga ona odświeżania, a jedynie stałego zasilania napięciem rzędu kilku woltów.
Mówiąc o pamięci CMOS w komputerze PC mamy zwykle na myśli nie tylko komórki pamięci, lecz również zespół układów z nią stowarzyszonych. Należą do nich zegar czasu rzeczywistego, rejestry sterujące, port adresowy i port danych. Tak pojmowana pamięć CMOS przechowuje informacje o konfiguracji sprzętowej komputera oraz zawiera kalendarz i zegar czasu rzeczywistego.
W skład danych o konfiguracji sprzętowej systemu wchodzą między innymi informacje o liczbie i rodzaju zainstalowanych napędów dysków elastycznych, sterowników monitorów, parametry dysków twardych (liczba głowic, ścieżek, sektorów itd.) oraz dane o wielkości zainstalowanej pamięci i jej konfiguracji. W modelach PC/XT wszystkie te informacje były kodowane licznymi przełącznikami i zworami konfiguracyjnymi. Po każdorazowym załadowaniu systemu konieczne było ponadto inicjalizowanie liczników daty i czasu (poleceniami datę i time DOS-u lub za pomocą specjalnych programów obsługujących zegar czasu rzeczywistego), w przeciwnym bowiem razie ustawiały się one zawsze na godzinie 00:00 dnia l stycznia 1980 roku.
Układ pamięci CMOS w PC/AT zasilany jest z baterii lub małego akumulatora, doła-dowywanego zwykle z zasilacza sieciowego komputera. Gwarantuje to, w zależności od jakości baterii, kilkuletnią bezawaryjną pracę - nowoczesne baterie litowe mają trwałość około 10 lat. Niekiedy stosowane są też układy scalone zintegrowane z zasilaczem (DALLAS).
546
Anatomia PC
Zegar czasu rzeczywistego modeli AT pracuje w sposób całkowicie niezależny od innych elementów architektury. Zapamiętane dane o konfiguracji systemu pozostają w pamięci CMOS dowolnie długo — jeżeli oczywiście pominąć przykry efekt uboczny w postaci rozładowanego akumulatora lub zmiany w systemie dokonanej przez program Setup. W instrukcji obsługi towarzyszącej niektórym systemom można było jeszcze do niedawna znaleźć uwagę o konieczności uruchamiania komputera nie rzadziej niż co dwa tygodnie.
Zapisane w pamięci konfiguracyjnej dane o zainstalowanych elementach systemu odczytywane są każdorazowo podczas startu systemu przez zapisanie w pamięci ROM procedury diagnostycznej POST (ang. Power On Self Test) i porównywane ze stanem faktycznym, tzn. sprawdzane jest istnienie określonych układów. Na podstawie informacji zawartej w pamięci CMOS inicjalizowany jest również zegar systemowy DOS-u.
Układ scalony MC146818
Funkcję pamięci konfiguracji i zegara czasu rzeczywistego pełni w PC/AT układ scalony MC146818. Najistotniejszą część tego układu stanowi 64-komórkowa pamięć CMOS-RAM. Do każdej 8-bitowej komórki pamięci mamy swobodny dostęp, tzn. odczyt i zapis nie są poddane żadnym ograniczeniom technicznym.
Organizacja pamięci CMOS
Komórka |
Adres |
Zawartość |
0 |
OOh |
licznik sekund zegara (BCD) |
1 |
Olh |
wartość sekund alarmu (BCD) |
2 |
02h |
licznik minut zegara (BCD) |
3 |
03h |
wartość minut alarmu (BCD) |
4 |
04h |
licznik godzin zegara (BCD) |
5 |
05h |
wartość godzin alarmu (BCD) |
6 |
06h |
dzień tygodnia (BCD) |
7 |
07h |
dzień miesiąca (BCD) |
8 |
08h |
miesiąc (BCD) |
9 |
09h |
dwie ostatnie cyfry roku (BCD) |
10 |
OAh |
rejestr A |
11 |
OBh |
rejestr B |
12 |
OCh |
rejestr C |
13 |
ODh |
rejestr D |
14 |
OEh |
rejestr E |
15 |
ODh |
rejestr F |
Pamięć CMOS-RAM
547
Komórka |
Adres |
Zawartość |
16 |
lOh |
typy napędów dysków elastycznych |
17 |
llh |
zarezerwowany |
18 |
12h |
typy dysków twardych* |
19 |
13h |
zarezerwowany |
20 |
14h |
bajt konfiguracji sprzętowej |
21 |
15h |
rozmiar pamięci podstawowej w kB (LSB) |
22 |
16h |
rozmiar pamięci podstawowej w kB (MSB) |
23 |
17h |
rozmiar pamięci dodatkowej (ang. Extended Memory) zgodnie z danymi z programu Setup, w kB (LSB) |
24 |
18h |
rozmiar pamięci dodatkowej zgodnie z danymi z programu Setup, w kB (MSB) |
25 |
19h |
bajt dodatkowych informacji dotyczących pierwszego dysku twardego** |
26 |
lAh |
bajt dodatkowych informacji dotyczących drugiego dysku twardego** |
27-31 |
IBh-lFh |
zarezerwowane |
32-39 |
20h-27h |
blok danych dysku twardego typu 47 |
40-45 |
28h-2Dh |
zarezerwowane |
46 |
2Eh |
suma kontrolna (LSB) |
47 |
2Fh |
suma kontrolna (MSB) |
48 |
30h |
rozmiar pamięci dodatkowej określony przez procedury POST, w kB (LSB) |
49 |
31h |
rozmiar pamięci dodatkowej określony przez procedury POST, w kB (LSB) |
50 |
32h |
stulecie (BCD) |
51 |
33h |
dane programu Setup |
52 |
34h |
zarezerwowane |
53-60 |
35h-3Ch |
blok danych dysku twardego typu 48 |
61-63 |
3Dh-3Fh |
zarezerwowane |
* w przypadku numerów dysków twardych 1—15 ** w przypadku numerów dysków twardych 15-49 |
Pierwsze dziesięć bajtów (00h-09h) przeznaczonych jest na dane zegara i kalendarza, następne sześć (OAh-OFh) to specjalne rejestry stanu, a pozostałe przechowują różne parametry konfiguracyjne. Niektóre modele komputerów posiadają bardziej rozbudowaną (więcej niż standardowe 64 komórki) pamięć CMOS-RAM. O ile znaczenie pierwszych 64 bajtów jest ściśle określone, o tyle postać informacji zapisywanych powyżej adresu 3Fh nie jest znormalizowana. W zależności od producenta, w obszarze tym składowane są różne informacje rozszerzonego programu konfiguracyjnego (Extended Setup).
548
Anatomia PC
Czas i data kodowane są do postaci BCD, tzn. w jednym bajcie mieszczą się dwie cyfry dziesiętne od O do 9, każda przedstawiona binarnie na czterech bitach. Format BCD jest akceptowany przez funkcje BIOS; jeżeli programujemy bezpośrednio rejestry sterujące i używamy własnych funkcji obsługi zegara, nic nie stoi na przeszkodzie, by stosować format binarny. Zegar może pracować w trybie 12- lub 24-godzinnym, rozpoznawać czas letni i zimowy, określać dzień tygodnia i miesiąca. System DOS nie korzysta z tych wbudowanych w układ możliwości.
Kluczowe znaczenie dla działania całego układu CMOS-RAM mają rejestry kontrolne oznaczone literami A, B, C, D, E i F.
Rejestr A (przemieszczenie OAh)
bit? bity 6-4 bity 3-0
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
l = pola informacyjne daty/czasu w fazie aktualizacji, O = pola daty/czasu dostępne;
podstawa czasu. Standardowo zapisana jest tu wartość 010, odpowiadająca 32768 Hz;
współczynnik podziału T. Standardowo T= 0110(, = 6j, co daje jednostkę czasu 65536/2T = 1024 Hz.
Komórki O, 2, 4, 6, 7, 8, 9 i 10 aktualizowane są co sekundę (dokładnie z częstotliwością 1024 Hz). Na czas trwania aktualizacji ustawiany jest bit 7 rejestru A, co ma sygnalizować, że wartości tych bajtów mogą być nieustabilizowane. W takim momencie odczyt którejkolwiek z właśnie modyfikowanych komórek mógłby dostarczyć wartości pozbawionych sensu. Wszystkie funkcje BIOS-u odmawiają w takiej sytuacji działania i powracają do wywołującego programu z ustawionym znacznikiem CF rejestru stanu procesora.
Wartość podstawy czasu (bity 6—4) generatora odniesienia układu można ewentualnie zmieniać, co spowoduje przyspieszenie lub opóźnienie pracy zegara. Bity 3-0 określają częstotliwość sygnału prostokątnego, który jest źródłem tzw. przerwania okresowego. Dopuszczalnymi wartościami są liczby z przedziału od 3 do 15, co odpowiada fmin = 2 Hz i fmax = 8192 Hz. Wpisanie wartości OOOOh wyłącza generator. Układ inicjalizowany jest standardowo współczynnikiem równym 6, co odpowiada częstotliwości 1024 Hz. Wspomniany przebieg prostokątny wyprowadzany jest wprawdzie na wyjście układu MC146818, ale w architekturze PC/AT nie znajduje on żadnego zastosowania (mowa o samym przebiegu, nie o generowanym przez niego przerwaniu okresowym).
Rejestr B (przemieszczenie OBh)
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
Pamięć CMOS-RAM 549
bit 7 cykle aktualizowania:
l = zablokowane,
0 = aktywne (wartość domyślna);
bit 6 generacja przerwania okresowego:
1 = aktywna,
0 = zablokowana (wartość domyślna);
bit 5 generacja przerwania od alarmu:
1 = aktywna,
0 = zablokowana (wartość domyślna);
bit 4 generacja przerwania od cyklu aktualizowania:
1 = aktywna,
0 = zablokowana (wartość domyślna);
bit 3 generacja sygnału prostokątnego:
1 = aktywna,
0 = zablokowana (wartość domyślna);
bit 2 kodowanie liczb:
1 = BCD (wartość domyślna),
0 = binarne;
bit l tryb pracy zegara:
1 = 24-godzinny (wartość domyślna),
0 = 12-godzinny;
bit O funkcja czasu letniego:
1 = aktywna,
O = wyłączona (wartość domyślna).
Bit 7 tego rejestru włącza i wyłącza cykl aktualizowania czasu. Oznacza to, że zegar można w dowolnej chwili zatrzymać i ponownie uruchomić. Bit 6 otwiera i zamyka wyjście sygnału przerwań okresowych o częstotliwości definiowanej bitami 3-0 rejestru A.
W stanie aktywnym funkcji alarmu (bit 5) czas bieżący porównywany jest podczas każdego cyklu aktualizacji (co sekundę) z wartościami zapisanymi w komórkach l, 3 i 5. Pozytywny wynik porównania prowadzi do wygenerowania przerwania.
Ustawienie bitu 4 powoduje wywołanie przerwania każdorazowo po przeprowadzeniu aktualizacji czasu.
Wspólne wyjście sygnałów przerwań wszystkich trzech rodzajów (okresowe, od alarmu i od aktualizacji) kierowane jest do wejścia IR8 drugiego kontrolera przerwań 8259A (SIave). Przerwanie to obsługiwane jest przez procedurę wskazywaną wektorem INT 70h, która w swej końcowej fazie wywołuje przerwanie 4Ah. Standardowa procedura obsługi przerwania 4Ah składa się z samej instrukcji iret. Możliwe jest zainstalowanie własnego programu rezydentnego, podejmującego określoną akcję na przykład w momencie zrównania się czasu rzeczywistego z nastawą alarmu. Program taki musi za każdym razem badać bit 5 rejestru B.
550
Anatomia PC
Bit 2 steruje sposobem kodowania liczb reprezentujących czas i datę. Możliwa jest reprezentacja binarna (8 bitów może przedstawiać liczby 0-255) lub BCD (dwie czwórki bitów reprezentują dowolne cyfry dziesiętne, dając liczbę od 00 do 99).
Zegar może pracować w trybie 12- lub 24-godzinnym. W trybie 12-godzinnym czas po godzinie 12 w południe reprezentowany jest przez ustawienie najbardziej znaczącego bitu licznika godzin, tzn. godziny popołudniowe (ang. PM) kodowane sąjako 81h-92h.
Rejestr C (OCh)
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
bit?
bito
bit 5
bit 4
bity 3-0
żądanie IRQ od MC 146818? l = tak,
0 = nie;
źródłem IRQ jest przerwanie okresowe?
1 = tak,
0 = nie;
źródłem IRQ jest przerwanie od cyklu aktualizacji?
1 = tak,
0 = nie;
źródłem IRQ jest przerwanie od alarmu?
1 = tak,
O = nie;
zarezerwowane.
Procedura obsługi przerwania 70h (4Ah) musi zachować się stosownie do źródła przerwania. Przyczynę przerwania określa rejestr C. Bit 7 pozwala upewnić się, czy przerwanie w ogóle pochodzi od układu MC146818. Jeżeli tak, to bity 6, 5 i 4 precyzująjego rodzaj. Jednoczesne wystąpienie kilku rodzajów przerwań od układu MC 146818 jest możliwe pod warunkiem, że zostały one zbiorowo dopuszczone (przez ustawienie bitów 6-4 rejestru B). Procedura obsługi przerwania musi wtedy również zadecydować o kolejności ich realizacji.
Rejestr D (ODh)
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
bit?
bit wiarygodności danych:
l = poziom napięcia baterii prawidłowy, dane wiarygodne,
O = zbyt niski poziom napięcia baterii, dane niewiarygodne;
bity 6—0 zarezerwowane.
Pamięć CMOS-RAM
551
Układ MC146818 ma wbudowaną funkcję stałej kontroli poziomu napięcia zewnętrznej baterii, podtrzymującej jego zawartość przy wyłączonym napięciu zasilania. Spadek napięcia poniżej określonej wartości oznacza wysokie prawdopodobieństwo częściowej utraty danych. Układ ustawia wówczas bit 7 rejestru D, sygnalizując procedurom POST, że nie należy polegać na zapisanych w nim danych o konfiguracji.
Rejestr E (OEh)
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
bit 7
bito
bit 5
bit 4
bit 3
bit 2
stan napięcia zasilającego układ MC146818: l = zasilanie ciągłe,
0 = nastąpiła przerwa w zasilaniu;
suma kontrolna danych przechowywanych w układzie:
1 = prawidłowa,
0 = nieprawidłowa;
rzeczywisty stan konfiguracji:
1 = niezgodny z zawartością pamięci CMOS,
0 = zgodny z zawartością pamięci CMOS;
rzeczywisty rozmiar pamięci:
1 = inny niż zadeklarowano w pamięci CMOS,
0 = zgodny z zadeklarowanym w pamięci CMOS;
wynik inicjalizacji dysku twardego:
1 = błąd kontrolera lub dysku,
0 = inicjalizacja prawidłowa;
czas zegara CMOS:
1 = wiarygodny,
O = błędny;
bity 1-0 zarezerwowane.
Procedury POST, które każdorazowo po włączeniu napięcia zasilania kontrolują wybrane elementy systemu, odkładają w tym rejestrze wyniki przeprowadzonych testów.
Jeżeli napięcie baterii zasilającej układ CMOS-RAM spadnie choć na chwilę poniżej pewnej ustalonej wartości (co grozi uszkodzeniem zawartych w nim danych), układ sam ustawia bit 7 rejestru D. Stan tego bitu odczytywany jest przez jedną z procedur POST, a wynik kontroli umieszczany jest w bicie 7 rejestru E.
Bit 6 rejestru E informuje, czy suma kontrolna komórek l Oh-2Dh jest prawidłowa. Suma ta obliczana jest każdorazowo przez procedury POST i umieszczana w komórkach 2Eh i 2Fh.
POST sprawdza również, czy zadeklarowane elementy konfiguracji systemu faktycznie występują i czy wielkość zainstalowanej w systemie pamięci zgodna jest z zadeklarowaną. Wyniki tych porównań wprowadzane są do bitów 5 i 4 rejestru E.
552
Anatomia PC
Procedury POST czynią próby zainicjowania każdego z obecnych w systemie kontrolerów. Wynik tej próby w odniesieniu do kontrolera dysków twardych umieszczany jest w bicie 3.
Bit 2 informuje, czy aktualny czas zegara spełnia pewne wymagania formalne, tzn. czy liczby przedstawiające godziny, minuty i sekundy mieszczą się w przeznaczonych dla siebie przedziałach. Przykładem błędnego (w tym znaczeniu) czasu może być 25:92:70.
Rejestr F (OFh)
bit 7 |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit 1 |
bitO |
bity 7-0
przyczyna restartu systemu:
OOh = „gorący" restart przez naciśnięcie klawiszy Ctrl-Alt-Del,
Olh = restart programowy po wyznaczeniu rozmiaru pamięci,
02h = restart programowy po wykonaniu testu pamięci,
03h = restart po błędzie parzystości pamięci,
04h = restart programowy przez skok do adresu FFFFOh,
05h = restart po zgłoszeniu sygnału EOI do kontrolera przerwań,
wyzerowanie klawiatury i daleki skok pod adres wskazany
wektorem 0040:0067h,
06h = restart po poprawnym wykonaniu testu trybu chronionego, 07h = restart po błędzie testu trybu chronionego, 08h=jak07h, 09h = restart po przemieszczeniu bloku pamięci dodatkowej
funkcją 87h przerwania 15h, OAh = daleki skok pod adres wskazany wektorem 0040:0067h
bez sygnału EOI, OBh = wykonanie instrukcji IRET z adresem powrotu danym
w wektorze 0040:0067h, OCh = wykonanie instrukcji RETF z adresem powrotu danym
w wektorze 0040:0067h.
Rejestr F zawiera informacje o przyczynach przeprowadzenia restartu systemu (CPU reset). Dane te wykorzystuje BIOS przy ponownym uruchamianiu systemu. Najczęściej występuje jedna z dwóch sytuacji:
naciśnięcie przez użytkownika klawiszy Ctrl-Alt-Del (status OOh);
powrót procesora 80286 z trybu chronionego (protected modę) do rzeczywistego
(real modę). O ile realizacja przejścia do trybu chronionego (funkcja 87h przer
wania 15h BIOS-u) jest stosunkowo prosta, o tyle powrót z niego jest kłopotliwy
i wymaga wyzerowania procesora (reset) — procesory 80386 i 80486 zapewniają
znacznie usprawnioną obsługę przełączania trybów. Z trybu chronionego korzys
tają programy operujące na pamięci dodatkowej (extended memory), na przykład
Pamięć CMOS-RAM
553
ramdriye.sys lub SMARTDRV.EXE. Każdorazowy dostęp do bloku pamięci dodatkowej (położonego powyżej granicy l MB, a więc niedostępnego w trybie rzeczywistym) wymaga przejścia CPU w tryb chroniony, z którego powrót odbywa się właśnie w ten specyficzny sposób.
Napędy dysków elastycznych
W komórce lOh CMOS-RAM umieszczane są informacje o zainstalowanych napędach dysków elastycznych.
bit? |
bit6 |
bit 5 |
bit 4 | bit 3 |
bit 2 |
bitl |
bitO |
bity 7-4
bity 3-0
typ pierwszego napędu dysków elastycznych (zwykle A:):
= brak napędu,
= 5.25" 360 kB,
0010 = 5.25" 1.2 MB,
0011=3.5", 720 kB,
0100 = 3.5", 1.44 MB,
inne kombinacje są zarezerwowane dla przyszłych formatów;
typ drugiego napędu dysków elastycznych (zwykle B:), kodowany jak po wyżej.
Dyski twarde
Numery identyfikacyjne typów zainstalowanych dysków twardych określa bajt 18. Odpowiadają one typom dysków zawartym w bazie danych programu Setup.
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
bity 7-4
bity 4-0
typ pierwszego dysku twardego (zwykle C:):
0000 = nie jest zainstalowany,
0001-1110 = kodowane binarnie typy 1-14,
1111= typy 15—255. Numer typu znajduje się w komórce 19h;
typ drugiego dysku twardego (zwykle D:), kodowany analogicznie jak poprzednio (numer typu większego od 15 zapisany jest w komórce lAh).
Pod wartością 111 lb kryje się cała rzesza dostępnych na rynku dysków twardych. Wartość ta oznacza, że dane dotyczące konkretnego modelu dysku należy pobrać z tablicy parametrów BIOS, zawierającej oddzielne dla każdego typu dysku zestawy danych. Numer odpowiedniej pozycji (indeks) tej tablicy znajduje się w komórce 19h (dla dysku pierwszego) lub lAh (dla dysku drugiego) pamięci CMOS. Układ i znaczenie pozycji tabeli nie są unormowane i różnią się w zależności od wytwórcy BIOS i komputera.
Różnorodność parametrów fizycznych i logicznych produkowanych dysków znacznie wykracza poza liczbę 256, zaś dane stale powstających nowych rozwiązań nie mogą być na czas wprowadzane do każdego BIOS-u. Problem ten rozwiązano dopuszczając moż-
554
Anatomia PC
liwość definiowania parametrów dysku. Do tego celu przeznaczone są na ogół typy 47 i 48 (praktycznie we wszystkich sprzedawanych obecnie komputerach PC dyski twarde są definiowane jako typ 47). Każdy z nich dysponuje jednakowym 8-bajtowym obszarem w pamięci CMOS-RAM, rozpoczynającym się pod adresem 20h (typ 47) lub 35h (typ 48). Poszczególne komórki tych bloków mają następujące znaczenia:
Numer komórki |
Znaczenie |
0 |
liczba cylindrów (LSB) |
1 |
liczba cylindrów (MSB) |
2 |
liczba głowic |
3 |
początek strefy prekompensacji zapisu (LSB) |
4 |
początek strefy prekompensacji zapisu (MSB) |
5 |
numer cylindra parkowania (LSB) |
6 |
numer cylindra parkowania (MSB) |
7 |
liczba sektorów na ścieżkę |
Pamięć
Rozmiar pamięci podstawowej systemu określony jest zawartością komórek 15h (LSB) i 16h (MSB) CMOS-RAM. Utworzona z połączenia zawartości tych komórek 16-bitowa liczba reprezentuje rozmiar pamięci w kilobajtach. Wielkość pamięci dodatkowej (ex-tended memory) deklarowana przez użytkownika w trakcie sesji z programem Setup umieszczana jest w komórkach 17h (LSB) i 18h (MSB). Rozmiar pamięci dodatkowej faktycznie obecnej w systemie określany jest przez procedury POST i wprowadzany do komórek 30h (LSB) i 31h (MSB).
Suma kontrolna
Komórki lOh—2Dh objęte są sumą kontrolną, obliczaną przez BIOS każdorazowo przy uruchamianiu systemu. Suma ta stanowi 16-bitową liczbę będącą wynikiem zwykłego dodawania zawartości komórek. Odkładana jest ona w bajtach 2Eh (LSB) i 2Fh (MSB).
W pozostałych, nie objętych standardem komórkach zapisywane są takie informacje, jak szybkości zegarów taktujących, szerokości magistral, specyficzne funkcje pamięci (sha-dowing, caching, paging).
Z zarezerwowanych bajtów i bitów różni wytwórcy sprzętu korzystają w różny sposób. Na ogół nie należy używać tych komórek do własnych celów.
Bajt konfiguracji sprzętowej
W komórce 14h składowane są informacje o liczbie zainstalowanych napędów dysków elastycznych, o podstawowym sterowniku monitora (ang. primary display) i ewentualnej obecności koprocesora arytmetycznego.
Pamięć CMOS-RAM
555
bit? |
bito |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bitl |
bitO |
bity 7-6 liczba zainstalowanych napędów dysków elastycznych (gdy bit 0=1):
= jeden napęd,
= dwa napędy;
bity 5—4 sterownik monitora:
= sterownik wyposażony we własny BIOS (EGA, VGA itp.),
= sterownik CGA pracujący w trybie 40 znaków/wiersz,
= sterownik CGA pracujący w trybie 80 znaków/wiersz,
= monochromatyczny sterownik monitora (MDA, Hercules);
bity 3-2 zarezerwowane;
bit l koprocesor arytmetyczny 80x87:
l = obecny,
0 = brak;
bit O obecność napędu dysków elastycznych:
1 = obecny co najmniej jeden napęd,
O = brak napędów.
Funkcje BIOS obsługujące pamięć konfiguracji
Opisane poniżej wybrane funkcje przerwania lAh BIOS-u umożliwiają dostęp zarówno do kalendarza i zegara czasu rzeczywistego zawartego w pamięci CMOS, jak i zegara systemowego DOS-u. Funkcje te operują wyłącznie na liczbach w formacie BCD (z wyjątkiem funkcji OOh i Olh).
Jeżeli próba dostępu do pamięci CMOS miała miejsce w momencie aktualizacji, operacja zapisu nie dochodzi do skutku, a wyniki zwracane w rejestrach procesora pozbawione są sensu. W takiej sytuacji ustawiany jest wskaźnik CF rejestru stanu procesora i operację należy powtórzyć.
Funkcja OOh
Działanie:
Funkcja ta odczytuje stan 32-bitowego licznika impulsów zegara systemowego, zlokalizowanego pod adresem 0040:006Eh (bardziej znaczące słowo) i 0040:006Ch (mniej znaczące słowo). Zwracana jest liczba impulsów zliczonych od godziny 00:00. Jeżeli system pracował dłużej niż 24 godziny, to rejestr AL zawiera wartość lQżną od zera (w istocie AL zwraca stan znacznika przepełnienia licznika, umieszczonego pod adresem 0040:0070h), Wywołanie funkcji OOh powoduje w takim przypadku również wy-zerowanie rejestru przepełnienia.
556 Anatomia PC
Parametry wejściowe:
AH OOh.
Wartości zwracane:
AL zawartość znacznika przepełnienia (0040:0070h);
CX bardziej znaczące słowo licznika impulsów;
DX mniej znaczące słowo licznika impulsów.
Funkcja 01 h
Działanie:
Funkcja ta ma działanie odwrotne do funkcji OOh, tzn. wpisuje do licznika zegara systemowego zadaną wartość. Umieszczony pod adresem 0040:0070h znacznik przepełnienia jest przez tę funkcję zerowany.
Parametry wejściowe:
AH Olh;
CX bardziej znaczące słowo licznika impulsów;
DX mniej znaczące słowo licznika impulsów.
Funkcja 02h
Działanie:
Funkcja ta odczytuje stan zegara czasu rzeczywistego układu MC 146818.
Parametry wejściowe:
AH 02h.
Wartości zwracane:
AH OOh;
CL minuty (w kodzie BCD);
CH godziny (w kodzie BCD);
DH sekundy (w kodzie BCD);
CF l w przypadku wystąpienia błędu.
Funkcja 03h
Działanie:
Funkcja ta ustawia stan zegara czasu rzeczywistego układu MC 146818.
Parametry wejściowe:
AH 03h;
Pamięć CMOS-RAM
557
CL minuty (w kodzie BCD);
CH godziny (w kodzie BCD);
DH sekundy (w kodzie BCD);
DL wartość l aktywuje funkcję czasu letniego, wartość O jądezaktywuje;
DH sekundy (BCD).
Wartości zwracane:
AH OOh;
CF l w przypadku wystąpienia błędu.
Przykład:
mov ah,03h mov ch,08h mov cl,30h mov dh,lOh mov dl,OOh int lah
ustawienie zegara CMOS na 08:30:10
funkcja 03h
godzina 08
minut 30
sekund 10
czas normalny
wywołaj przerwanie lAh
Funkcja 04h
Działanie:
Funkcja ta odczytuje datę z kalendarza układu MC 146818.
Parametry wejściowe:
AH 04h.
Wartości zwracane:
CL dwie ostatnie cyfry roku (w kodzie BCD);
CH stulecie (w kodzie BCD);
DL dzień (w kodzie BCD);
DH miesiąc (w kodzie BCD);
CF l w przypadku wystąpienia błędu.
Funkcja 05h
Działanie:
Funkcja ustawia datę w kalendarzu układu MC146818.
Parametry wejściowe:
AH 05h;
CL dwie ostatnie cyfry roku (w kodzie BCD);
CH stulecie (w kodzie BCD);
558 Anatomia PC
DL dzień (w kodzie BCD);
DH miesiąc (w kodzie BCD).
Wartości zwracane:
CF l w przypadku wystąpienia błędu.
Funkcja 06h
Działanie:
Funkcja 06h programuje czas alarmu zegara czasu rzeczywistego układu MC146818. Osiągnięcie przez zegar zadanego czasu alarmu wyzwala przerwanie 4Ah. Standardowa procedura obsługi tego przerwania zawiera instrukcję iret (natychmiastowy powrót z przerwania), ale można j ą rozbudować stosownie do własnych potrzeb.
Parametry wejściowe:
AH 06h;
CL minuta alarmu (w kodzie BCD);
CH godzina alarmu (w kodzie BCD);
DH sekunda alarmu (w kodzie BCD).
Wartości zwracane:
CF l w przypadku wystąpienia błędu.
Funkcja 07h
Działanie:
Funkcja ta powinna poprzedzać wywołanie funkcji 06h, usuwając z rejestrów alarmu ewentualne wcześniejsze wartości.
Parametry wejściowe:
AH 07h.
Wartości zwracane:
CF l w przypadku wystąpienia błędu.
Bezpośredni dostęp do pamięci CMOS
Dostęp do pamięci CMOS zorganizowany jest w bardzo naturalny sposób. Do dyspozycji programisty stoi rejestr adresowy, za pomocą którego lokalizuje się żądaną komórkę oraz dwukierunkowy rejestr danych umożliwiający zapis lub odczyt jej zawartości.
Pamięć CMOS-RAM
559
Każdy z 64 bajtów pamięci CMOS jest dostępny bez ograniczeń, tzn. można go zarówno odczytać, jak i wpisać do niego dowolną wartość. Oddzielnym zagadnieniem jest, czy po takiej modyfikacji uda nam się uruchomić system. W normalnych warunkach wszelkich wpisów do pamięci CMOS dokonuje program Setup, który uwzględnia specyficzne elementy organizacji pamięci konfiguracji. Wszyscy, którzy z jakichkolwiek względów chcą korzystać w bezpośredni sposób z pamięci CMOS, muszą przestrzegać zasad podanych poniżej.
Port 71h jest dwukierunkowym rejestrem danych CMOS.
Port 70h stanowi rejestr adresowy pamięci CMOS. Rejestr ten nie przynależy
jednak w całości do pamięci CMOS: bit 7 rejestru 70h steruje przełącznikiem
blokady przerwania NMI (porównaj rysunek 6.7). Do zaadresowania 64 bajtów
wystarcza sześć najmniej znaczących pozycji bitowych rejestru 70h. Dla zacho
wania bezpieczeństwa należy zawsze stosować schemat działania podobny do
podanego poniżej:
in al,70h
and al,11000000b
or al,14h
out 70h,al in al,71h
pobranie baj tu konfiguracji wczytaj bajt z portu 70h wyzeruj 6 najmłodszych pozycji bity 7 i 6 pozostają bez zmian adres baj tu konfiguracji sprzętowej bity 7 i 6 pozostają bez zmian ustaw rejestr adresowy CMOS pobierz bajt konfiguracji do AL
(14h)
• Zapis nowej wartości do którejkolwiek z komórek lOh^łDh wymaga korekcji sumy kontrolnej zapisanej w bajtach 4Eh (LSB) i 4Fh (MSB). Suma ta stanowi 16-bitowy wynik zwykłego dodawania zawartości wszystkich bajtów w obszarze komórek lOh^łDh. Obliczana jest ona przez BIOS przy uruchamianiu systemu i porównywana z sumą odłożoną w komórkach 4Eh i 4Fh. W przypadku stwierdzenia niezgodności proces ładowania systemu nie odbędzie się. BIOS zażąda od użytkownika przeprowadzenia ponownej sesji z programem Setup, wyświetlając zwykle komunikat „CMOS checksum mismatch".
Na koniec jeszcze jedna uwaga odnośnie programu Setup. Starsze wersje komputerów AT nie posiadały tego programu w pamięci stałej, dysponując w zamian odpowiednim programem narzędziowym (SETUP.EXE lub SETUP.COM) uruchamianym z poziomu systemu operacyjnego. Obecnie wszystkie komputery dysponują programami konfiguracyjnymi (nieraz bardzo rozbudowanymi) zapisanymi w pamięci stałej.