920


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.



Wyszukiwarka

Podobne podstrony:
920
e rachunkowosc pl artykul php view=920
920
IO PMS 920
IO.PMS-920, Instrukcje, aplisens, dtr
PMT 920
920
Zestawienie wtyczek A3 zegary bez CAN i z CAN (919 na 920)
920 921
Brother Fax 910, 920, 921, 930, 931, 940, 945, MFC 925, 970, 985mc Parts Manual
Instrukcja resetowania ustawień drukarki HP DJ 920
920
borland cpp builder cw11 id 920 Nieznany (2)
PMS 920
920
e rachunkowosc pl artykul php view=920
920 921

więcej podobnych podstron