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ę stosun­kowo 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 moni­toró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 od­czytywane 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 infor­macji 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 sca­lony 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. od­czyt 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 rozbudo­waną (więcej niż standardowe 64 komórki) pamięć CMOS-RAM. O ile znaczenie pier­wszych 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łado­wane 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 sygnalizo­wać, ż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 pozba­wionych sensu. Wszystkie funkcje BIOS-u odmawiają w takiej sytuacji działania i po­wracają 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 mo­mencie 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 re­prezentacja 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 przer­wania. Przyczynę przerwania określa rejestr C. Bit 7 pozwala upewnić się, czy przerwa­nie 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 ko­lejnoś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 na­pię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ą wy­brane 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. Su­ma 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 zadekla­rowaną. 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 kontro­leró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:

Pamięć CMOS-RAM

553


ramdriye.sys lub SMARTDRV.EXE. Każdorazowy dostęp do bloku pamięci do­datkowej (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 od­bywa 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:):

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. Od­powiadają 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. War­tość 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 obsza­rem 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):

bity 5—4 sterownik monitora:

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 poz­bawione 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, zlokali­zowanego 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 adre­sem 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 sys­temowego 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 dyspozy­cji 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ów­no 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 spe­cyficzne 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.

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 stwier­dzenia 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 sys­temu operacyjnego. Obecnie wszystkie komputery dysponują programami konfiguracyjnymi (nieraz bardzo rozbudowanymi) zapisanymi w pamięci stałej.