Rozdział 11 Pamięć CMOS RAM


Rozdział 11.
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-Volatile 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 date 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).
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; 00h; licznik sekund zegara (BCD)
1; 01h; 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; 0Ah; rejestr A
11; 0Bh; rejestr B
12; 0Ch; rejestr C
13; 0Dh; rejestr D
14; 0Eh; rejestr E
15; 0Dh; rejestr F
16; 10h; typy napędów dysków elastycznych
Organizacja pamięci CMOS

Komórka; Adres; Zawartość
0; 00h; licznik sekund zegara (BCD)
1; 01h; 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; 0Ah; rejestr A
11; 0Bh; rejestr B
12; 0Ch; rejestr C
13; 0Dh; rejestr D
14; 0Eh; rejestr E
15; 0Dh; rejestr F
16; 10h; typy napędów dysków elastycznych
17; 11h; 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; 1Ah; bajt dodatkowych informacji dotyczÄ…cych drugiego dysku twardego
27-31; 1Bh -1Fh; 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ść (0Ah - 0Fh) 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).

Czas i data kodowane są do postaci BCD, tzn. w jednym bajcie mieszczą się dwie cyfry dziesiętne od 0 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 0Ah)

bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 0; bit 0;

bit 7=0 - pola daty/czasu dostępne,
1 - pola informacyjne daty/czasu w fazie aktualizacji.
bity 6-4=Podstawa czasu. Standardowo zapisana jest tu wartość 010, odpowiadająca 32 768 Hz.
bity 3-0=Współczynnik podziału T. Standardowo T = 0110#b = 6#d, co daje
jednostkÄ™ czasu 65 536/2^T = 1024 Hz.

Komórki 0, 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 f#min = 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 l 024 Hz. Wspomniany przebieg prostokątny wyprowadzany jest wprawdzie na
wyjście układu MC 146818, ale w architekturze PC/AT nie znajduje on żadnego zastosowania (mowa o samym przebiegu,
nie o generowanym przez niego przerwaniu okresowym).

Rejestr B (przemieszczenie 0Bh)

bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 0; bit 0;

bit 7=0 - aktywne (wartość domyślna),
1 - zablokowane.
bit 6=Generacja przerwania okresowego:
0 - zablokowana (wartość domyślna),
1 - aktywna.
bit 5=Generacja przerwania od alarmu:
0 - zablokowana (wartość domyślna),
1 - aktywna.
bit 4=Generacja przerwania od cyklu aktualizowania:
0 - zablokowana (wartość domyślna),
1 - aktywna.
bit 3 Generacja sygnału prostokątnego:
0 - zablokowana (wartość domyślna),
1 - aktywna.
bit 2=Kodowanie liczb:
0 - binarne,
1 - BCD (wartość domyślna).
bit 1=Tryb pracy zegara:
0 - 12-godzinny,
1 - 24-godzinny (wartość domyślna).
bit 0=Funkcja czasu letniego:
0 - wyłączona (wartość domyślna),
1 - aktywna.

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

(S/ave). 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.
Bit 2 steruje sposobem kodowania liczb reprezentujących czas i datę. Możliwa jest reprezentacja binarna (8 bitów może przedstawiać liczby O - 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. P M) kodowane są jako 81 h - 92h.
Rejestr C (0Ch)

bit 7; bit 8; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bit 7=Żądanie IRQ od MC 1468 18:
0 - nie,
1 - tak.
bit 6 Źródłem IRQ jest przerwanie okresowe:
0 - nie,
1 - tak.
bit 5 Źródłem IRQ jest przerwanie od cyklu aktualizacji:
0 - nie,
1 - tak.
bit 4 Źródłem IRQ jest przerwanie od alarmu:
0 - nie,
1 - tak.
bity 3-0 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 MC 146818. Jeżeli tak, to bity 6, 5 i 4 precyzują jego rodzaj. Jednoczesne wystąpienie kilku rodzajów przerwań od układu MC146818 jest możliwe pod warunkiem, że został}' 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 (0Dh)

bit 7; bit 8; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bit 7 Bit wiarygodności danych:
0 - zbyt niski poziom napięcia baterii, dane niewiarygodne,
1 - poziom napięcia baterii prawidłowy, dane wiarygodne.
bity 6-0 Zarezerwowane.

Układ MC 146818 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 (0Eh)

bit 7; bit 8; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bit 7 Stan napięcia zasilającego układ MC 146818:
0 - nastąpiła przerwa w zasilaniu,
1 - zasilanie ciągłe.
bit 6 Suma kontrolna danych przechowywanych w układzie:
0 - nieprawidłowa,
1 - prawidłowa.
bit 5 Rzeczywisty stan konfiguracji:
0 - zgodny z zawartością pamięci CMOS,
1 - niezgodny z zawartością pamięci CMOS.
bit 4 Rzeczywisty rozmiar pamięci:
0 - zgodny z zadeklarowanym w pamięci CMOS,
1 - inny niż zadeklarowano w pamięci CMOS.
bit 3 Wynik inicjalizacji dysku twardego:
0 - inicjalizacja prawidłowa,
1 - błąd kontrolera lub dysku.
bit 2 Czas zegara CMOS:
0 - błędny,
1 - wiarygodny.
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 lOh - 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.
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 (0Fh)

bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bity 7-0 Przyczyna restartu systemu:
00h - "gorący" restart przez naciśnięcie klawiszy Ctrl-Alt-Del,
01h - restart programów}' 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 - jak 07h,
09h - restart po przemieszczeniu bloku pamięci dodatkowej
funkcjÄ… 87h przerwania 15h,
0Ah - daleki skok pod adres wskazany wektorem 0040:0067h
bez sygnału EOI,
0Bh - wykonanie instrukcji iret z adresem powrotu danym
w wektorze 0040:0067h
0Ch - wykonanie instrukcji retf z adresem powrotu danym
w wektorze 0040:0067h.

Rejestr F zawiera informacje o przyczynach przeprowadzenia restartu systemu (CPU resef). 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 00h).
• Powrót procesora 80286 z trybu chronionego (protected modÄ™} do rzeczywistego (real modÄ™}. O ile realizacja przejÅ›cia do trybu chronionego (funkcja 87h przerwania 15h BIOS-u) jest stosunkowo prosta, o tyle powrót z niego jest kÅ‚opotliwy i wymaga wyzerowania procesora (resef) - procesory 80386 i 80486 zapewniajÄ… znacznie usprawnionÄ… obsÅ‚ugÄ™ przeÅ‚Ä…czania trybów. Z trybu chronionego korzystajÄ… programy operujÄ…ce na pamiÄ™ci dodatkowej (extended memory}, na przykÅ‚ad ramdrive.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 l On CMOS-RAM umieszczane są informacje o zainstalowanych napędach dysków elastycznych.

bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bity 7-4=Typ pierwszego napędu dysków elastycznych (zwykle A:):
0000 - brak napędu,
0001 -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.
bity 3-0=Typ drugiego napędu dysków elastycznych (zwykle B:), kodowany jak powyż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 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bity 7-4=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.
bity 4-0=Typ drugiego dysku twardego (zwykle D:), kodowany analogicznie jak poprzednio (numer typu większego od 15 zapisany jest w komórce l Ah).



Pod wartością 111 U 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ż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 10h - 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.

bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;

bity 7-6=Liczba zainstalowanych napędów dysków elastycznych (gdy bit 0 = 1);
00 - jeden napęd,
01 - dwa napędy.
bity 5-4=Sterownik monitora:
00 - sterownik wyposażony we własny BIOS (EGA, VGA itp.),
01 - sterownik CGA pracujący w trybie 40 znaków/wiersz,
10 - sterownik CGA pracujący w trybie 80 znaków/wiersz,
11 - monochromatyczny sterownik monitora (MDA, Hercules).
bity 3-2=Zarezerwowane.
bit 1-Koprocesor arytmetyczny 80x87:
0 - brak,
1 - obecny.
bit 0-Obecność napędu dysków elastycznych:
0 - brak napędów,
1 - obecny co najmniej jeden napęd.

Funkcje BIOS obsługujące pamięć konfiguracji

Opisane poniżej wybrane funkcje przerwania l Ah 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 00h i 01h).
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 00h

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ść różną od zera (w istocie
AL zwraca stan znacznika przepełnienia licznika, umieszczonego pod adresem 0040:0070h). Wywołanie funkcji 00h
powoduje w takim przypadku również wy-zerowanie rejestru przepełnienia.

Parametry wejściowe:
AH 00h.
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 01h

Działanie:

Funkcja ta ma działanie odwrotne do funkcji 00h, 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 01h;
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 00Oh;
CL minuty (w kodzie BCD);
CH godziny (w kodzie BCD);
DH sekundy (w kodzie BCD);
CF 1l 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;
CL minuty (w kodzie BCD);
CH godziny (w kodzie BCD);
DH sekundy (w kodzie BCD);
DL wartość l aktywuje funkcję czasu letniego, wartość 0 ją dezaktywuje;
DH sekundy (BCD).

Wartości zwracane:
AH00h;
CF 1 w przypadku wystąpienia błędu.

Przykład:
;ustawienie zegara CMOS na 08:30:10
mov ah,03h ;funkcja 03h
mov ch,08h ;godzina 08
mov cl,30h ;minut 30
mov dh,10h ;sekund 10
mov dl,00h ;czas normalny
int lah ;wywołaj przerwanie 1Ah

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 1 w przypadku wystąpienia błędu.

Funkcja 05h

Działanie:

Funkcja ustawia datę w kalendarzu układu MC 146818.

Parametry wejściowe:
AH 05h;
CL dwie ostatnie cyfry roku (w kodzie BCD):
CH stulecie (w kodzie BCD);
DL dzień (w kodzie BCD);
DH miesiÄ…c (w kodzie BCD).

Wartości zwracane:
CF 1 w przypadku wystąpienia błędu.

Funkcja 06h

Działanie:

Funkcja 06h programuje czas alarmu zegara czasu rzeczywistego układu MC 146818. 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 1 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 1 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.
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 71 h 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 zachowania bezpieczeÅ„stwa należy zawsze stosować schemat dziaÅ‚ania podobny do podanego poniżej:

; ;pobranie bajtu konfiguracji
in al,70h ;wczytaj bajt z portu 70h
and al,11000000b ;wyzeruj 6 najmłodszych pozycji
;bity 7 i 6 pozostajÄ… bez zmian
or al,14h ;adres bajtu konfiguracji sprzętowej (14h)
;bity 7 i 6 pozostajÄ… bez zmian
out 70h,al ;ustaw rejestr adresowy CMOS
in al,71h ;pobierz bajt konfiguracji do AL

Zapis nowej wartości do którejkolwiek z komórek 1Oh - 4Dh 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 1Oh - 4Dh. 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.

Wyszukiwarka

Podobne podstrony:
Rozdział 11 (tł Kath)
13 Rozdzial 11
12 rozdział 11 c6lubhaczn3mh474dvw57lqvfijouhuodptl2ba
Rozdział 11
Rozdzial 11 (2)
Siderek12 Tom I Część II Rozdział 11
11 Rozdział 11 (5)
Świt dalszy ciąg BD Rozdział 11

więcej podobnych podstron