Piotr Metzger Adam Jełowicki Anatomia PC wydanie V poprawione i uzupełnione Kolejne wydanie znanej książki będącej całościowym omówieniem architektury komputerów zgodnych z IBM PC. W książce omówiono: elementy płyty głównej Ś procesor, układy wieloprocesorowe, magistralę systemową; układy obsługi przerwań Ś układy bezpośredniego dostępu do pamięci, układy czasowe; pamięci masowe Ś sterowniki i napędy dysków twardych i elastycznych, techniki zapisu; komunikację z urządzeniami peryferyjnymi Ś interfejs równoległy i szeregowy; urządzenia wejściaŚ klawiaturę, myszkę, j oystick oraz ich obsługę programowania; konfigurację systemu Ś program setup. Wydanie piąte uzupełniono o opis układów pamięci i trybów EPP i ECP złącza równoległego. Projekt okładki: Maciej Pasek, „ARTGRAF" Copyright ę HELION 1999 ISBN: 83-7197-182-6 Wydawnictwo HELION ul. Chopina 6, 44-100 GLIWICE tel/fax.: (32) 230-98-63, (32) 232-22-19 e-mail: helion@helion.com.pl. http://www.helion.com.pl (najnowszy katalog, możliwość zamawiania książek przez Internet) Występujące w tekście znaki są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Printed in Poland. * * * Rozdzial 1 Rozdział 1. Komunikacja procesora z innymi elementami architektury komputera Każda z opisanych w tym rozdziale konfiguracji sprzętowych posiada centralny ośrodek zarządzania, którym jest procesor. Najnowsze osiągnięcia w technologii produkcji układów scalonych pozwalają na realizację coraz to potężniejszych mikroprocesorów. Jednak bez względu na szerokość ich magistral, częstotliwość pracy czy wielkość zintegrowanej w układzie pamięci, pierwotna zasada działania pozostaje - przynajmniej na razie - bez większych zmian. Procesor Rozwój mikroelektroniki i technologii sprzyja opracowywaniu coraz to potężniejszych mikroprocesorów. Postęp w miniaturyzacji pozwala na zwiększenie stopnia upakowania i wzrost częstotliwości taktującej. Dobrze opanowana jest technika 0,35 um a już obserwuje się przejście w kierunku 0,25 um, a nawet 0,18 um. To dzięki temu nieustannemu zmniejszaniu rozmiarów elementarnych tranzystorów (mimo stałego wzrostu ich liczby) pobór mocy nowych procesorów mieści się w granicach zdrowego rozsądku. Konstrukcja komputera PC podlega również stałej ewolucji, wymuszanej przez wymagania nakładane ze strony współczesnego oprogramowania. „Pamięciożeme" aplikacje i rozszerzenia multimedialne są w stanie zniwelować każdą sprzętową inwestycję. Rynek przyjmuje z wdzięcznością nowe opracowania procesorów gdyż częsty brak kompatybilności z poprzednimi modelami zmusza do wymiany płyt głównych i stanowi dźwignię napędową do nowych zakupów. Niezależnie od częstotliwości taktującej i charakterystycznych dla danej firmy rozwiązań indywidualnych każdy mikroprocesor da się przedstawić jako zespół współpracujących ze sobą bloków funkcjonalnych (rysunek 1.1). Architektura komputera PC zakłada bardzo silną więź mikroprocesora z pamięcią operacyjną. W niej to bowiem przechowywane są dane i rozkazy, tam też odsyła się wyniki obliczeń. Za współpracę z pamięcią odpowiada wyizolowany blok komunikacyjny (BU - Bus Unit). Połączenie realizowane jest zwykle w formie dwóch odseparowanych od siebie magistral: oddzielnie dla danych (w tym kodu) i adresów. Zarządzanie ruchem na magistralach gwarantuj ą dodatkowe sygnały sterujące. Konieczność zapewnienia płynnego funkcjonowania procesora wymaga, by dane do wykonania (kod programowy) pobierane były w większych porcjach i gromadzone w kolejce, gdzie oczekują na wykonanie. Każdy ze spoczywających tu bajtów stanowi pewną zakodowaną informację o koniecznych do wykonania operacjach. Odtworzenie tej informacji odbywa się w bloku dekodera (IU - Instntction Unit). Praca tego układu wspomagana jest często przez obszerną podręczną pamięć stałą (ROM), w której zawarty jest słownik tłumaczący przyjmowane kody rozkazowe na sekwencje ukrywających się pod nimi operacji. Rozkodowane instrukcje przekazywane są do układu wykonawczego (EU - Execution Unit), gdzie realizowana jest operacja określona danym kodem rozkazowym. Znaczna część powszechnie używanego kodu pracuje na liczbach stałoprzecinkowych (Integer) i podlega obróbce w module ALU (Arithmetic-Logic Unit) sterowanego z bloku CU (Control Unit}. Jeśli jednak rozkaz dotyczył obiektów zmiennoprzecinkowych jego realizacja w stałoprzecinkowych układach logicznych zajęłaby zbyt wiele czasu. W takim wypadku przekazuje się go do wyspecjalizowanej jednostki zmiennoprzecinkowej (FPU - Floaling Point Unit). Rozkazy posługują się zwykle pewnymi argumentami (parametry funkcji, na przykład składniki przy dodawaniu), które również trzeba pobrać z pamięci operacyjnej. Często wymaga się, by wynik operacji przesłać pod określony adres. Obsługę tego rodzaju życzeń bierze na siebie jednostka adresowania (AU - Addressing Unii). Względy natury technicznej (stronicowanie i segmentacja) powodują, iż dostęp do pamięci operacyjnej wymaga pewnych dodatkowych nakładów, których realizacji poświęca się jednostkę zarządzania pamięcią (MMU - Memory Management U nit). Rozwinięcie przedstawionego powyżej ogólnego schematu blokowego do postaci bardziej szczegółowej nastąpi przy okazji omawiania różnic w konkretnych modelach procesorów. Przetwarzanie rozkazów Obraz architektury współczesnych procesorów jest wynikiem wpływów wielu czynników. Stała pogoń za wzrostem mocy obliczeniowej zmusza do szukania nowych dróg. Nie wszystkie z nich są tak nowatorskie jak mogłoby się wydawać. Wiele z rozwiązań ma swoje pierwowzory w procesorach dużych maszyn, które ujrzały światło dzienne na długo przed komputerami klasy PC. Wspomniany, w poprzednim punkcie, klasyczny model mikroprocesora był dobry jeszcze przed kilkoma laty. Mocno zarysowany podział na wyspecjalizowane bloki nie zawsze da się zastosować do współczesnych konstrukcji i ulega stopniowemu rozmyciu. Słownictwo w tej dziedzinie wzbogaciło się o szereg nowych, często tajemniczo brzmiących, zwrotów. W publikowanych pracach teoretycznych nie zawsze panuje zgodność poglądów. Głębokie zazębianie się zagadnień teoretycznych z konkretnymi rozwiązaniami sprzętowymi prowadzi do sporów odnośnie definiowanych określeń (kwestią sporną jest nawet sprecyzowanie zakresu obejmowanego pojęciem architektura). W tej części rozdziału omówione zostaną skrótowo podstawowe pojęcia z tego zakresu. RISC i CISC Termin RISC (Reduced Instruction Set Computer} zrodził się w toku prac nad projektem 801 firmy IBM ( Idea podchwycona została przez wielu innych projektantów i utrwalona międzyinnymi w projektach: AMD 29000, HP PA-RISC, Intel 860 i 960 oraz IBM RS/6000). i oznaczał tendencję do ograniczania listy rozkazów procesora do niewielu błyskawicznie wykonywanych instrukcji. Realizacja każdej z nich była wynikiem odwołania się do wyspecjalizowanego obwodu elektronicznego, który nie tracił czasu na tłumaczenie rozkazu. Rozpisanie algorytmu wykonywanego programu, który przecież składał się z operacji dużo bardziej skomplikowanych niż przepisanie z rejestru do rejestru, należało do obowiązków kompilatora. Warto zwrócić uwagę, że system taki wyzwala ogromne obciążenie magistrali pamięciowej - kod przetłumaczony przez kompilator znajduje się przecież w pamięci operacyjnej i każdy z elementarnych „klocków" musi zostać pobrany przez procesor. Prędkość przetwarzania jest bardzo duża ' i taka musi też być przepustowość magistrali. Problem ten rozwiązuje się współcześnie przez zastosowanie szybkich pamięci podręcznych (LI i L2). Spore uproszczenie konstrukcji typu RISC zawdzięcza się stałej długości wszystkich mikrorozkazów. Istnieją jednak projekty procesorów (na przykład Thumb firmy ARM) dopuszczające zmienną długość instrukcji. Odmienny punkt widzenia reprezentuje filozofia CISC (Complex Instniction Set Computer} dominująca w rodzinach x86 Intela i 680xx Motoroli. Procesory budowane według tej zasady biorą na siebie coraz to większe zadania. Pobierany z pamięci pojedynczy rozkaz wywołuje szereg kompleksowych działań. Czas opracowywania takiego polecenia może dochodzić nawet do kilkudziesięciu cykli zegarowych. Kod programu jest bardzo zwarty a proces jego transportu do procesora znacznie mniej krytyczny. Jakkolwiek oba pojęcia definiowały początkowo kategorie przeciwstawne, to obecnie coraz trudniej jednoznacznie przypisać dany procesor do jednej nich. Ostry podział na RISC i CISC ma coraz mniejszy sens. Można co najwyżej mówić o pewnych cechach architektury a i to wyłącznie w odniesieniu do fragmentów określonej konstrukcji. Klasyczny przykład stanowią procesory K6 i Pentium Pro. Chociaż same zaliczają się do grupy CISC (akceptują przecież na swym wejściu złożone instrukcje x86), wyposażone są w dekoder tłumaczący na wewnętrzny kod mikroprocesora a więc ich jądro pracuje w trybie RISC (RISC Kernel). Uznawany za członka rodziny RISC procesor PowerPC 601 może z kolei poszczycić się chyba zbyt nadmierną jak na „zredukowaną" (R - Reduced) liczbą rozkazów: samych rozgałęzień można naliczyć ponad 150. Łatwiejsze do sklasyfikowania są typy Pentium oraz Ml (podobnie jak ich mutacje z rozszerzeniami MMX) przetwarzające dostarczany kod w sposób bezpośredni (Native C ode). Pipeline Niezależnie od powyższej klasyfikacji każdy procesor można porównać do zakładu produkcyjnego, który z dostarczonych materiałów (dane w pamięci) wytwarza według określonego algorytmu (kod programu) pewien określony produkt wyjściowy (inny stan danych). Analogia ta pozwala na sięgnięcie do jednego z bardziej rewolucyjnych pomysłów racjonalizatorskich - taśmy produkcyjnej. Wprowadzona po raz pierwszy w zakładach Forda idea podzielenia cyklu produkcyjnego na wiele małych i szybkich operacji wydaje się pozornie bezużyteczna: czas pracy nad produktem nie ulega przecież zmianie (może się nawet wydłużyć jeśli szwankują połączenia między poszczególnymi etapami). Nie o ten czas tu jednak chodzi, ale o zwiększenie przepustowości. Przeniesienie powyższej idei na grunt architektury mikroprocesorów odbyło się po raz pierwszy w roku 1960 podczas prac nad projektem IBM procesora klasy mainframe typu 7030; mikroprocesory dołączyły dopiero w 20 lat później. Charakterystyczny jest podział czasu pracy nad pojedynczym rozkazem na wyraźnie zarysowane fazy. Symboliczna taśma produkcyjna nazywana jest tutaj potokiem przetwarzającym (Pipeline lub w skrócie Pipę} a jej poszczególne punkty stopniami (Pipeline Stages). Potok pracuje jednocześnie nad kilkoma rozkazami a każdy z nich znajduje się w innej fazie wykonania. Chociaż czas przetwarzania każdego z nich wynosi wielokrotność okresu zegara taktującego, to w każdym jego cyklu taśmę opuszcza kompletny produkt finalny. Podobnie pracuje taśma montażowa w fabryce samochodów - mimo, że co minutę zjeżdża z niej gotowy samochód, czas montażu może wynosić wiele godzin. Połączenia pomiędzy poszczególnymi stacjami mogą być elastyczne, co pozwala na zmniejszenie dyscypliny całej taśmy. Czas przebywania rozkazu w poszczególnych stopniach zależy często od czynników zewnętrznych i ścisłe przestrzeganie reżimu czasowego nie zawsze jest możliwe. W punktach krytycznych montowane są więc małe magazyny pośrednie (bufory) nazywane też kolejkami (Queue}. Stopień rozdrobnienia takiej linii produkcyjnej (ilość stopni) nazywany jest też głębokością potoku. Wielkość ta ma fundamentalne znaczenie dla kluczowych parametrów procesora. Rozbicie procesu produkcyjnego na bardzo wiele małych operacji pozwala na ich przyspieszenie - dwaj robotnicy przykręcający po jednym kole pracują szybciej niż jeden, który musi zamontować dwa. W przeniesieniu na grunt architektury procesora oznacza to możliwość zwiększenie częstotliwości taktującej i ogólnej wydajności. Poszczególne stacje mogą pracować wręcz szybciej niż wynika to z wymiaru zewnętrznego zegara (Super-Pipeline). Model powyższy nie bierze jednak pod uwagę sytuacji awaryjnych a analogia do taśmy produkcyjnej nie znajduje tutaj pełnego zastosowania. Międzystopniowa kontrola jakości może po prostu odrzucić wadliwy wyrób na dowolnym etapie przetwarzania. Odbywa się to bez większej szkody dla całej taśmy. Inaczej jest jednak w przypadku procesorów. Stwierdzenie błędu (na przykład opracowywana właśnie instrukcja sprowadza się do dzielenia przez zero) oznacza konieczność oczyszczenia całego potoku. Punkt w którym taka sytuacja została rozpoznana znajduke się z natury rzeczy daleko od wejścia, a na pewno tym dalej im więcej stopni ma potok. Dodatkowym czynnikiem ograniczającym wzrost wydajności wraz z rozdrobnieniem potoku są wzajemne uzależnienia pomiędzy instrukcjami oraz konflikty w wykorzystaniu zasobów zewnętrznych. Zagadnienia te omówione zostaną bardziej szczegółowo w dalszej części rozdziału. Dla zanalizowania powyższej zależności przeprowadzone zostały różnorodne badania symulacyjne. Wyniki testów wykazują, iż istnieje wartość optymalna głębokości leżąca w okolicy liczby 8. Taki też wymiar mają potoki przetwarzające większości procesorów (tabela 1.1). Tabela 1.1. Liczba stopni w potokach współczesnych procesorów CPU - Liczba stopni w potoku; Pentium - 5; Pentiumx MMX - 6/8*; Pentium Pro - 12; Pentium II - 12/14*; M1 - 7; M2 - 7; K5 - 7; K6 - 6; * - Druga z podanych wartości obowiązuje dla instrukcji MMX Procesory wyposażone w potok pracują nad kolejnymi rozkazami według ściśle określonego schematu. Przetwarzana instrukcja przesuwa się wzdłuż linii produkcyjnej zaliczając kolejne etapy. Niezależnie od różnic w architekturze, należą do nich zawsze cztery podstawowe czynności: pobranie, dekodowanie, wykonanie i zakończenie. Każda z nich może być rozpisana na kilka czynności bardziej elementarnych, na przykład: pobranie wstępne i pobranie właściwe, wykonanie część pierwsza i następne itp. Faza pierwsza: pobranie (Prefetch, PF) Zakładamy obecność kodu w kolejce rozkazowej procesora. Zapełniane tej kolejki odbywa się poprzez sięganie do pamięci podręcznej L1. Jeśli rozkaz znajduje się w pamięci operacyjnej uruchamiana jest procedura zapełniania linijki pamięci podręcznej L1, z ewentualnym uwzględnieniem pośredniej pamięci L2. Faza druga: dekodowanie (Decode, DE) W pierwszej części tej fazy analizowany jest kod operacyjny instrukcji i jeśli to konieczne separuje się przedrostki i argumenty. W drugiej części oblicza się adres efektywny argumentów (jeśli takowe występują). Faza trzecia: wykonanie (Execute, EX) W fazie tej następuje fizyczny dostęp do pamięci w celu pobrania ewentualnych argumentów rozkazu oraz operacje na argumentach określane kodem instrukcji. Faza czwarta: zakończenie i zapisanie wyników (Write Back, WB)Literatura anglojęzyczna używa też często terminu Retire (spoczynek) Wynik operacji wykonanej w fazie EX umieszczany jest w miejscu określonym w kodzie rozkazowym (rejestry lub pamięć). Na zakończenie przywracany jest stan początkowy wewnętrznych (niewidocznych dla użytkownika i programisty) układów procesora oraz ustawiane są bity sygnalizujące pewne stany charakterystyczne dla zakończonej właśnie operacji (znaczniki, słowa stanu itp.). Przyjrzyjmy się bliżej poszczególnym etapom przetwarzania następującego rozkazu: add ax, [bx] ; dodaj zawartość rejestru AX do zawartości komórki, ; której adres znajdziesz w BX, wynik prześlij do AX • Faza PF. Pobranie kodu instrukcji. • Faza DE. Określenie czynności do wykonania, obliczenie adresu efektywnego dla drugiego argumentu (16 x DS) + BX • Faza EX. Dostęp do komórki pamięci o adresie (16 x DS) + BX, operacja dodawania do AX. • Faza WB. Umieszczenie wyniku w AX, ustawienie flag. Techniki przyspieszania Wzrost mocy obliczeniowej mierzy się ilością wykonywanych operacji w jednostce czasu. Zwiększanie częstotliwości taktującej (skrócenie czasu trwania pojedynczego cyklu) jest najbardziej oczywistym czynnikiem gwarantującym przyrost wydajności (pod warunkiem, iż nadążają układy otaczające procesor, głównie systemy pamięciowe). Na określonym etapie rozwoju technologii, dalszy wzrost częstotliwości taktującej nie jest już możliwy i trzeba sięgać do innych rozwiązań. Jeśli trzymać się analogii do zakładu produkcyjnego, ogromne możliwości drzemią zawsze we właściwej „organizacji pracy" i różnych drobnych usprawnieniach. W świecie mikroprocesorów należą do nich między innymi: techniki superskalarne, przemianowywanie rejestrów, przepowiadanie rozgałęzień i odpowiednie (zoptymalizowane pod kątem konstrukcji wewnętrznej danego procesora) przygotowanie kodu. Techniki superskalarne Jeśli nie można zwiększyć wydajności pojedynczej linii produkcyjnej należy wybudować drugą. Procesor taki nosi miano superskalarnego. Uruchomienie dodatkowych, równoległych linii produkcyjnych gwarantuje oczywiście zwielokrotnienie produkcji. Model taki nie sprawdza się jednak na gruncie mikroprocesorów. Strumień rozkazów do wykonania naszpikowany jest wzajemnymi uzależnieniami i pełen punktów rozgałęzień. Ponadto pracujące równolegle taśmy produkcyjne procesora (potoki) nie stanowią nie-zależnych obiektów, gdyż korzystaj ą z wielu wspólnych elementów architektury (choćby rejestrów). Te i inne ograniczenia powodują, iż dołożenie więcej niż jednego potoku nie wpływa już w istotnej mierze na wzrost wydajności. Zwielokrotniona (przynajmniej teoretycznie) moc obliczeniowa procesora konsumowana jest w większości przez wewnętrzny system komunikacji międzypotokowej. Zdecydowana większość dominujących obecnie na rynku procesorów posiada więc dwa równoległe kanały przetwarzające dane typu Integer (określane zwykle symbolami U i V). Jednostka zmiennoprzecinkowa (FPU - Floating Point U ni f) została już stosunkowo dawno (w czasach 8087) wydzielona z właściwej struktury logicznej i ma swoje własne życie wewnętrzne. Można śmiało powiedzieć, iż stanowi ona trzeci równoległy potok. Z napływającego do procesora strumienia rozkazów odławiane są te, które operują na danych zmiennoprzecinkowych i kierowane do właściwego im potoku. Reszta kodu podlega przetwarzaniu w sekcji Integer. To, który z rozkazów nich ląduje w ciągu U, a który w ciągu V stanowi wynik pracy układu rozdzielacza. Istniejące reguły rozdziału wynikają głównie z drobnych różnic w budowie wewnętrznej U i V oraz z wymogów synchronizacji potoków. Możliwość niezależnego (asynchronicznego) doprowadzania do końca instrukcji równocześnie zapoczątkowanych w dwóch potokach (Ont of Order Completiori) nie jest bowiem cechą każdego procesora. Warunki takie ma na przykład M2 Cyrixa, natomiast architektura Intel MMX wymaga synchronicznej pracy obu linii. Jeśli jest to niemożliwe (na przykład oczekiwanie na wyniki pośrednie) drugi potok zostaje zatrzymany. Przemianowywanie rejestrów Wykonywany przez procesor program stanowi w najbardziej korzystnym przypadku sekwencję instrukcji, które dają się naprzemiennie kierować do potoków U i V. Technika taka nosi miano parowania rozkazów. Nie wszystkie rozkazy podlegają parowaniu i nie zawsze przez ich równoległe wykonywania można cokolwiek przyspieszyć. Rozkazy odwołujące się do tych samych lokalizacji pamięci lub oceniające status procesora nie mogą być przecież wykonywane wcześniej niż to wynika z ich naturalnego położenia w sekwencji kodu. Najczęstsza przyczyna uzależnień leży jednak w zazębieniach powstałych skutkiem odwoływania się do tych samych programowych rejestrów procesora. Przykładowy ciąg instrukcja asemblera: mov bx, ax ; -> do potoku U add ax, ex ; -> do potoku V prowadzi do powstania uzależnienia od rejestru AX. Przepisanie stanu CX do AX w drugiej z podanej pary instrukcji nie może być przeprowadzone wcześniej niż zakończenie realizacji odczytu AX w pierwszej instrukcji pary. Opisana sytuacja stanowi przykład uzależnienia typu WAR (Write After Read- najpierw odczyt, później zapis). Zestaw rejedtrów procesora Rejestry ogólnego przeznaczenia bajt 15 do bajt 8; bajt 7 do bajt 0 Akumulator(AX) - AH; AL Rejestr bazowy(BX) - BH; BL Rejestr licznika(CX) - CH; CL Rejestr danych(DX) - DH; DL Wskaźnik stosu - SP Wskażnik bazowy - BP Indeksowanie źródła - SI Indeksowanie celu - DI Rejestry segmentowe Segment danych - DS Segment bloku - CS Segment stosdu - SS Segment dodatkowy - ES Rejestrty informacyjne Zestaw znaczników - FLAGS Wskaźnik instrukcji - IP Dwie następujące kolejno po sobie instrukcje dostępu do rejestru mogą w zależności od trybu dostępu (zapis/odczyt) prowadzić do czterech stanów zebranych w tabeli l .2. Tabela 1.2. Sekwencje rozkazów, których nie można parować Typ zależności - 1)RAR (Read After Read); 2)RAW; 3)RAW; 4)WAR (Write After Read); 5)WAW (Write After Write); Przykład - 1)add bx, ax; ax mov, ax; 2)add ax, bx; bx mov, ax; 3)mov ax, bx; mov [mem], ax; 4) mov bx, ax; add ax, cx; 5)mov ax, [mem]; add ax, bx; Rozwiązanie - 1) Dual Pipę Access; 2)Result Forwarding; 3)Operand Forwarding; 4)Register Renaming; 5)Register Renaming; Pierwsza kolumna symbolizuje dwa następujące po sobie (w kodzie programu) a jednocześnie występujące (w przypadku rozesłania do potoków U i V) cykle odczytu zawartości rejestru AX. Nie mamy to do czynienia z hazardem danych a uzależnienie tego typu jest stosunkowo łatwe do usunięcia poprzez wbudowanie podwójnych portów odczytu dla rejestrów. Dzięki takiemu usprawnieniu stan każdego z rejestrów może być pobierany niezależnie i jednocześnie przez U i V. Istotne problemy wywołują sekwencje rozkazów w dalszych kolumnach. Dwie ostatnie prezentuj ą sytuacje powstałą w wyniku próby jednoczesnego zapisu rejestru generowane przez potoki U i V. Prostym sposobem wyjścia z tej opresji jest tymczasowe podstawienie dodatkowego rejestru pomocniczego (rysunek 1.4), tak by nie zamazywać wartości zapisanej jako wcześniejsza. Technika ta nazywa się przemianowywaniem rejestrów (Register Renaming). Różne procesory posługują się tą techniką w mniejszym lub większym zakresie. W najprostszej formie procesor wyposaża się w zestaw dodatkowych rejestrów, które stoją do dyspozycji jednostki sterującej. W razie napotkania pary rozkazów powodującej uzależnienie typu WAR: mov bx, ax add ax, cx układ sterowania dokonuje szybkiego podstawienia: AX -> RegO BX -> Reg1 CX -> Reg2 Jeśli teraz dokonać przemianowania AX -> Reg3 to można bez trudu wykonać równolegle operacje: Reg1:= RegO || Reg3 := Reg2 + RegO Liczba stojących do dyspozycji tej techniki rejestrów jest różna w zależności od modelu i typu procesora. Pentium i Pentium MMX nie mają ich wcale a AMD K6 dysponuje zestawem 48 (tabela 1.3). Tabela 1.3. Liczba przemianowanych rejestrów CPU; Liczba przemianowanych rejestrów ; Pentium - 8 + 0; Pentium MMX -8 + 0; Pentium Pro - 8 + 32; M1, M2 - 8 + 24; K5 - 8 +8; K6 - 8 + 40 ; Trudności innego typu występują w sytuacjach przedstawionych symbolicznie jako zależności RAW. Nie ma tutaj kolizji przy zapisie do rejestru lecz pojawia się konieczność oczekiwania na wynik wcześniejszej operacji (obliczenia lub przesłania). Aby tego uniknąć, potok potencjalnie narażony na stratę czasu sam przeprowadza równolegle tą samą operację. Jeśli jest to obliczenie, technika nazywana jest Result Forwarding, a jeśli przesłanie mówimy o Operand Forwarding. Przepowiadanie Wykorzystanie pełnych mocy obliczeniowej procesorów wyposażonych w potoki przetwarzające (pipeline) wymaga stałego zasilania instrukcjami. Program, którego realizacja przebiega kolejno od jednej instrukcji do następnej nie stwarza w tym zakresie żadnych problemów. Również bezwarunkowe skoki typu go to mają jasno określony punkt docelowy. Kłopoty pojawiają się w momencie napotkania warunkowej instrukcji rozgałęzienia kiedy to dalsza realizacja programu może w zależności od spełnienia określonych warunków przebiegać sekwencyjnie dalej lub też przemieścić się do odległego obszaru kodu. Mimo iż nie jest wiadomo która z instrukcji będzie wykonywana jako następna po problematycznej if potok musi zostać czymś napełniony. Problem przybiera na sile wraz ze wzrostem długości potoku - coraz więcej operacji tkwi już głęboko w systemie przetwarzania, choć nie do końca wiadomo czy słusznie. Ostateczne rozstrzygnięcie warunku zawartego w if odbywa się w najlepszym razie w okolicach środka potoku. Może się więc zdarzyć, iż wszystko to co jest za instrukcją warunkową należy usunąć. Oczyszczenie całego skomplikowanego aparatu przetwarzającego ze zbędnych wyników pośrednich zajmuje dłuższą chwilę (Dla K.6 wynosi l - 4 cykle zegarowe, M2 karany jest 5 cyklami natomiast Pentium Pro ze względu na długość potoku musi czekać aż 15 cykli.) Krok taki jest z punktu widzenia wydajności procesora ogromną stratą czasu. Dodatkowe opóźnienia mogą również powstawać w systemach pobierania rozkazów, a zwłaszcza w procesorach z jądrem RISC. Dekodery tych procesorów rozkładające instrukcje x86 na drobne mikrooperacje też muszą pracować z dużą wydajnością. Oczekują więc nieprzerwanego dopływu przetwarzanego materiału od układów współpracy z pamięcią podręczną i magistralami. Od systemu pobierania kolejnych instrukcji x86, czy to z przeznaczeniem na rozkład na mikrokroki (RISC) czy też do bezpośredniego przetworzenia wymaga się więc również orientacji w zamiarach programu. Stosowane w praktyce próby rozwiązania tego dylematu grupują się wokół dwóch podstawowych sposobów rozumowania: • Dalszy bieg programu można z większym lub mniejszym powodzeniem spróbować przewidzieć (Branch Prediction). • W przypadku rozgałęzienia podąża się na wszelki wypadek w obydwu kierunkach (Muliiple Paths of Executiori). Oba punkty podejścia mają swoje dobre i złe strony. Prawdopodobieństwo właściwego przepowiedzenia jest zawsze mniejsze od jedności a prowadzenie programu kilkoma ścieżkami jednocześnie (Idea wcielona w życie \v niektórych modelach procesorów IBM (na przykład 3033)).prowadzi do ogromnej komplikacji sprzętowej. Powielaniu podlegają nie tylko jednostki wykonawcze ale i dekodery oraz systemy pamięci podręcznej. Wielokrotnie zagnieżdżone lub następujące szybko po sobie pętle szybko uporają się z każdą ilością zasobów sprzętowych. Wybranie przypuszczalnie słusznej drogi i jej realizacja (Specnlative Execution} też niesie z sobą sporą dozę komplikacji całego systemu. Wyniki wszystkich operacji lądują w buforach pośrednich bowiem nie wolno jeszcze przecież niczego zmieniać w świecie poza procesorem (zapis do pamięci wywołany sekwencją programu, która nigdy nie miała być wykonana miałby przecież katastrofalne skutki). Współczesne procesory korzystają w większości z techniki przepowiadania biegu programu a stopień komplikacji stosowanych systemów odpowiada z grubsza uzyskiwanym wynikom. Podstawową strukturą informacyjną tych układów jest tablica BTB (Branch Target Buffer} - rysunek 1.5. Jest to szybka podręczna pamięć asocjacyjna grupująca zwykle 128-1 024 rekordów. Każdy z wierszy zawiera w sobie informacje o jednym z punktów rozgałęzienia programu. BTB w najprostszej formie to zestaw adresów instrukcji skoków i adresów tych skoków. Dodatkowo zapamiętywany jest status danej linijki (V: Valid) oraz omawiane poniżej bity opisujące zachowanie się instrukcji (Hl, H2: History Bits). W tablicy umieszczane są tylko te instrukcje (w miarę dostępnego w buforze miejsca), które już się wykonały, innymi słowy takie, których zachowanie zostało zaobserwowane i udokumentowane. Średnia ilość trafnych przepowiedni pozostaje w ścisłym związku z rozmiarami tablicy BTB. Statystyczna analiza typowych programów prowadzi do wyznaczenia następujących współczynników: Rozmiar BTB; Średnia ilość trafnych przepowiedni [%]; 16 - 40; 32 - 50; 64 - 65; 128 - 72; 256 - 78; 512 - 80; 1024 - 85; 2048 - 87 ; System nadzorujący pobieranie kolejnych bajtów rozkazowych może więc w wypadku napotkania rozgałęzienia zwrócić się do tabeli BTB z zapytaniem o przewidywany dalszy bieg programu. Wiarygodność uzyskanej odpowiedzi zależy oczywiście nie tylko od samych rozmiarów tabeli. Choć istnieje wiele ciekawych sposobów podejścia do tego zagadnienia tylko kilka z nich znalazło praktyczne zastosowanie. We wszystkich przypadkach instrukcje rozgałęzień opatruje się dodatkową sygnaturą, zwykle nie dłuższą niż 2 bity. W nich to próbuje się zawrzeć, w mniej lub bardziej udany sposób „charakter i osobowość" danego rozgałęzienia. Stosowane algorytmy przepowiadania różnią się miedzy sobą w sposobie wykorzystania tej niezmiernie ograniczonej porcji informacji. Metoda statyczna Stosowany jest zwykle jeden bit a jego ustawienie odbywa się stosunkowo wcześnie bo jeszcze w fazie kompilacji. Faktyczny przebieg programu nie jest w stanie już nic zmienić. Metoda szybka, tania i mało skuteczna. Metody dynamiczne Metody tej grupy operują na jednym lub dwóch bitach, którymi manipuluje się w fazie wykonywania programu. Jednym z możliwych punktów podejścia jest przyjęcie założenia o powtarzalności przebiegu. Każdemu rozgałęzieniu towarzyszy jeden bit informacyjny, który podlega ustawieniu na l jeśli nastąpił skok. Proste przejście przez rozwidlenie (do kolejnej w szeregu instrukcji) kwitowane jest wyzerowaniem tego bitu. Jeśli w wyniku dalszego wykonywania programu znajdziemy się ponownie w tym samym punkcie, system przewidywania typuje wynik zgodny z poprzednio utrwalonym zachowaniem. Stan taki utrzymuje się do czasu pierwszego błędu w przepowiedni (typowe wyjście z wielokrotnej pętli po spełnieniu określonego warunku), co powoduje zmianę wartości bitu kontrolnego. Bardziej rozbudowana logika wkomponowana jest w układy dwubitowe. Sygnatura; Opis; 00; Mocne założenie o braku skoku; 01; Słabe założenie o braku skoku; 10; Słabe założenie o skoku; 11; Mocne założenie o skoku; Punktem wyjściowym algorytmu jest przyjęcie założenia, że wszystkie po raz pierwszy napotkane rozgałęzienia nie prowadzą do skoków. Opatruje się je sygnaturą 00 i przystępuje do wykonywania programu. Pierwsze przejście przez dane rozwidlenie zgodnie z przepowiednią- brak skoku - nie modyfikuje sygnatury i nadal zakłada się iż stan ten utrzyma się do następnego razu. Jak długo rozgałęzienie istotnie nie nastąpi, układ typuje prawidłowo. Jeżeli jednak dojdzie do skoku, mamy pierwsze niepowodzenie. W odpowiedzi na nie system zmienia stan sygnatury na 01 ale nadal zakłada, że kolejne skoki nie będą miały miejsca. Następna ocena odbywa się w trakcie kolejnego przejścia. Jeśli skok istotnie się nie powtórzył, następuje powrót do stanu 00. W przeciwnym razie instrukcja opatrywana jest sygnaturą 11. Układ pozostaje w tym stanie tak długo, jak długo skoki istotnie mają miejsce. Gdy po raz pierwszy nastąpi pomyłka modyfikuje się sygnaturę do postaci 10. System przepowiadania nadal jest zdania, iż następnym razem skok będzie jednak miał miejsce i taką też odpowiedź zwraca. Gdy przewidywanie było słuszne następuje powrót do postaci 11 z mocnym przekonaniem o dalszych skokach, jeżeli jednak system pomylił się powtórnie, sygnatura przechodzi do stanu 00. Optymalizacja kodu Jeżeli zna się dobrze szczegóły konstrukcyjne konkretnego procesora można próbować tak pisać program (już w fazie doboru algorytmu i podejścia do problemu a potem na etapie kompilacji) by wykorzystać dobre strony konstrukcji a ominąć punkty słabe. Optymalizacja kodu jest konieczna w przypadku Intel Pentium, gdyż nie radzi on sobie (potoki synchroniczne) z doborem parowanych instrukcji. Procesor ten pobiera po prostu kolejne instrukcje z sekwencji programowej i (jeśli spełniają tylko pewne warunki wstępne) rozsyła je na chybił trafił do potoków U i V. Powstające uzależnienia nie są neutralizowane przez podmianę rejestrów i jeden z potoków po prostu czeka na zakończenie pracy (ewentualnie na udostępnienie wyników) w drugim. Dostęp do pamięci Zadaniem procesora jest przetwarzanie danych złożonych w pamięci; tam też znajduje się kod realizowanego programu. CPU bardzo intensywnie współpracuje z układami pamięciowymi i bez nich nie może się obejść. Wykonywane operacje mają charakter dwukierunkowy: zapis lub odczyt. Przy zapisie procesor wystawia słowo na magistralę danych a stosowny adres na magistralę adresową. Podczas odczytu końcówki adresowe CPU definiują punkt odniesienia w pamięci a zawartość tej właśnie komórki zdejmowana jest przez procesor z magistrali danych. Nad sprawnym przebiegiem takich operacji czuwają oczywiście różne układy towarzyszące, których rytm pracy wyznaczają sygnały kontrolno-sterujące wytwarzane przez sam procesor. Kilka poniższych uwag ma pomóc Czytelnikowi w wyjaśnieniu zachodzących przy tym zjawisk. Mają one kluczowe znaczenie dla zrozumienia działania CPU. Procesory 16-bitowe pierwszej generacji (począwszy na modelu 8088 a skończywszy na układzie 80186) miały 20 końcówek adresowych. Architektura logiczna wyznaczała podział pamięci na 64 kB segmenty. Mechanizm adresowania składał się z dwóch rejes-trów 16-bitowych: jeden określał początek segmentu (Segment) a drugi odległość punktu od tego początku (Offset). Para rejestrów Segment i Offset wyznaczała adres logiczny. Konieczność dopasowania tej struktury (16 + 16) do wymiaru 20-bitowej magistrali adresowej wyznaczyła następujący sposób przeliczenia: Adres fizyczny = 16 * Segment + Offset Generowany według powyższej formuły adres fizyczny (tutaj 20-bitowy) wystawiany był na magistralę adresową. Operacja mnożenia przez 16 stanowi w dziedzinie liczb binarnych przesunięcie w lewo o 4 pozycje - tak z 16 bitów robi się potrzebne 20. Powstające z prawej strony dodatkowe pozycje wypełnia się zerami a do uzyskanej w ten sposób liczby 20-bitowej dodaje się zawartość rejestru Offset. Warto w tym miejscu wspomnieć o adresie liniowym. Stanowi on efekt działania mechanizmu segmentacji w trakcie przetwarzania adresu logicznego. Adres jest liniowy dlatego, ponieważ bezpośredni system adresowania segmentu (w rejestrze segmentowym zawarty jest adres segmentu) gwarantuje, iż segment o adresie wyższym znajduje się fizycznie wyżej w pamięci. Jeśli omawiany w dalszej części rozdziału mechanizm stronicowania jest wyłączony (i pamięć wirtualna nieaktywna), adres liniowy odwzoro-wywany jest wprost w adres fizyczny: 20-, 24- lub 32-bitowy, zależnie od szerokości magistrali. Aktywacja przestrzeni wirtualnej powoduje, iż mechanizm stronicowania odwzorowuje adres liniowy w adres fizyczny. Generacja procesorów 16-bitowych wyposażonych w 20-końcówkową magistralę adresową operowała w przestrzeni fizycznej o rozmiarze l MB (220). Wyjątek stanowił model 80286 dysponujący 24 liniami adresowymi i obejmujący tym samym przestrzeń 16 MB (224). Procesory 32-bitowe (począwszy od 80386DX) mają już 32 końcówki adresowe co pozwala na pokrycie zakresu 4 GB (2j2). Architektura nowoczesnych procesorów 32-bitowych ulegała licznym przeobrażeniom a implementacja nowych, dostosowanych do współczesnych wymogów trybów pracy spowodowała sporą komplikację w przeliczeniach adresów logicznych, którymi operuje program, na rzeczywisty stan końcówek adresowych CPU. Wyróżnić należy trzy podstawowe tryby pracy procesora: • Tryb rzeczywisty (Real Modę). Procesor 32-bitowy przełącza się w stan odwzo-rowujący zachowanie jednostki 16-bitowej. Zawartość rejestru segmentowego przesuwana jest o 4 pozycje binarne w lewo i dodawana do zawartości rejestru przesunięcia (16 x Segment + Offset). Wynik stanowi liczbę 20-bitową, która jest po prostu wystawiana na magistralę adresową. Proszę zwrócić uwagę, iż konstrukcja adresu według takiej reguły prowadzi do wieloznaczności. Różne pary liczb Segment:Offset mogą dawać jednakowy wynik i odwoływać się do tej samej komórki pamięci. W trybach chronionych jest to z różnych względów wykluczone. • Tryb chroniony (Protected Modę). Tryb ten wprowadzony został (począwszy od modelu 80286) w celu ochrony poszczególnych zadań pracujących pod kontrolą wielozadaniowego (multitasking) systemu operacyjnego. Całość jest zaimple-mentowana jako czteropoziomowy system uprawnień. Układy sprzętowe wbudowane w procesor kontrolują odwołania do danych oraz kodu i wydają (lub odmawiają) zezwolenia na dostęp. Wzrost bezpieczeństwa okupuje się stosunkowo dużą komplikacją w obliczaniu adresu. • Tryb wirtualny procesora 8086 (Virtual 8086 Modę). Tryb dostępny jest w układach rodziny Intel począwszy od modelu 80386. Koncepcja trybu wirtualnego stanowi kombinację dwóch wcześniej omówionych trybów. System operacyjny wykorzystujący tą możliwość pracy stawia do dyspozycji wykonywanych programów bardzo interesujące środowisko. Każdy z programów użytkowych widzi swój własny procesor 8086 pracujący w trybie rzeczywistym. System jako całość dysponuje jednak zaczerpniętymi z trybu chronionego mechanizmami gwarantującymi odpowiedni dobór praw dostępu do zasobów i uniemożliwiającymi wzajemne kolizje pomiędzy współuczestniczącymi zadaniami. Najbardziej istotną innowacją (oprócz architektury 32-bitowej) wprowadzoną do rodziny procesorów Intela począwszy od modelu 80386 jest jednak jednostka stronicowania (Paging Unit). W kolejnej części rozdziału zostaną omówione możliwości jakie oferuje to rozszerzenie. Adresowanie Znana z trybu rzeczywistego prosta projekcja zawartości rejestrów segmentowych i przesunięcia na adres fizyczny zatraca się wyraźnie w chronionych trybach pracy. Wspomniane rejestry są od siebie całkowicie odseparowane i chociaż nadal dostępne programowo, interpretacja ich zawartości jest zupełnie inna. Rejestr segmentowy stanowi teraz selektor segmentu a nie wprost jego adres. 13 najstarszych pozycji tego rejestru stanowi wskaźnik do 8-bajtowej struktury opisującej dany segment (Segment Descriptor). Z pozostałych trzech bitów dwa poświęcone zostały na implementację czteropoziomowego systemu praw dostępu do segmentu a jeden określa czy wspomniany powyżej wskaźnik odnosi się do tzw. tablicy lokalnej czy globalnej. Rekordami w tych tablicach są właśnie deskryptory segmentów. Każdy z nich zawiera jednoznaczną informację o lokalizacji segmentu w pamięci i jego rozmiarach. W ten sposób definiowany jest spójny obszar o adresie początkowym wyznaczanym liczbą 32-bitową. Na liczbę określającą rozmiar takiego bloku przeznaczone zostało pole 20-bito-we. Istnieją dwie możliwości interpretowania liczby w tym polu. W trybie 1:1 (granulacja l B) rozmiar maksymalny wynosi po prostu 2^20= l MB. Gdyba jednak przyjąć jednostkę 4 kB (granulacja 4 kB), rozmiar segmentu może sięgać do 2^20 * 2^12 = 2^32 = 4 GB. Informacja o tym, która z konwencji jest aktualnie obowiązująca zawarta jest w des-kryptorze. Adres logiczny do którego odwołuje się procesor 32-bitowy budowany jest ze złożenia zawartości 16-bitowego rejestru segmentowego i 32-bitowego rejestru przesunięcia. W przypadku granulacji 4 kB maksymalny wymiar segmentu wynosi 4 GB. Liczba możliwych segmentów wynosi 2^14 (2^13 deskryptorów lokalnych i tyle samo globalnych) co daje w sumie astronomiczną objętość 64 TB (2^14 * 2^32). Właściwie już jeden taki Komunikacja procesora z innymi elementami architektury komputera 29 segment stanowi wielkość optymalną: 4 GB przestrzeni adresowej zaspokaja przy obecnym rozwoju techniki PC najbardziej wygórowane wymagania. Rozwiązanie takie, określane jako „płaski model pamięci" stosowane jest w systemie Windows NT. Segmenty l MB (granulacja bajtowa) pozwalają na utworzenie przestrzeni wirtualnej o rozmiarze 16 GB (2^14 * 2^20). Utworzenie pamięci operacyjnej o takiej pojemności w oparciu o półprzewodnikowe układy scalone jest absolutnie nierealne. Samo zasilanie i sterowanie zespołu l 000 układów SIMM (16 MB) nastręczało by zbyt wiele trudności technicznych, nie mówiąc o kosztach. Jest więc rzeczą oczywistą, iż nie wszystkie segmenty jednocześnie mogą być przechowywane w pamięci operacyjnej. Część z nich składuje się więc (Swapping) na znacznie tańszym nośniku magnetycznym (zwykle dysk twardy). Duża pamięć wirtualna realizowana jest więc jako złożenie małej i szybkiej pamięci RAM i obszernej pamięci masowej. System operacyjny nadzoruje mechanizm składowania ustawiając odpowiednie znaczniki w tabelach deskryptorów. Jeśli procesor żąda dostępu do takiego „odłożonego na bok" segmentu, sprzęt wyzwala tzw. wyjątek (Exception) będący odpowiednikiem przerwania OxOb. Wzywany jest podprogram obsługi przerwania, który sprowadza potrzebny segment z dysku do pamięci. Omówione powyżej składowanie segmentów pozwala na wykorzystanie znacznie większego wycinka logicznej przestrzeni adresowej procesora niż wymiar fizycznie obecnej pamięci operacyjnej. Mechanizm ten nie jest jednak pozbawiony wad. Proszę zwrócić uwagę, iż elementarną jednostką wymiany informacji pomiędzy pamięcią RAM a pamięcią masową jest segment. Jego rozmiar niekoniecznie musi odpowiadać strukturze przetwarzanych obiektów. Obszerne bloki danych typowe dla zagadnień numerycznych, moduły dużych programów, mapy bitowe i im podobne lokowane są w dużych segmentach. Zwięzłe procedury, bloki danych krótkich programów umieszcza się oczywiście w dopasowanych do ich rozmiarów mniejszych segmentach. Potrzeba sprowadzenia do pamięci jednego z dużych segmentów może oznaczać konieczność zwolnienia miejsca zajmowanego przez szereg mniejszych bloków. Jeśli przetwarzane zagadnienie wymaga naprzemiennego sięgania do sprowadzanego właśnie dużego segmentu oraz wyeksportowanych przed chwilą segmentów mniejszych (klasyczny przykład: kompaktowy kod obsługi bazy danych i obszerne struktury samych danych) rozpoczyna się intensywny proces wymiany informacji pomiędzy dyskiem a pamięcią. Operacje takie pochłaniają oczywiście znaczną część mocy obliczeniowej. Opisany problem staje się szczególnie dotkliwy w komputerach skąpo wyposażonych w pamięć RAM. Należy przecież pamiętać, iż tylko pewna część pamięci operacyjnej może być oddana do dyspozycji mechanizmu obsługującego zrzuty na dysk. Wolna przestrzeń to reszta, która pozostaje po rozlokowaniu kodu i danych systemu operacyjnego oraz sterowników i innych niezbędnych elementów. Może się wręcz zdarzyć, iż segment po który chcemy aktualnie sięgnąć nie mieści się w ogóle w wolnej przestrzeni. Uruchamiana jest wtedy skomplikowana procedura analizująca stopień wykorzystania obecnego w pamięci kodu i podejmuje się decyzję, które z jego fragmentów mogą być odesłane na dysk. Powyższe względy zadecydowały o konieczności poszukiwania bardziej efektywnej metody zagospodarowania oferowanej przez nowoczesny procesor wirtualnej przestrzeni adresowej. Opracowany system określany jest mianem stronicowania. Stronicowanie Stronicowanie (Paging) stanowi specyficzną funkcję odwzorowującą ogrom przestrzeni wirtualnej na stosunkowo wąskie pole pamięci RAM plus obszar udostępniany przez pamięć masową. Odwzorowanie to odbywa się za pośrednictwem małych porcji zwanych stronami (Pages). Rozmiar stron jest stały i wynosi 4 kB. W przypadku omawianego tutaj modelu 80386, wielkość ta jest „zaszyta" we wnętrzu CPU i nie może być zmieniana. Niektóre procesory najnowszej generacji (na przykład Pentium) pozwalają na pewne odstępstwa od tej reguły. Można w nich wybrać jeden z dwóch rozmiarów stron: standardowy 4 kB lub rozszerzony 4 MB. Procesor może ale nie musi korzystać z mechanizmu stronicowania. Odpowiedni „wyłącznik" zamontowany jest w jednym z rejestrów konfiguracyjnych (bit PG w rejestrze CRO). Samo ustawienie PG oznacza jedynie inną interpretację adresów i jeszcze niczego nie załatwia. To system operacyjny musi brać na siebie obsługę całego związanego z tym mechanizmu. Jeśli stronicowanie jest aktywne, adres logiczny podlega dwustopniowym przekształceniom (rysunek 1.6). W pierwszej fazie odbywa się opisany wcześniej proces segmentacji. 16-bitowy selektor segmentu wskazuje na rekord adresowy w tablicy deskryptorów. Do uzyskanego w ten sposób adresu podstawy dodaje się 32-bitowe przesunięcie. Dopiero generowany w powyższy sposób adres liniowy (rysunek 1.7) podlega transformacji na fizyczny adres obiektu. Transformacja ta stanowi sedno mechanizmu stronicowania a jej istota rzeczy polega na innej interpretacji adresu liniowego (rysunek 1.8). 32-bitowe słowo adresowe podzielone jest na trzy grupy. W pierwszych dziesięciu najstarszych bitach przechowywany jest numer rekordu w katalogu stron (Page Directory). Katalog zawiera l 024 takich rekordów a każdy z nich wskazuje na tablicę stron (Page Tables). Pierwszy rekord w katalogu stron wskazuje adres bazowy tablicy stron o numerach 0 - l 023, drugi dotyczy tablicy l 024 - 2 047 a ostatni odnosi się do stron o numerach l 047 552 - l 048 575. 10 kolejnych bitów adresu liniowego (Page) wskazuje na jeden z l 024 rekordów w danej tablicy. Same rekordy w tablicach stron stanowią z kolei wskaźniki do stron, z których każda ma wymiar 4 kB. Adresowany obiekt ulokowany jest w obrębie danej strony. Jego dokładna pozycja ustalana jest na podstawie pola Offset - dwunastu najmłodszych bitów adresu liniowego (2^17 = 4kB). Caching Coraz szybciej taktowane procesory wymagają coraz to szybszych układów pamięciowych. Czas przetwarzania prostego rozkazu nie jest zwykle dłuższy od pojedynczego cyklu zegarowego (5 ns przy częstotliwości 200 MHz). Pamięć operacyjna współczesnych komputerów PC zbudowana jest z układów scalonych DRAM, które cechuje czas dostępu większy o rząd wielkości. Na cóż zdać się może procesor pracujący z tak dużą prędkością, jeśli czas oczekiwania na kolejną porcję danych wynosi w najlepszym razie 50 ns. Istnieją oczywiście typy pamięci (SRAM, Static RAM) mogące sprostać takim podwyższonym wymaganiom, ale ze względów ekonomicznych (są kilkanaście razy droższe) nie można z nich zbudować całej pamięci operacyjnej. Dla zlikwidowania tego wąskiego gardła wprowadzona została pamięć podręczna stanowiąca bufor o krótkim czasie dostępu (poniżej 10 ns). Rozwiązanie jest ekonomicznie uzasadnionym kompromisem: duża i tania pamięć główna wspierana jest przez małą, szybką i nie aż tak drogą pamięć podręczną (Cache). Rozwiązanie takie nie było by możliwe, gdyby nie jedna cenna właściwość przetwarzanego przez komputery PC kodu: jest on stosunkowo spójny. Procesor „porusza się" przez dłuższy czas w tym samym rejonie pamięci a nie skacze chaotycznie po całym jej obszarze. Analizowane rozkazy ułożone są przecież w pamięci sekwencyjnie (nie licząc oczywiście rozgałęzień i skoków) a bloki danych też nie są świadomie rozpraszane po całej przestrzeni adresowej. Rozważania teoretyczne i symulacje doprowadziły do wyznaczenia przybliżonych rozmiarów takiego obszaru. Można przyjąć z prawdopodobieństwem równym 0,9 iż większość odwołać do pamięci mieścić się będzie w bloku nie przekraczającym wymiarów 16 kB. W tabeli 1.4 zestawiono rozmiary pamięci podręcznej stosowanej we współczesnych procesorach. Topologie Buforowe działanie pamięci podręcznej osiąga się umieszczając ją „po drodze" lub „przy drodze" do pamięci głównej. Niezależnie od różnic w strategii dostępu (różnorodne algorytmy), w chwili obecnej występują w świecie PC trzy podstawowe układy topologiczne. Tabela 1.4. Rozmiar pamięci podręcznej współczesnych procesorów Typ procesora; LI -kod [kB]; LI -dane [kB;] 12 [kB]; Pentium; 8; 8; -; Pentium MMX; 16; 16; -; Pentium Pro; 8; 8; 256/512; Pentium II; 16; 16; 512; Celeron; 16; 16; -; Celeron A; 16; 16; 128; Typ procesora; LI -kodfkB]; LI -dane [kB]; 12 [kB]; Ml; 16*; 16*; -; M2; 64*; 64*; -; M3; 16; 16; 256; K5; 16; 8; -; K6, K6-2; 32; 32; -; K6III; 32; 32; 256; K7; 64; 64; >512; * Wspólny dla kodu i danych, ponadto 256 bajtów Instruction Linę Cache Układ konwencjonalny (często określany nazwą Look-Aside) - rysunek 1.10 - z którym mamy do czynienia w procesorach x86 i rodzinie Pentium z MMX włącznie. Tutaj pamięć podręczna L2 dołączona jest równolegle do magistrali pamięciowej. Rysunek 1.10. Uktad konwencjonalny (Look-Aside) podłączenia pamięci podręcznej CPU (strzałka w obie strony w dół do ram) do niej dochodzi strzałka w obie strony w bok do Cache RAM Widać wyraźnie, iż procesor odwołuje się do pamięci podręcznej wykorzystując magistralę pamięciową: częstotliwości pracy pamięci podręcznej jest więc taka sama jak pamięci głównej, jedynie czas dostępu może ulec skróceniu. Drugi sposób podłączenia przedstawiony jest na rysunku 1.11 i określany jest mianem Look-Through lub Inline Cache. Procesor, zanim sięgnie do pamięci głównej, napotyka układ pamięci podręcznej. Ta z kolei, sprzężona jest z pamięcią główną poprzez właściwą magistralę pamięciową. Pamięć podręczna może więc być taktowana inną częstotliwością niż sama magistrala pamięciowa. Rysunek 1.11. Uktad Look-Through podłączenia pamięci podręcznej CPU (strzałka w obie strony} Czche (strzałka w obie strony} RAM Całkowite oddzielenie pamięci podręcznej od magistrali pamięciowej umożliwia dominująca obecnie architektura określana mianem Backside - rysunek 1.12. Rysunek 1.12. Układ Backside podłączenia pamięci podręcznej CPU <->(strzałjka w obie strony w bok do) Cache (od cpu do ram strz. w obie str,w dół do ram) RAM Kontroler pamięci L2 osadzony jest na strukturze procesora i ma (poprzez zestaw wydzielonych końcówek) bezpośrednie połączenie z pamięcią podręczną. Częstotliwości taktowania magistral są od siebie absolutnie niezależne. Fragment łączący procesor z pamięcią główną nazywany jest szyną FSB (Front Side Bus} w przeciwieństwie do części biegnącej do L2, która nazywana jest BSB (Back Side Bus). W procesorach Pentium II nowszej generacji dostęp do pamięci głównej odbywa się poprzez magistralę FSB taktowaną zegarem 100 MHz (w poprzednich wersjach 66 MHz) pamięć podręczna na magistrali BSB połową częstotliwości zegara CPU (czyli na przykład 450/2 = 225 MHz). Rodzina procesorów Mendocino (Celeron A) taktuje z kolei magistralę BSB pełną częstotliwością zegara CPU. Architektura typu Look-Aside ogranicza szybkość pracy L2 bowiem nie można podnosić bezkarnie częstotliwości zegara magistrali. Aktualne systemy oparte na rodzinie procesorów z podstawką typu Super 7 pracują poprawnie do około 100 MHz. Choć można próbować je przeciążać do 125 MHz, skutkuje to obniżeniem stabilności całego układu. Na nadmierne ryzyko narażone są nie tylko obwody pamięci operacyjnej ale i peryferia podłączone również do „przetaktowanych" magistral ISA, PCI i AGP. Dedykowana szyna L2 (BSB) umożliwia niezależny wybór częstotliwości pracy pamięci podręcznej, lub swobodną regulację jej szybkości (tak jak pozwala na to architektura procesora AMD K7). Warto zwrócić uwagę, iż częstotliwość taktowania BSB może być zarówno większa jak i mniejsza od zegara CPU. Procesory implementujące BSB mają blok L2 wkomponowany w półprzewodnikową strukturę CPU (On-Chip, On-Die) lub osadzony w jej bezpośrednim sąsiedztwie (na module procesora). Typowym przedstawicielem pierwszego rodzaju jest Pentium Pro i AMD K6-2, a drugiego rodziny Pentium II i Pentium III. Rozmiar pamięci podręcznej L2 i częstotliwość jej taktowania stanowią dwie wartości, których dobór stanowi kompromis o podłożu ekonomicznym. Rozwiązanie idealne to pamięć podręczna bardzo duża i bardzo szybka. Zarówno zwiększanie pojemności L2 jak i podnoszenie częstotliwości pracy BSB pociąga za sobą konieczność stosowania szybkich i drogich układów pamięciowych co podraża koszty opracowania i produkcji. Krótki przegląd architektury powszechnie stosowanych procesorów daje obraz różnorodności eksperymentów przeprowadzanych w tej dziedzinie. Procesor Pentium II ma dużą pamięć podręczną L2 (512 kB) i stosunkowo wolną magistralę BSB (1/2 częstotliwości zegara CPU). Modele rodziny Celeron A dysponują małą pamięcią podręczną L2 (tylko 128 kB) ale za to magistrala BSB pracuje z szybkością sięgającą 400 MHz. Gdzieś pośrodku leży AMD K6 III ze średniej wielkości pamięcią podręczną L2 taktowaną pełną częstotliwością procesora. Każdy z tych procesorów jest lepszy w pewnych typach aplikacji a w innych gorszy. Wszystko zależy od stylu programowania i cech charakterystycznych kodu. Kod zwięzły preferuje szybki L2, obszerne moduły programowe (kod rozproszony) będą się lepiej wykonywać w środowisku z dużą pamięcią podręczną. Organizacja pamięci podręcznej Pamięć podręczna zorganizowana jest w linijki (Cache Lines) o rozmiarach 16 lub 32 bajtów. Jest to najmniejsza porcja informacji, jaką pamięć podręczna wymienia z pamięcią główną. System taki narzucony został dla zwiększenia wydajności. Większość kontrolerów magistral realizuje zwielokrotniony cykl dostępu (Burst) bardzo szybko. Pamięć podręczna „widzi" pamięć główną jako zbiór linijek, te z kolei pogrupowane są w zespół}' zwane stronami (Pages). Informacja o tym, które z linijek RAM znajdują się aktualnie w pamięci cache przechowywana jest w katalogu pamięci podręcznej TRAM (TAG-RAM). Sposób odwzorowywania linijek i stron pamięci głównej w bloku pamięci podręcznej może przebiegać na jeden z trzech omówionych poniżej sposobów. Mapowanie bezpośrednie (Direct Mapped) Implementacja tego typu (rysunek 1.13) jest najprostszą z możliwych i można ją również rozpatrywać jako przypadek szczególny układu asocjacji zespołowej (1-Way-Set). Pamięć główna podzielona jest na strony zgodne z rozmiarem bloku pamięci podręcznej. W linijce O pamięci podręcznej znajduje się zawsze jakaś linijka O pewnej strony pamięci RAM. Prostota konstrukcji i szybkość odszukiwania informacji (wystarczy przeprowadzić tylko jedną operację porównania) są jedynymi zaletami takiego systemu. Układ cechuje niestety brak elastyczności i mała efektywność, szczególnie jeśli dochodzi do częstych skoków poza granicami stron. Jeżeli pamięć podręczna przechowuje linijkę n jakiejś strony a system żąda dostarczenia linijki n strony następnej, kontroler musi usunąć ją z pamięci, chociaż jest prawie pewne iż w chwilę potem system odwoła się do niej ponownie. Pełna asocjacja (Fully Associative) Organizacja z pełną asocjacją (rysunek 1.14) pozwala na składowanie dowolnej linijki RAM w dowolnym miejscu pamięci podręcznej. W modelu tym nie ma symbolicznego podziału na strony pamięci a operuje się wyłącznie linijkami. Ta optymalnie elastyczna organizacja ma jednak dużą wadę: odszukanie informacji w pamięci podręcznej wymaga przeglądnięcia całego katalogu TRAM, bowiem poszukiwana linijka może być na dowolnej pozycji. Konstrukcje tego typu mają uzasadnienie ekonomiczne dla bloków pamięci podręcznej nie przekraczających 4 kB. Asocjacja zespołowa (Set Associative) Stanowi kombinację rozwiązań przedstawionych powyżej. Cechą charakterystyczną tego typu architektury jest podział pamięci podręcznej na równe porcje, zwykle 2 lub 4, zwane kanałami (Ways) - rysunek 1.15. Wymiar strony w pamięci RAM odpowiada rozmiarowi kanału w pamięci podręcznej. Każdy z kanałów administrowany jest zgodnie z regułami obowiązującymi dla organizacji typu „mapowanie bezpośrednie". System kontroli trafień (Hit/Miss) ogranicza się do przeprowadzenia dwóch (2-Way-Set) lub maksymalnie czterech (4-Way-Sef) porównań: linijka o określonym numerze może znajdować się tylko w jednej z dwóch (czterech) dopuszczalnych lokalizacji. Reakcja pamięci podręcznej na żądanie udostępnienia danych zależy od implementacji oraz od faktu, czy poszukiwane dane są w niej istotnie zawarte. Obecność danych w pamięci podręcznej nazywa się trafieniem (Cache Hit) i nie wymaga sięgania do pamięci głównej. W sytuacji odwrotnej (Cache Miss) uruchamiana jest magistrala pamięciowa i do pamięci podręcznej sprowadzana jest nowa linijka. Cykle zapisu do pamięci mogą uwzględniać na swej drodze obecność pamięci podręcznej (Write Back) lub ją omijać (Write Through). Write Through Implementacja tego typu powoduje, iż zapis wyzwala zawsze cykl dostępu do pamięci głównej, niezależnie od tego, czy dana linijka obecna jest w pamięci podręcznej czy nie. W razie trafienia (Cache Hit) odbywa się oczywiście również i aktualizacja. Write Back Pamięć podręczna pracująca w tym trybie zbiera wszystkie cykle zapisu i aktualizuje swoją zawartość ale nie zawartość pamięci głównej. Dzieje się to dopiero na konkretne żądanie wyrażone przez instrukcję programową (rozkaz WBINYO: Write Back and Invalid Data Cache}, sygnał sprzętowy na linii -FLUSH lub w wyniku braku trafienia w fazie odczytu. Zapis do pamięci ma miejsce w czasie gdy wolna jest szyna systemowa (a procesor przetwarza kod zawarty na przykład w pamięci podręcznej poziomu pierwszego). Metoda taka gwarantuje oczywiście dużą wydajność ale jednocześnie komplikuje układ. Pamięć podręczna procesora 80386 Jako konkretny przykład omawianych zagadnień przedstawiona zostanie konstrukcja pamięci podręcznej procesora 80386. Model ten wyposażony został w zintegrowany czterokanałowy kontroler cache (4-Way-Set) obsługujący blok 16 kB pamięci SRAM zorganizowanej w linijki 16-bajtowe. Generowany we wnętrzu procesora 32-bitowy adres lokalizacji w pamięci (rysunek 1.17) przejmowany jest przez kontroler podręcznej, który dokonuje jego rozkładu na trzy składniki: B3, - B|2: Tag BM-B4 : Set B3 - B0 : Byte Na pełnowartościowy wpis do pamięci podręcznej składają się dwa ściśle ze sobą powiązane komponenty: • Rekord w pamięci podręcznej (16-bąjtowa linijka). • Rekord w katalogu pamięci podręcznej. Katalog jest strukturą informacyjną, przy pomocy której kontroler zarządza danymi w pamięci podręcznej. Każda 16-bajtowa linijka stanowi elementarny obiekt opisany przez powiązany z nią rekord. Rekord zawiera w sobie 20-bitowy adres TAG oraz kilka dodatkowych pól bitowych służących dla celów organizacyjnych. Sam katalog zlokalizowany jest (fizycznie) we wnętrzu kontrolera, który oddaje na ten cel fragment pamięci SRAM. Uwaga ta dotyczy oczywiście pamięci L1 (Level One Cache) zintegrowanej w strukturze CPU. Na pamięć podręczną poziomu drugiego L2 (Level Two Cache), która umieszczana jest na płycie głównej, składa się większa liczba układów scalonych niż wynikało by to z prostego rachunku „pamięć całkowita L2/ pamięć pojedynczego układu". Obowiązek prowadzenie katalogu (TAG-RAM) pociąga za sobą oczywiście konieczność instalacji kilku ponadplanowych układów SDRAM. Katalog pamięci podręcznej procesora 80386 (rysunek 1.19) jest czterokanałowy (WayO - Way3). Każdy z kanałów stanowi tabelę o 256 wierszach i 22 kolumnach. Wiersze tabeli przechowują adres TAG odpowiadający danej 16-bajtowej linijce. Cztery tabele opisują w sumie 16 kB pamięci podręcznej (4 Ways x 256 Sets x 16 Byte). Dodatków bit WP (Write Protecf) implementuje mechanizm blokady zapisu, a pole VAL (valid) określa aktualność danych. Pozycja wiersza w tabelach WayO - Way3 wyznaczana jest przez bity A11 - A4 słowa adresowego (Set-Address). Adres TAG stanowi centralny fragment mechanizmu umożliwiającego jednoznaczne określenie trafienia (Cache Hit). Mechanizm blokady zapisu (WP) uruchamiany jest na czas trwania operacji wypełniania linijki (Cache Linę Fill). tak by procesor nie mógł zamazywać przedwcześnie jej zawartości. Określenie trafienia Procesor sięga do żądanej lokalizacji w pamięci wystawiając 32-bitowy adres na swoją szynę adresową. Adres ten przejmowany jest przez kontroler pamięci podręcznej i rozkładany na trzy omówione wcześniej elementy: TAG, SET i BYTE. Składnik TAG przekazywany jest natychmiast do komparatora adresowego TAG natomiast 8-bitowa część A11- A4 skierowana zostaje do katalogu (Cache Directory) powodując uaktywnienie wszystkich czterech kanałów (Way-0 - Way-3). Odszukany w katalogu adres TAG przekazywany jest do komparatora i porównywany z fragmentem A31 - A12 pobranym z szyny adresowej. Porównanie odbywa się dla każdego z czterech kanałów oddzielnie. Wycinek A11 - A4 magistrali kierowany jest równolegle do obwodów pamięci podręcznej przechowującej linijki z danymi. Proces przebiega przez wszystkie kanały równolegle, stosownie do aktualnej selekcji w katalogu. Pamięć wystawia za każdym razem jedną z zaadresowanych w ten sposób linijek. Informacja ta przejmowana jest tymczasowo przez bufor separujący obwody pamięci podręcznej od magistrali danych. Jeśli poszukiwana informacja znajduje się w jakimś kanale, dochodzi do zgodności adresów TAG. Na sygnał z komparatora 32-bitowy fragment zawartości bufora (jedna czwarta część 16 bajtowej linijki wyizolowana przez bity A2 - A3) odkładany jest na magistralę a cały układ generuje sygnał trafienia (Cache Hit). Bity AO - A1l nie podlegają ocenie. Decyzja o wymianie linijki (LRU) Stwierdzenie braku obecności określonej linijki w pamięci podręcznej (Cache Miss} pociąga za sobą konieczność jej sprowadzenia z pamięci głównej. Kontroler pamięci podręcznej musi przygotować na ten cel jedno wolne miejsce, a jeżeli wszystkie są zajęte, określić która z obecnych w pamięci podręcznej linijek może zostać usunięta. Algorytm wyboru bazuje na obserwacji zakresu wykorzystania zmagazynowanej dotychczas informacji. Skuteczność działania takiego aparatu zależy w dużej mierze od stopnia jego rozbudowania. Kontroler pamięci podręcznej procesora 80386 posługuje się trzema bitami LRU (Last Recently Used), które przechowywane są w połączeniu z rekordami katalogu TAG. Częstotliwość dostępu do informacji każdego z kanałów rejestrowana jest podczas ciągłej pracy układu: • Jeżeli ostatni dostęp do kanału Way-0 lub Way-1 okazał się trafieniem, ustawiany jest bit LRU-B#0. • Jeżeli wybrany został kanał Way-0 ustawia się bit LRU-B#$1, a dla Way-1 bit ten ulega wyzerowaniu. • Jeżeli trafienie miało miejsce w kanale Way-2 lub Way-3, bit LRU-B#0,zostaje wyzerowany. • Trafienie w kanale Way-2 oznaczane jest ustawieniem, a trafienie w kanale Way-3 wyzerowaniem bitu LRU-B#2. Bity LRU aktualizowane są w następstwie każdego cyklu dostępu. Reset (lub Start) powoduje wyzerowanie wszystkich bitów LRU. Gdy kontroler stwierdzi brak trafienia, linijka zawierająca żądaną informację sprowadzana jest do pamięci podręcznej w miejsce określane przez algorytm pracujący według schematu przedstawionego na rysunku 1.21. Jeśli brak jest wolnych pól w pamięci podręcznej, analizowane są bity LRU przynależne do danego adresu SET. Algorytm przesuwa się wzdłuż naszkicowanego powyżej drzewa logicznego i oznacza jedną z linijek jako przeznaczoną do usunięcia. W tak przygotowane miejsce sprowadzana jest z pamięci głównej żądana informacja (Cache Linę Fill). Opisana tu metoda bazująca na algorytmie LRU stosowana jest w większości omawianych w tej książce procesorów. Dzięki niej usuwana jest ta linijka, która spoczywała bezużytecznie przez najdłuższy czas. Inną drogą poszli twórcy procesora AMD K5 implementując prosty algorytm opierający się na losowym wyborze wolnego miejsca (Pseudo Random Replacement Policy). Badania statystyczne i symulacje wykazały, iż skuteczność działania takich metod nie odbiega znacznie od wyników uzyskiwanych przy pracy z LRU. Do niewątpliwych zalet układów tego typu należy zaliczyć szybkość działania i prostotę (eliminuje się bity LRU i cały mechanizm związany z ich zarządzaniem). Zakres pokrywany przez pamięć podręczną Zlokalizowana we wnętrzu procesora pamięć podręczna LI przyspiesza dostęp do bloków pamięci poziomu wyższego, który stanowi zależnie od konstrukcji, bezpośrednio pamięć operacyjna lub pamięć podręczna drugiego poziomu (L2). Dobroczynne działanie pamięci podręcznej polegające na skróceniu czasu dostępu do kolejnego wyższego bloku w hierarchii możliwe jest do osiągnięcia tylko w pewnym zakresie adresów. Zarówno rozmiary pamięci podręcznej jak i szczegóły konstrukcyjne kontrolera pamięci podręcznej ograniczają rozmiar tego obszaru (Cacheable Ared). Z faktu tego warto zdawać sobie sprawę planując rozbudowę komputera. Obszar pokrywany przez pamięć podręczną stanowi wspólną część zakresów pokrywanych przez sam procesor (wraz z L1) oraz kontroler L2. Ograniczenie stanowi zwykle kontroler L2 zlokalizowany bądź to we wnętrzu układów sterujących na płycie głównej (procesory z podstawką typu Socket 7), bądź to w samym module CPU (Intel Pentium II itp). Obecność pewnej liczby podstawek SIMM lub DIMM nie gwarantuje, że umieszczone w nich moduły pamięciowe o rozmiarze dopuszczalnym przez dokumentację będą spełniały należycie swe funkcje. Systemy operacyjne przydzielają pamięć operacyjną na własne potrzeby zwykle „od góry", czyli właśnie tam gdzie może brakować pokrycia. Rozszerzenie pamięci powyżej bariery obsługiwanej przez cache objawia się spowolnieniem komputera i ma skutek odwrotny od zamierzonego. Płyty główne z podstawką typu Socket 7 (Pentium, Pentium MMX itp.) bazują zwykle na jednym z zestawów (Chip-Set) firmy Intel. Będące już częściowo na wymarciu układy typu TX obejmują jedynie przestrzeń do 64 MB. Prawie całkowicie znikły już modele bazujące na układach HX, które gwarantowały (po umieszczeniu dodatkowego układu TAG-RAM) pokrycie obszaru do 512 MB. Dla potrzeb nowych procesorów „pentium-podobnych" współpracujących z magistralą 100 MHz stworzona została nowa generacja produktów. Zestawy układów scalonych nie pochodzą z firmy Intel, gdyż nie jest ona zainteresowana rozbudową nurtu 100 MHz na bazie innej niż Pentium II. Układy VIA-MVP3 pozwalają na pokrycie (zależnie od rozmiarów L2 i trybu pracy WB lub WT) obszaru do 512 MB a zestawy ALi-V obejmuje przestrzeń 128 MB. Tabela 1.5. Maksymalny rozmiar pamięci pokrywanej przez pamięć podręczną w układach współpracujących z procesorem Pentium Chip-Set; Intel HX; Intel TX, Intel VX, Intel FX; VIA MPV3 WB/WT 12=5/2 kB; VIA MPV3 WB/WT L2=l 024kB; VIA MPV3 WB/WT 12=2 048 kB Cachable Area [MB]; 64-512*; 64; 64 / 128; 128/256; 256/512 Podstawka; Socket 7; Socket 7; Super 7; Super 7; Super 7 Magistrala66 MHz; 66 MHz; 100 MHz; 100 MHz; 100 MHz; * - Zależne od rozmiarów TAG-RAM Chip-Set; ALi Alladin lll; ALiAlladinl IV Alladin IV+; ALi Alladin V WB/WT; SiS 5591, 5595; Cachable Area [MB]; 64-128*; 64-512*; 128/128; 64-256*; Podstawka ; Socket 7; Socket 7; Super 7; Socket 7; Magistrala; Socket 7; Socket 7; Super 7; Socket 7;X * -Zależne od rozmiarów TAG-RAM Procesor Pentium II (wraz ze swym L1 jest w stanie pokryć obszar do 64 GB. Zintegrowany z procesorem kontroler pamięci podręcznej L2 ogranicza ten obszar (zależnie od modelu) do 512 MB lub 4 GB. Do grupy pierwszej zaliczane są wszystkie procesory poniżej 300 MHz i pewna część modeli taktowanych zegarem 333 MHz. Procesory Pentium 11/333 oznaczone numerami SL2QH i SL2S5 oraz wszystkie wersje 350 MHz i 400 MHz należą do grupy drugiej. Tabela 1.6. Maksymalny rozmiar pamięci pokrywanej przez pamięć podręczną \v układach współpracujących z procesorem Pentium II Chip-Set; Intel 440EX; Intel 440LX; Intel 440BX,; Intel 440GX; Intel 440NX; Cachable Area; 256 MB; 512MB/4GB*; 5 12 MB/ 4 GB*; 8GB; Podstawka; Slot 1; Slot 1; Slot 1; Socket 8; Magistrala; 66MHz; 66MHz; 100MHz; 66MHz; *- Ograniczenie wnoszone przez procesor Pentium II Chip-Set; VIA Apollo Pro II (BXpert); SiS 560 1/5 595; ALi Alladin Pro II; (BXcel); Cachable Area; 512MB/4GB; * 512MB/4GB*; 512MB/4GB*; Podstawka; Slot 1; Slot 1; Slot 1; Magistrala; 100MHz; 100MHz; 100MHz; *=Ograniczenie wnoszone przez procesor Pentium II Obsługa przestrzeni adresowej l/O Przestrzeń adresowa procesorów dzieli się na obszar pamięci oraz na obszar wejścia-wyjścia (I/O - Input/Output). Różnica widoczna jest zarówno od strony programowej jak i sprzętowej. Rozkazy maszynowe odwołujące się do pamięci (np. MOV mem, reg) operują w pierwszym z tych obszarów. Dwa specjalne rozkazy odwołań do portów (IN i OUT) obsługują drugi z nich. Warto dodać, że rozkazy IN i OUT operują wyłącznie za pośrednictwem akumulatorów, tj. nie można przesłać zawartości pamięci bezpośrednio do portu lub skierować zawartość portu do pamięci. Przestrzeń adresowa pamięci nie ma jak wiadomo takich ograniczeń. Podczas operacji na portach ignorowane są ponadto stany rejestrów segmentowych. Przestrzeń wejścia-wyjścia można więc sobie wyobrazić jako oddzielny segment 64 kB, do którego można się zwracać wyłącznie za pośrednictwem instrukcji IN i OUT. Procesor dysponuje mechanizmem sygnalizacyjnym jednoznacznie informującym otoczenie o tym, czy aktualne odwołanie odnosi się do pamięci czy też do przestrzeni wejścia-wyjścia. Funkcje tę spełniają odpowiednie sygnały sterujące. W przestrzeni wejścia-wyjścia rozmieszczane są zwykle rejestry konfiguracyjne (zestawy przełączników binarnych) sterujące pracą różnych układów otaczających procesor lub wręcz samego procesora. Dostęp do tych rejestrów odbywa się za pośrednictwem instrukcji maszynowych IN oraz OUT, mówimy wówczas o tzw. I/O-mapped I/O. Oczywiście nic nie stoi na przeszkodzie by te same rejestry umieścić w przestrzeni adresowej procesora i odwoływać się do nich poprzez rozkazy maszynowe MOV itp. Rozwiązanie tego typu nosi miano Memory-mapped l/O. Układy logiczne kontrolera magistrali kierują i tak wszelkie odwołania do właściwej lokalizacji: pamięci lub portów. Procesor 8086 Zapis i odczyt portów nie różni się zasadniczo od analogicznych cykli dostępu do pamięci. Procesor sygnalizuje potrzebę sięgnięcia do portu poprzez specyficzny stan sygnałów sterujących ~S2, ~S1 i ~S0. Odczyt portu; ~S2 - 0; ~S1 - 0; ~S0 -1 Zapis do portu; ~S2 - 0; ~S1 -1; ~S0 - 0 Procesor 8086 może zaadresować 65 536 (64 K) portów, tak więc cztery najwyższe linie adresowe (A#19 - A#16) są zawsze równe zero. W komputerach PC-kompatybilnych używa się ponadto wyłącznie pierwszych l 024 portów (0x000h - 0x3FFh). Procesory 80386 i 80486 Procesory te mogą zaadresować: 65 536 (64 K) portów 8-bitowych o adresach rozpoczynających się od 0, l, 2 do 65535 lub: 32 768 (32 K) portów 16-bitowych o adresach rozpoczynających się od 0, 2, 4 do 65534 lub: 16 384 (16 K) portów 32-bitowych o adresach rozpoczynających się od 0, 4, 8 do 65532 Dopuszczalne jest mieszanie portów o różnych wymiarach, ale sumaryczna długość w przeliczeniu na bajty nie może przekraczać 64 K. Stan końcówki M/~IO sygnalizuje wybór przestrzeni adresowej: Odwalanie do pamięci; M/-1O -1 Odwołanie do l/O; M/-1O -0 Kierunek transmisji rozpoznawany jest w klasyczny sposób znany z cykli dostępu do pamięci: Zapis do portu; M/-1O - 1 Odczyt portu; M/-1O - 0 Ze względu na wymóg kompatybilności „w dół" (486 -> 386 -> 286) procesor 80486 blokuje adresy portów OxF8h - OxFFh używane we wcześniejszych modelach jako kanał komunikacyjny CPU-MPU (koprocesor). Dostęp do przestrzeni wejscia-wyjścia odbywa się z pominięciem pamięci podręcznej (zarówno zapis jak i odczyt portów). W trakcie pisania do portów nie korzysta się z buforów zapisu procesora. Pentium Zakres przestrzeni wejscia-wyjścia zgodny jest z procesorem 80486 (64 K portów 8-bitowych lub ekwiwalent). Na uwagę zasługuje jedynie fakt, iż w cyklach dostępu do portów bierze udział w najlepszym razie połowa szerokości 64-bitowej magistrali danych. Cykle takie omijają również pamięć podręczną oraz wszelkie bufory zapisu. Funkcje kontrolne i sterujące Współczesne procesory posiadają szereg wbudowanych funkcji kontrolnych i sterujących. Mechanizmy te należy podzielić na następujące grupy: • Systemy sterowania. Zaliczamy do nich wszelkie rejestry konfiguracyjne, których stan określa aktualny tryb pracy procesora i pozwala na wybór różnorodnych opcji. Liczna grupa tych rejestrów jest wspólna dla większości znanych procesorów, istnieją jednak pewne specyficzne rozwiązania znane tylko w obrębie danego modelu lub producenta (np. grupa rejestrów obecna jedynie w Pentium Pro). • Systemy śledzenia i nadzoru. Zestaw funkcji ułatwiających śledzenie (Debug) przebiegu wykonywanego programu na poziomie sprzętu. Grupa ta obejmuje również mechanizmy ułatwiające ocenę wydajności przetwarzania (Performance Monitor ing) oraz wszelkiego rodzaju stopery i układy pomiaru czasu (Timerś). • Systemy diagnostyczne. Stanowią wewnętrzne systemy kontrolne pierwszego poziomu i ułatwiają wykrywanie błędów w pracy wewnętrznych systemów CPU. Do grupy tej należy również zaliczyć tryb JTAG (począwszy od 80486 50 MHz). BIST Na systemy kontrolne CPU składają się: ogólny tester wewnętrzny (BIST), systemy kontroli TLB i pamięci podręcznej oraz mechanizm przejścia w stan wysokiej impedancji. Konkretna implementacja danych funkcji zależy od producenta i wersji procesora, część z nich została wprowadzona dopiero na określonym etapie rozwoju. Aby nie zaciemniać obrazu, podamy jedynie krótki przegląd tych układów. BIST (Built In Self Test) stanowi zestaw testów wewnętrznych obejmujących między innymi układy logiczne, wewnętrzną pamięć ROM procesora oraz częściowo pamięć podręczną i TLB. Funkcja aktywuje się w następujących okolicznościach: • Jeśli wejście AHOLD utrzymywane jest w stanie wysokim przez czas dłuższy od dwóch cykli zegarowych CLK. • Po powrocie sygnału RESET do stanu niskiego Czas trwania testu wynosi około 220 cykli zegara. Wynik testu odkładany jest w rejestrze EAX. Ocena 0x00000000b wskazuje na wynik bezbłędny, każda inna wartość dyskwalifikuje procesor. Kontrola TLB Funkcja służy kontroli układu TLB i wprowadzona została po raz pierwszy w modelu 80386. Interfejs sterujący zbudowany jest w oparciu o rejestry TR6 i TR7. Kontrola polega na zapisie rekordu do TLB i odczycie kontrolnym z porównaniem (TLB-Lookup). Kontrola pamięci podręcznej System kontroli pamięci podręcznej procesora (On-Chip Cache} sterowany jest grupą rejestrów kontrolnych TR3 - TR5. Rejestry te stanowią porty umożliwiające bezpośredni dostęp do pamięci podręcznej. Można dzięki temu przeprowadzić następujące funkcje kontrolne: zapis i odczyt bufora, zapis i odczyt cache, oczyszczenie pamięci podręcznej (Cache Flush). Przejście w stan wysokiej impedancji Funkcja służy do lokalizowania usterek i przeprowadzania testów układów otoczenia procesora. Odpowiada w przybliżeniu wyjęciu CPU z podstawki, bowiem wszystkie końcówki wyjściowe i dwukierunkowe (warunkowe wyjście lub wejście) przechodzą w stan wysokiej impedancji i nie mają wpływu na stan przyłączonych do nich linii. JTAG JTAG (nazywany też Boundary Scan Test) stanowi potężny system diagnostyczny używany głównie w fazie projektowania i testowania układów otoczenia procesora. Warto podkreślić, iż omawiany tu mechanizm ma znaczenie wyłącznie dla producentów sprzętu. Chociaż użytkownik komputera nie ma najmniejszej potrzeby uciekania się do funkcji oferowanych przez ten system, wyjaśnimy w tym punkcie jego elementarne cechy. JTAG wprowadzony został po raz pierwszy do modelu 80486-50 pracującym wtedy jeszcze bez wewnętrznego podwajacza częstotliwości. Wszystkie późniejsze wersje tego procesora (DX2-50, SX-xx i wzwyż) oraz ich następcy miały już zaimplementowany JTAG. System pozwala widzieć procesor jako „czarną skrzynkę" z pewną ilością wyprowadzeń. Istota rzeczy polega na tym, że stan dowolnej końcówki można nie tylko ustawić (oddziaływanie procesora na układy otaczające) ale i odczytać (ocena działania układów zewnętrznych). Aby umożliwić taki tryb pracy należy odseparować „właściwą" strukturę procesora od świata zewnętrznego. W istocie rzeczy, każde wyprowadzenie obudowy nie jest bezpośrednio połączone ze swym logicznym punktem docelowym lecz przebiega przez pole komórek BST. Dla zapewnienia efektywnej kontroli nad polem komórek BST zostały one połączone w jeden szereg, a pracę całego systemu nadzoruje specjalny kontroler TAP (Test Access Port). Dostęp do kontrolera odbywa się za pośrednictwem czterech końcówek: TMS, TDI, TDO i TCK. TCKTest Clock, końcówka wejściowa. Wejście zegarowe sygnału taktującego kontrolera TAP. TDITest Data Input, końcówka wejściowa. Punkt wejściowy rejestru BST i kontrolera TAP. Podawana tędy informacja zostaje wprowadzana synchronicznie z zegarem TCK. TDOTest Data Output, końcówka wyjściowa. Stanowi wylot rejestru przesuwnego i punkt wyprowadzania danych od kontrolera. Proces odbywa się synchronicznie z impulsami zegarowymi TCK. Kontrolery TAP mogą być łączone w szereg, co daje możliwość efektywnego testowania grupy urządzeń, np. płyt głównych systemów wieloprocesorowych. Wyjście TDO kierowanie jest wówczas na wejście TDI kolejnego układu kaskady. TMSTest Modę Select, końcówka wejściowa. Wymuszenie wysokiego stanu logicznego na tym wejściu powoduje uruchomienie całego układu JTAG. Przetrzymanie stanu wysokiego przez okres powyżej pięciu cykli zegarowych procesora oznacza reset dla kontrolera TAP i powrót do domyślnej konfiguracji. Częstotliwość taktowania Częstotliwość taktowania procesora leży w ścisłym związku z zegarem magistrali i stanowi jego wielokrotność. Wartość mnożnika ustalana jest poprzez stan specjalnych końcówek sterujących (BF) procesora. Obecna powszechnie w komputerach PC magistrala PCI narzuca limit na częstotliwość szyny wewnętrznej wynoszący 66 MHz, połowę tej częstotliwości stanowi zegar taktujący magistralę PCI (33 MHz). Układy peryferyjne zgodne ze standardem PCI muszą pracować niezawodnie przylej częstotliwości. CPU generacji 586 obarczone są sporą wadą: nie wiedzą jaka jest ich właściwa częstotliwość taktowania. Procesor przyjmuje na swoje wejście pewną częstotliwość zegarową i powiela ją zgodnie z wartością zakodowaną na końcówkach BF. Liczba takich końcówek wynosi zależnie od modelu od jednej do trzech a ich położenie zaznaczone jest na rysunku 1.25. Właściwe ustawienie mnożnika leży w gestii płyty głównej, która dysponuje zwykle zestawem zwor konfiguracyjnych. Sytuację pogarsza fakt, iż różne typy procesorów interpretują tą samą kombinację poziomów na wejściach BF na różne sposoby (tabela 1.7). Ustawienie BFO = BF1 = l oznacza dla klasycznego Pentium współczynnik x l,5 (100 MHz przy magistrali 66 MHz), a dla Pentium MMX i AMD K6 wartość x3,5 (233 MHz dla tej samej częstotliwości magistrali). Sama obecność końcówki w procesorze to dopiero połowa sukcesu. Musi być również możliwość sterowania jej poziomem logicznym czyli fizyczne połączenie odpowiedniego styku na podstawce ze zworą. Końcówka „wisząca w powietrzu" zachowuje się jak logiczna jedynka. Aktualny przykład to rzadko obecne w starszych płytach wyprowadzenie BF2 niezbędne dla procesora AMD K6 przewidzianego do pracy z częstotliwością 266 MHz. Maksymalna wartość mnożnika bez udziału BF2 sięga jedynie do x3,5 co ogranicza wartość zegara CPU do 233 MHz. Tabela 1.7. Wartości mnożników dla podstawowych typów procesorów BFO pin Y33; 0; 1; 0; 1 0; 1; 0; 1; BF1 pin X34; 0; 0; 1; 1; 0; 0; 1; 1; BF2 pin W35 1; 1; 1; 1; 0; 0; 0; 0; Pentium; x2,5; x3; x2; xl,5; -; -; -; -; Pentium MMX; x2,5; x3; x2; x3,5; -; -; -; -; AMDK6 x2,5 x3 x2 x3,5 x4,5 x5 x4 x5,5 1DTC6; -; x3; x2; x4; -; x5; x4; -; IDTW2; -; x3; x2; -; -; x5; x4; -; Cyrix M2; x2,5; x3; x2; x3,5; -;--; -; x- znaczy razy Warto również wspomnieć o istotnym szczególe konstrukcyjnym różniącym procesory Pentium i Pentium MMX. Modele standardowe mają wewnętrzne rezystory podciągające poziom napięcia na wyprowadzeniach BFO i BF1 (Pull-up). Wraz z pojawieniem się serii MMX firma Intel zdecydowała się na wprowadzenie zmiany: końcówka BFO wyposażona została w rezystor sprowadzający do masy (Pull-down). Poziomowanie linii BF1 nie uległo przy tym zmianie. Często jedynym ratunkiem dla posiadaczy nieco starszych płyt głównych borykających się z problemami właściwych mnożników jest sięgnięcie po multimetr, pomiar napięć na końcówkach BF i ewentualna ingerencja przy pomocy lutownicy i zewnętrznych rezystorów. Nie tylko procesory ale i układy je otaczające (Chip-Sef) pracują coraz szybciej. Sprzyja temu rozwój nowych typów pamięci (na przykład SDRAM) oraz modyfikacje standardu PCł (powyżej 33 MHz). Na rynku pojawiają się coraz częściej płyty główne dopuszczające taktowanie magistrali z prędkościami 75 MHz, 83 MHz a ostatnio 100 MHz. Ta mnogość częstotliwości w połączeniu z szerokim zakresem mnożników daje szerokie pole dla różnych (nie zawsze rozsądnych) eksperymentów. Nominalną częstotliwość taktowania procesora można zwykle osiągnąć na kilka sposobów, na przykład: Magistrala; Mnożnik; CPU200MHz; 66 MHz; x3; 198 MHz (standard); 75 MHz; x2,5; 187 MHz; 83 MHz; x2,5; 207 MHz; Podobnie można postępować w przypadku modelu 233 MHz. Podniesienie częstotliwości magistrali należy zawsze przedkładać nad przyspieszeniem zegara samego procesora: Magistrala; Mnożnik; CPU 233 MHz; 66 MHz; x3,5; 23 1 MHz (standard); 75MHz; x3; 225 MHz (lepiej); Niektórym trudno oprzeć się pokusie by wypróbować również następujące kombinacje: Magistrala; Mnożnik; Zegar CPU; 75 MHz; x3; 225 MHz (zamiast 200); 83 MHz; x2,5; 249 MHz (zamiast 233); 75 MHz x3,5 262 MHz (zamiast 233) Dwie ostatnie opcje należy stanowczo odradzić, chociaż obserwowane wyniki (mierzone programami typu benchmark) są często imponujące: 10 - 20%. Przyrost mocy obliczeniowej osiągany na poziomie aplikacji nie jest jednak aż tak znaczący by usprawiedliwić ryzyko trwałego uszkodzenia procesora lub innych elementów. Operacjom wymuszania zwiększonej częstotliwości pracy poddają się również procesory Pentium II, chociaż zważywszy na ich cenę należałoby odradzać wszelkich nierozsądnych eksperymentów. Manipulować można w zasadzie (Niektóre operacje wymagaj ą u żyć i a lutownicy, szczegóły na odpowiednich stronach Internetu.), zarówno zegarem taktującym procesor (mnożnik) jak częstotliwością pracy magistrali (66 lub 100 MHz). Szczególna ostrożność zalecana jest w przypadku procesorów Pentium Ii/Celeron. Model 266 MHz ma trwale ustawiony mnożnik x4 i nie reaguje na ustawienie zwor konfiguracyjnych płyty. Ponieważ procesory tego typu przewidziane są do współpracy z magistralą 66 MHz, nie wolno zmuszać ich do współdziałania z szyną taktowaną zegarem 100 MHz bowiem powstającej nadwyżki (400 zamiast 266 MHz) i tak nie da się skompensować. To samo odnosi się do modelu Celeron 300 zmuszanego do pracy z szybkością 450 MHz. Zasilanie Właściwe napięcie zasilania procesora typu Pentium Pro i Pentium II dobierane jest przez BIOS automatycznie na podstawie odczytania informacji dostarczanych przez CPU (kodowanie przy pomocy bloku końcówek konfiguracyjnych). Procesory rodziny Pentium (włączając w to również odmianę MMX) nie mają mechanizmu automatycznej konfiguracji napięcia zasilającego i obowiązek ten spoczywa na użytkowniku. W praktyce zagadnienie to sprowadza się do odpowiedniego ustawienia zwór konfiguracyjnych (zgodnie z instrukcją dołączoną do płyty). W obiegu spotkać można trzy rodzaje płyt głównych dla procesorów zgodnych z Pentium: • Płyty z podstawką typu 4 (Socket 4) przeznaczona do obsługi najstarszej odmiany Pentium - modeli 60 i 66 MHz. • Płyty wyposażone w podstawkę typu 5 (Socket 5) skonstruowane dla CPU drugiej generacji. Procesory tego typu taktowane były do 133 MHz i zasilane napięciem 3,3 V przy stosunkowo ograniczonym poborze prądu. Sterowanie mnożnikiem częstotliwości sprowadzało się do wyboru jednego z dwóch stanów końcówki BFO(xl,5 Iubx2). • Najszerzej rozpowszechniona jest generacja płyt z podstawką typu 7 (Socket 7), której specyfikacja dopuszcza maksymalną częstotliwość taktowania równą 266 MHz. Płyty tej grupy występują w trzech wariantach: • Brak możliwości wymuszenia na stabilizatorze napięcia 2,8 V przy jednoczesnym braku podstawki modułu dodatkowego regulatora (VRM). • Płyta ma wspomniane powyżej gniazdo i brakujące napięcie 2,8 V można wytworzyć przy użyciu modułu dodatkowego regulatora VRM. • Oryginalny stabilizator napięcia dysponuje opcją 2,8 V. Wszystkie płyty z podstawką typu 7 mają już wyprowadzone nie tylko końcówki BFO ale i BF1 co poszerza zakres możliwych wartości mnożnika częstotliwości taktowania wnętrza procesora. Kłopoty związane z mnogością poziomów napięć wynikły z konieczności rozdzielenia obwodów zasilających jądro procesora (V#CORE) od członów współpracujących z magistralami (V#I/O). Nieustający wyścig częstotliwości taktujących powoduje przecież wzrost energii rozpraszanej na ciepło i wzrost temperatury struktur półprzewodnikowych do niebezpiecznych wartości. Jeśli tych niekorzystnych zjawisk nie można zahamować na drodze minimalizowania rozmiarów (przejście do technologii 0,25 urn i dalej), trzeba zmniejszyć prąd pobierany przez obwody procesora. Nie można jednak zmniejszać poziomów napięć wystawianych na magistralę, gdyż grozi to zachwianiem równowagi na liniach przesyłowych. Jedynym rozsądnym kompromisem jest rozdzielenie tych obwodów i operowanie poziomami optymalnymi dla każdego z nich. Linia zasilania V#I/O musi doprowadzać napięcie w zakresie około 3,2 V. Obniżenie poziomu V#CORE o kilkanaście procent (do wysokości około 2,8 V) daje zadowalający efekt w zakresie częstotliwości do 233 MHz włącznie. Różnica powyżej l V (poziom 2,1 V) wymagana jest dla procesorów osiągających zakres 266 - 300 MHz. Niestety każdy z producentów preferuje własne, uznane za optymalne, poziomy napięć (tabela 1.8). Zdarza się nawet, że te same procesory mają nadrukowane różne wartości napięć, zależnie od serii, z której pochodzą. Producenci płyt głównych usiłują zapanować nad tym zamętem wyposażając programy BIOS w coraz to przemyślniejsze algorytmy rozpoznawania typów procesora. Sytuację ratuje nieco fakt, iż procesory o rozdzielonych obwodach zasilania (Split-Voltage) meldują się przy pomocy specjalnej końcówki V#CC2DETECT- Płyta zostaje poinformowana o konieczności doprowadzenia dwóch różnych napięć, ich wielkość jednak trudna jest do określenia w sposób automatyczny i leży w gestii użytkownika. Zamieszanie wprowadzają „rodzynki" typu AMD K6/233 opatrzone napisem 3,3VCore/3,3VI/O, które meldują się jako Split-Voltage. Większość płyt nie jest oczywiście przygotowana na taką okoliczność, bowiem zakres napięć V#CORE kończy się w punkcie 3,2 V. Dobre i uniwersalne płyty potrafią podać (chociaż nie zawsze jest to odnotowane w dokumentacji) każde napięcie z przedziału 2,0 - 3,5 V (w odstępach 0,1 V). Sztandarowy przykład stanowią produkty serii TX97 firmy ASUS (rysunek 1.26). Potwierdzenie poprawności danego ustawienia znaleźć można w programie BlOS-Setup na stronie Power Management w punkcie zatytułowanym VCORE Yoltage. Ilość energii zużywanej przez procesor zależy w dużej mierze od jego aktywności. Szczytowe obciążenie występuje podczas przetwarzania materiału MPEG a minimalne w stanie oczekiwania na reakcję użytkownika. Ponieważ bieg jałowy jest różnie implementowany przez różne systemy operacyjne, pobór prądu w oczekiwaniu na komendę (System Prompf) jest dużo mniejszy w NT i OS/2 niż w Windows 95. Istotne różnice zaobserwować można również po zamianie typu procesora. Intel MMX 233 MHz; NT4 Prompt - 4,9 A; DOS Prompt - 5,2 A; AMD K6 233 MHz; NT4 Prompt -7,2 A; DOS Prompt - 1,9 A; Obciążenie linii V#IO jest oczywiście dużo mniejsze niż źródła VCORJ-:- Typowy rozkład wartości przedstawia poniższe porównanie. Intel-MMX 233 MHz; V#CORE/I#CORE-2,8 V/ 6,7 A; V#IO/I#IO-3,3 V 70,8 A AMD-K6 233 MHz; V#CORE/I#CORE-3,2 V/ 9,5 A V#IO/I#IO-3,3 V 70,5 A Obniżanie napięcia zasilania CPU prowadzi zwykle do niestabilnej pracy ale nie szkodzi procesorowi i warto z pewnością pokusić się o taką próbę. Niektóre modele procesorów bardzo dobrze znoszą takie zabiegi (na przykład AMD-K6-233, CPUID Stepping 2 opisany jako V#CORE = 3,2V). Redukcja poziomu napięcia do wartości 2,8 V pozwala na ograniczenie poboru mocy z 34 W do 27 W. Operacja przynosi efektywny spadek temperatury mierzonej na powierzchni obudowy o 5 °C.)pięć stopni celcjusza) Przegląd architektury procesorów Wnętrze współczesnego komputera klasy PC zawiera w sobie szereg produktów najróżniejszych firm. Oferta jest tak bogata, że w niektórych dziedzinach nie sposób byłoby nawet wymienić wszystkich znaczących producentów. Nie dotyczy to jednak procesorów. Przeważająca część rynku opanowana jest przez trzy firmy, z których jedna zdominowała w zasadzie całą resztę. Można śmiało zaryzykować stwierdzenie, iż zaglądając do statystycznego PC-ta nowej generacji odkryjemy w nim jeden z opisanych w tym rozdziale procesorów. Krótkie przedstawienie każdego z nich obejmuje zwięzły opis, schemat blokowy i tabelarycznie ujęte główne cechy architektury. W dalszej części rozdziału omówione zostaną produkty następujących firm: • AMD (rodziny K5, K6 wraz z odmianami i K.7) • IBM/Cyrix(M1M2) • Intel (Pentium, Pentium MMX, Pentium Pro, Pentium II wraz z odmianami Celeron i Mendocino, Xeon, Pentium III) • IDT (WinChip C6 i WinChip 2) • Rise Czytelników chętnych do dalszego zgłębiania zagadnień architektury procesorów odsyłam do odpowiednich stron Internetowych. AMD - www. amd.com Cyrix - www. cyrix. com National Semiconductor - www.nsc.com Intel - www. intel. com IDT - www. winchip. com Rise - www.rise.com Ogólne informacje na temat procesorów, programy konfiguracyjne i testujące - www. cpu-central. com www.processor. org www. altx86. com www. cpumadness. com Procesory AMD Rodzina K5 Procesor AM5#(K)86 (K5) był pierwszym w pełni niezależnym projektem firmy AMD. Wszystkie poprzednie modele z serii 386 i 486 kopiowały w mniejszym lub większym stopniu oryginały Intela. Jądro procesora K5 opiera się na superskalarnej architekturze RISC. Napływający strumień rozkazów x86 analizowany jest przez dekoder i tłumaczony na ciąg elementarnych operacji (mikrorozkazów) w wewnętrznym kodzie procesora. W terminologii AMD takie elementarne rozkazy RISC noszą miano ROP (RISC Operations}. Rozkazy proste tłumaczone są przez dekoder pracujący w szybkim trybie (Fast Patii), a rozkazy bardziej skomplikowane wymagają odwołania się do sekwencera rozwijającego odpowiednią sekwencję ROP z pamięci stałej EPROM. Niezależnie od sposobu kodowania cegiełki ROP mają zawsze stałą długość. Wypływający z dekodera strumień ROP kierowany jest do jednostek wykonawczych. K5 dysponuje sześcioma takimi jednostkami: dwoma arytmetyczno-logicznymi dla liczb całkowitych, jedną dla zmiennoprzecinkowych, dwoma kanałami dla obsługi operacji typu Load/Store i jedną do przetwarzania instrukcji rozgałęzień. Nad właściwym rozdziałem ROP do odpowiednich jednostek czuwa system dystrybucji (Dispatcher), który jest w stanie rozesłać w jednym cyklu zegarowym maksymalnie cztery mikroroz-kazy. Jeśli dana jednostka jest aktualnie zajęta, skierowane do niej mikrokody oczekują w kolejce RS (Reservation Station). Zdecydowana większość ROP może być kierowana do dowolnej z dwóch jednostek ALU a tylko nieliczne z nich wymagają obsługi przez konkretną jednostkę. Duża wydajność procesora gwarantowana jest jedynie w sytuacji stałego i pełnego wykorzystania wszystkich jednostek wykonawczych. W trosce o nieprzerwany dopływ ROP do tych układów procesor wyposażony został w szereg dodatkowych mechanizmów wspomagających. Do głównych z nich zaliczyć należy opisane wcześniej systemy Register Renaming oraz Data Forwarding. Procesor przetwarza w miarę możliwości również poza kolejnością (Out of Order Execution) a zlokalizowany u wylotu potoku 16-stopniowy bufor ROB (Reorder Buffer) troszczy się o ich ponowne uszeregowanie zgodnie z pozycją zajmowaną w realizowanej sekwencji rozkazów x86. System przewidywania rozgałęzień zapamiętuje l 024 adresów skoków i gwarantuje współczynnik trafienia około 75%. Napotkanie rozgałęzienia powoduje, iż pobieranie kolejnych instrukcji odbywa się w kierunku typowanym przez układ przepowiadania. Instrukcje są dekodowane i wykonywane ale ich wyniki przechowuje się w buforze ROB do czasu potwierdzenia słuszności przypuszczalnie wybranej drogi. Jeśli przewidywanie okaże się fałszywe, procesor traci 3 takty zegara potrzebne na opróżnienie potoków, rejestrów i buforów. Pamięć podręczna procesora podzielona jest na wyizolowane bloki obsługujące w niezależny sposób dane i kod. K5 przeznacza dla kodu 16 kB, co stanowi wartość dwukrotnie większą niż w Pentium. Każdy z zapamiętywanych bajtów opatrzony jest dodatkową 5-bitową sygnaturą (Pre-Code Bits) będącą wynikiem pracy układu dekodowania wstępnego. W ten sposób ulega skróceniu czas przebywania instrukcji w układzie właściwego dekodera. Pamięć podręczna danych zajmuje 8 kB. System pamięci podręcznej zorganizowany jest w linijki 32 bajtowe, jednak najmniejszą porcją informacji wymienianej z pamięcią operacyjną stanowią dwie takie linijki. Magistrala przystosowana jest więc w naturalny sposób do obsługi adresów leżących na granicy 64-bajtów (Q-Word). Próba dostępu do obiektu leżącego „gdzieś pomiędzy" rozkładana jest przez większość procesorów na dwa cykle. K5 potrafi jednak wygenerować taki zestaw sygnałów sterujących (Split Linę Access] by omawiany problem nie wystąpił. Układ sterowania pamięcią podręczną procesora K5 (zarówno dla kodu jak i danych) prowadzi podwójny (Dual Tagged) system katalogów. W jednym z nich przechowywane są adresy fizyczne a w drugim adresy liniowe. Osiągane w ten sposób znaczne przyspieszenie dostępu do pamięci podręcznej okupywane jest koniecznością dodatkowego rozbudowania układów sterujących dla potrzeb nadzorowania spójności (Cache Tag Recovery) dwóch systemów adresowania. Tabela 1.9. Podstawowe dane procesorów AMD ( P R- 100; P R- 133; P R- 166) Architektura; RISC Zegar CPU [MHZ]; 100 (P R- 100; P R- 133;) 116 (P R- 166) Magistratu [MHZ]; 66 Mnożnik (BF); xl.5(BF=l) P R- 100 xl.5(BFl/BFO=10) P R- 133 xl,75(BFl/BFO=00)P R- 166 L1 Cache (kod); 16 kB. 1 Bank, 4x Associative, Dual Tags (linear + phys.), Linę Cache 32 byte L1 Cache (dane); 8 kB, 4 Banks, 4x Associative, Dual Tags, MESI, WB, Linę Cache 32 byte L2 Cache on Chip; x Pipe-Lines, 6 Pipe-Line Stages; 5 Out oj Order Execution; < 16 Branch History Table; 1 024 Branch Target Buffer; 1 024 V#CORE[V] V#IO[0] Pobór mocy, typ. [ W]; 12.6 10,6 12,3 Return Stack; Renaming Registes; Performance Monitor ing; Time Stamp Counter; Podstawka; Socket 7, P54C * System niezgodny z Pentium Rodzina K6 Projekt tego procesora nie był w zasadzie dziełem AMD lecz przejęty został wraz z zakupioną fmną NexGen. Połączenie okazało się niezmiernie korzystne dla obu stron. Rozwijana przez NexGen nowoczesna technologia6 została zaadaptowana dla potrzeb niezmiernie chłonnego rynku komputerów klasy PC i wypromowana przez firmę, która wprawdzie zdobyła już pozycję w tym sektorze ale nadal nie dysponowała „okrętem flagowym" mogącym skutecznie odpierać nieustające ataki konkurencji. Tak więc zakupiony procesor (wtedy jeszcze o nazwie Nx686) został na tyle przebudowany by móc dać się umieścić w' podstawce Socket 7 typowej płyty głównej w miejsce zwykłego procesora Pentium. Uzyskany produkt końcowy otrzymał nazwę handlową K6, co miało stanowić nawiązanie do sprzedawanego do tej pory przez AMD własnego opracowania znanego pod symbolem K5. Płyta główna zdolna do przyjęcia procesora NexGen bazowała na specjalnie opracowywanych do tego celu układach scalonych (Chip-Set). Winę za to ponosiła całkowita niezgodność z architekturami „intelopodobnymi", na przykład specjalna super szybka magistrala łącząca procesor z pamięcią podręczną L2. Tabela 1.10. Podstawowe dane procesorów AMD K6(166; 200; 233; 266*; 300*) Architektura; RISC 86 Technologia; 0.35 um; 0.35 um; 0.35 um; 0,25 um; 0.25 um; (um - czytaj mikrometr) Zegar CPU [MHz]; 166; 200; 233; 266; 300; Magistrala [MHz]; 66; 66; 66; 66; 66; Mnożnik (BF); x2.5; x3; x3,5; x4; x4.5; L1 Cache (kod); 32 kB. 2x Associative (2 Ways) L1 Cache (dane); 32 kB. 2x Associative. WB (2 Ways) L2 Cache on Chip; x Pipę- Lines; 7 Pipę- Linę Stages; 6 (FP: 7) Out of Order Execution; Branch History Table; 8192 TLB; Code Cache TLB: 64 Entries Data Cache TLB: 128 Entries L2 TLB: - Branch Target Buffer; 16 V#CORE9V]; 2.9 (2.76-3.05); 2.9 (2.76-3.05); 3.2 (3.1-3.3); 2.1; 2.1 V#IO[V]; 3.3 (3.14-3.6); 3.3 (3.14-3,6); 3.3 (3.14-3.6); 3.3; 3.3; Pobór mocy, typ. [W]; 10; 12; 17; 6 (max. 11.5); 7 (max. 12,5) Return Stack; 16 Renaming Registers; 48 (8 + 40) Performance Monitoring; x Time Stamp Counter; x Podstawka; Socket 7. P55C * Przejście z technologii 0.35 jam na 0,25 (im miało miejsce w połowie 1997 K6 był jak na owe czasy konstrukcją bardzo nowoczesną i pod wieloma względami przewyższał swych aktualnych konkurentów. Jądro procesora pracuje w trybie RISC. Operacje w kodzie x86 rozkładane są na krótkie kody wewnętrzne noszące tym razem miano RISC86. Układ dekodera jest niezmiernie wydajny i pobierając jednorazowo 16 bajtów kodu x86 produkuje w ramach jednego cyklu zegarowego do 4 mikroinstrukcji. Mikroinstrukcje opuszczając dekoder spływają do zbiornika pośredniego (Schedider), gdzie oczekują na zwolnienie właściwej dla danego rozkazu jednostki przetwarzającej. Procesor dysponuje sześcioma takim układami: dwiema dla operacji na danych całkowitych (Jnteger), po jednej dla przesłań do i z pamięci, zmiennoprzecinkową i MMX. Wszystkie jednostki za wyjątkiem dwóch ostatnich Projekt jednostki MMX przejęty został od Intela na mocy wzajemnej umowy licencyjnej. Koncepcja wyklucza jednoczesną pracę MMX i FPU bowiem obydwa bloki korzystają ze wspólnych rejestrów.),mogą przetwarzać mikrokody RISC równolegle i jednocześnie. Wzajemne uzależnienia kodu w strumieniach równoległych rozwiązywane są poprzez przemianowywanie rejestrów. Do dyspozycji tej funkcji oddano 32 dodatkowe rejestry 32-bitowe. Układ przepowiadania śledzi zachowanie 8 192 instrukcji rozgałęzień przez co cechuje się bardzo dużą dokładnością trafień. K 6 wyposażony został w 64 kB pamięci podręcznej, po 32 kB dla kodu i danych, co stanowi wartość czterokrotnie większą niż w przypadku Pentium i dwukrotnie większą niż Pentium MMX. Na uwagę zasługuje również organizacja pamięci pośredniej jednostki MMU. Tablice TLB (Transaction Look-aside Buffef) dla kodu są w stanie zapamiętać do 128 rekordów (dla porównania Pentium Pro tylko 32). Rodzina K6-2 W połowie 1998 roku na rynku pojawiły się procesory K6 (jądro typu Chomper) dostosowane do pracy z magistralą FSB (Front Side Bus} 100 MHz. Firma AMD rzuciła w ten sposób wyraźne wyzwanie monopolistycznej polityce Intela ukierunkowanej na rozwój linii Pentium II i uśmiercenie szeroko rozpowszechnionej podstawki Socket 7. Ponieważ obowiązująca w tym zakresie specyfikacja dopuszczała maksymalną częstotliwość szyny FSB wynoszącą 66 MHz, nowy „wynalazek" propagowany był jako podstawka Super 7 (Socket Super 7). Prawidłowe rozpoznanie i skonfigurowanie procesora nowego procesora wymaga oczywiście wsparcia ze strony BIOS co oznaczało konieczność jego aktualizacji. Jeśli nie jest możliwe wgranie nowej wersji (FLASH-BIOS) lub ewentualna wymiana pamięci EPROM można próbować posłużyć się jednym z programów konfiguracyjnych (na przykład setk6.exe). Na straconej pozycji znajdują się posiadacze płyt pozbawionych wyprowadzenia końcówki BF2 co uniemożliwia ustawienie mnożnika powyżej x3,5. Zwracać też należy uwagę na dostateczną wydajność źródła prądowego: procesory tej serii czerpią około 10 A. Procesory K6-2 mogą współpracować z magistralą FSB zarówno w wersji 66 MHz jak i 100 MHz. Układy sterujące (Chip-Sef) do tych ostatnich pochodzą wyłącznie od konkurentów Intela, bowiem polityka tej firmy nie przewiduje przyszłości dla magistrali 100 MHz doprowadzanej do podstawki typu Socket 7. Warto zwrócić uwagę, iż modele 100 MHz różnią się w istotny sposób od dotychczasowych wersji 66 MHz. Nowość (a zarazem pewien problem techniczny) stanowi bowiem uniezależnienie częstotliwości szyny głównej od magistrali PCI i AGP. Typowe dla dotychczasowej architektury było uzyskiwanie częstotliwości 33 MHz, taktującej szynę PCI, poprzez prosty podział zegara magistrali procesora (66 MHz : 2). Szyna AGP otrzymywała natomiast pełny przebieg 66 MHz. Wszystkie te przebiegi były ze sobą wspaniale zsynchronizowane, bowiem wywodziły się ze wspólnego źródła. Ten prosty mechanizm podziału stosowany jest również dla magistrali 75 MHz, a nawet 83 MHz, co znoszą z różnym szczęściem układy peryferyjne PCI i AGP (gwarancja działania obejmuje zakres do 33 MHz). Na tynku znajduje się niestety zbyt duża liczba płyt głównych pozwalających na manipulację częstotliwościami magistral w zakresie wybiegającym często poza zdrowy rozsądek. Należy pamiętać, iż podnoszenie ponad miarę częstotliwości szyny PCI zagraża nie tylko kartom graficznym i innym urządzeniom PCI ale ma również ujemne skutki dla kontrolera IDE, co objawiać się może sporadycznymi błędami zapisu i odczytu dysków. Tabela 1.11. Podstawowe dane procesorów AMD K6-2(266; 300 ; 333; 350; 366; 380 ; 400; 450 ; 475 ; 500} Architektura; RISC 86 Technologia; 0.25 um Zegar CPU [MHzJ; 266; 300 ; 333; 350; 366; 380; 400; 450; 475; 500 Magistrala [MHz]; 100/66; 100/66; 66; 100; 66; 95/75; 100; 100; 95; 100 Mnożnik (BF); x2.5/x4; x3/x4.5; x5; x3,5; x5,5; x4/x5; x4; x4,5; x5; x5 LI Cache (kod); 32 kB, 2x Associative 20 kB Predecode Cache LI Cache (dane); 32 kB, 2x Associative, WB L2 Cache on Chip; x Pipe-Lines; 7 Pipe-Line Stages; 6(FP:7) Ont of Order Execution; Branch History Table; 8192 Branch Target Buffer; 16 V#CORE[V]; 2.2 (266; 300 ; 333; 350; 366; 380; 400;); 2,2/2,4 (450; 475 );2.2(500) V#IO[V]; 3,3 Pobór mocy, max. [W]; 14,7; 17,2; 19,0; 19,95; 20,8; 21,6; 22,7; 18,8do28,4*; 19,8do29,6*; 20,75 Return Stack; 16 Renaming Registers; 48 (8 + 40) Podstawka; Socket Super 7 * - Pobór mocy dla procesorów zasilanych napięciem 2.4 V. Poważna trudność powstaje w momencie gdy częstotliwość przebiegu wyjściowego (magistrala CPU) wynosi 100 MHz. Z takiego źródła niełatwo jest uzyskać zsynchronizowane przebiegi 33 MHz i 66 MHz. Stosuje się dwa sposoby podejścia do tego problemu. Pierwszy z nich to asynchroniczny tryb pracy. Magistrala główna i procesor mają własny zegar 100 MHz. Szyna AGP wyposażona zostaje w niezależny generator 66 MHz, z którego sygnał po podziale przez 2 posyła się na magistralę PCI. Rozwiązanie drugie to tak zwany tryb pseudosynchroniczny polegający na przemyślnym wyprowadzaniu (poprzez kolejne dzielenia i mnożenia) potrzebnych częstotliwości (66 i 33) z zegara 100 MHz. Tryb asynchroniczny ma istotną wadę: połączenie i współpraca magistral taktowanych różnymi częstotliwościami wymaga stosowania buforów pośrednich przechowujących dane. Skomplikowany na pozór tryb pseudosynchroniczny gwarantuje lepsze sprzężenie, bowiem mimo nierównomierności cyklów ich wzajemne przesunięcia są jednoznacznie zdefiniowane i kontrolery magistral mogą lepiej przewidzieć stosowne momenty dla wymiany danych. Magistrala 100 MHz to nie jedyna nowość wprowadzona do procesorów AMD K6-2. Drugim istotnym elementem jest rozszerzenie o funkcje określane mianem 3DNow!. W trosce o zmniejszenie dystansu dzielącego K6 od Pentium II (zwłaszcza w zakresie działań na liczbach zmiennoprzecinkowych) zmodyfikowano jednostkę FPU. 3DNow! to nowy zestaw dodatkowych rozkazów uzupełniających funkcje MMX. Dopuszczalne jest mieszanie rozkazów obydwu typów w ramach tej samej aplikacji. Znana z systemu MMX idea grupowego przetwarzania danych SIMD (Single Instruction Mnltiple Data) znalazła tu zastosowanie w odniesieniu do liczb zmiennoprzecinkowych. Lwia część rozkazów 3DNow! operuje na rejestrach 64-bitowych, których zawartość interpretowana jest według schematu przedstawionego na rysunku l .29. Dla każdej z liczb przeznacza się 32 bity: l bit na znak, 23 bity na mantysę i 8 bitów na eksponentę. Powyższy sposób kodowania pozwala na przetwarzanie liczb z zakresu 10j8 do l O'38 z dokładnością 2'24. Platformą łączącą nowe rozkazy 3DNow! z aplikacjami multimedialnymi (główny nacisk kładzie się na funkcje 3D) stanowi system DirectX w wersji począwszy od 6.0. Wyniki osiągane przez duet K6-2 i DirectX 6.0 ustanowiły poważne zagrożenie dla pozycji zajmowanej dotychczas przez procesory rodziny Pentium II. Wykorzystanie możliwości 3DNow! zależy w dużej mierze od producentów kart graficznych, którzy muszą wyposażać swoje wyroby w odpowiednie sterowniki. Przegląd łączy informujących o takich produktach znajduje się w Internecie pod adresem http://homepages.enterprise.net/mwarwick/. Interesujący zbiór aktualnych informacji z tego zakresu można również znaleźć na stronie \v\vw.3dnow.net. Procesory rodziny K6 (w tym również K6-2) dysponują specjalnym rejestrem kon-figuracyjnym umożliwiającym aktywowanie funkcji WA (Write Allocatiori). Jest to pewna szczególna forma obsługi pamięci podręcznej, która w większości typowych zastosować przynosi pewien wzrost wydajności. Stały wzrost częstotliwości taktowania procesorów spowodował po raz pierwszy wystąpienie ciekawego fenomenu. Procesor AMD K6-2 w wersji 350 MHz (lub szybszy) prowadzi do zawieszania się systemu operacyjnego. Zjawisko to wywołane jest istotnie nadmierną prędkością obliczeń! Błąd ma swoje źródło w sterownikach Windows 95 (na przykład ios.vd\), które podczas wykonywania pętli doprowadzają do dzielenia przez zero. Problem nie dotyczy Windows NT i Windows 98. Rodzina K6 III Projekt tego procesora rozwijany był przez AMD pod kryptonimem Sharptooth a jądro określane jest mianem CXT. K6 III to w zasadzie K6-2 wzbogacony o pamięć podręczną L2 zlokalizowaną bezpośrednio w strukturze (Pamięć podręczna L2 nie zajmuje dodatkowej powierzchni, bowiem ukryta jest pod samym procesorem. Sumaryczna grubość struktury rośnie przez to o około l mm.),procesora (On-Die). Niezmiernie ważną cechą architektury K6 III jest fakt, iż (w odróżnieniu od Pentium II a nawet Pentium III) magistrala BSB (BackSide Biis] łącząca L2 z procesorem taktowana jest częstotliwością zegara CPU. W fazie przejściowej (między K6-2 a K6 III) na rynku znajdowały się zarówno egzemplarze K6-2 z jądrem starego typu (Chomper) jak i modele będące de facto K6 III (jądro typu CXT). Procesory te dają się w prosty sposób odróżnić: Chomper ma naniesiony w lewym dolnym rogu obudowy napis 26050, natomiast CXT - 26351. Decydującym kryterium jest odpowiedź procesora na rozkaz cpuid. K6-2 odpowiada sekwencją 0x05-0x08-0x00 (w kolejności: Family-Model-Stepping). W przypadku jądra CTX odpowiedź brzmi Ox05-Ox08-OxOC. AMD nie wprowadziło w tym przypadku żadnych nowych niekompatybilnych (Zmieniony został natomiast (w stosunku do K6-2) sposób aktywowania trybu WA (WriteAllocalion).,rozszerzeń takich jak ISSE Intela. Obowiązuje nadal kurs na 3DNow!, tym bardziej że coraz większa liczba producentów oprogramowania zaakceptowała ten standard. 3DNow! nie potrzebuje wsparcia systemu operacyjnego przy zachowywaniu rejestrów. Są one po-dobnie jak MMX zamaskowane pod jednostką FP. Architektura 3DNow! stosuje za to bardziej wyrafinowane rozkazy. K6 III nie wprowadza również żadnych nowych sztuczek z pamięcią podręczną (takich jak strumieniowanie w Pentium III). Tabela 1.12. Podstawowe dane procesorów AMD K6III (400; 450) Architektura; RISC 86 Technologia; 0,25 um Zegar CPU[ MHz]; 400; 450 Magistrala [MHz]; 100 Mnożnik (BF); x4; x4,5 L1 Cache (kod); 32 kB, 2x Associative 20 kB Predecode Cache L1 Cache (dane); 32 kB Write Back, 2x Associative L2 Cache on Chip (CPU Clock; ) 256 kB Write Back 4x Associative Pipe-Lines; 10 Pipę- Linę Stages; 6 (INT) FPU Units; 1 (Non-Pipelined) Integer Units; 2 MMX Units; 2 Renaming Registers;- Out of Order Execution; - Branch History Table; 8192 V# CORK [V]; 2,4 V#IO [V]; 3,3 Pobór mocy, typ./max. [W]; 16,1/26,8; 17,7/29,5 Podstawka; Socket Super 7 Pozycja rynkowa K6 III ma stanowić przeciwwagę dla konkurencyjnych produktów Intela - procesorów Pentium 11 i Pentium III. Wersja K6 III 400 MHz odpowiada - w zakresie aplikacji biurowych i standardowego oprogramowania - mocy obliczeniowej Pentium II 450 MHz. K.6 111 wsparty sterownikami 3DNow! przewyższa oczywiście Intela. Model K7 K.7 (Athlon) nazywany jest przez AMD procesorem siódmej generacji. Prototyp został zaprezentowany pod koniec 1998 roku, ale stosunkowo długo czekał na wprowadzenie do produkcji seryjnej. Pierwsze egzemplarze wytwarzane są w technologii 0,25 urn co pozwala na osiągnięcie częstotliwości zegara 500 MHz. Mikroarchitektura K7 posiada 9 jednostek wykonawczych, które mogą pracować równolegle: • 3 jednostki dla danych całkowitych (Integer} • 3 jednostki adresowe • 3 jednostki dla danych zmiennoprzecinkowych (FPU/Media). Jednostki te mogą wykonywać instrukcje poza kolejnością (Ont-of-order). Dwie z nich są ponadto zdolne do naprzemiennego wykonywania instrukcji 3DNow! oraz MMX-FPU). Blok jednostek wykonawczych zasilany jest przez trzy uniwersalne dekodery, które w myśl architektury RISC przetwarzają kod x86 na wewnętrzne rozkazy MOPS (Macro-OPs) o stałej długości. Makrorozkazy te zawierają z kolei od l do 2 operacji elementarnych (OPs). Proces dekodowanie może przebiegać ścieżką bezpośrednią (Direct Path} co ma miejsce w przypadku typowych i prostych instrukcji x86 o długości do 15 bajtów. Ścieżka dodatkowa (Vector Path) dekoduje rozbudowane polecenia kompleksowe. Jej praca polega na rozwijaniu zdekodowanych sekwencji z pamięci stałej MROM (Macro Code ROM). Tabela 1.13. Podstawowe dane procesorów AMD K7 (Athlon)(500; 550; 600; 650; 700) Architektura; RISC Technologia; 0.25 um Zegar CPU [MHz]; 500; 550; 600; 650; 700 Magistrala [MHz]; 200 L1 C ciche (kod); 64 kB. 2x Set Associative L1 Cache (dane); 64 kB, 2x Set Associative L2 Cache; od 512 kB do 8 MB TLB; 24/256 (kod) 32/256 (dane) Superscalar; - Pipe-Line Stages; 10(INT)/ 15(FP U) Ont of Order Execution; Branch Prediction Table; 2048 Return Stac; 12 SMP (Multi CPU); 4 V#L2[V]; 2.475-2,625 lub 3.15 - 3.45* V#CORE[V]; 1.5-1,7 Pobór mocy, max. [W]; 42; 46; 50; 54; 50 Podstawka; Slot A * Wartość napięcia zasilającego pamięć podręczną L2 zależy od zastosowanych układów SRAM. Oto kilka typowych przykładów pracy dekodera K7: Assembler; Ścieżka; Rozkład; add eax, ebx; Direct Path; 1 OP (add); xor eax, [ebx+8]; Direct Path; 2OPs: 1 OP(load), 1 OP(xor); and [ebx], eax; Direct Path; 2 OPs: 1 OP(load/store), 1 OP (and); Makrorozkazy wpływają do bufora pośredniego ICU (Instruction Control Unii), który może przechowywać do 72 MOPS. Bufor przekazuje MOPS do odpowiednich rozdzielaczy. Rozkazy przetwarzające dane całkowite kierowane są do innego rozdzielacza niż te pracujące na liczbach zmiennoprzecinkowych (IS - Integer Scheduler względnie FMS - FPU/Media Scheduler}. Stąd pojedyncze OPs wydawane są do odpowiednich jednostek wykonawczych. Rozdzielacz IS może przechować do 15 MOPS (do 30 prostych operacji) zanim nie rozdysponuje ich pomiędzy jeden z trzech równolegle pracujących bloków wykonawczych IEUO - IEU2 (Integer Execution Unit), z których każdy dysponuje niezależną jednostką adresową AGUO - AGU2 (Address Generation Unit). Jednostki adresowe mają za zadanie optymalizację operacji zapisu i odczytu (Load/Store) z uwzględnieniem jak najlepszego wykorzystania pamięci podręcznych LI i L2. Przetwarzanie odbywa się również poza kolejnością (Out-of-Order). Superskalarny potrójny potok dla liczb całkowitych wyposażony jest ponadto w sprzętowy układ mnożenia IMUL (Integer Multiplication). Podobnie potrójny i superskalarny jest potok przetwarzający dane zmiennoprzecinkowe. Również i w tym wypadku rozkazy wykonywane są poza kolejnością. Blok ten wyposażony jest w zestaw własnych rejestrów. Jednostka zasilająca FMS dysponuje pamięcią pośrednią zdolną do czasowego przechowania do 36 MOPS. Instrukcje rozdzielane są pomiędzy jedną z trzech jednostek wykonawczych. Pierwsza z nich (FPU-0) odpowiedzialna jest za komunikację z pamięcią i rozlokowywanie argumentów. Jednostka druga (FPU-1) realizuje operacje dodawania a jednostka trzecia (FPU-2) instrukcje mnożenia liczb zmiennoprzecinkowych. Jednostki FPU-1 i FPU-2 implementują ponadto instrukcje MMX i3DNow!. Potoki przetwarzające procesora K7 (Pipe-Lines) są stosunkowo długie: 10 etapów dla Integer i 15 etapów dla FPU (pierwszych 6 etapów jest wspólnych dla INT/FPU). Jak wiadomo z teorii ogólnej architektury procesorów, długi potok jest bardzo korzystny przy dużych częstotliwościach taktujących ale za to źle znosi błędy przepowiadania rozgałęzień. Im dłuższy jest potok, tym więcej potrzeba czasu na oczyszczenie go z instrukcji, które znalazły się w nim przez pomyłkę. Z tego właśnie względu jednostka przepowiadania w K7 jest bardzo rozbudowana. Sama tabela BTB (Branch Prediction Table) obejmuje 2 048 rekordów. Pamięć podręczna L1 Rozmiar pamięci podręcznej L1 procesora K7 (128 kB - po 64 kB na dane i instrukcje) stanowi jak na razie swoisty rekord w tej dziedzinie. Dla porównania można podać, iż Pentium II dysponuje jedynie jedną czwartą tej wartości. W procesorach z małą pamięcią podręczną obserwuje się stosunkowo niekorzystne zjawisko nazywane złym skalowaniem. Oznacza to, iż podnoszenie częstotliwości taktowania takiego procesora nie przynosi od pewnego momentu prawie żadnego (niewspółmiernego w skali procentowej) wzrostu wydajności. Duża pamięć podręczna L1jest natomiast gwarancją dobrego skalowania, to jest możliwości dalszego podnoszenia częstotliwości taktowania procesora (co może wynikać chociażby jedynie z poprawienia technologii, np. przejście z procesu 0,25 um na 0,18 (im) bez wprowadzania zmian w architekturze. System gwarantuje jednoczesny dostęp do pamięci podręcznej L1 dla danych (L1 Data Cache) dla dwóch instrukcji (Multi-Banking Access). Jednostka administrująca cyklami dostępu do pamięci LSU (Load/Store Unif) dysponuje buforem magazynującym do 44 odwołań. LSU przegląda zawartość kolejki i próbuje tak grupować odwołania by móc maksymalnie wykorzystać magistralę pamięciową (cykle Burst). Pamięć podręczna L2 K7, podobnie jak Pentium II stawia do dyspozycji pamięci podręcznej L2 specjalną magistralę BSB (Back Side Bus). Nowością w architekturze K7 jest możliwość programowania częstotliwości zegara BSB w zależności od jakości zastosowanych kostek Cache-RAM, które podobnie jak w przypadku Pentium II osadzane są na module procesora, w sąsiedztwie jego struktury półprzewodnikowej. Zakres regulacji obejmuje pełną prędkość (zegar 1:1) poprzez 1:2 do 1:3. Pragnąc wykorzystać 1:1 trzeba stosować specjalne układy DDR-SRAM (Double Data Ratę SRAM). Wprowadzenie możliwości regulacji zegara BSB ma wyłącznie podłoże ekonomiczne i nie stanowi żadnego ulepszenia, z którego mógłby czerpać korzyści użytkownik. Firmie AMD łatwiej jest produkować w ramach jednej rodziny procesorów odgałęzienia przeznaczone na rynek powszechnego użytkownika, dla stacji roboczych lub wreszcie do serwerów. Podział uzależniony jest szybkością i rozmiarami L2. K7 dysponuje wewnętrznym rejestrem TAGRAM zdolnym do zarządzania pamięcią podręczną L2 o rozmiarze nie przekraczającym 512 kB. Z drugiej jednak strony nie planuje się (z pominięciem pierwszej fazy sprzedaży) procesorów z pamięcią L2 mniejszą od 2 MB (pogłoski mówią o 8 MB jako górnej granicy). Wygląda więc na to, iż trzeba będzie stosować zewnętrzny TAGRAM, tak jak ma to miejsce w Pentium II. Zakres przestrzeni adresowej samego procesora wynosi 64 GB (tyle samo co Pentium II) ale specyfikacja złącza Slot A ogranicza go do obszaru 4 GB. Magistrala Zdecydowaną nowość stanowi magistrala EV-6, która może być taktowana nawet do 200 MHz. Jej konstrukcja zapożyczona została z procesora Alpha 21624 firmy Digital. Nie ma w tym nic dziwnego, jeśli uwzględnić fakt, iż jeden z głównych projektantów procesora K7, Dirk Meyer, przeszedł do AMD z firmy Digital. Złącze krawędziowe modułu procesora (nazywane przez AMD Slot A) odpowiada w swej konstrukcji mechanicznej (raster i rozmiary kontaktów) podstawce Slot l Intela ale na tym kończy się podobieństwo. Sygnały magistrali i protokół odpowiadają zupełnie innej specyfikacji. EV-6 jest szyną 72 bitową przy czym na każdy bajt danych przypada l dodatkowy bit ECC (64 + 8ECC). Magistrala EV-6 ma cenną właściwość, istotną w systemach wieloprocesorowych. Każdy z procesorów dysponuje logicznie niezależną, bezpośrednią magistralą realizującą wirtualne połączenia wzajemne (Point to Point}. EV-6 kluczowana zegarem 200 MHz daje przepustowość 1,6 GB/s, czyli znacznie więcej niż magistrala GTL+ rodziny P6 (Pentium II itp.), nawet jeśli podniesie się jej częstotliwość do 133 MHz. GTL+, takto-wana zegarem 100 MHz osiąga w szczycie transfer 800 MB/s a l 066 MB/s przy podkręceniu zegara do 133 MHz. Stosowane dotychczas pamięci SDRAM nie są w stanie zaoferować pasma o tej szerokości. Dla potrzeb nowej techniki przygotowano już nowe typy pamięci: RDRAM (Rambus Direct RAM) oraz DDR-SDRAM. Układy tego rodzaju oferują strumień szerokości 1,6 GB/s już przy częstotliwości 100 MHz. Procesory Cyrix Rodzina 6x86 (Ml) Omawiany procesor stanowi wspólne dzieło firm Cyrix, IBM i SGS-Thompson. Jako bardzo oryginalny i oszczędny projekt zdołał znaleźć dla siebie miejsce na rynku PC, głównie ze względu na bardzo konkurencyjną cenę. Całkowita zgodność z Pentium jest niestety mocno problematyczna. Procesorom Cyrix brak jest funkcji wewnętrznego stopera TSC (Time Stamp Counter) oraz możliwości nadzoru (Performance Monitoring). Licznik czasu TSC, chociaż nie stanowi obowiązkowego elementu architektury x86, chętnie jest wykorzystywany przez różne aplikacje. Jego fizyczna nieobecność w systemie może zależnie od stylu programowania zaowocować różnymi skutkami ubocznymi. Ograniczone są funkcje śledzenia a praca w systemie wieloprocesorowym możliwa jest wyłącznie zgodnie z koncepcją OpenPIC, która całkowicie nie pasuje do modułu APIC zintegrowanego z procesorami Pentium. Sporo kłopotów przysparza brak instrukcji cpuid a właściwie jej zablokowanie. Niektóre aplikacje sprawdzają bowiem przed przystąpieniem do pracy typ procesora zainstalowanego w systemie. Procesor 6x86 w konfiguracji standardowej nie zna kodu tego rozkazu i system zatrzymuje się sygnalizując błąd, tak jak w przypadku napotkania instrukcji o zabronionym kodzie. Konfigurację procesora można na szczęście zmienić. Dokonuje się tego na przykład przy pomocy programu CX86!(Wywołanie programu: cx86! mapen0 cuiden). Ustawiona konfiguracja obowiązuje do następnego restartu systemu. Powyższe uwagi odnoszą się wyłącznie do procesorów serii 6x86 i nie dotyczą następnej generacji (MX i M2). Użytkownicy przyzwyczajeni do jasno zdefiniowanej częstotliwości taktowania procesora mogą czuć się nieco zagubieni. Produkty IBM/Cyrix znakowane są w sposób odmienny od szeroko przyjętego. Na obudowie drukowany jest współczynnik PR (Pentium Rating) czyli równoważnik mocy obliczeniowej danego procesora w odniesieniu do procesora Pentium. Do liczby PR dołączany był w przeszłości znak „+" mający wskazywać na zależność „lepszy lub co najmniej równy". Wyniki pracy programów testujących potwierdzają na ogół prawo do noszenia stosownej etykiety P-xxx+. Przedstawiciel rodziny 6x86 P-166 osiąga istotnie wyniki porównywalne z Pentium 166. 6x86 133 MHz P- 166+; Sysmark NT 455; Sysmark 95 450 Pentium 166 MHz; Sysmark NT 433; Sysmark 95 464 Pomiary przeprowadzone wśród dalszych członków rodziny procesorów prowadzą do ustanowienia następującego przyporządkowania: Cyrix; 100 MHz P- 120+; 110MHzP-133+; 120MHzP-150+; 133MHzP-166+; Intel; Pentium 120 MHz; Pentium 133 MHz; Pentium 150 MHz; Pentium 166 MHz; Warto przyjrzeć się dokładniej jakich sztuczek używa procesor Cyrix, by mimo mniejszych częstotliwości taktowania osiągać tę samą wydajność co jego główny konkurent. Główną specjalnością tej architektury jest niewątpliwie jednolita pamięć podręczna dla kodu i danych (Unified Cache). Koncepcja ta umożliwia większą elastyczność (a zarazem i prędkość) w zarządzaniu pamięcią podręczną a niebezpieczeństwo wzajemnego wyrzucania się partii kodu i danych (Trashing) likwidowane jest poprzez wprowadzenia małej, 256 bajtowej pamięci podręcznej (Instruction Linę Cache) dedykowanej wyłącznie dla kodu rozkazów. Dostęp do 16 kB pamięci podręcznej możliwy jest dla obydwu potoków jednocześnie (Dual Ported). Realizacja instrukcji x86 odbywa się w sposób naturalny -jądro procesora pracuje w trybie CISC. Przetwarzanie ma miejsce w dwóch równoległych potokach (oznaczanych przez Cyrix jako X i Y). Potoki są siedmiostopniowe przy czym w dwóch spośród nich (ID - Instruction Decode i AC - Address Calculation} wyodrębnia się jeszcze stopnie pośrednie (IDl, ID2 oraz AC1 i AC2) taktowane podwójną częstotliwością zegara. Pierwszy stopień (IF - Instruction Fetch) jest wspólny dla obydwu potoków i pobiera w jednym cyklu zegara 16 bajtów kodu. Jednocześnie sprawdza się, czy w załadowanych właśnie instrukcjach nie występują rozkazy skoków. W przypadku rozgałęzień bezwarunkowych pobierany jest również kod z punktu na który wskazuje adres skoku. Tabela 1.14. Podstawowe dane procesorów Cyrix Ml(PR 150+, PR 166+; R 200+) Architektura; x86 Native Zegar CPU [MHz]; 120; 133; 150 Magistrala [MHz]; 60; 66; 75* Mnożnik (BF); x2; x2; x2 L1 Cache(kod); 16 kB Unified Cache (Code + Data). 4x Associative, 512 Lines. 256 Byte Instruction Linę Cache (8 Lines) L1 Cache (dane); 16 kB Unified Cache (Code + Data). 4x Associative, 512 Lines. 256 Byte Instruction Linę Cache (8 Lines) L2 Cache on Chip; x Pipe-Lines; 2 ( + FP) Pipe-Line Stages; 7 Out of Order Execution; - Branch History Table; 512 Branch Target Buffer; 256 V#CORE[V]; 3,3** (2,8)*** V#IO[V]; 3.3 Pobór mocy, typ.[W]; 16,8; 18; 21 Return Stack; 8 Renaming Registers; S (8 + 24) Performance Monitoring; x Time Stamp Counter; x Podstawka; Socket 7 Praca w tym trybie wymaga wsparcia ze strony płyty głównej (standardowa częstotliwość maksymalna dla magistrali wynosi jedynie 66 MHz) Modele serii M1 wykonywane w technologii 0,65mikrometra zajmują 394 mm^2 struktury krzemowej (Die) *** Nowe układy serii M1R charakteryzuj ą się mniejszym poborem mocy i wymagają dwóch napięć zasilających (Split Voltage}. Wykonywane w technologii 0.5 mikrometra (PR-120 - PR-166) lub 0,44 jim (PR-200) zajmują jedynie 204 mm^2. Przepowiadanie rozgałęzień instrukcji warunkowych odbywa się przy pomocy 256 wierszowej tabeli BTB (plus dwa bity charakteryzujące skok). Aby nie tracić czasu w wypadku pomyłki pobiera się również na wszelki wypadek fragment kodu z drugiego punktu, odrzuconego przez układ przepowiadania. Potoki równoległe Cyrixa nie są synchronizowane. Bezrobotny potok Y nie czeka (w przeciwieństwie do Pentium) na ukończenie przetwarzania w X i może wykonywać inny fragment kodu (poza kolejnością), choćby jeden z przepowiadanych kierunków biegu programu. Powstające przy tym zależności likwiduje się przy pomocy przemiano-wywania rejestrów, których jest w sumie 32. Spore różnice w stosunku do Pentium można odnaleźć w jednostce zarządzania pamięcią (MMU). Bufor TLB zawiera 128 rekordów (Pentium - 96) a pamięć podręczna w której przechowywane są katalogi dostępu do stron pamięci (Page Directory Table) daje się programowo aktywować i dezaktywować. Niezmiernie oryginalny jest ośmio-stopniowy Yictim Buffer, forma kosza na śmieci, gdzie lądują usuwane z TLB odwołania do stron. Rekordy takie dają się szybciej odtworzyć bowiem nie zostały jeszcze fizycznie skasowane. Cyrix radzi sobie również świetnie ze stronami pamięci o wymiarach innych niż Intelowskie 4 kB i 4 MB. Następujące po sobie strony dają się połączyć w jedną całość, co przynosi ogromne skrócenie czasu dostępu. Na zakończenie warto wreszcie wspomnieć o łączonych cyklach zapisu (Write Gathe-ring). System dostępu do magistrali jest w stanie łączyć następujące po sobie odwołania do pamięci. W ten sposób żądania zapisu bajtów, słów i dwu-słów grupowane są w pojedynczy blok i wykonywane w szybkim trybie 64 bitowym. Rodzina M2 Historia współpracy i wzajemnych kontaktów pomiędzy firmami Cyrix i IBM jest bardzo zawikłana, co znajduje wyraźne odbicie w systemie oznaczeń procesorów. Opracowany w firmie Cyrix pierwowzór rodziny całej rodziny (6x86) nosił przez pewien czas przydomek M1. Procesor Cyrix M2 stanowi w zasadzie rozwinięcie modelu 6x86 (Ml) poprzez wzbogacenie o większą pamięć podręczną (64 kB zamiast 16 kB). Producent pozostał wierny idei wspólnej pamięci podręcznej dla danych i kodu (Unified Cache). Zachowany został również odseparowany wycinek pamięci podręcznej przeznaczonej wyłącznie na kod (256 bajtów). Najistotniejsza innowacja to rozszerzenie o zestaw rozkazów MMX, których realizacja odbywa się w bloku funkcyjnym zintegrowanym z jednostką zmiennoprzecinkową. Przez pewien czas procesory tej rodziny noszą nawet przydomek MX (zamiast M2). Po przejęciu firmy Cyrix przez National Semiconductor przez dłuższy czas pozostawała w mocy umowa partnerska z IBM, a w końcu została wypowiedziana. Nie jest do końca jasne, gdzie w przyszłości będą montowane procesory Cyrix. Jak dotąd CPU tej serii powstawały na liniach produkcyjnych IBM. Część produkcji opatrywana była znakiem firmowym IBM a część wracała do Cyrixa. Specjaliści od marketingu firmy Cyrix uznali, że używany przez pewien czas przyrostek M2 (poprzez asocjację z Pentium II) lepiej nadaje się do promocji wyrobów niż wysłużony przyrostek MX, kojarzący się wyłącznie z wszechobecnym standardem MMX. Dla zwiększenia efektu zamieniono dodatkowo M2 na M-II i tak powstało aktualne oznaczenie M-II-300, pod którym ukrywa się jednostka z rodziny 6x86 o mocy obliczeniowej sięgającej (przynajmniej w zakresie aplikacji biurowych) poziomu procesora Pentium II taktowanego zegarem 300 MHz. Ten sam procesor (a przynajmniej jego półprzewodnikowa struktura) trafia na rynek pod znakiem firmowym IBM jako 6x86MX-PR266 lub ewentualnie PR300. Jądro procesora M-II-300 przystosowane jest do współpracy z magistralą 66 MHz. Mnożnik xl,5 rozpoznawany jest jako x3,5 a więc układ konfigurowany jest dokładnie tak jak Intel MMX-233. Ten sam procesor oznaczany przez IBM jako 6x86MX-PR300 (IBM) przewidziany jest do współpracy z magistralą 75 MHz. IBM stosuje inną technikę pakowania chipów do obudów. Zamiast klasycznej formy łączenia przy pomocy cienkich drutów (Bonding), płytka półprzewodnikowa osadzana jest na matrycy punktów lutowniczych (Flip Chip - Techniką tą pakowane są również procesory AMD K6 oraz najnowsze modele procesorów Intel, począwszy od Pentium Il/450MHz).To skrócenie wyprowadzeń (zredukowanie indukcyjności i zmniejszenie przesłuchów międzypołączeniowych) pozwala na podniesienie częstotliwości taktowania. Architektura M2 uległa oczywiście istotnym modyfikacjom. Wspomnieć należy o przerobionej jednostce zarządzania pamięcią (MMU). Bardzo interesująca jest dwustopniowa architektura TLB (Transaction Look-Aside Buffer). Pierwszy poziom (TLB 1) zawiera 16 rekordów z odwołaniami do tablicy drugiego poziomu (TLB 2) o 384 wierszach. Tabela 1.15. Podstawowe dane procesorów Cyrix M2 (PR-166; PR-200 ; PR-233; P R- 266 ,PR-300,M2-300; M2-333; M2-350; MX-400MII-400; MII-433) Architektura; x86 MMX Native Technologia; 0.25 mikrometra Zegar CPU [ MHz]; 133/150; 166; 188/200; 233/225/208; 250; 250; 285; 300 Magistrala [MHz]; 66/60; 75/66; 75/66; 66/75/83; 83; 100; 95; 100 Mnożnik (BF); x2/x2.5; x2/x2,5; x2/x3; x3,5/x3/x2,5; x3; x2,5; x3; x3 L1 Cache (kod); 64 kB Unified Cache (Code+Data). 4x Associative. 2 048 Lines. Write Back for Data. 256 Byte Instruction Linę Cache (8 Lines) L1 Cache (dane); 64 kB Unified Cache (Code+Data). 4x Associative. 2 048 Lines. Write Back for Data. 256 Byte Instruction Linę Cache (8 Lines) L2 Cache on Chip; x Pipe-Lines; 2 (+1 FPU) Pipe-Line Stages; 7 Ont of Order Execution; - Branch History Table; 1024 TLB; Code/Data Cache TLB: 16 Entries Direct Mapped L2 TLB: 64x6 Branch Target Buffer; 512 V#CORE[V]; 2.9(odPR-166do M2-350); 2.2(reszta); V#IO[V}; 3.3 Pobór mocy [W]; 10,6/11,4; 12,1; 13,1/13,7; 12,5/13.0; 14,0; - ; 11,1; 12,0 Return Stack; 8 Renaming Registers; (8 + 24) Performance Monitoring; - Time Stamp Counter; - Podstawka; Socket 7. P54C Socket Super 7 M2 jest typowym przedstawicielem klasy CISC bowiem przetwarza naturalne rozkazy x86. Praca odbywa się w dwóch potokach a centralny system sterowania czuwa nad stałym ich napełnianiem przesyłając partie kodu poza kolejnością (Out-of-Order Com-pletion, Speculative Executiori). Zależności usuwane są poprzez przemianowywanie rejestrów ( Oprócz 8 standardowych rejestrów architektury \86 do dyspozycji stoją 24 dodatkowe rejestry 32 bitowe.), a dodatkowe przyspieszanie osiąga się poprzez wczesne udostępnianie danych. Procesory Intel Rodzina Pentium Procesory tej rodziny stanowią bardzo liczną grupę. Pierwsze modele - od dawna nieobecne na rynku - zasilane napięciem 5 V osiągały częstotliwość do 66 MHz. Kolejna grupa (oznaczana symbolem P54C) pracowała już przy zasilaniu 3,3 V a częstotliwość taktowania jądra procesora sięgała 200 MHz. Jakkolwiek rejestry dostępne programowo są 32 bitowe, wewnętrzne ścieżki mają 128, a nawet 256 bitów szerokości. Przyczynia się to z pewnością do zwiększenia prędkości wewnętrznych transferów. Cechy architektury pozwalają zaliczyć Pentium do grupy CISC. Jądro procesora jest superskalarne i wyposażone w dwa potoki przetwarzające instrukcje stałoprzecinkowe oraz jednostkę zmiennoprzecinkową. Jeśli spełnione są wymogi narzucone przez mechanizm parowania, procesor przetwarza w każdym cyklu zegarowym dwie instrukcje: każdy z potoków (U i V) kompletuje po jednej z nich. Należy jednak podkreślić iż potoki są bardzo silnie ze sobą powiązane i pracują wyłącznie w trybie synchronicznym. Żaden z nich nie może wybiegać naprzód w procesie przetwarzania. Jakiekolwiek zahamowanie w jednej z linii powoduje natychmiastowe zatrzymanie drugiego potoku. Tabela 1.16. Podstawowe dane procesorów Intel Pentium (75; 90; 100; 120; i33; 150; 166; 200) Architektura; x86 Native Zegar CPU [MHz] ; 75; 90; 100; 120; 133; 150; 166; 200 Magistrala [MH:]; 50; 60; 66/50; 60; 66; 60; 66; 66 Mnożnik (BF); xl,5; xl,5; xl,5/x2; x2; x2; x2,5; x2.5; x3 L1 Cache (kod); 8 kB. 4x Associative L1 Cache (dane); 8 kB. 4x Associative, WB. MESI L2 Cache on Chip; x Pipe-Lines; 2 (+FP) Pipe-Line Stages; 5 (FP: 8) Out of Order Execution;x Branch Target Buffer; 256 V#CORE [V]; V#IO [V]; 3.3; 3.3; 3.3; 3.3; 3,3; 3.3; 3,3; 3.3 Pobór mocy [W];8,0; 9,0; 10,1; 12,8; 11,2; 11,6; 14,5; 15,5 Return Stack; x Renaming Registers; X Performance Monitoring; - Time Stamp Counter; - Podstawka; Socket 7 Procesor posiada dynamiczny system przepowiadania rozgałęzień. Bufor BTB mieści 256 rekordów i zorganizowany jest w systemie poczwórnej asocjacji. Strata czasu, którą ponosi procesor w wypadku błędnej przepowiedni wynosi od 3 do 4 cykli zegarowych. Pamięć podręczna danych (Data Cache) pracuje w bardzo efektywnym trybie WB (Write Back} ale dla zachowania zgodności z procesorami 486 może dać się przełączyć na tryb WT (Write Through). W jej skład wchodzi 8 banków, każdy po 32 linijki. Jedna linijka ma wymiar 32 bajtów. Cache jest dwuportowy i może być udostępniany równolegle dla potrzeb U i V. jeśli tylko odwołania odnoszą się do różnych banków. Próba jednoczesnego dostępu do danych złożonych w tym samym banku kończy się przyznaniem pierwszeństwa U. Potok V zmuszony jest do oczekiwania przez czas trwania jednego cyklu zegarowego. Pamięć podręczna kodu jest dwudrożna (2-Way Set) i zorganizowana w 8 banków. Również w tym przypadku rozmiar linijki wynosi 32 bajty. Pentium przygotowany jest do pracy w systemach wieloprocesorowych a konkretnie w parze z drugim identycznym procesorem (Dual System). Dla potrzeb takiej konfiguracji dodany został kontroler APIC (Advanced Programmable Interrupt Controller) oraz kilka dodatkowych końcówek sterujących a pamięć podręczna danych sygnalizuje swój stan zgodnie z protokołem MESI. Pentium MMX Dalsze rozwinięcie rodziny Pentium stanowią modele z rozszerzeniem multimedialnym MMX. Procesory tego typu opisane są bardziej szczegółowo w oddzielnym rozdziale tej książki. Oprócz zmian spowodowanych wprowadzeniem potoku przetwarzającego MMX, powiększone zostały rozmiary pamięci podręcznych kodu i danych: z 8 do 16 kB. Cechą charakterystyczną procesorów Intel Pentium MMX jest podwójne napięcie zasilające (począwszy od wersji 166). Układy odpowiedzialne za współpracę z magistralami wejśćia-wyjśćia (Input/Output) zasilane są innym napięciem niż rdzeń obliczeniowy (CPU Cór e). Tabela 1.17. Podstawowe dane procesorów Intel Pentium MMX (150; 166; 200; 233) Architektura; x86 MMX Native Zegar CPU [MHz]; 150; 166; 200; 233 Magistrala [MHz]; 60; 66; 66; 66 Mnożnik (BF); x2,5; x2.5; x3; xl,5 L1 Cache (kod); 16 kB, 4x Associative L1 Cache (dane); 16 kB. 4x Associative. WB L2 Cache on Chip; x Pipe-Lines; 2 Pipe-Line Stages; 6(FP:8) Out of Order Executionx; x Branch Histoiy Table; 256 TLB; Code Cache TLB: 32 Entries Data Cache TLB: 64 Entries L2 TLB: - Branch Target Buffer; 256; V#CORE [V]; 3,3; 2,8; 2,8 V#IO [V]; 2,8; 3,3; 3.3; 3,3 Pobór mocy, max. [W]; 11,6; 13.1; 15,7; 18 Return Stack; 4 Renaming Registers; x Performance Monitoring; - Time Stamp Counter; - Podstawka; Socket 7 Pentium Pro Procesor zaprezentowany został po raz pierwszy szerokiej publiczności w roku 1995 i chociaż taktowany był jedynie częstotliwością 133 MHz już wtedy osiągał wydajność prawie dwukrotnie większą od Pentium 133 (ok. 200 SPECint). Ten ogromny przyrost mocy obliczeniowej spowodowany został gruntowną przebudową architektury (RISC), w tym sięgnięciem do rozwiązań stosowanych w dużych komputerach. Pentium Pro dobrze nadaje się do pracy w systemach wieloprocesorowych bowiem dysponuje zestawem sygnałów sterujących zdolnych do zapewnienia harmonijnej współpracy czterech procesorów tego samego typu. Obszar pamięci pokrywany przez L2 (Cacheable Area] przekracza barierę 512 MB co pozwalał na stosowanie procesora w dużych (jak na owe czasy) serwerach. Pentium Pro jest przede wszystkim procesorem superskalarnym zdolnym do finalizowania więcej niż jednej instrukcji w jednym cyklu zegarowym (w korzystnych warunkach są to trzy instrukcje). Jądro jego nie przetwarza jednak instrukcji x86 w formie bezpośredniej; są one zamieniane w układach dekodera na małe elementy zwane mikroopera-cjami (/jOps). Procesor dysponuje czterema obwodami dekodującymi, które uruchamia się w zależności od stopnia komplikacji materiału wejściowego. Do dyspozycji stoi jeden dekoder główny ogólnego przeznaczenia (General Decoder), dwa proste (Simple Decoder) dla krótkich instrukcji jak np. przesłania między rej estrowe oraz jeden sekwencer (pOps Sec/iiencer) wywoływany w razie napotkania długich i skomplikowanych instrukcji IA (Intel Architecture) Termin IA używany jest w odniesieniu do instrukcji x86. Występuje często w literaturze, zwłaszcza czerpiącej swe źródła z firmy Intel. Tabela 1.18. Podstawowe dane procesorów Intel Pentium Pron (166-512; 180-256; 200-256; 200-512) ArchitekturaRISC Zegar CPU [MHz]; 166; 180; 200; 200; Magistrala [MHz]; 66; 60; 66; 66 Mnożnik (BF); x2,5; x3; x3; x3 L1 Cache (kod); 8 kB, 4x Associative L1 Cache (dane); 8 kB. 4x Associative. WB 12 Cache on Chip (CPU Clock); 512{4x Ass.); 256 (4x Ass.); 256 (4x Ass.); 512 (4x Ass.) Pipe-Lines; 5 Pipe-Line Stages; 14(FP: 16) Ont of Order Execution; (40) Branch Target Buffer; 512 V#1,2 [V]; 3.3 V#CORE[V]; V#IO [V]; 3,3; 3,3; 3,3; 3,3 Pobór mocy, typ. [W]; 27,5; 24,8; 27,3; 32,6 Return Stack; 4 Renaming Registers; 8 + 32 Performance Monitoring; - Time Stamp Counter; - Podstawka; Socket 8 * System niezgodny z Pentium Proces dekodowania odbywa się zawsze zgodnie z kolejnością napływania instrukcji, tj. taką w jakiej występują one w programie. Większość rozkazów rozwija się do l do 4 "mi"Ops. Blok dekodera może w sprzyjających warunkach (odpowiednia ilość rozkazów pobrana została z pamięci i czeka w kolejce rozkazowej) przetworzyć do trzech instrukcji x86 w jednym cyklu zegarowych: po jednej z każdego z prostych dekoderów i jednej z dekodera ogólnego przeznaczenia. Wewnętrzna struktura uOps jest stała. Każdy z nich ma stałą długość równą 118 bitów i składa się z czterech pól o następującym znaczeniu: operator, źródło pierwsze, źródło drugie, cel. Wytwarzane w dekoderze mikrorozkazy lądują w buforze ROB (Reorder Buffer}. W jednym cyklu zegarowym może być tam umieszczone do sześciu fiOps. W sumie bufor jest w stanie przyjąć do 40 mikrokodów. ROB stanowi centralny punkt koordy- nacji dla wszystkich aktualnie przetwarzanych rozkazów (Instruction Poof), również tych wykonywanych poza kolejnością (Speculative Executiori). Zapamiętywane są więc wszelkie wyniki pośrednie i towarzyszące im stany rejestrów flagowych procesora. RÓB odpowiedzialny jest również za rozwiązywanie uzależnień instrukcji: do tego celu służy zestaw 40 rejestrów RAT (Register Alias Table\ które są podstawiane w miejsce klasycznych rejestrów RRF ogólnego przeznaczenia (Real Register File). System przydziału rejestrów obsługuje w jednym cyklu zegarowym do 3 mikroinstrukcji. Tak wyposażone, lądują w specjalnej kolejce (Reservation Station). Kolejka grupuje do 20 mikrooperacji, które oczekują na skompletowanie swoich ope-randów. Skoro tylko to nastąpi, system oznacza je jako gotowe i kieruje do realizacji do właściwej jednostki wykonawczej. Szybkość przetwarzania poszczególnych jednostek jest bardzo zróżnicowana. Bloki operujące na liczbach całkowitych realizują większość rozkazów w jednym cyklu zegarowym. Mnożenia pochłaniają jednak aż cztery takty (dla porównania, Pentium: 7 - 14) a dzielenia od 12 do 36 (Pentium: 42 - 84). W przypadku jednostek zmiennoprzecinkowych różnice nie są aż tak drastyczne: dodawanie zajmuje 3 takty (tyle co w Pentium) a mnożenie przebiega o dwa takty szybciej. Dzielenie zajmuje Pentium Pro od 18 do 38 taktów zegara a Pentium 39. Jednostki generowania adresów (Load/Store) zużywają tylko jeden cykl zegara, gdyż wszelkie typy adresowania x86 rozwiązywane są poprzez sprzętowe układy sumatorów. Jednostki te wytwarzają adresy dla mikrorozkazów, które komunikują się z pamięcią. "mi"Ops tego rodzaju przesyłane są do MOB (Memory reOrder Buffer), gdzie oczekują na wolny kanał przesyłowy do pamięci podręcznej L2. Potoki przetwarzające Pentium Pro są wielostopniowe. Rozkazy, które nie odwołują się do pamięci opuszczają potok nie wcześniej jak po 12 cyklach zegara, te które pobierają z pamięci dane potrzebują sześciu taktów dodatkowych. Wszelkie zakłócenia w pracy (wystąpienie wyjątku typu dzielenie przez zero, źle przepowiedziane rozgałęzienie itp.) powodują spore opóźnienia. Cała skomplikowana maszyna obliczeniowa musi zostać oczyszczona z wyników pośrednich a potoki napełnione nową treścią. Nic więc dziwnego, że projektanci włożyli sporo wysiłku w wyeliminowanie takich sytuacji. Pentium Pro wyposażony został w specjalne układy śledzące wykonanie programu. Technika określana mianem Dynamie Execution obejmuje analizę programu pod kątem przebiegu i przepływu danych i stara się obrać optymalną kolejność wykonania instrukcji. Skomplikowany system przepowiadania rozgałęzień (Branch Prediction Unii) pracuje w oparciu o 512 wierszową (dwukrotnie więcej niż w Pentium) tablicę BTB (Branch Target Buffer}. Zapamiętywane są również skomplikowane sekwencje rozgałęzień (pętle zagnieżdżone). BTB używa odmiany tzw. algorytmu Yeh. Żaden z nowoczesnych procesorów nie może się obejść bez pamięci podręcznej. Główna siła Pentium Pro to duża i szybka (taktowana z częstotliwością zegara CPU) pamięć podręczna L2, wspólna dla danych i kodu. Pamięć ta zorganizowana jest w linijki o rozmiarze 32 bajtów (poczwórna asocjacja). Napełnienie linijki odbywa się w trakcie 4 cykli zegarowych bowiem szerokość magistrali wynosi 64 bity. Na pamięć poziomu pierwszego składają się dwa niezależne bloki L1: dla danych i dla kodu. Rozmiary obydwu z nich wynoszą po 8 kB, a każdy pracuje w oparciu o linijki 32 bajtowe. LI dla danych zorganizowana jest w formie dwóch banków (podwójna asocjacja) o dostępie 64 bitowym. Pamięć podręczna dla kodu (poczwórna asocjacja) pracuje w oparciu o jeden bank dostępny poprzez magistralę 128 bitową. W pełni zakończone operacje przechodzą do tzw. fazy spoczynkowej (Retirement) co oznacza usunięcie składników "mi"Ops z bufora ROB i ustanowienie nieodwracalnych zmian w lokalizacjach pamięciowych opisanych przez instrukcję x86. Pentium II Pentium II stanowi następcę procesora Pentium Pro i jako pierwszy przełamuje barierę 200 MHz. Początkowo wprowadzone na rynek zostają modele taktowane zegarem 233 MHz, w ślad za nim postępują egzemplarze 266 i 300 MHz. Linia Pentium II była rozwijana do częstotliwości 450 MHz. Nowe opracowanie przewyższało pod wieloma względami swoich poprzedników, ale też nie stanowiło szczytu wykorzystania aktualnych możliwości technicznych. Wyizolowanieze struktury procesora pamięci podręcznej drugiego poziomu (Second Level Cache) stanowi według powszechnej opinii krok wstecz w rozwoju. Posunięcie takie podyktowane zostało jednak dobrze przemyślanymi względami ekonomicznymi. Struktura scalona o tak ogromnym stopniu integracji i komplikacji jak Pentium Pro (zanurzone w jednej obudowie dwa potężne układy scalone: CPU i blok pamięci podręcznej, zależnie od wersji 256 kB lub 512 kB) była niezmiernie podatna na uszkodzenia, szczególnie w fazie drutowania ( Wykonywane przez automaty połączenia (zwykle złotym drutem) między polami na płytce krzemowej a wewnętrznymi stykami obudowy układu scalonego. Operacja stanowi jedną z najniebezpieczniejszych faz procesu produkcyjnego, w której powstaje najwięcej odpadów.) Duży odrzut niesprawnych jednostek Pentium Pro (czy to ze względu na błąd w bloku pamięci, czy to na wadliwy procesor) podrażał ogromnie koszty produkcji poprzednika Pentium II. Usytuowanie pamięci podręcznej L2 tak blisko CPU podyktowane było również wymogami szybkiej wymiany danych w systemach wieloprocesorowych. Pentium II może być wykorzystywany w systemach wieloprocesorowych (najwyżej dwuprocesorowych - dual). Dużo większa pod tym względem podatność techniki Pentium Pro na pracę w środowisku wieloprocesorowym (do czterech procesorów) nie okazała się przeważającym argumentem dla powszechnego użytkownika - procentowa obecność systemów tego rodzaju pozostała po dziś dzień marginalna. Całkowite odsunięcie pamięci podręcznej od procesora i jej powrót na płytę główną byłoby jednak cofnięciem się zbyt daleko wstecz. Sięgnięto więc po rozwiązanie kompromisowe i skonstruowano moduł hybrydowy (rysunek 1.36). Procesor rezyduje teraz wraz dwoma układami pamięciowymi na specjalnej karcie. Kontakt z płytą główną zapewnia listwa o 242 kontaktach. Z płyty głównej procesora Pentium II znika więc charakterystyczna do tej pory kwadratowa podstawka (Socket 7), a jej miejsce zajmuje złącze krawędziowe określane mianem Slot 1. Jądro procesora Pentium II przejęte zostało w dużym stopniu z Pentium Pro a ponadto wzbogacone o rozszerzenia multimedialne przeniesione z procesora Pentium MMX. Pamięć podręczna pierwszego poziomu ma wymiar 32 kB (po 16 kB dla kodu programu i dla danych). Wewnętrzna magistrala komunikacyjna ma szerokość 300 bitów. Procesor może działać w przestrzeni adresowej do 64 GB (wirtualnie do 64 TB). Struktura krzemowa pierwszej generacji procesorów wykonywana była w technologii 0,35 fam i zawierała około 7,5 miliona tranzystorów (nazwa robocza Klamath). Zasilanie odbywało się z pojedynczego źródła 2,8 V przy poborze prądu około 13 A, a maksymalna częstotliwość zegara sięgała 300 MHz. Opanowanie technologii 0,25 um pozwoliło na podniesienie częstotliwości roboczej powyżej 333 MHz. Struktury tego typu określane już były mianem Deschutes. Model 333 pracował jeszcze z szyną 66 MHz a następne (od 350 wzwyż) przystosowane zostały do pracy z magistralą 100 MHz. Twórcy architektury Pentium Pro skupiali swe wysiłki na optymalizacji pracy w środowisku 64-bitowym. Procesor ten był co prawda kompatybilny z kodem x86 ale w środowisku 16-bitowyin zachowywał się gorzej od Pentium. Pentium Pro pracuje nad wykonaniem rozkazu LES Di, [memory] przez 20 taktów zegara. Dla Pentium II potrzeba w najgorszym razie 11 taktów a w razie trafienia w pamięci cache wystarczy nawet jeden takt. Intel chciał oczywiście sprzedawać swój nowy procesor także użytkownikom Windows 3.x, których w momencie wprowadzenia na rynek Pentium II, było jeszcze sporo. Dla pozyskania większej ich rzeszy, Pentium II wyposażony zostaje w specjalną pamięć podręczną dla rejestrów segmentowych (Segment Register Cache). Osadzona na module hybrydowym procesora Pentium II pamięć L2 jest typu BSRAM (Burst Cache) a jej organizacja przybierała różne formy. W początkowej fazie do obiegu wprowadzano zarówno modele z 512 kB jak i 256 kB cache. W wersji 512 kB stosowane były cztery chipy pamięciowe (rozmieszczane symetrycznie po dwa na każdej stronie modułu procesora). Dodatkowy piąty chip przejmował funkcje oznacznika (Tag-RAM). Aktualnie wytwarzane modele 450 MHz stosują tylko dwie kostki pamięci o czasie dostępu 4,4 ns (zwykle Samsung SEC-KM736Y604MT-44) umieszczane asymetrycznie po prawej stronie struktury CPU. Z tyłu modułu osadzony jest kontroler pamięci podręcznej L2 (Intel S82459AD). Pentium II jest przystosowany do pracy w systemach wieloprocesorowych, z tym że przedrostka wielo nie należy rozumieć zbyt dosadnie (maksymalnie 2 procesory). Kto ma większe wymagania musi sięgnąć po procesor Xeon. Członkowie rodziny Celeron i Mendocino są zdolne wyłącznie do samodzielnej pracy.( Dokładnie rzecz biorąc same struktury półprzewodnikowe Celeron/Mendocino mają komplet niezbędnych funkcji, bowiem nigdy nie zostały ich pozbawione. Brak jest jedynie pewnych połączeń do wyprowadzeń obudowy. Przepisy na ich uzupełnienie można znaleźć w Internecie.). Polityka taka ma na celu ochronę rynku systemów wieloprocesorowych (na którym wciąż można wiele zarabiać) przed zalewem tanich procesorów. Pamięć podręczna L2 w Pentium Pro - ze względu na bliskość lokalizacji - była taktowana wprost zegarem CPU. Dla zewnętrznej pamięci podręcznej Pentium II tak wysoka prędkość jest nie do przyjęcia. Dostęp do L2 odbywa się z częstotliwością równą połowie taktu zegara procesora. Szybszy dostęp nie jest możliwy ze względu na fizyczne rozmiary (a co za tym idzie impedancje własne) ścieżek drukowanych stanowiących doprowadzenia do modułu L2. Ograniczenie to stanowi poważny czynnik obniżający wydajność całego systemu. Lepsza organizacja L2 i jej stosunkowo duży rozmiar mają przynajmniej w pewnym stopniu rekompensować ten szkodliwy wpływ. W porównaniu z częstotliwością taktowania L2 w klasycznym Pentium (66 MHz niezależnie od odmiany procesora) 225 MHz osiągane w modelu Pentium 11/450 jest i tak nie do pogardzenia. W ślad za kolejnymi modelami procesorów Pentium II postępują następne generacje układów scalonych otoczenia procesora (Chip-Set). W roku 1997 wprowadzono na rynek zestaw oznaczony symbolem 440LX. Został on specjalnie zaprojektowany dla procesora Pentium II a jego najbardziej charakterystyczną cechą jest obsługa pamięci typu SDRAM, mimo iż nadal z częstotliwością 66 MHz. Podwyższenie zewnętrznej częstotliwości taktującej do 100 MHz osiąga kolejna generacja układów (440BX) dedykowana strukturom krzemowym wykonywanym w technologii 0,25 um (Deschutes). Wersje 450 MHz procesora zostały nieco zmienione. Zmniejszeniu uległ znacznie rozmiar samej struktury półprzewodnikowej. Układy montowane są ponadto w nowej, opracowanej przez IBM (i stosowanej w procesorach M-II-300) technice łączenia znanej jako Flip-Chip. Oznacza to rezygnację z połączeń struktury z płytką nośną za pomocą złotych drutów (Bonding). Sam chip leży „na plecach" a kontakt z podłożem osiąga się bezpośrednio przy pomocy sieci miniaturowych punktów lutowniczych. Dzięki skróceniu drogi sygnałów można uzyskać dalszy wzrost częstotliwości taktującej. Tak forma montażu poprawia również parametry termiczne, bowiem dno struktury krzemowej wystaje teraz lekko z obudowy. Ciepło odprowadza się więc bezpośrednio z punktu gdzie powstaje. Tabela 1.19. Podstawowe dane procesorów Intel Pentium II (Klamath) (233*; 266*; 300) Architektura; RISC Technologia;0,35 um Zegar CPU [MHz]; 233; 266; 300 Magistrala [MH=]; 66; 66; 66 Mnożnik (BF); x3,5; x4; x4.5 L1 Cache (kod); 16 kB. 4x Associative L1 Cache (dane); 16 kB. 4x Associative. WB L2 Cache (12 CPU Clock); 512; 512; 512 Pipe-Lines; 7 Pipe-Line Stages; 12(FP: 16) Out oj Order Execution; •/ Branch History labie ;512 Branch Target Buffer; 512 V#1,2 [V]; 3.3; 3,3; 3.3 V#CORE [V]; 2.8; 2,8; 2.8 V#IO(GTL) [V]; 3.3; 3.3; 3.3 I#(CORE)typ./max. [A]; 6,9 / 11,8; 7,87/12,7; 8,7/14,2 Return Stack; 4 Renaming Registers; 8 + 32 Performance Monitoring; - Time S tam p Counter; - Podstawka; Slot 1 W początkowej fazie wprowadzania na rynku były obecne modele wyposażone zarówno w 256 kB jak i w 512 kB pamięci podręcznej L2. System niezgodny z Pentium Architektura Pentium II jest bardzo podobna do Pentium Pro - oba procesory należą do tej samej rodziny P6. Przetwarzanie odbywa się w trzech równoległych dwunastostop-niowych potokach. Jądro procesora pracuje w klasycznym układzie typu RISC: instrukcje IA rozkładane są na proste mikrooperacje i grupowane w centralnym zbiorniku instrukcji (Instruction Pool). Nie ma tutaj miejsca mocno zarysowany w architekturach innego typu podział na fazy pobierania (Fetch) i wykonywania (Execute). Tabela 1.20. Podstawowe dane procesorów Intel Pentium II (Deschutes) (333; 350; 400; 450;) Architektura; RISC Technologia; 0.25 urn Zegar CPU [MHz]; 333; 350; 400; 450 Magistrala [MHz]; 66; 100; 100; 100 Mnożnik (BF); x5; x3,5; x4; x4,5 L1 Cache (kod); 16 kB. 4x Associative L1 Cache (dane); 16 kB. 4x Associative. WB L2 Cache (J/2 CPU Clock); 512; 512; 512; 512 Cacheable Area; 4 GB Pipe-Lines; 7 Pipę- Linę Stages; 12 (FP: 16) On t of Order Execution; - Branch Histoiy Table; 512 Branch Target Buffer; 512 'V#1,2 [V]; 3.3; 3.3; 3.3; 3.3 V#CORE [V]; 2.0 ; 2.0; 2.0; 2.0 V#IO(GTL) [V]; 3.3; 3.3; 3.3; 3.3 I#(CORE)typ./max. [A] ; 9.3; 10.8; 12.6; - Return Stack; 4 Renaming Registers; 8 + 32 P er form ance Monitoring; - Time Stamp Counter; - Podstawka; Slot 1 System niezgodny z Pentium Dzięki istnieniu zbiornika instrukcji, pobieranie kolejnych kodów x86 z pamięci operacyjnej jest niezależne od ich wykonywania. Ważne jest jedynie by zbiornik był stale napełniony. Czuwa nad tym zestaw bardzo wydajnych dekoderów rozkładających kody IA na wewnętrzne mikrokody RISC. W trakcie przebywania w zbiorniku kompletowane są argumenty instrukcji oraz przydzielane rejestry zastępcze, jeśli stwierdzono uzależnienia. W ścisłym związku ze zbiornikiem centralnym pozostaje układ dyspozytora (Dispatcher], który steruje wypływem kompletnych mi kro instrukcji kierując je do właściwych jednostek wykonawczych (Execute). Kolejność przetwarzania kodów RISC pozostaje w bardzo luźnym związku z pojawianiem się ich odpowiedników w kodzie programu. Tylko w ten sposób osiągnąć można ogromną wydajność takiego procesora. Dyspozytor kieruje do wykonania te mikrokody, które aktualnie nie czekają na żadne wyniki pośrednie z innych operacji. Również konieczność oczekiwania na wyniki instrukcji warunkowych nie hamuje procesu przetwarzania. Wykonane instrukcje RISC kierowane są z powrotem do zbiornika. Postępowanie takie jest konieczne bowiem znaczna część z nich wykonywana została jedynie w wyniku przypuszczalnie przewidywanego biegu programu. Powrót do zbiornika gwarantuje również ich ponowne uszeregowanie, zgodne z pozycją zajmowaną w kodzie źródłowym. Instrukcja uznana za wykonaną opuszcza zbiornik i przechodzi w fazę spoczynkową (Retire) a wyniki jej działania są utrwalane. Dopiero teraz mają więc miejsce wszelkie zapisy do pamięci. Celeron CPU o tej nazwie jest odmianą Pentium II wykonywaną w nowoczesnej technologii 0,25 (im (Deschutes). Ponieważ od początku przeznaczony był na rynek powszechnego użytkownika (Lo\v End) stał się ofiarą zabiegów oszczędnościowych. Do najpoważniejszych z nich należy zaliczyć pozbawienie procesora modułu pamięci podręcznej L2. Oszczędności dotyczyła również konstrukcji mechanicznej - brak obudowy i prowadnic oraz zmodyfikowany radiator. Tabela 1.21. Podstawowe dane procesorów Intel Pentium II (Celeron) ( 266; 300) Architektura; RISC Technologia; 0,25 nm Zegar CPU [MHz]; 266; 300 Magistrala [MHz]; 66; 66 Mnożnik (BF); x4; x4.5 L1 Cache (kod); 16 kB, 4x Associative L1 Cache (dane); 16 kB. 4x Associative, WB 12 Cache; x Pipę- Lines; 7 Pipe-Line Stages; 12 (FP: 16) Out oj Order Execution; - Branch History Table; 512 Branch Target Buffer; 512 C#CPU [V]; 2.0; 2.0 V$IO [V]; 3,3; 3.3 Pobór mocy, max. [W]; 16.6; 18.4 Return Stack 4 Renaming Registers; 8 + 32 Time Stamp Counter; - Podstawka; Slot 1 Aby rachunek ekonomiczny w odniesieniu do całego komputera nie uległ zachwianiu, do taniego (stosunkowo) procesora opracowano odpowiednio dobrany cenowo zestaw układów otoczenia (Chip-Set) oznaczany jako 440EX, który zgodny był na poziomie końcówek z klasycznym zestawem 440LX. Lista wprowadzonych oszczędności była tutaj jeszcze bogatsza niż w przypadku samego procesora: • Brak kontrolera pamięci podręcznej, co uniemożliwia ewentualne uzupełnienie nawet na płycie głównej brakującego L2. • Brak możliwości realizacji trybu kontroli ECC w pamięci operacyjnej. • Maksymalna liczba gniazd PCI zredukowana została do 3 (440LX może ich mieć 5). • Maksymalna liczba możliwych do zainstalowania podstawek DIMM wynosi 2. • Brak możliwości pracy wieloprocesorowej (tryb Single) Stopień w jakim odczuwalny jest brak pamięci podręcznej L2 zależy w dużej mierze od aktualnie wykonywanej aplikacji. Nowoczesne programy budowane są w sposób niezmiernie kompleksowy i zawierają rozległe partie kodu, które z pewnością nie mieszczą się w pamięci podręcznej L1. Celeron nie ma w tym wypadku szansy w pojedynku z pełnowymiarowym procesorem Pentium II. Klasyczne aplikacje biurowe nie potrzebują jednak aż takiej mocy obliczeniowej i wykonują się tak samo szybko na procesorze AMD czy IBM ale za to za pół ceny. Tutaj nie jest wymagany ani Celeron ani tym bardziej Pentium II. Powyższe proporcje ulegają zmianie w konkurencji gier komputerowych. Aplikacje tego rodzaju były zawsze pisane (ze względu na szybkość) w formie zwięzłych procedur, tak iż ich przeważająca część mieści się w pamięci podręcznej L1, a brak L2 nie jest aż tak bolesny. Jednak i w tej dziedzinie obserwuje się trend w kierunku komplikacji i rozrostów. Pomiary współczynnika trafienia w L1 przeprowadzane na grach „starszej generacji" (na przykład Cjuake) wykazują jeszcze dużą zwięzłość kodu (liczba trafień 99 %). Ten sam pomiar wykonany w trakcie przebiegu G-Police wykazuje już 95 %. Współczynnik spada aż do 88 % podczas demonstracji bogatej w szczegóły scenerii X-Demo. Przewaga szybkiego jądra procesora Celeron będzie więc stopniowo maleć i ustępować miejsca wpływom powstałym w wyniku braku L2. Celeron A (Mendocino) Celeron pozbawiony L2 źle przyjął się wśród użytkowników. Jego wydajność leżała często poniżej procesorów z rodziny Socket 7. By nie utracić udziałów na rynku, firma Intel została zmuszona do zrewidowania swojej polityki obniżania kosztów za wszelką cenę. Mendocino to określenie identyfikujące w zasadzie samą strukturę krzemową. Jest ona nieznacznie większa od umieszczanej w procesorach Celeron. Nazwa handlowa nowych odmian CPU brzmi jednak Celeron 300A i Celeron xxx (xxx = 333, 366, 400, 433, 466, 500). Wyposażone są one w zintegrowaną pamięć podręczną L2 o rozmiarze 128 kB. Aby stosunkowo mała pamięć podręczna L2 nie stała się „uchem igielnym" na drodze strumienia danych, taktowana jest ona bezpośrednio zegarem procesora (300, a nawet 500 MHz) czyli tak samo szybko jak pamięć podręczna L1. Pamięć L2 Mendocino pracuje jednak, w przeciwieństwie do „pełno wymiarowego" Pentium II w trybie WT (Write ThrougH), co oznacza w praktyce lekki spadek wydajności. W większości klasycznych zastosować (aplikacje biurowe) Mendocino xxx jest szybszy i co nie mniej ważne zdecydowanie tańszy od swego odpowiednika Pentium II xxx. Nie wolno zapominać, iż Mendocino współpracuje z magistralą zewnętrzną FSB 66 MHz a mnożnik częstotliwości kodowany jest na stałe jeszcze w cyklu produkcyjnym (odpowiednio x4,5 do x7,5). Podłączenie do magistrali 100 MHz zmusza procesor do pracy z częstotliwością, do której nie jest stworzony. Panuje opinia, że niektóre modele 300 MHz świetnie znoszą takie zabiegi i pracują z częstotliwością 450 MHz, będąc przy tym porównywalne z kilkukrotnie droższymi procesorami Pentium II, a nawet Pentium III. Eksperymenty autora przeprowadzone na stosunkowo dużej liczbie procesorów nie potwierdzają tej opinii. Odpowiednio dobrane programy testujące, które symulują wielogodzinne 100 % obciążenie procesora, zmuszają go w pewnym momencie do kapitulacji i komputer zawiesza się. Prawdopodobieństwo nagłego przerwania pracy systemu przetwarzającego zwykłe aplikacje jest niewielkie, ale istnieje. Komu nie przeszkadza świadomość tego niebezpieczeństwa, może sobie na to pozwolić. Tabela 1.22. Podstawowe dane procesorów Intel Pentium 11 (Celeron A/Mendocino) (300A; 333; 366; 400; 433; 466; 500) Architektura; RISC Technologia; 0,25 um Zegar CPU [MHz]; 300; 333; 366; 400; 433; 466;500 Magistrala [MHz]; 66 Mnożnik (BF); x4,5; x5; x5,5; x6; x6,5; x7; x7,5 L1 Cache (kod); 16 kB L 1 Cache (dane); 16 kB 12 Cache (CPU Clock); 128 kB Pipe-Lines; 7 Pipę- Linę Stages; 12 (FP: 16) Out of Order Execution; - Branch History Table; 512 Branch Target Buffer; 512 V#CORE [V]; 2,0 V#IO [V]; 3,3 Pobór mocy, max. [W] (Slot 1); 18,4; 20,2; 22,2; 24,2; 24,6; -; -; Pobór mocy, max. [W] (PPGA); 17,8; 19,7; 21,7; 23,7; 24,1; 25,6; 27,0 Return Stack; 4 Renaming Registers; 8 + 32 Performance Monitoring; - Time Stamp Counter; - Podstawka; Slot 1 / PGA370 (300A do 433); PGA370 (dalsze) * System niezgodny z Pentium Pentium II Xenon Procesor oznaczany tym kryptonimem wprowadzony został na rynek równo w połowie 1998. Przeznaczony był dla serwerów i wysokowydajnych stacji roboczych. Jądro procesora stanowi wprawdzie struktura Deschutes ale całość poddana została szeregowi zabiegów unowocześniających: • Pamięć podręczna L2 zbudowana jest z modułów typu CSRAM (opracowanie Intela), które w odróżnieniu od dotychczasowych układów (PBRAM) zdolne są do pracy z pełną częstotliwością zegarową procesora. Rozmiar pamięci L2 może sięgać do 2 MB. • Zachowana jest zgodność programowa z jednostką MMX. • Praca w systemie wieloprocesorowym możliwa jest z udziałem czterech CPU. • Liczba nowych sygnałów sterujących zmusiła do skonstruowania pojemniejszego złącza krawędziowego nazywanego Slot 2. • Xeon (jako pierwszy produkt Intela) wyposażony został w dwie kostki EPROM zawierające pamięć konfiguracyjną przechowującą dane charakterystyczne procesora: między innymi typ, takt i numer seryjny. Miało to utrudnić (bo chyba przecież nie uniemożliwić; kostki EPROM można bowiem wylutować) pracę fałszerzom procesorów. Nowe bloki CSRAM są tak duże, że trzeba było znacznie zwiększyć rozmiary całego modułu hybrydowego. Produkt finalny jest dwa razy większy i dwa razy cięższy od Pentium II. Xeon współpracuje z jednym z nowoopracowanych układów sterujących dla płyt głównych. Pierwszy z nich (z przeznaczeniem do stacji roboczych) to zestaw 440GX stanowiący wzmocnioną wersję znanego już 440BX. Układ ten steruje magistralą 100 MHz oraz szyną AGP w trybie 2x. Pamięć systemu może być rozbudowana do 2 GB, i wykorzystuje szybkie pamięci SDRAM taktowane zegarem 100 MHz (PC 100). Drugi z proponowanych przez Intel zestawów nazwany został 450NX. Jego twórcy położyli zdecydowanie większy nacisk na pracę procesorów Xeon jako wysokowydajnych serwerów sieciowych. Pełna wersja systemu (Fuli Kit} może obsługiwać dwie niezależne 64-bitowe szyny PCI (lub jedną 64-bity i dwie 32-bitowe). 450NX może obsługiwać do 8 GB pamięci. 450NX stanowi poprawioną wersję sterownika 450GX-Orion, opracowanego swego czasu dla potrzeb procesorów Pentium Pro. Pamięć takiego systemu taktowana jest wprawdzie zegarem 100 MHz ale stosować można wyłącznie moduły EDO (oryginalny ORION uznawał tylko pamięci pracujące w trybie Fast Page Modę). 450NX dziedziczy po Orionie jeszcze jedną cenną właściwość, którą jest możliwość poczwórnego zazębiania się banków pamięciowych (Interleave). System wyposażony w cztery jednakowe moduły EDO-RAM osiąga przez to bardzo dobre parametry (Burst x-l-l-l). Tabela 1.22. Podstawowe dane procesorów Intel Pentium 11 (Celeron A/Mendocino) (400-512; 400- IM; 450-512 ; 450-1M; 450-2M) Architektura; RISC Technologia; 0,25 um Zegar CPU [MHz]; ; 400; 400; 450;450;450; Magistrala [MHz]; 100 Mnożnik (BF);x4; x4; x4,5; x4,5; x4,5; L1 Cache (kod); 16 kB L 1 Cache (dane); 16 kB 12 Cache (CPU Clock); 512 kB; 1024kB; 512 kB; 1024 kB; 2 048 kB Pipe-Lines; 7 Pipę- Linę Stages; 12 (FP: 16) Out of Order Execution; - Branch History Table; 512 Branch Target Buffer; 512 V#1,2 [V]; 2,5 V#CORE [V]; 2,0 V#IO [V]; 3,3 Pobór mocy, max. [W] ); 30.8; 38.1; 34.5; 38.2; 43 Return Stack; 4 Renaming Registers; 8 + 32 Performance Monitoring; - TiSystem wieloprocesorowy; do 4 procesorów Podstawka; Slot 2 * System niezgodny z Pentium Procesory Xenon o częstotliwościach taktowania powyżej 450 MHz są odmianą procesora Pentium III Pentium III Pentium III stanowi kontynuację architektury 32-bitowej (1A-32). Projekt rozwijał się pod kryptonimem Katmai. zanim został oficjalnie przekształcony przez Intel na procesor Pentium III. Zestaw nowych instrukcji określany w fazie wstępnej mianem KNl (Katmai New Instructions) lub MMX-2 przemianowany został w ślad za tym na ISSE (Internet Streaming SI MD Extensions), przy czym element S1MD (Single Instruction Multiple Data] określa znane już z techniki MMX jednoczesne przetwarzanie grupy danych przy pomocy jednego rozkazu. Główna różnica pomiędzy SIMD w wersji MMX i SIMD w wersji ISSE polega na tym, iż o ile MMX operuje na danych w formacie całkowitym (Integer}, ISSE stosuje tę samą technikę również w odniesieniu do liczb zmiennoprze-cinkowych. Pentium III jest pod wieloma względami bardzo podobny do swego poprzednika czyli modelu Pentium II. Podwyższenie częstotliwości taktowania stanowi naturalny krok na drodze ewolucji w tej dziedzinie. Główne cechy architektury zebrane zostały tabelach 1.24 i 1.25. Tabela 1.22. Podstawowe dane procesorów Intel Pentium 11 (Celeron A/Mendocino) (450; 500 ; 550 ; 600; 500E; 550E; 550E ; 600E ; 650 ; 700) Architektura; RISC Technologia; 0,25 um (450 do 600); 0,18 um (reszta) Zegar CPU [MHz]; 450; 500; 550 ; 600; 500; 550; 550; 600; 650; 700; Magistrala [MHz]; 100 Mnożnik (BF); x4,5; x5; x5,5; x6 x5; x5,5; x5,5; x6; x6,5; x7,5 L1 Cache (kod);16 kB L 1 Cache (dane); 16 kB 12 Cache (CPU Clock); 512kB(l/2CPUClock) (450 do 600); 256 kB (CPU Clock) Cacheable Area; 4 GB Pipę- Linę Stages; 12 (INT) FPU Unit ; 1 (Pipelined) Integer Units;2 MMXUnits; 2 Speculative Execution; - Multiple Rranch Prediction; - V#CORE [V]; 2,0 (450 do 550); 2,05 (600); 1,6 (500E do 550E); 1,65 - reszta V#IO [V]; 3,3-3,5 (450 d0 600) - ((500E do 550E); 3,3 - reszta Pobór mocy, max. [W] ); 25,3; 28,0; 30,8; 34,5; 16,0; 17,6; 18,2; 19,8; 21,5; 23,1 TiSystem wieloprocesorowy; do 2 procesorów Podstawka; SC242**; PGA370; SC242** * - Wartość mnożnika nie ulega wpływom zewnętrznym. ** - Złącze krawędziowe SC242 określane było wcześniej mianem Slot 1. Tabela 1.25. Podstawowe dane procesorów Intel Pentium III współpracujących z magistralą 133 MHz (533B; 600B;533EB; 600EB; 667; 733) Architektura; RISC Technologia; 0,25 um (533B do 600B); 0,18 um - reszte Zegar CPU [MHz]; 533; 600; 533; 600; 667; 733 Magistrala [MHz]*; 133; 133; 133; 133; 133;133 Mnożnik; x4; x4.5; x4; x4.5; x5; x5.5 L1 Cache (kod); 16 kB L1 Cache (dane); 16 kB L2 Cache; 512kB(l/2CPUClock) (533B do 600B); 256 kB (CPU Clock) - reszte Cacheable Area; 4 GB Pipe-Line Stages; 12(INT) FPU Units 1 (Pipelined) Integer Units; 2 MMX Units; 2 Speculative Execution; - Multiple Branch Prediction; - y CÓR,- m 2,0; 2,05; 1,65 (od 533EB do 733) y,o(c,n.)[V] 3.3 Pobór mocy, max. [W]; 29,7, 34,5; 17,6; 19,8; 22,0; 24,1 System wieloprocesorowy do 2 procesorów Podstawka; SC242*** * - Dla magistrali 133 MHz przygotowano Chip-Set 810E. ** - Wartość mnożnika nie ulega wpływom zewnętrznym. ***Złącze krawędziowe SC242 określane było wcześniej mianem Slot 1. Pentium III dysponuje poszerzoną listą rozkazów. Dla potrzeb nowej technologii ISSE oddano do dyspozycji ponad 70 nowych poleceń, które można podzielić na pięć grup tematycznych: Grupa I. Rozkazy z przyrostkiem „ps", które stanowią trzon rozszerzeń. Obsługują one przetwarzanie typu S1MD-FP (Single Instruction Multiple Data Floating Point}. Rozkaz; Kod; Znaczenie; addps; 0x58; Addition; andnps; 0x55; AND NOT; andps; 0x54; AND; cmp ( * ) ps; 0xC2; Compare; cvtpi2ps; 0x2A; Convert Int. to ps; Cvtps2pi; 0x2D; Convert ps to Int. (round); Cvttps2pi; 0x2C; Convert ps to Int. (trunc.); Divps; 0x5E; Division; Maxps; 0x5 F; Maximum; Minps; 0x5 D; Minimum; Movaps; 0x28/0x29; MOV Aligned; Movhlps;0x12; MOV Hi. Lo; Movhps; 0x16/0x17; MOV Hi; Movlhps; 0x16; MOV Lo. Hi; movlps; 0x12/0x13; MOVLo; movmskps; 0x50; 32-Reg= CMP-Mask; movntps; 0x2B; MOV 128, Write Through; movups; 0x10/0x11; MOV Unaligned; mulps; 0x59; Multiplication; orps; 0x56; OR rcpps; 0x53; Reciprocal (11b) rsqrtps; 0x52; Sąuare Root (Hb); shufps; 0xC6; Shuffle; sqrtps; 0x51; Square Root (23b); subps; 0x5C; Subtraction; unpckhps; 0x15; Unpack Hi; unpcklps; 0x14; Unpack Lo; xorps; 0x57; XOR ( * } = eq. le. lt. neq, nie. nit. ord. unord Grupa II. Rozkazy z przyrostkiem „ss" pracują na pojedynczych danych w formacie zmiennoprzecinkowym (Single Scalar). Rozkaz; Kod; Znaczenie addss; 0x58; Addition; cmp ( * ) ss; 0xC2; Compare; comiss; 0x2F; Comp.Fl. Ord.; cvtsi2ss; 0x2A; Convert Int. to ss; cvtss2si; 0x2D; Convert ss to Int. (round); cvttss2si; 0x2C; Convert ss to Int. (trunc.); divss; 0x5E; Division; maxss; 0x5F; Maximurn; minss; 0x5D; Minimum; movss; 0x1 0/0x11; MOV; mulss; 0x59; Multiplication; rcpss; 0x53; Reciprocal; rsqrtss; 0x52; Square Root; sąrtss; 0x51; Sąuare Root; subss; 0x5C; Subtration; ucomiss; 0x2E; Comp.Fl. Unord.; ( * ) = eq. le. It. neq. nie, nit. ord, unord Grupa III. Rozkazy sterujące przepływem danych (Memory Streaming Instructionś). Rozkaz; Kod; Znaczenie pref etchnta; 0x18; Prefetch LI + L2 prefetcht0; 0x18; Prefetch no Cache prefetchtl; 0x18; Prefetch only L1 prefetcht2; 0x18; Prefetch only L2 sfence; 0xAE; Storę fence Grupa IV. Nowe rozkazy uzupełniające dla potrzeb techniki MMX dla danych całkowitych (SIMD-INT). Rozkaz Kod Znaczenie Rozkaz; Kod; Znaczenie; maskmovq; 0xF7; Byte Mask Write; movntq; 0xE7; MOV Write Through; pavgb; 0xE0; Byte Averaging; pavgw; 0xE3; Word Averaging; pextrw; 0xC5; Extract 1 6 bit; pinsrw; 0xC4; Insert 16 bit; pmaxsw; 0xEE; Max. Signed Words; pmaxub; 0xDE; Max. Unsigned Bytes; pminsw; 0xEA; Min. Signed Words; pminub; 0xDA; Min. Unsigned Bytes; pmovmskb; 0xD7; Byte Maskę in INT-Reg.; pmulhuw; 0xE4; Unsigned Multiply; psadbw; 0xF6; Abs. Deviation Sum; pshufw; 0x70; Shuffle 16 bit; Grupa V. Dodatkowe rozkazy sterujące (Control). Rozkaz; Kod; Znaczenie fxrstor; OxAE FX Restore fxsave; OxAE FX Save ldmxcsr; OxAE; Load Katmai Status stmxcsr; OxAE; Storę Katmai Status Rozkazy z grupy I i II mają do dyspozycji osiem dodatkowych 128-bitowych rejestrów XMM, co pozwala na wprowadzenie nowych form wewnętrznej organizacji równoległego przetwarzania danych. Każdy z rejestrów przyjmuje cztery zmiennoprzecinkowe liczby 32-bitowe. Jednostka SIMD-FP dochodzi do głosu głównie w trakcie wykonywania jednorodnych operacji na stosunkowo dużej liczbie danych. Klasyczny przykład z tej dziedziny to mnożenie macierzy stanowiące podstawowy rodzaj działań przy obliczeniach oświetlenia i translacji geometrycznych w przestrzeni 3D. SIMD-FP daje się przełączyć w tryb symulujący zwyczajną jednostkę FPU, wzbogaconą nawet o nowe rozkazy grupy II. Może ona pracować równolegle do bloku MMX. Ponieważ w Pentium III nie ma miejsca (stosowane w architekturach MMX i 3DNow!) ukrywanie dodatkowych rejestrów pod rejestrami FP, możliwa jest równoległa praca jednostki SIMD-FP niezależnie od FP/MMX. Znika również (drugi czynnik pozytywny) ograniczenie rozmiarów XMMO - XMM7. W przypadku MMX były one w naturalny sposób obcięte do rozmiarów swej „przykrywki", czyli maksymalnie 8 x 80 bitów. Po nowych rozkazach ISSE oczekuje się więcej mocy obliczeniowej oddawanej do dyspozycji głównie aplikacjom bogatym w efekty 3D a także dekoderom MPEG-2. Nowe formy organizacji sterowania przepływem mają zoptymalizować proces wymiany informacji pomiędzy procesorem, pamięciami podręcznymi, magistralą AGP i pamięcią operacyjną, z czego czerpią najbardziej korzyści programy przetwarzające wyjątkowo szerokie strumienie danych. Do grupy tej zaliczają się systemy rozpoznawania mowy (Speech Recognitiori), szybkie i dokładne obliczenia w przestrzeni 3D, obróbka sekwencji video a ostatnio też gry komputerowe poprzez sieć. Instrukcje sterujące przepływem (Memory Streaming) pozwalają na określenie dokładnej strategii dla pamięci podręcznej. Decyzje takie podejmowane sąjeszcze w fazie programowania, bądź to przez samego programistę, bądź przez kompilator. W szczególności możliwe jest wymuszenie przedwczesnego ładowania partii danych lub kodu (PrefetcH) oraz określenie, czy blok ten ma być przechowywany w pamięci podręcznej L1, L2, obydwu lub w żadnej z nich. Przechowywanie danych w pamięci podręcznej nie zawsze ma sens. Niejednokrotnie z góry wiadomo, iż część z nich nie będzie powtórnie przetwarzana. Po co więc zamazywać inne częściej wykorzystywane partie kodu. Nowe instrukcje sterowania przepływem nie są związane bezpośrednio z ISSE i stanowią rozszerzenia architektury, które mogą być z powodzeniem wykorzystywane niezależnie od jednostki SIMD. Nie wymagają one żadnego dodatkowego wsparcia ze strony systemu operacyjnego. W Pentium III zmodyfikowane zostały bufory zapisu i poprawiono mechanizm grupowania następujących po sobie odwołań do pamięci (Write Combining}. Cykle zapisu (w odniesieniu do pewnego konkretnego bloku danych) mogą odbywać się poprzez pamięć podręczną (Write Through) lub bez jego udziału czyli bezpośrednio do pamięci. By móc czerpać korzyści z techniki ISSE konieczna jest stosunkowo głęboka ingerencja w istniejące już aplikacje. Zmiany nie ograniczają się do ponownego skompilowania poszerzonego kodu ale często dotyczą całych algorytmów, tak by stworzyć możliwość równoległego przetwarzania danych zmiennoprzecinkowych. Gwoli ścisłości warto wspomnieć, iż wiele algorytmów nie poddaje się takim zabiegom. Możliwości oferowane przez rozszerzenia architektury o SIMD nie są tak łatwe do wykorzystania w praktyce jak MMX czy też 3DNow!, ponieważ nie wystarczy samo przeprogramowanie aplikacji, tak by posługiwały się nowymi rozkazami. Główną barierę stanowi grupa nowych rejestrów, o których istnieniu nic nie wiedzą wielozadaniowe systemy operacyjne. 3D-Now! (podobnie jak MMX) korzysta jedynie z ośmiu oryginalnych 64-bitowych rejestrów MMO - MM7, które naprzemiennie przydzielane są dla operacji INT i FP. Sytuacja ulega zmianie w przypadku ISSE. Przełączaniu procesora do kolejnych programów korzystających z instrukcji SIMD grupy I i II musi towarzyszyć zabezpieczanie i odtwarzanie zawartości rejestrów XMM. Jeżeli któryś z programów podejmie pracę z danymi przejętymi z innego modułu, katastrofa jest nieunikniona. Pentium III dysponuje parą rozkazów fxsave/fxstore, która zabezpiecza i restauruje zarówno rejestry MMO - MM7 (przynależne do jednostek MMX/FPU) jak i XMMO - XMM7 obsługiwane przez SIMD-FP. Omawiana para instrukcji przemieszcza w sumie 352 bajty. Windows 95 należy niestety do grupy systemów, która nie pozwala na posługiwanie się rozkazami SIMD. Procesor Pentium III musi być zaprogramowany tak by nie wykraczał poza zakres, w którym porusza się Pentium II. Bez obawy można wykorzystać wywołania z grupy III i IV co poprawia nieco dostęp do pamięci i daje kilka nowych rozkazów MMX. W sumie jednak nie należy się spodziewać znaczących efektów z zastosowania nowego procesora w ramach tego systemu operacyjnego. W lepszej sytuacji znajdują się użytkownicy Windows 98 ( Wersja pierwotna Windows 98 rozpoznaje Pentium III jako Pentium II ale mimo tego nowy procesor jest prawidłowo konfigurowany i może używać ISSE w pełnym zakresie. Zainstalowanie pierwszej nakładki z poprawkami (ServicePack 1) usuwa ten drobny błąd kosmetyczny.), bowiem spełnia on wszystkie niezbędne wymagania gwarantujące zabezpieczenie treści krytycznych rejestrów XMM. Aplikacje mogą w tym wypadku operować całą gamą nowych rozkazów. Wszystkie programy (nawet takie, które nie wiedzą nic o istnieniu nowych rozkazów) zwracające się do złącza DirectX 6.1 korzystają ponadto ze wsparcia ISSE w formie pośredniej. Funkcje tej biblioteki odwołują się bowiem już do nowych rozkazów. W przypadku Windows NT 4.0 wymagana jest nakładka ServicePack 4 i dodatkowy sterownik programowy przygotowany przez firmę Intel. Z powodu braku wsparcia DirectX, korzyści mogą przynieść wyłącznie aplikacje, które same posługują się instrukcjami ISSE. Pentium III Xenon Pentium III Xenon jest odmianą procesora Pentium III przeznaczonego do wieloproce-sorowych serwerów i stacji roboczych. W stosunku do swojego pierwowzoru został wzbogacony o następujące możliwości: Pamięć podręczna L2 pracuje z pełną częstotliwością procesora, a jej rozmiar może sięgać do do 2 MB. Praca w systemie wieloprocesorowym możliwa jest z udziałem ośmiu CPU. Procesor wykorzystuje złącze krawędziowe SC330 (Slot 2). Xeon wyposażony jest w pamięć konfiguracyjną przechowującą dane charakterystyczne dla procesora. Procesory współpracujące z magistralą 133 MHz zostały wyposażone w moduł OVCR (On Cartridge Yoltage Regulator}, dzięki czemu procesor generuje odpowiednie poziomy napięć zasilających. Pentium III Xeon współpracuje z nowoopracowanym układem sterującym dla płyt głównych - Intel 840. Układ ten steruje magistralą 133 MHz oraz szyną AGP w trybie 4x. Pamięć systemu może być rozbudowana do 8 GB, i wykorzystuje szybkie pamięci SDRAM (PC 100) lub RDRAM (PC 600, PC 800). Tabela 1.26. Podstawowe dane procesorów Intel Pentium III Xenon (500-512; 500-1M; 500-2M; 550 - 512; 2,8V 600; 2,8V 667; 2,8V 733 ; 5/12V 600; 5/12V 667; 5/12V 733) Architektura; RISC Technologia; 0,25 um (500 do 550); 0,18 um (600 do 733) Zegar CPU [MHz]; 500; 500; 500; 550; 600; 667; 733; 600; 667; 733 Magistrala [MHz]; 100; 100 ; 100; 100; 133; 133; 133; 133; 133 ; 133 Mnożnik; x5; x5; x5; x5,5; x4,5; x5; x5,5; x4,5; x5; x5,5 L1 Cache (kod); 16 kB L1 Cache (dane); 16 kB 12 Cache (CPU Clock); 512; 1024; 2048; 512; 256 kB (od 600 do 733) Cacheable Area; 64 GB Pipe-Line Stages; I2(1NT) FPL Units; 1 (Pipelined) Integer Units; 2 MMX Units; 2 Speculative Execution; - Miiltiple Branch Prediction; - V#CORE [V]; 2,0 (500 do 550); 2,8 (600 do 733 -2,8V);5/12 (600 do 733 - 5/12V) V#IO(GTL)[V]; 2.7; 2,7; 2,0 ; 2,0; od 600-2,8v puste Pobór mocy, max. [W]; 36,0; 44,0; 36,2; 34,0; 21,3; 23,1; 27,3; 21,9; 23,9; 28,7 * - System wieloprocesorowy; do 8 procesorów do 2 procesorów ** - Podstawka; SC330** (500 do 550); SC330.1** (reszta) *** -Wartość mnożnika nie ulega wpływom zewnętrznym Złącze krawędziowe SC330 określane było wcześniej mianem Slot 2. ""Złącze krawędziowe SC330. 1 to rozszerzenie złącza SC330 umożliwiające współpracę z magistralą 133 Mhz i obsługę OVCR. Itanium Procesor Intel Itanium (znany również pod kryptonimem Merced) rozpocznie nową rodzinę procesorów o 64-bitowej arcitekturze (tzw. IA-64). Pierwsze procesory tego typu powinny się pojawić w drugim półroczu 2000 roku. Procesory IDT WinChip C6 Omawiany tu procesor stworzony został w firmie Centaur Technology należącej do grupy IDT (Integrated Device Technology). Został on opracowany specjalnie dla zaspokojenia potrzeb rynku tanich komputerów (zarówno stacjonarnych jak i przenośnych). Niewątpliwą zaletąjest konkurencyjna cena przy zachowaniu zgodności na poziomie końcówek z procesorami grupy P54C (pojedyncze napięcie zasilające) mimo iż implementowane są instrukcje MMX (P55C). Procesor pracuje w otoczeniu odpowiadającemu podstawce typu Socket 7, a częstotliwości magistrali mogą przyjmować wartości 60, 66 lub 75 MHz. WinChip zna jedynie mnożniki całkowite, tj. x2, x3, x4 i x5 (Układ BF2 : BF l : BFO =1:1:1 interpretowana jest przez C6 jako x4. Ten sam układ odpowiada xl,5 dla Pentium P54C, ale x3,5 dla pozostałych procesorów rodziny x86.) . Najszybszy model tej rodziny taktowany jest zegarem 240 MHz. Prosta architektura rzutuje na mniejsze rozmiary struktury półprzewodnikowej (88 mm^2 w porównaniu do 162 mm^2 K6, oba w technologii 0,35 mikrometra) oraz mały pobór mocy równy prawie połowie tego co zużywają procesory K6 lub M2. Architektura optymalizowana pod kątem szybkości wykonania najczęściej spotykanych instrukcji. Cierpiana tym oczywiście instrukcji kompleksowe, których czas wykonania jest znacznie dłuższy niż w innych procesorach rodziny x86. WinChip nie ma mechanizmów przepowiadania kierunku rozgałęzień (Branch Predictiori). Wszystkie rozkazy wykonywane są w naturalnej kolejności, takiej w jakiej występują w programie (In-Order Executiori). Procesor dekoduje w jednym cyklu zegarowym co najwyżej jeden rozkaz x86 (dla porównania Pentium MMX dwa rozkazy a K6 trzy rozkazy). Taka sama proporcja obowiązuje jeśli chodzi o ilość wykonywanych rozkazów. Jeśli dane nie znajdują się w pamięci podręcznej praca potoku ulega wstrzymaniu. Specjalnością architektury WinChip jest mała pamięć podręczna PDC (Page Directory Cache}. PDC jest wyodrębnionym fragmentem TLB (wspólnym dla Data LI Cache TLE i Code L1 Cache TLE) o pojemności 8 rekordów. Nie ma jej ani w procesorach Intel, ani w AMD K6, ani w 6x86MX Cyrixa. Jej obecność przyczynia się do lepszego zagospodarowania miejsca w pamięci podręcznej i poprawia „współczynnik trafienia" w obrębie L1. WinChip nie ma natomiast (podobnie jak Pentium MMX i AMD K6) wbudowanej tablicy TLB dla pamięci podręcznej L2. Tablicę taką posiada z kolei 6x86MX Cyrixa. Tabela 1.27. Podstawowe dane procesorów IDT WinChip C6 (C6- 180; C6-200; C6-225; C6-240) Architektura; RISC Technologia; 0.35 um Zegar CPU [MHz]; 180; 200; 225; 240 Magistrala [MHz]; 60; 66; 75; 60 Mnożnik (BF); x3; x3; x3; x4 L1 Cache (kod); 32 kB 2-Ways Associative L1 Cache (dane); 32 kB 2-Ways Associative Pipe-Lines; 1 Pipe-Line Stages; 5 Oitt of Order Execution; x Branch Prediction; x TLB; Code Cache TLB: 64 Entries 4-Ways; Data Cache TLB: 64 Entries 4-Ways V#CORE;V#IO [V}; 3.52 V (3.45 - 3,6) lub 3.3 V (3. 135 - 3.6) Pobór mocy, max. [W]; 11.5; 13.0; 14.8; 15,8 Return Stack; 8 Podstawka; Socket 7 Procesor posiada bardzo dobry system ograniczania poboru mocy. Większość „prądo-żernych" bloków zostaje samorzutnie wyłączana jeśli nie jest używana przez pewien dłuższy okres czasu. Do układów objętych nadzorem należą: pamięć podręczna LI (zarówno dla kodu jak i dla danych), jednostka MMX oraz jednostka FPU. Pewną ciekawostkę stanowi również możliwość programowania odpowiedź na rozkaz cpuid. Pozwala to na wykorzystanie procesora w programach uzależniających swoją pracę od łańcucha znaków zwracanych w wyniku wywołania tego rozkazu. Bez przeprogramowania WinChip zwraca łańcuch „CentaurHauls", oraz sekwencję Family-Model-Stepping w postaci Ox05-0x04-0x... (... może oznaczać różne wartości). WinChip 2 Prostota procesora C6 powoduje, iż mimo posiadania jednostki MMX, jest on praktycznie bezużyteczny w zmaganiach z aplikacjami multimedialnymi. Dla firmy IDT szybko stało się oczywiste, że aby nie wypaść z rynku należy procesor poddać zabiegom modernizacyjnym. Oto główne zmiany wprowadzone do modelu WinChip 2. Nowa poprawiona jednostka FPU. Nadal jednak pozostaje tylko jeden potok Integer (inne konkurencyjne procesory rodziny x86 mają dwa takie potoki). Mechanizm przewidywania wyniku instrukcji warunkowych (rozgałęzień) pracujący w oparciu o dynamicznie aktualizowaną tablicę BHT (Branch History Table). Każdy rekord tej tablicy opisuje (w formie liczby 12-bitowej) dotychczasowe zachowanie się jednego z rozgałęzień programowych. Tablica jest indeksowana co znacznie skraca czas dostępu. Podwójna jednostka MMX może teoretycznie wykonywać do dwóch instrukcji MMX w jednym cyklu. Ponieważ jednak blok MMX-1 realizuje operacje mnożenia i dodawania natomiast blok MMX-2 odpowiedzialny jest za przesunięcia i rozkazy pakowania, nie jest możliwe parowanie dowolnych rozkazów MMX. Implementowane są funkcje SDNow!, których wykonanie przebiega w blokach MMX-1 lubMMX-2. Przystosowanie do pracy w otoczeniu zgodnym ze specyfikacją podstawki typu Super 7 (magistrala 100 MHz). Procesory WinChip 2A wykorzystują ułamkowe mnożniki częstotliwości. Tabela 1.28. Podstawowe dane procesorów IDT WinChip 2 (W2-225; W2-240; W2-250; W2-266; W2-300; W2-220A; W2-233A; W2-266A; W2-300A;) Architektura; RISC; Technologia; 0,28 um/0,35 um (225 do 300); 0,25 um (200A do 300A); Zegar CPU [MHz]; 225; 240; 250;266; 300; 200; 233; 233; 250; Magistrala [MHz]; 75; 60; 83; 66; 75/100; 66; 66; 100; 100; Mnożnik (BF); x3; x4; x3; x4; x4/x3; x3; x3,5; 2,33; x2,5; L1 Cache (kod);32 kB, 2-Ways; L1 Cache (dane); 32 kB, 4-Ways; Pipe-Line Stages; 6; Out of Order Execution; x; TLB; Code Cache TLB: 128 Entries / 8-Ways, Data Cache TLB: 128 Entries / 8-Ways; Branch Prediction; Branch History Table: 4 096 entries; V#COM , V#IO [V]; 3,52 V (3,45 - 3,6) lub 3,3V (3,135 - 3,6); Pobór mocy, max. [W]; 12; 13; 14; 15; 16; 12; 13; 14; 16; Return Stack; 8; Interface; Socket Super 7; Rise mP6 Firma Rise Technology to grupa założona w 1993 przez zespół naukowców z IBM, Amdahl, Fujitsu, Fairchild, Integraph i Sun Microsystems. Opracowany przez nich procesor zaprezentowany został po raz pierwszy na targach Microprocessor Forum w San Jose w roku 1998. Procesor mP6 występuje jak na razie w wersjach 166, 233, 266, 333 i 366. Początkowo mówiło się, iż jest przeznaczony do komputerów przenośnych ale wprowadzona też została wersja z podstawką typu Socket 7. Główna uwaga projektantów skupiała się na systemie oszczędzania poboru mocy. Cały procesor skonstruowany jest w oparciu o dość skomplikowany system określany jako DAR (Dynamie Allocation of Resources). Oznacza to, iż niektóre jednostki (na przykład adresujące) występują tylko raz w strukturze krzemowej i są dynamicznie przydzielane (przełączane) do różnych potoków. Mimo stosunkowo prostej architektury, mP6 posiada elementy pozwalające mu nosić miano współczesnego procesora (Superscalar, 3-Way Superpipeline}. Struktura wykonana jest w technologii 0,25 lub 0,18 mikrometra z rozdzielonymi napięciami zasilania dla jądra CPU i obwodów I/O (Split Yoltage Technolog. Ma stosunkowo małą pamięć podręczną L1 (16 kB) ale za to potrój na jednostkę ALU i potrójny blok MMX (dla porównania M2 i K6 ma jedną a Pentium MMX, Pentium II i K6-2 po dwie). Wyliczenie uzupełnia dwutorowa jednostka FPU (Pipelined). Procesor mógłby więc wykonywać w jednym cyklu zegarowym do trzech instrukcji Integer lub MMX lub dwie FPU co w praktyce jednak rzadko może mieć miejsce. Kłopot polega na tym, iż nie został zaimplementowany żaden z mechanizmów pracy poza kolejnością (Out-of-Order Executiorf). Występowanie w programie w naturalnej kolejności akurat takiej sekwencji instrukcji, którą można rozpisać na trzy potoki równolegle (z uwzględnieniem wzajemnych uzależnień i praw parowania) zdarza się jedynie od czasu do czasu. Procesor mP6 zwraca w odpowiedzi na rozkaz cpuid łańcuch „RiseRiseRise", oraz sekwencję Family-Model-Stepping w postaci Ox05-0x00-0x... (... może oznaczać różne wartości). Tabela 1.29. Podstawowe dane procesorów Rise mP6: (166; 233; 266; 333; 366; 333; 366) Architektura; x86 Native; Technologia; 0,25 mikrometrów(procesory 166 do 366), 0,18 mikrometrów(procesory 333 do 366); Zegar CPU [M H:]; 166; 190; 200; 238; 250; 238; 250; Magistrala [MH:J; 83 ; 95; 100; 95; 100; 95; 100; Mnożnik (RF); x2; x2; x2; x2,5; x2,5; x2,5; x2,5; L 1 Cache (kod); 8kB; L1 Cache (dane); 8kB; L2 Cache on Chip; x; Pipe-Lines; 3 INT + 1 FP; Pipę- Linę Stages; 6INT; On t of Order Execntion; x; Branch Prediction; Branch Target Buffer; 512; V#CORE[V]; 2,8(procesory 166 do 366), 2,0(procesory 333 do 366); V#I/O[V]; 3,3; Pobór mocy, max. [W]; 7,28; 8,11; 8,56; 10,18; 10,72; 4,78; 5,0; Return Stack; 8; Renaming Registers; Podstawka; Socket Super 7; Jak rozpoznać typ procesora Ponieważ procesory rodziny 80x86 nie są zgodne w dół (program napisany specjalnie dla procesora 486 nie będzie działał na procesorze 8086), może zaistnieć konieczność rozpoznawania, z jakim procesorem mamy do czynienia. Zaprezentowany algorytm (rysunek 1.41) bazuje na specyficznych własnościach poszczególnych grup procesorów. Na jego podstawie można określić, do jakiej grupy należy rozpatrywany procesor (zgodny z 8086, 80186, 80286, 80386, i486, Pentium), nie można jednak stwierdzić, kto jest jego producentem. Czy procesor jest zgodny z układem 80286 lub lepszym Jak widać, identyfikacja procesorów przebiega w dwóch gałęziach. W pierwszym kroku określane jest, czy procesor jest zgodny z układem 286 lub lepszym. Można to ustalić na podstawie rejestru stanu (FLAGS). Znaczenie bitów 12 - 15 w rejestrze stanu zostało zdefiniowane począwszy od procesora 80286 (oczywiście znaczenie bitów 0 - 11 nie uległo zmianie). W procesorach 8086/88 i 80186/88 bity 12 - 15 nie są wykorzystywane - ich wartość jest zawsze równa 1. Zatem testując możliwość zmiany wartości bitów 12 - 15 w rejestrze stanu można rozpoznać, czy mamy do czynienia z procesorem 8086/88 lub 80186/88, czy 80286 albo lepszym. Do sprawdzenia, czy procesor jest zgodny z procesorem 80286 lub lepszym można wykorzystać następujący ciąg instrukcji: ... xor ax,ax ;wyzerowanie rejestru ax push ax ;umieszczenie rejestru ax na stosie popf ;i wpisanie jego wartości do rejestru stanu pushf ;zapisanie wartości rejestru stanu na stosie pop ax ;i wpisanie jego wartości do rejestru ax and ax,OfOOOh ;wyzerowanie wszystkich bitów za wyjątkiem 12-15 cmp ax,OfOOOh ;sprawdzenie, czy bity 12-15 mają wartość 1 je mniej_286 ;jeżeli tak, to procesor 8086/88 lub 80186/88 jne lepiej_286 ;jeżeli nie, to procesor 80286 lub lepszy ... Procesor 8086/88 czy 80186/88 Rejestr stanu nie możne być wykorzystany do odróżnienia procesorów 8086/88 od 80186/88. Trzeba znaleźć inną różnicę - na przykład zmiany dokonane w instrukcji przesunięcia logicznego (shr arg1, arg2). Instrukcja shr przesuwa zawartość arg1 w prawo, o liczbę bitów określoną przez arg2. Począwszy od procesora 80186/88 wartość arg2 jest maskowana do 5 bitów - liczba bitów, o jaką można przesunąć arg1 mieści się w przedziale domkniętym <0, 31>. W procesorach 8086/88 nie było tego ograniczenia Zatem aby odróżnić procesor 8086/88 od 80186/88 należy sprawdzić, czy możliwe jest przesunięcie argl o więcej niż 31 bitów. Zastanówmy się, co się stanie, gdy argl równy OFFh (11111111b) przesuniemy o 021h (00100001 b). Procesor 80186/88 zamaskuje wartość arg2 do 5 bitów i dokona jednokrotnego przesunięcia w prawo - po wykonaniu instrukcji argl będzie miał wartość 07Fh (01111111 b). Z kolei procesor 8086/88 dokona trzydziestotrzykrotnego przesunięcia w prawo - arg1 będzie równy 0. ... ; mov a1,Offh ;wpisanie do rejestru a1 wartości ffh - arg1 mov c1,021h ;wpisanie do rejestru c1 wartości 21h - arg2 shr a1,c1 ;dokonanie przesunięcia jz p_8086 ;czy al jest równy O? tak, to procesor 8086/88 jnz p 80186 ;jeżeli nie, to procesor 80186/88 ... ; Procesor 80286 Do odróżnienia procesora 80286 od jego następców można ponownie wykorzystać rejestr stanu - bity 12-15 mają zawsze wartość 0. Procesor 80386 Począwszy od procesora 80386 rejestr stanu został rozszerzony do 32 bitów. Do rozpoznania procesora 80386 można wykorzystać fakt, że w rejestrze stanu procesora 80386 bit 18 ma wartość O, podczas gdy w procesorach 486 i lepszych zdefiniowany został znacznik sprawdzania wyrównywania. Zatem jeżeli wartość 18 bitu w rejestrze stanu ma wartość O i nie można jej zmienić, to znaczy, że badany procesor jest układem 80386. Procesor 486 czy Pentium W procesorze Pentium został wprowadzony znacznik identyfikacji (21 bit w rejestrze statusu). W procesorach 486 wartość 21 bitu wynosi O i nie można jej zmieniać, dlatego znacznik identyfikacji można wykorzystać do odróżnienia procesorów 486 od Pentium - wystarczy sprawdzić, czy można ustawić 21 bit w rejestrze statusu. Przedstawiony algorytm nie daje możliwości rozróżnienia procesorów i486DX, i486SX i i487SX (rozpoznanie procesora i486SX wymaga dodatkowego testu na brak koproce-sora). Rozpoznawanie kolejnych generacji procesorów nie powinno już sprawiać takich trudności, gdyż - począwszy od procesora Pentium - lista rozkazów została wzbogacona o instrukcję cpuid, przeznaczoną do identyfikacji typu procesora (ustawiony znacznik identyfikacji oznacza, że procesor może tę instrukcję wykonać). Koprocesory Koprocesory wspomagają procesor w obliczeniach numerycznych. Każdy procesor 80x86 jest przystosowany do współpracy z odpowiadającym mu koprocesorem 80x87. Wyjątkiem jest procesor 80386, który w niektórych systemach może współpracować z układem 80287, zamiast 80387, oraz procesory 80486 i lepsze, które mają wbudowany koprocesor. Z punktu widzenia programisty, obecność w systemie koprocesora powoduje postrzeganie układu procesor-koprocesor jako jednego procesora o: zwiększonej liczbie rozkazów; zwiększonej liczbie rejestrów; zwiększonej liczbie typów danych. Oczywiście układ procesor 80x86/koprocesor 80x87 jest zgodny w górę - program napisany dla układów 8086/8087 będzie działał na 80386/80387, pomimo tego, że zarówno architektura koprocesorów, jak i zasada współdziałania z procesorem ulegała nieznacznym zmianom. Koprocesory 80x87 nie mogą pracować samodzielnie, mogą natomiast pracować równolegle z procesorem, wspomagając go w obliczeniach numerycznych. Jeżeli podczas wykonywania programu procesor natknie się na instrukcję przeznaczoną dla koprocesora, to interpretuje ją jako rozkaz esc -jeśli jest to konieczne, oblicza adres argumentów i wykonuje cykl dostępu do pamięci, jako że koprocesor nie ma układu umożliwiającego obliczanie adresu (może natomiast realizować transmisję danych, jeżeli do skompletowania argumentu niezbędne są kolejne bajty z pamięci). Następnie procesor rozpoczyna wykonywanie kolejnej instrukcji, niezależnie od tego, czy koprocesor zakończył obliczenia. Koprocesor „obserwuje" wykonywanie kolejnych instrukcji programu. Ignoruje rozkazy przeznaczone dla procesora. Po napotkaniu instrukcji przeznaczonej dla koprocesora przystępuje do jej wykonania. Jeżeli rozkaz wymaga dostępu do pamięci, pobiera z magistrali adresowej i zapamiętuje adres obliczony wcześniej przez procesor - umożliwia to skompletowanie całego argumentu. W trakcie wykonywania obliczeń koprocesor utrzymuje aktywny sygnał na wyprowadzeniu BUSY - umożliwia on synchronizacje pracy procesora i koprocesora. W czasie gdy procesor i koprocesor pracują równolegle, trzeba się zabezpieczyć przed: -modyfikacją argumentów, z których korzysta koprocesor; -wykonaniem kolejnej instrukcji esc przed zakończeniem działania koprocesora. Do synchronizacji pracy procesora i koprocesora można wykorzystać instrukcję wait powoduje ona wstrzymanie działań procesora do czasu pojawienia się aktywnego sygnału na wyprowadzeniu -TEST (wyprowadzenie to jest połączone z wyprowadzeniem BUSY koprocesora). Koprocesor 8087 Koprocesor 8087 przeznaczony jest do współpracy z procesorami 8086/88. Jego wewnętrzna struktura składa się z dwóch mogących pracować niezależnie bloków: - układu sterującego (ang. control unity, - układu obliczeń numerycznych (ang. numeric execution unif). Układ sterujący odpowiada za synchronizację pracy koprocesora z procesorem. Do jego zadań należy: pobieranie i dekodowanie rozkazów, pobieranie danych z pamięci i ich zapisywanie oraz wykonywanie rozkazów sterujących pracą koprocesora. Z kolei układ obliczeń numerycznych wykonuje wszystkie rozkazy numeryczne - dodawanie, odejmowanie, dzielenie, mnożenie, wartość bezwzględną, zmianę znaku, resztę z dzielenia, zaokrąglanie, logarytmowanie, obliczanie pierwiastka kwadratowego, itp. Koprocesor może również generować stałe umożliwiające obliczanie wartości wielu funkcji - +1,0; +0,0;" pi"; Iog(2;e); Iog(2;10); log(10;2); log(e;2). Koprocesor 8087 -jako jedyny w rodzinie układów 80x87 - ma możliwość generowania żądania przerwania w przypadku wystąpienia nie zamaskowanego błędu. Z tego powodu programy tworzone dla systemu 8086/8087 mogą wymagać zmiany obsługi błędów numerycznych w przypadku przenoszenia ich do systemów 80286/80287 i lepszych. Koprocesor 80287 Koprocesor 80287 przeznaczony jest w zasadzie do współpracy z procesorem 80286 (może pracować w trybie rzeczywistym i chronionym - zmianę trybu pracy umożliwia port OF1h). Jednak w praktyce można również natknąć się na systemy 80386/80287. Koprocesor 80287, podobnie jak jego poprzednik, składa się z dwóch mogących pracować niezależnie bloków: - układu sprzężenia magistrali (ang. bus interface unit); - układu obliczeń numerycznych (ang. numeric execution unit). Począwszy od procesora 80287 zmieniły się nieco zasady współpracy procesora z ko-procesorem. Procesory 80286 i lepsze automatycznie testują stan wyprowadzenia TEST po napotkaniu instrukcji esc - nie trzeba zatem programowo blokować możliwości wykonania kolejnej instrukcji koprocesora przed zakończeniem poprzedniej. W dalszym ciągu trzeba jednak dbać o to, by procesor i koprocesor nie żądały dostępu w tym samym czasie do tych samych danych. Zmienił się również sposób pobierania danych. Procesor umieszcza argumenty w portach koprocesora (OF8h, OFAh, OFCh) - koprocesor 8087 pobierał dane z magistrali. Kolejna różnica między koprocesorem 8087 a 80287 i 80387 to możliwość generowania żądania przerwania w razie wystąpienia nie zamaskowanego błędu w trakcie obliczeń. Koprocesory 80287 i 80387 są tej cechy pozbawione - po wystąpieniu błędu ustawiany jest sygnał ERROR (~ERROR=0), który oddziaływując bezpośrednio na procesor wymusza wykonanie procedury obsługi błędu. Koprocesor 80387 Koprocesor 80387 przeznaczony jest do współpracy z procesorem 80386. Tryb pracy procesora (rzeczywisty, chroniony, wirtualny 8086) nie ma wpływu na działanie koprocesora, gdyż koprocesor operuje na rozkazach i danych przekazanych przez procesor. Struktura koprocesora 80387 jest znacznie bardziej skomplikowana niż struktura wcześniejszych koprocesorów. W układzie 80387 można wyróżnić trzy mogące pracować niezależnie bloki: • układu sterowania magistrali (ang. bus control logie); • układu sterowania z układem sprzężenia magistral (ang. data interface and control unit); • układu obliczeń numerycznych (ang. numeric execution unif). Układ sterowania magistrali zapewnia komunikację koprocesora z mikroprocesorem. Procesor traktuje ten układ jak układ wejścia-wyjścia o adresach portów OFOh - OFFh - koprocesor nie ma bezpośredniego dostępu do pamięci (za dostęp do pamięci odpowiada procesor). Układ sterowania magistrali musi pracować synchronicznie z procesorem. Układ sterowania z układem sprzężenia magistral jest odpowiedzialny za przesyłanie danych do i z układu obliczeń numerycznych, pobieranie i dekodowanie rozkazów oraz sterowanie ich wykonaniem. Układ obliczeń numerycznych został poważnie zmodyfikowany - koprocesory 80386 i lepsze mogą obliczać wartości funkcji trygonometrycznych. Koprocesor i487SX Coraz większe uzależnienie koprocesora od procesora doprowadziło do ich połączenia w jednym układzie - procesory począwszy od i486 mają wbudowany koprocesor. Wyjątkiem jest układ i486SX, w którym działanie koprocesora zostało zablokowane (odpowiadający mu koprocesor i487SX jest pełnowartościowym układem 486DX). Jak rozpoznać typ koprocesora Rozpoznawanie typu koprocesora może wydawać się zajęciem nieco archaicznym, gdyż począwszy od układu i486DX procesory 80x86 mają wbudowany koprocesor. Pracuje jednak jeszcze niewiele systemów wyposażonych w procesory 80386, które mogą współpracować z koprocesorem 80287 lub 80387. Dlatego umiejętność rozpoznawania koprocesorów może się czasami przydać. Przedstawiony algorytm (rysunek 1.42) umożliwia wykrycie obecności koprocesora i rozpoznanie jego typu (8087, 80287, 80387). W algorytmie nie został uwzględniony koprocesor i487SX, gdyż jest to de facto pełnowartościowy układ 486DX - sprawdzenie, czy w systemie 486 jest koprocesor sprowadza się zatem do rozpoznania typu procesora i przeprowadzenia testu na obecność koprocesora (pierwszy krok algorytmu). Czy w systemie jest koprocesor Obecność koprocesora w systemie można sprawdzić na kilka sposobów. Najprostszy z nich to sprawdzenie zmiennej systemowej zawierającej listę sprzętu. Zmienna ta ma adres 0040:001Oh (0041 Oh). Jeżeli bit numer l jest ustawiony, to znaczy że, w systemie jest koprocesor. Inna metoda - znacznie pewniejsza - to próba inicjalizacji koprocesora i sprawdzenie, czy w słowie stanu koprocesora zostały wyzerowane bity 0-7. Metoda ta jest niezawodna i bezpieczna (komendy koprocesora są ignorowane przez procesor). ... ; finit ;inicjalizacja koprocesora mov fpu_stan,5a5ah ; nadanie fpu_stan wartości różnej od O fnstsw fpu_stan ;zapisanie słowa stanu w fpu_stan mov ax,fpu_stan ;skopiowanie fpu_stan do rejestru ax cmp a1,O ;sprawdzenie, czy bity 0-7 są równe O jz jest_koprocesor ;tak - w systemie jest koprocesor jnz bez_koprocesora ;nie - w systemie nie ma koprocesora ... ; Można również sprawdzić, czy po inicjalizacji koprocesora ustawione są bity 8 i 9 w słowie sterującym. Koprocesor 8087 Do identyfikacji koprocesora 8087 można wykorzystać znacznik maski przerwań (bit 7 w słowie sterującym). Decyduje on o tym, czy po wystąpieniu niezamaskowanego błędu ma być generowane przerwanie. Ponieważ koprocesory 80287 i lepsze nie generują w takiej sytuacji przerwania, jest on w nich zawsze równy O i nie można go zmienić. Zatem aby rozpoznać koprocesor 8087, wystarczy sprawdzić, czy można ustawić bit 7 w słowie sterującym. ... ; finit ;inicjalizacja koprocesora and fpu_ster,Off7fh ;bit 7 w fpu_ster ma wartość O fldcw fpu_ster ;załadowanie fpu_ster do słowa sterującego fdisi ;ustawienie bitu 7 w słowie sterującym fstcw fpu_ster ;skopiowanie słowa kontrolnego do fpu_ster test fpu_ster, 80h ;sprawdzenie, czy bit 7 jest ustawiony jne k_8087 ;tak - koprocesor 8087 je k_80287 ;nie - koprocesor 80287 lub lepszy ... ; Koprocesor 80287 czy 80387 Aby odróżnić koprocesor 80287 od 80387 i lepszych trzeba wykorzystać fakt, że w procesorze 80287 nie można zmienić znaku nieskończoności (+ niesk. = -niesk.). ... ; finit ;inicjalizacja koprocesora fldl ;umieszcza na stosie stalą +1 fldz ;umieszcza na stosie stalą +0 fdiv ;generowanie nieskończoności (1/0) fld st ;powielenie nieskończoności na stosie fchs ;i zmienienie znaku fcompp ;porównanie + i - nieskończoności fstsw fpu_stan ;skopiowanie słowa stanu do fpu_stan mov ax,fpu_stan ;a potem do rejestru ax sahf ;skopiowanie rejestru ah do mniej ;znaczącego bajtu rejestru stanu ;odpowiednie znaczniki ze słowa stanu ;zostaną wstawione do rejestru stanu jz k_80287 ;czy równe? tak - koprocesor 80287 jnz k_80387 ;nie - koprocesor 80387 lub lepszy ... ; Architektura komputera PC/XT Będący pierwowzorem dla modelu XT mikrokomputer IBM PC był konstrukcją ośmio-bitową, która ma dzisiaj znaczenie wyłącznie historyczne i którą nie będziemy się zajmować. Rozwiązania przyjęte w modelu XT nie różnią się w sposób istotny od stosowanych po dzień dzisiejszy w najnowszych modeiach PC/AT. Proces śledzenia etapów rozwojowych w tej dziedzinie rozpoczniemy więc od modelu XT. Dostęp do przestrzeni wejścia-wyjścia Procesory serii 80x86 mogą adresować dwa nakładające się na siebie obszary. Oba z nich adresowane są poprzez tę samą systemową magistralę adresową, a wymiana danych między nimi a procesorem odbywa się tą samą systemową magistralą danych. Pierwszy z omawianych obszarów stanowi pamięć operacyjną. Można się do niego odwoływać używając przykładowo rozkazu mov x, y (gdzie x i y mogą określać adres w pamięci lub jeden z rejestrów procesora). Drugi obszar określany jest mianem przestrzeni wejścia-wyjścia (ang. l/O, Input/Outpitf), a zwracać się doń można za pomocą rozkazów in a, port i out port, a (gdzie port symbolizuje lokalizację w przestrzeni adresowej wejścia-wyjścia, zaś a jest akumulatorem -jednym z rejestrów procesora). Rozkazy z grupy mov dopuszczają użycie jako argumentu w zasadzie dowolnego rejestru procesora (z niewielkimi wyjątkami, na przykład niedozwolone są przesłania pomiędzy rejestrami segmentowymi). W przeciwieństwie do nich, rozkazy in i out akceptują wyłącznie akumulator - AX dla portów 16-bitowych lub AL dla portów 8-bitowych. O tym, który z tych dwóch obszarów będzie wybrany i jaki będzie kierunek przekazywania informacji (do czy od CPU) decydują sygnały systemowej magistrali sterującej: IOWC -zapis do przestrzeni wejścia-wyjścia; IORC - odczyt z przestrzeni wejścia-wyjścia; MRDC - odczyt z pamięci; MWDC - zapis do pamięci. 20 linii adresowych procesora 8086 umożliwia dostęp do przestrzeni adresowej o wielkości l MB. Zastosowany w 8086 mechanizm adresowania wykorzystuje tzw. segmen-tację. 20-bitowy adres fizyczny składany jest z 16-bitowego adresu segmentu (ang. segment address), zapisanego w jednym z rejestrów segmentowych procesora (CS, DS, ES lub SS) i 16-bitowego przemieszczenia wewnątrz segmentu (ang. offset address), zapisanego w jednym z pozostałych rejestrów(Nie wszystkie rejestry procesora 8086 mogą być użyte do adresowania pamięci. Nie da się w tym celu wykorzystać rejestrów AX, CX i DX). . Bezpośrednią konsekwencją przyjętego sposobu adresowania jest logiczny podział pamięci na segmenty o wielkości do 65 536 bajtów, natomiast najistotniejszą konsekwencją pośrednią- możliwość relokacji kodu z dokładnością do 16 bajtów (minimalna różnica pomiędzy początkami dwóch różnych segmentów). Sposób tworzenia adresu fizycznego na podstawie zapisanego w odpowiednich rejestrach adresu logicznego (w postaci segment:offset) przedstawia rysunek 1.43. Procesor 8086 może zaadresować 65 536 portów jednobajtowych lub 32 768 portów dwubajtowych (albo ich kombinację nie przekraczającą łącznie rozmiarów segmentu, tj. 64 kB). Układy dekoderów adresowych płyty głównej ograniczają jednak ten obszar do l 024 bajtów, tj. adresów OOOh - 3FFh, przy zachowaniu możliwości koegzystencji portów 8- i 16-bitowych. Porty przestrzeni adresowej wejścia-wyjścia stanowią swego rodzaju bramy, przez które procesor widzi rejestry wewnętrzne różnych urządzeń. Urządzenia te to na ogół wyspecjalizowane sterowniki (ang. controller), posiadające mniej lub bardziej rozbudowaną listę poleceń przyjmowanych przez jeden z portów. Stan, w jakim znajduje się dany sterownik, obrazowany jest zwykle poprzez zawartość tzw. rejestru statusowego (dostępnego też przez jeden z portów). Transport danych do i z urządzenia również odbywa się poprzez porty. Procesor uzyskuje dzięki temu możliwość programowania różnych układów peryferyjnych za pomocą instrukcji out. Jest również możliwe sprawdzanie stanu urządzenia przez pobranie zawartości jego rejestru statusowego instrukcją in. Przekazywanie danych między obsługiwanym przez dany sterownik urządzeniem peryferyjnym a pamięcią odbywa się (w zależności od kierunku) za pomocą instrukcji in i out. Procesory 8086 i 8088 Procesor 8086 Dla tego procesora charakterystyczne są dwa tryby pracy: minimalny i maksymalny. W trybie minimalnym procesor sam wytwarza sygnały sterowania magistralą systemową. Tryb maksymalny wymaga obecności specjalnego dekodera 8288, który - bazując na sygnałach statusowych SO - S2 procesora - wytwarza niezbędne sygnały sterujące. W związku z powyższym końcówki 24 - 31 układu 8086 zmieniają swoje znaczenie w zależności od trybu pracy. Schemat wyprowadzeń mikroprocesora 8086 pokazany jest na rysunku 1.44. Table). Każdy rekord tej tablicy opisuje (w formie liczby 12-bitowej) dotychczasowe zachowanie się jednego z rozgałęzień programowych. Tablica jest indeksowana co znacznie skraca czas dostępu. Podwójna jednostka MMX może teoretycznie wykonywać do dwóch instrukcji MMX w jednym cyklu. Ponieważ jednak blok MMX-1 realizuje operacje mnożenia i dodawania natomiast blok MMX-2 odpowiedzialny jest za przesunięcia i rozkazy pakowania, nie jest możliwe parowanie dowolnych rozkazów MMX. Implementowane są funkcje SDNow!, których wykonanie przebiega w blokach MMX-1 lubMMX-2. Przystosowanie do pracy w otoczeniu zgodnym ze specyfikacją podstawki typu Super 7 (magistrala 100 MHz). Procesory WinChip 2A wykorzystują ułamkowe mnożniki częstotliwości. Tabela 1.28. Podstawowe dane procesorów IDT WinChip 2 (W2-225; W2-240; W2-250; W2-266; W2-300; W2-220A; W2-233A; W2-266A; W2-300A;) Architektura; RISC; Technologia; 0,28 um/0,35 um (225 do 300); 0,25 um (200A do 300A); Zegar CPU [MHz]; 225; 240; 250;266; 300; 200; 233; 233; 250; Magistrala [MHz]; 75; 60; 83; 66; 75/100; 66; 66; 100; 100; Mnożnik (BF); x3; x4; x3; x4; x4/x3; x3; x3,5; 2,33; x2,5; L1 Cache (kod);32 kB, 2-Ways; L1 Cache (dane); 32 kB, 4-Ways; Pipe-Line Stages; 6; Out of Order Execution; x; TLB; Code Cache TLB: 128 Entries / 8-Ways, Data Cache TLB: 128 Entries / 8-Ways; Branch Prediction; Branch History Table: 4 096 entries; V#COM , V#IO [V]; 3,52 V (3,45 - 3,6) lub 3,3V (3,135 - 3,6); Pobór mocy, max. [W]; 12; 13; 14; 15; 16; 12; 13; 14; 16; Return Stack; 8; Interface; Socket Super 7; Oto znaczenie poszczególnych wyprowadzeń: AD 15 - ADO 16-bitowa magistrala danych procesora oraz jednocześnie 16 mniej znaczących bitów 20-bitowej magistrali adresowej. W obsłudze magistrali wykorzystany jest proces zwany multipleksowaniem: końcówki AD15 - ADO są wykorzystane najpierw do wystawienia adresu, po czym zmieniają swe znaczenie i obsługują szynę danych. A19 - A16Brakujące cztery najbardziej znaczące bity adresu S6 - S3 i jednocześnie (multipleksowane) cztery linie statusowe, informujące o używanym w danej operacji rejestrze segmentowym oraz o stanie bitu IE (ang. Interrupt Enable) maskującego przerwania: S3; S4; S5; S6; Rejestr segmentowy; 0; 0; IE; 0; ES; 1; 0; IE; 0; SS; 0; 1; IE; 0; CS; 1; 1; IE; 0; DS; -BHE/S7 - (Bus High Enable) - sygnał używany przez procesor w operacjach bajtowych. Niezależnie od tego, czy przedmiotem operacji są pojedyncze bajty czy też dwubajtowe słowa, wykorzystywana jest ta sama 16-bitowa magistrala danych. Skutkiem tego, zależnie od parzystości lub nieparzystości adresu obiektu w przestrzeni adresowej, żądany bajt zajmie na magistrali jedną z dwóch możliwych pozycji. Biorąc pod uwagę stan bitu AO (informujący o parzystości adresu) otrzymujemy następujące kombinacje: S7;AO;Znaczenie; 0;0;przekazywane jest słowo 16-bitowe; 0;1;bajt leży na liniach D15 - D8 (lokalizacja nieparzysta); 1;0;bajt leży na liniach D7 - DO (lokalizacja parzysta); 1;1;stan zabroniony - kombinacja wykluczona; -RD - (Read) - aktywny stan tego wyjścia (odpowiadający poziomowi zera logicznego) informuje o żądaniu odczytu danych (z pamięci lub przestrzeni wejścia-wyjścia) przez procesor. READY - Wejście wprowadzające procesor w stan oczekiwania. W stanie tym generowane są tzw. cykle oczekiwania (ang. wait state), a procesor czeka na zgłoszenie gotowości urządzenia wejścia-wyjścia lub pamięci. Dotyczy to obydwu kierunków wymiany danych, tzn. procesor może czekać zarówno na wystawienie danych na magistralę, jak i na ich zdjęcie. W rzeczywistości procesor otrzymuje tzw. synchronizowany sygnał READY, który niezależnie od asynchronicznego źródła przypada zawsze na zboczu impulsu taktującego CLK. INTR - (Interrupi) - wejście zbierające zgłoszenia przerwań pochodzących od sprzętu. W rzeczywistości jest to „punkt wejścia" kontrolera przerwań. -TEST - Stan tego wejścia badany jest instrukcją wait. W stanie wysokim procesor wprowadzany jest w swego rodzaju „bieg jałowy" i utrzymywany w nim tak długo, jak długo sygnał na tej końcówce utrzymuje się na wysokim poziomie logicznym. NMI - (Nonmaskable Interrupi) - wejście przerwań niemaskowalnych. W chwili zgłoszenia takiego przerwania procesor kończy rozpoczęty rozkaz i zapamiętawszy swój stan przechodzi do wykonania procedury obsługi przerwania INT 2. RESET - Wejście wymuszające inicjalizację procesora (powrót do stanu wyjściowego), oznaczającą załadowanie rejestrów wewnętrznych procesora ściśle określonymi wartościami oraz podjęcie wykonywania programu od adresu FOOO:FFFOh. W celu wywołania procedury inicjalizacji sygnał RESET musi utrzymać się w wysokim stanie logicznym przez co najmniej 4 cykle zegara taktującego CPU (ma to na celu uodpornienie wejścia na zakłócenia). CLK - Sygnał taktujący dla procesora. ~SO,~S1,~S2 - Sygnały sterujące dla kontrolera magistrali 8288 (tylko w trybie maksymalnym). Możliwe są następujące kombinacje: S2;S1;S0;Znaczenie; 0;0;0;INTA, sygnał przyjęcia zgłoszenia przerwania (ang. IRO - Interrupt Request); 0;0;1;procesor czyta z przestrzeni wejścia-wyjścia; 0;1;0;procesor pisze do przestrzeni wejścia-wyjścia; 0;1;1;HALT, procesor w stanie oczekiwania; 1;0;0;trwa uzupełnianie podręcznej kolejki rozkazów; 1;0;1;procesor czyta z pamięci; 1;1;0;procesor pisze do pamięci; 1;1;1;stan pasywny; ~RQ/GTO, ~RQ/GT1, LOCK - Regulują dostęp do szyny lokalnej, którą połączone są układy bezpośredniego dostępu do pamięci (DMA), procesor i koprocesor. QSO-QS1 - Podają stan podręcznej kolejki rozkazów (Prefetch Queue). MN/~MX - Przełącznik trybu pracy MIN/MAX (1 = tryb minimalny,0 = tryb maksymaly). V#CC - Wejście napięcia zasilającego (+5V). GND = Masa zasilania. Modele PC/XT używają procesora 8086 wyłącznie w trybie maksymalnym (wspomaganego kontrolerem magistrali 8288), tak więc nie będziemy się zajmować sygnałami procesora 8086 pracującego w trybie minimalnym. Procesor 8088 Procesor 8088 jest oszczędnościową wersją układu 8086. Nie chodzi tu bynajmniej o oszczędności przy produkcji samego procesora, lecz o cenę 8-bitowych układów peryferyjnych z nim współpracujących. W zakresie zestawu rozkazów i trybów adresowania oba układy są w pełni zgodne. Oba przetwarzają dane 16-bitowe, z tą jednak różnicą, że układ 8088 posiada wyprowadzone jedynie osjem bitów swojej 16-bitowej magistrali danych. Każda operacja dostępu do dwubajtowego słowa wykonywana jest w dwóch etapach. Przykładowe polecenie przesłania 16-bitowego słowa z pamięci do akumulatora AX „rozpisywane" jest przez sprzęt w niewidoczny dla oprogramowania sposób na dwie elementarne operacje jednobajtowe na rejestrach AH i AL, niezależnie od tego, czy dotyczy ono parzystego, czy nieparzystego adresu w pamięci. Następną różnicę w stosunku do procesora 8086 stanowi zredukowana do 4 bajtów długość kolejki rozkazów. Kolejka ta jest uzupełniana jednocześnie z wykonywaniem rozkazu (jeśli aktualnie wykonywany rozkaz nie wymaga dostępu do magistrali) już przy „ubytku" jednego bajtu (dla porównania, w 8086 począwszy od dwóch bajtów). Czas dostępu do bajtu pamięci wynosi cztery cykle zegarowe. Może się więc zdarzyć, że kolejka wypełniona rozkazami nie wymagającymi argumentów pobieranych z pamięci (na przykład clc, ror, sti) wyczerpie się szybciej, niż nastąpi jej uzupełnienie. Stanowi to dodatkówy „hamulec" w pracy procesora. Kontroler 8288 Układ scalony 8288 spełnia rolę pośrednika między samym procesorem a systemową magistralą sterującą. Jego głównym zadaniem jest dekodowanie sygnałów SO - S2 procesora 8086 (pracującego w trybie maksymalnym; jak wiemy, w trybie minimalnym niezbędne sygnały sterujące magistralami wytwarza sam procesor) i przetwarzanie ich na właściwe sygnały składowe magistrali sterującej, tj. IOWC, IORC, MWTC, MRDC, 1NTA oraz statusu procesora. Steruje on również pracą rejestrów zatrzaskowych (ang. latch) buforów magistrali adresowej i danych (.Są to rejestry przechowujące załadowaną do nich wartość do chwili załadowania następnej.).Stosowanie tego rodzaju rejestrów jest niezbędne, bowiem dane i adresy muszą być utrzymywane na szynach tak długo, jak długo jest to potrzebne dla prawidłowego zakończenia operacji transmisji danych.W przeciwnym przypadku mogłoby się zdarzyć, że wystawione przez pamięć lub układy wejścia-wyjścia na szynę danych słowo zniknęłoby z niej, zanim procesor zdążyłby je przejąć. To samo obowiązuje oczywiście przy operacji wysyłania danych przez procesor. Rozkład wyprowadzeń układu 8288 przedstawia rysunek l .45. Poszczególne wyprowadzenia opisano poniżej. ~SO - ~S2 - Połączone są z wyjściami ~SO - ~S2 procesora. CLK - (Memory Read) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na pamięć -> CPU. MB - Wejście sterujące trybem pracy magistral. Stan l (tryb MULTIBUS) odpowiada powszechnie stosowanemu protokołowi firmy Intel, O wymusza maksymalną prędkość pracy magistral. -MWTC - (Memory Write) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na CPU-> pamięć. -MRDC - (Memory Read) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na pamięć -> CPU. -IOWC - (Input/Output Write) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na CPU -> układ wejścia-wyjścia. -IORC - (Input/Output Read) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na układ wejścia-wyjścia ->CPU. DEN - (Data Enable) - niski poziom logiczny na tym wyjściu jest sygnałem dla rejestru zatrzaskowego bufora magistrali danych, powodującym „zamrożenie" w nim aktualnego stanu tej magistrali. ALE - (Address Latch Enable) - niski poziom logiczny na tym wyjściu jest sygnałem dla rejestru zatrzaskowego bufora magistrali danych, powodującym „zamrożenie" aktualnego stanu tej magistrali. DT/-R - (Data Transmit/Receive) - informuje o aktualnym ogólnym kierunku pracy szyny; l = zapis z procesora, O = odczyt przez procesor. -1NTA - Sygnał potwierdzenia przyjęcia przerwania sprzętowego przez procesor. ~AEN - (Address Enable) - podanie na to wejście stanu niskiego powoduje uaktywnienie wyjść układu 8288 sterujących magistralami. CEN - (Command Enable) - podanie na to wejście stanu niskiego ustawia wszystkie wyjścia sterujące magistralami oraz wyjścia DEN i -PDEN w stanie nieaktywnym. MCE/-PDEN - (Master Cascade/Peripherial Data Enable) - w zależności od stanu wejścia MB wyjście to służy do obsługi priorytetu przerwań lub komunikacji z urządzeniami wejścia-wyjścia. W komputerach PC XT wyjście to nie jest wykorzystywane. -AMWC - (Advanced Memory Write} - wystawienie sygnału na tym wyjściu uprzedza układy pamięci o mającej nastąpić operacji zapisu. -AIOWC - (Advanced l/O Write Command) - wystawienie sygnału na tym wyjściu uprzedza układy wejścia-wyjścia o mającej nastąpić operacji zapisu. V#CC - Wejście napięcia zasilającego (+5V). GND - Masa zasilania. Elementy składowe architektury komputera XT Centralną częścią tego modelu jest oczywiście procesor 8086 lub 8088. Płyta główna XT jest przystosowana do instalacji koprocesora arytmetycznego 8087. W niektórych nowszych modelach PC/XT stosowane były procesory V20 i V30 firmy NEC, będące rozbudowanymi wersjami procesora 8088 i 8086. Sygnał zegarowy 14,318180 MHz wytwarzany w układzie 8284, po podziale przez 3 do wielkości 4,77 MHz, stanowi główny sygnał taktujący. Nowsze modele XT odbiegają od tego, stosowanego głównie w PC, rozwiązania i posiadają układ generujący bezpośrednio przebieg taktujący o częstotliwości sięgającej 12 MHz. Wszystkie pozostałe elementy płyty głównej kontaktują się z procesorem poprzez magistrale (szyny) - rysunek l .46. W modelu XT wyróżniamy następujące magistrale: • magistralę lokalną, obejmującą 16-bitową szynę danych i 20-bitową szynę adresową procesora 8086; • magistralą systemową, sprzężoną z magistralą lokalną poprzez rejestry zatrzaskowe sterowane sygnałem ALE. Wszystkie 20 bitów adresu oraz 8 bitów systemowej magistrali danych wyprowadzone jest do gniazd rozszerzających. Magistrala systemowa dostarcza też zestawu sygnałów sterujących, takich jak ~IOR, -IOW, -MEMR, -MEMW , IRQź, DRQ/7, -DACKn itd.; • magistralą X, komunikującą się z pamięcią ROM zawierającą systemowy BIOS (ale nie z rozszerzeniami BIOS na kartach) oraz z portami układów na płycie głównej; • magistralę pamięciową, która łączy szyny systemowe z obwodami pamięci dynamicznej poprzez układy adresowania wierszy i kolumn pamięci; • magistralę zewnętrzną, która stanowi wyprowadzenie 20-bitowej systemowej szyny adresowej, 8-bitowej szyny danych i większości sygnałów systemowej szyny sterującej. Oprócz procesora (i ewentualnie wspomagającego go koprocesora) oraz pamięci dynamicznej płyta główna w modelu XT zawiera główne elementy składowe wymienione na kolejnych stronach. ROM - pamięć stała zawierająca procedury inicjalizujące (wykonywane w momencie włączenia komputera) oraz BIOS (Basic Input/Output System - zestaw podstawowych procedur wejścia i wyjścia); 8259A - kontroler przerwań sprzętowych. Jego 8 kanałów przyporządkowano w następujący sposób: Linia IRQ; Wektor; Urządzenie; 0; 08h; zegar systemowy (kanał 0 generatora 8253); 1; 09h; klawiatura; 2; OAh; zarezerwowane; 3; OBh; COM2; 4; OCh; COM1; 5; ODh; kontroler dysku twardego; 6; OEh;kontroler napędu dysków elastycznych; 7; OFh; LPT1; Wektor oznacza numer indeksu wskazującego adres procedury obsługi danego przerwania, umieszczony w tzw. tablicy wektorów przerwań. Tablica ta znajduje się w pamięci w obszarze OOOOOh - 003FFh i zawiera czterobajtowe pozycje reprezentujące kolejne adresy. Do grupy przerwań sprzętowych należy też przerwanie niemaskowalne (NMI), nie jest ono jednak obsługiwane przez żaden z kontrolerów 8259A; 8253 - programowany układ czasowy zawierający trzy niezależne liczniki. Mają one następujące zastosowanie: Licznik; Przeznaczenie; 0; generacja sygnału IRQO (zegar systemowy); 1; obsługa odświeżania pamięci; 2; obsługa głośnika; 8237A - kontroler DMA. Steruje on szybkim, bezpośrednim przekazywaniem danych pomiędzy układami wejścia-wyjścia a pamięcią (ang. Direct Memory Access} \ zawiera cztery kanały przedstawione na następnej stronie: Kanał; Przeznaczenie; 0; układ odświeżania pamięci; 1; łącze synchroniczne SDLC (ang. Synchronons Data Link Control - standard łącza synchronicznego firmy IBM); 2; kontroler napędu dysków elastycznych; 3; kontroler dysku twardego; • 8255 - interfejs programowalny (ang. PPI - Programmable Peripheral Jnter-face), obsługujący następujące urządzenia: •klawiaturę, • przełączniki pamięci konfiguracji (ang. configuration switches) •włączanie i wyłączanie głośnika, • sterowanie napędem pamięci kasetowej (funkcja ta ma znaczenie historyczne). Powyższe układy peryferyjne zlokalizowane na płycie głównej oraz te, które umieszczone są na kartach rozszerzenia, tj. sterowniki dysków, łącz szeregowych, równoległych itd., mają ściśle określone obszary adresowe w przestrzeni wejścia-wyjścia, w której widoczne są ich rejestry sterujące. Zestawienie tych adresów podano w tabeli l .30. Tabela 1.30. Podział przestrzeni adresowej wejścia-wyjścia w komputerze PC/XT Zakres; Przyporządkowanie; OOOh-OOFh; kontroler DMA 8237A; 020h-021h; kontroler przerwań 8259A; 040h-043h; programowalny układ czasowy 8253; 060h-063h; interfejs programowalny 8255; 080h-083h; rejestry stron DMA; 0A0h-0AFh; rejestr maskujący NMI; 0C0h-0CFh; zarezerwowane; 0E0h-0EFh; zarezerwowane; 100h-1FFh; wolne; 200h-20Fh; karta gier; 210h-217h; zarezerwowane; 220h-24Fh; zarezerwowane; 278h-27Fh; łącze równoległe LPT2; 2F0h-2F7h; zarezerwowane; 2F8h-2FFh; łącze szeregowe COM2; 300h-31Fh; karta prototypowa; 320h-32Fh; sterownik dysku twardego; 378h-37Fh; łącze równoległe LPT1; 380h-38Fh; łącze synchroniczne SDLC; 3A0h-3AFh; zarezerwowane; 3B0-3DFh; karta graficzna VGA; 3C0h-3CFh; karta graficzna EGA; 3D0h-3DFh; kolorowa karta graficzna (EGA, CGA); 3B0h-3BFh; karta monochromatyczna i łącze równoległe LPT1; 3EOh-3E7h; zarezerwowany; 3F0h-3F7h; sterownik napędu dysków elastycznych; 3F8h-3FFh; łącze szeregowe COM1; Ośmiobitowa magistrala zewnętrzna Komputery klasy PC/XT wyposażone są w umieszczone na płycie głównej 62-końców-kowe gniazda rozszerzenia (ang. expansion slot). Liczba tych gniazd nie jest jednoznacznie sprecyzowana i zależy od modelu płyty. W gniazdach można umieszczać karty 8-bitowe (tzw. krótkie). Charakteryzują się one pojedynczym złączem grzebieniowym. Teoretycznie jest całkowicie obojętne, w którym z gniazd umieszczona zostanie dana karta, bowiem wyprowadzenia wszystkich gniazd są połączone równolegle - wyjątkiem jest złącze J8 w starszych modelach XT obsługiwane nieco inaczej niż pozostałe gniazda. Pewne karty umieszczone w tym gnieździe nie funkcjonują prawidłowo. W praktyce pewne karty umieszczone zbyt blisko siebie mogą się wzajemnie zakłócać. Karty rozszerzające są niezmiernie ważnym elementem architektury komputera. Dają one praktycznie nieograniczoną elastyczność w projektowaniu urządzeń peryferyjnych, które z punktu widzenia oprogramowania będą się zachowywały tak, jak gdyby znajdowały się na płycie głównej. Znaczenia sygnałów zewnętrznej magistrali ośmiobitowej podano poniżej. ±5V, ± 12V - Zestaw napięć zasilających, z których mogą korzystać karty rozszerzenia. GND - Masa zasilania. OSC - Sygnał zegara systemowego 14,318180 MHz; ten sam sygnał, po podzieleniu częstotliwości przez 3, otrzymuje procesor. IRQ2 - IRQ7 - (Interrupt Requesi) - linie zgłoszeń przerwań sprzętowych. Kanały O (zegar systemowy) i l (klawiatura) obsługują urządzenia zainstalowane na płycie głównej, tak więc nie zostały wyprowadzone. DRQ1 - DRQ3 - (DMA Reąuesf) - linie zgłoszeń żądania przydziału kanału 1, 2 lub 3 DMA. Kanał O DMA jest już zajęty (obsługuje odświeżanie pamięci), nie jest więc wyprowadzony. ~DACK1 - (DMA Acknowledge) - odpowiadające liniom DRQn linie ~DACK3 potwierdzenia przyjęcia żądania obsługi kanałem DMA. ~DACKO - Sygnał, który może być wykorzystany przez karty posiadające własną pamięć dynamiczną dla jej odświeżania. Pojawia się on równolegle z odbywającymi się z udziałem kanału O DMA cyklami odświeżania pamięci na płycie głównej. ~IOR - (I/O Read) - sygnał ten przyjmuje poziom niski (aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej wejścia-wyjścia w celu odczytu. ~IOW - (I/O Write) - sygnał ten przyjmuje poziom niski (aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej wejścia-wyjścia w celu zapisu. ~MEMR - (Memory Read) - sygnał ten przyjmuje poziom niski (aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej pamięci w celu odczytu. ~MEMW - (Memory Write) - sygnał ten przyjmuje poziom niski (aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej pamięci w celu zapisu. RESET - Przekazuje kartom rozszerzenia sygnał generowany na płycie po naciśnięciu przycisku RESET. AO - A19 - 20-bitowa magistrala adresowa komputera. Stan linii AO - A19 odzwierciedla stan wyprowadzeń AO - A19 procesora 8086/8088 lub jest wytwarzany przez układ kontrolera DMA. D7-DO - Dwukierunkowa, ośmiobitowa magistrala danych. ALE - (Address Latch Enable) - sygnał wytwarzany przez kontroler magistrali 8288; informuje o ustabilizowaniu adresu na magistrali adresowej, co jest jednocześnie poleceniem dla układów kart rozszerzenia, że należy podjąć dekodowanie adresu i próbę „dopasowania go" do własnej przestrzeni adresowej. l/O CHRDY - I/O Channel Ready) - poziom sygnału na tej linii sprawdzany jest przez procesor lub kontroler DMA w każdym cyklu dostępu do urządzeń wejść i a-wyjść i a. Powolne układy peryferyjne mogą w ten sposób sygnalizować konieczność wprowadzenia przez urządzenie żądające dostępu (tj. procesor lub kontroler DMA) tzw. cykli oczekiwania, czyli dodatkowych, „pustych" cykli zegarowych (ang. wait s tatę) w oczekiwaniu na dane. Poziom logicznej l oznacza gotowość urządzenia, logiczne O wymusza oczekiwanie. ~I/O CHK - ((I/O Channel Check) - układy zamontowane na kartach rozszerzenia mogą tą drogą zgłaszać płycie głównej swoje niedomagania wykluczające je z dalszej pracy. Sygnał aktywny (tj. zero logiczne) powoduje wygenerowanie przerwania 2 (INT 2), a więc takiej samej akcji jak w przypadku błędu parzystości pamięci na płycie (wyświetlenie odpowiedniego komunikatu i zatrzymanie systemu). AEN - Wysoki poziom logiczny na tej linii oznacza, że kontroler DMA przejął kontrolę nad magistralami systemowymi (końcówki procesora znajdują się w stanie wysokiej impedancji). T/C - (Terminal Count) - sygnał generowany przez kontroler DMA. Wskazuje na zakończenie cyklu dostępu DMA (wykonanie zaprogramowanej liczby transmisji). Architektura komputera AT Na płycie głównej komputera model AT można ostatnio prócz procesora znaleźć tylko kilka układów scalonych wysokiej skali integracji. Nie oznacza to bynajmniej, że nastąpiły jakieś gruntowne zmiany w stosunku do pierwowzoru, w którym można było jednoznacznie zlokalizować wszystkie charakterystyczne układy scalone Intel serii %nnn. Wysoka skala integracji układów scalonych nie narusza w żaden sposób pełnej zgodności funkcjonalnej elementów systemu, przydziału adresów itd. W modelu AT wprowadzono oczywiście pewne unowocześnienia - inaczej nie można by przecież mówić o nowym modelu. Oto ogólna sylwetka architektury AT, określanej też mianem ISA (ang. Industry Standard Architecture): • Procesor otrzymuje sygnał taktujący z układu 82284, następcy 8284, stosowanego dla procesorów 8086/8088. Pierwsze modele AT taktowane były sygnałem 6 MHz. Obecnie na rynku znajdują się układy scalone 80286 produkcji firmy Harris, dające się taktować zegarem 25 MHz. Na tak wysokie częstotliwości zegarowe muszą być jednak przygotowane również inne elementy architektury, a nie tylko sam procesor. • 24-bitowa magistrala adresowa komputera AT pokrywa przestrzeń adresową do 16 MB, co jednak wymaga oprogramowania wykorzystującego tzw. chroniony tryb pracy procesora (ang. protected modę). W zgodnym z 8086/8088 trybie rzeczywistym (ang. real modę) wykorzystanych jest tylko 20 linii adresowych. • Koprocesorem arytmetycznym współpracującym z procesorem 80286 jest układ 80287. Podstawka dla niego znajduje się na płycie głównej. • W modelu AT możemy wyróżnić następujące magistrale: • lokalną, zawierającą 24 linie adresowe i 16 linii danych, połączonych bezpośrednio z procesorem, • systemową, która jest ustabilizowaną (poprzez zastosowanie rejestrów zatrzaskowych), częściową „kopią" magistrali lokalnej. Magistrala systemowa AT zawiera wszystkie linie lokalnej szyny danych oraz linie AO-A19 lokalnej szyny adresowej, • magistralę X, przez którą realizowana jest komunikacja z ROM-BIOS (nie z rozszerzeniami BIOS na kartach) oraz z portami układów umieszczonych na płycie głównej, • pamięciową, łączącą linie magistrali systemowej z obwodami pamięci dynamicznej poprzez układy adresowania wierszy i kolumn pamięci, • magistralę L, wyprowadzającą linie A17 - A23 magistrali lokalnej do gniazd rozszerzających (tj. magistrali zewnętrznej), • zewnętrzną, która stanowi wyprowadzenie 24-bitowej systemowej szyny adresowej, 16-bitowej szyny danych i większości sygnałów systemowej szyny sterującej. Należy wyraźnie zaznaczyć, że jedynymi układami mogącymi przejąć pełną kontrolę nad magistralami systemowymi (tzn. inicjować transmisję i decydować ojej kierunku) są procesor i kontroler DMA. Żaden inny procesor zamontowany na karcie rozszerzającej nie może sterować w bezpośredni sposób magistralami systemowymi. Na magistrali zewnętrznej wyprowadzany jest co prawda sygnał MASTER, ale procedura przejęcia sterowania rozpoczyna się od wymiany sygnałów uzgodnienia z kontrolerem DMA, który to dopiero odłącza procesor systemowy od magistral. • Dla zwiększenia liczby kanałów IRQ (linii przyjmujących zgłoszenia przerwań sprzętowych) wprowadzony został drugi układ 8259A (tzw. slave). Jest on podłączony do jednego z wejść układu głównego (master). Komputer AT dysponuje dzięki temu 15 kanałami IRQ, które zostały przyporządkowane następująco: Linia IRQ; Wektor; Urządzenie; 0; 08h; zegar systemowy; 1; 09h; klawiatura; 2; 0Ah; wyjście kaskadowe do układu Slave; 3; 0Bh; COM2; 4; 0Ch; COM1; 5; 0Dh; LPT2; 6; 0Eh; kontroler napędu dysków elastycznych; 7; 0Fh; LPT1; 8; 70h; zegar czasu rzeczywistego; 9; 71h; wywołuje przerwanie IRQ2; 10; 72h; zarezerwowane; 11; 73h; zarezerwowane; 12; 74h; zarezerwowane; 13; 75h; koprocesor arytmetyczny; 14; 76h; kontroler dysku twardego; 15; 77h; zarezerwowane; Wektor oznacza numer indeksu wskazującego adres procedury obsługi danego przerwania, umieszczony w tzw. Tablicy wektorów przerwań. Tablica ta znajduje się w pamięci w obszarze OOOOOh - 003 FFh i zawiera czterobajtowe pozycje reprezentujące kolejne adresy. Do grupy przerwań sprzętowych należy też tzw. przerwanie niemaskowalne (NM1), nie jest ono jednak obsługiwane przez żaden z kontrolerów 8259A. System obsługi DMA także otrzymał dodatkowe wsparcie w postaci drugiego układu scalonego 8237A obsługującego transmisje 16-bitowe. Kanały DMA zostały przydzielone w następujący sposób: Kanał; Szerokość w bitach; Przeznaczeni;e 0; 8; zarezerwowany; 1; 8; układ transmisji synchronicznej SDLC; 2; 8; kontroler napędu dysków elastycznych; 3; 8; zarezerwowany; 4; -; kaskada; 5; 16; zarezerwowany; 6; 16; zarezerwowany; 7; 16; zarezerwowany; Programowalny układ czasowy 8253 został zastąpiony unowocześnionym modelem 8254, którego trzy niezależne kanały obsługują następujące urządzenia: Kanał; Przeznaczenie; 0; generacja sygnału IRQO (zegar systemowy); 1; odświeżanie pamięci; 2; obsługa głośnika; • Zrezygnowano z usług większości mikroprzełączników (DlP) dla ustalania parametrów konfiguracyjnych systemu. Ich miejsce zajęła podtrzymywana bateryjnie pamięć CMOS. W układzie MC 146818, zawierającym pamięć CMOS znalazło się też miejsce dla zasilanego bateryjnie zegara czasu rzeczywistego, pracującego również przy wyłączonym komputerze. W modelu XT zegar pracował tylko od włączenia do wyłączenia komputera. • Magistrala zewnętrzna otrzymała dostęp do wszystkich 16 bitów systemowej szyny danych oraz wzbogacona została o kilka nowych sygnałów sterujących. Do wszystkich układów scalonych stanowiących składowe systemu można się odwoływać przez porty umieszczone w przestrzeni adresowej wejścia-wyjścia (tabela l .31). Procesor 80286 Pod względem budowy wewnętrznej procesor 80286 nie różni się w istotny sposób od swego poprzednika. Nowością jest jedynie wprowadzenie tzw. chronionego trybu pracy (ang. protected modę). Jego istota polega na sprzętowej realizacji mechanizmu kontroli dostępu do określonych obszarów pamięci. Mechanizmy te znajdują zastosowanie w pracy wielozadaniowych systemów operacyjnych, takich jak OS/2 czy Windows NT. Układ 80286 dysponuje specjalnym, dodatkowym zestawem rozkazów przeznaczonych do obsługi tego trybu pracy. Poza nim, w trybie rzeczywistym (ang. real modę) procesor dysponuje listą rozkazów zgodną z 8086, poszerzoną o pewne nowe. Należy podkreślić, że ich wykorzystanie w programach użytkowych mających działać na różnych komputerach, wliczając w to modele XT, nie jest możliwe. Poszerzona do 24 bitów magistrala adresowa pokrywa przestrzeń adresową 16 MB. Z tak dużej pamięci można jednak korzystać w trybie chronionym procesora. W trybie rzeczywistym należy się zadowolić adresowalnym obszarem pamięci zgodnym z 8086, tj. l MB, przy czym sposób generacji adresu fizycznego jest identyczny jak w przypadku „przodka". W trybie tym układ 80286 zachowuje się jak szybki 8086. Na zwiększenie prędkości mają wpływ następujące czynniki: zwiększona do 25 MHz maksymalna częstotliwość taktująca, poprawki w konstrukcji wewnętrznej procesora, zmodyfikowana poprzez krótsze cykle obsługa magistrali. Tabela 1.31. Podział przestrzeni adresowej wejścia-wyjścia w komputerze PC/A T Zakres Przyporządkowanie 000h-00Fh;kontroler DMA 8237A, Master; 020h-021h; kontroler przerwań 8259A Master; 040h-043h; programowalny układ czasowy 8254; 060h-063h; kontroler klawiatury 8042; 070h-071h; zegar czasu rzeczywistego; 080h-083h; rejestry stron DMA; 0A0h-0AFh; kontroler przerwań 8259A, Slave; 0C0h-0CFh; kontroler DMA 8237A, Slave; 0E0h-0EFh; zarezerwowane; 0F0h-0FFh; koprocesor 80287; 100h-1EFh; wolne; 170-177H; drugi kontroler dysku twardego AT-BUS; 1F0H-1F7H; kontroler dysku twardego AT-BUS; 200h-20Fh; karta gie; 210h-217h; zarezerwowane; 220h-267h; wolne; 278h-27Fh; łącze równoległe LPT2; 2C0h-2DFh; druga karta EGA; 2F8h-2FFh; łącze szeregowe COM2; 300h-31Fh; karta prototypowa; 320h-32Fh; wolne; 370h-377h; drugi kontroler napędu dysków elastycznych; 378h-37Fh; łącze równoległe LPT1; 380h-38Fh; łącze synchroniczne SDLC; 3A0h-3AFh; zarezerwowane; 3B0h-3DFh; karta graficzna VGA; 3B0h-3BFh; karta monochromatyczna i łącze równoległe LPT1; 3C0h-3CFh; karta graficzna EGA; 3D0h-3DFh; kolorowa karta graficzna (CGA, EGA); 3E0h-3E7h; zarezerwowany; 3F0h-3F7h; sterownik dysków elastycznych; 3F8h-3FFh; COM1; Obszar przestrzeni adresowej dla urządzeń wejścia-wyjścia jest zgodny z możliwościami procesora 8086, obsługiwane jest 64 k portów 8-bitowych o adresach 0-65 535, 32 k portów 16-bitowych o parzystych adresach 0, 2, 4, ..., 65 534 lub ich kombinacje w zakresie do 64 kB. Podobnie jednak jak w modelu XT, wbudowany w płytę dekoder adresów wejścia-wyjścia rozpoznaje tylko 1024 z nich - są to porty ulokowane w zakresie0 - l 023 (000h - 3FFh). Układ 8086 miał możliwość samodzielnego wytwarzania sygnałów sterowania magistralą, co pozwalało na rezygnację z udziału kontrolera 8288. Procesor 80286 nie ma takiej możliwości i musi współpracować z odpowiadającym mu kontrolerem magistrali 80288. Magistrala zewnętrzna (16-bitowa) Podobnie jak w modelu PC/XT, większa część sygnałów magistrali systemowej wyprowadzona jest do gniazd, w których można umieszczać karty rozszerzające. Gniazda te (rysunek 1.48) podzielone są na dwie grupy: pierwsza, 62-stykowa, jest zgodna (z wyjątkiem sygnałów OWS i REF) z 8-bitową magistralą XT, druga stanowi jej 36-stykowe uzupełnienie. Płyta główna modelu AT posiada na ogół, oprócz złącz 16-bitowych, również jedno lub dwa gniazda 8-bitowe. Obowiązują tutaj te same uwagi jak w przypadku modeli XT. Nie należy jednak umieszczać kart 16-bitowych (tzw. długich) w „krótkich" złączach, choć jest to fizycznie możliwe. Tak umieszczone karty (na przykład VGA) w większości przypadków mogą pracować poprawnie, ale nie zostaną w pełni wykorzystane ich możliwości. Poniżej omówione zostaną tylko linie nie występujące w 8-bitowej magistrali XT. Znaczenie pozostałych sygnałów jest takie samo, jak podano przy opisie magistrali XT. ~OWS - (O Wait States) - wystawiając na tej linii poziom zera logicznego karta rozszerzenia daje sygnał, że jest dostatecznie szybka, aby być obsługiwaną bez dodatkowych cykli oczekiwania. ~REF - (Refresh) - sygnał ten informuje, że w danym momencie odbywa się cykl odświeżania pamięci dynamicznej na płycie głównej. Jego źródłem nie jest kanał O DMA, lecz jeden z generatorów układu 8254 (ang. timer) lub specjalizowane układy obsługujące samą pamięć. V#cc - Napięcie zasilające (+5V). LA 17 - LA23 - (Large Address) - siedem najbardziej znaczących bitów 24-bitowej szyny adresowej procesora. Linie LA 17 - LA 19 pokrywają się logicznie z liniami A17 - A19 w części 8-bitowej złącza, z tą różnicą, że adres na liniach LAw? wystawiany jest wcześniej. SD8 - SD 15 - (System Data) - bardziej znaczący bajt 16-bitowej systemowej szyny danych AT. -SBHE - (System Bus High Enable) - sygnał ten jest wystawiany przez procesor lub inny układ przejmujący kontrolę nad magistralami (na przykład kontroler DMA) podczas procesu przekazywania danych 16-bitowych z udziałem bardziej znaczącego bajtu magistrali, tj. SD8-SD15. ~MEM CS16 - Sygnał ten generowany jest przez karty rozszerzające, które gwarantuj ą dostęp do pamięci w trybie 16-bitowym. Karta 16-bitowa, która nie odpowie w odpowiednim momencie wystawieniem niskiego poziomu logicznego na linii ~MEM CS16, będzie obsługiwana tak, jak karta 8-bitowa. Jeżeli karta 8-bitowa zostanie umieszczona w złączu 16-bitowym, to sygnał ~MEM CS16 będzie nieaktywny (na nie podłączonej linii ustala się wysoki poziom logiczny), co pozwala na automatyczną detekcję rozmiaru złącza karty. ~I/0 CS16 - Sygnał ten generowany jest przez karty rozszerzające, które gwarantują dostęp do przestrzeni wejścia-wyjścia w trybie 16-bitowym. Obowiązują tu te same uwagi co dla sygnału ~MEMCS16. ~MEMR - (Memory Read) - stan aktywny tej linii (niski poziom logiczny) oznacza żądanie odczytu przez procesor lub kontroler DMA danych z pamięci w zakresie 0-16 MB. Sygnał ~SMEMR w 8-bitowej części złącza generowany jest wyłącznie przy odczytach w przestrzeni adresowej O - l MB, zaś przy próbie dostępu do pamięci powyżej l MB pozostaje nieaktywny (wysoki poziom logiczny); ~MEMW - (Memory Write) - stan aktywny tej linii (niski poziom logiczny) oznacza żądanie odczytu przez procesor lub kontroler DMA danych z pamięci w zakresie 0-16 MB. Sygnał -SMEMW w 8-bitowej części złącza generowany jest wyłącznie przy odczytach w przestrzeni adresowej O - l MB, zaś przy próbie dostępu do pamięci powyżej l MB pozostaje nieaktywny (wysoki poziom logiczny). IRQ10 - 12, ~IRQ14 - 15 - (Interrupt Reąuesf) - linie zgłoszeń przerwań sprzęto do datkowego w architekturze AT kontrolera przerwań 8259A (Slave). Linia IRQ13, przypisana standardowo obsłudze znajdującego się na płycie głównej koprocesora arytmetycznego, nie jest wyprowadzona. DRQO,~DACKO - (DMA Reąuest - DMA Acknowledge) - wolny, 8-bitowy kanał obsługi DMA powstały po zlikwidowaniu mechanizmu odświeżania pamięci kanałem O DMA, pochodzącym z architektury XT. DRQ5 - 7, ~DACK5 - 7 - 16-bitowe kanały DMA udostępniane przez dodatkowy układ kontrolera DMA 8237A (Slave). ~MASTER - Sygnał umożliwiający przejęcie sterowania systemem przez procesor znajdujący się na karcie rozszerzenia. Układowi takiemu należy wpierw przyporządkować jeden z kanałów DMA. Kontroler DMA przeprowadza rutynowo proces odłączania procesora zainstalowanego na płycie głównej (sekwencja sygnałów HRQ i HLDA) przed wysłaniem sygnału ~DACK do chcącego zawładnąć magistralami procesora. Ten reaguje uaktywnieniem linii -MASTER (tj. sprowadzeniem jej do poziomu zera logicznego) i przejmuje sterowanie systemem. Architektura komputerów 386, 486 i Pentium Modele AT wyposażone w procesory 80286 należą już do przeszłości. Ich miejsce zajęły komputery wyposażone w procesory 80386, 80486 (odchodzące już do lamusa) i Pentium. Płyty takie cechują 32-bitowe magistrale systemowe (danych i adresowa). Gniazda kart rozszerzających (magistrala zewnętrzna) mają jednak wyprowadzone w dalszym ciągu jedynie 16 linii danych i 24 linie adresowe. Odpowiedniego łamania i przesuwania bajtów dokonują specjalne układy pośredniczące między magistralą systemową a zewnętrzną. Pomijając te szczegóły można powiedzieć, że architektonicznie 32-bitowe modele AT nie różnią się w istocie od swych 16-bitowych pierwowzorów. Wzrost częstotliwości taktujących, pociągający za sobą w oczywisty sposób przyspieszenie pracy magistral systemowych, niesie w sobie wzrost mocy obliczeniowej. Najwęższym gardłem architektury AT pozostaje po dziś dzień magistrala zewnętrzna. Decydują o tym dwa główne czynniki: jej szerokość i szybkość pracy. Tak się nieszczęśliwie składa, że układy peryferyjne najintensywniej wymieniające dane z pamięcią montowane są na kartach rozszerzających. Mowa tu w szczególności o.kontrolerach dysków twardych, kartach sieciowych i graficznych. Istnieją wprawdzie nieliczne wyjątki rozwiązań płyt głównych ze zintegrowanym na nich kontrolerem dysków lub wręcz kartami sieciowymi Ethernet, ale układy te komunikują się z procesorem nadal 16-bitową szyną danych, chociaż z powodzeniem mogłyby być obsługiwane z wykorzystaniem 32-bitowych strumieni danych. Drugim hamulcem jest częstotliwość taktowania magistrali zewnętrznej. Nawet w modelu 486DX-50 MHz magistrala zewnętrzna taktowana jest w najlepszym razie częstotliwością 12,5 MHz (zwykle 6-8 MHz). Wprowadzony wraz z magistralą AT standard ISA, którego producenci sprzętu muszą przestrzegać dla zachowania zgodności sprzętowej, wyznacza maksymalną częstotliwość pracy magistrali zewnętrznej na 8,33 MHz. Powstaje swego rodzaju błędne koło, gdyż szybkie układy peryferyjne nie wszędzie mogą być wykorzystane, a podnoszenie częstotliwości pracy magistrali nie gwarantuje niezawodnej pracy znajdujących się na rynku kart starszego typu. Rozwiązanie tych problemów w ramach architektury AT nie jest możliwe. Z tego też względu powstało wiele konkurencyjnych standardów, z których tylko nieliczne ugruntowały swą pozycję na rynku. Oznacza to naturalnie, że istnieją nie tylko płyty główne innych standardów, ale - co nie mniej ważne - dostosowane do nich karty rozszerzające obsługujące te same urządzenia zewnętrzne, jak monitory, dyski itp. Przed przejściem do omówienia cech charakterystycznych standardów magistral konkurencyjnych dla ISA podajmy dla porównania to, co wydaje się być najistotniejsze - osiąganą w każdym z nich teoretyczną przepustowość magistrali zewnętrznej.Standard - Przepustowość magistrali ISA - 8,33 MB/s EISA - 33 MB/s MCA - 20 MB/s VESA - 120 MB/s PCI - 132 MB/s EISA (Extended Industry Standard Architecture) Jednym ze standardów, któremu udało się zdobyć rynek, jest niewątpliwie EISA. System ten stanowi istotny krok na drodze do wykorzystania pełnych możliwości procesorów 32-bitowych. Architektura EISA jest niezwykle kosztowna ze względu na swoją komplikację; zachowana zostaje bowiem możliwość współpracy z dotychczas stosowanymi peryferiami ISA. Kontroler magistrali decyduje każdorazowo, czy podczas bieżącej operacji można „iść" na 32-bitową „całość", czy też należy symulować stary, 16-bitowy tryb pracy. To samo dotyczy kontrolera DMA. W razie potrzeby nowoczesny, 32-bitowy kontroler DMA emuluje pracę swego 8-bitowego poprzednika. Mimo iż technologia ta nie należy do tanich, ogromna konkurencja na rynku producentów osprzętu EISA doprowadziła do istotnego spadku cen, a co za tym idzie, popularyzacji systemu. Sztandarowym hasłem lansowanym przez wytwórców sprzętu standardu EISA jest kompatybilność (zgodność) z kartami ISA. Spełnienie tego wymogu powoduje, że posiadacz płyty głównej EISA i kart rozszerzających ISA może być pewien, że wszystko będzie razem doskonale współpracować, tyle tylko, że nic się na tym nie zyskuje. Dopiero wyposażenie takiej płyty w karty standardu EISA udostępnia pełne możliwości systemu. Wprowadzone w stosunku do standardu ISA zmiany nie mają więc charakteru rewolucyjnego, a raczej poważnej operacji kosmetycznej. Dotyczą one kilku obszarów. Wieloprocesorowość Dowolny kontroler (procesor) umieszczony na jednej z kart rozszerzających EISA ma nieograniczone możliwości sterowania magistralą systemową. Oznacza to, że w systemie mogą „współżyć" różne procesory mające dostęp do tych samych zasobów komputera, takich jak dyski, pamięć itp. System przydziału magistral kolejnym procesorom jest dosyć rozbudowany i umożliwia hierarchiczno-priorytetowy sposób dostępu. Magistrala zewnętrzna Karty rozszerzające EISA mają do dyspozycji, oprócz wielu sygnałów sterujących, 32 bity systemowej szyny adresowej i 32 bity systemowej szyny danych. Na magistralę zewnętrzną EISA składa się 98 sygnałów standardu ISA oraz 90 nowych linii. Nie wszystkie nowe sygnały są jednoznacznie zdefiniowane - pozostawiono tu miejsce na specyficzne rozwiązania producentów wysoce specjalizowanych kart. Aby zachować wymóg zgodności z kartami ISA, gniazda EISA mają szczególną konstrukcję. Styki gniazd ułożone są na dwóch poziomach. Poziom górny dostarcza wszystkich sygnałów standardu ISA, natomiast w dolnym, położonym w głębi gniazda, rozlokowane są końcówki EISA. Normalna karta ISA nie może być wsunięta tak głęboko, by sięgnąć linii dodatkowych styków - uniemożliwiają to poprzeczne zapory. Nie są one jednak przeszkodą dla kart EISA, posiadających w odpowiednich miejscach wycięcia. Kontroler DMA Bardzo istotne zmiany wprowadzono w systemie DMA. Nie ma już znanych ze standardu ISA ograniczeń objętości przesyłanych danych do bloków po 64 kB (128 kB w kanałach 16-bitowych). Wykorzystywane są pełne zdolności 32-bitowej szyny adresowej, tzn. teoretycznie możliwe są transfery bloków o wielkości do 4 GB. Aby zachować zdolność obsługi kart ISA, stosowany w architekturze EISA nowoczesny, 32-bitowy kontroler DMA ma możliwość pracy w trybie układu 8237A. Każdy z siedmiu kanałów DMA może więc obsługiwać urządzenia 8-, 16-, i 32-bitowe. Zmieniono też sposób przydziału kanałów urządzeniom. W miejsce stałych priorytetów poszczególnych kanałów wprowadzono rotacyjny system ich przydziału. Jest to krok w stronę systemów wielozadaniowych i wieloprocesorowych, mający uniemożliwić trwałe blokowanie kanałów przez uprzywilejowane urządzenie. Kontroler przerwań sprzętowych System EISA dysponuje, podobnie jak ISA, 15 kanałami IRQ. Istotnym novum jest natomiast zmiana sposobu wyzwalania przerwań. Standard ISA używał zboczy impulsu, co jest metodą bardzo podatną na zakłócenia. EISA wymaga od zgłaszającego przerwanie urządzenia utrzymania aktywnego poziomu sygnału, tj. przekroczenia określonego poziomu napięcia, a nie tylko jego wzrostu. Kontroler magistral Wszystkie magistrale EISA są 32-bitowe. Procesory 80386 i 80486 mają poza tym możliwość użytkowania magistral w tzw. trybie burst, co oznacza dostęp do adresowanego obiektu w jednym takcie zegarowym. Dla porównania, magistrala AT potrzebuje w najlepszym razie (bez cykli oczekiwania) czterech taktów zegara. Ze względu na zachowanie kompatybilności magistrala zewnętrzna EISA pracuje z maksymalną prędkością 8,33 MHz, natomiast dostęp do pamięci odbywa się już z pełną częstotliwością zegara CPU. Najbardziej skomplikowaną częścią systemu EISA jest więc niewątpliwie kontroler magistral. Musi on umieć odróżnić od siebie pojedyncze cykle ISA i EISA, przełączać szynę w tryb burst oraz przeprowadzać łamanie i składanie bajtów przy dostępie do obiektów 8- i 16-bitowych. Pamięć konfiguracji 64 bajty pamięci konfiguracji znane z architektury AT zastąpione zostały 4 kB w standardzie EISA. Pamięć ta przechowuje nie tylko informacje o konfiguracji płyty głównej, ale i o zainstalowanych kartach. W systemie EISA nie ma żadnych przełączników kon-figurujących (DIP) ani zwór; konfigurowanie systemu odbywa się całkowicie programowo. MCA (Micro Channel Architecture) Architektura MCA jest wytworem firmy IBM i została po raz pierwszy wprowadzona w modelach PS/2. Ma w niej miejsce zdecydowany odwrót od tradycji upartego (w celu zachowania kompatybilności) trzymania się standardu ISA. Dotyczy to zarówno cech logicznych architektury, jak i nowej geometrii kart i złącz, która wyklucza współpracę z osprzętem ISA. Polityka koncernu IBM poszła w tym wypadku zupełnie inną drogą. Wszystkie charakterystyczne cechy systemu zostały opatentowane, a licencje na produkcję urządzeń w tym standardzie wydawane są dosyć skąpo. Ma to oczywiście na celu utrzymanie monopolu w tej dziedzinie, co niewątpliwie się udało. Niestety, każdy kij ma dwa końce, a przyjęta metoda nie wyszła na dobre propagowaniu tej technologii. Brak konkurencji na rynku producentów utrzymuje stosunkowo wysokie ceny i hamuje sprzedaż wyrobów. Ponadto dominacja IBM w tym sektorze stała się zalążkiem dla rozwinięcia konkurencyjnej technologii - tak właśnie, jako obrona rynku producentów przed monopolem IBM, powstała architektura EISA. MCA jest ukierunkowana wyraźnie na potrzeby systemów wielozadaniowych typu OS/2 i 32-bitowych procesorów 80386 i 80486. Mimo ogromnych różnic architektonicznych, programy pracujące na urządzeniach PS/2 pod nadzorem systemu DOS nie sprawiają żadnych trudności, jeżeli tylko nie sięgają bezpośrednio do rejestrów. Dla użytkownika poruszającego się na poziomie systemu operacyjnego i aplikacji jednoznaczne stwierdzenie rodzaju architektury płyty głównej nie jest wcale rzeczą łatwą (pomijamy tu oczywiście ewidentne różnice wynikające ze wzrostu mocy obliczeniowej systemu). Przepustowość magistrali zewnętrznej MCA sięga 20 MB/s Bardzo szybka, bowiem pracująca w takt zegara procesora, jest magistrala lokalna łącząca procesor bezpośrednio z pamięcią. Magistrala systemowa ma co prawda szerokość 32 bitów (zarówno w części adresowej, jak i danych), ale taktowana jest zegarem 10 MHz i, co gorsza, na każdą transmisję przypadają dwa cykle zegarowe (dla porównania: ISA - 4 cykle, EISA - l cykl). Gruntownie zmodyfikowany został system DMA. Po pierwsze, w transmisjach DMA używany jest zawsze pełny, 32-bitowy adres pokrywający całą przestrzeń adresową systerou. Zrezygnowano z emulowania 8- i 16-bitowego trybu układu 8237A. Po drugie, co jest absolutnym novum, wszystkie osiem kanałów DMA może być jednocześnie aktywne. Nie trzeba chyba dodawać, jakie znaczenie ma to dla systemów wielozadaniowych. System przerwań sprzętowych, dzięki realizacji idei wyzwalania poziomem (a nie zboczem, jak to ma miejsce w architekturze ISA) i przydziału jednego kanału wielu urządzeniom, zapewnia obsługę 255 urządzeń. Centralny procesor na płycie głównej (ang. host CPU) może być wspomagany przez 16 dodatkowych mikroprocesorów umieszczonych na kartach rozszerzających. Dla potrzeb wzajemnej komunikacji między procesorami, uwzględnienia ich priorytetów, przydziału odcinków czasowych dla dysponowania magistralami itd. dedykowano specjalną 4-bitową szynę sterującą. Karty rozszerzające systemu MCA nie są już anonimowe. Każda z nich ma swój niepowtarzalny numer identyfikacyjny - produktom innych wytwórców nadawane są numery uzgadniane centralnie z IBM. System ten umożliwia jednoznaczną identyfikację rodzaju karty. Jej konfiguracja odbywa się wyłącznie w drodze dialogu z programem instalacyjnym. Na karcie brak jest jakichkolwiek zwór i przełączników. Informacja o konfiguracji karty przechowywana jest w systemowej pamięci CMOS. Również pojedyncze gniazda magistrali zewnętrznej zaczęły być identyfikowalne w ramach systemu. Dało to możliwość programowego, a więc bez otwierania obudowy komputera, odłączania karty tkwiącej fizycznie w złączu, co pozwala na znaczne uelastycznienie konfiguracji sprzętowej. W systemie mogą być na stałe zamontowane wykluczające się wzajemnie karty. W stosownym momencie można aktywować jedną z nich bez potrzeby sięgania po śrubokręt. System zbudowany w oparciu o architekturę ISA reaguje bardzo stanowczo na stwierdzenie błędu działania pamięci podczas jej kontroli po załączeniu. Załadowanie systemu operacyjnego z pewnością nie nastąpi, jeśli choć jedna komórka w całych 16 MB pamięci jest niesprawna. System MCA toleruje drobne ubytki w pamięci operacyjnej. W takim wypadku cała dostępna pamięć powyżej miejsca uszkodzenia ulega logicznemu prze-adresowaniu. Segment o długości 64 kB, w którym stwierdzono uszkodzenie, zostaje przesunięty na koniec przestrzeni adresowej i tam dezaktywowany. Powstała luka zostaje wypełniona sprawnym segmentem. Aby nie blokować gniazd magistrali zewnętrznej, niezbędne elementy architektury, takie jak złącza szeregowe i równoległe czy karta VGA, zostały zintegrowane z płytą główną. Użytkownik ma oczywiście możliwość ich zablokowania i skorzystania z usług odpowiednich kart. Należy nadmienić, że konstrukcja złącz MCA umożliwia stosowanie nie tylko kart 32-bitowych, ale i ich uproszczonych wersji o szerokości 8 i 16 bitów. VESA Local Bus Zgodnie z zasadą, że gdzie dwóch się bije tam trzeci korzysta, duże powodzenie zdobyły różne systemy 32-bitowych szyn lokalnych (ang. local bus). Początkowo każdy z producentów preferował swój standard. Z czasem, z gromady rozmaitych rozwiązań (lansowanych między innymi przez firmy Intern, Opti, Elitegroup) na czoło wysunął się zdecydowanie pseudo-standard VESA, stworzony przez organizację o nazwie Video Electronics Standards Association, w której główny udział ma firma NEC. „Pseudo", gdyż peryferia noszące znamiona VESA wcale nie muszą (do czasu normalizacji pracować poprawnie w dowolnej płycie głównej VESA. ( Oficjalna specyfikacja standardu VESA 1.0 została opublikowana we wrześniu 1992 roku. Większość obecnie produkowanego osprzętu VLB odpowiada tej specyfikacji.) Pod nazwą VESA (lub VLB, VESA Local Bus) kryje się system 32-bitowej szyny lokalnej dedykowanej w zasadzie obsłudze tylko dwóch urządzeń - karty sterownika monitora i kontrolera dysków. Struktura magistrali VESA jest bardzo mocno związana ze sprzętem, ponieważ jest ona bezpośrednio połączona z magistralą lokalną procesora i486. Rozwiązanie takie sprawia, że koszt umieszczenia magistrali VESA w systemie 386/486 jest bardzo niski. Z drugiej jednak strony, tak silne związanie sprawi, że magistrala VESA umrze śmiercią naturalną wtedy, gdy systemy 386/486 wyjdą z użycia. Rozwiązanie to jest swego rodzaju dodatkiem do architektury ISA, gdyż - nie naruszając cech standardu - wymaga dobudowania na zwykłej płycie AT od jednego do trzech 32-bitowych złącz VESA. Magistrala zewnętrzna VESA taktowana jest zegarem procesora, którego częstotliwość nie może przekraczać 40 MHz. Przepustowość szyny danych dochodzi do 120 MB/s, co głównych konkurentów (MCA, EISA) pozostawia daleko w tyle. Samo złącze VESA nie jest niczym innym, jak dodatkowym gniazdem umieszczonym w jednej linii z gniazdem ISA (tysunek 1.51). Daje to możliwość użytkowania w takim gnieździe zarówno kart nowego standardu, które sięgają swymi stykami do dodatkowego gniazda, jak i zwyczajnych kart ISA nie czerpiących korzyści z rozszerzenia architektury. Płyta główna standardu VESA jest tańsza od EISA, zważywszy prostotę jej budowy. Również karty rozszerzenia pracujące w tym systemie są bardziej dostępne dla kieszeni zwykłego użytkownika. Karty graficzne standardu VLB są 2 - 3 razy szybsze od swoich klasycznych konkurentek. Dodatkowy wzrost wydajności karty w środowisku Windows gwarantują specjalnie opracowane procesory graficzne (między innymi Weitek W5086, S3 86C911, C&T 82C453), które jednak podczas pracy w środowisku DOS nie dają żadnych korzyści. Inaczej wygląda sprawa kontrolerów dysków VLB. Żaden układ nie jest w stanie poprawić parametrów samego dysku. Powszechnie stosowane dyski twarde typu IDE mają przecież zintegrowany w sobie sterownik, więc jeżeli przepustowość danych na odcinku głowice-sterownik jest mała, to magistrala nic tu nie pomoże. Jeżeli natomiast dysk dysponuje obszernym własnym buforem (ang. onboard cache), to zalety szybkiej, 32-bitowej magistrali VESA można z powodzeniem wykorzystać. Magistrala PCI (Peripherial Component Interconnect) Magistrala PCI opracowana przez firmę Intel jest najnowszym rozwiązaniem 32-bitowej szyny lokalnej. Pomimo zbliżonych parametrów, w dość krótkim czasie wyparła magistralę VESA. Stało się tak z bardzo prostej przyczyny: magistrala VESA oparta jest na magistrali lokalnej procesorów 386 i 486, a co za tym idzie - karty rozszerzeń są dostosowane do współpracy z tymi procesorami. Magistrala PCI jest niezależna od typu procesora - dzięki temu wykorzystywana jest również w komputerach opartych na procesorach PowerPC. Magistrala PCI daje możliwość tworzenia złożonych systemów. W jednym systemie, zgodnie ze specyfikacją 2. l standardu PCI, może współpracować do 256 magistral PCI, przy czym każda z nich może obsługiwać do 32 urządzeń PCI, a każde urządzenie może pełnić do 8 funkcji (zintegrowane urządzenia nie są nowością wprowadzoną przez standard PCI - na przykład typowa karta ISA Multi I/O zawiera 4 urządzenia: dwa porty szeregowe, port równoległy i gamę port). O możliwościach architektury PCI może świadczyć fakt, że w produkowanych obecnie komputerach klasy PC opartych na architekturze PCI wykorzystywana jest tylko jedna magistrala PCI, obsługująca około 10 urządzeń. Magistrala PCI może pracować z częstotliwością od O do 33 MHz (wersja 2.1 standardu dopuszcza częstotliwości do 66 MHz), co daje przepustowość w granicach 132 MB/s. Magistrala PCI pracuje w trybie burst, co oznacza dostęp do adresowanego obiektu w jednym takcie zegarowym. Zdefiniowane jest również 64-bitowe rozszerzenie magistrali PCI, które umożliwia transfer danych z prędkością do 264 MB/s pomiędzy 64-bitowymi urządzeniami PCI. Wymiana danych pomiędzy urządzeniami 64- i 32-bitowymi jest wolniejsza niż na 32-bitowej magistrali PCI ze względu na wprowadzenie dodatkowego cyklu umożliwiającego rozpoznanie sposobu transmisji danych. Zasada działania magistrali PCI jest bardzo prosta: do magistrali mogą być podłączone dwa rodzaje urządzeń: inicjatory - mogące przejmować kontrolę nad magistralą, slave - mogące tylko transmitować dane. Transmisja danych może przebiegać między dwoma inicjatorami lub inicjatorem i slavem. Każda transmisja (rysunek 1.53) rozpoczynana jest przez inicjator wystawieniem na magistralę sygnału -FRAME - jest to sygnał dla pozostałych urządzeń PCI, by odczytały adres urządzenia docelowego (sygnały AD - Address) i rozkaz określający sposób transmisji (sygnały C/-BE - Command). Adres urządzenia docelowego i sposób transmisji wystawiony jest na magistrali przez jeden cykl zegara. Gdy urządzenie slave rozpozna, że transmisja danych skierowana jest do niego, wystawia na magistrali sygnał ~DEVSEL (Device Selecf) - jeżeli sygnał ~DEVSEL nie zostanie wystawiony w odpowiednim czasie, transmisja zostanie zaniechana. Wystawienie przez urządzenie slave sygnału ~DEVSEL kończy nawiązywanie połączenia (fazę adresową) pomiędzy inicjatorem i urządzeniem slave. W następnym etapie (fazie przesyłania danych) rozpoczyna się przesyłanie danych (sygnały AD - Data). Liczbę bajtów przesyłanych danych określają sygnały C/~BE (Byte Eanble) ustawiane przez inicjator. Transfer danych powinien przebiegać w trakcie jednego cyklu zegara. Inicjator i urządzenie docelowe wystawiają sygnały ~IRDY (Initiator Ready) i ~TRDY (Terminator Ready) informujące o tym, że są gotowe do przekazywania danych. Jeżeli z jakichś względów inicjator bądź urządzenie docelowe nie są w stanie przekazywać danych, to zmieniają ustawienie sygnałów ~IRDY lub ~TRDY w celu wprowadzenia dodatkowych cykli oczekiwania (ang. wait states). Inicjator informuje o zakończeniu fazy przekazywania danych wycofując sygnał ~FRAME. Zaniknięcie sygnału ~DEVYSEL informuje inne inicjatory, że magistrala jest wolna. Dwa dodatkowe sygnały (~REQ i ~GNT) umożliwiają arbitraż w sytuacji, gdy kilka inicjatorów próbuje równocześnie przejąć kontrolę nad magistralą. Wystawienie przez inicjator sygnału ~REQ (Reąuest) oznacza żądanie dostępu do magistrali, zaś sygnał ~GNT (Granf) oznacza przyznanie przez układ arbitrażu kontroli nad magistralą określonemu inicjatorowi. Para sygnałów ~REQ i ~GNT doprowadzana jest osobno od arbitera do każdego inicjatora. Specyfikacja PCI nie definiuje sposobu arbitrażu. Zwykle arbiter umieszczony jest w układzie sprzęgającym magistralę lokalną procesora z magistralą PCI. Na rysunku 1.54 przedstawiono przykładowy arbitraż: dwa inicjatory równocześnie żądają dostępu do magistrali - inicjator A ma do przeprowadzenia dwie transmisje, a inicjator B jedną. Arbiter przyznaje magistralę na przemian inicjatorowi A i B. Ponieważ sygnały AD i C/~BE mają różne znaczenie zależne od fazy transmisji, urządzenia PCI wykorzystują znacznie mniej sygnałów (inicjator 49, slave 47 - sygnały podstawowe, rysunek l .55) niż urządzenia korzystające z magistrali VESA Local Bus. Na rysunku 1.55. przedstawiono wszystkie sygnały wykorzystywane przez magistralę PCI. Do realizacji trzydziestodwubitowej transmisji danych niezbędne są sygnały podstawowe. Sygnały dodatkowe zwiększają możliwości magistrali PCI. Umożliwiają one wykorzystanie sześdziesięcioczterobitowej transmisji danych, dostęp do pamięci podręcznej, testowanie magistrali i zgłaszanie przerwań sprzętowych przez urządzenia podłączone do magistrali. Na kolejnych stronach omówione zostało znaczenie sygnałów magistrali PCI. AD[31-00] -(Addres Data Bits) - sygnały te mają różne znaczenie, zależnie od fazy transmisji. W fazie adresowej (w pierwszym cyklu zegara po przyznaniu inicjatorowi kontroli nad magistralą - równocześnie z wystawieniem sygnału -FRAME) wystawiony jest na nich adres urządzenia docelowego. W fazie przekazywania danych służą do przekazywania danych - o sposobie przekazywania danych decydują sygnały C/~BE[3-0]. C/~BE[3-0] -(Command/Byte Enable) - sygnały te mają różne znaczenie, zależnie od fazy transmisji: w fazie adresowej przekazują komendę PCI określającą typ transmisji (Command).C/~BE3; C/~BE2; C/~EE2; C/~BE; Komenda;0; 0; 0; 0; Interrupt Acknoweledge; 0; 0; 0; 1; Special Cycle; 0; 0; 1; 0; 1/0 Read; 0; 0; 1; 1; I/O Write; 0; 1; 0; 0; zarezerwowane; 0; 1; 0; 1; zarezerwowane; 0; 1; 1; 0; Memory Read; 0; 1; 1; 1; Memory Write; 1; 0; 0; 0; zarezerwowane; 1; 0; 0; 1; zarezerwowane; 1; 0; 1; 0; Configuration Read; 1; 0; 1; 1; Configuration Write; 1; 1; 0; 0; Memory Read Multiple; 1; 1; 0; 1; Dual-Address Cycle; 1; 1; 1; 0; Memory Read Linę; 1; 1; 1; 1; Memory Write and Invalidate; W fazie przekazywania danych zawierają informację o tym, które linie danych są wykorzystywane do transmisji danych (Byte Enable). Ustawienie wartości O oznacza, że liniami danych kontrolowanymi przez sygnał C/-BE będzie transmitowany bajt danych, l oznacza, że dane na określonych liniach nie mają znaczenia.Byte Enable; Kontrolowane linie danych; C/~BE3; AD[3 1-24] - czwarty bajt podwójnego słowa; C/-BE2; AD[23-16] - trzeci bajt podwójnego słowa; C/-BE1; AD[1 5-08] - drugi bajt podwójnego słowa; C/-BEO; AD[00-07] - pierwszy bajt podwójnego słowa; PAR = (Parity Signal) - sygnał kontroli parzystości linii AD[31-00] i C/~BE[3-0]. Sygnał ten jest wystawiany przez inicjator po zakończeniu fazy adresowej. Urządzenie docelowe, którego adres został wystawiony na magistrali, oblicza wartość sygnału kontroli parzystości odebranego adresu i porównuje go z sygnałem wystawionym na magistrali. Różne wartości oznaczają błąd parzystości adresu. Urządzenie docelowe, które wykryło błąd parzystości w fazie adresowej, musi ustawić bit 15 w swoim rejestrze stanu. Dalsza akcja zależy od stanu bitu 8 w rejestrze komend. Jeżeli bit jest ustawiony, to urządzenie wystawia sygnał ~SERR, co w konsekwencji prowadzi do wywołania przerwania NMI i zatrzymania systemu. Jeżeli bit ten jest wyzerowany, urządzenie docelowe może wystawić sygnał ~DEVSEL i przeprowadzić transmisję, wystawić sygnał ~DEVSEL, lecz nie wystawiać sygnału ~TRDY, co w konsekwencji doprowadzi do zaniechania transmisji przez inicjator lub wystawić sygnał -STOP, co spowoduje zaniechanie transmisji. W fazie przekazywania danych sygnał parzystości wystawiany jest przez urządzenie transmitujące dane w cyklu następującym po zakończeniu transmisji danej. Urządzenie odbierające dane oblicza wartość tego sygnału na podstawie odczytanych danych i porównuje go z sygnałem wystawionym na magistrali. Różne wartości oznaczają błąd parzystości danych. Urządzenie, które wykryło błąd parzystości, musi ustawić bit 15 w swoim rejestrze stanu. Jeżeli błąd parzystości wystąpił podczas zapisu danych, dalsza akcja zależy od stanu bitu 6 w rejestrze komend urządzenia docelowego. Jeżeli bit jest ustawiony, to urządzenie wystawia sygnał ~PERR, informujący inicjator o wystąpieniu błędu parzystości. Jeżeli bit ma wartość zero, transmisja przebiega dalej, gdyż urządzenie docelowe nie jest w stanie poinformować inicjatora o wystąpieniu błędu. Inicjator ma obowiązek ustawić bit 8 w swoim rejestrze stanu po wykryciu sygnału ~PERR. Jeżeli błąd parzystości wystąpił podczas odczytu danych, dalsza akcja zależy od stanu bitu 6 w rejestrze komend inicjatora . Jeżeli bit jest ustawiony, to inicjator wystawia sygnał ~PERR, co w konsekwencji prowadzi do ustawienia bitu 8 w rejestrze stanu inicjatora. Zatem jeżeli kontrola parzystości danych jest włączona (ustawiony jest bit 15 w rejestrze stanu), to wystąpienie błędu parzystości powoduje ustawienie bitu 8 w rejestrze stanu inicjatora. Reakcja na wykryty błąd zależy od programowania. ~FRAME - (Cycle Frame) - sygnał ten wystawiany jest przez inicjator, któremu układ arbitrażu przyznał kontrolę nad magistralą i oznacza przejęcie nad nią kontroli. Przed wystawieniem sygnału -FRAME inicjator musi sprawdzić, czy sygnały -FRAME i -DEYSEL są ustawione. Jeżeli są ustawione, to znaczy, że dokonywana jest transmisja kontrolowana przez inny inicjator, w przeciwnym przypadku kontroler może wystawić sygnał -FRAME i przejąć kontrolę nad magistralą. Inicjator kończy wystawianie sygnału ~FRAME, gdy jest gotowy do transmisji ostatniej danej. ~TRDY - (Target Ready) - sygnał ten wystawiany jest przez urządzenie docelowe, gdy jest ono gotowe do transmisji danych i wycofywany po zakończeniu transmisji (równocześnie z wycofaniem sygnału -DEYSEL). Wycofanie tego sygnału w trakcie przekazywania danych wprowadza cykl oczekiwania (ang. wait state)\ ~IRDY - (Initiator Ready) - sygnał ten wystawiany jest przez inicjator, gdy jest on gotowy do transmisji danych i wycofywany po zakończeniu transmisji (równocześnie z wycofaniem sygnału -DEYSEL). Wycofanie tego sygnału w trakcie przekazywania danych wprowadza cykl oczekiwania (ang. wait state). ~STOP - (Stop) - sygnał ten wystawiany jest przez urządzenie docelowe, gdy z jakichś powodów chce ono natychmiast zakończyć transmisję danych. Po wykryciu sygnału -STOP inicjator kończy transmisję. Dalsze zachowanie inicjatora zależy od stanu linii -TRDY i -DEYSEL w chwili ustawienia sygnału -STOP. Sygnał -STOP jest wycofywany po wycofaniu sygnału -FRAME przez inicjator. ~STOP - 1; ~DEVSEL - 1; ~TRDY - 1; Przyczyna - Urządzenie docelowe jest zajęte (nie jest w stanie dokończyć wymiany bieżącej danej w ciągu 8 cykli zegara magistrali PCI). W trybie burst urządzenie docelowe nie jest w stanie rozpoznać adresu (sekwencja sygnałów AD[ 1-0] niezrozumiała dla urządzenia docelowego - zgodna z późniejszą wersją specyfikacji). Kolejna dana wykroczy poza przestrzeń adresową urządzenia docelowego. W trybie burst dane wykroczą poza rozmiar jednej linii pamięci podręcznej.; Reakcja inicjatora - Jeżeli inicjator potrzebuje kolejne dane. to transmisja począwszy od następnej danej może zostać ponownie zaaranżowana ~STOP - 1; ~DEVSEL - 1; ~TRDY - 0; Przyczyna - W trybie burst urządzenie docelowe nie jest w stanie rozpoznać adresu (sekwencja sygnałów AD[1-0] niezrozumiała dla urządzenia docelowego). Urządzenie docelowe jest zajęte (nie jest w stanie dokonać wymiany pierwszej danej w ciągu 16 cykli zegara magistrali PCI). Urządzenie docelowe jest cache'owane i układ kontroli pamięci podręcznej wykrył, że modyfikowany obszar pamięci jest oznaczony jako zmodyfikowany i wymaga aktualizacji. Reakcja inicjatora - Transmisja zostanie powtórzona ~STOP - 1; ~DEVSEL - 1; ~TRDY - 1; Przyczyna - Wystąpienie błędu krytycznego. Uszkodzenie urządzenia docelowego. Błąd parzystości w fazie adresowej. Błąd w adresie wejścia-wyiścia Reakcja inicjatora - Generuje przerwanie umożliwiające sterownikom sprawdzenie rejestru stanu inicjatora. Jeżeli bit 8 w rejestrze komend jest ustawiony, inicjator wystawia sygnał -SERR, co w konsekwencji prowadzi do wywołania przerwania NMI i zatrzymania systemu. ~DEVSEL - (Device Selecf) - sygnał ten wystawiany jest przez urządzenie docelowe, które rozpoznało swój adres w fazie adresowej. Wystawienie sygnału ~DEVSEL oznacza nawiązanie połączenia pomiędzy inicjatorem i urządzeniem docelowym. Sygnał jest wycofywany po zakończeniu transmisji ostatniej danej lub po wystawieniu sygnału ~STOP. Urządzenie docelowe musi wystawić sygnał ~DEVSEL najpóźniej po dwóch cyklach oczekiwania od zakończenia fazy adresowej (układy sprzęgające dwie magistrale PCI po trzech cyklach oczekiwania). Maksymalna liczba cykli oczekiwania, po której urządzenie docelowe może wystawić sygnał ~DEVSEL, jest przechowywana w bitach 9 i 10 rejestru stanu. IDSEL - (Initialization Device Selecf) - sygnał używany podczas konfigurowania magistrali PCI. (Requesf) - sygnał wystawiany przez inicjator żądający dostępu do magistrali. (Grańf) - sygnał wystawiany przez układ arbitrażowy, przydzielający kontrolę nad magistralą konkretnemu inicjatorowi. CLK - (PCI Clock Signaf) - sygnał zegara taktującego magistralę PCI (0-33 MHz). ~RST- (Reset Signal) - wystawienie tego sygnału powoduje inicjalizację wszystkich urządzeń podłączonych do magistrali PCI. -PERR - (Parrity Errof) - sygnał informujący inicjator o wystąpieniu błędu parzystości danych. Wystawienie sygnału -PERR powoduje ustawienie bitu 8 w rejestrze stanu inicjatora. Wystawianie sygnału -PERR może być zablokowane przez ustawienie bitu 8 w rejestrze komend urządzenia odczytującego dane. Specyfikacja PCI nie definiuje reakcji inicjatora na wykrycie błędu parzystości danych. -SERR - (System Error) - sygnał oznacza wystąpienie krytycznego błędu innego niż błąd parzystości danych. Ustawienie tego sygnału wywołuje niemaskowalne przerwanie (NMI) i w rezultacie powoduje restart systemu. Urządzenie, które wystawia sygnał -SERR musi również ustawić bit 14 w swoim rejestrze stanu. Wystawienie sygnału -SERR może być zablokowane przez wyzerowanie bitu 8 w rejestrze komend urządzeń PCI. AD[63-32] - (Data Bus) - sygnały te, będące odpowiednikami sygnałów AD[31-00], są wykorzystywane w 64-bitowej magistrali PCI. W fazie przekazywania danych umożliwiają przekazanie czterech górnych bajtów 64-bitowej danej. O sposobie przekazywania danych decyduj ą sygnały C/~BE[7-4]. Jeżeli 64-bitowy inicjator próbuje zapisać dane do 32-bitowego urządzenia docelowego, to sygnały AD[63-32] wystawione dla pierwszej danej są automatycznie przenoszone do linii AD[31-00] jako druga dana. C/~BE[7-4] - (Byte Enable) - sygnały te są wykorzystywane w 64-bitowej magistrali PCI. W fazie przekazywania danych zawierają informację o tym, które linie danych są wykorzystywane do transmisji danych (Byte Enable). Ustawienie wartości O oznacza, że liniami danych kontrolowanymi przez sygnał C/-BE będzie transmitowany bajt danych, l oznacza, że dane na określonych liniach nie mają znaczenia. Byte Enable; Kontrolowane linie danych; C/-BE7; AD[63-56] - czwarty bajt drugiego podwójnego słowa; C/-BE6; AD[55-48] - trzeci bajt drugiego podwójnego słowa; C/-BE5; AD[47-40] - drugi bajt drugiego podwójnego słowa; C/-BE4; AD[39-32] - pierwszy bajt drugiego podwójnego słowa; Jeżeli 64-bitowy inicjator próbuje zapisać dane do 32-bitowego urządzenia docelowego, to sygnały C/~BE[7-4] wystawione dla pierwszej danej są automatycznie przenoszone do linii C/~BE[3-0], kontrolujących przekazywanie drugiej danej. PAR64 - (Parity Signalfor the upper doubleword) - sygnał kontroli parzystości linii AD[63-32] i C/~BE[7-^]. Sygnał ten jest odpowiednikiem sygnału kontroli parzystości linii AD[31-00] i C/~BE[3-0] (PAR). ~REQ64 - (Recjuest 64-bit Transfer) - sygnał informujący urządzenie docelowe o próbie przeprowadzenia 64-bitowego transferu danych. Sygnał ten jest odpowiednikiem sygnału -FRAME (ma takie same przebiegi czasowe). -ACK64 - (Acknoweledge 64-bit Transfer) - sygnał wystawiany przez urządzenie docelowe, wyrażający zgodę na przeprowadzenie 64-bitowej transmisji. Sygnał ten jest odpowiednikiem sygnału ~DEVSEL (ma takie same przebiegi czasowe). Urządzenia 32 bitowe nie wystawiają sygnału -ACK64. 64-bitowe inicjatory, które mają do przeprowadzenia transmisję jednej danej, muszą po fazie adresowej wprowadzić dodatkowe cykle oczekiwania (utrzymując sygnał -FRAME na wysokim, a sygnał -IRDY na niskim poziomie), w czasie których monitorują sygnały -DEYSEL i -ACK64 . Wystawienie obydwu sygnałów oznacza transmisję jednej 64-bitowej danej (przed rozpoczęciem transmisji danej inicjator musi wycofać sygnał -FRAME). Wystawienie tylko sygnału -DEYSEL oznacza transmisje dwóch 32-bitowych danych (sygnał -FRAME musi zostać wycofany po zakończeniu transmisji pierwszej danej. -LOCK - (Lock) - sygnał ten umożliwia inicjatorowi zablokowanie dostępu innym inicjatorom do określonego urządzenia docelowego. Inicjator blokuje urządzenie docelowe ustawiając sygnał -LOCK i kończąc transmisję. Zablokowane urządzenie nie jest w stanie nawiązać połączenia z jakimkolwiek inicjatorem, tak długo, jak długo sygnał -LOCK jest ustawiony - żaden inny inicjator nie jest w stanie zmienić stanu tego sygnału. Gdy inicjator blokujący dostęp do urządzenia docelowego próbuje nawiązać z nim ponownie łączność, usuwa sygnał -LOCK po przejęciu kontroli nad magistralą. Mechanizm blokowania wykorzystywany jest przez inicjatory, w przypadku, gdy urządzenie docelowe jest cache'owane i układ kontroli pamięci podręcznej wykrył, że modyfikowany obszar pamięci jest oznaczony jako zmodyfikowany i wymaga aktualizacji. ~CLKRUN - (Clock Run) - sygnał określa, czy magistrala taktowana jest ze standardową czy obniżoną częstotliwością. Sygnał ten jest wykorzystywany w systemach, w których zaimplementowany jest subsystem oszczędzania energii; ~SBO - (Snoop Back OfJ) -jest jednym z dwóch sygnałów zabezpieczających inicjator przed zapisem lub odczytem danych z/do cache'owanego, niezaktualizowanego obszaru pamięci. Sygnał ustawiony oznacza, że dane są zaktualizowane. Niski poziom sygnału oznacza, że dane wymagają aktualizacji. Sygnał ~SBO musi być zaimplementowany w systemach wykorzystujących pamięć podręczną typu write-back. W systemach opartych o pamięć podręczną write-through sygnał ~SBO ma zawsze wartość l. Sygnał ~SBO jest ustawiany przez sterownik magistrali PCI. SDONE - (Snoop Done) -jest jednym z dwóch sygnałów zabezpieczających inicjator przed zapisem lub odczytem danych z/do cache'owanego, niezaktualizowanego obszaru pamięci. Sygnał ustawiony oznacza, że sterownik magistrali sprawdził, czy dane są zaktualizowane (wynik sprawdzenia ustawiony jest na linii ~SBO). Niski poziom sygnału oznacza, że sterownik magistrali jest w trakcie sprawdzania cache'owanych obszarów pamięci. SDONE; ~SBO; Opis; Reakcja urządzenia docelowego; Reakcja inicjatora; 0; x; sterownik magistrali jest w trakcie sprawdzania cache'owanych obszarów pamięci; wycofuje sygnał ~TRDY wprowadzając cykle oczekiwania; czeka; 1; 1; dane w pamięci są zaktualizowane ustawia sygnał ~TRDY; realizuje transmisje; 1; 0; dane w pamięci wymagają aktualizacji; przerywa połączenie ustawiający sygnał ~STOP; próbuje ponownie przeprowadzić transmisję; TDI - (Test Input)- sygnał testujący. TDO - (Test Output) - sygnał testujący. TCK - (Test Clock) - sygnał testujący TM S - (Test Modę Select) - sygnał testuj ący. ~TRST - (Test Resei) - sygnał testujący. ~INT[A-D] - (Intermpt Request) - kanały przerwań sprzętowych magistraliPCI. Magistrala zewnętrzna Sygnały magistrali PCI wyprowadzone są do gniazd, w których można umieszczać karty rozszerzające. Gniazda te odbiegają kształtem od gniazd magistral ISA i VESA Local Bus, co uniemożliwia umieszczenie karty PCI w niewłaściwym gnieździe (i vice versa). Na płytach głównych umieszcza się zwykle 4 gniazda magistrali PCI (standard dopuszcza 32 gniazda), przy czym na każdej karcie rozszerzającej może być umieszczone do 8 urządzeń PCI. Na ogół, oprócz 32-bitowych złącz PCI, umieszczane są na płycie dwa lub trzy gniazda 16-bitowej magistrali ISA. Umożliwia to wykorzystanie kart rozszerzających starszego typu. Gniazda magistrali PCI mogą mieć kilka wariantów (rysunek 1.56). Klucz uniemożliwiający włożenie niewłaściwego typu karty jest umieszczony w różnych miejscach - zależnie od poziomu napięcia zasilającego magistralę (3,3 V lub 5 V). Gniazdo 64-bitowej magistrali PCI wygląda jak gniazdo magistrali 32-bitowej, do którego dodano jedną sekcję. Do gniazd doprowadzone są wszystkie złącza magistrali PCI (podstawowe i dodatkowe). Ponadto dodane są dwa sygnały (-PRSNT1 i -PRSNT2) umożliwiające określenie maksymalnej mocy pobieranej przez karty rozszerzające - sygnały te nie są wykorzystywane przez urządzenia PCI umieszczone na płycie głównej. ~PRSNT1; ~PRSNT2; Znaczenie 1; 1; brak karty rozszerzającej; 0; 1; karta o maksymalnym poborze mocy do 25 W; 1; 0; karta o maksymalnym poborze mocy do 1 5 W; 0; 0; karta o maksymalnym poborze mocy do 7,5 W; Kontroler przerwań sprzętowych System PCI dysponuje tylko czterema kanałami przerwań sprzętowych (-INTA, -INTB, -INTC, -INTD) - każdy kanał może być dzielony przez kilka urządzeń. W przypadku zgłoszenia przerwania sprzętowego przez jedno lub kilka urządzeń dzielących ten sam kanał wykonywane są, zgodnie z założonym przez system priorytetem, procedury obsługi urządzeń podłączonych do tego kanału (niezależnie od tego, czy zgłaszają przerwanie, czy nie), tak długo, aż obsłużone zostaną wszystkie urządzenia zgłaszające przerwanie sprzętowe. W przypadku, gdy urządzenie podłączone do aktywnego kanału nie zgłasza przerwania, procedura obsługi sprowadza się do rozpoznania tego faktu i przejścia do obsługi następnego urządzenia. Za prawidłową obsługę przerwań sprzętowych odpowiedzialny jest programowalny router przerwań, który „przekłada" przerwania sprzętowe magistrali PCI na niewykorzystywane kanały IRQ magistrali ISA (rysunek 1.57). Pamięć konflguracyjna urządzeń PCI Urządzenia PCI wyposażone są w 256-bajtową pamięć konflguracyjna, w której przechowywane są informacje niezbędne do pracy urządzenia. Pamięć konflguracyjna podzielona jest na dwie części: • pierwsze 64 bajty stanowią nagłówek, którego struktura jest jednakowa dla wszystkich urządzeń PCI (za wyjątkiem układów sprzęgających dwie magistrale PCI); • pozostałe 192 bajty to rejestry specyficzne dla danego urządzenia. Na rysunku 1.58 przedstawiona jest struktura nagłówka pamięci konfiguracyjnej urządzenia PCI (struktura nagłówka układu sprzęgającego magistrale PCI nie zostanie omówiona, ponieważ w typowych komputerach klasy PC wykorzystywana jest tylko jedna magistrala PCI). Czarnym kolorem oznaczone są rejestry, które muszą być predefmio-wane. Na kolejnych stronach omówione zostało znaczenie poszczególnych rejestrów nagłówka pamięci konfiguracyjnej. Identyfikator producenta (Vendor ID) bit 15;bit 14;bit 13;bit12;bit 11;bit 10;bit 9;bit 8;bit7;bit6;bit 5;bit 4;bit 3;bit 2;bit l; bit 0; bity 15-0 - Identyfikator producenta, wartość bitów określana jest przez PCI SIG (PCI Special Interest Group) i jednoznacznie identyfikuje producenta urządzenia. Wartość FFFFh jest zastrzeżona, i jest zwracana przez sterownik magistrali PCI podczas próby odczytu identyfikatora producenta urządzenia, którego nie ma w systemie. Komunikacja procesora z innymi elementami architektury komputera 159 Identyfikator urządzenia (Device ID) bit 15; bit 14; bit 13; bit 12; bit 11; bit 10; bit 9;bit 8;bit 7;bit 6;bit 5, bit 4;bit 3;bit 2;bit 1;bit 0; bity 15-0 - Typ urządzenia, wartość bitów określana jest przez producenta. Rejestr komend (Command Register) X; X; X; X; X; X; bit 9; bit 8; bit 7; bit 6;bit 5;bit 4;bit 3;bit 2;bit 1;bit 0; bity 15-10 - Zarezerwowane. bit 9 - (Fast Back-to-Back Enable) - bit określający, czy inicjator może inicjować transakcje w trybie fast back-to-back (następujące kolejno po sobie transmisje, bez cyklu oczekiwania pomiędzy fazą przesyłania danych pierwszej transmisji i fazą adresową kolejnej). Jeżeli bit 7 w rejestrach stanu wszystkich urządzeń podłączonych do magistrali PCI jest ustawiony, oprogramowanie konfigurujące urządzenia podłączone do magistrali powinno ustawić ten bit. Bit zaimplementowany jest tylko w inicjatorach. bit 8 - (System Error Enable) - bit określający, czy urządzenie ma sygnalizować wystąpienie błędu krytycznego (wystawiać sygnał -SERR). Po inicjalizacji urządzenia bit powinien mieć wartość O (brak sygnalizacji błędu krytycznego). bit 7 - (Wait Cy cle Enable) -bit określający, czy urządzenie jest w stanie wystawić adres bądź dane w jednym cyklu zegara, czy też wymaga dodatkowych cykli oczekiwania przed wystawieniem adresu i danych (ang. stepping). Urządzenia, które zawsze wykorzystują stepping, muszą mieć ten bit zawsze ustawiony. W urządzeniach, które nie mogą pracować w tym trybie, bit ten powinien mieć zawsze wartość 0. W pozostałych urządzeniach bit powinna być ustawiany po inicjalizacji urządzenia. bit 6 - (Parity Error Response) - bit określający, czy urządzenie ma sygnalizować wystąpienie błędu parzystości (wystawiać sygnał -PERR). Po inicjalizacji urządzenia bit powinien mieć wartość O (brak sygnalizacji błędu parzystości). bit 5 - (VGA Palette Snoop enable) - bit umożliwiający jednoczesną zmianę palet w kilku kartach graficznych podłączonych do jednej magistrali. Ustawienie tego bitu powoduje, że karta graficzna podczas zmiany palety barw odczytuje dane z magistrali PCI, nie wystawiając żadnych sygnałów na magistralę. Zmiana palety barw w systemach z kilkoma kartami graficznymi jest potencjalnym źródłem konfliktów, gdyż wymaga, aby kilka urządzeń jednocześnie odczytywało dane z magistrali PCI. Dlatego na jednej karcie graficznej bit ten powinien mieć wartość O (ta karta komunikuje się z procesorem podczas zmiany palety barw), podczas gdy na pozostałych powinien mieć wartość l (te karty „śledzą" wymianę danych i odpowiednio modyfikują swoje palety barw). Inicjalizacja kart graficznych powoduje ustawienie tego bitu na kartach innych niż VGA i jego wyzerowanie na kartach zgodnych ze standardem VGA. bit 4 = (Memory Write and Invalidate Enable) - bit określający, czy inicjator może wykorzystywać komendę Write and Invalidate zamiast komendy Write podczas dostępu do cache'owanych obszarów pamięci. Bit ten nie może być ustawiony, dopóki nie jest ustawiony rejestr długości linii pamięci podręcznej. Po inicjalizacji wartość tego bitu jest zerowana. bit 3 - (Special Cycle Recognitiori) - bit określający, czy urządzenie ma monitorować cykl specjalny. Po inicjalizacji wartość tego bitu jest zerowana. bit 2 - (Master Enable) - bit określający, czy urządzenie może przejmować kontrolę nad magistralą (czy jest inicjatorem). Po inicjalizacji wartość tego bitu jest zerowana. bit l -(Memory Access Enable) - bit określający, czy urządzenie mające zaimplementowany dekoder adresów ma dostęp do przestrzeni adresowej magistrali PCI. Po inicjalizacji wartość tego bitu jest zerowana. bit 0 - (I/OAccess Enable) - bit określający, czy urządzenie mające zaimplementowany dekoder adresów wejścia-wyjścia ma dostęp do przestrzeni adresowej wejścia-wyjścia magistrali PCI. Po inicjalizacji wartość tego bitu jest zerowana. Rejestr stanu (Status Register) bit 15; bit 14; bit 13; bit 12; bit 11; bit 10; bit 9;bit 8;bit 7;bit 6;bit 5;0;0;0;0;0; bit 15 - (Detected Parity Error) - bit jest ustawiany, gdy urządzenie wykryło błąd parzystości (bit ten powinien być ustawiany niezależnie od tego, czy bit 6 w rejestrze komend jest ustawiony, czy nie). bit 14 - (Signaled System Error) - bit nie musi być zaimplementowany w urządzeniach, które nie mogą wystawiać sygnału ~SERR. Bit jest ustawiany, gdy urządzenie wystawiło sygnał ~SERR. bit 13(Received Master Abort) - bit zaimplementowany tylko w inicjatorach, jest ustawiany, gdy transmisja danych nie doszła do skutku w wyniku przekroczenia czasu przez urządzenie docelowe. bit 12(Received Target Abort) - bit zaimplementowany tylko w inicjatorach, jest ustawiany, gdy inicjator wykryje, że transakcja została przerwana przez urządzenie docelowe w wyniku błędu krytycznego (wystawiony sygnał ~STOP, brak sygnałów ~TRDY i ~DEYSEL). bit 11(Signaled Target Abort) - bit ustawiany przez urządzenie docelowe, które przerwało transmisję w wyniku błędu krytycznego (ustawiło sygnał~STOP i wycofało sygnały ~TRDY i ~DEVSEL). bity 10-9 (Device Select Timing) - bity tylko do odczytu, określają najdłuższy czas, po którym urządzenie wystawia sygnał ~DEVSEL: 00 - fast: w cyklu następującym po wystawieniu adresu przez inicjator, 01 -medium: jeden cykl zwłoki, 10 - słów: dwa cykle zwłoki, 11- zarezerwowane. bit 8 (Data Parity Reported) - bit zaimplementowany tylko w inicjatorach (w urządzeniach slave ma zawsze wartość 0), jest ustawiany, gdy ustawiony jest bit 6 w rejestrze komend i inicjator wykrył błąd parzystości i ustawił sygnał -PERR lub wykrył, że urządzenie docelowe wystawiło sygnał -PERR. bit 7(Fast Back-to-Back Capable) -bit jest ustawiany jeżeli urządzenie obsługuje transmisje w trybie fast back-to-back (następujące kolejno po sobie transmisje, bez cyklu oczekiwania pomiędzy fazą przesyłania danych pierwszej transmisji i fazą adresową kolejnej). bit 6(User Defined Features Supported) - bit jest ustawiany, jeżeli urządzenie wymaga zdefiniowania niektórych parametrów przez użytkownika (na przykład numer węzła na karcie sieciowej), wartości zdefiniowanych parametrów są przechowywane w plikach o rozszerzeniu .pcf. bit 5(66 MHz Capable) - bit jest ustawiany, gdy urządzenie może współpracować z magistralą taktowaną zegarem do 66 MHz, wartość O oznacza, że urządzenie może współpracować z magistralą taktowaną zegarem do 33 MHz. bity 4-0 Zarezerwowane, muszą mieć wartość 0. Numer wersji urządzenia (Revision ID) bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-0 Numer wersji urządzenia określony przez producenta. Kod klasy urządzenia (Class Code) bit 23; bit 22; bit 21; bit 20; bit 19; bit 18; bit 17;bit 16;bit 15;bit 14;bit 13;bit 12;bit 11;bit 10;bit 9;bit 8;bit 7;bit 6bit 5;bit 4bit 3;bit 2; bit 1; bit 0; bity 23-16 - Kod klasy urządzenia, bity 15-8 - Kod podklasy urządzenia, bity 7-0 - Kod interfejsu. Kod klasy urządzenia umożliwia jednoznaczne określenie przeznaczenia i właściwości urządzenia. Tabela 1.32. przedstawia klasyfikację urządzeń PCI. Tabela 1.32. Klasyfikacja urządzeń PCI Klasa; Podklasa; Interfejs; Opis; 00h; urządzenia wyprodukowane przed wprowadzeniem specyfikacji PCI 2.0 s 00h; 00h; 00h; urządzenia inne niż karta graficzna VGA 00h; 0lh; 0lh; karta graficzna VGA 0lh; kontrolery pamięci masowych 0lh; 00h; 00h; kontroler SCSI 0lh; 0lh; 00h; kontroler napędu dysków elastycznych 0lh; 03h; 00h; kontroler IPI 0lh; 04h; 00h; kontroler RAID 0lh; 80h; 00h; kontroler innej pamięci masowej 02h; karty sieciowe 02h; 00h; 00h; kontroler Ethernet 02h; 0lh; 00h; kontroler Token Ring 02h; 02h; 00h; kontroler FDDI 02h; 03h; 00h; kontroler ATM 02h; 80h; 00h; inna karta sieciowa 03h; karty graficzne 03h; 00h; 00h; karta graficzna zgodna z VGA: adresy portów wejścia-wyjścia: 03BOh - 03BBh pamięci karty graficznej AOOOOh - BOOOOh 03h; 00h; 0lh; karta graficzna zgodna z 8514, adresy portów wejści-wyjścia: 02E8h, 02EAh, 02Efh 03h; 0lh; 00h; karta graficzna XGA 03h; 80h; 00h; inna karta graficzna 04h; urządzenia multimedialne 04h; 00h; 00h; urządzenie video 04h; 0lh; 00h; urządzenie audio 04h; kontrolery pamięci 05h; 00h; 00h; kontroler pamięci RAM 05h; 0lh; 00h; kontroler pamięci Flash 05h; układy sprzęgające magistrale 06h; 00h; 00h; Host/PCI 06h; 0lh; 00h; PCI/ISA 06h; 02h; 00h; PCI/EISA 06h; 03h; 00h; PCI/MCA 06h; 04h; 00h; PCI/PCI 06h; 05h; 00h; PCI/PCMCIA 06h; 06h; 00h; NuBus 06h; 07h; 00h; CardBus 06h; 80h; 00h; inny układ sprzęgający 07h; kontrolery portów komunikacyjnych 07h; 00h; 00h; kontroler portu szeregowego 8250 07h; 00h; 0lh; kontroler portu szeregowego 16450 07h; 00h; 02h; kontroler portu szeregowego 16550 07h; 0lh; 00h; kontroler portu równoległego 07h; 0lh; 0lh; kontroler dwukierunkowego portu równoległego 07h; kontrolery portów komunikacyjnych 07h; 0lh; 02h kontroler portu równoległego ECP 07h; 80h; 00h inne urządzenie komunikacyjne 08h; kontrolery urządzeń peryferyjnych 08h; 00h; 00h; 8259 programowany kontroler przerwań 08h; 00h; 0lh; ISA programowany kontroler przerwań 08h; 00h; 02h; EISA programowany kontroler przerwań 08h; 0lh; 00h; 8237 kontroler DMA 08h; 0lh; 0lh; ISA kontroler DMA 08h; 0lh; 02h; EISA kontroler DMA 08h; 02h; 00h; 8254 układ odmierzania czasu 08h; 02h; 0lh; ISA układ odmierzania czasu 08h; 02h; 02h; EISA układ odmierzania czasu 08h; 03h; 00h; kontroler RTC 08h; 03h; 0lh; kontroler ISA RTC 08h; 80h; 00h; inne urządzenie peryferyjne 09h; kontrolery urządzeń wejścia-wyjścia 09h; 00h; 00h; kontroler klawiatury 09h; 01h; 00h; kontroler digitizera 09h; 02h; 00h; kontroler myszy 09h; 80h; 00h; kontrolery innych urządzeń wejścia-wyjścia 0Ah; docking stations 0Ah; 00h; 00h; standardowa docking station 0Ah; 80h; 00h; inny typ docking station 0Bh; procesory 0Bh; 00h; 00; 386 0Bh; 0lh; 00h; 486 0Bh; 02h; 00h; Pentium 0Bh; 03h; 00h; Pentium Pro 0Bh; l0h; 00h; Alpha 0Bh; 40h; 00h; koprocesor 0Ch; kontrolery szeregowych interfejsów cyfrowych 0Ch; 00h; 00h; Firewire (IEEE 1394) 0Ch; 0lh; 00h; ACCESS.bus 0Ch; 02h; 00h; SSA 0Dh - FEh; zarezerwowane FFh; urządzenia, które nie należą do żadnej z powyższych kategorii Tabela 1.33. Kody interfejsu kontrolera IDE Bit; Wartość; Opis 7-4; 0; zarezerwowane (0) 3; 1; drugi (secondary) kontroler dysków może pracować w dwóch trybach 0; drugi (secondary) kontroler dysków może pracować tylko w trybie określonym przez bit 2 2; 1; tryb pracy drugiego (secondary) kontrolera dysków zgodny z PCI (rejestr danych: przesunięcie 0x1 8h, rejestr stanu: przesunięcie 0x1 Ch) 0; tryb pracy drugiego (secondary) kontrolera dysków zgodny z ISA (rejestr danych 170h, rejestr stanu 376h, IRQ 15) 1; 1; pierwszy (primary) kontroler dysków może pracować w dwóch trybach 0; pierwszy (primary) kontroler dysków może pracować tylko w trybie określonym przez bit 0 0; 1; tryb pracy pierwszego (primary} kontrolera dysków zgodny z PCI (rejestr danych: przesunięcie OxlOh, rejestr stanu: przesunięcie Oxl4h) 0; tryb pracy pierwszego (primary) kontrolera dysków zgodny z ISA (rejestr danych IFOh, rejestr stanu 3F6h, IRQ 14) Rozmiar linii pamięci podręcznej (Cache Linę Size) bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1bit 0; bity 7-0 - Rozmiar linii pamięci cache wyrażony w podwójnych słowach. Urządzenie korzystające z cache'owanego obszaru pamięci powinno mieć ten rejestr zaimplementowany. Rejestr ten jest wykorzystywany do rozpoznawania, czy w trybie burst dane wykroczyły poza linię pamięci podręcznej. Minimalny czas transmisji (Latency Timer) bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1;bit 0; bity 7-0 - Minimalny czas trwania transmisji wyrażony w cyklach zegara magistrali PCI. Minimalny czas transmisji określa minimalny czas, na który inicjator ma prawo przejąć kontrolę nad magistralą. Po przejęciu kontroli nad magistralą zawartość tego rejestru jest dekrementowana po każdym cyklu zegara. Rejestr ten zabezpiecza inicjator przed odebraniem mu kontroli nad magistralą przed upływem minimalnego czasu potrzebnego na przeprowadzenie transmisji danych. Gdy układ arbitrażowy odbierze inicjatorowi prawo do kontrolowania magistrali, inicjator może kontynuować transmisję dopóki rejestr ten nie jest wyzerowany. Rejestr ten jest zaimplementowany tylko w inicjatorach i powinien być programowalny. Typ nagłówka (Header Type) bit 7; 0; 0; 0; 0; 0; 0; 0; bit 7 - Minimalny czas trwania transmisji wyrażony w cyklach zegara magistrali PCI. bity 6-0 - Typ nagłówka - powinny być wy zerowane. Na razie zdefiniowane są dwa typy nagłówków: • 0000000 określający dowolne urządzenie nie będące układem sprzęgającym dwie magistrale PCI; • 0000001 określający układ sprzęgający dwie magistrale PCI. Zależnie od typu nagłówka podwójne słowa 4 - 15 w nagłówku pamięci konfiguracyjnej mają różne znaczenie. BIST (Build-in Self-test) bit 7; bit 6; x; x; bit 3; bit 2; bit 1; bit 0; bit 7 - (BIST Capable) - bit jest ustawiony, gdy urządzenie ma zaimplementowane procedury testujące. bit 6 - (Start BIST) - ustawienie tego bitu powoduje rozpoczęcie procedury testującej. Po zakończeniu procedury bit jest zerowany. bity 5-4 - Zarezerwowane. bity 3-0 -(Completion Code) - pozytywne zakończenie procedury testującej powoduje wyzerowanie tych bitów. W przeciwnym przypadku zawierają numer błędu specyficzny dla danego urządzenia. Rejestr jest zaimplementowany w urządzeniach PCI, wyposażonych w procedury samotestujące. Adres bazowy (Base Address) Rejestry adresów bazowych służą do określenia obszarów pamięci operacyjnej lub przestrzeni wejść i a-wyjść i a, wykorzystywanych przez to urządzenie. Przydzielenie urządzeniu pamięci operacyjnej lub przestrzeni wejść i a-wyjść i a składa się z dwóch etapów. W pierwszym określany jest rozmiar bloku pamięci, w drugim przydzielany jest urządzeniu adres bazowy. Określenie rozmiaru bloku pamięci jest bardzo proste. Należy wpisać do rejestru adresu bazowego wartość FFFFFFFFh, a następnie odczytać i zdekodować jego zawartość. Przydzielenie adresu sprowadza się do wpisania adresu do rejestru adresu bazowego. Struktura danych odczytanych z rejestru adresu bazowego podczas określania rozmiaru bloku pamięci zależy od tego, czy adres powinien być umieszczony w pamięci operacyjnej, czy w przestrzeni wejścia-wyjścia. Zawartość rejestru adresu bazowego zawierającego adres pamięci operacyjnej ma następującą strukturę: bit31;bit30;bit29;bit28;bit27;bit26;bit25;bit24;bit23;bit22;bit21;bit20;bit19;bit18; bit17;bit16; bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8;bit7;bit6;bit5;bit4;bit3;bit2;bit1;0 bity 31-4 - Rozmiar bloku pamięci operacyjnej (jeżeli adres może być umieszczony w 64-bitowej przestrzeni adresowej, rozmiar bloku kodowany jest w bitach 63-4 - wykorzystywane są dwa kolejne rejestry); bit 3 -l - blok pamięci nie może być cache'owany, 0 - blok pamięci może być cache'owany. bity 2-1 - 11 - zarezerwowane, 10 - adres umieszczony jest w 64-bitowej przestrzeni adresowej, 01 - adres umieszczony jest poniżej l MB, 00 - adres umieszczony jest w 32-bitowej przestrzeni adresowej. bit 0 -l - adres umieszczony jest w przestrzeni wejścia-wyjścia, 0 - adres umieszczony jest w pamięci operacyjnej. Zawartość rejestru adresu bazowego zawierającego adres pamięci operacyjnej ma następującą strukturę: bit31;bit30;bit29;bit28;bit27;bit26;bit25;bit24;bit23;bit22;bit21;bit20;bit19;bit18; bit17;bit16; bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8;bit7;bit6;bit5;bit4;bit3;bit2;bit1;1 bity 31-2 - Rozmiar bloku przestrzeni wejścia-wyjścia. bit lZarezerwowany. bit 0 -l - adres umieszczony jest w przestrzeni wejścia-wyjścia, 0 - adres umieszczony jest w pamięci operacyjnej. Rozmiar bloku pamięci określany jest przez pierwszy ustawiony bit w obszarze bloku pamięci (na przykład ustawiony bit 8 oznacza blok 256-bajtowy). Najmniejszy możliwy do określenia blok pamięci wynosi 4 bajty w przestrzeni wejścia-wyjścia i 16 bajtów w pamięci operacyjnej. Na przykład wartość FFFFFF0h odczytana z rejestru adresu bazowego oznacza 256-bajtowy blok umieszczony w przestrzeni wejścia wyjścia. Z kolei wartość FFF00000h oznacza blok o rozmiarze l MB umieszczony w 32-bitowej przestrzeni adresowej. Wskaźnik CardBus CIS (CardBus CIS Pointer) 0 ; bit30; bit29; bit28; bit27; bit26; bit25; bit24;bit23;bit22;bit21;bit20;bit19;bit18; bit17;bit16; bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8;bit7;bit6;bit5;bit4;bit3;bit2;bit1;0 bit 31 - Zarezerwowany, bit ma wartość 0. bity 30-28 Definiują obszar pamięci, w którym umieszczony jest obszar informacji o karcie (CIS): 111 - rozszerzenie pamięci ROM urządzenia, 110 - obszar pamięci wskazywany przez rejestr adresu bazowego 5, 101 - obszar pamięci wskazywany przez rejestr adresu bazowego 4, 100 - obszar pamięci wskazywany przez rejestr adresu bazowego 3, 011 - obszar pamięci wskazywany przez rejestr adresu bazowego 2, 010 - obszar pamięci wskazywany przez rejestr adresu bazowego l, 001 - obszar pamięci wskazywany przez rejestr adresu bazowego 0, 000 - pamięć konfiguracyjna karty PCMCIA lub CardBus. bity 27-0 - Przesunięcie (ang. offset) obszaru informacji o karcie względem początku obszaru pamięci zdefiniowanej przez bity 30 - 28. Rejestr ten jest zaimplementowany w sterownikach złącza PCMCIA obsługujących 16-bitowe karty PCMCIA zgodne ze specyfikacją 2.x lub 32-bitowe karty CardBus zgodne ze specyfikacją CardBus 95. W rejestrze tym przechowywany jest wskaźnik do obszaru informacji o karcie (CIS - Car d Information Structure), zawierającego informacje o funkcjach karty i sposobie jej konfiguracji. Dodatkowy identyfikator producenta (Subsystem Vendor ID) i dodatkowy identyfikator urządzenia (Subsystem ID) bit 7;bit 6;bit 5;bit 4;bit 3;bit 2;bit 1;bit 0 bity 7-0 - Dodatkowy identyfikator producenta określany przez PCI SIG. bit 7;bit 6;bit 5;bit 4;bit 3;bit 2;bit 1;bit 0; bity 7-0 - Dodatkowy identyfikator urządzenia określony przez producenta. Te dwa rejestry mają za zadanie umożliwienie rozróżnienia tych samych urządzeń PCI (mających taki sam identyfikator producenta, identyfikator urządzenia i kod klasy urządzenia) umieszczonych na płycie głównej i różnych kartach rozszerzających. Oprogramowanie konfigurujące system wykorzystuje te rejestry do jednoznacznej identyfikacji urządzeń. Adres bazowy rozszerzenia ROM (Expansion ROM Base Address) Rejestr adresu bazowego rozszerzenia pamięci ROM jest zaimplementowany w urządzeniach wyposażonych we własną pamięć ROM i służy do określenia adresu bazowego tej pamięci. Przydzielenie adresu składa się z dwóch etapów. W pierwszym określany jest rozmiar bloku pamięci ROM, w drugim przydzielany jest adres bazowy. Aby określić rozmiar pamięci ROM, należy wpisać do rejestru adresu bazowego pamięci ROM wartość FFFFFFFEh, a następnie odczytać i zdekodować jego zawartość. Przydzielenie adresu sprowadza się do wpisania adresu do rejestru adresu bazowego pamięci ROM. Zawartość rejestru adresu bazowego pamięci ROM ma następującą strukturę: bit 31;bit 30;bit 29;bit 28;bit 27;bit 26;bit 25;bit 24;bit 23;bit 22;bit 21;bit 20;bit 19;bit 18;bit 17;bit 16; bit 15;bit 14;bit 13;bit 12;bit 11;0;0;0;0;0;0;0;0;0;0;bit 0; bity 31-11 - Rozmiar rozszerzenia pamięci ROM. bity 10-1 - Zarezerwowane, mają wartość 0. bit 0 -l - dekoder adresów pamięci ROM jest włączony, 0 - dekoder adresów pamięci ROM jest wyłączony. Rozmiar pamięci ROM określany jest przez pierwszy ustawiony bit w obszarze rozmiaru rozszerzenia pamięci ROM (na przykład ustawiony bit 14 oznacza 16 kB pamięci ROM). Najmniejszy rozmiar rozszerzenia pamięci ROM wynosi 2 kB. Linia IRQ (Interrupt Linę) bity 7 - 0 bit 7, bit 6; bit 5; bit 4; bit 3; bit 2; bit 1;bit 0; Numer linii IRQ przyporządkowanej urządzeniu przez programowany router przerwań sprzętowych. Wartości 0-15 odpowiadają numerom linii 1RQ, wartości 16 - 254 są zarezerwowane, wartość 255 oznacza, że urządzeniu nie została przyporządkowana linia IRQ. Linia INT (Interrupt Pin) bity 7-0 bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1;bit 0; Numer kanału INT przyporządkowany urządzeniu przez producenta (rejestr tylko do odczytu). Wartość O oznacza, że urządzenie nie ma przyporządkowanego kanału przerwań sprzętowych. Wartości l - 4 odpowiadają kanałom ~INTA -~INTD. Wartości 5 - 255 są zarezerwowane. Długość transmisji (Min_Gnt) bity 7-0 bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; Średni okres, na jaki urządzenie przejmuje kontrolę nad magistralą - czas wyrażony jest jako wielokrotność 250 ns. Rejestr tylko do odczytu zaimplementowany w inicjatorach. Częstość (Max_Lat) bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1;bit 0; bity 7-0 - Średni odstęp pomiędzy kolejnymi żądaniami dostępu do magistrali - czas wyrażony jest jako wielokrotność 250 ns. Wartość O oznacza, że urządzenie nie ma konkretnych wymagań. Rejestr tylko do odczytu zaimplementowany w inicjatorach. Rejestry długości i częstotliwości transmisji pełnią rolę informacyjną. Określają jak często i na jak długo powinno urządzenie przejmować kontrolę nad magistralą. Wartości zapisane w tych rejestrach mają wartości orientacyjne, które mogą być wykorzystywane przez układ arbitrażowy podczas określania priorytetu dostępu do magistrali. Mechanizmy dostępu do pamięci konfiguracyjnej Procesory serii x86 mogą adresować dwa obszary pamięci: pamięć operacyjną i przestrzeń wejścia-wyjścia, natomiast magistrala PCI wykorzystuje trzy obszary pamięci: pamięć operacyjną, przestrzeń wejścia-wyjścia i pamięć konfiguracyjną. Pamięć konfiguracyjną nie została umieszczona w przestrzeni wejścia-wyjścia ze względu na swoje rozmiary - 256 bajtów dla urządzenia może dać do 64 kB pamięci konfiguracyjnej. W przestrzeni wejścia-wyjścia oprócz portów magistrali PCI muszą się zmieścić porty wykorzystywane przez wcześniejsze rozwiązania (ISA, EISA). Aby zachować zgodność z wcześniejszymi systemami i umożliwić implementację magistral ISA i EISA w systemach PCI, zostały zdefiniowane dwa mechanizmy dostępu do pamięci konfiguracyjnej urządzeń PCI, wykorzystujące porty umieszczone w przestrzeni wejścia-wyjścia. Pierwszy mechanizm dostępu do pamięci konfiguracyjnej Pierwszy, preferowany mechanizm dostępu do pamięci konfiguracyjnej jest bardzo prosty: • w pierwszym etapie należy wpisać do 32-bitowego portu 0CF8h numer rejestru urządzenia PCI; • w drugim etapie należy wpisać lub odczytać zawartość tego rejestru z 32-bitowego portu o adresie 0CFCh. Mechanizm ten umożliwia dostęp do wszystkich rejestrów konfiguracyjnych, wszystkich urządzeń podłączonych do magistrali PCI, ponieważ pierwszy port pozwala na jednoznaczne zakodowanie numeru podwójnego słowa pamięci konfiguracyjnej wszystkich urządzeń PCI. Z kolei rozmiar drugiego portu odpowiada rozmiarowi zaadresowanego podwójnego słowa. Sposób kodowania numeru rejestru odpowiada następującemu schematowi: bit31; 0; 0; 0; 0; 0; 0; 0; bit23; bit22; bit21;bit20; bit19;bit18; bit17;bit16; bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8;bit7;bit6;bit5;bit4;bit3;bit2;0;0; bit 31 - Określa sposób dostępu do rejestrów konfiguracyjnych. Wartość l oznacza transakcję konfiguracyjną, natomiast O transakcję wejścia-wyjścia. bity 30 - 24 - Zarezerwowane, muszą mieć wartość 0. bity 23-16 - Określają numer magistrali PCI, do której dołączone jest urządzenie (0 - 255). Określają numer urządzenia PCI (0-31). Określają numer funkcji urządzenia PCI (0-7). Określają numer podwójnego słowa pamięci konfiguracyjnej (0-63). bity l - 0 - Zarezerwowane, muszą mieć wartość 0. Drugi mechanizm dostępu do pamięci konfiguracyjnej Drugi mechanizm dostępu do pamięci konfiguracyjnej, zdefiniowany został ze względu na zgodność ze specyfikacją l .0 standardu PCI. Jest on nieco bardziej skomplikowany: • w pierwszym etapie należy wpisać do 8-bitowego portu 0CFAh numer magistrali PCI (0-255); • w drugim etapie należy wpisać do 8-bitowego portu 0CF8H numer funkcji urządzenia; • w trzecim etapie należy dokonać zapisu lub odczytu jednego, dwóch lub czterech bajtów odpowiadających właściwemu rejestrowi konfiguracyjnemu w przestrzeni wejścia-wyjścia od adresu C000h do CFFFh. Sposób kodowania numeru funkcji urządzenia odpowiada następującemu schematowi: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-4 - Jeżeli są ustawione, sterownik magistrali może dokonać zmian w rejestrach konfiguracyjnych urządzeń. bity 3 - 1 - Numer funkcji urządzenia PCI (0 - 7). bit 0 - Jeżeli jest ustawiony, umożliwia sterownikowi magistrali PCI przeprowadzenie specjalnego cyklu. Rejestry konfiguracyjne urządzeń PCI umieszczone w przestrzeni wejścia-wyjścia od adresu C000h do CFFFh podzielone są na 16 grup (począwszy od Ć000h - C0FFh, skończywszy na CF00h - CFFFh). Każda grupa odpowiada urządzeniu PCI o numerze określonym przez trzecią cyfrę w adresie (C7xxh odpowiada urządzeniu o numerze 7). PCI BIOS Do pamięci konfiguracyjnej urządzeń PCI można się również dostać przez procedury BIOS. Specyfikacja PCI 2.1 wprowadziła funkcję Blh do przerwania INT 1Ah. Pod-funkcje tej funkcji umożliwiają: •wykrycie PCI BIOS, • wykrycie urządzeń PCI, • odczytanie kodu klasy urządzeń PCI, • generowanie specjalnego cyklu magistrali PCI, • odczytanie i zapisanie danych w rejestrach konfiguracyjnych urządzeń PCI, •odczytanie informacji dotyczących przypisania kanałów przerwań urządzeniom PCI, •przypisanie kanałów przerwań urządzeniom PCI. Odwołanie do PCI BIOS może nastąpić przez wywołanie funkcji B1h przerwania 1Ah (systemy pracujące w trybie 16-bitowym) lub bezpośrednie odwołanie do adresu 000FFE6Eh (systemy pracujące w trybie 32-bitowym). Autokonfiguracja urządzeń PCI Urządzenia PCI, podobnie do urządzeń EISA i MCA, nie mają zwór konfiguracyjnych. Konfiguracja przebiega automatycznie, przez wpisanie odpowiednich wartości do rejestrów urządzeń PCI. Możliwość zmiany wartości tych rejestrów umożliwia rekon-figurację urządzeń po dołączeniu do systemu nowego urządzenia. Urządzenia podłączone do magistrali PCI są automatycznie wykrywane i konfigurowane przez oprogramowanie systemowe przed rozpoczęciem testów POST (Power On Self Test). Na podstawie wartości zapisanych w rejestrach urządzeń PCI oprogramowanie systemowe decyduje o przydzieleniu kanałów przerwań, przydzieleniu obszarów pamięci, sposobie arbitrażu. Oprogramowanie systemowe zapewnia konfigurację umożliwiającą uruchomienie komputera. Po uruchomieniu systemu konfiguracja urządzeń PCI może być zmieniona przez system operacyjny. Magistrala AGP (Accelerated Graphics Port) Pomimo niezmiernie dynamicznego rozwoju akceleratorów graficznych w które wyposaża się komputery klasy PC, systemy zbudowane na bazie architektury tego typu długo jeszcze nie będą w stanie konkurować ze stacjami graficznymi. W ostatnim czasie czyni się bardzo wiele w celu zmniejszenia dystansu dzielącego te dwa światy. Nie jest to łatwe zadanie jeśli wziąć pod uwagę konieczność zachowania rozsądnych wskaźników ekonomicznych. Komputer klasy PC ma przecież w niedalekiej przyszłości znaleźć się w każdym gospodarstwie domowym i nie może być zbyt drogi. Udział graficznych form wyrazu we współczesnych aplikacjach stale rośnie. Animacje obiektów trójwymiarowych pochłaniają znaczną część mocy obliczeniowej procesora i blokują magistrale. Obiekty 3D już dawno przestały być prezentowane na płaskim ekranie monitora w formie „drucianego szkieletu". Aby oddać złudzenie realności szkieletowe modele pokiywa się elektronicznie pięknymi teksturami, które z punktu widzenia komputera stanowią barwne mapy bitowe. Problem polega na tym, iż stopień realizmu tak spreparowanych obiektów rośnie wraz z rozmiarami tekstur bowiem ich powierzchnie są bardziej bogate w szczegóły. Wytwarzany strumień danych już teraz mieści się z trudem w ramach oferowanych przez specyfikację magistrali PCI a wymagania rosną z dnia na dzień. Aby sprostać tym nowym wyzwaniom powołany został w roku 1996 z inicjatywy firmy Intel komitet w skład którego wchodzili przedstawiciele producentów kontrolerów graficznych i płyt głównych. Efektem wspólnej pracy tego gremium jest opracowanie nowoczesnej magistrali określanej mianem AGP (Accelerated Graphics Port}. Integracja AGP w architekturze PC przedstawiona została w sposób schematyczny na rysunku l .59. Mimo iż nie widać tego na pierwszy rzut oka, AGP stanowi jedynie pewne przedłużenie magistrali PCI i nie jest magistralą jako taką. Nie ma i nie będzie płyt głównych z wieloma gniazdami AGP bowiem jedynym urządzeniem umieszczanym w takim gnieździe może być akcelerator 3D. Magistrala AGP nie przyspiesza operacji graficznych, natomiast pozwala na bardziej wydajną pracę procesora graficznego. Sprawuje on jako Master wyłączną władzę nad magistralą i kieruje swe żądania w stronę pamięci operacyjnej (Target}. Duże znaczenie w rozwoju koncepcji AGP miało oddziaływanie czynnika ekonomicznego. Średnia cena modułów DRAM i SDRAM spada w zawrotnym tempie a dobre pamięci graficzne SGRAM nadal nie są zbyt tanie. Karty wyposażone w 24 MB pamięci lokalnej jeszcze długo nie będą dominowały na rynku zwykłego konsumenta. Dzięki technice AGP kontroler graficzny „widzi" znacznie więcej pamięci lokalnej niż jest jej zainstalowanej. W ten sposób dla celów graficznych używana jest tania pamięć operacyjna. Gniazdo AGP umieszczane jest na płycie głównej nieopodal złącz PCI ale z pewnym przesunięciem wynikającym z innych rozmiarów kart AGP (rysunek l .60). Dominujący bardzo długo standard PCI w wersji 2.0 ograniczał częstotliwość taktowania magistrali do 33 MHz. AGP bazuje na specyfikacji PCI w wersji 2.1 (zegar 66 MHz), która nie zdobyła nigdy nadmiernej popularności, jako że przytłaczająca większość wyprodukowanych dotychczas kart gwarantowała niezawodne funkcjonowanie jedynie w zakresie do 33MHz. AGP rozszerza standard bazowy (PCI 2.1) o dodatkowe funkcje, zmienia znaczenie niektórych dotychczasowych sygnałów oraz wprowadza szereg nowych. Mnogość sygnałów zmusza konstruktorów do opracowania nowego złącza krawędziowego o stosunkowo wysokiej gęstości pól kontaktowych (raster l mm) - rysunek 1.61. Karty AGP posiadają dwustronną listwę połączeniową o 132 kontaktach (po 66 z każdej strony). Transfer zgodny z normą PCI odbywa się w rytmie zegara pracującego z częstotliwością 33 MHz. Przy szerokości magistrali równej 32 bity (4 bajty) otrzymujemy cytowaną często wartość 132 MB/s. Magistrala AGP może pracować w jednym z trzech trybów oznaczanych symbolicznie l x, 2x i 4x. Oto co kryje się za tymi określeniami: - Tryb lx. Proste rozszerzenie standardu PCI polegające na przyspieszeniu pracy magistrali. Osiągane przez podwojenie częstotliwości pracy zegara taktującego do wysokości 66 MHz. Maksymalny transfer osiąga więc wartość 264 MB/s (66 MHz x 4 B). - Tryb 2x. Częstotliwość zegara nie ulega zmianie ale wymiana danych odbywa się w momentach wyznaczanych przez obydwa zbocza impulsów taktujących. W efekcie następuje „pozorny" wzrost częstotliwości zegara do wartości 133 MHz . (Dokładna wartość częstotliwości zegara leży nieco powyżej 66 MHz. Wielkość 132 jest wynikiem zaokrąglenia w dół.). Teoretyczna przepustowość magistrali sięga w tym przypadku 532 MB/s (133 MHz x 4 B). Obniżenie poziomów napięć z 5 V do 3,3 V łagodzi wymagania na stromość zboczy coraz to krótszych sygnałów. Transfer zgodny z protokołem 2x inicjowany może być wyłącznie przez kontroler graficzny a płyta główna musi odpowiadać na żądania wyrażone w tym trybie. Tryb 4x. Opcja 4x wprowadzona została przez Intela do specyfikacji AGP w wersji 2.0 i nie należy jak na razie do obowiązkowego wyposażenia ani kart graficznych ani płyt głównych. Rozszerzenie należy traktować jako potencjalną rezerwę tkwiącą w systemie AGP. Tryb 4x pracuje na znacznie obniżonych poziomach napięć (1,5 V). Tak spłaszczone przebiegi mają dostatecznie strome zbocza by podołać wymogom bardzo szybkiej transmisji. Magistrala przesyła w porównaniu z trybem 2x podwójną ilość danych bowiem pomiędzy dowolnymi dwoma zboczami zegara mają miejsce dwie transakcje. Odpowiada to teoretycznej przepustowości równej l 064 MB/s (266 MHz x 4 B). Istnienie dwóch odmiennych standardów poziomów napięć oznacza dla producentów kart graficznych konieczność rozróżniania wyrobów w wersji 1,5 V od modeli 3,3 V. Służy temu specjalnie uformowana listwa kontaktowa gwarantująca blokadę mechaniczną. Oprócz tego, karty pracujące w trybie 3,3 V pozostawiają sygnał -TYPEDET (końcówka A2) na wysokim poziomie podczas gdy modele klasy 1,5 V s prowadzaj ą ten sygnał do masy. Specyfikacja dopuszcza istnienie uniwersalnego gniazda AGP, które jest w stanie rozróżniać i obsługiwać karty obydwu standardów: zarówno 3,3 V jak i 1,5 V. Wszystkie trzy typy złącz AGP przedstawione zostały na rysunku 1.62, a znaczenie poszczególnych końcówek zebrane zostało w tabeli l .34. Tabela 1.34. Rozmieszczenie zlącz w gnieździe AGP Styk;Złącze 3,3 V-A;Złącze 3,3 V-B;Złącze uniwersalne=A;Złącze uniwer.=B;Złącze 1,5 V-A;Złącze 1,5 V-A; 1;~OVRCNT;12V;~OVRCNT;12Y;~OVRCNT;12Y; 2;5V;~TYPEDET;5V;~TYPEDET;5V;~TYPEDET; 3;5V;Zarezerwowane;5V;Zarezerwowane;5V;Zarezerwowane; 4;USB+; USB-;USB+;USB-;USB+;USB-; 5;GND;GND;GND;GND;GND;GND; 6;~INTB;~INTA;~INTB;~INTA;~INTB;~INTA; 7;CLK;-RST;CLK;-RST;CLK;-RST; 8;~REQ; GND;~REQ;GND;~REQ;GND; 9;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3; 10;STO;ST1;STO;ST1;STO;ST1; 11;ST2;Zarezerwowane;ST2;Zarezerwowane;ST2;Zarezerwowane; 12;~RBF;-PIPĘ;~RBF;-PIPĘ;-RBF;-PIPĘ; 13;GND;GND;GND;GND;GND;GND; 14;Zarezerwowane;Zarezerwowane;Zarezerwowane;-WBF;Zarezerwowane;-WBF; 15;SBAO;SBA1;SBAO;SBA1;SBAO;SBA1; 16;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3; 17;SBA2;SBA3;SBA2;SBA3;SBA2;SBA3; 18;SB_STB;Zarezerwowane;SB_STB;SB_STB;SB_STB;SB_STB; 19;GND; GND;GND;GND;GND;GND; 20;SBA4;SBA5;SBA4;SBA5;SBA4;SBA5; 21;SBA6;SBA7;SBA6;SBA7;SBA6;SBA7; 22;Klucz;Klucz;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane; 23;Kłucz;Klucz;GND;GND;GND;GND; 24;Klucz;Klucz;GND;GND;GND;GND; 25;Klucz;Klucz;VCC3.3;VCC3.3;VCC3.3;VCC3.3; 26;AD31;AD30;AD31;AD30;AD31;AD30; 27;AD29;AD28;AD29;AD28;AD29;AD28; 28;CCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3; 29;AD27;AD26;AD27;AD26;AD27;AD26; 30;AD25;AD24;AD25;AD24;AD25;AD24; 31;GND; GND;AND;GND;GND;GND; 32;AD_STB1;Zarezerwowane;AD_STB1;-AD_STB1;AD_STB1;~AD_STB 1; 33;AD23;C/-BE3;AD23;C/-BE3;AD23;C/-BE3; 34;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;YDDpl.5;VDDQ1.5; 35;AD21;AD22; AD21;AD22;AD21;AD22; 36;AD 19;AD20; AD19;AD20;AD 19;AD20; 37;ON D;GND; GND;GND;GND;GND; 38;C/-BE2;AD16;C/-BE2;ADI6;C/-BE2;AD16; 40;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;VDDQ1.5;VDDQ1.5; 41;-IRDY;-FRAM E;-IRDY;-FRAME;-IRDY;-FRAME; 42;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Klucz;Klucz; 43;AND;GND;GND;GND;Klucz;Klucz; 44;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Klucz;Klucz; 45;VCC3.3;VCC3.3;VCC3.3;VCC3.3;Klucz;Klucz; 46;-DEVSEL;-TRDY;-DEVSEL;-TRDY;-DEVSEL;-TRDY; 47;VDDQ3.3;-STOP;VDDQ;-STOP;VDDQ1.5;-STOP; 48;-PERR;-PME;-PERR;~PME;~PERR;-PME; 49;GND; GND;GND;GND;GND; GND; 50;-SERR;PAR;-SERR;PAR; -SERR; PAR; 51;C/-BE1;AD 15;C/-BE1;AD15;C/-BE1;AD15; 52;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;VDDQ1.5;VDDQ1.5; 53;AD14;AD 13; AD14;AD13;AD14; D13; 54;AD12;AD11;AD12;AD11;AD12;AD 11; 55;GND; GND;GND;GND;GND;GND; 56;AD 10;AD9;AD10;AD9;AD10;AD9; 57;AD8;C/-BEO;AD8;C/-BEO;AD8;C/-BEO; 58;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;VDDQ1.5;VDDQ1.5; 59;AD_STBO;Zarezerwowane;AD_STBO;~AD_STBO;AD_STBO;~AD_STBO; 60;AD7;AD6;AD7;AD6;AD7;AD6; 61;GND;GND;GND;GND;GND;GND; 62;AD5;AD4;AD5;AD4;AD5;AD4; 63;AD3;AD2;AD3;AD2;AD3;AD2; 64;VDDQ3.3;VDDQ3.3VDDQ;VDDQ;VDDQ1.5;VDDQ1.5; 65;AD1;ADOAD1;ADO;AD1;ADO; 66;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane; Sygnały magistrali AGP Szyna AD AD[31-0] - 32 linie magistrali AGP (używane również w transakcjach PCI). Sygnały PCI C/-~BE[3-0] - (Command/Byte Enable*) Mają nieco inne znaczenie niż przy PCI. Podczas transakcji AGP linie te sterowane są przez stronę Master. W trakcie przesyłania komendy (kolejkowania żądań) przy użyciu sygnału -PIPĘ szyną tą przekazywany jest typ rozkazu. ~REQ - (Request) Sygnalizuje chęć dostępu do magistrali. ~RST - (Reset) Znaczenie identyczne z PCI, powoduje inicjalizację wszystkich podłączonych do magistrali urządzeń. ~GNT - (Grant) Znaczenie takie jak przy PCI z rozszerzeniem o informacje przekazywane przez magistralę statusową. ~LOCK - Magistrala AGP nie korzysta z tego sygnału. Nie ma on zastosowania ani w trakcie cykli AGP ani PCI. PAR - (Parity) Sygnał parzystości, jakkolwiek nie jest oceniany w ramach protokołu, musi być generowany przez urządzenie mające w posiadaniu magistralę AGP. -FRAME - (Cycle Frame) Sygnał nie ma zastosowania w klasycznych cyklach AGP i używany jest wyłącznie w trybie FW (Fast Write). -TRDY - (Target Ready) Sygnalizuje gotowość jednostki Target do dostarczenie żądanych danych (w całości lub ich fragmentu). Jednorazowy transfer całości nie może trwać dłużej niż cztery cykle zegarowe. Przekazy fragmentaryczne mogą być natomiast uzupełniane cyklami oczekiwania (Wait States). -IRDY -(Initiator Ready) Sygnalizuje gotowość jednostki Master do przeprowadzenia aktualnej transakcji. Wszystkie przewidziane do wysłania dane są gotowe. Master, który aktywował sygnał -IRDY w trakcie operacji zapisu nie może już wprowadzać cykli oczekiwania. -STOP -Sygnał nie znajduje zastosowania w kolejkowanych transakcjach AGP. Używany jest jedynie w trybie FW dla sygnalizowania pewnych stanów wyjątkowych. -DEVSEL - (Device Selecf) Używany w trybie FW do wskazywania błędu. Nie ma zastosowania w kolejkowanych transakcjach AGP. IDSEL -(Initialization Device Selecf) Wewnętrzny sygnał generowany przez interfejs graficzny, nie należy do linii złącza AGP. -PERR - (Parity Error) Sygnał nie jest respektowany w transakcjach AGP. -SERR -(System Error) Znaczenie takie samo jak w przypadku PCI: błąd krytyczny inny niż parzystość danych. Prowadzi do wygenerowania przerwania niemaskowalnego (NMI). ~INTA(B) - (Interrupt Reąuesf) Znaczenie identyczne z PCI. Sygnały kontroli przepływu -RBF - (Read Buffer Fuli) Sygnał stanowi wskaźnik zajętości bufora dla danych typu LP (Low Priority) zamawianych przez stronę Master. Dane takie wolno przesyłać jedynie wtedy, gdy sygnał jest w stanie wysokim. -WBF -(Write Buffer Fuli) Sygnalizator zajętości bufora dla danych przesyłanych przez stronę Target w trybie FW (Fast Write). Transakcja FW może być zapoczątkowana jedynie w razie stwierdzenia wysokiego poziomu tego sygnału. Sygnały obsługi żądań AGP SBA[7-0] - Pomocnicza magistrala 8-bitowa (Side Band Addressport) może być wykorzystywana do transportu adresów i rozkazów. Sygnały SBA mogą być sterowane wyłącznie przez stronę Master i wysyłane w kierunku Target. -PIPE - Sygnał aktywowany zostaje przez stronę Master w celu wskazania chęci umieszczenia żądania w kolejce poleceń oczekujących na dostęp do magistrali AGP. Master może przesłać cały szereg żądań, jak długo sygnał -PIPE utrzymywany jest na niskim poziomie. Kluczowanie odbywa się przy pomocy narastających zboczy sygnału ~CLK. Status -ST[2-0] - Linie ST2, ST l i STO stanowią szynę statusową (Status) sterowaną wyłącznie przez jednostkę Target, tj. układy stowarzyszone z płytą główną (Chip-Set Corelogic). Dostarcza ona informacji pomocniczych identyfikujących fazę w jakiej znajduje się magistrala AGP. Stan magistrali statusowej odczytywany jest przez stronę Master w oknie czasowym wyznaczanym aktywnością sygnału ~GNT. Możliwe są następujące kombinacje: ST2; ST1; ST0; Znaczenie; 0; 0; 0; Target przesyła do strony Master (uprzednio żądane) dane typu LP (Lo\v Priority). 0; 0; 1; Target przesyła do strony Master (uprzednio żądane) dane typu HP (High Priority}. 0; 1; 0; Master jest w trakcie przesyłania danych typu LP, zgodnie z umieszczonym w kolejce żądaniem zapisu do jednostki Target. 0; 1; 1; Master jest w trakcie przesyłania danych typu HP, zgodnie z umieszczonym w kolejce żądaniem zapisu do jednostki Target. 1; 0; 0; Zarezerwowane. 1; 0; 1; Zarezerwowane. 1; 1; 0; Zarezerwowane. 1; 1; 1; Master uzyskał zezwolenie od układu arbitrażu (regulującego dostęp do magistrali AGP) do przeprowadzenia transakcji. Może więc umieścić kolejne żądanie w jednej z kolejek (aktywując sygnał -PIPĘ) lub rozpocząć cykl PCI (korzystając z linii -FRAME). Sygnały kluczujące CLK - Podstawowy sygnał kluczujący magistral AGP i PCI. AD_STBO - (AD Bus Strobe 0} Sygnał kluczujący magistrali AGP pracującej w trybie 2x. Odnosi się do linii AD15 - ADO. ~AD_STBO - Stanowi odwrócenie sygnału AD_STBO. Para sygnałów ~AD_STBO/ AD_STBO kluczuje transfer AGP w trybie 4x (w odniesieniu do linii AD15 -ADO). AD_STB l - (AD Bus Strobe /) Sygnał kluczujący magistrali AGP pracującej w trybie 2x dla linii AD31 - AD16. ~AD_STB l - Stanowi odwrócenie sygnału AD_STB 1. Para sygnałów ~AD_STB 1/ AD_STB 1 kluczuje transfer AGP w trybie 4x na liniach AD31 -AD 16. SB_STB - (Side Band Strobe) Sygnał taktujący 8-bitowej magistrali pomocniczej (SBA) pracującej w trybie 2x. Źródłem sygnału jest zawsze strona Master. Transfer w trybie l x korzysta wyłącznie z zegara CLK. ~SB_STB - Stanowi odwrócenie przebiegu na linii SB_STB. Para sygnałów ~SB_STB/SB_STB steruje magistralą SBA pracującą w trybie 4x. Sygnały USB USB+/USB - Para sygnałów tworząca magistralę USB (Universal Serial Bus). Zagadnieniom związanym z USB poświęcony jest rozdział szesnasty. -OYRCNT - Wyprowadzenie czujnika prądowego (Overcurrent Indicator) źródła napięcia +5 V. W warunkach normalnych sygnał ten utrzymuje się na wysokim poziomie. System zarządzania zużyciem energii ~PME - Sygnał ten (Power Management Evenf) nie jest wykorzystywany przez protokół AGP, ale znajduje zastosowanie przy obsłudze urządzeń PCI. Sygnały specjalne -TYPEDET - (Type Deteci) Sygnalizuje wysokość poziomów napięć jakie wykorzystuje dany typ interfejsu AGP (1,5 V lub 3,3 V). AGP w teorii Wersja 1.0 specyfikacji AGP dopuszczała inicjowanie transferów w trybie 2x jedynie przez inicjator AGP (określany też często mianem Master), tj. sterownik karty graficznej. Szybkie kopiowanie danych z pamięci operacyjnej komputera do pamięci lokalnej sterownika graficznego odbywało się dotychczas w dwóch etapach. W pierwszym z nich procesor pisał dane do pamięci RAM i powiadamiał inicjator. Etap drugi obejmował pobranie danych przez sterownik karty, przy czym sama transmisja odbywała się pod dyktando inicjatora. Oczywiście nic nie stoi na przeszkodzie by transfery tego typu (RAM ->VGA) przebiegały w sposób klasyczny z wykorzystaniem magistrali i protokołu PCI jako podzbiorów funkcji AGP. W wersji 2.0 specyfikacji (dostępna w Internecie pod adresem www.agpforum.org) pojawia się po raz pierwszy termin Fast Writes oznaczający możliwość uruchamiania szybkich transferów danych w kierunku kontrolera graficznego również przez CPU (ewentualnie układy sterujące płyty głównej). Teoretyczne wartości transferów sięgające l GB/s (tryb 4x) możliwe są do osiągnięcia jedynie dzięki pewnym specjalnym zabiegom modernizacyjnym i uzupełnieniom, którym poddana została magistrala PCI i jej protokół. Kolejkowanie Magistrala AGP jest uniwersalnym środkiem transportu. Mogą nią być przesyłane nie tylko strumieniowe przekazy AGP ale i klasyczne, znane z protokołu PCI, sekwencje typu Adres~Przerwa~Dane. Transfer PCI obarczony jest z natury rzeczy cyklami oczekiwania, choćby spowodowanymi czasem odpowiedzi pamięci. W przerwach tych szyna PCI stoi niewykorzystana, co oczywiście zmniejsza jej wydajność. Zupełnie inna filozofia przyświecała twórcom protokołu AGP, którzy zaimplementowali magistralę jako potok (AGP Pipelining). W modelu tym nie ma niewykorzystanych przerw, bowiem czas oczekiwania na reakcję pamięci wypełniony jest przez inne transmisje, np. wysyłanie kolejnych adresów. Dzięki zespoleniu idei potoku z zasadą kolejkowania (AGP Oueuing) możliwe jest prawie stuprocentowe wykorzystanie teoretycznej przepustowości. Pojedyncza transakcja AGP zawiera nadal fragment określający typ żądania i adres. Napływające w ślad za tym żądaniem dane sąjednak wyraźnie oddzielone od fazy „adresowo-rozkazowej'". Stroną inicjującą transakcję (AGP Master) jest kontroler graficzny a układy sterujące płyty głównej (Córę Logic) pełnią funkcję podrzędną (AGP Target). Master wysyła kolejne żądania (na przykład „prześlij dane znajdujące się pod adresem..."), które są zbierane przez Target w kolejce rozkazowej (Reąuest Qneue). Kolejka ta rozróżnia dwa typy zgłoszeń: o niskim i wysokim priorytecie (Low/High Priority) a ich obsługa odbywa się z uwzględnieniem stopnia ważności. Układy sterujące płyty głównej sięgają do określonych w żądaniach lokalizacji i sprowadzają potrzebne dane umieszczając je w specjalnej kolejce zwrotnej (Read Data Return Queue). Stąd ekspediowane są one w kierunku inicjatora. Zamawiane dane przejmuje specjalny bufor zlokalizowany w bloku interfejsu AGP. Możliwy jest również odwrotny kierunek transmisji, w którym Master wyraża żądanie zapisu do pamięci. Dane takie przygotowywane są w kolejce zapisu (Write Data Queue) i podawane na magistralę AGP w ślad za rozkazem „zapisz dane pod adres...". Target odbiera przesyłkę i umieszcza ją w swej kolejce zapisu. Układy sterujące płyty głównej przejmują dalszy fragment transakcji umieszczając dane w wyznaczonym miejscu w pamięci. Jakkolwiek cały system AGP jest dość złożony, ilość możliwych do przeprowadzenia operacji zamyka się w kilku prostych poleceniach definiujących kierunek przesyłania danych. Magistrala AGP w odróżnieniu od szyny PCI umożliwia dostęp wyłącznie do pamięci operacyjnej (w przypadku PCI zakres dostępu obejmuje pamięć operacyjną, przestrzeń wejścia/wyjścia oraz własną pamięć konfiguracyjną). Przekazywanie poleceń może się odbywać za pośrednictwem magistrali pomocniczej SBA lub bez jej udziału, tj. wprost poprzez szynę AGP. Jeśli nie wykorzystuje się SBA, 29 najstarszych bitów magistrali AGP (AD31 - AD3) niesie adres początkowy obszaru a linie ADO do AD3 jego wymiar (w jednostkach Q-Word). Maksymalna długość bloku wynosi więc 64 bajty. Kod operacji podawany jest w tym wypadku poprzez linie C/-BE3 - C/-BEO. C/~BE3; C/~BE2; C/~BEI; C/~BE0; Kod operacji; 0; 0; 0; 0; Read LP; 0; 0; 0; 1; Read HP; 0; 0; 1; 0; Zarezerwowane; 0; 0; 1; 1; Zarezerwowane; 0; 1; 0 0; Write LP; 0; I; 0 1; . Write HP; 0; 1; 1 0; Zarezerwowane; 0; 1; 1; 1; Zarezerwowane; 1; 0; 0; 0; Long Read LP; 1; 0; 0; 1; Long Read H P; 1; 0; 1; 0; Flush; 1; 0; 1; 1; Zarezerwowane; 1; 1; 0; 0; Fence; 1; 1; 0; 1; DAC; 1; 1; 1; 0; Zarezerwowane; I; 1; 1; 1; Zarezerwowane; Dane przesyłane w wyniku działania komend z przyrostkiem HP (High Priority) mają wyższy stopień uprzywilejowania i muszą osiągnąć adresata nie później niż w pewnym określonym przez system czasie. Obowiązek taki nie ciąży na danych przesyłanych w wyniku realizacji żądań kodowanych przez rozkazy z przedrostkiem LP (Low Priority). Naprzemienne kolejkowanie komend LP i HP powoduje, iż w buforach danych strony odbiorczej mogą zalegać bloki przynależne do rozkazów o niskim priorytecie mimo iż z punktu widzenia jednostki Master operacja zapisu do pamięci dawno się już zakończyła. Dla oczyszczenia tych kolejek kontroler graficzny wystosowuje co pewien czas komendę Flush. Polecenie Fence gwarantuje iż nie dojdzie do sytuacji, w której pobierane z pamięci rozkazem Read HP dane nie zostały zaktualizowane poprzez wydane znacznie wcześniej (i zalegające w kolejce) polecenie zapisu o niskim priorytecie. Komendy Flush i Fence nie mają bezpośredniego wpływu na przepływ danych o wysokim priorytecie jedynie pozwalają na wzgląd systemu operacyjnego do wewnętrznych buforów danych magistrali AGP. DAC (Dual Address Cycle) jest specjalnym modyfikatorem przetwarzającym wszystkie pozostałe 32-bitowe polecenia w funkcje 64-bitowe. Wystąpienie kodu DAC w żądaniu oznacza iż następujące po nim polecenie niesie w sobie właściwy kod funkcji (oraz 4 starsze bajty adresu 64-bitowego). Cztery młodsze bajty adresu zawarte są w fazie pierwszej opatrzonej kodem DAC. Rozkazy z przedrostkiem Long stosuje się przy odwołaniach do długich i spójnych obiektów. W takim przypadku przeskalowaniu ulega współczynnik określający wymiar transmitowanego bloku. Wartość kodowana przez bity ADO do AD3 interpretowana jest w jednostkach równych 32 bajtom. Maksymalna długość bloku, który może być przesłany przy pomocy jednej komendy Long rośnie więc do 256 bajtów. Magistrala SBA SBA (Sideband Addressing) jest 8-bitową magistralą pomocniczą służącą do przekazywania adresów i rozkazów (do płyty głównej). Jeśli kontroler graficzny korzysta z tej możliwości, całe pasmo przenoszenia 32-bitowej magistrali AGP wykorzystywane jest do transportu danych a ruch dodatkowy kierowany jest na szynę SBA. Posługiwanie się SBA nie jest obowiązkowe i zarówno komendy jak i adresy mogą być przesyłane magistralą główną. Koncepcja AGP jest bardzo elastyczna i dopuszcza nawet sytuacje, w których kolejkowane sekwencje AGP mogą być przeplatane klasycznymi cyklami PCI. Nie jest natomiast możliwe mieszanie stylu przesyłania komend: albo stosuje się magistralę SBA albo AGP. Decyzja musi być podjęta w fazie inicjowania systemu i później nie można już nic zmieniać. Magistrala SBA pozostaje zawsze w wyłącznym władaniu jednostki Master (kontrolera graficznego). Format komend AGP transmitowanych szyną SBA nie ulega zmianie, tzn. są one nadal 32-bitowe. Przed skierowaniem ich na szynę 8-bitową dokonuje się skomplikowanego procesu łamania na trzy lub cztery grupy dwubajtowe. Te z kolei przesyła się w dwóch częściach: najpierw bajt starszy a potem młodszy. W trybie 1x magistrala taktowana jest wprost sygnałem zegarowym CLK. Przejmowanie danych odbywa się wraz z pojawieniem się kolejnego narastającego zbocza tego impulsu. Specyfikacja trybu 2x wprowadza dodatkowy sygnał zegarowy SB_STB. Podwojenie pasma przenoszenia uzyskuje się poprzez prostą sztuczkę polegającą na dwukrotnej synchronizacji magistrali w ramach jednego okresu zegara. Dane przejmowane są zarówno przy narastających (młodszy bajt komendy) jak i przy opadających (bajt starszy) zboczach przebiegu SB_STB. Praca magistrali SBA z prędkością 4x wymaga podwojenia częstotliwości zegarowej oraz wprowadzenia drugiego przebiegu taktującego. Jego rolę pełni zanegowany sygnał SB_STB? W trybie tym wykorzystuje się jedynie opadające zbocza sygnałów taktujących: tylne zbocze impulsu SB_STB kluczuje starszy bajt komendy a wraz z tylnym zboczem ~SB STB transportowany jest bajt młodszy. GART Pamięć AGP musi być dostępna zarówno dla procesora jak i akceleratora graficznego. Jednolity tryb dostępu gwarantowany jest dzięki istnieniu tablicy GART (Graphics Address Remapping Table). Tablica ta wkomponowana jest w układy scalone płyty głównej (rozwiązanie sprzętowe) lub realizowana jako nakładka uzupełniająca system przydziału pamięci (rozwiązanie programowe). Obecność GART powoduje przeadreso-wanie pewnego wąskiego fragmentu przestrzeni adresowej. Jakiekolwiek odwołania do tego zakresu kierowane są w inne miejsce. Obszar wejściowy GART lokalizowany jest tuż obok pamięci lokalnej kontrolera graficznego oznaczonej na rysunku l .69 jako LFB (Local Frame Buffer}. Przestrzeń adresowa kontrolera składa się z dwóch okien: przez jedno widoczna jest własna pamięć lokalna a przez drugie tablica GART. Sprzętowy mechanizm stronicowania, w który wyposażony jest procesor przetwarza wirtualny adres liniowy w adres fizyczny. Pamięć przydzielana jest jednak nie w formie ciągłej lecz w postaci stron (4 kB), które niekoniecznie muszą przylegać do siebie. Dzięki pośrednictwu tabeli GART, kontroler graficzny widzi spójny obszar pamięci. Zarówno kontroler jak i CPU używają tych samych adresów zwracając się do pamięci AGP (lub do pamięci lokalnej akceleratora). W zakresie okna GART mechanizm stronicowania jest wyłączony i system adresowania CPU pracuje w trybie 1:1 (adres wirtualny jest jednocześnie adresem fizycznym). DIME Każdy punkt składowy prezentowanego na ekranie obiektu 3D może podlegać cieniowaniu lub mapowaniu. Cieniowanie jest stosunkowo prostą operacją polegającą na uśrednieniu parametrów barwnych danego punktu w oparciu o stan punktów z jego otoczenia. W dużym przybliżeniu można nawet przyjąć, iż pewien rozległy obszar bryły składa się z punktów o jednolitej barwie (na przykład cała ściana prostopadłościanu). Taki prymitywny model nie uwzględnia nawet oświetlenia obiektów a już na pewno nie bierze pod uwagę skomplikowanych niuansów typu odbicia, połysk, zamglenia itp., to znaczy tego wszystkiego co decyduje o naturalnym wyglądzie. Nadawanie obiektom bardziej naturalnego wyglądu możliwe jest dzięki technice mapowania, czyli nakładania na powierzchnię bryły pewnego płaskiego obrazu nazywanego teksturą. Projekcja tekstury zmienia wartości początkowe punktów leżących „pod teksturą". W zależności od stopnia komplikacji i doskonałości modelu proces mapowania stanowi szereg skomplikowanych obliczeń biorących za punkt wyjścia zarówno punkty pokrywane jak i nakładane. Wspomniane obliczenia przeprowadzane są przez akcelerator graficzny 3D. Ponieważ mapy bitowe tekstur przechowywane są na dysku twardym, konieczne jest ich sprowadzenie do pamięci lokalnej karty graficznej. Schemat przepływu tekstur w komputerze wyposażonym w magistralę PCI przedstawiony jest na rysunku 1.70. Model taki określany jest często mianem Local Texturing. Oprócz kontrolera graficznego w transfer zaangażowany jest procesor i magistrala PCI. System musi przeprowadzić następujące operacje: - Pobranie pliku tekstur z dysku twardego i umieszczenie go w pamięci operacyjnej - 1 - Wysłanie tekstur do pamięci lokalnej akceleratora 3D - 2, 3, 4. - Kontroler graficzny sięga do swej pamięci i pobiera niezbędne do obliczeń parametry punktów - 5. Wyniki zapisywane są - 6 - w buforze obrazu (fragment pamięci lokalnej). W powyższych operacjach CPU korzysta zwykle z kanału DMA lub posługuje się wielokrotnie instrukcjami I/O. Niezależnie jednak od tego, system dysponuje dwoma kopiami tej samej tekstury: jedną w pamięci głównej i drugą w lokalnej. Proszę też zwrócić uwagę na stosunkowo duże obciążenie magistrali PCI. Architektura AGP oferuje technikę określaną mianem DIME (Direct Memory Execute). Dzięki niej, akcelerator graficzny może operować na teksturach bez potrzeby sprowadzania ich do swej pamięci lokalnej (AGP Texturing). Przedstawiona na rysunku 1.71 ścieżka przepływu ulega znacznemu skróceniu: - Nadal konieczne jest pobranie tekstury z dysku i umieszczenie jej w pamięci operacyjnej - 1. - Kontroler „widzi" tekstury w pamięci operacyjnej bowiem dzięki AGP stanowi ona rozszerzenie jego przestrzeni adresowej. Tam też wykonywane są wszelkie obliczenia - 2. Komputer dysponujący szyną AGP nie zawsze musi robić użytek z funkcji DIME. Już sam transport tekstur szybką magistralą AGP przynosi pewne korzyści. Transakcje mają jednak charakter długich sekwencyjnych przekazów w odróżnieniu od krótkich sporadycznych cykli dostępu do tekstury przetwarzanej zdalnie w pamięci operacyjnej. Mimo niewątpliwych zalet oferowanych przez mechanizm DIME szybkość z jaką osiągane są tekstury zlokalizowane w pamięci lokalnej kontrolera jest większa niż poprzez AGP. Akcelerator graficzny może uzyskać lepszą wydajność przechowując „pod ręką" często używane mapy bitowe. Produkty przeznaczone dla użytkownika o najwyższych wymaganiach (High-End) konstruowane są więc często z wykorzystaniem obu technik: lokalnej i AGP. System taki nosi nazwę DIMEL (Direcł Memory Execitte and Local). Pamięć lokalna sięga w tym przypadku rozmiarów nawet 32 MB. AGP w praktyce AGP stanowi rozwinięcie specyfikacji PCI w wersji 2.1 co oznacza pełną zgodność „w dół". Protokół AGP zawiera w sobie wszystkie funkcje PCI a urządzenie tkwiące w gnieździe AGP można zawsze uznać za odpowiadające standardowi PCI. Pełna zgod-ność od strony sprzętowej nie oznacza bynajmniej tego samego na polu oprogramowania. W pracach nad pierwotnymi wersjami Windows 95 i NT nie uwzględniano bowiem obecności żadnych tworów typu AGP. Podobny los spotkał uzgodniony zbyt późno standard USB. Uznanie przez system operacyjny urządzeń tego typu możliwe jest dzięki wprowadzeniu różnych nakładek programowych i uzupełnień. Pełna integracja AGP przewidziana jest dopiero w funkcjach DirectDraw systemów operacyjnych Windows 98 i Windows 2000. Póki co AGP wzbogaca system o jedno dodatkowe złącze. Klasyczne płyty główne wyposażane są zwykle w trzy (rzadziej w cztery) gniazda PCI a karta graficzna nie musi już blokować jednego z nich przez co wszystkie pozostają wolne dla innych kart. To samo odnosi się do samej magistrali PCI. Do dyspozycji systemu stoi jej pełna przepustowość, nie ograniczana przez przepływ sekwencji wideo i strumienia danych towarzyszących grafice 3 D. Wymagania sprzętowe i programowe Karta graficzna AGP funkcjonować będzie poprawnie w każdej płycie głównej wyposażonej w to złącze i to bez konieczności instalowania sterowników (poprawnie, czyli tak jak zwykłe urządzenie PCI). Aby wykorzystać możliwości oferowane przez AGP potrzeba znacznie więcej: • Windows 95 we właściwej wersji. Pełne wykorzystanie funkcji oferowanych przez AGP możliwe jest pod kontrolą systemu operacyjnego Windows 95 OSR 2.1 lub nowszej. W celu sprawdzenia numeru wersji Windows 95 należy wywołać panel sterujący, uruchomić program System i wybrać opcję głównych parametrów. Poniżej nagłówka System można odczytać numer wersji: Numer wersji; Wersja systemu operacyjnego; 4.00.950; Windows 95; 4.00.950A; Windows 95 uaktualniony przez Service Pack 1 lub wersja OEM na poziomie SR-1; 4.00.950B; Windows 95 w wersji OEM na poziomie SR-2 (znany jako OSR 2) lub SR-2. 1 (określany mianem OSR 2. 1 ); 4.00.950C; Windows 95 w wersji OEM na poziomie SR-2. 5 (inna nazwa: OSR 2. 5); Dla AGP decydująca jest obecność pakietu USB Supplement to OSR2, który występuje począwszy od wersji SR-2.l. Jeśli był pierwotnie zainstalowany widoczny jest na liście programów w panelu sterującym. Usunięcie z wersji OSR 2.5 pakietu USB powoduje iż system zgłasza się jako 4.00.950B Omawiane uzupełnienie wzbogaca Windows 95 o sterownik VGARTD.VXD, który programuje tablicę GART. W ten sposób system operacyjny ma możliwość jednolitych odwołać do pamięci graficznej, niezależnie od tego czy jest ona lo- kalna czy udostępniana przez AGP. Na potrzeby akceleratora graficznego symuluje się ponadto ciągłość pamięci lokalnej i AGP. Windows NT w wersji 4.0 nie jest szczególnie dogodną platformą do gier komputerowych i animacji 3D. Decyduje o tym generalny brak wsparcia dla funkcji Direct3D. Wraz z pakietem Service Pack 3 (SP-3) instalowane sąjedynie implementacje typu DirectDraw. • Microsoft DirectX w wersji 5 lub nowszej. DirectX stanowi uniwersalną platformę programową pozwalającą na odwołania do zaawansowanych funkcji oferowanych przez urządzenia multimedialne przy pomocy zestawu ujednoliconych procedur. Cała koncepcja opiera się na konstrukcji dwupoziomowej. W warstwie pierwszej (DirectX Foundation) zawarte są funkcje „niskiego poziomu" ściśle współpracujące ze sprzętem: sterownikami kart graficznych, przetwornikami dźwięku, myszami, joystickami, klawiaturami itp. W wyniku ich działania kreowana jest abstrakcyjna maszyna multimedialna HAL (Hardware Abstraction Layer), która niezależnie od swej rzeczywistej konstrukcji, reaguje na zestaw unormowanych funkcji sterujących. Dla pogłębienia stopnia „iluzji" emuluje się nawet programowo nieistniejące w naturze fragmenty sprzętu (np. akcelerator 3D). Górną warstwę systemu stanowią skomplikowane usługi wyższego poziomu (DirectX Media Layer), które opierają się na platformie HAL. Funkcje te współpracują bardziej z użytkownikiem i jego oprogramowaniem, (to znaczy jak na razie głównie grami komputerowymi) niż z samym sprzętem. W warstwie tej realizowane są animacje obrazów, przetwarzanie i strumieni audio i wideo oraz funkcje interakcyjne. DirectX stanowi integralną część systemów operacyjnych Windows 98 i Windows 2000. Posiadacze wersji wcześniejszych muszą doinstalować niezbędne nakładki. Można je sprowadzić z fnternetu (ftp.microsoft.com}. Powyższe wyliczenie sygnalizuje jedynie złożoność problemów na jakie można napotkać eksperymentując z AGP i nie ma na bynajmniej na celu odstraszania Czytelnika od wszelkich prób w tym kierunku. Jeśli któryś z elementów połączonego łańcucha sprzęto-wo-programowego nie funkcjonuje poprawnie, system przechodzi w klasyczny tryb PCI a funkcje AGP po prostu nie są aktywowane. Kontrola działania Obecność magistrali AGP w komputerze przeznaczonym głównie do celów biurowych jest trudna do zauważenia. Na pewno nie można stwierdzić żadnego wzrostu szybkości działania standardowych aplikacji. Pierwsza generacja kart graficznych ze złączem AGP nie różniła się od modeli PCI. Układy scalone akceleratorów graficznych 3D wzbogacone zostały jedynie o tzw. combo-interface, pasujący zarówno do PCI jak i AGP. Karty tego typu pracują w podstawowym trybie lx. Firma ATI rozpoczęła jako pierwsza produkcję układów pracujących w trybie 2x (Rage-II-Pro). Aby wydobyć na światło dzienne zalety magistrali AGP komputer trzeba poddać testom bazującym w głównej mierze na operacjach graficznych w przestrzeni 3D. Najlepsze do tego celu są gry komputerowe korzystające ze scenerii złożonych z dużej liczby tekstu-rowych obiektów. Im większe są rozmiary tekstur, tym wyniki pomiarów porównawczych AGP/PCI przechylają się na korzyść AGP. Zauważalne różnice można stwierdzić dopiero wówczas, gdy sceneria operuje tak dużymi teksturami (lub tak dużą ich liczbą) iż nie mieszczą się one w pamięci lokalnej kontrolera graficznego. Warto zdawać sobie sprawę, iż dana karta graficzna (bez względu na to jaki ma typ interfejsu) dysponuje tym samym akceleratorem 3D, który dokonuje obliczeń parametrów punktów w przestrzeni (rendering). Nie ma i nie może być różnicy w samej szybkości przetwarzania (budowania obrazu) a co najwyżej w szybkości przesyłania danych i rozkazów do samej karty. Prawdziwą eksplozję wydajności wiąże się więc dopiero z jednoczesnym zastosowaniem magistrali AGP i akceleratorów graficznych dysponujących własnym koprocesorem geometrycznym (Geometry Engine) całkowicie odciążającym CPU. Obecna generacja układów scalonych przekazuje nadal znaczną część obliczeń do procesora wykonując jedynie operacje wstępne (Setup Engine). To, co jest możliwe do osiągnięcia to bardziej realistyczny wygląd obiektów. Stopień realizmu uzależniony jest w od aktywności tzw. filtrów. Opisana w rozdziale dziewiątym technika uśredniania tekstur (Mipmapping) pochłania dodatkowo sporą część mocy obliczeniowej. W takim właśnie przypadku z pomocą przychodzi AGP i DIME. Czasochłonne uśredniania tekstur przeprowadzane są bezpośrednio w pamięci operacyjnej bez potrzeby przesyłania ich do karty graficznej. Typowa karta graficzna (4 MB pamięci lokalnej) z akceleratorem 3D musi przeznaczyć 2 MB na bufor ramki i bufor-Z. Dla tekstur pozostaje 2 MB co pozwala na konstrukcję scenerii o średnim stopniu komplikacji i zaprezentowanie jej w rozdzielczości 640x480. Zwiększenie pojemności pamięci tekstur do wysokości 8 MB dzięki technice AGP powoduje wyraźny wzrost urealnienia obiektów 3D a obserwator ma odczucia oglądania obrazu w dużo wyższej rozdzielczości niż ma to w istocie miejsce. Samo zwiększenie rozdzielczości obrazu (na przykład do 800x600) przy tym samym stopniu skomplikowania scenerii nie podnosi liczby trójkątów elementarnych, które CPU musi przetransportować do akceleratora graficznego. Wraz ze wzrostem rozdzielczości rośnie jedynie sumaryczna liczba punktów barwnych (piksli) wypełniających coraz to większe trójkąty. Każdy taki punkt musi być oddzielnie przeliczony przez akcelerator graficzny a na szybkość tych obliczeń nie ma wpływu żadna magistrala. Koncepcja AGP ma bardzo istotną cechę: aplikacje nie muszą wiedzieć o istnieniu tego mechanizmu. Pamięć wideo akceleratora 3D jest większa od rzeczywiście zainstalowanej na karcie. Jeżeli w trakcie budowy scenerii lokalna pamięć tekstur ulega wyczerpaniu, sterownik graficzny czerpie z dodatkowych zasobów emulowanych przez AGP Aktywność funkcji AGP można stwierdzić na przykład przy pomocy programu DirectX-Show z zestawu DirectX-SDK firmy Microsoft. Należy wybrać punkt Primary Display-Adapter/Mem i odczytać wartość parametru Non-Local Vid-Mem. Obecność w tym miejscu liczby większej od zera jest gwarancją funkcjonowania mechanizmu AGP. Można też odwołać się do obecnego w panelu sterującym (po udanej instalacji nakładki DirectX w wersji 5.0) modułu konfiguracyjnego bloku Direct-Draw. Wymiar pamięci w okienku Video Memory musi przy tym przewyższać faktycznie zainstalowaną pamięć lokalną na karcie graficznej. Popularny program testujący 3D-Winbench97 autorstwa grupy Ziff-Davis (ZDLabs) daje się również zaadaptować do celów diagnostyki funkcji AGP. Należy jedynie załadować specjalną scenerię bazującą na bardzo dużych teksturach o rozmiarach powyżej 6 MB. Skoro tylko przełączymy tryb wideo na wysoką rozdzielczość i dużą liczbę kolorów (od High-Color wzwyż) pamięć lokalna (nawet kart wyposażonych w 8 MB) nie jest wstanie pomieścić całej tekstury i kontroler zmuszony jest do zrzutów jej fragmentów. Porównanie wyników przebiegu 3D-Winbench97 w systemie z i bez AGP prowadzi do wniosków, iż wzrost prędkości systemu jest tym bardziej zauważalny im większa jest rozdzielczość obrazu. W trybie 768x1024 wykazywany jest przyrost około 200% podczas gdy przejście do 480x640 nie daje żadnych korzyści. Systemy wieloprocesorowe W pogoni za coraz to większą mocą obliczeniową komputerów poszukuje się stale nowych rozwiązań. Jednym z nich jest rozdział ogólnych zadań całego systemu pomiędzy pewną liczbę współpracujących ze sobą procesorów. Architektura tego typu wymaga od projektantów pewnej deklaracji wstępnej, która rzutuje później na konfigurację całego układu. Mowa tu o sposobie korzystania z pamięci przez współpracujące jednostki CPU. Wyróżnić należy dwa podstawowe punkty podejścia do tego zagadnienia: - Każdy z procesorów stanowi niezależną jednostkę obliczeniową i dysponuje własną pamięcią operacyjną. Model ten określany jest mianem pamięci rozproszonej (Distributed Memory). Koordynacja pracy poszczególnych podsystemów odbywa się na drodze wymiany wiadomości, najczęściej w formie pakietów. (Jako standard w tej dziedzinie przyjęły się dwa protokoły: MP1 (Mes.sage Passing Interface) i PVM (Paket Parallel Yirtual Machinę).) Czas dostępu do danych może się znacznie wydłużać, jeżeli leżą one w obszarze zarządzanym przez inny procesor. - Cała pamięć systemowa jest ogólnodostępna i leży w zasięgu działania każdego z procesorów (Shared Memory). Czas dostępu do danych jest jednakowy dla każdej z jednostek, jednakowoż protokół dostępu musi uwzględniać możliwość występowania kolizji. Architektura MPP Model z pamięcią rozproszoną ma wiele zalet. Pozwala między innymi na łączenie ze sobą dowolnie wielu bloków procesorowych ( W literaturze angielskojęzycznej używa się w tym miejscu terminu Nodes (węzły)). Stąd też wywodzi się określenie dobrze charakteryzujące ten styl podejścia do systemów wieloprocesorowych: Massive Parallel Processing (MPP). Poszczególne moduły połączone są ze sobą przez specjalne magistrale (np. GTL+) lub adaptowane do tego celu rozwiązania sieciowe. Równoległe połączenie setek lub nawet tysięcy procesorów prowadzi do osiągnięcia fenomenalnej mocy obliczeniowej, która może jednak być wykorzystana jedynie w nielicznych przypadkach. Stopień w jakim dana aplikacja czerpie korzyści z architektury MPP zależy w ogromnym stopniu od stylu programowania. Konieczność częstej komunikacji między procesorami pochłania moc obliczeniową i blokuje wspólną magistralę. Cały proces obliczeniowy musi więc być rozpisany na wątki operujące na niezależnych danych. Nie każda aplikacja poddaje się takim zabiegom. Już sama specyfika danego zagadnienia może wykluczyć taką możliwość. Pierwsza z brzegu duża baza danych jest tego najlepszym przykładem. Decyduje tu czas dostępu do ogromnych plików dyskowych, którego nie zmniejszy wzbogacenie systemu o kolejnych 100 procesorów. Samo przetwarzanie rekordu jest zwykle ułamkiem tego czasu. Dobrym materiałem do przetwarzania równoległego są natomiast numeryczne obliczenia inżynierskie i naukowe, gdzie występuje zwykle bardzo intensywne przetwarzanie małej liczby danych. Systemy wieloprocesorowe w konfiguracji MPP można najczęściej spotkać w centrach komputerowych ośrodków uniwersyteckich niż w ośrodkach obliczeniowych banków. Architektura UMA U podstaw architektury UMA (Uniform Memory Access} leży idea wspólnej pamięci globalnej, którą może adresować w całym zakresie każdy z procesorów. Jeżeli pominąć pewne sytuacje szczególne (moment ładowania i uruchamiania systemu operacyjnego), architektura tego typu wykazuje cechy symetryczne (SMP, Symmetric Multi Processing}. Każdy z procesorów może wykonywać zarówno dowolny fragment aplikacji jak i systemu operacyjnego. Podobnie jest z obsługą przerwań: choć zwykle w systemach wieloprocesorowych deleguje się do tego celu jeden z procesorów, nie jest to konieczne - każdy z CPU jest równouprawniony. Niepodważalną zaletą UMA jest łatwość w przenoszeniu programów ze środowiska jednoprocesorowego. Cały nakład pracy związany z zarządzaniem takim układem bierze na siebie system operacyjny. Jeśli ma on w sobie zaimplementowaną obsługę SMP, od aplikacji wykonywanej pod jego kontrolą nie wymaga się już żadnych dodatkowych działań. Udostępnianie mocy obliczeniowej dla aktualnie realizowanych procesów odbywa się przy tym już nie na zasadzie przydziału wycinków czasowych jedynego CPU ale na oddaniu we władanie aplikacji jednego z pełnowartościowych procesorów systemowych. Również pisanie nowego programu pod system SMP nie wymaga od programisty żadnych dodatkowych umiejętności: nad sprawiedliwym przydziałem procesorów czuwa system operacyjny. Szczególny przypadek stanowią monstrualnych wielkości aplikacje wykonywane jako jeden proces. Tutaj system operacyjny SMP jest bezsilny. Przełączanie na kolejne procesory nie może oczywiście przynieść przyspieszenia działania. Kod tego typu musi zostać zmodyfikowany poprzez rozbicie na mniejsze procesy lub wątki. Komunikacja z pamięcią Systemy oparte na architekturze UMA bardzo szybko osiągają nasycenie mocy obliczeniowej mimo dodawania kolejnych procesorów W literaturze wymienia się często jako graniczną ilość osiem procesorów.Wspólna magistrala pamięciowa staje się wąskim gardłem skutecznie tamującym wymianę danych. Jak zawsze w takim przypadku, pewne rozładowanie przynosi zastosowanie pamięci podręcznej (Cache). W małą pamięć podręczną pierwszego poziomu (LI Cache) wyposażone są wszystkie współczesne procesory. Istotną rolę odgrywa jednak w tym przypadku pamięć podręczna wyższego poziomu. Procesory Pentium korzystają w tym wypadku z zainstalowanej na płycie głównej pamięci L2, w rozmiarze 256 - 512 kB (rysunek 1.74). Wspólny bufor L2, który muszą dzielić między sobą poszczególne jednostki stawia pod poważnym znakiem zapytania możliwość profesjonalnego zastosowania tego typu CPU w systemach wieloprocesorowych. Maksymalna częstotliwość taktowania pamięci buforowej L2 sięga (w zależności od typu CPU) 66 MHz. Następna generacja procesorów (Pentium Pro oraz Pentium II) jest już pozbawiona tej wady (rysunek 1.75). Każdy z nich ma do swojej dyspozycji własny bufor L2 co zdecydowanie przemawia za ich stosowaniem w omawianych systemach. Buforowa pamięć podręczna (Cache) Pamięć cache jest formą szybkiej pamięci podręcznej, w której przechowywane są często używane dane ( Pod szeroko rozumianym pojęciem dane rozumie się tutaj zarówno dane używane przezprogram jak i sam kod programu. Te dwie grupy informacji zwykło się separować jedyniew oddzielnych obszarach pamięci Cache poziomu LI (zintegrowanej we wnętrzu CPU).Pamięci buforowe poziomów wyższych nie rozróżniają już danych od kodu.). Czas dostępu do pamięci operacyjnej waha się w granicach 50 - 70 ns. Procesor Pentium taktowany zegarem 200 MHz wykonuje większość instrukcji w czasie jednego taktu zegarowego (5 ns). Bezpośrednie połączenie szybkiego procesora z magistralą pamięciową powoduje natychmiastowe uformowanie się wąskiego gardła, a o wykorzystaniu pełnej mocy obliczeniowej nie może być mowy. Optymalne wykorzystanie przyspieszających funkcji pamięci pośredniej wymaga zwykle działań wielopoziomowych - pierwszy bufor jest bardzo szybki i stosunkowo mały, a drugi stopień pośredni już większy lecz nieco wolniejszy. Rozwiązanie takie godzi interesy ekonomiczne z parametrami technicznymi - szybkie pamięci SRAM są niesłychanie drogie i zużywają w stosunku do tanich DRAM niewspółmiernie więcej energii. Bufor pierwszego poziomu (L1 Cache) o rozmiarze kilku do kilkunastu kilobajtów osadzany jest wprost na krzemowej strukturze scalonej procesora i pracuje synchronicznie z nim. Architektura i lokalizacja podręcznej pamięci buforowej stopnia drugiego (L2 Cache) zależna jest od typu procesora, przy czym wyróżnić można trzy sposoby podejścia: • Pamięć podręczna L2 stanowi odrębną strukturę krzemową zamykniętą we wspólnej obudowie z procesorem. Połączenia są krótkie co pozwala na taktowanie synchroniczne. Typowym przedstawicielem architektury tego typu jest procesor Pentium Pro. • Bufor drugiego poziomu zbudowany jest z niezależnych układów scalonych leżących w bliskim sąsiedztwie CPU ale na tyle daleko, że dostęp przebiega z połową częstotliwości taktowania procesora. Takie rozwiązanie w stylu hybrydowym zastosowano w modelu Pentium II. • Pamięć podręczna L2 umieszcza się w pobliżu pamięci operacyjnej na płycie głównej komputera, w otoczniu innych układów scalonych. Cierpi na tym czas dostępu a zyskuje ekonomika. Rozwiązanie to jest najpowszechniej spotykane i towarzyszy w chwili obecnej większości zastosowań procesorów klasy Pentium w komputerach PC. Nawet proste systemy wieloprocesorowe (zwykle nie więcej niż dwa Pentium) dzielą między sobą jeden wspólną pamięć podręczną drugiego poziomu. Sprawne funkcjonowanie systemu buforowania ( Pod pojęciem buforowania rozumie się począwszy od tego miejsca zagadnienia odnoszące się do pamięci podręcznej drugiego poziomu (L2), jako że zjawiska zachodzące w LI mają zupełnie inny charakter. Bufor LI jest w pełni niewidzialny dla oprogramowania a jego obecność jest znaczenie bardziej istotna dla wnętrza CPU niż dla spełniania funkcji wieloprocesorowych.)wymaga przyjęcia pewnej organizacji pamięci. Jest ona dzielona na bloki (strony W literaturze angielskojęzycznej używa się tu pojęcia Page (strona), czego nie należy jednak mylić ze stronami pamięci w systemach adresowania lub też dostępu do pamięci w trybie nakładania się stron.), o rozmiarze równym ilości dgstępnej pamięci buforowej. Pamięć podręczna L2 nie stanowi monolitycznej całości. Operuje ona jednostkami przydziału o długości 32 bajtów (rysunek 1.76). Każda jednostka (linijka) stanowi niezależną strukturę opatrzoną własnym adresem oraz dodatkowymi informacjami określającymi status zawartej w nich danych. Linijka napełniana jest w cyklu czterech następujących po sobie (Bursi) operacji odczytu z pamięci (przy 32 bitowej szynie danych). Przyporządkowanie linijek pamięci operacyjnej linijkom pamięci buforowej może przyjmować różne formy. W najprostrzym przypadku adresy odwzorowuje się w stosunku 1:1 - buforowane są kolejne linijki strony w naturalnej kolejności występowania. Mówimy wtedy o odwzorowaniu bezpośrednim (Direct Mapped). Sprzętowa realizacja tego modelu nie nastręcza wiele trudności, jest on jednak mało wydajny i nieelastyczny. Podział dostępnych zasobów L2 na mniejsze jednostki (Ways) pozwala już na pewną dozę elastyczności. Strony stają się mniejsze a bufor może operować na rozłącznych obszarach pamięci. Maksymalny stopień swobody zapewnia naturalnie całkowita rezygnacja ze stron i przejście na organizację w formie linijek (Fully Associative Cache). Każda z nich może wtedy pokrywać dowolny adres. W miarę wzrostu swobody w operowaniu buforami rośnie niezbędny nakład na administrowanie tak skomplikowaną strukturą. W praktyce spotyka się różne kompromisowe rozwiązania mieszane. Żądania dostępu do pamięci filtrowane są przez układ kontrolera pamięci podręcznej. Jeżeli potrzebna informacja znajduje się w buforze przekazuje sieją procesorowi. Brak informacji lub jej nieaktualność powoduje uruchomienie magistrali pamięciowej w celu sięgnięcia do odpowiedniego adresu. W pierwszym przypadku mowa jest o tzw. trafieniu (Cache-Hif). Stan przeciwny stanowi Cache-Miss. Sytuacja komplikuje się znacznie, jeżeli w systemie operuje kilka procesorów (lub innych układów mających prawo zapisu do pamięci). Aktualność przechowywanej w buforze informacji zależy już nie tylko od gospodarza danego L2 ( Nieco inna logika obowiązuje w systemach wieloprocesorowych dzielących wspólną pamięć podręczną poziomu drugiego.)Dla zachowania zbieżności ze stanem pamięci należy przedsięwziąć pewne działania dodatkowe. W tym celu wszystkie zainteresowane strony stale podsłuchują (Snooping) co dzieje się na magistrali pamięciowej. Analizie podlegają adresy odwołań do pamięci, które porównuje się ze stanem posiadania w buforze L2. Każda z linijek otrzymuje dodatkową etykietę zgodnie z tzw. protokołem MESI. Protokół MESI jest zbiorem reguł odnoszących się do statusu poszczególnych linijek pamięci podręcznej. Opracowany został pod względem optymalizacji dostępu do pamięci, tzn. bezpośredni i czasochłonny zapis lub odczyt z/do pamięci opóźnia się tak długo jak tylko jest to jeszcze możliwe bez utraty koherencji (zbieżności). Protokół bierze swoją nazwę od pierwszych liter możliwych stanów: Modified, Exclusive, Shared, Invalid. • Exclusive. Linijka o tym statusie obecna jest tylko w tym jednym buforze pamięci podręcznej i nie powtarza się w żadnym innym. Jej zawartość jest w pełni zgodna z buforowanymi komórkami pamięci. Jeżeli procesor żąda danych z zakresu pokrywanego przez linijkę opatrzoną statusem E nie wyzwala to cyklu odczytu z pamięci - dane pobierane są z pamięci podręcznej. Zapis danych do obszaru objętego tą linijką również nie powoduje aktywowania magistrali ale zmienia się status linijki z E na M (Modified). • Modified. Statusem tym oznaczana jest linijka, która podobnie jak w przypadku E nie wystęuje w żadnym innym buforze. Jej zawartość jednak została zmodyfikowana i nie jest już zgodna ze stanem pamięci. Ponieważ jednak ostatnia modyfikacja tego adresu odbyła się w buforze pamięci podręcznej, on to właśnie (a nie pamięć) zawiera bardziej aktualną informację. Tak więc zapis jak i odczyt z tego obszaru stanowi trafienie (Hit) i nie wywołuje pobudzenia magistrali pamięciowej. • Shared. Stan ten odzwierciedla sytuację dublowania się danych w różnych buforach pamięci podręcznej. Dochodzi do niej w przypadku sięgania przez różne procesor}'- do tego samego obszaru pamięci. Odczyt z dowolnej linijki (Zawartość wszystkich linijek o statusie S (odnoszących się do tego samego adresu) jest naturalnie ta sama.); opatrzonej statusem S stanowi naturalnie trafienie i nie uruchamia magistrali. Sytuacja komplikuje się w momencie zapisu pod jeden z buforowanych przez nią adresów. Jest to nadal trafienie ale powstaje niebezpieczny stan rozbieżności. Eliminuje się go poprzez natychmiastowy zapis aktualnej wartości linijki do pamięci (pracuje magistrala) a status wszystkich innych z nią związanych zostaje przestawiony na I (lnvalid). • Invalid. Informacja zawarta w linijce o tym statusie jest bezwartościowa i nie może być wykorzystana. Żądanie odczytu powoduje pobudzenie magistrali pamięciowej i napełnienie linijki a zapis do niej wyzwala cykl zapisu do pamięci. Algorytm zmian statusu MESI wywołanych określonymi akcjami zebrane zostały w poniższej tabeli: Status;Odczyt; Zapis; Invalid; 1. Read Miss 2. Linę Fill (pobudzenie magistrali pamięciowej, cykl odczytu z pamięci) 3. I -> E; 1. Write Miss 2. Write-Through (pobudzenie magistrali pamięciowej, cykl zapisu do pamięci) 3. I -> I; Shared; 1. Read Hit, brak aktywności magistrali pamięciowej 2. S -> S; 1. Write Hit 2.Write-Through (wywołanie cyklu zapisu do pamięci) 3.S -> E 4.-> I w linijkach innych pamięci podręcznej (Invalidatiori); Exclusive; 1. Read Hit, brak aktywności magistrali pamięciowej 2. E-> E; 1. Write Hit, brak aktywności magistrali pamięciowej 2. E -> M; Modified; 1. Read Hit, brak aktywności magistrali pamięciowej 2. M -> M; 1. Write Hit, brak aktywności magistrali pamięciowej 2. M -> M; Obsługa układów peryferyjnych Wśród wielu koncepcji połączenia współpracujących ze sobą procesorów jedna zasługuje na szczególną uwagę, bowiem właśnie ona została zastosowana jako rozszerzenie klasycznej architektury AT w płytach głównych powszechnego użytku. U podstaw tego standardu leży opracowana przez firnie Intel specyfikacja MP (MultiProcessor Specifi-catiori). Opracowanie dotyczy oczywiście procesorów produkowanych przez Intel. Specyfikacja przyjmuje dwa podstawowe założenia wstępne określające pełną symetrię systemu. W części dotyczącej dostępu do pamięci zdecydowano się na architekturę UMA. Niezależnie od liczby zainstalowanych procesorów wykonywana jedna i ta sama kopia każdej aplikacji (a w szczególności również systemu operacyjnego). Każdy z procesorów jest równouprawniony i identyczny pod względem sprzętowym, może wykonywać dowolny fragment kodu oraz porozumiewać się z innymi procesorami (brak uwarunkowań typu Mastar-Slave). Pełna symetria króluje również w obszarze komunikacji ze światem zewnętrznym. Każdy z procesorów dysponuje w tym samym stopniu możliwościami dostępu do przestrzeni adresowej portów I/O. Mimo iż specyfikacja dopuszcza by dowolny procesor mógł obsługiwać przerwania29 z dowolnego źródła, (a nawet za każdym razem z innego) w praktycznych realizacjach MP zwykło się dedykować jeden z CPU wyłącznie na potrzeby obsługi przerwań i operacji wejścia/wyjścia. Specyfikacja MP stanowi bardzo szerokie opracowanie, integrujące w sobie szereg najróżnorodniejszych opcji sprzętowych. W przypadku ogólnym możliwe jest jednoczesne występowanie w tym samym systemie UMA wielu procesorów i wielu zewnętrznych magistral I/O (np. VL-Bus i PCI). Wszystkie niezbędne parametry takiego złożonego układu wieloprocesorowego przekazywane są systemowi operacyjnemu w formie specjalnie zdefiniowanej tablicy konfiguracji. Należy podkreślić, iż nawet tak skomplikowana architektura sprzętowa jest w pełni przezroczysta dla klasycznego oprogramowania pisanego pod zwykły komputer AT. To jedynie system operacyjny poszerzony zostaje o funkcje obsługi MP. Droga rozwoju procesorów Intela dość długo przebiegała w kierunku systemów j edno-procesorowych. Stała konieczność zachowania zgodności w dół zmuszała projektantów do dublowania pewnych anachronizmów, nawet w rodzinach procesorów najnowszej generacji. Zintegrowanie takich wybitnie jednoprocesorowych struktur w ramach nowoczesnej architektury wieloprocesorowej nie jest łatwe. Szczególnie mało podatny na przeróbki okazał się panujący w niezmiennej formie od czasu pierwszego komputera AT system obsługi przerwań sprzętowych. Specyfikacja MP definiuje w tym przypadku pewną nadbudowę do standardu. W tym miejscu pojawia się pojęcie kontrolera APIC (Advanced Programmable Interrupt Con-troller). W myśl powyższego, na system obsługi przerwań układu wieloprocesorowego składają się dwa elementy: APIC lokalny i APIC I/O. Tak zdefiniowana rozproszona architektura kontrolera przerwań daje się łatwo zaadaptować zarówno do procesorów Intel 486 jak i do CPU wyższej generacji. Układy APIC współpracują naturalnie ze standardowym kontrolerem 8259A przejętym z architektury AT dla zachowania zgodności na poziomie portów I/O. Dla potrzeb komunikacji pomiędzy układami APIC, system wyposażony jest w specjalną magistralę ICC (Interrupt Controller Communications}. Przerwanie odbierane jest przez człon I/O po czym przekazywane do obsługi przez człon Local. Cały ruch związany z obsługą przerwań kierowany jest właśnie na tą szynę co stanowi znacznie odciążenie dla magistrali pamięciowej. Rozruch systemu Przyjęte wcześniej założenie o pełnej symetrii nie obowiązuje w momencie rozruchu całego układu. Na ten krótki czas jeden z procesorów wyróżniony zostaje mianem BSP (Bootstrap Processor). W tym kontekście pozostałe CPU nazywane są jednostkami AP (Application Processor). Obszary zacieniowane na rysunku l .78 pokrywają układy wyłączone z ruchu. Procesory AP uaktywniane są dopiero w momencie zakończenia czynności wstępnych związanych z rozruchem. Do momentu załadowania systemu operacyjnego i przekazania mu sterowania, układ stanowi maszynę jednoprocesorową dobrze znaną z architektury komputera PC/AT. Z punktu widzenia kontrolerów APIC, układ przechodzi do trybu pracy zwanego PIC-Mode. Przerwania omijają elementy APIC i kierowane są bezpośrednio do obsługi przez procesor BSP. Wymuszenie tego trybu odbywa się za pośrednictwem bitu bO rejestru IMCR. Dostęp do niego możliwy jest poprzez dwa porty I/O: 0x22 (adres) i 0x23 (sterowanie): mov al , 0x70 ; out 0x22 , al ; selekcja IMCR mov al , 0x00 ; out 0x23 , al ; wymuszenie trybu PIC Przejście do pracy symetrycznej Załadowanie systemu operacyjnego kończy fazę przygotowawczą i pozwala na przejście do wykonywania aplikacji w trybie wieloprocesorowym. Tym razem dezaktywowany zostaje kontroler 8259A. Jego linie wejściowe zostają albo zamaskowane albo zmuszone do pracy równoległej z układem I/O APIC. Skierowanie źródeł przerwań do układów I/O APIC oraz odblokowanie procesorów AP uzyskuje się poprzez ustawienie bO w rejestrze sterującym IMCR: mov al , 0x70 ; out 0x22 , al ; selekcja IMCR mov al , 0x01; out 0x23 , al ; wymuszenie trybu symetrycznego System Dual-Pentium PCI Specyfikacja MP predeflniuje kilka dwuprocesorowych konfiguracji sprzętowych. Z szerokiego grona mniej lub bardziej egzotycznych zestawów, na dokładniejsze omówienie zasługuje model maszyny z magistralą PCI bazującej na dwóch procesorach typu Pentium wyposażonych w kontrolery Local-APIC (rysunek 1.80). Żaden z procesorów nie jest w jakikolwiek sposób wyróżniony. Obydwa muszą być jednakowego typu (albo z serii ze scalonym Local-APIC albo MMX) i dostosowane do taktowania tym samym zegarem. Jedyny stan asymetrii pojawia się w momencie aktywowania linii INIT (reset systemu). Wtedy to procesor AP przechodzi w stan zawieszenia HALT i pozostaje w tym trybie aż do otrzymania od systemu operacyjnego polecenia STARTUP IPI. Kontroler APIC I/O posiada 16 linii wejściowych, które przyporządkowane zostają następującym źródłom sygnałów przerwań: Wejście APICI/O; Sygnał; Komentarz; INTINO; PIĆ 8259A; Wyjście INTR układu Master 8259A INTIN1; IRQ1; Sygnał przepełnienia bufora klawiatury INTIN2; IRQO; Programowany timer 8254 INTIN3; IRQ3; INTIN4; IRQ4; INTIN5; IRQ5; INTIN6; IRQ6; INTIN7; IRQ7; INTIN8; IRQ8; Zegar czasu rzeczywistego; INTIN9; IRQ9; INTIN10; IRQ10; INTIN11; IRQ11; INTIN12; IRQ12; INTIN13; IRQ13; Przerwanie od koprocesora arytmet.; INTIN14; IRQ14; INTIN15; IRQ15; Napływające z magistrali PCI przerwania zewnętrzne wpływają do jednego z czterech kanałów wejściowych: INTA, INTB, INTC i INTD. Specjalny układ programowanego routera pozwala na przypisanie kanałom PCI odpowiednich linii IRQ. Układy APIC-Local wyposażone są w dwa wejścia, które w omawianej właśnie konfiguracji wykorzystuje się w następujący sposób: Wejście APIC-Local; Sygnał; Komentarz LINTINO; PIĆ 8259A; Wyjście INTR układu Master 8259A LINTIN1; NMI; Przerwanie niemaskowalne Sprzętowe skojarzenie sygnałów INTR i NMI do połączonych równolegle wejść układów APIC-Local pozwala na bardzo elastyczne sterowanie. Dzięki niemu system operacyjny może decydować w trakcie pracy (maskując wybrane linie LINTINx), który z procesorów przejmie obsługę danego przerwania. Tabela konfiguracji M P System operacyjny musi mieć dostęp do informacji określających konfigurację układu wieloprocesorowego. Zgodnie ze specyfikacją MP niezbędne dane zebrane są w tabeli zwanej tablicą konfiguracji (MP Configuration Table). ( Specyfikacja MP przewiduje uproszczoną formę przekazu jeśli konfiguracja systemu daje się sprowadzić do jednego z predefiniowanych uproszczonych modeli. Aktualna wersja specyfikacji określa do 255 takich typów przy czym definiuje tylko 8 (pozostałe zarezerwowane do późniejszego wykorzystania). Zgodnie z tym opisem układ Dual-Pentium ISA / PCI stanowi typ nr. 5. Praktyczne wykorzystanie tej możliwości jest znikome, bowiem zdefiniowane typy standardowe są bardzo nieelastyczne. Wspomniany model numer 5 wymaga stałej obecności dwóch procesorów i nie nadaje się do opisu konfiguracji dla płyty z dwoma podstawkami i zmienną liczbą CPU: jeden lub dwa.). ). Wskaźnik na adres początkowy wspomnianej tabeli umieszczany jest w obrębie specjalnego znacznika (Floating Pointer Structure}. System operacyjny poszukuje sygnatury znacznika (_PM_) kolejno w jednym z poniżej określonych obszarów przestrzeni adresowej: - jeśli został zdefiniowany segment EBDA (Extended BIOS Data Area), w pierwszym kilobajcie tego segmentu, - jeśli segment EBDA nie jest zdefiniowany, w ostatnim kilobajcie pamięci podstawowej (639 - 640 kB dla systemów wyposażonych w 640 kB), - lokalizacja rezerwowa to fragment obszaru przyznanego ROM-BIOS: OxEOOOOh - OxFFFFFh. Sama obecność znacznika jest sygnałem, że dany system spełnia wymogi określane przez specyfikację MP. Dwunasty bajt (MP Feature Byte 7) daje odpowiedź na pytanie, czy dany system daje się sprowadzić do jednej z konfiguracji standardowych, a jeśli tak, zawiera jej numer. Wyzerowanie wszystkich bitów tego bąjtu wskazuje na obecność tablicy konfiguracji. Sama tablica lokowana jest w jednym z wymienionych powyżej obszarów, a jej dokładny adres odłożony jest w bajtach 0x04-0x07 znacznika(W przypadku nieobecności tabeli, wszystkie cztery bajty adresu wskaźnika ustawiane są na zero). Suma kontrolna w bajcie OxOa musi być tak dobrana, by po zsumowaniu wszystkich 16 bajtów znacznika (wraz z bajtem OxOa) otrzymać wartość zero. Bit 7 w bajcie OxOc (MP Feature Byte 2) odnosi się do konfiguracji APIC w momencie rozruchu systemu: l oznacza implementację formy PIC-Mode, O wskazuje na tryb Virtual Wire. Tablica MP jest konstrukcją o zmiennej długości rozpoczynającą się od nagłówka o stałym wymiarze 44 bajtów. Po nim następują kolejne bloki informacyjne (rekordy), których ilość i długość może być różna w zależności od konfiguracji systemu. Pierwszy bajt rekordu zawiera zawsze informację o jego typie, co z kolej i jednoznacznie określa długość. W ten sposób system operacyjny dochodzi „po łańcuszku" do analizy kolejnych rekordów. W grupie tzw. podstawowej (BASE MP Configuration Table Entries) specyfikacja MP definiuje następujące bloki informacyjne: - Processor Entry. Dla każdego z obecnych w systemie procesorów redagowany jest jeden rekord o długości 20 bajtów. - Bus Entry. W skomplikowanych systemach wyposażonych w kilka magistral (np. EISA/PCI) każda z nich identyfikowana jest z własnym rekordem informacyjnym o długości 8 bajtów. - I/O APIC Entry. Rekord niesie informację o rozmiarze przestrzeni adresowej okupowanej przez każdy z obecnych w systemie programowanych układów kontrolera przerwań (I/O APIC). Stanowi strukturę o długości 8 bajtów. - l/O Interrupt Assignment Entry. Dla każdego z aktywnych wejść każdego układu I/O APIC umieszczany jest w tablicy MP jest jeden 8-bajtowy rekord. Wszyskie razem stanowią mapę przyporządkowań zewnętrznych (pochodzących od magistral I/O) źródeł przerwań do końcówek I/O APIC. - Local Interrupt Assignment Entry. Stanowi zestaw 8-bajtowych rekordów tworzących razem mapę przyporządkowań źródeł przerwań do końcówek kontrolerów Local-APlC. Specyfikacja MP przewiduje możliwość dołączania do rekordów grupy podstawowej (BASE) dodatkowych jednostek informacyjnych objętych wspólną definicją rekordów rozszerzonych (Extended MP Configuration Table Entries). Zagadnienia z tym związane (np. hierarchia szyn I/O) wybiegają znacznie poza zakres tej publikacji, a zainteresowanych Czytelników trzeba odesłać do tekstów źródłowych. Architektura komputerów przenośnych Architektura komputerów przenośnych w zasadzie nie różni się od komputerów stacjonarnych. Laptopy mogą być wyposażone w magistralę ISA, VESA lub PCI. Podstawowa różnica pomiędzy komputerami przenośnymi i stacjonarnymi sprowadza się do tego, że dążenie do miniaturyzacji wyeliminowało gniazda rozszerzające magistrali zewnętrznej - wszystkie niezbędne elementy (karta graficzna, kontroler dysków itd.) zostały umieszczone na płycie głównej. Pierwsze laptopy utraciły więc podstawową cechę komputerów PC - możliwość rozbudowy. Nie można było rozbudować pamięci, dołączyć karty sieciowej, podłączenie modemu zewnętrznego (ze względu na rozmiary i pobór mocy) było sprawą problematyczną. Rozwiązaniem tego problemu okazało się złącze, opracowane w 1989 roku, przez Personal Computer Memory Card International Association (PCMCIA), określane jako złącze PCMCIA. Złącze PCMCIA Idea złącza jest prosta: sterownik złącza PCMCIA, karta rozszerzająca (wielkości karty kredytowej) i oprogramowanie tworzą jedno urządzenie podłączone do magistrali systemowej. Urządzenie takie może pełnić różne funkcje, zależne od włożonej karty rozszerzającej. Oprogramowanie systemowe musi śledzić funkcje takiego urządzenia, gdyż konstrukcja złącza umożliwia wymianę kart rozszerzających podczas pracy komputera (jako ostatnie rozłączane są styki masy). Pierwotnie (specyfikacja 1.0) 16-bitowe złącze PCMCIA było wykorzystywane do rozszerzania pamięci komputerów przenośnych, gdyż sterownik złącza miał dostęp do pamięci operacyjnej. Wzrost popularności kart PCMCIA sprawił, że kolejne specyfikacje (2.x) zdefiniowały sposób dostępu do przestrzeni wejścia-wyjścia, co umożliwiło umieszczenie na kartach PCMCIA modemów, kart sieciowych i pamięci masowych (dysków twardych). Jednak niejednoznaczne sformułowania określające obszar informacji o karcie (CIS - Card Information Structure) w specyfikacji 2.0 w powiązaniu z dużą liczbą producentów kart PCMCIA i sterowników złącza PCMCIA doprowadziły do tego, że nie wszystkie układy sterownik-karta chciały ze sobą współpracować. Błędy te zostały wyeliminowane w kolejnych wersjach specyfikacji. Rozwój architektury komputerów PC, a w szczególności wprowadzenie 32-bitowych magistral systemowych doprowadziło do powstania kolejnej specyfikacji (CardBus 95), która zdefiniowała: sposób komunikacji z 32-bitowymi kartami rozszerzającymi, dostęp do kanałów DMA i zasilanie karty napięciem 3,3 V. W chwili obecnej można spotkać się z 16- i 32-bitowymi kartami PCMCIA typu I, II i III (typ karty określa grubość karty - odpowiednio: 3,3, 5,0 i 10,5 mm - nie ma wpływu na złącze jako takie). Warunki kompatybilności zapewniają, że nowszy sterownik powinien współpracować ze starszymi typami kart, natomiast nowsze typy kart nie muszą współpracować ze starszymi typami sterowników. * * * Rozdział 2. Procesor z rozszerzeniem MMX MMX (MultiMedia eXtention) jest największą ze zmian w architekturze procesorów Intela od czasu wprowadzenia na rynek przed ośmiu laty układów serii 386. Przedsięwzięcie ma na celu umocnienie pozycji firmy Intel na polu błyskawicznie rozwijających się zastosowań multimedialnych. Obszary te zdominowane są dotychczas przez szereg mniejszych firm wytwarzających różnego rodzaju kontrolery wyspecjalizowane w szybkim przetwarzaniu grafiki i dźwięku. Jak na razie nowa technologia nie zabiera chleba akceleratorom graficznym lecz skupia się na lepszym podziale mocy obliczeniowej i wykorzystaniu zasobów. Kluczową rolę w tak postawionym zagadnieniu odgrywa na pewno zapewnienie możliwości szybkiej wymiana danych pomiędzy elementami komputera. Kolejny krok przyprawiający skrzydeł architekturze Intela stanowić ma upowszechnienie nowej wewnętrznej magistrali o nazwie AGP (Accelerated Graphics Port). Zmiany w architekturze Idea leżąca u podstaw MMX nie jest nowa i stanowi krok w kierunku przetwarzania równoległego. W tym wypadku nie chodzi jednak o równoległe wykonywanie dowolnych rozkazów ale o grupowanie danych w większe grupy. Zamiast kolejnego przetwarzania pojedynczych jednostek informacji (bajtów, słów itd) szybciej jest brać po kilka porcji na raz i załatwiać sprawę jednym rozkazem maszynowym takim jak add, sub, or, anci itd. Technika taka nosi miano SIMD (Single Instruction Multiple Data). Intel jako pierwszy upowszechnia SIMD dla potrzeb zwykłego użytkownika. Inne firmy też stosują ten sposób przetwarzania danych ale w dużych komputerach. W oparciu o instrukcje tego typu pracują procesory RISC używane w systemie PA-8000 firmy HP a specjalnie dobrany do potrzeb grafiki wektorowej zestaw instrukcji VIS (Yisual Instruction Set) przetwarzaj ą procesory firmy Sun. Wspomaganie multimediów stanowi jedno z najwdzięczniejszych pól do zastosowania takiej techniki. Dane reprezentowane są tutaj jako długie ciągi słów 8- lub 16-bitowych. Operacje na takich danych, to często powtórka tych samych kroków w odniesieniu do, jeśli nie wszystkich słów na raz (filtr audio), to co najmniej kolejnych kilkunastu z nich (filtracja bilinearna tekstur). Warto wspomnieć, iż rozkazy tego typu można zrealizować również bez gruntownych zmian w architekturze CPU. Nic nie stoi na przeszkodzie by jeden z 32-bitowych rejestrów potraktować jako złożenie czterech bajtów i wykonać operację jednoczesnej inkrementacji: ADD OlOlOlOlh Problem pojawi się w momencie gdy jeden z bajtów miał przed operacją wartość OxFFh, bowiem bit przepełnienia przeleje się na sąsiadujący wyższy bajt. Najistotniejszą modyfikacją architektury nowych procesorów stanowi właśnie odmienne niż dotychczas traktowanie stanu przepełnienia podczas operacji SIMD. Przy okazji kuracji odmładzającej nowy procesor (oficjalna nazwa P55C w odróżnieniu do klasycznego Pentium P54C) wyposażony został w dodatkowe układy sprzętowe nie mające bezpośredniego związku z technologią MMX: • Pamięć podręczną (first level cache). W procesorach MMX pamięć podręczna zarówno dla danych jak i rozkazów została zwiększona do 16 kB i pracuje z poczwórną asocjacją (P54C 8/8 kB i podwójna asocjacja). Każdy z dwóch potoków przetwarzających rozkazy może więc wystąpić jednocześnie z dwoma żądaniami dostępu do pamięci i obydwa będą buforowane. • Bufor zapisu. P55C wyposażony zostaje w dwukrotnie większy w porównaniu z P54C bufor zapisu: 4 zamiast 2 słów. • Nową jednostkę BPU (Branche Prediction Unii). Nowy układ przewidywania dla instrukcji rozgałęzień zapożyczony został w dużej części od starszego brata, Pentium Pro. Jego zastosowanie zwiększa prawdopodobieństwo zapełniania potoków tymi instrukcjami, które będą faktycznie wykonywane. Błędne przewidywanie skutków rozgałęzienia powoduje, że jeden z potoków musi (po dojściu do newralgicznego punktu) wstrzymać przetwarzanie. W okresie niezbędnym do ponownego załadowania, drugi z potoków znajduje się w stanie oczekiwania i traci czas. • Dłuższe potoki przetwarzania instrukcji (Pipę Lines). Długość rozkazów maszynowych jest zmienna i waha się w przedziale od l do 15 bajtów. Fakt ten stanowi jedną z bolączek procesorów P54C, bowiem żmudne określanie adresu następnego rozkazu (w celu przekazania go dekoderowi instrukcji) zajmuje stosunkowo dużo czasu. Sam dekoder byłby w stanie przyjmować do dwóch instrukcji w jednym cyklu zegarowym. Dla pokonania tego wąskiego gardła obie linie przetwarzania zostały wydłużone o brakujący stopień zlokalizowany pomiędzy punktem pobierania (Prefetch) a dekoderem. Trzeba dodać, że obydwa potoki pracują nadal synchronicznie. Wypełnione rozkazami o różnym czasie trwania blokują się wzajemnie. Odnoga, która szybciej zostanie opróżniona musi czekać na zakończenie przetwarzania w drugiej. • Możliwość równoległego wykonywania rozkazów. Pentium MMX może w sprzyjających warunkach wykonywać równolegle 2 polecenia. W szczególności parowane mogą być nowe rozkazy z grupy MMX, jeżeli odnoszą się do różnych rejestrów MM. • Stos powrotu (Return Stack). Dla procesorów Cyrix nic nowego, dla Intela istotna zmiana. Procesory MMX wyposażone zostały w wewnętrzny stos powrotów. Przy przejściu do wykonywania podprogramu zapamiętywany jest adres powrotu - adres rozkazu następnego po CALL. Przyspieszane jest wykonywanie kodu bogatego w krótkie procedury, dla których odległość między instrukcjami call i ret jest stosunkowo niewielka. Cały mechanizm działa do czterech poziomów w głąb (procedura może bowiem wywoływać procedurę a ta następną itd...). Zysk czasu szacowany jest na 20%. • Zasilanie. Procesory MMX wykonywane są wprawdzie w nowoczesnej technologii 0,28 um (dla porównania 0,35 um dla P54C) zawierają jednak blisko 40% więcej tranzystorów (P54C: 3.3 miliona, P55C: 4,5 miliona). Dla ograniczenia wydzielania ciepła obniżono napięcie zasilające samą jednostkę centralną (Corę) do 2,8 V. Układy wejścia/wyjścia zasilane są nadal standardowym napięciem; w zależności od grupy selekcyjnej 3.3 V - 3,5 V. Nie obeszło się więc bez zmiany kolejnego numeru wersji u producentów płyt głównych. Dla tych, którzy ze swoją płytą rozstać się nie chcą przewidziano moduł typu overdrive z procesorem MMX i regulatorem napięcia zadowalający się standardową podstawką typu 5 lub 7. Te energooszczędne zabiegi prowadzą do pozytywnego bilansu: model MMX 200 MHz rozprasza na ciepło jedynie 0,2 W więcej od taktowanego takim samym zegarem normalnego P54C. Wszystkie te unowocześnienia razem wzięte gwarantują (bez dotykania samego tematu MMX) przyrost mocy obliczeniowej o 15 - 20%. Tyle tylko korzystają więc z P55C aplikacje nie wywołujące rozkazów MMX. Eozpoznanie procesora P55C Typ procesora Pentium można rozpoznać badając stan rejestru EDX po wywołaniu instrukcji cpuicd (Nie każdy procesor zna rozkaz cpuid (386, wczesne 486), trzeba najpierw sprawdzić, czy należy on do zestawu instrukcji). Potrzebna informacja zawarta jest w bicie 23. Jeżeli jest on ustawiony, w systemie mamy procesor P55C: mov EAX, l CPUID test EDX,OO8OOOOOh ; gdy (bit 23=1) jest MMX jnz Kod_MMX Kod Standard: Przy okazji, nieco na uboczu, pojawia się problem zgodności z nowym kodem. W użyciu są bowiem jednocześnie dwa rodzaje programów i dwa rodzaje procesorów. Stare programy szyte na miarę P54C nic nie wiedzą o MMX i nie są w stanie wykorzystać jego zalet. Problem załatwia wypuszczenie nowej wersji aplikacji. Z drugiej jednak strony, aplikacje pod P55C mogą napotkać na swej drodze procesory bez rozszerzenia. O ile zagadnienie poprawnej identyfikacji Intela MMX jest jednoznacznie zdefiniowane, to sedno sprawy stanowi konieczność dublowania procedur wywołujących rozkazy MMX. Każda z nich musi mieć w rezerwie swój odpowiednik dostosowany do klasycznego procesora bez rozszerzeń. Zależnie od wyników testu typu zainstalowanego w systemie CPU, sterowanie przekazywane jest do właściwej gałęzi. Programowanie ułatwia posługiwanie się jedną z gotowych bibliotek dostarczanych przez Intel. Newralgiczne partie kodu są tu automatycznie dublowane przez emulator MMX. Nowe rejestry Wydajne przetwarzanie danych w myśl założeń SIMD wymaga pogrupowania ich w porcje o możliwie dużej długości. Procesory Intel-MMX mogą pracować na blokach 64-bitowych. Do dyspozycji nowych rozkazów stoi osiem nowych rejestrów wewnętrznych oznaczanych symbolami MMO - MM7, każdy o szerokości 64 bitów. Istotną barierą stojącą przed twórcami nowego procesora było pokonanie nieśmiertelnego problemu „kompatybilności w dół" - zgodności z poprzednimi wersjami. Samo wprowadzenie nowych rozkazów i rejestrów nie stanowi żadnego zagrożenia: stare programy i systemy nic nie wiedzą o ich obecności, żaden kompilator nie generuje kodu z ich udziałem. W spisie symboli operacji (Opcodes) wywodzącym się jeszcze z czasów procesorów bazowych x86 jest dużo wolnego miejsca dla nowych rozkazów bez obawy pomieszania ich z dotychczas znanymi. Dla procesora MMX pisze się nowe programy posługujące się nowymi instrukcjami, na nowych typach danych i nowych rejestrach. Jak długo nasz nowy P55C przetwarza wyłącznie taki program wszystko jest w porządku. Katastrofa nastąpi gdy do akcji wkroczy jeden z nowoczesnych systemów operacyjnych, który przydziela czas procesora różnym zadaniom (systemy wielozadaniowe). Każde takie przełączenie wymaga zapamiętania aktualnego stanu CPU, tak by później móc podjąć przerwany wątek w tym samym miejscu. Zapamiętać trzeba wiele rzeczy, a w szczególności rejestry wewnętrzne. Dla procesorów rodziny x86 są to między innymi rejestry AX, BX itd. Żaden ze współczesnych systemów operacyjnych nie ma pojęcia, że trzeba też zapamiętać i odtworzyć rejestry MMX, bo nic nie wie o ich istnieniu. Na szczęście występuje dodatkowa grupa rejestrów, o które troszczą się systemy operacyjne. Mowa tu o ośmiu 80-bitowych rejestrach koprocesora arytmetycznego (FPU). Na reprezentację liczb zmiennoprzecinkowych w pamięci komputera składa się jeden bit znaku, 15-bitowa eksponenta i 64-bitowa mantysa. Każdorazowe przejście CPU do nowego kontekstu poprzedzane jest między innymi instrukcją FSAVE, która odkłada rejestry FPU w specjalnie do tego celu zarezerwowanym bloku. Wywołanie instrukcji FRSTOR po powrocie gwarantuje przywrócenie stanu FPU.(W segmentach 16-bitowych rezerwuje się 94 bajty a w 32 bitowych 108 bajtów.). Rejestry MMX podszywają się pod fragmenty rejestrów FPU (część przeznaczona na mantysę) i w ten sposób gwarantują sobie obsługę ze strony systemów operacyjnych (rysunek 2.2). Jak powszechnie wiadomo, nie ma nic za darmo i to genialnie proste rozwiązanie pociąga za sobą pewne konsekwencje. Instrukcjom FSAVE/FRSTOR jest z pewnością obojętne jak należy interpretować przesyłane dane. Jakkolwiek rejestry MM i ST stanowią fizycznie odrębne jednostki, każdy dostęp do FPU ma swoje odbicie w MMX i odwrotnie. W obrębie danego zadania (Task), od przełączenia do przełączenia, procesor pracuje albo w trybie MMX albo w trybie zmiennoprzecinkowym - nigdy w obydwu na raz. Każda zmiana stanu musi być przeprowadzona z udziałem pary rozkazów FSAVE/ FRSTOR. Programy wykorzystujące specyfikę rozszerzeń MMX muszą być pisane w przebiegły sposób. Z jednej strony nie można sobie wyobrazić nowoczesnego algorytmu 3D bez intensywnej operacji na danych zmiennoprzecinkowych; bazuje na nich cały rachunek współrzędnych w przestrzeni. Drugą stronę medalu stanowi astronomicznie długi czas przełączania: fsave zajmuje 124 takty zegarowe a frstor trwa 70 taktów (W przypadku szczególnie korzystnym, gdy dane znajdują się w pamięci podręcznej (cache hit). W praktyce stan taki ma rzadko miejsce co prowadzi do zwielokrotnienia podanych czasów.). Częstestosowanie tych instrukcji obraca w niwecz ideę przyspieszania czegokolwiek. Jeżeli pominąć momenty przełączania wątków skupić się można na wykonywaniu programu zawierającego zarówno instrukcje MMX jak i te odwołujące się do jednostki zmiennoprzecinkowej. Idealnym rozwiązaniem jest grupowanie partii kodu jednego rodzaju w możliwie duże bloki. Jeżeli każdy z bloków wie, że w newralgicznych rejestrach zastaje „śmieci" pozostawione tam przez poprzednika operacja przełączania nie musi być tak czasochłonna. Rejestry MMX można przecież jeśli to konieczne czyścić przed użyciem szybkimi instrukcjami typu: PXOR mmx, mmx; jeden cykl zegarowy Każdy blok MMX zakończany jest specjalną instrukcją emms (Empty Multimedia State). Jej działanie sprowadza się do ustawienia flag informujących jednostkę FPU, że przejmowane przez rejestry ST dane są nieważne ( Zastanie w rejestrze eksponenty wartości 0xFFFFh zostanie zinterpretowane jako nieskończoność i koprocesor generuje przerwanie.). i nie podlegają interpretacji. Czas wykonywania EMMS wynosi jak na razie nie mało bo aż 57 taktów zegarowych. Intel planuje usunięcie tego mankamentu w kolejnych wersjach procesora i zredukowanie czasu przełączenia do trzech taktów. Fragmenty kodu operujące na liczbach zmiennoprzecinkowych powinny pozostawiać czysty stos. kod__FP_blok_: ... ... ... /* zwolniony stos FP*/ kod MMX ... ... ... EMMS kod FP blok 2: ... ... ... /* zwolniony stos FP */ Jednostkę FPU można zainicjować stosunkowo szybkimi rozkazami fninit i fIdcw, które pochłaniają (w korzystnych warunkach, cache hit) 19 taktów zegara. Nowe typy danych Rejestry MMX są 64-bitowe, mogą więc przyjąć 8 bajtów danych. Bajty te można grupować w słowa 16 i 32 bitowe. Prowadzi to do wyodrębnienie nowych typów danych, na których operuj ą rozkazy MMX (rysunek 2.3). Nowe rozkazy Intel reklamuje nowy procesor w towarzystwie 57 nowych rozkazów. Przybyło ich w istocie, ale nie aż tyle. Rozkazy MMX operują generalnie na trzech typach danych, niektóre na dwóch a niektóre tylko na jednym. Jeżeli uwzględnić dodatkowo odmienne traktowanie przeniesienia i znaku można uzyskać wspomnianą liczbę mutacji równą 57. Sam rozkaz add może się poszczycić siedmioma różnymi odmianami. Kod mnemoniczny budowany jest według następującego schematu: - Przedrostek (Prefix). Litera p, jeżeli poprzedza kod operacji oznacza Packed - Kod operacji. Określa działanie, np. add, sub, cmp. - Przyrostek (Suffix). Możliwe oznaczenia to: - us Unsigned Saturation (nasycenie bez znaku), - s Signed Saturation (nasycenie z uwzględnieniem znaku), - b Typ danych: Packed Byte, w Typ danych: Packed Word, d Typ danych: Packed Doubleword, q Typ danych: Quadword. Tabela 2.1. Rozkazy MMX Rozkaz; Uwagi; emms; movd; rej.->pam./rej. movd; pam./rej./->pam. movq; rej.->pam./rej. movq; pam./rej./->pam. packssdw; packsswb; packuswb; paddb; paddd; paddsb; paddsw; paddusb; paddusw; paddw; pand; pandn; pcmpeąb; pcmpeqd; pcmpeqw; pcmpgtb; pcmpgtd; pcmpgtw; pmaddwą; pmulhw; pmullw; por; pshimd; jako PSLLD ze stałą pshimd; jako psrad ze stałą pshimd; jako psrld ze stałą pshimq; jako psllą ze stałą pshimq; jako psrlą ze stałą pshimw; jako psllw ze stałą pshimw; jako psraw ze stałą pshimw; jako psrlw ze stałą pslld; psllą; psrad; psraw; psrld; psrlq; psrlw; psubb; psubd; psubsb; psubsw; psubusb; psubusw; psubw; punpckhbw; punpckhdq; punpchwd; punpcklbw; punpckldq; punpcklwd; pxor; Połączenie rozkazów MMX w klasy z uwzględnieniem wykonywanych funkcji prowadzi do wyodrębnienia grup przedstawionych w tabeli 2.2. Tabela 2.2. Podział rozkazów MMX na klasy Klasa; Dlugość opcode; Mnemonik rozkazu; Typ argumentów;Komentarz; Przesyłanie danych; 4; mov; D, Q; Ładowanie lub zapamiętywanie rejestrów MMX Pakowanie; 1; packus; WB; Słowa na bajty, z nasyceniem, bez znaku;;2; packss; WB, DW; Słowa na bajty, podwójne słowa na słowa, z nasyceniem, ze znakiem; Rozpakowywanie; 3; punpcks; BW, WD, DQ; Bajty na słowa, słowa na podwójne słowa, podwójne słowa; na poczwórne słowa, HO*3; punpckl; BW, WD, DQ; Bajty na słowa, słowa na podwójne słowa, podwójne słowa na poczwórne słowa, LO**; Arytmetyczne; 3; padd; B, W, D; Dodawanie, bez nasycenia; ;2; padds; B, W; Dodawanie z nasyceniem, ze znakiem;;2; paddus; B, W; Dodawanie z nasyceniem, bez znaku;;3; psub; B, W, D; Odejmowanie, bez nasycenia; ;2; psubs; B, W Odejmowanie z nasyceniem, ze znakiem;;2; psubus; B, W; Odejmowanie z nasyceniem, bez znaku;;1; pmulh; W; Mnożenie, wynik = High word; ;1; pmull; W; Mnożenie, wynik = Low word; ;1; pmadd; WD; Mnożenie i dodawanie, wynik = podwójne słowo; Przesunięcia;; 6; psll; W. D. Q; Przesunięcie logiczne w lewo;;6; psrl; W, D, Q; Przesunięcie logiczne w prawo; ;4; psra; W, D; Przesunięcie arytmetyczne w prawo; Porównania; 3; pcmpeą B, W, D; Jeżeli równe wynik = OxFFh, jeżeli nie: wynik = 0;;3; pcmpgt; B, W, D; Jeżeli większe wynik = OxFFh, jeżeli nie: wynik = 0; Logiczne; 1; pand; -; Bitowe logiczne AND; ;1; pandn; -; Bitowe logiczne NAND; ;1; por; -; Bitowe logiczne OR; ;1; pxor; -; Bitowe logiczne XOR; Różne; 1; ernms; Opuszczenie stanu MMX; * HO: High Order. ** LO: Low Order. Mechanizm nasycenia (saturatiori) oznacza zlekceważenie przepełnienia i ogranicza wynik operacji do wartości wynikającej z zakresu przejętego dla zmiennej (tabela 2.3). Tabela 2.3. Zakresy typów danych z uwzględnieniem mechanizmu nasycenia Typ; Zakres; Signed Byte; 0x80h - 0x7Fh (-128- +127); Signed Word; 0x8000h - 0x7FFFh (-32 768 - +32 767); Unsigned Byte; 0x00h - 0xFFh (0-255); Unsigned Word; 0x0000h - 0xFFFFh (0-65535); Występowanie nasycenia wielkości fizycznej takiej jak jaskrawość, kontrast, siła i barwa dźwięku jest z pewnością bliższe naturalnemu podejściu do zjawisk fizycznych ze świata multimediów. Analogowy regulator siły głosu nie kręci się przecież w kółko ale ma swoje położenia graniczne. W realizacji klasycznej (wrap-around), dalsza inkrementacja zmiennej, która już osiągnęła wartość OxFFh, prowadzi do wyniku OxOOh. Zwykłe rozkazy x86 ustawiają w tym przypadku dodatkowo flagę (carry) informującą o „przekręceniu się licznika". Bogaty asortyment instrukcji arytmetycznych MMX daje możliwość wyboru punktu podejścia: z nasyceniem lub bez. Większość rozkazów MMX jest dwuargumentowa - przetwarzane są dwa operandy. Operacja zapisywana jest według klasycznej konwencji: kod_instrukcji operand_2, operand_l Wynik operacji na operandach określanej przez kod_instrukcji umieszczany jest w miejscu wyznaczonym przez operand_2. Przykład działania: rozkaz PACKUSWB PACK rozkaz pakowania US z nasyceniem bez uwzględnienia znaku WB słowa na bajty PACKUSWB operand_2 , operand_l operand_2 jest jednym z rejestrów MMX (MM0 - MM7) operand_l jest adresem 64 bitowego obszaru w pamięci lub rejestrem MMX Dla lokalizacja 64-bitowego obszaru w pamięci przyjęta została następująca umowa (na przykładzie adresu początkowego 0xl500h): Wynik operacji umieszczany jest w rejestrze MMX określonym przez operand_2. Instrukcja traktuje lokalizację podaną przez operand_1 jako zestaw czterech 16-bitowych słów ze znakiem. Tak samo interpretowany jest drugi z argumentów. Dla każdego ze stojących w ten sposób do dyspozycji ośmiu 16-bitowych słów wykonywana jest następująca operacja: • Jeżeli wartość słowa (z uwzględnieniem znaku) wypada poza zakres 0 - 255 (przyjęty dla typu signed byte) uznaje się wartość graniczną zakresu. Tak więc wynikiem jest 0x00h jeśli poniżej a 0xFFh jeśli powyżej zakresu. • Dla słów, których wartości mieszczą się w zakresie O - 255 przepisuje się po prostu młodszy bajt Powyższy rozkaz dokonuje więc istotnie spakowania danych zawartych w ośmiu słowach 16-bitowych (razem 128 bitów) do kontenera o rozmiarze 64 bity. [Przykład działania: rozkaz PADDSW p rozkaz dotyczy danych spakowanych ADD instrukcja dodawania SW operuje na słowach z uwzględnieniem znaku PADDSW operand_2 , operand_1 operand_2 jest jednym z rejestrów MMX (MMO - MM7) operand_1 jest adresem 64 bitowego obszaru w pamięci lub rejestrem MMX Instrukcja PADDSW dodaje 16-bitowe słowa (traktując je jako liczby ze znakiem) wskazane przez operand_1 i operand_2. Jeżeli wynik jest mniejszy od najmniejszej liczby z zakresu przewidzianego dla typu Signed Word, następuje ograniczenie do wartości Ox8000h. W przypadku wyjścia poza zakres od drugiej strony wartość nasycenia wynosi Ox7FFFh. Rozkaz przesyłania mov w zależności od przyrostka (d lub q) operuje na danych 32 lub 64-bitowych. Jest jedynym środkiem komunikacji pomiędzy klasycznymi rejestrami (EAX, ERX, ...) a rejestrami MMX. Jednorazowa porcja przesłanej informacji nie może jednak w takim przypadku przekraczać 32 bitów. Dla załadowania 64-bitowego rejestru MMX parą rejestrów 32-bitowych trzeba uciekać się do następującej sekwencji: MOVD MMO, edx ;EDX -> MMO MOVD MM1, eax ;EAX -> MM1 PSLLQ MMO, 32 ;shift MMO o 32 POR MMO, MM1 ;MM1 or MM0 Pomiary wykazują, że P55C potrzebuje na wykonanie powyższej partii kodu trzech cykli zegarowych. Procesor MMX może istotnie grupować rozkazy, ale nie każdy z każdym. W tym wypadku połączeniu ulega drugi i trzeci z nich (dotyczą różnych rejestrów MMX). Przykłady zastosowań Rozszerzenia MMX dobrane zostały pod kątem aplikacji multimedialnych. Główny zakres zastosowań to filtry cyfrowe przetwarzające dane audio i video oraz dekodery MPEG, dotychczas domena specjalnie projektowanych do tego celu układów DSP. Optymalizacji MMX poddają się najchętniej algorytmy mające następujące wspólne cechy: •dane w formacie Integer, maksymalnie jedno lub dwubajtowe, •krótkie i często wywoływane pętle programowe, • częste operacje dodawania i mnożenia, • algorytmy bardzo czasochłonne, • możliwość realizacji równoległej. Tajemnica sukcesu (kilkunastokrotne skrócenie czasu pracy) nie leży zwykle w nowym, rewolucyjnym podejściu do tematu. O wiele istotniejsze jest sprytne rozdzielenie zmiennych, tak by wykorzystać możliwości wspomnianego przetwarzania równoległego. Blue-Box Skuteczność działania rozkazów MMX na danych typu video można najłatwiej zademonstrować na przykładzie tzw. Chroma Keying. W telewizji stosowany jest często mikser trickowy zwany Blue-Box, dzięki któremu prezenter przedstawiany jest na tle mapy pogody. W rzeczywistości postać prezentera występuje na tle jednorodnej planszy (najczęściej w kolorze niebieskim, stąd nazwa miksera). Pierwszym zadaniem komputera jest wytworzenie maski stanowiącej obrys postaci pierwszoplanowej. Przy pomocy maski wycina się we właściwym tle pustą przestrzeń, w którą wklejany jest obraz prezentera (rysunek 2.4). Algorytm przetwarza po cztery piksle jednocześnie (przy kolorach 16-bitowych). Dla wymodelowania maski wystarczy pojedynczy rozkaz PCMPEQW, który porównuje kolejne punkty obrazu (postać na niebieskim tle) z wzorcem koloru niebieskiego. Produktem wyjściowym jest dwuwartościowa mapa bitowa: w punktach tła instrukcja porównania zwraca 0xFFFFh a w pozostałych (postać) 0x0000h. Tak uzyskana maska jest produktem pośrednim, i służy do dwóch kolejnych operacji: instrukcją pand wycina się otwór w obrazie drugoplanowym (w naszym przykładzie mapa pogody) a rozkaz pandn izoluje samą postać prezentera. Te dwie części składowe montowane są w jedną całość przy pomocy instrukcji por. Przetwarzanie pliku WAV Innym klasycznym przykładem zastosowania techniki MMX jest przetwarzanie pliku w formacie WAV. Plik taki stanowi jednorodny ciąg słów 16 bitowych. Zakodowana informacja jest dźwiękiem stereofonicznym o jakości zbliżonej od płyty kompaktowej. Zadaniem programu jest przepuszczenie całej sekwencji przez filtr cyfrowy na przykład dla uwypuklenia wysokich tonów. Przetwarzanie polega na modyfikacji kolejnych elementów składowych ciągu. Filtr nie może działać ślepo i bez ograniczenia. Oddziaływanie na określone partie sekwencji wejściowej doprowadzi z pewnością do przekroczenia analogowych wartości granicznych co objawi się odczuwalnymi zniekształceniami. Poprzez wbudowany w instrukcje MMX mechanizm nasycenia algorytm może czuć się zwolniony z konieczności stałej kontroli. Przekroczenie limitu kosztuje dla każdego słowa co najmniej 3 operacje (porównanie, skok, ładowanie). Dodatkowy zysk na czasie wynika z faktu, iż przetwarzane jest 8 bajtów jednocześnie.( Rzeczywisty zysk na czasie można osiągnąć jeśli rozkazy MMX wykonywane są możliwie szybko, najlepiej w jednam cyklu zegarowym CPU. Warunek ten spełniony jest dla wszystkich instrukcji za wyjątkiem pmaddwd (dodawanie z mnożeniem), która potrzebuje 3 taktów.). * * * Rozdział 3. Układy pamięci PC Na początku rozwoju architektury PC jedynymi pamięciami były układy dynamiczne pracujące w trybie PM (Page Mode), a nieco później FPM (Fast Page Mode). W ślad za wzrostem prędkość procesorów następowała potrzeba skrócenia czasu dostępu do pamięci, co do dnia dzisiejszego stanowi główny mechanizm napędowy w tej dziedzinie. Zawsze tak się składało, że pamięć, a właściwie te jej odmiany, których niska cena uzasadniała powszechne użycie, nigdy nie nadążały za postępem w rozwoju samych procesorów. Teoretyczna moc obliczeniowa CPU redukowana jest poprzez hamujący wpływ wydłużonego czasu dostępu do pamięci. Najprostszym sposobem częściowej eliminacji tego niekorzystnego zjawiska jest wprowadzenie struktury wielostopniowej (początkowo dwustopniowej, a później trójstopniowej), w której to pamięć operacyjna (o stosunkowo długim czasie dostępu) połączona jest z procesorem poprzez pośrednią pamięć buforową (Cache) o czasie dostępu o rząd wielkości mniejszym. Buforowe pamięci podręczne są realizowane ze statycznych układów (Static RAM), dzielących się na asynchroniczne i synchroniczne: - Asynchroniczne pamięci statyczne (Asynchronous SRAM). Układy tego typu pojawiły się w komputerach PC w momencie wprowadzenia na rynek procesora 366, który mógł współpracować z pamięcią podręczną poziomu drugiego. Asynchroniczne pamięci statyczne były na tyle szybsze od układów DRAM by móc spełniać funkcje pamięci podręcznej (miały czasy dostępu rzędu kilkunastu ns), ale nie dość szybkie by być taktowane bezpośrednio zegarem CPU. W konsekwencji procesor i tak czekał na dane z pamięci podręcznej, tyle że krócej niż by to miało miejsce w przypadku bezpośredniego dostępu do pamięci głównej. Synchroniczne pamięci statyczne (Synchronous SRAM) z odmianami Burst/P-Burst - Burst-SRAM. Układy pamięciowe tego typu oznakowane były czasem dostępu w zakresie 8,5 ns - 12 ns. Dobre parametry przy odczycie (2-1-1-1) gwarantowane były jedynie przy założeniu, iż zegar magistrali pamięciowej nie przekracza częstotliwości 66 MHz. Burst-SRAM nie był jednak dostosowany do współpracy z magistralą 100 MHz bowiem parametry dostępu pogarszały się do wartości 3-2-2-2. - Pipelined-Burst-SRAM. Układy przewidziane do pracy z magistralami powyżej 66 MHz (75 MHz - 100 MHz a w specjalnych wykonaniach nawet do 133 MHz). W przedziale tym osiągane są parametry 3-1-1-1. Chipy PB-SRAM oznaczane są czasem dostępu z zakresu 4,5 ns - 8 ns. Pamięć operacyjna komputera PC to po dziś pamięć dynamiczna DRAM (Dynamie RAM). Technika i technologia przeszły w tym zakresie dosyć długą drogę rozwoju. W ślad za układami konwencjonalnymi pierwszej generacji podążały kolejne udoskonalane odmiany: PM, FPM, EDO, BEDO, SDRAM. W dziedzinie tej trwa nieprzerwany dynamiczny rozwój. Należy wspomnieć, iż w komputerze PC występują również pamięci innych typów. W pamięciach stałych EPROM przechowywane są procedury systemów operacyjnych. Pamięć tego typu programowana jest w zasadzie jednorazowo i (bez udziału dodatkowych urządzeń) nie można jej modyfikować. Od pewnego czasu jej miejsce zajmuje odmiana EEPROM, której zawartość da się w prosty sposób modyfikować a proces ten możliwy jest do przeprowadzenia przez samego użytkownika. Pamięci EEPROM obecne są już nie tylko jako nośniki programu BIOS płyty głównej. Spotkać je można w większości urządzeń peryferyjnych (kontrolery SCSI, modemy, karty sieciowe, dyski twarde, karty graficzne) a nawet w samych procesorach. Charakterystyczne jest, że zawartość pamięci E(E)PROM nie ulega zamazaniu po pozbawieniu ich napięcia zasilającego. Inaczej jest w przypadku pamięci konfiguracyj-nej komputera. Jej obwody zbudowane są w oparciu o statyczną pamięć CMOS, której komórki pamięci stanowią proste przerzutniki zbudowane z dwóch tranzystorów i kilku elementów pasywnych. Stan takiej komórki musi być podtrzymywany przez zewnętrzne źródło zasilania - tak też jest w komputerze PC: mały akumulator (podładowywany w czasie pracy systemu) zasila ponadto układ licznika symulujący zegar czasu rzeczywistego. Dalsza część tego rozdziału poświęcona jest wyłącznie pamięciom dynamicznym. Pamięci dynamiczne Pamięci dynamiczne mają za sobą dosyć długą drogę rozwojową. Głównym motorem postępu w tej dziedzinie były nieustające udoskonalenie procesorów - wraz z nimi rozwijała się cała towarzysząca im technika komputerowa. Architektura mikrokomputerów ma to do siebie, że połączenie między CPU a pamięcią operacyjną jest podstawowym kanałem informacyjnym, którym przesyłane jest (często nawet wielokrotnie tam i z powrotem) gro przetwarzanej informacji. Dla lepszego zrozumienia działania współczesnego PC warto prześledzić główne etapy rozwoju pamięci dynamicznych. Elementarną jednostką omawianych w tym rozdziale pamięci (komórką) jest prosta struktura półprzewodnikowa składająca się z tranzystora i kondensatora. Prostota konstrukcji pozwala na ciasne upakowanie ogromnej ilości tego rodzaju układów na stosunkowo małym płatku krzemu. Wadą jest ulotność ładunku zgromadzonego w takim mikroskopijnym kondensatorze. Dla utrzymania logicznego stanu komórki (l i O to kondensator naładowany lub nie) niezbędnym jest odświeżanie jej zawartości. Stąd też pochodzi nazwa: pamięci dynamiczne, bowiem układy tego typu nigdy nie odpoczywają. Bez względu na to czy pamięć jest w danym momencie wykorzystywana w cyklu zapisu lub odczytu, w jej wnętrzu trwa nieprzerwany ruch mający na celu utrzymanie „przy życiu" zgromadzonej informacji. Współczesne scalone układy pamięci dynamicznych zawierają w sobie wiele setek milionów pojedynczych komórek. Aby zapanować nad tym chaosem, grupuje się je w prostokątne formacje (macierze) o pewnej określonej dla danej konfiguracji liczbie wierszy i kolumn (XxY). Pojedyncza macierz nazywana jest płatem pamięciowym. Liczba płatów decyduje o szerokości szyny danych układu. Pojedynczy płat odpowiada organizacji XxYx1 bit. Aby osiągnąć szerokość 4-bitową potrzeba 4 płatów itd. Macierz pamięciowa stanowi serce scalonego układu pamięciowego ale nie jest jego jedynym elementem. Nie mniej ważną rolę odgrywają układy dekoderów adresujących daną komórkę, zestawy precyzyjnych wzmacniaczy sygnałów wyłapujące minimalne różnice napięć pomiędzy komórkami będącymi w stanie l i O, system buforów wejścia i wyjścia, układy sterowania analizujące stan końcówek sterujących oraz obwody implementujące mechanizmy odświeżania. Dostęp do takiego układu odbywa się w prosty i logiczny sposób. Przy pomocy sygnałów kontrolnych określa się tryb dostępu dla danego cyklu (zapis lub odczyt). Końcówki adresowe układu scalonego podlegają multipleksowaniu, co oznacza iż adres komórki przekazywany jest w dwóch porcjach (najpierw wiersz a potem kolumna). Stosownie do aktualnego trybu dostępu, do portu danych doprowadza informację (odczyt) lub odbiera (zapis). Tryb konwencjonalny Historycznie najstarszy tryb dostępu do pamięci dynamicznej to oddzielne adresowanie wiersza i kolumny dla każdego cyklu. Adres wiersza zdejmowany jest przez układ pamięciowy z szyny adresowej w momencie wykrycia opadającego zbocza sygnału sterującego -RAS (Rów Address Select). Po zatrzaśnięciu tego fragmentu adresu w rejestrze wejściowym następuje krótkotrwałe zwolnienie szyny adresowej po czym odkłada się na niej fragment adresu odpowiedzialny za numer kolumny. Adres ten wprowadzany jest do układu pamięciowego w momencie zdekodowania opadającego zbocza sygnału sterującego ~CAS (Column Address Select}. tdczyt Układ pamięciowy ocenia w momencie zdejmowania adresu kolumny również stan końcówki ~WE. Jeżeli jest on wysoki, rozpoznawany jest cykl odczytu i zawartość zaadresowanej komórki wyprowadzana jest na szynę danych. Zapis Jeżeli linia sterująca ~WE znajduje się na poziomie niskim, układ rozpoznaje cykl zapisu i pobiera dane z szyny danych. Tryb adresowania komórki jest taki sam jak w przypadku odczytu. FPM (Fast Page Mode) Tryb FPM oferuje pewne skrócenie czasu dostępu. Różnica w stosunku do trybu konwencjonalnego polega na uproszczeniu mechanizmu adresowania. Dostęp do dowolnej komórki pamięci operacyjnej PC nie odbywa się poprzez odczytanie (lub zapis) tylko tej jednej wartości. Szczegóły konstrukcyjne wynikające z samej architektury (magistrale) narzucają bardziej racjonalny styl postępowania: wymiana danych między pamięcią a resztą systemu odbywa się w porcjach po kilka bajtów na raz. Postępowanie takie nie jest pozbawione sensu zważywszy na fakt, iż przetwarzane przez PC kody (dane i programy) skupione są zwykle w pewnym spójnym wycinku przestrzeni adresowej i w dużej mierze przylegają do siebie. Przyjmując powyższe założenie, adres wiersza przekazuje się do układu pamięciowego tylko raz na cztery cykle dostępu, które razem tworzą swego rodzaju pakiet (Burst). Pozostałe trzy cykle dostępu mają domyślnie ten sam adres wiersza a tylko zmienny adres kolumny. Czas trwania poszczególnych cykli pakietu (mierzonych w jednostkach zegarowych magistrali) podaje się często w formie czterech liczb oddzielonych od siebie kreską, np. x-x-x-x. Pierwsza liczba informuje o czasie trwania pierwszego cyklu (jest z natury rzeczy większa od pozostałych, gdyż przekazywany jest adres wiersza i kolumny) a pozostałe odnoszą się do kolejnych seryjnych cykli dostępu w obrębie tego samego wiersza. Im liczby te są mniejsze, (optymalnie 1-1-1-1) tym wymiana danych przebiega w szybszym tempie. Pamięci FPM pozwalają na osiągnięcie w najlepszym razie stanu 5-3-3-3 (przy taktowaniu zegarem 66 MHz). Odczyt Linia kluczująca adresu wiersza ~RAS utrzymywana jest na poziomie niskim do czasu zakończenia ostatniego cyklu pakietu. Odczyt rozpoznawany jest dzięki utrzymywaniu linii ~WE na poziomie wysokim. Zapis Zapis nie różni się od odczytu niczym szczególnym prócz zmiany poziomu linii sterującej ~WE. Jej stan musi być utrzymywany na poziomie niskim. EDO (Extended Data Out) Pamięci dynamiczne EDO stanowią dalszy krok na drodze skrócenia czasu dostępu. Nie jest to może krok milowy, ale drobna poprawka w układach sterowania (a konkretnie buforach wyjściowych). W momencie wprowadzenia na rynek układy EDO były zdecydowanie droższe od pamięci konwencjonalnych. Ich szybkie rozpowszechnienie spowodowało zwiększony popyt i spadek cen. Dziś pamięci konwencjonalne są dużo droższe, bo produkowane w śladowych ilościach. Jak to często bywa, powszechną akceptację rynku zdobywają często rozwiązania nie tyle rewolucyjne co proste i tanie. Odczyt Charakterystyczne dla EDO jest to, iż aktualny cykl dostępu do pamięci może się rozpocząć przed zakończeniem cyklu poprzedniego, a dane utrzymywane są na wyjściu przez czas dłuższy niż w przypadku pamięci konwencjonalnej lub FPM. W trybie konwencjonalnym i FPM wzmacniacze wyjściowe odcinały dane w momencie wykrycia narastającego zbocza ~CAS. Parametry dostępu do EDO w trybie Burst mogą osiągać w optymalnych warunkach wartość 5-2-2-2. Zapis Jakiekolwiek korzyści płynące za zastosowania pamięci tego typu mogą się oczywiście objawiać jedynie w czasie realizacji cykli odczytu. Zapis do EDO nie różnie się niczym od dostępu do pamięci konwencjonalnej. BEDO (Burst EDO) Pamięci tego typu stanowią kombinację dwóch idei: wydłużenia czasu obecności danych na końcówkach wyjściowych (EDO) oraz strumieniowania (Pipelining). O BEDO można wspomnieć wyłącznie w aspekcie historycznym, gdyż mimo niewielkiego kosztu wprowadzonych poprawek (uzyskiwane efekty są niewspółmiernie większe) pamięci BEDO nie doczekały się nigdy szerokiej akceptacji, a w chwilę potem całkowicie wymarły. Główna przyczyna tego stanu rzeczy spoczywa w architekturze scalonych układów sterowników płyt głównych typu 430VX i 430TX (Intel) dominujących na rynku w momencie narodzin BEDO. Obydwa układy nastawione były od początku na pamięci synchroniczne (SDRAM) a wsparcie dla BEDO nie zostało w nich w ogóle zaimplemen-towane. Parametry Burst wynoszą dla BEDO 5-1-1-1 i sięgają wartości typowych dla pamięci synchronicznych. Osiąga się to dzięki uproszczonemu sposobowi adresowania. Adres przekazuje się tylko raz na cały poczwórny cykl Burst i odnosi się on do początku ob.-szaru. Pozostałe trzy adresy generowane są we wnętrzu układu. Sygnał ~CAS pełni od momentu przekazania adresu Cl funkcję zegara kluczującego a chip BEDO reaguje podobnie do pamięci SDRAM, udostępniając dane z trzech kolejnych komórek pamięci. Porównanie Różnice w trybie pracy czterech podstawowych typów asynchronicznych pamięci dynamicznych najlepiej jest zobrazować na wspólnym rysunku uwzględniającym wspólną skalę dla osi czasu (rysunek 3.8). SDRAM Architektura PC od dłuższego czasu domagała się szybszych pamięci. Mała przepustowość magistrali danych stawała się szczególnie bolesna w miarę wzrostu częstotliwości taktowania CPU. W chwili wprowadzenia procesorów Pentium II stało się oczywiste, że modele taktowane zegarem powyżej 350 MHz nie są w stanie efektywnie współpracować z magistralą pamięciową 66 MHz. Nie mniejszy nacisk wywoływało powołanie do życie podstawki Super 7, której specyfikacja dopuszczała podwyższenie przepustowości poza zakres oferowany przez szynę 66 MHz. Główny kłopot polegał na tym, że dotychczas stosowane pamięci nie dawały się dostosować do nowych wymogów - nie można było bezkarnie podnosić ich częstotliwości pracy. Układy pamięci PC BEDO R1/C1 Y R1/CU1 Y R1/CU2 Y R1/CU3 Pamięci dynamiczne SDRAM (S = snchroniczne) nie różnią się w swej naturze od innych pamięci dynamicznych: nośnikiem informacji jest nadal matryca komórek bazujących na kondensatorach i tranzystorach wykonanych w technice CMOS. Inny jest natomiast sposób sterowania taką matrycą oraz technika dostępu. Wszystkie sygnały sterujące SDRAM wyprowadzane są z jednego przebiegu zegarowego. Ułatwia to integrację pamięci w systemie (współpraca z magistralami) bowiem znacznie prościej jest utrzymać (mimo podwyższonych częstotliwości taktujących) i zagwarantować zaostrzone reżimy czasowe. Dostęp do pamięci SDRAM, jakkolwiek możliwy w klasycznym trybie pojedynczych cykli, ma miejsce z reguły w formie cykli zgrupowanych (Burst). Dostęp grupowy obejmuje swoim zasięgiem 2, 4, lub 8 kolejnych lokalizacji lub też rozciąga się na cały wiersz (Page)(Angielski termin Page nie oznacza co prawda w polskim tłumaczeniu wiersza tylko stronę, ale w oryginalnych opracowaniach na powyższy temat właśnie laki termin używany jest w tym kontekście. Zespól komórek adresowany tym samym (niezmiennym) adresem wiersza należy chyba nazwać wierszem a nie stroną, tym bardziej iż rodzi to szereg wątpliwości czy nie ma tu związku z terminem strona używanym nad wyraz często (i naturalnie w różnych znaczeniach) w obrębie tematyki logicznej organizacji pamięci.) . Adres początkowy grupy przenoszony jest w pierwszym cyklu wprowadzającym (Lead off). Reszta adresów określana jest w sposób domniemany a ich wytwarzaniem zajmuje się wewnętrzny licznik pamięci. Dostęp może mieć charakter sekwencyjny i przemierzać kolejne adresy logiczne (choć niekoniecznie zaczynać się na początku takiej czwórki, na przykład przyjmować formę l, 2, 3, 0) lub przebiegać według pewnego określonego szablonu (Interleave) na przykład w kolejności 2, 3, 0, l w obrębie grupy poczwórnej. Burst może być przerwany (przejście w tryb Suspencl) i ponownie wznowiony a jego poszczególne elementy opuszczone (sygnał DQM). Przed przystąpieniem do pracy układ SDRAM musi zostać zaprogramowany. Operacja ta dokonywana jest na polecenie BIOS-u i odbywa się zwykle w momencie włączenia komputera. W fazie tej do pamięci SDRAM przekazywane są informacje o charakterze konfiguracyjnym: długość i typ dostępu grupowego oraz niektóre parametry czasowe. Dane te umieszczane są w specjalnym rejestrze konfiguracyjnym (Mode Register}. Większość układów SDRAM podzielona jest wewnętrznie na niezależne bloki (zwykle 2 lub 4) nazywane bankami. Banki są na tyle autonomiczne, że można je wykorzystywać niezależnie od siebie. Pozwala to na zręczne ukrywanie niektórych opóźnień czasu dostępu, np. cyklu wprowadzającego (Lead Off- Rów Access Time} przy konieczności zmiany wiersza (Page Miss). Układ pozoruje wówczas tzw. wydłużony cykl grupowy (Extended Burst) oznaczany symbolicznie sygnaturą X-1-1-1-1-1-1-1. Problem odświeżania przeniesiony został całkowicie do wnętrza SDRAM a kontroler pamięci nie jest nim już obarczany. Każdy chip wyposażony jest we własny generator pobudzający w odpowiednim rytmie wszystkie wiersze matryc. SDRAM jest kolejnym krokiem naprzód w dziedzinie rozwoju układów pamięci ale z pewnością nie rozwiązuje wszystkich problemów i nie jest rozwiązaniem idealnym. Zalety tej techniki stają się widoczne (i mierzalne) w pewnych określonych warunkach. Czas opóźnienia mierzony od momentu przyłożenia adresu do momentu pojawienia się pierwszych danych jest nadal stosunkowo długi. Wynosi on około 5 cykli zegarowych czyli jest porównywalny z wartościami typowymi dla EDO i FPM. Biirst 5-1-1-1 możliwy był do osiągnięcia również przez BEDO, a więc technologię, która mogła wcześniej wejść do użycia. Różnica uwidacznia się dopiero przy wzroście częstotliwości taktowania magistrali powyżej 66 MHz. Technika EDO i FPM nie sięga tak wysoko. Pojedynczy cykl dostępu do SDRAM trwa przy częstotliwości 100 MHz tylko 10 ns, a Burst obejmujący swym zasięgiem cały wiersz pamięci dostarcza potężny strumień danych w tym właśnie tempie. Dla lepszego zrozumienia techniki SDRAM oraz zjawisk zachodzących we wnętrzu pamięci tego typu omówimy dokładniej konkretny układ scalony. Za przykład posłuży układ SDRAM firmy Texas Instruments oznaczony symbolem TMS664414. Uproszczony schemat blokowy tego układu zaprezentowany jest na rysunku 3.9. Prezentowany tu chip stanowi jednostkę pamięci o sumarycznej pojemności 64 Mb. Układ zorganizowany jest w formie czterech banków po 16 Mb każdy. Słowo pamięci ma wymiar 4 bitów (szerokość magistrali danych) co oznacza, iż każdy bank mieści 4 194 304 słów. Konfigurację takiego układu.określa się w skrócie jako 4Mx4x4. Linie zewnętrzne Układ zamknięty jest w obudowie TSOP-II i posiada 54 końcówki, do których doprowadzone są następujące sygnały: Tabela 3.1. Sygnały doprowadzone do układu TMS664414 Sygnały; Znaczenie; Sygnały; Znaczenie; DQ0 - DQ3; Data Input/Data Output; ~WE; Write Enable; DQM; Output Disable/Write Mask; ~CS; Chip Select; A0 - A9, Ali; Row/Col. Address; CLK; Clock Input; AIO(AP); Auto Precharge; CKE; Clock Enable; BSO, BS1; Bank Select; Vcc/Vss; Power Supply; ~RAS; Rów Address Select; Vcc-Q/Vss-Q; Power Supply for I/O Interface; ~CAS; Column Address Select; Vcc-Q/Vss-Q; Power Supply for I/O Interface; Magistrala danych Każdy z banków omawianego układu wyprowadza po cztery linie danych, co oznacza, że magistrala danych jest czterobitowa a banki są całkowicie niezależne. Maskowanie wejścia i wyjścia (DQM) Linia DQM pozwala na wycinanie pojedynczych elementów z pakietów Burst, na przykład a-b-x-d zamiast a-b-c-d. W normalnym trybie pracy stan linii DQM utrzymywany jest na niskim poziomie logicznym. Podniesienie poziomu DQM do wysokości logicznej l powoduje: • W trakcie trwania cyklu zapisu. Ignorowanie porcji danych, która byłaby przyjęta przez SDRAM w momencie wyznaczonym przez narastające zbocze sygnału CLK. • W trakcie trwania cyklu odczytu. Z sekwencji wyjściowej wycinana jest porcja danych, a w fazie czasowej, w której miałaby wystąpić, układ przechodzi w stan wysokiej impedancji. Magistrala adresowa i selektor banku Magistrala adresowa jest dwunastobitowa (AO - A11) i podlega multipleksowaniu - tymi samymi liniami podawane są różne fragmenty adresu w wydzielonych wycinkach czasowych. W pierwszej kolejności przekazuje się adres wiersza a w następnej adres kolumny(Dla objęcia całej przestrzeni adresowej układu nie jest konieczne podawanie dwóch słów adresowych o rozmiarze po 12 bitów dla wiersza i dla kolumny. Pojemność banku wynosi 4 MB, wiec wymagana liczba bitów adresowych ogranicza się do 22 (2^22= 4 M). W tym konkretnym przykładzie adres łamany jest na składniki 12/10 tj. 12 bitów na wiersz i 10 bitów na kolumnę). Szczególne znaczenie ma linia A10, która decyduje o trybie deaktywacji (Precharge) banku. Funkcja ta zostanie omówiona dokładniej w dalszej części rozdziału. Linie BSO i BS1 pozwalają na wybór do bieżącej operacji jednego z czterech banków układu. Selektory banków można przypisać do magistrali adresowej co powoduje jej wydłużenie do rozmiaru 14 bitów (AO - A13). Sygnały sterujące ~RAS, ~CAS, ~WE Oznaczanie aktualnej fazy podawania adresu dokonywane jest poprzez sygnały sterujące ~RAS (wiersz) i ~CAS (kolumna). Linia ~WE pełni rolę przełącznika zapis/odczyt. Linia ~CS (Chip Select) Stan końcówki ~CS testowany jest przy każdym narastającym zboczu CLK. Urządzenie pozostaje w stanie aktywnym jak długo poziom ~CS pozostaje na poziomie zera logicznego. Wykrycie poziomu l powoduje przejście w stan, w którym sterowniki DQ odcinają się od magistrali (stan wysokiej impedancji) a układ nie reaguje na żadne sygnały wejściowe za wyjątkiem ~CS. Funkcje sterujące oferowane przez ~CS znajdują zastosowanie w przypadku grupowania pojedynczych chipów SDRAM w moduły pamięci. Końcówki CLK (Clock) i ~CKE (Clock Enable) CLK jest centralnym zegarem kluczującym, do którego odnoszą się wszystkie inne sygnały. Układ pamięci SDRAM rejestruje stan wszystkich końcówek wejściowych w momencie wykrycia narastającego zbocza sygnału CLK. Poziom sygnałów na wyjściach układu należy również oceniać w tych samych momentach. ~CKE stanowi bramkę blokującą lub przepuszczającą sygnał zegarowy do wnętrza układu. W normalnym stanie pracy ~CKE znajduje się na wysokim poziomie logicznym. Wymuszenie stanu O na tym wejściu powoduje przejście SDRAM w tzw. stan uśpienia (Suspend Modę). Tryb ten charakteryzuje się znacznie zmniejszonym poziomem poboru mocy (o około 99%). Z punktu widzenia sygnałów sterujących następuje „zamrożenie" aktualnego stanu, przerwane zostają cykle zapisu i odczytu, układ ani nie wyprowadza ani nie przyjmuje danych. Przywrócenie normalnego działania następuje przy drugim zboczu CLK liczonym od momentu gdy ~CKE = 1. Rozkazy SDRAM Jak już wspomniano wcześniej, pamięć SDRAM wymienia dane z otoczeniem najchętniej w dużych porcjach, im są one większe tym wyższa jest skuteczność. Pod pewnymi względami chip SDRAM należy rozpatrywać jako pewien programowalny sterownik obsługujący swe własne matryce pamięciowe. Lista rozkazów tego sterownika obejmuje pozycje umożliwiające konfigurację urządzenia, operacje zapisu i odczytu oraz manipulacje bankami. W tabeli 3.2 zebrano kilka przykładowych rozkazów. j Faza programowania (Modę Set) Układ SDRAM musi zostać zaprogramowany przed podjęciem pracy. W trakcie tej operacji określa się następujące parametry: • Wymiar opóźnienia pomiędzy przyłożeniem adresu kolumny a wyprowadzeniem pierwszej porcji danych (CAS Latency). Parametr ten podaje się w jednostkach CLK, dopuszczalne wartości to 2 lub 3. Tabela 3.2. Przykładowe rozkazy sterujące układem SDRAM Rozkaz, ~CS; ~-RAS; ~CAS; -WE; BS1 (A 13); BS0 (A 12); A11; A10; A9-A0; Moder Register Set; 0; 0; 0; 0 0; 0; 0 0; Register Set Data w-0-0-13-12-ll-a-b3-b2-bl; Bank Precharge; 0; 0; 1;; 0; Numer banku:00:B0, 01:B1, 10:B2, 11: B3(dotyczy BSI i BSO); bez znaczenia; 0; bez znaczenia, Row Address Entry; 0; 0; 1; 1; Numer banku:00: B0, 01:B1, 10:B2, 11:B3(dotyczy BSI i BSO); r-11; r-10; r9-r8-r7-r6-r5-r4-r3-r2-r1-r0 Column Address Entry Read; 0; 1; 0; 1; Numer banku: 00: B0, 01:B1, 10: B2, 11: B3(dotyczy BSI i BSO); bez znaczenia; 0; c9-c8-c7-c6-c5-c4-c3-c2-cl-c0; - Długość pakietu (Burst LengtH), dopuszczalne wartości to 1,2, 4, (Omawiany w tym punkcie układ scalony nie dopuszcza „burstu" w wymiarze pełnego wiersza, opcja ta stoi często do dyspozycji w innych modelach pamięci SDRAM.). - Format pakietu - sekwencyjny lub z przeplotem Powyższe parametry przekazuje się w formie słowa 10-bitowego podawanego na liniach AO - A9. Układ SDRAM rozpoznaje fazę programowania, dzięki określonej konfiguracji sygnałów sterujących: -RAS = ~CAS = ~WE = 0. Dane na liniach AO - A9 sprawdzane są pod względem swej poprawności i jeśli nie spełniają przyjętych kryteriów zostają odrzucone a stan układu nie ulega zmianie. ( Tabela 3.3. Register Set Data BS1 (A13) - 0; BS0 (A12) - 0; A11 - 0; A10 - 0; A9 - Write Mode: 1=Burst Read & Single Write, 0=Burst Read & Brust Write; A8 - 0; A7 - 0; A6, A5, A4 - ~CAS Latency: 010=Latency=2, 011-Latency=3; A3 - Addressing Mode: 1=Interleave, 0=Sequential; A2, AI, AO - Brust Length: 000-Brust Length=1, 001-Brust Length=2, 010-Brust Length=4 011-Brust Length=8 111-Brust Length=FullPage; Aktywacja banku Omawiany układ podzielony jest na cztery banki. Banki mogą być wykorzystywane niezależnie. Właściwość ta ma kapitalne znaczenie z punktu widzenia ciągłości danych. SDRAM zorganizowany w formie pojedynczego banku zmuszony jest do wprowadzania przerw w momencie zmian adresu wiersza. Sekwencje aktywacja-deaktywacja (Prę-charge} to nic innego jak przygotowanie elektroniki do odczytu (podładowanie linii wiersza do poziomu połowy napięcia zasilania, operacja niezbędna dla zapewnienia prawidłowego funkcjonowania wzmacniaczy różnicowych). Układ rozpoznaje komendę aktywacji poprzez specyficzną kombinację sygnałów sterujących -RAS = O, ~CAS = l, ~WE = 1. Na liniach A12 i A13 kodowany jest numer banku 0-3. Naprzemienne (Interleave) pobudzanie banków maskuje czas potrzebny na przygotowanie wiersza. W danym momencie pracuje zawsze jeden z banków a wyprowadzana informacja płynie nieprzerwanym strumieniem w tempie określanym przez CLK. Zapis i odczyt Jak już wspomniano wcześniej, operacje zapisu i odczytu przebiegają najkorzystniej w formie pakietów (Bursf). Ponieważ parametry transmisji określone są w fazie programowania, wystarczy podać adres początkowy obszaru pamięci, a kolejne lokalizacje zdefiniowane są w sposób jednoznaczny. Adres wiersza ustalany jest w momencie aktywacji banku, tak że zmianie ulegają jedynie adresy kolumn, a konkretnie kilka ostatnich bitów (np. Burst 8-krotny: 3 bity): Przykład l Burst Length = 8 Burst Type = Ser. Adres początkowy kolumny: xxxx...x101 Adresy kolejne: xxx...x110 xxx...x111 xxx...xooo xxxx...x001 xxxx...x010 xxxx...x011 xxxx...x100 Przykład 2 Burst Length = 4 Burst Type = Seq. Adres początkowy kolumny: xxxx...xx10 Adresy kolejne: xxxx...xx11 xxxx...xx00 xxxx...xx01 Pierwsza porcja danych pakietu wyprowadzana jest zgodnie z definicją zawartą w fazie programowania (Read Latency lub inaczej CAS Latency): po 2 lub 3 cyklach zegarowych od momentu podania komendy i adresu kolumny. Cykl zapisu następuje bez opóźnienia (Write Latency = 0). Dane przejmowane są z magistrali wraz z wystąpieniem pierwszego narastającego zbocza CLK. Po zakończeniu fazy Burst bufory wyjściowe przechodzą automatycznie w stan wysokiej impedancji i układ jest odcinany od magistrali. Deaktywacja Podanie adresu nowego wiersza (aktywacja) musi zostać poprzedzone przez deaktywację danego banku. Bank można deaktywować na jeden z trzech sposobów: - Deaktywacja określonego banku o numerze kodowanym na bitach A12 i A13. Komenda ma postać ~RAS = O, ~WE = O, ~CAS = 1. Linia A10 utrzymywana jest na niskim poziomie. -• Jednoczesna deaktywacja wszystkich banków. Rozkaz deaktywacji z ustawionym bitem A10 = l odnosi się do wszystkich banków a stan linii A12 i A13 nie odgrywa roli. - Cykle zapisu i odczytu z przyrostkiem: Read-P i Write-P (P - Precharge). Różnią się od normalnych operacji poprzez ustawienie linii A10 - 1. Cykle takie przechodzą automatycznie w fazę deaktywacji banku i nie wymagają żadnych dodatkowych działań. Ustawienie A10 = 0 w momencie wydawania komendy zapisu lub odczytu pozostawia bank w stanie aktywnym. Odświeżanie Pamięci SDRAM są nadal pamięciami dynamicznymi i nie są zwolnione z obowiązku odświeżania zawartości. Sposób przeprowadzania tej operacji może być jednak różny: - Standard Refresh. Standardowy tryb pracy zapewniający „zgodność w dół". Odpowiada on, omawianemu przy okazji omawiania pamięci DRAM, trybowi RAS-Only. Kontroler generuje kolejno wszystkie adresy wierszy, dla każdego z banków oddzielnie. Cały cykl musi się zamknąć w oknie czasowym 64 ms. - Aulo Refresh. Komenda rozpoznawana jest poprzez kombinację -RAS = O, ~CAS = O, ~WE - 1. Ignorowany jest zarówno adres na liniach A0 - A11 jak i numer banku (A 12, A13). Układ generuje samorzutnie kolejne adresy i odświeża wiersz o aktualnym numerze we wszystkich 4 bankach jednocześnie. Jeśli kontroler pamięci wybrał ten tryb pracy, musi wydać 4 096 komend Auto Refresh w oknie czasowym nie przekraczającym 64 ms. Kolejne rozkazy mogą być rozłożone równomiernie w czasie lub zgrupowane w jeden duży pakiet. - Self Refresh. Pamięci SDRAM mają wbudowany mechanizm samo odświeżania. Do odświeżania w tym trybie dochodzi w momencie zablokowania napływu impulsów zegarowych (CKE = 0). Układ przechodzi w energooszczędny stan uśpienia a odświeżanie przebiega „w tle". Organizacje logiczne kostek SDRAM Układy pamięci SDRAM wytwarzane są w wielu odmianach. Matryca pamięciowa o określonym rozmiarze może być przecież zorganizowana na szereg różnorodnych sposobów (liczba wierszy i kolumn oraz ilość banków). Typowe formy organizacji zebrane zostały w tabeli 3.4. Organizacja logiczna kostki SDRAM jest decydującym czynnikiem w fazie projektowania modułu pamięci. Rozważmy dla przykładu piątą linijkę tabeli. Przestrzeń adresowa o wymiarze 4 M (czyli 2^22) pokrywana jest niezależnie od organizacji przy pomocy 22 bitów. Przy podziale na 4 banki każdy z nich ma po 16 Mb. W tym konkretnym przypadku układ poświęca 12 bitów adresowych na wiersz i 8 bitów adresowych na kolumnę. Ponieważ wyprowadzanych jest 16 linii danych, 4 takie chipy pozwalają utworzyć magistralę 64-bitową. W formacji jednorzędowej (lub inaczej jednostronnej) chipy ułożone są logicznie wzdłuż magistrali danych, a każda jej linia połączona jest z jednym i tylko jednym wyprowadzeniem kostki pamięci. Całkowita pojemność przykładowego modułu jednostronnego wynosi więc 256 Mb, czyli 32 MB. Moduł taki oznaczany jest jako 4Mx64 o rozkładzie R/B/C (Mapping: Row/Bank/Column) postaci 12/2/8. Inna forma organizacji to formacja dwurzędowa (dwustronna) - różnica staje się jasno widoczna podczas dokładnej analizy rysunku 3.12. Połączenie 8 takich samych kostek w układzie dwurzędowym tworzy moduł 64 MB 8Mx64 opisany rozkładem 12/2/8. Tabela 3.4. Typowe formy organizacji układów pamięci SDRAM Pojemność SDRAM, Organizacja; Liczba bitów adresowych na wiersze; Liczba bitów adresowych na kolumny; Liczba bitów adresowych na banki; Sumaryczna liczba bitów adresowych; 16 Mb, 1Mx16; 11 (A0-A10); 8(A0-A7); 1; 20; 2Mx8; 11 (A0-A10); 9(A0-A8); 1; 21; 4Mx4; 11 (A0-A10); 10(A0-A9); 1; 22; 64 Mb, 2Mx32; 11 (A0-A10); 8(A0-A7); 2; 21 4Mxl6; 13 (A0-A11); 8 (A0 - A7); 2; 22 4Mxl6; 13 (A0-A12); 8 (A0 - A7); 1; 22 8Mx8; 12(A0-A11); 9(A0-A8); 2; 23 8Mx8; 13 (A0-A12); 9(A0-A8); 1; 23 16Mx4; 12(A0-A11); 10(A0-A9); 2; 24 16Mx4; 13(A0-A12); 10(A0-A9); 1; 24 256 Mb, 8Mx32; 12(A0-A11); 9 (A0 - A8); 2; 23 8Mx32; 13(A0-A12); 8(A0-A7); 2; 23 16Mxl6; 13(A0-A12); 9(A0-A8); 2; 24 32Mx8; 13(A0-A12); 10(A0-A9); 2; 25 64Mx4; 13(A0-A12); 11 (A0-A9, A11; 2; 26 Moduły pamięci Nie tylko scalone układy pamięci, będące podstawowym budulcem modułów, ale również same moduły (ich formy zewnętrzne i organizacje logiczne) mają za sobą dosyć długą drogę rozwoju. Konieczność łączenia ze sobą poszczególnych chipów wynikała zawsze z chęci uzyskania szyny danych o pewnej szerokości: od 16 bitów w komputerach PC pierwszej generacji, poprzez 32, do 64 w chwili obecnej. Niezbędna liczba kostek określonego typu wynika z ich własnej organizacji - ilości wyprowadzanych linii danych. Dla zagwarantowania pokrycia magistrali 64-bitowej potrzeba co najmniej 16 kostek w formacie x4 lub 8 w formacie x8. Chęć uzyskania określonej pojemności narzuca resztę elementów architektury modułu. Jeżeli skorzystać z faktu, iż linie danych pojedynczych kostek można łączyć równolegle (i sterować sygnałami CS wybierających dany chip) można budować konstrukcje dwurzędowe. Nie jest rzeczą obojętną czy moduł zawiera szesnaście kostek x4 czy 8 kostek x8. Należy bowiem pamiętać, iż w grę wchodzą zagadnienia odnoszące się do niezawodności poszczególnych układów i jej wpływu na niezawodność modułu. W pewnych określonych konfiguracjach zmienia się prawdopodobieństwo wystąpienia błędów pojedynczych (łatwiejszych do wykrycia i usunięcia). Inaczej zachowuje się moduł, który przy każdym cyklu dostępu pobudza wszystkie obecne na płytce układy scalone a inaczej taki, który tylko połowę (pobór prądu, charakterystyka obciążenia, a w konsekwencji generacja zakłóceń na liniach danych i sterujących). Jak to zwykle bywa, wpływy niektórych z zasygnalizowanych tu czynników wykluczają się wzajemnie (korzystny rozkład obciążenia owocuje zwiększoną podatnością na błędy objawiające się jednocześnie na wielu końcówkach). Zagadnienia z powyższego zakresu znacznie wybiegają poza zakres tej książki a zainteresowanych czytelników odsyłam do materiałów publikowanych przez producentów modułów pamięci. W dalszej części rozdziału omówione zostaną trzy podstawowe typy modułów pamięci wykorzystywanych w technice PC - SIMM 30-końcówkowy, SIMM PS/2 (72-końcówkowy) oraz DIMM. Moduły SIMM-30 (SIP) Listwa połączeniowa płytki posiada 30 pól.. Pierwotnie jako elementy złącz stosowane były krótkie szpilki (odmiana SIP), a potem pola kontaktowe na płytce drukowanej. Znaczenie końcówek l - 30 było takie samo w formie SIP i SIMM. Moduły tego typu produkowane były w wersji z kontrolą parzystości lub bez. SIMM-30 dysponuje 11-bitową szyną adresową. Dwukierunkowa 8-bitowa magistrala danych uzupełniana jest dwiema dodatkowymi liniami DP-In i DP-Out stanowiącymi dostęp do komórki przechowującej bit parzystości. Linie kluczowania adresu wiersza (~RAS) wszystkich komórek danych i parzystości połączone są równolegle. Sygnał kluczowania kolumn wyprowadzany jest dwukrotnie: raz jako wspólna linia wszystkich komórek danych (~CAS) i oddzielnie dla komórki parzystości (~PCAS). Styk; Oznaczenie 1; Vcc 2; ~CAS 3; DQO 4; AO 5; A1 6; DQ1 7; A2 8; A3 9; GND 10; DQ2 11; A4 12; A5 13; DQ3 14; A6 15; A7 16; DQ4 17; A8 18; A9 19; A10 20; DQ5 21; ~WE 22; GND 23; DQ6 24; NC 25; DQ7 26; DP-Out 27; ~RAS 28; ~PCAS 29; DP-In 30; Vcc Tabela 3.5. Pola kontaktowe modułu SIMM-30 w wersji z bitem parzystości Moduły SIMM-30 królowały na płytach głównych procesorów x86 - x486, przy czym dla osiągnięcia wymaganej szerokości magistrali (16-bitów) konieczna była obecność dwóch takich jednostek. Na początku wytwarzano wersje o pojemności 256 kB, później wyłącznie l MB lub 4 MB. Większe jednostki pamięciowe nigdy nie były produkowane. Najczęściej spotykane konfiguracje omawianych modułów przedstawione zostały na rysunku 3.13. Płytka o pojemności całkowitej 4 MB zawierała 8 (bez parzystości) lub 9 (z parzystością) kostek 4 Mb w organizacji 4Mx1. Płytki l MB montowane były przeważnie z dwóch typów pamięci DRAM: 4 Mb (dane) i l Mb (parzystość). Symboliczna organizacja logiczna przykładowych modułów przedstawiona jest na rysunku 3.14. Moduły SIMM PS/2 Moduły tego typu zostały skonstruowane w celu zaspokojenia wymagań procesorów z magistralą 32-bitową. Produkowane były zarówno w wersji bez bitów parzystości (a wśród nich FPM i EDO) jak i w formie 36-bitowej. Wysokość samej płytki może być różna w zależności od sumarycznej liczby zainstalowanych na niej układów scalonych. SIMM PS/2 bez parzystości (FPM i EDO) Moduł wyprowadza magistralę danych DQO - DQ31 o szerokości 32-bitów, bez dodatkowych linii dla parzystości. Magistrala adresowa jest 12-bitowa. Specyfikacja przewiduje cztery oddzielne linie ~RAS i cztery oddzielne linie ~CAS. Fakt ten pozwala na stosowanie wielu typów scalonych układów pamięciowych o przeróżnych organizacjach. Jako przykład konkretnej realizacji modułów SIMM PS/2 opisane zostaną dwie konstrukcje. Pierwsza z nich to produkt firmy Texas Instruments noszący oznaczenie TM497FBK32H. Pojemność całkowita wynosi w tym wypadku 16 MB w architekturze jednostronnej (Single Sided). Płytka zawiera 8 kostek 16 Mb EDO-DRAM opisanych symbolami TMS417409 w organizacji 4Mx4. Odświeżanie odbywa się w cyklu 32 ms (2K). Schemat blokowy omawianego modułu przedstawiony jest na rysunku 3.16. Tabela 3.6. Pola kontaktowe modulu SIMM PS/2 1; Vss 2; DQ0 3; DQ16 4; DQ1 5; DQ17 6; DQ2 7; DQ18 8; DQ3 9; DQ19 10; Vcc 11; Puste 12; A0 13; A1 14; A2 15; A3 16; A4 17; A5 18; A6 19; A10 20; DQ4 21; DQ20 22; DQ5 23; DQ21 24; DQ6 25; DQ22 26; DQ7 27; DQ23 28; A7 29; Puste (A11) 30; Vcc 31; A8 32; A9 33; ~RAS3 34; ~RAS2 35; Puste 36; Puste 37; Pust 38; Puste 39; Vss 40; ~CAS0 41; ~CAS2 42; ~CAS3 43; ~CAS1 44; ~RASO 45; ~RAS1 46; Puste 47; ~WE 48; Puste 49; DQ8 50; DQ24 51; DQ9 52; DQ25 53; DQ10 54; DQ26 55; DQ11 56; DQ27 51; DQ12 58; DQ28 59; Vcc 60; DQ29 61; DQ13 62; DQ30 63; DQ14 64; DQ31 65; DQ15 55; DQ11 56; DQ27 51; DQ12 58; DQ28 59; Vcc 60; DQ29 61; DQ13 62; DQ30 63; DQ14 64; DQ31 65; DQ15 66; PRD5 67; PRD1 68; PRD2 69; PRD3 70; PRD4 71; Puste 72; Vss Tabela 3.7. Sygnały doprowadzone do modułu SIMM PS/2 Sygnał; Znaczenie; Wejście/Wyjście; Liczba DQ0 - DQ31; Data Input/Data Output; Wejście/Wyjście; 32 A0 - A11; Address; Wejście; 12 ~RASO - ~RAS3; Row Address Strobe; Wejście; 4 ~CASO - ~CAS3; Column Address Strobe; Wejście; 4 ~WE; Read/Write; Wejście; 1 PRD1 - PRD5; Presence Detect; Wyjście; 5 Vcc; +5V; Zasilanie; 3 Vss; GND; Zasilanie; 3 Puste; 8 Najważniejszymi parametrami charakteryzującymi moduł są .czasy dostępu. Mamy tu zwykle na myśli T#RAC (Access Timefrom ~RAS). Stanowi on miarę opóźnienia wprowadzanego przez moduł od momentu przyłożenia adresu wiersza do pojawienia się danych. Wielkość tego współczynnika leżała zwykle w przedziale 50 ns - 80 ns, wartością typową było 70 ns. Dużo mniejszy przedział czasowy wyznacza współczynnik T#CAC (Access Time from ~CAS) reprezentujący okres oczekiwania na dane mierzony od opadającego zbocza ~CAS. Typowe wartości mieszczą się w zakresie 15 ns - 20 ns Drugi przykład to SIMM-32MB-EDO tym razem jednak jako struktura dwustronna (Double Sided). Produkt firmy Hyundai (rysunek 3.17) nosi oznaczenie HYM 532814A i zbudowany jest w oparciu o 16 kostek 16 Mb w organizacji 4Mx4 (HY 5117404). Organizacji dwustronnej nie należy mylić z fizyczną obecnością kostek pamięciowych na obydwu stronach płytki drukowanej. Chodzi tu raczej o fakt równoległego łączenia końcówek I/O. W przykładowym module 32 MB do każdej linii magistrali danych modułu podłączone są po dwie linie z dwóch niezależnych kostek DRAM. Strony zaznaczone są symbolicznie w formie dwóch rozdzielnych zakreskowanych obszarów na rysunku 3.17 (strona-1 i strona-2). Sposób grupowania końcówek ~RAS i ~CAS po-szczególnych kostek i przyporządkowywania ich liniom ~RASO - ~RAS3 oraz ~CASO - ~CAS3 jest inny w modułach o organizacji dwustronnej a inny w modułach jednostronnych. Różnice te zebrane są w tabeli 3.8. Tabela 3.8. Grupowanie końcówek -RAS i -CAS w modułach SIMM PS/2 Bajt;Organizacja jednostronna:RAS - CAS;Organizacja dwustronna:RAS strona-1 - RASstrona-2;CAS; DQ0 - DQ7; ~RAS0 - ~CAS0; ~RAS0 - ~RAS1; ~CAS0; DQ8-DQ15; ~RAS0 - ~CAS1; ~RAS0 - ~RAS1; ~CAS1; DQ16-DQ23; ~RAS2 - ~CAS2; ~RAS2 - ~RAS3; ~CAS2; DQ24 - DQ31; ~RAS2 - ~CAS3; ~RAS2 - ~RAS3; ~CAS3; SIMM PS/2 36-bitowy Tabela 3.9. Pola kontaktowe modułu SIMM PS/2 z kontrolą parzystości Styk; Oznaczenie 1; Vss 2; DQ0 3; DQ18 4; DQ19 6; DQ2 7; DQ20 8; DQ3 9; DQ21 10; Vcc 11; Puste; 12; A0 13; A1 14; A2 15; A3 16; A4 17; A5 18; A6 19; A10 20; DQ4 21; DQ22 22; DQ5 23; DQ23 24; DQ6 25; DQ24 26; DQ7 27; DQ25 28; A7 29; A11 30; Vcc 31; A8 32; A9 33; ~RAS3 34; ~RAS2 35; DQ26 36; DQ8 37; DQ17 38; DQ35 39; Vss 40; -CASO 41; -CAS2 42; -CAS3 43; -CAS1 44; -RAS0 45; -RAS1 46; Puste 47; -WE 48; Puste 49; DQ9 50; DQ27 51; DQ10 52; DQ28 53; DQ11 54; DQ29 55 DQ12 56; DQ30 57; DQ13 58; DQ31 59; Vcc 60; DQ32 61; DQ14 62; DQ33 63; DQ15 64; DQ34 65; DQ16 66; Puste 67; PRD1 68; PRD2 69; PRD3 70; PRD4 71; Puste 72; Vss Proszę zwrócić uwagę, iż na skutek wprowadzenia dodatkowych końcówek numeracja linii magistrali danych od DQ7 wzwyż ulega zmianie (porównaj tabelę 3.6 i 3.9). Bit kontroli parzystości pierwszego bajtu to DQ8, bajt drugi rozpoczyna się od DQ9 i zakończony jest bitem kontrolnym DQ17 itd. Końcówka 66 (PRD5) ma znaczenie wyłącznie w modułach bez parzystości, dla rozróżnienia modułu FPM od EDO. W niektórych komputerach IBM (niekoniecznie opartych na architekturze PC) stosowane są moduły SIMM z jednym lub nawet dwoma dodatkowymi bitami ECC na każdy bajt danych (SIMM ECC x36 i x40). Rozpoznanie odbywa się w oparciu o stan końcówek 48 i 11. Tabela 3.10. Sygnały doprowadzone do modułu SIMM PS/2 z kontrolą parzystości Sygnał; Znaczenie; Wejście/Wyjście;; Liczba; DQ0 - DQ35; Data Input / Data Output; Wejście/Wyjście; 36; A0 - A11; Address; Wejście; 12; -RASO - -RAS3; Row Address; Strobe; Wejście; 4; -CASO - -CAS3; Column Address Strobe; Wejście; 4; ~WE; Read / Write; Wejście; 1; PRD1 - PRD4; Presence Detect; Wyjście; 4; Vcc; +5V; Zasilanie; 3; Vss; GND; Zasilanie; 3; Puste; 5; System rozpoznawania modułów SIMM Identyfikacja modułu pamięci to zadanie spoczywające na programie BIOS w początkowej fazie konfiguracji systemu. Spośród szeregu możliwych kombinacji organizacji (jednostronne, dwustronne), rozmiaru, czasów dostępu i typu (EDO, FPM, z parzystością lub bez) trzeba wybrać tą jedną i właściwie zaprogramować układy sterujące płyty głównej (Chip-Set). Ponieważ zadanie to przypomina równanie z wieloma niewiadomymi, próbuje się wyeliminować przynajmniej część z nich podsuwając systemowi BIOS kilka (w miarę pewnych) informacji. Dane te przekazywane są za pomocą pięciu końcówek rozpoznawczych PRD1 - PRD5. Producent modułu łączy daną końcówkę z masą (0) lub pozostawia wolną (1). Sposób kodowania przedstawiony jest w tabeli 3.11. Tabela 3.11. Znaczenie końcówek rozpoznawczych PRD1 - PRD5 PRD1(#67) - PRD2 (#68); PRD3 (#69) - PRD4(#70); PRD5 (#66); Pojemność modułu; Czas dostępu; Typ modułu; 00-4MB lub 64 MB; 00-50nslub l00ns; 0-EDO; 01-lMBlub 16 MB; 01 -70ns; 1-FPM; 10-2MBlub32MB; 10-80ns; 11- 8 MB; 11 - 60 ns; Moduły DIMM Listwa połączeniowa modułów DIMM jest dwustronna i posiada w sumie 168 pól kontaktowych. Specyfikacja nie ogranicza ich zastosowania do konkretnego typu pamięci. Mogą one stanowić nośnik klasycznych pamięci DRAM-FPM, EDO oraz SDRAM. System specjalnych wcięć (kluczy) pozwala na mechaniczne wyróżnienie i zakwalifikowanie modułu do odpowiedniej klasy w obrębie jednej z dwóch grup: • Grupa pierwsza: pamięci buforowane/niebuforowane. • Grupa druga: napięcie zasilania 3,3V/5V. W dalszej części rozdziału przedstawimy pokrótce te typy modułów DIMM, które przynajmniej przez pewien czas odgrywały jakąś rolę na rynku komputerów PC. Buforowane DIMM DRAM Tabela 3.12. Pola kontaktowe buforowanego modułu DIMM DRAM Styk:Przód,Tył; 8B(x64):Przód-Tył; 8B+1bECCB (x72):Przód-Tył; 8B+2bECCB (x80):Przód-Tył 1/85; Vss Vss; Vss Vss; Vss Vss 2/86;DQ0DQ36; DQ0DQ36;DQ0DQ40 3/87;DQ1DQ37;DQ1DQ37;DQ1DQ4I 4/88;DQ2DQ38;DQ2DQ38;DQ2DQ42 5/89;DQ3DQ39;DQ3DQ39;DQ3DQ43 6/90;VddVdd;VddVdd;VddVdd 7/91;DQ4DQ40;DQ4DQ40;DQ4DQ44 8/92;DQ5DQ41;DQ5DQ4I;DQ5DQ45 9/93;DQ6DQ42;DQ6DQ42;DQ6DQ46 10/94;DQ7DQ43;DQ7DQ43;DQ7DQ47 11/95;PusteDQ44;DQ8DQ44;DQ8DQ48 12/96;VssVss;VssVss;VssVss 13/97;DQ9DQ45;DQ9DQ45;DQ9DQ49 14/98;DQ10DQ46;DQ10DQ46;DQ10DQ50 15/99;DQ11DQ47;DQ11DQ47;DQ11DQ51 16/100;DQ12DQ48;DQ12DQ48;DQ12 DQ52 17/101;DQ13DQ49;DQ 13DQ49;DQI3 DQ53 18/102;VddVdd;VcldVdd;VdclVdd 19/103;DQ14DQ50;DQ14DQ50;DQ14 DQ54 20/104;DQ15DQ51;DQ15D05I;DQ15 DQ55 21/105;DQ 16DQ52;DQ16DQ52;DQ16 DQ56 22/106;PustePuste;DQI7DQ53;DQ17DQ57 23/107;VssVss;VssVss;VssVss 24/108;PustePuste;PustePuste;DQI8DQ58 25/109;PustePuste;PustePuste;DQ19DQ59 26/110;VddVdd;VddVdd;VddVdd 27/111;-WE0Puste;•-WEOPuste;-WEO Puste 28/112;-CAS0-CAS1;-CASO-CAS1;-CASO-CAS1 29/113;-CAS2-CAS3;PustePuste;Puste Puste 30/114;-RAS0-RAS1;-RASO-RAS1;-RAS RAS1 31/115;-OE0Puste;-OEOPuste;-OEOPuste 32/116;VssVss;VssVss;VssVss 33/117;A0A1;A0A1;A0A1 34/118;A2A3;A2A3;A2A3 35/119;A4A5;A4A5;A4A5 36/120;A6A7;A6A7;A6A7 37/121;A8A9;A8A9;A8A9 38/122;A10A11;A10A11;A10A11 39/123;A12A13;A12A13;A12A13 40/124;VddVdd;VddVdd;VddVdd 41/125;PustePuste;PustePuste;PustePuste 42/126;Zarezer. B0;Zarezer. B0;Zarezer. B0 43/127; Vss Vss; Vss Vss; Vss Vss 44/128; -OE2 Puste; -OE2 Puste; ~OE2 Puste 45/129; -RAS2 -RAS3; -RAS2 -RAS3; -RAS2 -RAS3 46/130;-CAS4-CAS5;-CAS4-CAS5; -CAS4 -CAS5 47/131;-CAS6-CAS7;PustePuste; Puste Puste 48/132;-WE2-PDE;-WE2~PDE;-WE2-PDE49/133;VddVdd;VddVdd; VddVdd50/134;PustePuste;PustePuste;DQ20DQ6051/135;PustePuste;PustePuste;DQ2IDQ6152/136;DQ18 1DQ54;DQI8DQ54;DQ22DQ62 53/137;DQ19DQ55;DQ19DQ55;DQ23DQ63 54/138;VssVss;VssVss;VssVss 55/139; DQ20 DQ56; DQ20 DQ56; DQ24 DQ64 56/140;DQ21DQ57;DQ21DQ57;DQ25DQ65 57/141;DQ22DQ58; DQ22DQ58;DQ26DQ66 58/142;DQ23DQ59;DQ23DQ59;DQ27DQ67 59/143;VddVdd;VddVdd;VddVdd60/144;DQ24DQ60;DQ24DQ60; DQ28DQ68 61/145;PustePuste;PustePuste;PustePuste62/146;PustePuste;PustePuste;PustePuste63/147;PustePuste;PustePuste;PustePuste64/148;PustePuste;PustePuste;PustePuste65/149;DQ25DQ61;DQ25DQ61;DQ29DQ69 66/150;PustePuste;DQ26DQ62;DQ30DQ70 67/151;DQ27DQ63;DQ27DQ63;DQ31DQ7I 68/152;VssVss;VssVss;VssVss 69/153; DQ28 DQ64; DQ28 DQ64; DQ32 DQ72 70/154;DQ29DQ65;DQ29DQ65;DQ33DQ73 71/155;DQ30DQ66;DQ30DQ66;DQ34DQ74 72/156;DQ3IDQ67;DQ31DQ67;DQ35DQ75 73/157;VddVdd;VddVdd;VddVdd74/158;DQ32DQ68;DQ32DQ68;DQ36 DQ76 75/159;DQ33DQ69;DQ33DQ69;DQ37 DQ77 76/160;DQ34DQ70;DQ34DQ70;DQ38 DQ78 77/161;PustePuste;DQ35DQ71;DQ39 DQ79 78/162;VssVss;VssVss;VssVss 79/163;PD1PD2;PD1PD2;PD1PD280/164;PD3PD4;PD3PD4;PD3PD481/165;PD5PD6;PD5PD6;PD5PD682/166;PD7PD8;PD7PD8;PD7PD883/167;ID01D1;ID0ID1;D0ID184/168;VddVdd;VddVdd;VddVdd W modułach buforowanych lewy klucz znajduje się w pozycji centralnej. Klucz środkowy przyjmuje pozycję centralną w modułach wymagających zasilania 3,3V. Przesunięcie klucza centralnego na lewo informuje o konieczności zasilania napięciem 5V. Podstawki DIMM mają w odpowiednich miejscach wystające karby, tak by mogły przyjąć tylko dostosowane do siebie moduły. Szerokość magistrali danych wyprowadzanej z modułu może sięgać 80 bitów (tyle maksymalnie przewiduje specyfikacja), nie podlega ona jednak buforowaniu w przeciwieństwie do większości sygnałów kontrolnych i sterujących (wyjątek stanowią linie -RAS, które również nie są buforowane). Tabela 3.13. Sygnały doprowadzone do buforowanego modułu D/MM DRAM Sygnał; Znaczenie; Wejście/Wyjście; Liczba DQ0 - DQ79; Data Input/Data Output; Wejśćie/ Wyjśćie; 80 A1- A13, A0, B0; Address (buforowane); Wejście; 15 -RAS0 - -RAS3; Rów Address Strobe; Wejście; 4 -CAS0 - -CAS7; Column Address Strobe (buforowane); Wejście; 8 ~WE0, ~WE2; Read / Write (buforowane); Wejście;2 ~OE0, ~OE2; Output Enable (buforowane); Wejście; 2 PD1 - PD8; Presence Detect (buforowane); Wyjście; 8 PDE; Presence Detect Enable; Wejście; 1 Vdd; +3,3V (+5V); Zasilanie; 16 Vss; GND; Zasilanie; 16 1D0 - 1D1; ID Bits; Wejście/Wyjście; 2 Zarezerwowane; 14 Niebuforowane DIMM DRAM Klucz lewy przesunięty jest w prawo, co identyfikuje DIMM jako niebuforowany. Mechanizm oznaczania napięcia zasilającego (klucz centralny) pozostaje bez zmian - pozycja centralna oznacza 3,3V, a przesunięcie w lewo 5V. W niebuforowanych modułach DIMM wszystkie sygnały z poszczególnych układów scalonych doprowadzane są bezpośrednio do listwy kontaktowej. Tabela 3.12. Pola kontaktowe buforowanego modułu DIMM DRAM Styk:Przód,Tył; 8B(x64):Przód-Tył; 8B+1bECCB (x72):Przód-Tył; 8B+2bECCB (x80):Przód-Tył 1/85; Vss Vss; Vss Vss; Vss Vss 2/86;DQ0DQ32; DQ0DQ32;DQ0DQ32 3/87;DQ1DQ33;DQ1DQ33;DQ1DQ33 4/88;DQ2DQ34;DQ2DQ34;DQ2DQ34 5/89;DQ3DQ35;DQ3DQ35;DQ3DQ35 6/90;VddVdd;VddVdd;VddVdd 7/91;DQ4DQ36;DQ4DQ36;DQ4DQ36 8/92;DQ5DQ37;DQ5DQ37;DQ5DQ37 9/93;DQ6DQ38;DQ6DQ38;DQ6DQ38 10/94;DQ7DQ39;DQ7DQ39;DQ7DQ30 11/95;PusteDQ40;DQ8DQ40;DQ8DQ40 12/96;VssVss;VssVss;VssVss 13/97;DQ9DQ41;DQ9DQ41;DQ9DQ41 14/98;DQ10DQ42;DQ10DQ42;DQ10DQ42 15/99;DQ11DQ43;DQ11DQ43;DQ11DQ43 16/100;DQ12DQ44;DQ12DQ44;DQ12DQ44 17/101;DQ13DQ45;DQ 13DQ45;DQI3DQ45 18/102;VddVdd;VddVdd;VddVdd 19/103;DQ14DQ46;DQ14DQ46;DQ14DQ46 20/104;DQ15DQ47;DQ15D047;DQ15DQ47 21/105;PustePuste;CB0CB4;CB0CB4 22/106;PustePuste;CB1CB5;CB1CB5 23/107;VssVss;VssVss;VssVss 24/108;PustePuste;PustePuste;CB8CB12 25/109;PustePuste;PustePuste;CB9CB13 26/110;VddVdd;VddVdd;VddVdd 27/111;-WEZarez.;-WEZarez.;-WEZarez. 28/112;-CAS0-CAS1;-CASO-CAS1;-CASO-CAS1 29/113;-CAS2-CAS3;PustePuste;PustePuste 30/114;-RAS0-RAS1;-RASO-RAS1;-RASO-RAS1 31/115;-OE0Zarez.;-OEOZarez.;-OEOZarez. 32/116;VssVss;VssVss;VssVss 33/117;A0A1;A0A1;A0A1 34/118;A2A3;A2A3;A2A3 35/119;A4A5;A4A5;A4A5 36/120;A6A7;A6A7;A6A7 37/121;A8A9;A8A9;A8A9 38/122;A10A11;A10A11;A10A11 39/123;A12A13;A12A13;A12A13 40/124;VddVdd;VddVdd;VddVdd 41/125;VddZarez.;VddZarez.;Vdd Zarez. 42/126;Zarezer. Zarezer.; Zarezer. Zarezer.; Zarezer. Zarezer. 43/127; Vss Vss; Vss Vss; Vss Vss 44/128; -OE2 Zarezer.; -OE2 Zarezer.; ~OE2 Zarezer. 45/129;-RAS2-RAS3;-RAS2-RAS3; -RAS2 -RAS3 46/130;-CAS2-CAS6;-CAS2-CAS6; -CAS2 -CAS6 47/131;-CAS3-CAS7;-CAS3-CAS7; -CAS3 -CAS7 48/132;-WE2Zarez.;-WE2Zarez.;-WE2Zarez. 49/133;VddVdd;VddVdd; VddVdd 50/134;PustePuste;PustePuste;CB10CB14 51/135;PustePuste;PustePuste;CB11CB15 52/136;PustePuste;CB2CB6;CB2CB6 53/137;PustePuste;CB3CB7;CB3CB7 54/138;VssVss;VssVss;VssVss 55/139; DQ16 DQ48; DQ16 DQ48; DQ16 DQ48 56/140;DQ17DQ49;DQ17DQ49;DQ17DQ49 57/141;DQ18DQ50; DQ18DQ50;DQ18DQ50 58/142;DQ19DQ51;DQ19DQ51;DQ19DQ11 59/143;VddVdd;VddVdd;VddVdd 60/144;DQ20DQ52;DQ20DQ52; DQ20DQ52 61/145; Puste Puste; Puste Puste; Puste Puste 62/146;Zarez.Zarez.;Zarez.Zarez.;Zarez.Zarez. 63/147;PustePuste;PustePuste;PustePuste 64/148;VssVss;VssVss;VssVss 65/149;DQ21DQ53;DQ21DQ53;DQ21DQ53 66/150;DQ22DQ54;DQ22DQ54;DQ22DQ54 67/151;DQ23DQ55;DQ23DQ55;DQ23DQ55 68/152;VssVss;VssVss;VssVss 69/153; DQ24 DQ56; DQ24 DQ56; DQ24 DQ56 70/154;DQ25DQ57;DQ25DQ57;DQ24DQ57 71/155;DQ26DQ58;DQ26DQ58;DQ26DQ58 72/156;DQ27DQ59;DQ27DQ59;DQ27DQ59 73/157;VddVdd;VddVdd;VddVdd 74/158;DQ28DQ60;DQ28DQ60;DQ28DQ60 75/159;DQ20DQ61;DQ29DQ61;DQ29DQ61 76/160;DQ30DQ62;DQ30DQ62;DQ30DQ62 77/161;DQ31DQ63;DQ31DQ63;DQ31DQ63 78/162;VssVss;VssVss;VssVss 79/163;PustePuste;PustePuste;PustePuste 80/164;PustePuste;PustePuste;PustePuste 81/165;PusteSA0;PusteSA0;PusteSA0 82/166;SDASA1;SDASA1;SDASA1 83/167;SCLSA2;SCLSA2;SCLSA2 84/168;VddVdd;VddVdd;VddVdd Tabela 3.15. Sygnały doprowadzone do niebuforowanego modułu DIMM DRAM Sygnał Znaczenie Wejście/Wyjście Liczba DQ0 - DQ63 Data Input/Data Output Wejście/Wyjście 64 A0 - A13AddressWejście14 -RAS0 - -RAS3 Rów Address Strobe Wejście 4 -CAS0 - -CAS7 Column Address Strobe Wejście 8 ~WE0, ~WE2 Read/Write Wejście 2 ~OE0, ~OE2 Output Enable Wejście 2 SDA, SCL, SAO-SA2 Serial Presence Detect Wejście (SDA: Wejście/Wyjście)5 Vdd+3,3V (+5V)Power17 Vss GND Power 18 CB0 - CB15 Parity Check Bit Wejście/Wyjście 16 Końcówki puste9 Zarezerwowane 9 Niebuforowane DIMM SDRAM W formie DIMM wytwarzane są również moduły pamięciowe SDRAM. Poszczególne sygnały można połączyć w następujące logiczne grupy zestawione w tabeli 3.16. Tabela 3.16. Sygnały doprowadzone do niebuforowanego modułu DIMM DRAM Sygnał; Znaczenie; Wejście/Wyjście; Liczba DQ0-DQ63, CB0-CB15; Data Input / Data Output; Wejście/Wyjście; 80 A0 - A13, BA0-BA1; Address; Wejście; 16 ~S0-~S3,~RAS, ~CAS, ~WE, CK0-CK3, CKE0-CKE1, DQMBO - DQMB7; Control; Wejście; 21 SDA, SCL, SA0 - SA2; Serial Presence Detect; Wejście; (SDA: Wejście/Wyjście); 5 WP; Write Protect (SPD EEPROM);Wejście; 1 Vdd; +3,3V (+5V); Zasilanie; 17 Vss; GND; Zasilanie; 18 Vref; Reference Voltage; Wejście; 2; Końcówki puste i zarezerwowane; 8 Topologia listwy kontaktowej modułów DIMM zawierających kostki SDRAM jest inna niż DIMM grupujących układy DRAM. Różnice wynikają z odmiennej organizacji tych typów pamięci. Istnieje grupa sygnałów, która występujące wyłącznie w SDRAM i nie ma swych odpowiedników w technice DRAM. Oto główne cechy charakterystyczne modułów SDRAM: - Moduł SDRAM wyprowadza po jednej linii -RAS i ~CAS. Moduły DRAM mają po kilka sygnałów -RAS i ~CAS wspólnych dla pewnych grup chipów pamięci. - Charakterystyczny dla modułów SDRAM jest sygnał DQMB maskujący wyjście. Dla każdych 8 bitów szyny danych przypada jeden taki sygnał co pozwala na przesłanianie pojedynczych bajtów. - Cztery wejścia sygnałów zegarowych CKO - CK3 (oznaczane też często jako CLK0 - CLK3) modułów SDRAM współpracują z dwoma sygnałami otwierającymi bramki wejściowe dla tych impulsów (CKE0 i CKE1). Linia CKE0 wyprowadzane jest we wszystkich typach modułów SDRAM, natomiast końcówka CKE1 we wszystkich modułach dwubankowych oraz w modułach jednobanko-wych o obsadzie przekraczającej 10 kostek na bank. Liczba wyprowadzanych wejść CK zależna jest od liczby chipów pamięci na płytce. Generalna zasada mówi, że CKO używane jest zawsze, CK1 powyżej 5 kostek SDRAM, a CK2 i CK3 powyżej 10 chipów. Wejścia niewykorzystywane zakończone są układem sztucznego obciążenia (szeregowy dwójnik RC) symulującego obecność 4-5 linii. Tabela 3.12. Pola kontaktowe buforowanego modułu DIMM DRAM Styk:Przód,Tył; 8B(x64):Przód-Tył; 8B+1bECCB (x72):Przód-Tył; 8B+2bECCB (x80):Przód-Tył 1/85; Vss Vss; Vss Vss; Vss Vss 2/86;DQ0DQ32; DQ0DQ32;DQ0DQ32 3/87;DQ1DQ33;DQ1DQ33;DQ1DQ33 4/88;DQ2DQ34;DQ2DQ34;DQ2DQ34 5/89;DQ3DQ35;DQ3DQ35;DQ3DQ35 6/90;VddVdd;VddVdd;VddVdd 7/91;DQ4DQ36;DQ4DQ36;DQ4DQ36 8/92;DQ5DQ37;DQ5DQ37;DQ5DQ37 9/93;DQ6DQ38;DQ6DQ38;DQ6DQ38 10/94;DQ7DQ39;DQ7DQ39;DQ7DQ30 11/95;DQ8DQ40;DQ8DQ40;DQ8DQ40 12/96;VssVss;VssVss;VssVss 13/97;DQ9DQ41;DQ9DQ41;DQ9DQ41 14/98;DQ10DQ42;DQ10DQ42;DQ10DQ42 15/99;DQ11DQ43;DQ11DQ43;DQ11DQ43 16/100;DQ12DQ44;DQ12DQ44;DQ12DQ44 17/101;DQ13DQ45;DQ 13DQ45;DQI3DQ45 18/102;VddVdd;VddVdd;VddVdd 19/103;DQ14DQ46;DQ14DQ46;DQ14DQ46 20/104;DQ15DQ47;DQ15D047;DQ15DQ47 21/105;PustePuste;CB0CB4;CB0CB4 22/106;PustePuste;CB1CB5;CB1CB5 23/107;VssVss;VssVss;VssVss 24/108;PustePuste;PustePuste;CB8CB12 25/109;PustePuste;PustePuste;CB9CB13 26/110;VddVdd;VddVdd;VddVdd 27/111;~WE~CAS;~WE~CAS;~WE~CAS. 28/112;DQMB0DQMB4;DQMB0DQMB4;DQMB0DQMB4 29/113;DQMB1DQMB5;DQMB1DQMB5;DQMB1DQMB5 30/114;~Ś0~Ś1;~Ś0~Ś1;~Ś0~Ś1 31/115;Zarez.~RAS;Zarez.~RAS;Zarez.~RAS 32/116;VssVss;VssVss;VssVss 33/117;A0A1;A0A1;A0A1 34/118;A2A3;A2A3;A2A3 35/119;A4A5;A4A5;A4A5 36/120;A6A7;A6A7;A6A7 37/121;A8A9;A8A9;A8A9 38/122;A10/APBA0;A10/APBA0;A10/APBA0 39/123;BA1A11;BA1A11;BA1A11 40/124;VddVdd;VddVdd;VddVdd 41/125;VddCK1;VddCK1;Vdd CK1 42/126;CK1 A12; CK1 A12;CK1 A12 43/127; Vss Vss; Vss Vss; Vss Vss 44/128; Puste CKE0; Puste CKE0; Puste CKE0 45/129;S2S3;S2S3; S2 S3 46/130; DQMB2 DQMB6; DQMB2 DQMB6; DQMB2 DQMB6 47/131;DQMB3DQMB7;DQMB3DQMB; DQMB3 DQMB7 48/132;PusteA13;-WE2A13;-WE2A13 49/133;VddVdd;VddVdd; VddVdd50/134;PustePuste;PustePuste;CB10CB1451/135;PustePuste;PustePuste;CB11CB1552/136;PustePuste;CB2CB6;CB2CB653/137;PustePuste;CB3CB7;CB3CB754/138;VssVss;VssVss;VssVss 55/139;DQ16DQ48;DQ16DQ48;DQ16DQ4856/140;DQ17DQ49;DQ17DQ49;DQ17DQ4957/141;DQ18DQ50; DQ18DQ50;DQ18DQ5058/142;DQ19DQ51;DQ19DQ51;DQ19DQ5159/143;VddVdd;VddVdd;VddVdd60/144;DQ20DQ52;DQ20DQ52; DQ20DQ52 61/145;PustePuste;PustePuste;PustePuste62/146;VrefVref;VrefVref;VrefVref.63/147;CKE1Puste;CKE1Puste;CKE1Puste64/148;VssVss;VssVss;VssVss65/149;DQ21DQ53;DQ21DQ53;DQ21DQ5366/150;DQ22DQ54;DQ22DQ54;DQ22DQ5467/151;DQ23DQ55;DQ23DQ55;DQ23DQ5568/152;VssVss;VssVss;VssVss 69/153;DQ24DQ56;DQ24DQ56;DQ24DQ5670/154;DQ25DQ57;DQ25DQ57;DQ24DQ5771/155;DQ26DQ58;DQ26DQ58;DQ26DQ5872/156;DQ27DQ59;DQ27DQ59;DQ27DQ5973/157;VddVdd;VddVdd;VddVdd74/158;DQ28DQ60;DQ28DQ60;DQ28DQ6075/159;DQ20DQ61;DQ29DQ61;DQ29DQ6176/160;DQ30DQ62;DQ30DQ62;DQ30DQ6277/161;DQ31DQ63;DQ31DQ63;DQ31DQ6378/162;VssVss;VssVss;VssVss 79/163;CK2CK1;CK2CK3CK2CK380/164;PustePuste;PustePuste;PustePuste81/165;WPSA0;WPSA0;WPSA082/166;SDASA1;SDASA1;SDASA183/167;SCLSA2;SCLSA2;SCLSA284/168;VddVdd;VddVdd;VddVdd - Moduły SDRAM implementujące bity kontrolne (ECC lub parzystość) posiadają dodatkowe końcówki oznaczane jako CB (Control Bits). W konfiguracji x72 mamy CB0 - CB7 a w konfiguracji x80 (po dwa bity kontrolne na bajt danych) ponadto CB8-CB15. - W modułach SDRAM wyprowadzane są końcówki ~CS0 - ~CS3 (Chip Select, często oznaczane jako ~S0 - ~S3). Moduły dwubankowe mają aktywne linie ~CS0 i ~CS2 a czterobankowe wszystkie linie ~CS. - Dwa sygnały V#REF przeznaczone są do późniejszego wykorzystania w momencie upowszechnienia się interfejsu SSTL. W przypadku wyprowadzeń zgodnych z poziomami LVTTL są one zbędne i nieaktywne (MC). Przyporządkowanie poszczególnych sygnałów do 168-końcówkowej listwy kontaktowej zależy od szerokości magistrali danych (x64, x72 lub x80) i przedstawione zostało w tabeli 3.17. Sumaryczna liczba linii adresowych w omawianych tu modułach wynosi 16. Składają się na nie końcówki A0 - A13 oraz dwa wejścia (~BA0 i ~BA1) wybierające bank (oznaczane często jako ~BS0 i ~BS1). Linie A0 - A9 używane są zawsze. Linia A10 ma podwójne znaczenie: w fazie podawania adresu wiersza jest elementem adresu natomiast w fazie przekazywania adresu kolumny pełni rolę wskaźnika automatycznego odświeżania AP (Auto Precharge). Końcówki A11 - A13 wyprowadzane są zależnie od konieczności, tj. jeśli wymagane to jest ze względu na pojemność i organizację modułu. O ile zarówno BA0 jak i BA1 stanowią nieodzowny fragment adresu, BA0 używane jest zawsze a funkcje sterujące związane z BA1 pojawiają się dopiero w modułach czterobankowych. Wszystkie odpowiadające sobie linie adresowe AO - A10 chipów pamięci łączone są równolegle i wyprowadzane do końcówek modułu o tym samym oznaczeniu. Przyporządkowanie sygnałów BA0 - BA1 oraz A11 - A13 odbywa się w zależności od konfiguracji modułu (tj. ilości t organizacji użytych kostek pamięciowych). W tabeli 3.18 zestawiono kilka typowych przykładów. Dla lepszego zrozumienia omawianego tematu przedstawimy w tym miejscu schemat połączeń wewnętrznych typowego modułu DIMM SDRAM w systemie odpowiadającym ostatniemu z wierszy powyższej tabeli. Wybrany został układ w konfiguracji x64, czyli bez dodatkowych bitów kontrolnych (rysunek 3.20). Pojemność całkowita wynosi 128 MB. W skład modułu wchodzi 16 kostek 16 Mb o organizacji 2Mx8x4 (np. TMS664814 firmy Texas Instruments). Chipy pamięci mają po 4 banki i po 14 końcówek adresowych: AO - A9, A10/AP, A12/BA1, A13/BAO. Moduł taki adresuje się w konwencji 12/9 - 12 bitów na adres wiersza i 9 bitów na adres kolumny. Wybór jednego z czterech banków ma miejsce za pomocą 2 bitów BAO i BA1 Sumaryczna liczba wykorzystywanych tu bitów adresowych wynosi więc 23 (tabela 3.19). Tabela 3.18. Przyporządkowanie sygnałów w przykładowych modułach pamięci DIMM SDRAM 1.Organizacja modułu; 2.SDRAM; 3.Przyporządkowanie końcówek:a) Chip SDRAM ,b)Złącze DIMM 1. 16 MB, dwubankowa; 2.8 kostek po 16 Mb (org. 1 Mx 16) w układzie dwurzędowym 3a. A0-A10, A11 (BA0), NU, NU, NU; 3b. AO-A10, BAO, BA1, A11, AI2; 1. 32 MB, czterobankowa; 2.4 kostki po 64 Mb (org. 4Mxl6) w układzie jednorzędowym 3a. A0-A10, A11, A13(BA0), A12(BA1), NU; 3b. A0-A10, A11, BA0, BA1, A12; 1. 16 MB, czterobankowa; 2. 2 kostki po 64 Mb (org. 2Mx32) w układzie jednorzędowym; 3a. A0-A10, A12(BA0), All(BAl); NU; NU; 3b. A0-A10, BA0, BA1, A11, A12. 1. 128MB,czterobankowa; 16 kostek po 32 Mb (org. 8 Mx 8) w układzie dwurzędowym 3a. A0-A10, A11, A13(BA0), A12(BA1), NU; 3b. A0-A10, A11, BA0, BA1, A12; Tabela 3.19. Znaczenie końcówek adresowych Adres; Końcówki; Liczba bitów; Wiersza; A0-A11; 12; Kolumny; A0-A8; 9; Bank; BA0-BA1; 2; W ten sposób adresowanych jest 8M słów 8bajtowych (2^23). Ponieważ omawiany moduł jest dwurzędowy (końcówki I/O łączone są równolegle po dwie) wybór strony podejmowany jest przy pomocy dodatkowych sygnałów ~S0 - ~S3. W sumie dostępnych jest 2x8 M słów 8 bajtowych, czyli 128 MB. Rozpoznawanie modułu DIMM Specyfikacja modułów DIMM przewiduje obecność małej pamięci lokalnej SPD (Serial Presence Detecf) przechowującej informacje na temat organizacji wewnętrznej modułu. SPD to kostka pamięci stałej EEPROM o pojemności 2 kb (256 bajtów) programowana przez wytwórcę modułu. Dla potrzeb pełnej identyfikacji modułów DIMM z obsadą DRAM zdefiniowany został co prawda system na bazie SPD ale w praktyce nie był wykorzystywany. Wmontowane w BIOS procedury rozpoznawania pamięci doprowadzone zostały do takiej perfekcji, że można się było obejść bez SPD. Inaczej jest w przypadku modułów z pamięciami SDRAM. Już samo pobudzenie ich do pracy musi być poprzedzone przez właściwie dobraną fazę programowania. W tym celu potrzeba dokładnych informacji o strukturze wewnętrznej i organizacji. Do tego momentu BIOS nie jest w stanie przeprowadzić żadnych testów rozpoznawczych ani procedur kontrolnych. Przegląd zawartości SPD przedstawiony jest w tabeli 3.20. Tabela 3.20. Zawartość pamięci SPD Bajt; Funkcja; 0; Liczba bajtów zapisanych do pamięci 0x80h, co odpowiada 128 bajtom.SPD przez producenta modułu, wartość typowa to 1; Rozmiar całkowity pamięci EEPROM, wartość typowa 0x08h co odpowiada 256 bajtom. 2; Kod typu pamięci (Fundamental Memory Type), dla SDRAM kod wynosi 0x04h. 3; Udział składnika Row w organizacja adresu (Number ofRow Addresses), typowy rozkład składników wyraża się liczbami 12/9, wówczas bajt 3 zawiera 0x0Ch (12dec) a bajt 4 0x09h (9dec). 4; Udział składnika Cohimn w organizacji adresu (Number ofColumn addresses). 5; Fizyczna liczba rzędów modułu (Number of Module Rows). zapisywana jest wartość bezpośrednia (0 - 255). typowe wartości to l lub 2. 6-7; Szerokość magistrali danych (Data Width) w układzie LSB/MSB, dla szerokości 64 bitów zawartość bajtów 6 i 7 wynosi odpowiednio 0x40h i 0x00h. 8; Kod parametrów złącza I/O (Yoltage Interface Standard), typowa wartość to 0x01 h odpowiada złączu LVTTL. 9; Minimalny czas cyklu pamięci SDRAM w odniesieniu do maksymalnej wartości opóźnienia CL (CAS Latency. CL = X) określonego w bajcie numer 18 (SDRAM Cycle Time at Max. Supported CAS Latency). zakodować można wartości z przedziału l - 15,9 ns z dokładnością do 0.1 ns. 10; Maksymalna częstotliwość zegara w cyklach odczytu TAC (SDRAM Accessfrom Clock) dla CL = X. kodowany jest okres tej częstotliwości jako wartość z przedziału 1-15.9 ns z dokładnością do 0.1 ns. Wartość typowa dla modułów wysokiej klasy (PC-100) wynosi 6 ns. a dla pozostałych 7 ns. Sens fizyczny tego parametru ma kluczowe znaczenie w cyklach odczytu Burst. SDRAM rozpoczyna wyprowadzanie danych zgodnie z zaprogramowaną wartością CL (po 2 lub 3 cyklach zegarowych). Moment, w którym gwarantuje się ważność danych leży w odległości TAC od ostatniego poprzedzającego dodatniego zbocza CLK. 11; Właściwości korekcji i detekcji błędów modułu (Configuration Type). możliwe wartości to 0x00h (Non-parity)', 0x01h (Parity) i 0x02h (ECC). 12; Parametry i typ systemu odświeżania (Refresh Rate/Type). jedna z możliwych wartości to 0x00h co odpowiada standardowemu odświeżaniu w cyklu 15.625 us. 13; Szerokość szyny danych pojedynczego układu pamięci modułu (SDRAM Width Primary SDRAM). odnosi się do chipów danych a nie ECC lub parzystości. Typowe wartości to 0x04h (x4). 0x08h (x8) itd. 14; Szerokość szyny danych pojedynczego układu pamięci modułu przechowującego bity parzystości lub ECC (ERROR Checking SDRAM Data Width) 15; Opóźnienie zegara w losowych cyklach dostępu do kolumn (Minimum Clock Delay by Back-to-Back Rundom Column Address), typowa wartość to 0x01 h (l cykl zegarowy). 16; Długości cykli Burst oferowanych przez moduł (Burst Lengths Supported). ustawienie bitu 7 sygnalizuje możliwość Burstu o wymiarze całego wiersza (Page Burst). bit 3 reprezentuje Burst 8, bit 2 Burst 4. bit l oznacza Burst 2 a ustawienie bitu O odnosi się do Burstu pojedynczego. Typowa zawartość bajtu 16 SPD to OxOFh (Bursty 1. 2. 4 i 8). 17; Liczba banków pojedynczych chipów pamięci (Number of Banks on each SDRAM Device). zakres wartość obejmuje przedział l -255 przy czym w typowej konfiguracji spotyka się 1. 2 lub 4. 18; Wskaźnik możliwych wartości CL (CAS Latencies Supported). Jeżeli ustawiony jest bit 7. kolejne pozycje binarne informując CL w wymiarze wykładnika pozycji plus l, np. ustawienie bitu 3 oznacza CL = 4 a ustawienie bitu 0 to CL = 1. Jeżeli bit 7 jest wyzerowany CL = 0. a pozostałe pozycje binarne są ignorowane. Standardowe moduły SDRAM realizują CL = 2 i CL = 3. wtedy zawartość bajtu 18 ustalana jest na 0x06h. 19; Wskaźnik możliwych wartości CSL (CS Latencies Supported). Kolejne pozycje binarne informują o CL w wymiarze wykładnika pozycji . np. ustawienie bitu 3 oznacza CSL = 3. a ustawienie bitu 1 to CSL = 1. Wartość typowa to 0x01 (odpowiada CSL = 0) 20; Wskaźnik możliwych wartości opóźnienia przy zapisie (Write Latencies Supported). interpretacja taka jak dla bajtu 19. standardowo 0x01 h. 21; Informacja o dodatkowych właściwościach modułu (SDRAM Module Attribittes) takich jak np. buforowanie wejść końcówek adresowych i sterujących. 22; Informacja o dodatkowych właściwościach chipów pamięcio (General SDRAM Device Attributes), np. zakres tolerancji napięcia zasilającego. 23; Minimalny okres zegara taktującego dla CL = X - 1 (Minimum Clock Cvcle Time atCL=X-1) 24; Maksymalny czas dostępu dla CL = X - 1 (Mcaimum Data Access Time from Clock atCL=X-1) 25; Minimalny okres zegara taktującego dla CL = X - 2 (Minimum Clock Cycle Time at CL=X - 2). wartość nie ma sensu dla typowych modułów dopuszczających CL = 2 lub CL = 3 bowiem CLX - 2 = 1. co nie jest możliwe. Zawartość bajtu 25 wynosi 0x00h. 26; Maksymalny czas dostępu dla CL = X - 2 (Maximum Data Access Time from Clock at CL=X - 2), interpretacja tak jak dla bajtu 25. 27; Minimalny czas potrzebny na aktywowanie wiersza TRP (Minimum Rów Precharge Time). zapisywana jest wartość bezpośrednia w ns. możliwy zakres 0 - 255. 28; Minimalny czas potrzebny na przeskok z aktywacji jednego do innego wiersza (Minimum Ro\v-Active-fo-Row-Acfive Delay). kodowanie tak jak w bajcie 27. 29; Opóźnienie konieczne pomiędzy aktywowaniem RAS i CAS TRCD (Minimum RAS-to-CAS Delay). kodowanie tak jak w bajcie 27. 30; Minimalna szerokość impulsu sygnału RAS TRAS (Minimum RAS Pulse Widtli). kodowanie tak jak w bajcie 27. 31; Rozmiar pojedynczego banku modułu (Module Bank Density). 32; Określenie położenia na osi czasu sygnałów sterujących i adresowych w odniesieniu do narastającego zbocza impulsu zegarowego (Command and Address Signal Input Setup Time). System kodowania umożliwia zapisanie zarówno wartości dodatnich jak i ujemnych. 33; Czas utrzymywania poziomów sygnałów sterujących i adresowych w odniesieniu do narastającego zbocza impulsu zegarowego (Command and Address Signal Input Hołd Time). 34-35; Wartości analogiczne do określanych w bajtach 32 i 33 ale dla linii magistrali danych (Data Signal Input Setup Time i Data Signal Hold Time). 36-61; Zakres przeznaczony do późniejszego wykorzystania (Superset Features). 62; Numer wersji specyfikacji SPD (SPD Revision Designator). aktualnie 0x1 2h odpowiada wersji 1.2. 63; Suma kontrolna dla bajtów 0 - 62. 64-71; Identyfikator producenta przydzielany przez komitet normalizacyjny JEDEC (JEDEC ID). 72; Kod lokalizacyjny dla danej wytwórni. 73 - 90; Numer artykułu z katalogu wytwórcy (Manufacturer 's Fart Nitmber). 91-92; Kod wersji (Revision Code). 93-94; Data wykonania. 95-98; Numer seryjny montażu. 99-125; Pole informacyjne zarezerwowane dla producenta modułu. 126-255; Pole informacyjne zarezerwowane dla integratorów systemów. Systemy oznaczeń układów Układy pamięci wytwarzane są obecnie przez stosunkowo szerokie grono producentów. Prognozy rozwoju rynku komputerowego nie przewidują nasycenia w tej dziedzinie, gdyż zapotrzebowanie na pamięć wydaje się nie mieć granic. Nowe i coraz to potężniejsze procesory generują rosnący popyt na pamięć a rozmiary programów dawno już przestały być optymalizowane pod kątem zajmowanej przestrzeni. Zbyt optymistyczne szacowania niektórych potentatów wywołały jednak powracający co pewien czas problem nadprodukcji, huśtawek cenowych i konieczność zamykania (choćby jedynie czasowego) części linii produkcyjnych. W chwili obecnej rynek podzielony jest pomiędzy następujących wytwórców: Fujitsu, Goldstar (LGS), Hitachi, Hyundai, IBM, Micron, Mitsubishi, Mosel Yitelic, NEC, OKI, Samsung, Siemens, Teksas Instrument (TI) i Toshiba. Z branży wycofała się Motorola, ale wyprodukowane przez nią układy pozostają nadal w obiegu. Zdecydowana większość producentów trzyma się w miarę jednolitego systemu oznaczeń składającego się z przedrostka identyfikującego wytwórcę oraz kilku następujących po nim cyfr. Wyjątek stanowią produkty firm Samsung i Micron. Układy DRAM Tabela 3.21. Wykaz prefiksów oznaczeń ukladów pamięci DRAM Producent; Oznaczenie: Pamięć FPM, Pamięć EDO; Goldstar 5 V; GM71C(S)xxxx0, GM71C(S)xxxx3; Goldstar 3,3 V; GM71V(S)xxxx0, GM71V(S)xxxx3; Goldstar2,35V; GM71VLxxxx0, GM71VLxxxx3; Tabela 3.21. Wykaz prefiksów oznaczeń układów pamięci DRAM (ciąg dalszy) Producent; Oznaczenie: Pamięć FPM, Pamięć EDO Hitachi; HM51 xxxx0, HM51 xxxx5 Hyundai; HY51 xxxx0, HY51 xxxx4 HY53 1000*, HY51 xxxx4 IBM; IBM01xxxx0, IBM01xxxx5 Mitsubishi; M5M4 xxxx, M5M4xxxx5 Mosel Vitelic 5 V; V53C3 xxxx, V53C3 xxxx Mosel Vitelic 3,3 V; V53C5 xxxx, V53C5 xxxx NEC; mPD42(S) xxxx 0, mPD42(S) xxxx Oki 5 V; MSM51 xxxx 0, MSM51 xxxx 5 Oki 3,3 V; MSM51 Vxxxx0, MSM51 Vxxxx5 Siemens 3,3 V; HYB31 xxx 0,1, HYB31 xxx 5 Siemens 5 V; HYB51 xxx 0,1, HYB51 xxx 5 Texas Instrument 3,3 V; TMS42 xxxx 0, TMS42 xxxx 9 Texas Instrument 5 V; TMS41 xxxx0, TMS41 xxxx9 Toshiba; TC5 1 xxxx 0, TC5 1 xxxx 5 * Kostki IMb w organizacji lMxl Znaki xxx lub xxxx (grupa trzy lub czterocyfrowa) reprezentują kod danego układu pamięci. Najczęściej spotykane kombinacje (w systemie jednolitym) zostały zebrane w tabeli 3.22. Tabela 3.22. Kody układów pamięci DRAM w systemie jednolitym Pojemność; Organizacja; Refresh; RAS/CAS; xxx (x); 4 Mb; 4Mxl; 1K; 11(10)/11; 410(0) 4 Mb; 1Mx4; 1K; 10/11; 440(0) 4 Mb; 1Mx4; 1K; 10/10 4xCAS; 446(0) 4 Mb; 512Kx8; 1K; 10/9; 480(0) 4 Mb; 256Kxl6; 512,2CAS, 1WE; 9/9; 426(0) 4 Mb; 256Kxl6; 1K, 1CAS,2WE; 10/8; 417(0) 4 Mb; 256Kxl6; 1K, 2CAS; -; 416(0) 4 Mb; 256Kxl6; 512,2WE; -; 427(0) 16 Mb; 16Mxl; 4K; -; (1)610 16 Mb; 16Mxl; 2K; 12(11)712; (1)710 16 Mb; 4Mx4; 4K; 12/10; (1)640 16 Mb; 4Mx4; 4K; 12/10, 4CAS; (1)641 16 Mb; 4Mx4; 2K; 11/11; (1)740 16 Mb; 2Mx8; 4K; 12/9; (1)680 16 Mb; 2Mx8; 2K; 11/10; (1)780 16 Mb; !Mxl6; 4K; 12/8; (1)616 16 Mb; !Mxl6;; 1K; 10/10; (1)816 64 Mb; 16Mx4; 8K; 13/11; 6440 64 Mb; 16Mx4; 4K; 12/12; 6540 64 Mb; 8Mx8; 8K 13/11;; 6480 64 Mb; 8Mx8; 4K 12/11;; 6580 64 Mb; 4Mxl6; 8K, 2CAS, 1WE; 13/9; 6416 64 Mb; 4Mxl6; 8K, 1CAS, 2 WE; 13/11; 6417 64 Mb; 4Mxl6; 4K, 2CAS, 1WE; 12/10; 6516 64 Mb; 4Mxl6; 4K, 1CAS, 2WE; 12/10; 6517 64 Mb; 4Mxl6; 2K; -; 6616 64 Mb; 2Mx32; 4K, 2CAS; -; 6532 64 Mb; 2Mx32; 4K, 2WE; -; 6533 64 Mb; 2Mx32; 4K, 4CAS; -; 6534 128 Mb; 16Mx8; 8K; -; 1280 128 Mb; 16Mx8; 4K; -; 1380 Wyjątki Mniej lub bardziej odmienny od standardu system oznaczeń stosowany jest przez firmy Samsung oraz Micron. [System oznaczeń firmy Samsung Układy firmy Samsung oznaczane są zgodnie ze schematem: KM 4 AA B CC D EE F G H - I JJ Tabela 3.23. Znaczenie pól w oznaczeniu układów pamięci DRAM firmy Samsung Pole; Opis; KM; Sygnatura firmy Samsung 4; Sygnatura DRAM AA; Organizacja: 1 = x1 bit, 4 = x4 bity, 8 = x8 bitów , 16 = x16 bitów, 32 = x32 bity B; Napięcie zasilania: C = 5,0 V, V = 3,3 V, U =3,0 V, Q = 2,5 V CC; Głębokość: 25 = 256K, 51 = 512K, 4 = 1M , 2 = 2M , 4 = 4M, 8 = 8M, 16 = 16M D; Odświeżanie: 0 = 1K(4M), 4K(16M), 8K(64M), 1 = 512(4M), 2K(16M) 4K (64M), 2 = 1K(16M) EE; Typ: 0 = FPM, 3 = FPM,4CAS, 4 =EDO, 5 = EDO,4CAS F G H - I JJ; Szczegóły nieistotne dla określenia organizacji. System oznaczeń firmy Micron Oznaczenie układów pamięci DRAM firmy Micron składa się z przedrostka (MT4LC dla układów zasilanych napięciem 3,3 V lub MT4C dla układów zasilanych napięciem 5 V) i symbolu określającego pojemność i organizację pamięci (tabela 3.24). Układy SDRAM System oznaczeń układów pamięci SDRAM nie jest tak jasny i przejrzysty jak ma to miejsce w przypadku układów DRAM. Nawet firmy, które trzymają się z grubsza jednolitego systemu pozwalają sobie na odstępstwa od schematu. Mechanizm oznaczeń składa się z przedrostka (prefiksu) identyfikującego producenta oraz następującego po nim zestawu cyfr i ewentualnie liter (tabela 3.25). Tabela 3.24. System oznaczeń układów pamięci DRĄ M firmy Micron Pojemność; Organizacja; Refresh; RAS/CAS; Oznaczenie: Pamięć FPM, Pamięć EDO 16 Mb; 4Mx4; 4K; 12/10;4M4A1, 4M4E9 16 Mb; 4Mx4; 2K; 11/11; 4M4B1, 4M4E8 16 Mb; 2Mx8; 2K; 11/10; 2M8B1, 2M8E7 16 Mb; 1Mxl6; 1K; 10/10; 1M16C3, 1M16E5 64 Mb; 16Mx4; 8K; 13/11; 16M4A7, 16M4G3 64 Mb; 16Mx4; 4K; 12/12; 16M4T8, 16M4H9 64 Mb; 8Mx8; 8K; 13/11; 8M8E1, 8M8P4 64 Mb; 8Mx8; 4K; 12/11; 8M8B6, 8M8C2 64 Mb; 4Mxl6; 4K, 2CAS, 1WE; 12/10; 4M16F5, 4M16R6 Tabela 3.25. Wykaz prefiksów oznaczeń układów pamięci SDRAM Producent; Oznaczenie; Producent; Oznaczenie Fujitsu; MB 81 (F)xxxx; NEC; mPD45 xxxx Goldstar; GM72Y xxxx; Oki; MD56Y xxxx 0 Hitachi; HM52 xxxx; Siemens; HYB39S xxxx IBM; IBM03(6) xxxx (9,4); Texas Instrument; TMS6 xxxx Mosel Vitelic; V54C3 xxxx; Toshiba; TC59S(M) xxxx Organizację układu pamięciowego SDRAM oznacza się zwykle przy pomocy następującego wyrażenia: XxYxZ Czynnik X nazywany jest gęstością układu, Y stanowi głębokość a Z informuje o liczbie banków. Wartość iloczynu równa jest oczywiści całkowitej pojemności układu: - 8Mx4x2- układ 64 Mb w podwójnym układzie 4 matryc po 8 Mb każda. - 512K x32(xl) - układ 16 Mb, jeden bank, 32 matryce po 512 Kb. System jednorodny zbudowany jest wokół schematu: AA BB C gdzie: - AA - pojemność układu: • 16=16 Mb (wyjątki: TI - 26 zamiast 16 i Fujitsu - 17 zamiast 16), • 64 = 64 Mb, • 28 =128 Mb, • 25 =256 Mb. - BB - głębokość: • 41=x4, • 81=x8, • 16 = xl6. - C - liczba banków. Tabela 3.26. Kody układów pamięci SDRAM w systemie jednolitym Pojemność; Organizacja; xxxx; 16 Mb; 4Mx4; 164a*; 16 Mb; 2Mx8; 168a*; 16 Mb; 1Mxl6; 1616a*; 16 Mb; 512Kx32; 1632a*; 64 Mb; 16Mx4; 644a*; 64 Mb; 8Mx8; 648a*; 64 Mb; 4Mxl6; 6416a*; 64 Mb; 2Mx32; 6432a*; 128 Mb; 32Mx4; 284a*; 128 Mb; 16Mx8; 288a*; 128 Mb; 8Mxl6; 2816a*; 256 Mb; 64Mx4; 25640; 256 Mb 32Mx8; 25680; 256 Mb; 16Mxl6; 25616; 256 Mb; 8Mx32; 25632; *a = 1, 2, 4, 8 Wyjątki Wspomniane przy okazji omawiania systemu oznaczeń pamięci DRAM wyjątki dotyczą również układów SDRAM (niestety w dużo większym stopniu). Klasycznie od reguły odbiegają Samsung, Mitsubishi i Micron. W przypadku pozostałych producentów można napotkać na różne anomalie, dlatego trudno jest podać jednolity, spójny system. Sytuację pogarsza fakt, iż układy pamięci SDRAM występują w różnorodnych konfiguracjach i odmianach. Liczba banków waha się w przedziale l - 4, odświeżanie może pracować w trybie 2K, 4K, 8K lub 16K a na to jeszcze nakładają się różne mutacje sposobu łamania adresu wiersza i kolumny (Mapping). System oznaczeń firmy Samsung Układy firmy Samsung oznaczane są zgodnie ze schematem: KM 4 AA S BB C D E F G H - I JJ Tabela 3.27. Znaczenie pól w oznaczeniu układów pamięci SDRAM firmy Samsung Pole; Opis KM; Sygnatura firmy Samsung 4; Sygnatura DRAM AA; Organizacja: 4 = x4 bity, 8 = x8 bitów, 16 = x16 bitów, 32 = x32 bity S; Sygnatura SDRAM B; Gęstość: 1 = 1M, 2 = 2M, 4 = 4M, 8 = 8M, 16 = 16M, 32 = 32M, 64 = 64M, 28 = 128M C; Odświerzanie: 0 = 4K; 1 = 2K, 2 = 8K; 3 - 16K D; Liczba banków: 2 = 2 banki, 4 = 4 banki E; Poziomy napięć układów wejścia - wyjścia: 0 = 3,3V LVTTL, 1 = 3,3V SSTL_3, 2 = 2,5V SSTL_2, 3 = 2,5 V LVTTL F G H - I JJ; Szczegółynieistotne dla określenia organizacji. System oznaczeń firmy Mitsubishi Układy firmy Mitsubishi oznaczane są zgodnie ze schematem: M xxxx M jest sygnaturą firmy Mitsubishi, a xxxx zależy od pojemności i organizacji układu pamięci (tabela 3.28). Tabela 3.28. System oznaczeń układów pamięci SDRAM firmy Mitsubishi Pojemność; Organizacja; xxxx; 16 Mb; 4Mx4; 5M4V16S20; 16 Mb; 2Mx8; 5M4Y16S30; 16 Mb; 1Mxl6; 5M4Y16S40; 64 Mb; 16Mx4; 5M4V64S20; 64 Mb; 8Mx8; 5M4V64S30; 64 Mb; 4Mxl6; 5M4V64S40; 128 Mb; 32Mx4; 2V28S20; 128 Mb; 16Mx8; 2V28S30; 128 Mb; 8Mxl6; 2V28S40; 256 Mb; 64Mx4; 2V25S20; 256 Mb; 32Mx8; 2V25S30; 256 Mb; 16Mxl6; 2V25S40; System oznaczeń firmy Micron Układy firmy Micron oznaczane są zgodnie ze schematem: MT48LC xxxx MT49LC jest sygnaturą układów SDRAM firmy Micron zasilanych napięciem 3,3 V, a xxxx zależy od pojemności i organizacji układu pamięci (tabela 3.29). Tabela 3.29. System oznaczeń układów pamięci SDRAM firmy Micron Pojemność; Organizacja; Refresh; RAS/CAS; Oznaczenie; 16 Mb; 4Mx4, 2 banki; 4K; 11/10; 4M4A1; 16 Mb; 2Mx8, 2 banki; 4K; 11/9; 2M8A1; 16 Mb; 1Mx 16, 2 banki; 4K; 11/8; 1M16A1(2); 64 Mb; 16Mx4, 4 banki; 4K; 12/10; 16M4A2; 64 Mb; 8Mx8, 4 banki; 4K; 12/9; 8M8A2; 64 Mb; 4Mxl6, 4 banki; 4K; 12/8; 4M16A2; 128 Mb; 32Mx4, 4 banki; 4K; 12/11; 32M4A2; 128 Mb; 16Mx8, 4 banki; 4K; 12/10; 16M8A2; 128 Mb; 8Mxl6, 4 banki; 4K; 12/9; 8M16A2; Odświeżanie Konieczność odświeżania zawartości komórki pamięci dynamicznej stanowi cechę charakterystyczną wynikającą z istoty jej działania oraz formy realizacji i jest nie do uniknięcia (przynajmniej na obecnym etapie rozwoju technologii). Pojedyncze komórki układu scalonego pamięci zgrupowane są w zespoły prostokątnych matryc o pewnej określonej liczbie wierszy (Rows) i kolumn (Columns). Liczba matryc odpowiada szerokości słowa, które można przechowywać w takim układzie. Każda matryca odpowiada więc jednemu bitowi szyny danych doprowadzonej do układu pamięci. Odpowiadające sobie linie adresowe wierszy i kolumn są wspólne dla wszystkich matryc, tak jak to przedstawiono schematycznie na rysunku 3.21 (kostka pamięci o pojemności 16 Mb w organizacji 4Mx4 - 4M słów 4 bitowych). Prezentowany układ posiada ponad 16 milionów komórek pamięci. Na szczęście nie trzeba odświeżać każdej z nich oddzielnie. Odświeżanie sprowadza się do pobudzenia (zaadresowania) linii wiersza, przy czym odświeżeniu ulegają wszystkie komórki należące do tego wiersza. Procesy zachodzące podczas takiego pobudzenia nie różnią się niczym od cyklu zapisu lub odczytu, jednak trudno jest liczyć na to by dostęp do pamięci odbywał się według jakiegoś harmonogramu obejmującego wszystkie linie matryc i to w zadanym czasie. Konieczne jest więc wprowadzenia mechanizmu generującego regularnie impulsy odświeżające przebiegające kolejno wszystkie wiersze. Kolejność pobudzania wierszy macierzy jest obojętna, ważne jest jedynie by wszystkie z nich otrzymały przynależny sobie impuls nie rzadziej niż raz na pewien jasno zdefiniowany okres czasu zwany cyklem odświeżania (Refresh Time). Innymi słowy odstęp dzielący dwa kolejne impulsy (adresowane do tego samego wiersza) nie może być dłuższy od cyklu odświeżania. Cykl odświeżania współczesnych pamięci dynamicznych waha się od kilku do kilkudziesięciu milisekund i zależy zarówno od rozmiarów jak i od organizacji logicznej (liczby wierszy). W tabeli 3.30 zestawiono kilka typowych wartości. Tabela 3.30. Typowe wartości cyklu odświeżania Pojemność; Organizacja; Liczba kolumn; Cykl; 4Mbit; 256Kxl6; 512; 8 ms; 4Mbit; 4Mxl; 1024 (1K); 16 ms; lóMbit; 4Mx4; 2046 (2K); 32 ms; Podział cyklu odświeżania na odcinki czasowe równej wielkości (po jednym dla każdej kolumny) daje w wyniku okres przebiegu zegarowego (Refresh Ratę) wymaganego do spełnienia wymogu czasowego narzuconego przez cykl odświeżania (np. 16 ms / l 024 = 15,6 us). Wartość 15,6 us jest charakterystyczna dla typowych układów pamięci (Standard Refresh). Niektóre wersje specjalne cechują się wydłużonym cyklem odświeżania (Extended Refresh} wynoszącym 125 (is. Pojedyncze impulsy odświeżające można zgrupować w jeden pakiet (Burst Refresh} lub też rozłożyć równomiernie (Distributed Refresh} w obszarze okna czasowego wyznaczonego przez cykl odświeżania. Matryce grupujące komórki pamięci połączone ze światem zewnętrznym za pośrednictwem układów pośrednich. Układy te dekodują adresy oraz analizują impulsy sterujące ale nie podejmują odświeżania na własną rękę. System odświeżania pracuje zwykle według harmonogramu narzucanego przez inne elementy architektury komputera (np. system przerwań). Właściwy moment na odświeżanie określany jest więc z punktu widzenia układu pamięciowego przez czynniki zewnętrze a sygnalizacja tego momentu odbywa się przy pomocy pewnej umownej sekwencji impulsów sterujących -RAS i ~CAS. W praktyce przyjęły się trzy główne metody wyzwalania impulsów odświeżających: RAS (inaczej RAS-Only), CBR (CAS-Before-RAS) oraz ukryty (Hidden). Wszystkie te trzy systemy omówione zostaną pokrótce w dalszej części rozdziału. RAS Only Odświeżanie w tym trybie osiąga się przez podanie adresu na wejścia adresowe i aktywowaniu linii ~RAS. Odświeżeniu podlegają wszystkie komórki zaadresowanego wiersza. Jak długo sygnał ~CAS utrzymuje się na poziomie wysokim, sterowniki wyjściowe odcinają układ od magistrali danych poprzez przejście w stan wysokiej impedancji. Kontroler pamięci sam musi zadbać o to, by w okresie czasu narzuconym przez wymiar cyklu odświeżania wygenerowane zostały (w dowolnej kolejności) wszystkie adresy wierszy. Stan linii adresowych zatrzaskiwany jest w rejestrze w momencie wykrycia opadającego zbocza ~RAS. Następujące po sobie cykle odświeżania w opisywanym tu trybie można oczywiście łączyć w pakiety kluczując linię ~RAS. IBR (CAS before RAS) Tryb CBR stosuje się najczęściej ponieważ jest najprostszy w implementacji a ponadto pozwala na oszczędność energii. Jego prostota bierze się z faktu, iż adres aktualnie odświeżanego wiersza generowany jest we wnętrzu samego układu pamięciowego. Sygnałem do wejścia w tryb odświeżania CBR jest wykrycie odwrotnej kolejności adresowych impulsów sterujących: najpierw ~CAS a potem ~RAS. Normalny cykl dostępu do pamięci cechuje się oczywiście inną kolejnością. W pierwszej fazie podawany jest fragment adresu identyfikujący wiersz (i aktywuje się ~RAS) a w fazie drugiej następuje uzupełnienie części odnoszącej się do kolumny w chwili opadnięcia ~CAS. Linia ~WE musi być utrzymywana w stanie wysokim w momencie opadania sygnału ~RAS. Gwarantuje to separację układu od magistrali danych poprzez utrzymywanie końcówek DQ w stanie wysokiej impedancji. Każda kolejna sekwencja CBR wyzwala cykl odświeżania jakiegoś wiersza. To, który z wierszy jest aktualnie odświeżany jest mało istotne, użytkownik nie może tego ani stwierdzić ani zmienić. Układ pamięci posiada wewnętrzny licznik adresowy, który jest inicjowany pewną wartością losową pojawiającą się w momencie doprowadzenia zasilania. Kolejne cykle CBR zwiększają stan licznika aż do wartości równej sumarycznej liczbie wierszy. Nie ma innego sposobu na wyzerowanie licznika niż osiągnięcie tej właśnie wartości (Wrap Around). Cykle CBR mogą być łączone w pakiety. Dodatkowe uproszczenie sterowania można osiągnąć dzięki możliwości kluczowania samymi impulsami ~RAS przy aktywnym sygnale ~CAS (po wystąpieniu pierwszej sekwencji CBR). Odświeżanie w trybie CBR przyczynia się do zmniejszenia zużycia energii, gdyż dzięki wewnętrznej generacji adresu nie pracuje magistrala adresowa i układy z nią związane. System CBR 15,6 us jest domyślnym trybem pracy i implementowany w każdym układzie pamięciowym. Oznacza to, iż niezależnie od rozmiarów i organizacji wewnętrznej, podawanie sekwencji CBR raz na 15,6 fis (lub częściej) zapewnia odświeżenie całej matrycy pamięci. Warto zwrócić uwagę na prostotę i uniwersalność takiego rozwiązania. Moduły pamięci 16 Mb w organizacji 4Mx4 występują przykładowo w wersji 2K lub 4K. Implementacja trybu RAS-OnLy oznacza konieczność adaptacji licznika adresowego zależnie od organizacji: układy 4K mają dwanaście linii adresowych wiersza, a układy 2K tylko jedenaście. Kontroler musi więc wygenerować 2 048 cykli odświeżania na liniach AO - A11 lub 4 096 cykli na liniach A0 - A10. Problemy tego typu nie występują wcale w systemie opartym o tryb CBR. Hidden Tryb odświeżania określany tym mianem oznacza dołączenie cyklu CBR do zwykłego cyklu dostępu (odczytu lub zapisu). Klasyczne wyjście z cyklu dostępu pozostawia adresowe sygnały kluczujące na poziomie niskim:~RAS = ~CAS = 0. W chwilę potem następuje podniesienie sygnału na linii ~RAS i ponowne obniżenie. Przy zachowaniu odpowiednich uzależnień czasowych właściwych dla danego układu, system rozpoznaje sekwencję CBR i dokonuje odświeżania pewnego losowo wybranego wiersza (zgodnie z aktualnym stanem wewnętrznego licznika, ale bynajmniej nie tego, który był właśnie zaadresowany). Sens „ukrytego" cyklu odświeżania nie polega na jakimkolwiek maskowaniu czasu trwania samego procesu odświeżania - trwa on dokładnie tyle samo, co w przypadku każdego cyklu CBR. Korzyści z pracy w tym trybie można osiągnąć dowiązując sekwencje CBR do cykli odczytu. Układ utrzymuje wówczas dane na końcówkach wyjściowych również w trakcie odbywania CBR. Generacja sekwencji CBR tuż po cyklu odczytu różni się tylko tym, iż magistrala danych przechodzi w stan wysokiej impedancji i układ pamięciowy nie odkłada na niej zawartości komórki adresowanej w pierwszej fazie. Wykrywanie błędów i ich korekcja Zjawisko przekazu informacji to proces, który towarzyszył człowiekowi od zarania dziejów. Nie mniej odwieczna była chęć zagwarantowania pewności takiego przekazu. Ważne wiadomości przesyłane były przez kilku kurierów jednocześnie (dziś powiedzielibyśmy o zwiększonej redundancji czyli informacji nadmiarowej), a listy opatrywano mniej lub bardziej wiarygodnymi pieczęciami. Sam fakt potwierdzenia odbioru kwitowało się zwykle przy pomocy zwięzłej formuły typu „OK, wiadomość otrzymana", ale w krytycznych przypadkach stosowano nawet odesłanie oryginału (echo). Mimo opracowywania różnych, coraz to nowocześniejszych metod zabezpieczeń, wymiana danych narażona jest na wpływ wielu szkodliwych czynników, które zakłócają proces. W wyniku działania tych zakłóceń wyemitowana informacja dociera do celu w zmienionej formie (mówi się też o przekłamaniach). Zjawisko przekłamywania informacji dotyczy nie tylko samego procesu transmisji danych ale i ich magazynowania. Protokoły transmisyjne zabezpieczają się przed mogącymi wystąpić błędami przy pomocy różnorodnych metod. Arsenał stosowanych środków obejmuje zarówno proste sumy kontrolne zabezpieczające pojedyncze słowa jak i rozbudowane kody kontrolne chroniące całe bloki danych. Informacje zebrane w pamięci operacyjnej komputera są również narażone na przekłamania, chociaż źródła tych zjawisk mają inne pochodzenie niż w przypadku transmisji. Pamięci dynamiczne stosowane w PC nie dają 100-procentowej gwarancji bezpieczeństwa dla przechowywanej informacji. Źródła tych przekłamań dzieli się na dwie grupy określane mianem błędów powtarzalnych (Repeatable Errors, Hard Errors) i błędów sporadycznych (Transient Errors, Soft Errors). Błędy powtarzalne (HĘ) Błędy tej grupy odwzorowują trwałe uszkodzenia układów elektronicznych lub połączeń między nimi. Klasycznym przykładem HĘ może być zwarcie w stopniu wyjściowym jednego z buforów magistrali danych. Kostka pamięci wystawia wówczas na uszkodzonej linii (niezależnie od faktycznej zawartości danej lokalizacji pamięci) zawsze ten sam poziom logiczny. Błędy sporadyczne (SE) Źródłem błędów tego rodzaju jest promieniowanie jonizacyjne (ALFA,BETA,GAMA ), a w głównej mierze szczątkowe promieniowanie a emitowane przez zanieczyszczenia samej struktury krzemowej oraz materiał izolacyjny obudowy scalonego układu pamięci, a także promieniowanie kosmiczne. Częstotliwość występowania błędów SE określa współczynnik SER (Software Error Ratę). Charakterystyczne jest, iż liczba przekłamań wywołanych przez te czynniki maleje wraz z postępem technologicznym. Pamięć operacyjna l MB praprzodka dzisiejszych komputerów PC zbudowana była z kostek o pojemności jednostkowej 64 kb. Obliczenia szacunkowe prowadzą do wniosku, iż błędy SE pojawiały się wówczas średnio co 120 godzin pracy. Nowoczesny komputer wyposażony jest w około 128 MB pamięci operacyjnej (DRAM lub SDRAM) ale na bazie kostek co najmniej 16 Mb. Konstrukcja taka podlega wystąpieniom błędów SE średnio raz na 8 lat nieprzerwanej pracy. Powyższe oszacowania pochodzą od jednego z producentów układów pamięci i mają charakter symulacji statystycznej modelowanej w warunkach idealnych. Oczywiście, uwzględnienie wpływu realnego otoczenia i rzeczywistych warunków pracy może dać mniej optymistyczne wyniki. Nie wolno przecież zapominać o rozrzucie technologicznym i niedokładnościach wykonania układów, wpływie podwyższonej temperatury i zawyżanych częstotliwości taktowania a także złej jakości impulsów sterujących powstałych na skutek niedoróbek w układach otoczenia modułów pamięciowych (niestarannie projektowane płyty główne, przesłuchy na ścieżkach, niedostateczna filtracja sygnałów zakłócających na liniach zasilania). Ocenia się, że współczesny statystyczny PC podlega w warunkach realnych średnio jednemu błędowi SE na rok nieprzerwanej pracy. Wartość taka budzi co prawda zastrzeżenia w odniesieniu do serwerów dużych baz danych ale nie powinna spędzać snu z powiek statystycznemu posiadaczowi komputera w domu lub pracy. Kontrola parzystości Kontrola parzystości stanowi prostą technikę umożliwiającą wykrywanie błędów powstających w fazie przesyłania i przechowywanych danych. Z matematycznego punktu widzenia jest to suma modulo 2 tworzona z wszystkich bitów chronionego obiektu (bąjtu, słowa lub większego bloku). Techniczna realizacja takiej sumy sprowadza się do stwierdzenia czy liczba logicznych jedynek w obiekcie jest parzysta czy nieparzysta. (Kontrola parzystości pracuje w trybie parzystym E (Even) lub nieparzystym O (Odd). Obiekt uzupełniony o bit parzystości typu E ma wówczas zawsze nieparzystą liczbę jedynek (w sumie, tzn. bity danych i bit parzystości) a typu O parzystą.). Samo badanie jest łatwe do przeprowadzenia przy pomocy prostych, tanich i szybkich układów logicznych a wynik (stanowiący jedno dodatkowe pole bitowe) można łatwo przechowywać lub przesyłać wraz z danymi. Łatwo zauważyć, iż tak zdefiniowana suma kontrolna gwarantuje wykrywanie wyłącznie nieparzystej liczby błędów. Jednoczesne przekłamania na parzystej liczbie pól bitowych (2, 4,...) pozostają niezauważone. Prawdopodobieństwo wystąpienia wielokrotnych błędów rośnie wraz z rozmiarami obiektów. Kontrola parzystości chroni stosunkowo dobrze pojedyncze bajty danych, gdzie najczęściej występują błędy jednokrotne. Gwarancja bezpieczeństwa w przypadku długich bloków danych drastycznie maleje. Można oczywiście ograniczać rozmiary bloku (nawet do pojedynczego słowa bajtowego, tak jak w przypadku protokołu RS 232) ale wzrasta wtedy ilość dodatkowej informacji, którą trzeba transmitować. Protokoły komunikacyjne wyższej generacji (Y-Modem, Z-Modem) rezygnują z kontroli parzystości pojedynczych bajtów na rzecz ochrony całych bloków danych. W tym przypadku miejsce prostych sum kontrolnych modulo 2 zajmują kody CRC lub ECC (stosowane też w technice zapisu na dyskietkach i dyskach twardych). Aspekty ekonomiczne i techniczna łatwość realizacji kontroli parzystości sprawiły, że znalazła ona zastosowanie nie tylko w protokole transmisji szeregowej oraz przy ochronie danych przechowywanych w pamięci operacyjnej PC ale i w różnych protokołach transmisyjnych o charakterze równoległym (np. SCSI) a nawet na magistralach wewnętrznych niektórych procesorów. Mechanizm kontroli parzystości pamięci operacyjnej (na poziomie bajtów) wbudowany został w architekturę PC od samego początku jej powstania i bardzo długo się w niej utrzymywał. Implementacja kontroli parzystości podnosi cenę pamięci operacyjnej o około 10%. Bit parzystości przechowywany jest przecież w dodatkowej (dziewiątej) komórce pamięci, którą trzeba utworzyć i oddać do dyspozycji systemu. Warto jednak zwrócić uwagę, iż komórka ta podatna jest na błędy (SE i HE) w takim samym stopniu jak pozostałe osiem przechowujące właściwe dane. Fakt ten wykorzystywany jest przez przeciwników kontroli parzystości bowiem w gruncie rzeczy pogarsza ona (dokładnie o 12,5%) współczynnik niezawodności systemu. Linie parzystości stanowią ponadto dodatkowe obciążenie dla sterowników pamięci co owocuje ograniczeniem stromości zboczy impulsów. Na koniec wreszcie warto nadmienić, że komórki pamięci przechowujące bity parzystości, czy to na modułach 30-końcówkowych (9 bitów) czy też na 72-końcówkowych SIMM (36 bitowych) wykonywane są prawie zawsze z układów pamięci starszej generacji niż pozostałe układy. Można tak robić, gdyż przechowują one co najwyżej jedną czwartą informacji w stosunku do chipów danych. W sumie podnosi to znacznie wrażliwość na błędy SE. Aby nie zostać posądzonym o brak obiektywizmu trzeba też nadmienić o innych badaniach statystycznych. Wieloletnie symulacje komputerowe (przeprowadzane jeszcze w czasach dominacji systemu operacyjnego MS-DOS) wykazały, iż większa część błędów powstałych w pamięci operacyjnej nie odgrywa istotnej roli. Testy polegały na świadomych zmianach stanów bitów losowo wybranych komórek, tak by nie zostały one wykrywane przez kontrolę parzystości. Okazało się, iż prawdopodobieństwo trafienia w czuły punkt (tak, by przynajmniej zapisać na dysk twardy błędną informację) jest niezmiernie małe. Wyniki tych badań nadają całej dyskusji na temat sensu kontroli parzystości dodatkowy czynnik „względności" i oddają nas jeszcze raz w ręce prawa Murphy'go: ten jeden decydujący błąd, który wydarzy się raz jeden na 10 lat przyjdzie na pewno w najmniej odpowiednim momencie. Rosnąca konkurencja i stale zwiększany nacisk na redukcję kosztów produkcji sprawił, że z wolna rezygnowano z tej pozycji w budżecie PC. W fazie przejściowej produkowano układy z logiczną parzystością, gdzie miejsce prawdziwej komórki pamięci zajmowały bramki logiczne generujące sygnał kontrolny. W programach konfiguracyjnych BIOS pojawiła się opcja umożliwiająca wyłączanie kontroli parzystości i posługiwanie się tańszymi modułami pamięci. Później doszło nawet do tego, że niektóre komputery całkowicie lekceważyły obecność bitów parzystości (nawet jeśli były one fizycznie obecne, a opcja kontroli została aktywowana). Kontrola ECC W momencie gdy szerokość magistrali pamięciowej osiągnęła 8 bajtów stało się oczywiste, iż nadszedł czas na wprowadzenie efektywniejszych środków kontrolujących spójność danych. Zadanie to powierzone zostało sumie kontrolnej ECC (Error Correction Code), której właściwości nie ograniczają się wyłącznie do wykrywania błędów, ale (w pewnym ograniczonym zakresie) również do ich korekcji. 64-bitowe moduły z parzystością potrzebowały 8 dodatkowych bitów - tyle również wymagane jest dla zaimplementowania ECC w formie SEC (Single Error Correcf). Propagatorzy modułów z ECC mają ułatwione zadanie z uwagi na obecność silnego czynnika ekonomicznego. Aktualna sytuacja cenowa jest taka, iż moduły z parzystością stają się droższe od swych odpowiedników z ECC. Na parzystość poświęcane były dotychczas specjalne kostki pamięci (inne niż dla danych), w organizacji ...xl lub z czterema końcówkami ~CAS (Qnad-CAS DRAM). Moduły ECC są tak projektowane, by móc wykorzystywać dokładnie te same układy, w których magazynuje się dane. Warto wiedzieć, że system pracujący pod nadzorem ECC cechuje się zmniejszeniem wydajności (programy testowe wykazują spadek l - 3%). Główne powody tego stanu rzeczy dają się zebrać w dwóch punktach: - Cykle odczytu. Źródłem opóźnienia są dodatkowe układy logiczne implementujące algorytm obliczający sumy ECC. Obwody te bazują na kaskadowym połączeniu bramek XOR, które nie należą do najszybszych elementów logicznych. W wyniku tego obserwuje się nieco wydłużony czas dostępu. W przełożeniu na wymiar dostępu pakietowego (Bursf) mamy, w przypadku EDO, zamiast x-2-2-2 raczej x-3-3-3. - Cykle zapisu. Sam układ ECC jako taki nie wprowadza w zasadzie znaczących opóźnień w czasie dostępu do pamięci. Rzeczywiste spowolnienie pracy systemu z aktywnym mechanizmem ECC pojawia się w cyklach zapisu odwołujących się do pojedynczych bajtów lub ogólnie lokalizacji o szerokości poniżej 64 bitów. Dostęp taki nie może być po prostu wykonany i jest blokowany przez kontroler pamięci. Kontrolny bajt ECC obejmuje bowiem swym zasięgiem obszar pełnych 8 bajtów. Jakakolwiek najmniejsza zmiana w obrębie tego obszaru pociąga za sobą konieczność korekcji sumy kontrolnej. Oznacza to, iż cykl zapisu musi być w tym wypadku poprzedzony cyklem odczytu (8 bajtów). Odczytany blok zostaje zmodyfikowany po czym oblicza się nową sumę kontrolną i zapisuje całość. Proces ten określany jest też często mianem RMW (Read-Modify-Write). Kontrolery pamięci starają się grupować dostępy tego typu w buforach pośrednich (Write Bach Buffers) w nadziei, iż w niedalekiej przyszłości system odwoła się do jakiejś lokalizacji leżącej w obrębie tej samej grupy 8-bajtowej. Klasyczny przykład z tego zakresu to dostęp do pamięci kontrolera dysków elastycznych, który z natury rzeczy przesyła dane w porcjach po 16 bitów. Układy pamięci magistrali 100 MHz Taktowanie magistrali pamięciowej zegarem 66 MHz ograniczało od dłuższego czasu możliwości aktualnych systemów. Procesory pracujące z coraz większą częstotliwością tracą część mocy obliczeniowej w oczekiwaniu na dostęp do pamięci. To właśnie dla potrzeb nowych modeli CPU, zarówno linii Pentium II (od 350 MHz) jak i przedstawicieli grupy Socket Super 7 (AMD K6-2 i następne) opracowany został model magistrali kluczowanej zegarem 100 MHz. Pasmo przepustowe takiej szyny sięga teoretycznej wartości maksymalnej równej 800 MB/s. Nowa szybka magistrala wymaga równie szybkich układów pamięci. Synchroniczne pamięci dynamiczne mogą podołać tym wymogom ale dla ich sprawnego funkcjonowania niezbędne jest dostarczania „czystych" i ostro zarysowanych impulsów o stromych zboczach. Układy pamięci SDRAM grupowane są naturalnie w moduły pamięci typu DIMM i montowane w podstawkach na płycie głównej. Warto zdawać sobie sprawę, iż zagadnienie poprawnej komunikacji szybkich pamięci z procesorem nie ogranicza się wyłącznie do magistral ale sięga również wnętrza samych modułów pamięciowych. Pamięci synchroniczne wymagają od otaczającego je systemu spełnienia bardzo precyzyjnych reżimów czasowych. Sam moduł ma w najlepszym razie 10 ns na dostarczenie lub odebranie danych. Rozprowadzenie wszystkich sygnałów (sterujących, adresowych i danych) pomiędzy kilkoma lub kilkunastoma kostkami pamięci nie jest wcale łatwe. Każdy z impulsów musi osiągnąć swój punkt docelowy w tym samym czasie, niezależnie od fizycznej odległości od listwy połączeniowej. Przy częstotliwościach tego rzędu zaczynają odgrywać rolę zjawiska falowe, przesłuchy między ścieżkami oraz inne szkodliwe czynniki. Wielowarstwowe laminaty stwarzają konieczność skomplikowanej analizy impedancji projektowanego układu. Optymalizacja takich konstrukcji nie jest ani łatwa ani tania i nie każda firma montująca moduły może sobie na nią pozwolić. Wyrównywanie czasu przebiegów osiąga się poprzez szereg skomplikowanych zabiegów polegających na wprowadzaniu dodatkowych impedancji korekcyjnych (w opracowaniach wysokiej klasy) lub świadome spłaszczanie zboczy impulsów uzyskiwane dzięki włączaniu szeregowych rezystancji i dodatkowych pojemności równoległych. Faktem jest, iż produkty szeregu wytwórców różnią się od siebie w istotnym stopniu. Różnice w głównych parametrach czasowych (Setup-Time, Hold-Time), rozbieżne charakterystyki wzmacniaczy wyjściowych, różna odporność na szumy i zakłócenia oraz zróżnicowane tolerancje napięć zasilających uniemożliwiają montaż uniwersalnych modułów, a każdy projekt musi być dostosowany do konkretnych typów i modeli układów SDRAM. Z punktu widzenia komputera (i ostatecznie jego użytkownika) ważne jest by moduł pracował stabilnie: dostarczał i odbierał dane w obrębie ostro zarysowanego okna czasowego i prezentował na zewnątrz (mimo odmiennego wnętrza) zestaw jednolitych parametrów. Dla zapewnienia takiej zgodności opracowana została specyfikacja PC-100 definiująca dokładnie zachowanie takiego modułu. PC-100 stanowi zestaw zaleceń i szczegółów konstrukcyjnych obejmujących swym zakresem moduły jako całość, parametry ich składników (układów pamięci i ewentualnych dodatkowych układów logicznych) oraz definicję pamięci konfiguracyjnej SPD. Specyfikacja PC-100 jest zgodna „w dół" - moduły spełniające wymogi PC-100 gwarantują poprawność pracy w systemach z magistralą 66 MHz (Przez analogią określane jako elementy kiasy PC-66 lub zgodne ze specyfikacją PC-66.). Moduł Topologia modułu PC-100 została zdefiniowana bardzo szczegółowo. Określone zostały nie tylko szerokości ścieżek i ich wzajemny odstęp ale nawet liczba warstw laminatu (poziomów) i opory falowe poszczególnych linii a także przynależność grup sygnałów do określonych poziomów. Dokładnie zdefiniowane zostało położenie układów na płytce (zarówno dla danych jak i dla bitów parzystości i ECC) oraz wymiary samej płytki, a także szczegóły konstrukcyjne złącza krawędziowego. Klucz pomiędzy kontaktami 10 i l l przesunięty jest w stronę końcówki 11. Drugi klucz umieszczony jest symetrycznie pomiędzy kontaktami 40 i 41. Klucz pierwszy identyfikuje DIMM jako nie buforowany, a klucz drugi informuje o poziomie napięć 3,3V. Płyta główna doprowadza do modułów cztery sygnały zegarowe CLK a ich rozkład pomiędzy poszczególnymi układami zależy od konfiguracji i liczby banków. Niezależnie od przyjętej organizacji, dopuszczalne rozbieżności czasowe pomiędzy bankami nie mogą przekraczać 2,2 ns. Moduły zgodne ze specyfikacją PC-100 powinny być oznaczane według następującego systemu: PCa-bcd-efg-h np. PC 100-322-620 gdzie: - a - maksymalna częstotliwość taktowania modułu w MHz, w tym wypadku 100. - b - opóźnienie TCL (CAS Latency) wyrażane w cyklach zegara, możliwe wartości to 2 lub 3. - c - wartość przerwy czasowej TRCD (RAS to CAS Delay) koniecznej pomiędzy podaniem adresu wiersza a podaniem adresu kolumny, wyrażana w cyklach zegara. - d - wartość opóźnienia TRP (RAS Precharge Time) niezbędnego do przygotowania banku (upływający od ostatniej deaktywacji do momentu podania adresu nowego wiersza), wyrażane w cyklach zegara (typowa wartość 2). - e - czas oczekiwania na dane TAC (Output Yalidfrom Clock) podawany w ns, możliwe wartości to 6 lub 7. - f- wersja specyfikacji, według której zapisana została pamięć konfiguracyjna SPD, liczba 2 odpowiada aktualnej wersji 1.2. • g - pole zarezerwowane do przyszłych zastosowań, w chwili obecnej zapełniane przez cyfrę 0. • h - pole puste lub wypełnione literą R (Registered) jeśli moduł wyposażony jest w bufory zmniejszające stopień obciążenia linii sterujących. Kluczowe znaczenie dla określenia jakości modułów ma pole e. Wartość ta stanowi bezpośredni wyznacznik szybkości działania elementarnych kostek pamięciowych. Produkowane obecnie układy SDRAM podzielić można na dwie klasy: T#AC = 6 ns i T#AC = 7 ns. Moduły zbudowane z jednostek pierwszej klasy nadają się jako pełna obsada płyt głównych wyposażonych w dużą (powyżej dwóch) liczbę podstawek DIMM. Tanie systemy (Low Cost PC) zadowalać się mają modułami drugiej klasy (T#AC = 7 ns). Nie wolno jednak instalować więcej niż dwóch takich modułów jednocześnie, niezależnie od liczby podstawek na płycie. Dla porównania, moduły klasy PC-66 budowane były z kostek, dla których T#AC leżało w zakresie 9 ns. Układy pamięci SDRAM PC-100 Wymogi narzucane przez specyfikację PC-100 na układy pamięci sprowadzają się głównie do parametrów czasowych takich jak T#AC, T#RAS, T#CL. Moduł opisany zgodnie z regułami określonymi przez PC-100 można łatwo „wyprodukować" nalepiając etykietkę z dobrze brzmiącym napisem. Rynek zarzucony jest modułami pamięci różnej jakości i pochodzenia. Zakładając, iż prawdą jest to co można odczytać z samej kostki pamięci (fałszowanie napisów na elementach półprzewodnikowych stało się chlebem powszednim w tej branży) można próbować zlokalizować jej pochodzenie i parametry. Zebrane w tabeli 3.31 oznaczenia niektórych wybranych układów pamięci spełniających wymogi specyfikacji PC-100 może ułatwić to zadanie. Tabela zgrupowana jest według producentów a oprócz symbolu układu pamięciowego podana jest jego organizacja w następującej formie S: DxWxB-R-MR/MC gdzie: - S - pojemność (Size, Density) - D - głębokość, rozmiar macierzy pamięci (Depth) - W - szerokość (Data Width) - B - liczba banków (Number ofBanks) - R - odświeżanie (RefresH) - M#R - organizacja logiczna adresów wiersza (Mapping Rows) - M#C - organizacja logiczna adresów kolumny (Mapping Columns) Lista nie jest i nie może być pełna, bowiem coraz krótszy jest czas opracowywania nowych konstrukcji i coraz szybciej wprowadzane są one do obiegu. Maleje również „czas życia" produktu, który znika często z listy wytwórcy zanim zdążył wystąpić jako powszechny element modułu pamięciowego. Tabela 3.31. Oznaczenia wybranych układów pamięci spełniających wymogi specyfikacji PC-100 Oznaczenie układu; Organizacja układu; Fujitsu; MB81F 16822B; 16 Mb: 1Mx8x2-4K-11/9; MB81F 16422B; 16Mb:2Mx4x2-4K-11/9; MB81F 161622B; 16Mb:512Kxl6x2-4K-11/8; MB81F 64442B; 64Mb:4Mx4x4-4K-12/8; MB81F 64842C; 64Mb:2Mx8x4-4K-12/8; MB81F 641642D; 64 Mb: !Mxl6x4-4K-12/8; MB81F 64442B; 64Mb:4Mx4x4-4K-12/8; MB81F 64842D; 64Mb:2Mx8x4-4K-12/8; MB81F 641642C; 64 Mb: !Mxl6x4-4K-12/8; Hitachi; HM 52 64405-B60; 64 Mb: 4Mx4x4-?K-?/? HM 52 64805-B60; 64 Mb: 2Mx8x4-?K-?/? HM5264165-B60; 64 Mb: IMxl6x4-?K-?/? HM 52 12805; 64 Mb: 4Mx8x4-8K-?/? HM 52 12165; 128Mb:2Mxl6x4-8K-?/? HM 52E 2540N5; 256 Mb: 16Mx4x4-8K-?/? HM52E2580N5; 256 Mb: 8Mx8x4-8K-?/? HM52E2516N5; 256Mb:4Mxl6x4-8K-?/? HM 52 25165A-A6/B6; 256Mb:4Mxl6x4-?K-?/? HM 52 25805A-A6/B6; 256 Mb: 8Mx8x4-?K-?/? HM 52 25405A-A6/B6; 256 Mb: 16Mx4x4-?K-?/? HM5264165D-A(B)60; 64 Mb: 1Mxl6x4-?K-?/? HM 52 64805D-A(B)60; 64 Mb: 2Mx8x4-?K-?/? HM 52 64405D-A(B)60; 64 Mb: 4Mx4x4-?K-?/? HM52E2516N5; 256 Mb: 4Mx16x4-8K-?/? HM52E2516N5; 256Mb:4Mxl6x4-8K-?/? Hyundai; HY 57V 164010C(D)TC; 16Mb:2Mx4x2-4K-?/? HY 57V 168010C(D)TC; 16 Mb: 1Mx8x2-4K-?/? HY 57V654010ATC; 64 Mb: 8Mx4x2-4K-?/? HY 57V 654020A(B)TC; 64 Mb: 4Mx4x4-4K-?/? HY 57V658010ATC; 64 Mb: 4Mx8x2-4K-?/? HY 57V 658020A(B)TC; 64 Mb: 2Mx8x4-4K-?/? HY 57V651610ATC; 64 Mb: 8Mx4x2-^K-?/? HY 57V651620A(B)TC; 64 Mb: 4Mx4x4-4K-?/? HY 57V 1294020TC; 128Mb:8Mx4x4-4K-?/? HY 57V 1298020TC; 128Mb:4Mx8x4-4K-?/? HY 57V 1291620TC; 128Mb:2Mxl6x4-4K-?/? HY 57V644011TC; 64Mb:8Mx4x2-8K-10/12 HY 57V644021TC; 64Mb:4Mx4x4-8K-10/ll HY 57V654011TC; 64 Mb: 8Mx4x2-4K-10/12 HY 57V 65402 ITC; 64Mb:4Mx4x4-4K-10/ll HY 57V644011TC; 64Mb:4Mx8x2-8K-9/12; HY 57V648011TC; 64 Mb: 2Mx8x4-8K-9/l 1; HY 57V 64802 1TC; 64Mb:4Mx8x2^K-9/12; HY 57V658011TC; 64Mb:2Mx8x4-4K-9/11; HY 57V 65802 1TC; 64Mb:2Mxl6x2-8K-ll/12; HY 57V641621TC; 64 Mb: 1Mxl6x4-8K-8/11; HY 57V 65161 1TC; 64 Mb: 2Mxl6x2-4K-l 1/12; HY 57V651621TC; 64 Mb: !Mxl6x4-4K-8/11; IBM; IBM03 16809CT3D-6; 16Mb:2Mx8xl-łK-11/9; IBM03 64404 CT3 A-6; 64 Mb: 8Mx4x2-4K-12/10; IBM03 64804 CT3 A-6; 64Mb:4Mx8x2-4K-12/9; IBM03 644 B4 CT3 A-6; 128 Mb: 16Mx4x2-4K-12/10; IBM03 64404 CT3 B(C); 64 Mb: 16Mx4xl-4K-12/10; IBM03 64804 CT3 B(C); 64Mb:8Mx8xl^łK-12/9; 1BM0364164CT3 B(C); 64Mb:4Mxl6xl-4K-12/8; IBM03 644 B4 CT3 B(C); 128 Mb: 2x (4Mx4x4-4K-12/10); IBM03 25404 CT3 A; 256 Mb: 16Mx4x4-8K-13/l 1; IBM03 25804 CT3 A; 256Mb:8Mx8x4-8K-13/10; IBM0325164 CT3 A; 256 Mb: 4Mxl6x4-8K-13/9; IBM03 254B4 CT3 A; 128 Mb: 2x (4Mx4x4-8K-13/l 1); LGS GM72V 161621 ET-7J(K),8; 16Mb:512Kxl6x2-4K-?/?; GM72VY 16821 DT-7K; 16 Mb: 1Mx8x2-4K-?/?; GM72V 66441 C(L)T/D(L)I/E(L)T-7J(K),8; 64 Mb: 4Mx4x4-4K-?/?; GM72V 66841 C(L)T/D(L)I/E(L)T-7J(K),8; 64 Mb: 2Mx8x4-4K-?/?; GM72V 661641 C(L)T/D(L)I/E(L)T-7J(K),8; 64 Mb: !Mxl6x4-4K-?/?; GM72V 66421 CT-7J; 64 Mb: 8Mx4x2-4K-?/?; GM72V 66441 CT-7J; 64 Mb: 4Mx4x4-4K-?/?; GM72V 66821 CT-7J; 64 Mb: 4Mx8x2-4łK-?/?; GM72V 66841 CT-7J; 64 Mb: 2Mx8x4-4K-?/?; GM72V661621 CT-7J; 64 Mb: 2Mxl6x2-4K-?/?; GM72V661641 CT-7J; 64 Mb: !Mxl6x4^K-?/?; GM72V 28441; A(L)T-7J(K),8; 128Mb:8Mx4x4-4K-?/?; GM72V 28841; A(L)T-7J(K).8; 128Mb:4Mx8x4-4K-?/?; GM72V28I641 A(L)T-7J(K).8; 128 Mb: 2Mxl6x4-4K-?/?; Micron MT48LC 1M16A 1TG-8S; 16Mb:512Kxl6x2-4K-11/8; MT48LC2M8A 1TG-8S; 16 Mb: lMx8x2-4K-11/10; MT48LC4M4A 1TG-8S; 16Mb:2Mx4x2-4K-11/9; MT48LC 16M4A2TG-8A/E; 64 Mb: 1 Mx 16x4-4K- 12/10; MT48LC 1M16A2TG-8A/E; 64Mb:2Mx8x4-4K-12/9; MT 48LC 4M16A 2TG-8A/E; 64Mb:4Mx4x4-4K-11/8; MT48LC 16M4A2; 64 Mb: 16Mx4x4; MT 48LC 8M8 A2; 64 Mb: 8Mx8x4 MT48LC4M16A2; 64Mb:4Mxl6x4 MT 48LC 32M4 A2; 128 Mb: 32Mx4x4 MT48LC 16M8A2; 128 Mb: 16Mx8x4 MT48LC8M16A2; 128 Mb: 8Mxl6x4 Mitsubishi M5M4V 16S20DTP-7; 16Mb:2Mx4x2-4K-11/10; M5M4V 16S20DTP-8; 16Mb:2Mx4x2--4K-11/10; M5M4V 16S30DTP-7; 16 Mb: !Mx8x2-4K-11/9; M5M4V 16S30DTP-8; 16 Mb: !Mx8x2-4K-11/9; M5M4V 16S40DTP-7; 16Mb:512Kxl6x2-4K-11/8; M5M4V 16S40DTP-8; 16 Mb: 512Kxl6x2-4K-11/8; M5M 4V 64S20 ATP-8; 64 Mb: 4Mx4x4-4K-12/10; M5M 4V 64S30 ATP-8; 64Mb:2Mx8x4-4K-12/9; M5M 4V 64S40 ATP-8; 64 Mb: !Mxl6x4-4K-12/8; M5M 4V 64S20 BTP-7; 64Mb:4Mx4x4-4K-12/10; M5M 4V 64S30 BTP-7; 64Mb:2Mx8x4-4K-12/9; M5M 4V 64S20 BTP-7; 64 Mb: lMxl6x4-4K-!2/8; M2V 28S20-7.8(A); 256 Mb: 32Mx4xx4-4K-?/?; M2V 28S30-7.8(A); 256 Mb: 16Mx8x4-4K ?/?; M2V 28S40-7.8(A); 256 Mb: 8MxI6x4-4K ?/?; u - oznacza w tym wypadku "mi" NEC uPD45 16421 A; 16Mb:2Mx4x2-2K-11/10; uPD45 16821 A; 16 Mb: !Mx8x2-2K-11/9; uPD45 16161 A; 16Mb:512Kxl6x2-2K-11/8; uPD 45 64441; 64 Mb: 4Mx4x4-4K-12/10; uPD 45 64841; 64Mb:2Mx8x4^tK-12/9; uPD4564163; 64 Mb: 1Mxl6x4-4K-12/8; uPD45 64441G5-A80(L)-9JF; 64 Mb: 4Mx4x4-4K-12/10; uPD45 64841G5-A80(L)-9JF; 64Mb:2Mx8x4-4K-12/9; uPD 45 64163G5-A80(L)-9JF; 64 Mb: 1Mxl6x4-4K-12/8; uPD45 128441G5; 128Mb:8Mx4x4-?K-?/?; uPD45 128841G5; 128Mb:4Mx8x4-?K-?/?; uPD45 128163G5; 128Mb:2Mxl6x4-?K-?/?; Samsung KM 48S 2020CT; 16 Mb: !Mx8x2-4K-12/10; KM 44S 4020CT; 16Mb:2Mx4x2-4K-12/11; KM416S 1020CT 16 Mb: 512Kxl6x2-2K-12/9; KM44S 16020B; 64Mb:8Mx4x2^HC-14/12; KM44S 16030B,C; 64Mb:4Mx4x4-4K-14/12; KM 48S 8020B-G(F)8; 64 Mb: 4Mx8x2-4K-?/?; KM 48S 8030(B/C)-G(F)7,8; 64 Mb: 2Mx8x4-4K-?/?; KM416S4030BT; 64 Mb: 1 Mx 16x4-4K- 14/10; KM416S8030B-G(F)8; 128Mb:2Mxl6x4-4K-14/ll; KM48S 16030B-G(F)8; 128 Mb: 4Mx8x4-4K-14/12; KM 44S 32030B-G(F)8; 128 Mb: 8Mx4x4-4K-14/13; KM 432S 2020B-G/F; 64 Mb: !Mx32x2-4K-?/?; KM 432S 2030B-G/F; 64 Mb: 512Kx32x4-4K-14/12; KM 416S 402(0/1 )B-G/(F)7,8; 64Mb:2Mxl6x2-4K-14/10; KM 4 1 6S 403(0/ 1 )B/C-G/(F)7.8; 64 Mb: !Mxl6x4-4K-14/10; Siemens HYB39S 16800 B/CT-8; 16 Mb: !Mx8x2-4K-12/9; HYB39S 16400 B/CT-8; 16Mb:2Mx4x2-4K-12/10; HYB39S 161 60 B/CT-8; 16Mb:512Kxl6x2-4K-12/11; HYB39S 64160 AT(L)-8(B); 64 Mb: !Mxl6x4-4K-14/8; HYB 39S 64800 AT(L)-8(B); 64Mb:2Mx8x4-4K-14/9; HYB 39S 64400 AT(L)-8(B); 64 Mb: 4Mx4x4-4K-14/10; HYB 39S 256160 T-8(B); 256Mb:4Mxl6x4-8K-?/?; HYB 39S 256800T-8(B); 256 Mb: 8Mx8x4-8K-?/?; HYB 39S 256400T-8(B); 256 Mb: 16Mx4x4-8K-?/?; Toshiba; TC59S 6404 BFT-80; 64 Mb: 4Mx4x4-4K-12/10; TC59S 6408 BFT-80; 64Mb:2Mx8x4-4K-12/9; TC59S 6416 BFT-80; 64 Mb: !Mxl6x4-4K-12/8; GM72V 28441; A(L)T-7J(K),8; 128Mb:8Mx4x4-4K-?/?; GM72V 28841; A(L)T-7J(K).8; 128Mb:4Mx8x4-4K-?/?; GM72V28I641 A(L)T-7J(K).8; 128 Mb: 2Mxl6x4-4K-?/?; Micron MT48LC 1M16A 1TG-8S; 16Mb:512Kxl6x2-4K-11/8; MT48LC2M8A 1TG-8S; 16 Mb: lMx8x2-4K-11/10; MT48LC4M4A 1TG-8S; 16Mb:2Mx4x2-4K-11/9; MT48LC 16M4A2TG-8A/E; 64 Mb: 1 Mx 16x4-4K- 12/10; MT48LC 1M16A2TG-8A/E; 64Mb:2Mx8x4-4K-12/9; MT 48LC 4M16A 2TG-8A/E; 64Mb:4Mx4x4-4K-11/8; MT48LC 16M4A2; 64 Mb: 16Mx4x4; MT 48LC 8M8 A2; 64 Mb: 8Mx8x4 MT48LC4M16A2; 64Mb:4Mxl6x4 MT 48LC 32M4 A2; 128 Mb: 32Mx4x4 MT48LC 16M8A2; 128 Mb: 16Mx8x4 MT48LC8M16A2; 128 Mb: 8Mxl6x4 Mitsubishi M5M4V 16S20DTP-7; 16Mb:2Mx4x2-4K-11/10; M5M4V 16S20DTP-8; 16Mb:2Mx4x2--4K-11/10; M5M4V 16S30DTP-7; 16 Mb: !Mx8x2-4K-11/9; M5M4V 16S30DTP-8; 16 Mb: !Mx8x2-4K-11/9; M5M4V 16S40DTP-7; 16Mb:512Kxl6x2-4K-11/8; M5M4V 16S40DTP-8; 16 Mb: 512Kxl6x2-4K-11/8; M5M 4V 64S20 ATP-8; 64 Mb: 4Mx4x4-4K-12/10; M5M 4V 64S30 ATP-8; 64Mb:2Mx8x4-4K-12/9; M5M 4V 64S40 ATP-8; 64 Mb: !Mxl6x4-4K-12/8; M5M 4V 64S20 BTP-7; 64Mb:4Mx4x4-4K-12/10; M5M 4V 64S30 BTP-7; 64Mb:2Mx8x4-4K-12/9; M5M 4V 64S20 BTP-7; 64 Mb: lMxl6x4-4K-!2/8; M2V 28S20-7.8(A); 256 Mb: 32Mx4xx4-4K-?/?; M2V 28S30-7.8(A); 256 Mb: 16Mx8x4-4K ?/?; M2V 28S40-7.8(A); 256 Mb: 8MxI6x4-4K ?/?; Pamięć konfiguracyjna (SPD) Bardzo ważne miejsce w specyfikacji PC-100 zajmuje definicja pamięci konfiguracyj-nej SPD (Serial Presence Detect). Pamięć tę stanowi kostka EEPROM, programowana przez producenta modułu. SPD nie jest wymysłem twórców PC-100, moduły DIMM były w nią wyposażane jeszcze w czasach królowania PC-66. Różnica polega na tym, iż dla modułów PC-100 pamięć SPD jest obowiązkowa (DIMM PC-66 mógł ale nie musiał jej posiadać). Zagwarantowanie poprawnej pracy całego systemu pamięci w systemie z magistralą 100 MHz uwarunkowane jest odczytaniem przez BIOS zawartości SPD i w ślad za tym zaprogramowanie odpowiednich rejestrów sterujących płyty głównej. Moduły buforowane PC-100 Część specyfikacji PC-100 poświęcona jest opracowaniom modułów specjalnych o dużej pojemności. Problemu leży tu nie tyle w konstrukcji mechanicznej (zwykle stosowane są rozwiązania pakietowe obejmujące dwie płytki drukowane), co w zapewnieniu równomiernego rozprowadzenia sygnałów pomiędzy poszczególnymi kostkami szczególnie jeśli jest ich wiele i w stosunkowo dużej odległości od siebie. W wersji 1.2 specyfikacji znaleźć można zalecenia konstrukcyjne dla modułu l GB złożonego z 36 kostek 256 Mb w układzie x72, czyli po jednym dodatkowym bicie ECC na każdy bajt danych - rozkład końcówek takiego modułu przedstawiony jest w tabeli 3.32. Blokada mechaniczna (system wcięć na grzebieniu kontaktowym) modułów z rejestrami jest taka jak dla modułów niebuforowanych - lewy klucz zbliżony jest do końcówki 11 a środkowy klucz usytuowany jest centralnie. Tabela 3.32. Pola kontaktowe buforowanego modułu DIMM SDRA M PC-100 Styk: Przód, Tył; Przód; Tył; 1/85; Vss; Vss; 2/86;DQODQ32 3/87;DQIDQ33 4/88;DQ2DQ34 5/89;DQ3;DQ35 6/90;Vdd;Vdd 7/91DQ4;DQ36 8/92 DQ5; DQ37 9/93; DQ6; DQ38 10/94;DQ7;DQ39 11/95;DQS;DQ40 12/96;Vss;Vss 13/97;DQ9;DQ41 14/98;DQ10DQ42 15/99;DQ11;DQ43 16/100;DQ12;DQ44 17/101;DQ13DQ45 18/102;Vdd;Vdd 19/103;DQ14;DQ46 20/104;DQ15;DQ47 21/105;CBO;CB4 22/106; CB1; CB5 23/107;Vss; Vss 24/108;NC; NC 25/109;NC; NC 26/110;Vdd; Vdd 27/111;~WE; ~CAS 28/112;DQMBO; QMB4 29/113;DQMB1; DQMB5 30/114;~CSO; ~CSI 31/115;Zarezer.; -RAS 32/116;Vss; Vss 33/117;AO; Al 34/118;A2; A3 35/119;A4 A5 36/120;A6 A7 37/121;A8; A9 38/122;AIO (AP); BS 39/123; BS1; A11 40/124; Vdd; Vdd 41/125; Vdd; CLK1 42/126; CLKO; AI2 43/127; Vss; Vss 44/128; Zarezer.; CKEO 45/129;~CS2; -CS3 46/130;DQMB2; DQMB6 47/131;DQMB3; DQMB7 48/132;Zarezer.; AI3 49/133;Vdd; Vdd 50/134;NC; NC 51/135;NC; NC 52/136;CB2; CB6 53/137;CB3; CB7 54/138;Vss; Vss 55/139 DQ16; DQ48 56/140;DQ17; DQ49 57/141;DQ18; DQ50 58/142;DQ19;DQ5I 59/143;Vdd; Vdd 60/144; DQ20; DQ52 61/145;NC; NC 62/146; Vref/NC; Vret7NC 63/147;CKE1; REGE 64/148; Vss; Vss 65/149;DQ2I; DQ53 66/150;DQ22; DQ54 67/151;DQ23; DQ55 68/152;Vss; Vss 69/153;DQ24; DQ56 70/154;DQ25; DQ57 71/155;DQ26; DQ58 72/156;Vdd; Vdd 74/158; DQ28; DQ60 75/159;DQ29; DQ6I 76/160;DQ30; DQ62 77/161;DQ31; DQ63 78/162;Vss; Vss 79/163;CLK.2; CLK3 80/164;NC; NC 81/165;WP; SAO 82/166;SDA; SA1 83/167;SCL; SA2 84/168;Vdd; Vdd Równomierne rozprowadzenie sygnałów uzyskuje się dzięki buforom określanym również mianem rejestrów (Registers}. Buforowaniu podlegają wszystkie sygnały sterujące i linie adresowe ale z wyłączeniem samej magistrali danych (zarówno DQ0 -DQ63 jak i CB0 - CB7). Korzyści wynikające z synchronicznej pracy całego modułu okupuje się jednak dodatkowym opóźnieniem wprowadzanym przez układy rejestrów (przerzutniki i towarzyszące im bramki logiczne). Rejestry te to w gruncie rzeczy nic innego jak połączone równolegle przerzutniki typu „Dv. Pojedyncza komórka takiego rejestru przedstawiona jest na rysunku 3.28. Jeżeli linia ~LE znajduje się na niskim poziomie logicznym, sygnał wejściowy INx przekazywany jest po prostu na stowarzyszone z nim wyjście OUTx. Działanie układu zmienia się przy podniesieniu ~LE do wysokości logicznej jedynki. Przerzutnik przepisuje wówczas stan na wejściu D przy każdorazowym przejściu sygnału CLK z poziomu niskiego na wysoki (zbocze narastające). Jeżeli wejście zegarowe nie jest kluczowane (stały poziom, O lub 1) układ zatrzaskuje stan na wyjściu Q w momencie przejścia ~LE z 0 na 1. Omawiane tu rejestry grupowane są zwykle w układach scalonych po 16 lub 18 sztuk. Na rysunku 3.29 pokazany jest przykład realizacji typowego modułu buforowanego o organizacji x72 (64 bity danych i 8 bitów ECC). Pojemność dla danych wynosi tutaj 128 MB. Na całość składa się 18 kostek pamięciowych 64 Mb w konfiguracji 16Mx4. W modułach tego typu nad równomiernym rozprowadzeniem sygnałów zegarowych czuwa specjalny wielokanałowy generator PLL. Do każdego wyjścia tego układu podłączone są po trzy wejścia CLK kostek pamięciowych. Pętla PLL synchronizowana jest z wejścia CLKO modułu. Pozostałe trzy końcówki tj. CLK1 - CLK3 symulują obciążenie (poprzez odpowiednio dobrane dwójniki RC), tak by układy zewnętrzne nie odczuwały różnicy pomiędzy poszczególnymi wejściami zegarowymi modułu. Niewykorzystane końcówki rejestrów pozostawia się wolne. * * * Rozdział 4. System obsługi przerwań sprzętowych Najbardziej aktywnym elementem komputera jest sarn procesor (CPU). Niektóre z bloków funkcjonalnych, które składają się na jego otoczenie, wykonują operacje rozciągające się w czasie na wiele cykli zegarowych. Urządzenia te nie wymagają udziału procesora dla wykonania zleconych im zadań. Są to zwykle mniej lub bardziej niezależne kontrolery, często wyposażone we własny procesor. Na ogół wystarczy, by procesor zaprogramował rejestry sterujące tego urządzenia, wydając tym samym polecenie wykonania operacji (odebranie znaku przez łącze szeregowe, zapisanie sektora na dysku). Zainicjowana przez CPU operacja, jakkolwiek może trwać tysiące cykli zegarowych procesora, musi się kiedyś zakończyć (choćby błędem). Musi więc istnieć sposób poinformowania procesora o tym fakcie. Istnieją tutaj zasadniczo dwie możliwości: - Procesor okresowo wysyła zapytanie do urządzenia. Częstotliwość „odpytywania" jest ustalana przez wykonywany program i sposób stanowi kompromis pomiędzy szybkością reakcji procesora na zakończenie operacji a spowolnieniem jego pracy nad zadaniem pierwszoplanowym. Kod procedury odpytywania musi być zintegrowany z programem, co powiększa jego rozmiar. Zbyt częste odpytywanie hamuje wykonywanie bieżącego programu. Zbyt długie przedziały czasowe między kolejnymi odpytywaniami i nierównomiernie napływający strumień danych mogą spowodować, że część z nich zostanie utracona na skutek przepełnienia nie opróżnianego bufora wewnętrznego obsługiwanego urządzenia. - Urządzenie samo zgłasza wykonanie zadania. W najbliższym dogodnym dla siebie momencie procesor przerywa realizację aktualnie wykonywanego programu by, zapamiętawszy stan swoich rejestrów, przejść do realizacji procedury reagującej na zgłoszenie urządzenia. Kod tej procedury na ogół nie znajduje się w ciele programu, lecz w pamięci stałej komputera. Metoda opisana w punkcie pierwszym znana jest też pod nazwą polling i nie znajduje praktycznego zastosowania w komputerach PC. W drugim przypadku mówimy, że wystąpiło przerwanie (ang. interrupf) sprzętowe (gdyż pochodzące od urządzenia, a nie będące instrukcją programu). Ta forma sterowania przepływem danych jest w PC szeroko wykorzystywana. Znajduje ona zastosowanie w obsłudze urządzeń intensywnie wymieniających dane z pamięcią operacyjną, a więc przede wszystkim łącz szeregowych i równoległych, kontrolerów dysków (twardych i elastycznych), kart sieciowych oraz urządzeń, które dostarczają dane w sposób nieregularny - klasycznym przykładem jest tutaj klawiatura komputera. Trudno sobie wyobrazić bardziej rozsądne podejście do obsługi klawiatury, niż reagowanie na naciśnięcie klawisza za pomocą obsługi przerwania pochodzącego od sterownika klawiatury. W praktycznych zastosowaniach komputera (szczególnie wyposażonego w myszkę) klawiatura może przecież godzinami nie wysyłać żadnego znaku. W przypadku konieczności odczytania sektora z twardego dysku czas pozycjonowania głowic nad żądaną ścieżką i wyszukania żądanego sektora jest o dwa rzędy wielkości większy niż czas potrzebny na samo przesłanie zawartych w tym sektorze 512 bajtów. Procesor jest więc zaangażowany w tę operację tylko w jej małym ułamku czasowym. Jak widać, kandydatów do tej formy obsługi mamy wielu. Procesor posiada jednak zwykle tylko jedno wejście INT sygnalizujące przerwanie sprzętowe. Ponadto architektura PC zakłada, że każde przerwanie ma pewien priorytet, tzn. obsługa zgłoszeń uwzględnia nie tyle moment ich nadejścia, co raczej stopień ich ważności. Już samo to założenie wymaga rozróżniania zgłoszeń poprzez przyporządkowanie każdemu z urządzeń oddzielnego kanału wejściowego. Konieczne stało się więc zastosowanie specjalizowanego układu zajmującego się wyłącznie ich obsługą. Funkcję kontrolera przerwań w komputerze XT pełni układ 8259A, zaś w modelach AT i PS/2 - dwa takie układy. W nowszych rozwiązaniach płyt głównych komputerów AT nie znajdziemy ich jako samodzielnych układów scalonych, gdyż wchodzą one przeważnie w skład jednego z układów wysokiej skali integracji, tworzących „obudowę" procesora (ang. chipsel). Ze względu jednak na konieczność zachowania zgodności architektury można się odwoływać do ich rejestrów. Kontroler 8259A ma osiem linii wejściowych, które przyjmują sygnały zgłoszeń. Układy 8259A mogą być łączone w kaskady, powielając tym samym liczbę dostępnych wejść. Istnieje również (nie wykorzystywana w architekturze PC) możliwość sterowania zewnętrznym buforem pośredniczącym między układem a silnie obciążonymi magistralami systemowymi. Warto też wspomnieć, że w modelach IBM PC/XT i AT wejścia IR/7 reagują na zbocze impulsu przerwania, co stwarza niebezpieczeństwo interpretacji impulsu zakłócającego jako zgłoszenia przerwania. Inaczej zagadnienie to rozwiązano w architekturach EISA i MCA, gdzie wyzwalanie przerwań odbywa się poziomem napięcia. Możliwe jest tutaj dzielenie jednej linii zgłoszeń przez kilka urządzeń (ang. shared interrupi). System EISA rezygnuje dzięki temu z drugiego kontrolera 8259A. Układ scalony 8259A Układ scalony 8259A produkowany jest między innymi przez firmy Intel, AMD i Harris. Może pracować nie tylko w trybie zgodnym z procesorami 8088/86/286, ale również z 8080/8085. Został on zaprojektowany przed powstaniem procesora 80286. Rysunek 4. 1. przedstawia schemat wyprowadzeń tego układu. Wyprowadzenia układu 8259A opisano poniżej: IRO - IR7 - (Interrupt Reąuesi) - każde z tych wyprowadzeń może być połączone z co najwyżej jednym urządzeniem, które - wymuszając wysoki poziom logiczny na przypisanym sobie wejściu - zgłasza żądanie obsługi przerwania. Wejście IRO posiada najwyższy, a IR7 najniższy priorytet. ~CS - (Chip Seleci) - wejście umożliwiające procesorowi wprowadzenie układu w tryb programowania. ~WR - (Write) - procesor wymusza niski poziom logiczny na rym wejściu, chcąc zapisywać dane do wewnętrznych rejestrów układu. ~RD - (Read) - procesor wymusza niski poziom logiczny na tym wejściu, chcąc odczytywać dane z wewnętrznych rejestrów układu. D7 - DO - Dwukierunkowa magistrala danych, służąca do komunikacji między procesorem i kontrolerem (zapis i odczyt rejestrów wewnętrznych) oraz przekazywania procesorowi numeru przerwania. CAS0 - CAS2 - (Cascade) - lokalna magistrala adresowa,używana przy kaskadowym połączeniu układów 8259A. Umożliwia ona zaadresowanie do 8 takich układów. ~SP/EN - (Slave Pr ogram/Enable Buffer) - w buforowanym trybie pracy pełni rolę wyjścia (EN) sterującego buforem zewnętrznym. W trybie nie buforowanym jest to wejście (~SP) konfigurujące układ jako Master (~SP=I) lub Slave (~SP=0). XINT - (Internipf) - wyjście to połączone jest bezpośrednio z wejściem INTR procesora, jeżeli układ 8259A pracuje jako Master. Układ pracujący w trybie Slave połączony jest swoim wyjściem INT z jednym z wejść IRn kontrolera Master. ~INTA - (Interrupt Acknowledge) - wejście to połączone jest z wyjściem INTA procesora. Przyjmuje ono sygnał potwierdzenia przyjęcia przerwania przez CPU. A0 - Wejście istotne jedynie w trybie programowania, służące do rozróżniania rozkazów. V#cc - Wejście napięcia zasilającego(+5V). GND - Masa zasilania. Cykl przyjęcia zgłoszenia Układ 8259A dysponuje trzema 8-bitowymi rejestrami: IMR, IRR i ISR. Pozycja bitowa n każdego z nich odpowiada jednemu z wejść IRn. Schematycznie przedstawia to rysunek 4.2. Urządzenie połączone z wejściem o numerze n zgłasza przerwanie wymuszając wysoki poziom logiczny na linii IRn. Ustawiając bit n w rejestrze IMR (Interrupt Mask Register) można spowodować ignorowanie wszelkich przerwań nadchodzących tą linią. Jeżeli wspomniany bit jest wyzerowany, informacja o przerwaniu przekazywana jest dalej i powoduje ustawienie bitu n w rejestrze IRR (Interrupt Reąuest Register). Jak już wspomniano wcześniej, priorytet zgłoszeń na wejściach IR0 - IR7 nie jest jednakowy i maleje ze wzrostem numeru wejścia. Ponieważ jednocześnie mogą nadchodzić zgłoszenia z wielu linii, układ oceny priorytetu wybiera jednorazowo tylko jeden z nich - ten o najwyższym priorytecie. Jednocześnie aktywowany jest sygnał INT, informujący procesor o konieczności obsługi przerwania. Jeżeli obsługa przerwań nie jest programowo zablokowana (bit IE rejestru stanu procesora), ten ostatni reaguje sygnałem potwierdzenia na wyjściu ~INTA, które jest połączone z wejściem ~INTA układu 8259A. Wybrany przez układ oceny priorytetu bit rejestru IRR przekazywany jest teraz do rejestru ISR (Interrupt Service Register). Oznacza to, że w tym momencie obsługiwane jest przerwanie z linii o numerze odpowiadającym ustawionej pozycji bitowej rejestru ISR. Procesor wysyła teraz drugi impuls ~INTA. Kontroler przerwań odpowiada na niego wystawieniem na szynę danych D7 - DO wektora przerwań o następującej budowie: bit 7;bit 6;bit 5;bit 4;bit 3bit 2;bit 1;bit 0; bity 7-3 - Bity te, stanowiące tzw. offset, można ustalić na etapie programowania kontrolera. bity 2-0 - Numer ustawionego w rejestrze ISR bitu. Procesor traktuje ten bajt jako numer procedury obsługi przerwania, do wykonania której teraz przejdzie. Jeżeli kontroler pracuje w tzw. trybie automatycznym (AEOI - Automatic End Of Interrupi), w momencie przejścia do wykonywania procedury obsługi przerwania zerowany jest odpowiedni bit rejestru ISR. W przeciwnym wypadku (tryb EOI) wyzero-wania tego bitu dokonuje sama procedura obsługi przerwania wysyłając rozkaz EOI (End of Interrupt) do kontrolera. Tryb pracy kontrolera (AEOI/EOI) określany jest w fazie programowania. Niezależnie od trybu pracy, moment wyzerowania bitu rejestru ISR odpowiadającego aktualnie obsługiwanemu kanałowi oznacza gotowość kontrolera do przyjęcia następnego zgłoszenia. Należy tu jeszcze raz podkreślić, że zgłoszenia nie są obsługiwane w miarę nadchodzenia, istotny natomiast jest ich priorytet. Oznacza to, że przy pełnej kolejce oczekujących na liniach IR1 - 7 zgłoszeń (bity 7 - l rejestru IRR ustawione) zarejestrowanie zgłoszenia na linii IRO spowoduje zrealizowanie go w pierwszej kolejności, tj. po zakończeniu aktualnie wykonywanego cyklu obsługi. Kaskadowe łączenie kontrolerów przerwań Dla zwielokrotnienia liczby wejść układy 8259A dają się łączyć w grupy. Teoretycznie możliwe jest połączenie 9 układów (jeden Master + 8 układów Slave) i uzyskanie 8 x 8 = 64 linii przerwań. W modelach AT i PS/2 zastosowano kaskadowe połączenie dwóch kontrolerów uzyskując tym samym 8 + 7= 15 wejść, bowiem jedno z wejść układu Master „zużywamy" na dołączenie układu Slave. Należy nadmienić, że połączenie takie prowadzi do przegrupowania priorytetów wejść; w naszym przypadku wejścia IR8 - 15 (układu Slave) otrzymują wyższy priorytet niż wejścia IR3 - 7 układu Master. Tabela 4.1. Przyporządkowanie urządzeń liniom 1RQ w modelach XT, A T i PS/2 Linia IRQ; Urządzenie; Wektor; model XT 0; zegar systemowy; 08h; 1; klawiatura; 09h; 2; zarezerwowane; 0Ah; 3; COM2; 0Bh; 4; COM1; 0Ch; 5; kontroler dysku; twardego; 0Dh; 6; kontroler dyskietek; 0Eh; 7; LPT1; 0Fh; Modele AT i PS/2 0; zegar systemowy; 08h 1; klawiatura; 09h 2; wyjście kaskadowe do układu Slave; OAh 3; COM2; OBh 4; COM1; OCh 5; LPT2; ODh 6; kontroler napędu dysków elastycznych; OEh 7; LPT1; OFh 8; zegar czasu rzeczywistego; 70h 9; wywołuje przerwanie IRQ2; 71h 0; zarezerwowane; 72h 11; zarezerwowane; 73h 12; zarezerwowane; 74h 13; koprocesor arytmetyczny; 14; kontroler dysku twardego; 76h 15; zarezerwowane; 77h Wektor oznacza numer indeksu wskazującego adres procedury obsługi danego przerwania, umieszczony w tzw. tablicy wektorów przerwań. Tablica ta znajduje się w pamięci w obszarze OOOOOh - 003FFh i zawiera czterobajtowe pozycje reprezentujące kolejne adresy. Układy połączone są między sobą trzema liniami adresowymi CAS0 - CAS2, które dla kontrolera Master są wyjściami, a dla Slave wejściami. Każdy z kontrolerów rozpoznaje swoją rolę (Master lub Slave) badając poziom sygnału na wejściu ~SP/EN. Zero logiczne na tym wejściu konfiguruje układ jako Slave, a jedynka logiczna jako Master. Do obydwu kaskadowo połączonych kontrolerów doprowadzony jest z procesora sygnał ~INTA, lecz tylko układ Master łączy się swoim wyjściem INT z wejściem INTR procesora. Schemat kaskadowego połączenia dwóch układów 8259A w komputerach AT i PS/2 przedstawia rysunek 4.3. Obsługa zgłaszanych przerwań przez tak połączone układy nieco się komplikuje. Przerwania nadchodzące bezpośrednio do układu Master - pojawiające się na liniach IRQO - IRQ1 i IRQ3 - 1RQ7 obsługiwane są tak, jak to opisano wcześniej. Odebranie zgłoszenia na linii n układu Slave (IRQ8 - IRQ15) powoduje wyzwolenie reakcji opisanej poniżej. Fazy obsługi przerwań od układu Slave • Zgłoszenie ustawia bit n rejestru IRR w układzie Slave i powoduje, po opracowaniu priorytetów, wysłanie sygnału INT do układu Master. • Układ Master otrzymuje zgłoszenie na linii IR2, co powoduje ustawienie bitu 2 w jego rejestrze IRR. • Układ Master, opracowawszy priorytety własnych zgłoszeń, wysyła sygnał INT do procesora. • Procesor (jeżeli nie zablokowano obsługi przerwań sprzętowych) odpowiada pierwszym sygnałem -INTA. • Układ Master adresuje liniami CASO - CAS2 układ Slave odpowiadający za ob.-sługę zgłoszonego przerwania. W obu układach następuje jednoczesne przesunięcie bitu odpowiadającego obsługiwanemu kanałowi (bit 2 w układzie Master i bit H w układzie Slave) z rejestru IRR do rejestru ISR. Drugi impuls -INTA wygenerowany przez CPU nakazuje układowi Slave wystawienie na szynę danych (D7 - D0) bajtu danych - wektora przerwań, traktowanego jako numer procedury obsługi przerwania zgłoszonego na linii n. W trybie AEOI zerowane są rejestry ISR (bit n w układzie Slave i bit 2 w układzie Master}. W trybie EOI procedura obsługi przerwania wysyła dwa sygnały EOI: jeden do układu Master i drugi do układu Slave. Programowanie kontrolera przerwań Tryb pracy układu 8259A ustalany jest programowo. Układ otrzymuje w fazie programowania 2-4 bajty konfiguracyjne ICW1 - ICW4 (Initiali-ation Command Word], które decydują o późniejszym zachowaniu systemu obsługi przerwań. Programując układy 8259A, procesor komunikuje się z nimi przez następujące porty. Model XT Adres portu; Dostępne rejestry; Tryb dostępu; 020h; IRR, ISR, wektor przerwań ICW1,OCW2, OCW3; do odczytu do zapisu; 021h; IMR ICW2, ICW3, ICW4, OCW1; do odczytu do zapisu; Model AT; Adres portu; Dostępne rejestry; Tryb dostępu; 020h dla linii IRQ0 - IRQ7; IRR, ISR, wektor przerwań ICW1,OCW2, OCW3; do odczytu do zapisu; OAOh dla linii IRQ8-IRQ15; IRR, ISR, wektor przerwań ICW1,OCW2, OCW3; do odczytu do zapisu; 021 h dla linii IRQO - IRQ7; IMR ICW2, ICW3, ICW4, OCW1; do odczytu do zapisu; OAlh dla linii IRQ8-IRQ15; IMR ICW2, ICW3, ICW4, OCW1; do odczytu do zapisu; Inicjowanie pracy układu • Procesor przekazuje przez port 020h (Master) lub OAOh (Slave) pierwszy bajt inicjujący ICW1. Bajt ICW1: 0; 0; 0; 1; bit 3; 0; bit 1; bit 0 bity 7-4 - 0001, sygnatura rozkazu. bit 3 - Jedynka oznacza wyzwalanie wejść IRQ poziomem napięcia, zero - wyzwalanie zboczem (zmianą poziomu sygnału z 0 na l - ten tryb pracy jest powszechnie stosowany w PC). bit 2 - 0 bit l - 1 oznacza pojedynczy układ (XT), 0 - obecność kaskady układów (AT lub PS/2). bit 0 - l oznacza, że będzie wysłany bajt ICW4, 0 oznacza brak bajtu ICW4. Procesor przekazuje przez port 021 h (Master) lub 0Alh (Slave) drugi bajt inicjujący ICW2. Bajt ICW2: bit 7; bit 6; bit 5; bit 4; bit; 0; 0; bity 7 - 3 - Przemieszczenie (offset) wektora przerwań. bity 2-0 - 000 Jeżeli w systemie obecne są dwa układy 8259A (decyduje o tym bit l bajtu ICW1), procesor wysyła trzeci bajt inicjujący ICW3. Budowa tego bajtu jest różna dla układu Master i Slave. Bajt ICW3 (Master): bit 7; bit 6; bit 5; bit 4; bit 3; 0; 0; 0; bity 7-0 - Jedynka na pozycji n oznacza, że wejście n połączone jest z wyjściem INT układu Slave, a zero, że wejście n jest wolne lub połączone z obsługiwanym urządzeniem. Bajt ICW3 (Slave): 0; 0; 0; 0; 0; bit 2; bit 1; bit 0; bity 7-3 - 00000 bity 2-0 - Zakodowany dwójkowo numer wejścia układu Master, które jest połączone z wyjściem INT układu Slave. Nadaje to układowi Slave numer identyfikacyjny, który jest porównywany (por. Fazy obsługi przerwań od układu Slave) z adresem ustawianym przez układ Master na liniach CASO - CAS2. Uaktywnia się więc tylko adresowany układ. Jest to rozwiązanie ogólne stosowane w dużych systemach; w PC adresowany jest i tak tylko jeden układ Slave. Kontroler oczekuje teraz bajtu ICW4, jeżeli zostało to zaanonsowane w bajcie ICW1 (bitO). Bajt ICW4 0; 0; 0; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7 - 5 - 000 bit 4 - W komputerach PC/XT/AT i PS/2 zawsze zero. Jedynka na tej pozycji modyfikuje sposób klasyfikacji priorytetów, co ma zastosowanie w wielokrotnych kaskadowych połączeniach kontrolerów, spotykanych w dużych systemach bit 3 - Wartość l oznacza buforowany tryb pracy; końcówka -SP/EN układu 8259A przestaje być wtedy wejściem przełączającym tryb pracy Master/Slave i staje się wyjściem sterującym zewnętrznym buforem szyn systemowych. Również i ta możliwość znajduje zastosowanie wyłącznie w dużych systemach z silnie obciążonymi magistralami systemowymi. bit 2 - 1 = Master, 0 = Slave. Bit ten używany jest do programowego konfigurowania danego układu jako Master lub Slave w sytuacji gdy ustawiony jest bit 3 (patrz powyżej) i nie ma możliwości używania do tego celu końcówki -SP/EN. bit 1 - Jedynka oznacza tryb AEOI, tj. automatyczne zerowanie odpowiedniego bitu rejestru ISR w momencie przekazania sterowania do procedury obsługi przerwania. Wartość 0 oznacza, że procedura obsługi przerwania sama musi się zatroszczyć o wyzerowanie tego bitu wysyłając rozkaz EOI do kontrolera (lub kontrolerów, jeżeli przerwanie pochodzi od układu Slave). bit 0 - Jedynka oznacza normalny tryb pracy, dostosowany do procesorów 8086/88; po drugim impulsie -INTA procesorowi przekazywany jest 8-bitowy wektor przerwań. Zero na tym bicie przełącza układ w tryb 16-bitowy, tj. 8259A wysyła bezpośrednio 16-bitowy adres procedury obsługi przerwania (a nie 8-bitowy numer, który jest dopiero indeksem w tablicy adresów) w porcjach po osiem bitów - wystawienie drugiej połowy adresu wyzwalane jest wtedy trzecim impulsem -INTA pochodzącym od CPU. Opisane powyżej polecenia zawarte w bajtach ICW1 - ICW4 zapewniają konfigurowanie układu jeszcze przed rozpoczęciem obsługi zgłoszeń. Konfigurację kontrolera przerwań przeprowadzają procedury inicjalizacyjne BIOS-u wykonywane po włączeniu komputera jeszcze przed załadowaniem systemu operacyjnego. Istnieją też rozkazy, które można przekazywać kontrolerowi podczas jego pracy modyfikując tym samym dynamicznie system obsługi przerwań stosownie do bieżących potrzeb. Układ 8259A rozpoznaje trzy rozkazy OCW1 - OCW3 (Operation Control Word), które zostaną pokrótce omówione poniżej. Rozkaz OCWI podawany jest przez port 021h (dla układu Master) lub OAlh (Siwe): bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7 - O - Jedynka na pozycji bitowej n maskuje (blokuje) linię zgłoszeń n. Rozkaz OCW2 podawany jest przez port 020h (dla układu Master) lub OAOh (Slave): bit 7; bit 6; bit 5; 0; 0; bit 2; bit 1; bitO; bity 7-5 - 001 - nie adresowany rozkaz EOI, 011 - adresowany rozkaz EOI; powoduje wyzerowanie w rejestrze ISR pozycji bitowej adresowanej bitami 2 - O, pozostałe kombinacje bitów 7 - 5 mają zastosowanie w dużych systemach, gdzie obsługiwanych jest wiele urządzeń o jednakowym priorytecie(decyduje wówczas kolejność zgłoszeń). Znaczenie tych kombinacji nie będzie omawiane. bity 4 - 3 - 00, sygnatura rozkazu. bity 2 - 0 - Zakodowany dwójkowo numer linii, której dotyczy polecenie EOI. Rozkaz OCW3 podawany jest przez port 020h (układ Master) lub OAOh (Slave) 0; bit 6; bit 5; 0; 1; bit 2; bit l; bit 0; bit 7 - 0 bity 6-5 - 10 -wyzerowanie maski specjalnej, 11 - ustawienie maski specjalnej, pozostałe kombinacje bitów 6 - 5 są ignorowane. bity 4-3 - 01-sygnatura rozkazu. bit 2 - 1-polling. bity l - 0 - 10 -rozkaz odczytu rejestru IRR; kontroler wystawia do portu 020h (Master) lub OAOh (Slave) zawartość rejestru IRR, 11-rozkaz odczytu rejestru ISR; kontroler wystawia do portu 020h (Master) lub OAOh (Slave) zawartość rejestru ISR. Pozostałe kombinacje bitów l - 0są ignorowane Uwaga: Dostęp do rejestru IMR odbywa się poprzez port 02 1 h (dla układu Master} lub OAlh (Slave): in al, 021h ; rejestr IMR (Master) w akumulatorze in al, Oalh ; rejestr IMR (Slave) w akumulatorze Można też zamaskować dowolny z kanałów, np. kanał O (co powoduje zatrzymanie procesu odmierzania czasu systemowego). Oto prosty przykład w języku Turbo C: #include #include void zegar (void) ; void main(void) { clrscr ( ) ; zegar ( ) ; outp (0x21, 0x01) ; /* zamaskowany kanał O -> zatrzymaj zegar */ zegar ( ) ; outp (0x21, 0x00) ; /* uruchom zegar */ zegar () ; } void zegar (void) /* pokazuje czas i czeka na naciśnięcie klawisza */ { struct time czas; while( Ikbhit () ) { gettime ( &czas) ; gotoxy (10, 10) ; printf ("%02i:%02i:%02i",czas. ti_hour, czas . ti_min, czas . ti_sec) ; } getch(); /* opróżnij bufor klawiatury */ } Wyjaśnienia wymaga pojęcie maski specjalnej. Jak wiemy, bit rejestru ISR aktualnie obsługiwanego kanału jest po przekazaniu CPU wektora przerwań zerowany automatycznie tylko w trybie AEOI. W trybie EOI ten sam bit może być wyzerowany dopiero przez samą procedurę obsługi przerwania, nie jest jednak wcale określone, kiedy to nastąpi. W przedziale czasowym, w którym układ kontrolera przerwań oczekuje na jawny rozkaz EOI, mogą być obsługiwane tylko zgłoszenia o priorytecie wyższym od aktualnie obsługiwanego. Zgłoszenia na liniach o niższym priorytecie są ignorowane. Maska specjalna powoduje interpretację zawartości rejestru IMR w specyficzny sposób: ustawiony na pozycji n bit tego rejestru blokuje wprawdzie wszelkie zgłoszenia na linii n, ale jednocześnie oznacza, że wszystkie zgłoszenia na liniach o priorytecie wyższym i niższym od n będą mogły być obsługiwane w określonym powyżej przedziale czasu. Polling Gwoli ścisłości należy nadmienić, że istnieje też inna forma przekazywania informacji pomiędzy kontrolerem przerwań a procesorem - tzw. polling. Końcówka -INTA układu 8259A nie może być wtedy połączona z wyjściem -INTA procesora (ściślej, kontrolera magistrali 8288), można więc to wejście wykorzystać inaczej. Wysłanie przez procesor rozkazu OCW3 z ustawionym bitem 2 oznacza skierowanie zapytania do kontrolera (polling). Układ 8259A odpowiada wystawieniem do tego samego portu, z którego otrzymał rozkaz OCW3, bajtu danych o następującej strukturze: bit 7; x; x; x; x; bit 2; bit 1; bit 0; bit 7 - 1 - istnieje zgłoszenie oczekujące na obsługę, 0 - brak zgłoszeń. bity 6-3 - Nie używane. bity 2-0 - Zakodowany binarnie numer linii, na której oczekuje zgłoszenie. Każdy rozkaz odczytu portu jest traktowany jako sygnał uzgodnienia (odpowiednik sprzętowego sygnału -INTA) od procesora. Przerwanie niemaskowalne (NMI) Przerwanie to również zaliczane jest do grupy przerwań sprzętowych, bowiem nie można go wygenerować instrukcją kodu maszynowego. W przeciwieństwie do przerwań odbieranych liniami IRQ, które obsługiwane są przez dedykowany do tego celu kontroler 8259A, sygnał przerwania NMI kierowany jest bezpośrednio do końcówki NMI procesora. Wysoki sygnał logiczny na tym wejściu prowadzi, natychmiast po zakończeniu wykonywania bieżącego rozkazu, do wywołania procedury INT 2. Przerwanie takie nie może być zamaskowane ani rozkazem cli procesora, ani przez operacje na rejestrze IMR kontrolera 8259A. Ma ono najwyższy priorytet ze wszystkich przerwań sprzętowych. Wywołanie przerwania NMI w przypadku komputerów PC ma miejsce po stwierdzeniu błędu parzystości pamięci operacyjnej, co należy uznać za sytuację uniemożliwiającą dalsze użytkowanie komputera. Procedura obsługi INT 2 wyprowadza na monitor stosowny komunikat (Parity error at...) i wstrzymuje pracę systemu. Jedynym wyjściem w rym momencie jest ponowny restart systemu w nadziei, że błąd parzystości spowodowany został na przykład chwilową utratą styku lub przegrzaniem modułów RAM, a nie ich trwałym uszkodzeniem. Źródłem tego przerwania może też być sygnał generowany przez uszkodzony koprocesor arytmetyczny. Przerwanie niemaskowalne, jak zaraz zobaczymy, nie jest „absolutnie nie do zamaskowania". Rozpatrzmy moment włączenia komputera i uruchomienia procedur inicjalizu-jących BIOS-u. Jednym z ich zadań jest budowa tablicy wektorów przerwań, tj. stałego miejsca w „niskim" obszarze pamięci operacyjnej, w którym umieszczane są czterobaj-towe adresy punktów wejścia do procedur obsługi wszystkich przerwań. Jednocześnie inicjalizowane są wszystkie inne rejestry systemu. Własną inicjalizację przeprowadzają układy obsługi pamięci dynamicznej. Może się zdarzyć, że układ kontroli parzystości RAM stwierdzi błąd i wywoła tym samym procedurę obsługi przerwania INT 2. Adres punktu wejścia do tej procedury może jednak nie być jeszcze ustawiony i wskazywać przypadkowe miejsce w pamięci. Procesor, podejmując wykonanie programu od tego miejsca, najprawdopodobniej zawiesi się. Jedną z pierwszych operacji, jakie musi wykonać BIOS uruchamiając komputer, jest więc zamaskowanie przerwania NMI. Odpowiada to ustawieniu bitu 7 portu o adresie 0A0h (w XT) lub 070h (w AT). Manipulując samodzielnie tym bitem należy zachować szczególną ostrożność - port ten bowiem steruje również pracą pamięci konfiguracji CMOS-RAM. Bezpiecznie można to zrobić w następujący sposób, pokazany w języku Turbo C: unsigned char i; ... i=inp(0x70); i=i & Ox7f; /* wyzeruj bit 7, NMI aktywne */ outp(0x70,i); ... i=inp(0x70); i=i | 0x80; /* ustaw bit 7, NMI zablokowane */ outp(0x70,i); * * * Rozdział 5. Kontroler DMA DMA jest skrótem od angielskiego określenia Direct Memory Access, oznaczającego bezpośredni dostęp do pamięci. Mowa tu oczywiście o dostępie do pamięci dla urządzeń peryferyjnych, gdyż kontaktu z nią procesora nie należy już w żaden sposób usprawniać. Ten stosunkowo skąpo opisany element architektury komputera IBM PC wymaga wyjaśnień. W pierwowzorze nowoczesnych komputerów AT-386 i 486, tj. w IBM PC, zastosowano 8-bitowy kontroler DMA typu 8237A. Stanowiło to w tamtych czasach znaczne ułatwienie pracy procesorów 8-bitowych przy realizacji cykli dostępu do pamięci, zdejmując z nich obowiązek bezpośredniej realizacji transmisji między blokowymi urządzeniami peryferyjnymi a pamięcią oraz przeadresowywania bloków pamięci. Obecnie nowoczesne procesory 80386 i 80486, dysponujące 32-bitową szyną danych, stały się tak szybkie, że realizowane w mikrokodzie procesora rozkazy transmisji blokowej typu rep movsw są bardziej wydajne niż transmisje blokowe w cyklu DMA. Co gorsza, kilka generacji wzwyż od IBM PC, tj. w nowoczesnych AT, doskonała skądinąd idea DMA napotyka na wąskie gardło 8-bitowych kontrolerów DMA (spowalnianych dodatkowo stosowaniem zegara 4,77 MHz), które powstały dla potrzeb procesorów 8086/88. Począwszy od IBM PC/AT dodano drugi kontroler 8237A, co pozwoliło na realizację obsługi urządzeń 16-bitowych. Dopiero jednak systemy EISA i MCA, o odmiennej filozofii i architekturze, powróciły do stosowania „na poważnie" idei DMA, wykorzystując szybkie, 32-bitowe układy scalone nowej generacji. Ideę bezpośredniej komunikacji urządzeń wejścia-wyjścia z pamięcią przedstawia rysunek 5.1. Urządzeniem wejścia-wyjścia jest kontroler napędu dysków elastycznych (zarówno ten zainstalowany na płycie głównej jak i ten umieszczony na karcie wkładanej w złącza rozszerzenia), kontroler jednostki pamięci taśmowej (ang. streamer} lub inne podobne urządzenie. Każdemu z nich przyporządkowany jest jeden z tzw. kanałów DMA, tj. logicznych strumieni danych, których przepływ jest inicjowany przez procesor. Każdy z układów 8237A może obsługiwać cztery takie strumienie. Możliwy jest też kaskadowy sposób łączenia kontrolerów 8237A; jedno z wejść układu głównego (Master) obsługuje wtedy następny kontroler (Slave) i jest tym samym „stracone". To rozwiązanie stosowane jest w IBM PC/AT i udostępnia siedem kanałów DMA. Żądające obsługi urządzenie, stowarzyszone z danym kanałem DMA, wysyła sygnał DREQ (DMA Reąuest*). Układ 8237A reaguje na to przejęciem kontroli nad magistralami systemu i przeprowadzeniem wymaganej transmisji, np. jednego sektora odczytanego z dyskietki do bufora w pamięci operacyjnej (RAM), gdzie odbywa się połączenie sektorów w plik danych. W tym czasie procesor jest wolny i może, do czasu wystąpienia przerwania od kontrolera napędu dysków elastycznych (1RQ 6 - odczytano kolejny sektor), zajmować się obróbką tekstu lub grafiki. Należy tu dodać, że oczywiście nie zawsze oznacza to dalsze wykonywanie programu. Trzeba bowiem pamiętać, że szyny: danych i adresowa, są we władaniu kontrolera DMA, a więc procesor może przetwarzać tylko to, co ma w swoich rejestrach. Wszelkie odwołania do pamięci muszą czekać. Sytuację ratuje trochę pamięć podręczna procesora (ang. cache memory) - stosowana w procesorze 80486 wewnętrzna pamięć o wielkości 8 kB. Może w niej być jednak umieszczany tylko kod programu, a nie dane. Dopiero następca procesora 80486 - Pentium - posiada podręczną pamięć danych. Ta sama akcja realizowana bez układu DMA składałaby się z kolejnych zapisów i odczytów portu kontrolera napędu dysków elastycznych. Kolejne etapy to: załadowanie akumulatora, przesłanie zawartości akumulatora do portu sterującego, odczyt portu danych do akumulatora, przesłanie zawartości akumulatora do komórki pamięci. To dopiero jeden bajt. Oczywiście przy każdym z tych kroków procesor ma „pełne ręce roboty" i nie ma mowy o wielozadaniowości. Układ scalony 8237A Rysunek 5.2 przedstawia wyprowadzenia układu scalonego typu 8237A. Jak wiele innych układów, jest on obecnie zawarty w jednym z kilku układów scalonych wysokiej skali integracji, które znajdują się na nowoczesnej płycie głównej. Przykładowo układ 82C206 zawiera programowalne generatory przebiegów czasowych, kontroler DMA, kontroler przerwań i pamięć nieulotną CMOS. Jednak funkcje i znaczenie poszczególnych układów pozostały, ze względu na zachowanie kompatybilności w dół, te sarnę. Na kolejnych stronach zamieszczono opis końcówek układu scalonego 8237A. ~IOR - (l/O Read) - CPU wymusza na tym wejściu aktywny stan niski, chcąc odczytać dane z wewnętrznego rejestru kontrolera DMA (podczas programowania). W czasie transmisji DMA kontroler, przejąwszy nadzór nad magistralami, sam uaktywnia tę końcówkę, jeżeli dane transmitowane są z urządzenia wejścia-wyjścia do pamięci. ~IOW - (I/O Write) - CPU wymusza na tym wejściu aktywny stan niski, chcąc zapisać dane do wewnętrznego rejestru kontrolera DMA. Podczas transmisji DMA kontroler, przejąwszy nadzór nad magistralami, sam uaktywnia tę końcówkę, jeżeli dane transmitowane są z pamięci do urządzenia wejścia-wyjścia. ~-MEMR - (Memory Read) - aktywny (niski) poziom na tej końcówce wskazuje na ogólny kierunek transmisji z pamięci (do pamięci lub urządzenia wejścia-wyjścia). ~MEMW - (Memory Write} - aktywny (niski) poziom na tej końcówce wskazuje na ogólny kierunek transmisji do pamięci (z pamięci lub urządzenia wejścia-wyjścia). AEN - (Address Enable) - pozwala na rozróżnienie między adresami dla pamięci i układów wejścia-wyjścia. READY - Powolne układy pamięci lub urządzenia, albo też wejścia-wyjścia mogą, uaktywniając ten sygnał, wymusić opóźnienie cyklu odczytu lub zapisu DMA. HLDA - (Hold Acknowledge) - podając na to wejście stan logicznej jedynki, układ, (procesor lub inny kontroler) sprawujący dotychczas pieczę nad magistralami systemu (adresową i danych), wyraża zgodę na przejęcie sterowania przez kontroler DMA. Dotychczasowy kontroler odłącza się od magistral, ustawiając swoje wyjścia w stan wysokiej impedancji. ADSTB - (Address Strobe) - informuje układy zewnętrzne, że na szynie adresowej AO - A7 znajduje się bardziej znacząca część adresu. HRQ - (Hold Reqnesi) - wystawienie logicznej jedynki na tym wyjściu jest reakcją układu na nadejście żądania obsługi transmisji DMA (sprzętowo - przez końcówki DREQO - 3 lub programowo) i stanowi polecenie „oddania" magistral systemowych skierowane do CPU lub innego kontrolera magistral. ~CS - (Chip Seleci) - wejście aktywowane przez procesor w trybie programowania lub odczytu rejestrów wewnętrznych układu 8237A. CLK - Wejście sygnału taktującego o częstotliwości 4,77 MHz. RESET - Podanie na to wejście logicznej jedynki powoduje inicjalizację układu 8237A. DREQn - (DMA Reąuest) - podając sygnał na jedno z tych wejść, stowarzyszone z nim urządzenie zewnętrzne żąda obsługi. Polaryzację sygnału aktywnego można zaprogramować, tzn. dla każdego z wyjść n można ustalić, czy poziom aktywny oznacza zero, czy jedynkę logiczną. DACKn - (DMA Acknowledge) - kontroler DMA, przejąwszy władzę nad magistralami (wymiana sygnałów HRQ i HLDA) potwierdza na odpowiednim wyjściu n przyjęcie żądania. Aktywny poziom tego sygnału również można zaprogramować. DBO - DB7 - 8-bitowa, dwukierunkowa magistrala danych. Tędy też przekazywany jest bardziej znaczący bajt 16-bitowego adresu. AO - A3 - Połowa mniej znaczącego bajtu dwukierunkowej szyny adresowej. W trybie programowania kontrolera DMA przez procesor służy do identyfikowania jego wewnętrznych rejestrów, zaś podczas transmisji zawiera cztery najmniej znaczące bity adresu. A4 - A7 - Podczas transmisji zawiera pozostałą część adresu. W stanie spoczynku (i programowania) stan tych linii jest bez znaczenia. ~EOP - (End ofProcess) - poziomem zera logicznego na tej końcówce (traktowanej jako wyjście) układ 8237A sygnalizuje koniec transmisji, tj. osiągnięcie zadanej liczby przesłań. Podanie na końcówkę EOP (traktowaną jako wejście) zera logicznego przez urządzenie zewnętrzne oznacza przedwczesny koniec transmisji. V#CC - Wejście napięcia zasilającego (+5V). GND - Masa zasilania. Tryby pracy kontrolera DMA Tryb spoczynkowy „l" (Idle) W stanie spoczynku, podczas każdego cyklu zegara DMA na wejściu CLK testowane są stany wejść DREQ/7 (dotyczy to wejść, które nie są programowo zamaskowane) w celu wykrycia żądania obsługi. Przyjmując żądanie obsługi, kontroler DMA uaktywnia wyjście HRQ, żądając od procesora (lub innego układu sprawującego w danej chwili kontrolę nad magistralami) oddania tych „uprawnień". Układ taki odpowiada sygnałem podawanym na wejście HLDA i odłącza się od magistral. W odpowiedzi na to układ 8237A wystawia na odpowiednie wyjście DACIO? stosowny sygnał potwierdzenia i rozpoczyna transmisję odpowiednio do zawartości ustawionych na tę okoliczność rejestrów. W każdym cyklu zegara sprawdzany jest ponadto stan wejścia CS. Aktywny stan tego wejścia (zero logiczne) powoduje przejście układu w stan programowania; procesor może komunikować się z rejestrami układu 8237A, adresując je wejściami AO - A3. Dane 8-bitowe podawane są bezpośrednio przez linie DBO - DB7, a 16-bitowe - porcjami po osiem. Rolę przełącznika spełnia końcówka ADSTB (Address Strobe). Tak samo odbywa się czytanie wewnętrznych rejestrów statusu. Tryb „S" (Single) W tym trybie pracy dokonywane jest pojedyncze przesłanie. Wewnętrzny licznik transmisji jest zmniejszany o jeden, a rejestr adresowy, zależnie od zaprogramowania, o jeden zwiększany lub zmniejszany. Następne przesłanie wymaga ponownego żądania na linii DREOn. Tryb „B" (Błock) Transmisja trwa nieprzerwanie do momentu wystąpienia zewnętrznego sygnału EOP od urządzenia lub osiągnięcia przez licznik transmisji wartości FFFFh. Jeżeli na przykład licznik transmisji zostanie załadowany wartością 511 (dziesiętnie), to pomniejszany o jeden przy każdym przesłaniu przejdzie przez stan OOOOh do FFFFh, co spowoduje na przykład wczytanie jednego 512-bajtowego sektora dyskietki wprost do określonego miejsca w pamięci. Tryb „D" (Demand) Tryb ten jest podobny do trybu „B". Różnica polega na tym, że transmisja trwa do czasu zaniknięcia sygnału DREQn, pojawienia się sygnału EOP, wykonania zadanej w liczniku transmisji liczby przesłań lub nadejścia żądania obsługi o wyższym priorytecie. Czasowa dezaktywacja sygnału żądania na wejściu DREQn powoduje wstrzymanie (ale nie zakończenie) transmisji. Tryb ten rna pewne znaczenie dla układów umieszczanych na kartach rozszerzenia w komputerach PC, bowiem nie jest tam wyprowadzany sygnał EOP. Tryb „C" (Cascade) W trybie tym przekazywane są tylko sygnały sterujące od układu nadrzędnego (Master). Układ pracujący jako podporządkowany (Slave) nie wystawia na szyny systemowe adresów ani sygnałów sterujących. Tryb „V" (Verify) Układ pracuje tak, jak przy transmisji, tzn. wytwarza adresy, reaguje na sygnał EOP i inne sygnały, ale nie generuje sygnałów dostępu do pamięci i urządzeń wejścia-wyjścia (tj. IOR, IOW, MEMR, MEMW). Tryb ten służy do diagnostyki wewnętrznej układu i nie ma nic wspólnego z weryfikacją danych. Kaskadowe łączenie układów 8237A Począwszy od modelu AT, firma IBM rozpoczęła instalowanie w swoich komputerach drugiego kontrolera 8237A. Układy te dają się łączyć w kaskady o dowolnej ilości elementów. Jeden z układów „wyższego poziomu" (Master) odstępuje jedną parę wyprowadzeń DREQw - DACJO? (tj. jeden kanał) następnemu układowi 8237A (Slave), który dołącza się do niej swoimi wyprowadzeniami HRQ - HLDA. Ponieważ cztery kanały (O, l, 2, 3) układu 8237A mają określone priorytety, tj. kolejności obsługiwania zgłoszeń (kanał O ma priorytet najwyższy, kanał 3 - najniższy), wszystkie wejścia układu Slave mają wyższy priorytet od pozostałych wejść układu Master. Kaskadowe połączenie kontrolerów DMA obrazuje rysunek 5.3. Programowanie kontrolerów DMA Zanim przejdziemy do programowania układu 8237A, jeszcze kilka uwag. W czasach, gdy projektowano komputer IBM PC, ze względów oszczędnościowych (lub może dlatego, że 40-końcówkowa obudowa wydawała się szczytem luksusu) dwa z niezbędnych dla pracy układów DMA rejestrów umieszczono poza obudową kostki 8237A. Mowa o rejestrze strony pamięci (stosowany jest tu układ 74LS612 - rejestr 4x4) i rejestrze zatrzaskowym bardziej znaczącego bajtu adresu. Drugim krokiem oszczędnościowym było zgrupowanie w komputerze XT rejestrów strony dla kanałów O i l fizycznie w jednym rejestrze, choć prowadzą do niego dwa porty (83h i 87h). Konsekwencją tego faktu jest pozbawienie XT możliwości transferów typu „pamięć-pamięć" na odległości większe od 64 kB, bowiem transfer tego typu posługuje się wyłącznie kanałami 0 i 1 Adresowanie pamięci przez układy DMA odbywa się podobnie jak dla procesora. Dla pokrycia pełnej przestrzeni adresowej komputera nie wystarcza 16-bitowy rejestr adresowy. CPU składa swój 20-bitowy adres rzeczywisty z 16-bitowego rejestru segmentowego pomnożonego przez 16 i drugiego 16-bitowego rejestru wskazującego przemieszczenie (offset} w segmencie o wielkości 64 kB. Ponieważ wewnętrzne rejestry adresowe (dla każdego kanału jeden) układu 8237A są 16-bitowe, można nimi adresować obszar o wymiarach do 64 kB (tzw. stronę DMĄ). Informację o położeniu strony w przestrzeni adresowej zawiera właśnie rejestr strony. Jakkolwiek należy on logicznie do struktury kontrolera DMA, fizycznie zlokalizowany jest poza układem 8237A, w jednym z układów wspomagających umieszczonych na płycie głównej komputera. Dla każdego kanału DMA istnieje ponadto jeden 16-bitowy rejestr licznika transmisji. Łączna liczba rejestrów układu 8237A wynosi 27. W danej chwili może być aktywny tylko jeden kanał DMA, tzn. transmisje nie mogą się ze sobą „krzyżować". Ponieważ jednak każdy kanał jest programowany niezależnie, istnieje para rejestrów wspólna dla całego układu 8237A, przechowująca adresy i licznik aktywnej w chwili bieżącej transmisji. Dzięki temu jest możliwe tzw. samoprogra-mowanie układu do stanu początkowego po zakończeniu transmisji. Programowanie układu 8237A, podobnie jak wielu innych kontrolerów w komputerze PC, odbywa się poprzez zapisywanie przez procesor rejestrów sterujących odpowiednią wartością. Informacja o stanie kontrolera może być odczytywana przez procesor z rejestrów statusu. Rejestry te, będące integralną częścią kontrolera, są „widziane" przez procesor poprzez porty wejścia-wyjścia. Adresy portów kontrolerów DMA w komputerze IBM PC/XT Adres; Rejestr; 000h; rejestr adresowy kanału 0 00lh; rejestr licznika kanału 0 002h; rejestr adresowy kanału 1 003h; rejestr licznika kanału 1 004h; rejestr adresowy kanału 2 005h; rejestr licznika kanału 2 006h; rejestr adresowy kanału 3 007h; rejestr licznika kanału 3 008h; rejestr stanu (odczyt) 008h; rejestr rozkazowy (zapis) 009h; rejestr żądań 00Ah; rejestr maski kanału 00Bh; rejestr trybu 00Dh; rejestr pośredni 00Fh; rejestr maskujący 081h; rejestr strony kanału 2 082h; rejestr strony kanału 3 083h; rejestr strony kanału 0 i 1 * 087h; rejestr strony kanału 0 i 1 * * Odnosi się do tego samego rejestru co poit 087h - jeden wspólny rejestr strony dla kanałów 1 i 0. „Sztuczne" porty komputera PC/XT Adres; Działanie OOCh; ustawienie przerzutnika w stan początkowy ODdh; programowa inicjalizacja układu - odpowiednik wystawienia sygnału na końcówce RESET OOEh; wyzerowanie rejestru maski („odsłonięcie1' wszystkich kanałów) Sztuczność tych portów (zwanych też „ślepymi") jest często stosowaną metodą w technice mikroprocesorowej. Umożliwia ona zainicjowanie akcji zewnętrznej przez procesor. Jakkolwiek w celu odwołania się do nich należy użyć instrukcji języka maszynowego out port, wartość, to druga część instrukcji (wartość) jest ignorowana i może być dowolna. Przykładowo, wspomniany w wyżej opisanych rozkazach przerzutnik jest niezbędny dla prawidłowego adresowania rejestrów 16-bitowych. Przed rozpoczęciem przekazywania takiej wartości (najpierw bajt mniej znaczący, potem bardziej znaczący) należy wyzerować przerzutnik. Unika się w ten sposób zamiany bajtów rejestru 16-bitowego mogącej wystąpić na skutek przypadkowego położenia przerzutnika. Adresy portów kontrolerów DMA w komputerze IBM PC/AT Adres; Rejestr; Uwagi 000h; rejestr adresowy kanału 0; (Slave) 00lh; rejestr licznika kanału 0; (Slave) 002h; rejestr adresowy kanału 1; (Slave) 003h; rejestr licznika kanału 1; (Slave) 004h; rejestr adresowy kanału 2; (Slave) 005h; rejestr licznika kanału 2; (Slave) 006h; rejestr adresowy kanału 3; (Slave) 007h; rejestr licznika kanału 3; (Slave) 008h; rejestr stanu (do odczytu); (Slave) 008h; rejestr rozkazowy (do zapisu; (Slave) 009h; rejestr żądań; (Slave) 00Ah; rejestr maski kanału; (Slave) 00Bh; rejestr trybu; (Slave) 00Dh; rejestr pośredni; (Slave) 00Fh; rejestr maskujący; (Slave) 081h; rejestr strony kanału 2; (Slave) 082h; rejestr strony kanału 3; (Slave) 083h; rejestr strony kanału 1; (Slave) 087h; rejestr strony kanału 0; (Slave) 089h; rejestr strony kanału 6; (Master) 08Ah; rejestr strony kanału 7; (Master) 08Bh; rejestr strony kanału 5; (Master) 08Dh; rejestr strony kanału 4; (Master - kaskada do Slave) 0C0h; rejestr adresowy kanału 4; (Master) 0Clh; rejestr licznika kanału 4; (Master) 0C2h; rejestr adresowy kanału 5; (Master) 0C3h; rejestr licznika kanału 5; (Master) 0C4h; rejestr adresowy kanału 6; (Master) 0C5h; rejestr licznika kanału 6; (Master) 0C6h; rejestr adresowy kanału 7; (Master) 0C7h; rejestr licznika kanału 7; (Master) 0D0h; rejestr stanu (do odczytu); (Master) 0D0h; rejestr rozkazowy (do zapisu); (Master) 0D2h; rejestr żądań; (Master) 0D4h; rejestr maski kanału; (Master) 0D6h; rejestr trybu; (Master) 0DAh; rejestr pośredni; (Master) 0DEh; rejestr maskujący; (Master) .Sztuczne" porty komputera PC/AT Adres; Działanie 0D8h; ustawienie przerzutnika w stan początkowy (Master) 0DAh; programowa inicjalizacja układu - odpowiednik wystawienia sygnału na końcówce RESET (Master) 0DCh; wyzerowanie rejestru maski („odsłonięcie" wszystkich kanałów) (Master) 00Ch; ustawienie przerzutnika w stan początkowy (S!ave) 00Dh; programowa inicjalizacja układu - odpowiednik wystawienia sygnału na końcówce RESET (Slave) 00Eh; wyzerowanie rejestru maski („odsłonięcie" wszystkich kanałów) (Slave) Przykład programowania rejestrów 16-bitowych (kanał 2, adres 6677H, licznik transmisji 0400h) w języku asemblera podano poniżej: mov al,00h out0ch,al ;ustaw przerzutnik mov al,77h out 04h,al ;młodszy bajt adresu mov al,66h out 04h,al ;starszy bajt adresu mov al,00h out 0ch,al ;ustaw przerzutnik out 05h,al ;młodszy bajt licznika mov al,04h out 05h,al ;starszy bajt licznika Budowa rejestrów wewnętrznych W celu zainicjowania transmisji typu „pamięć-pamięć" nie można posłużyć się żadną ze sprzętowych linii zgłoszeń DRQ/7. Pamięć przecież jako urządzenie nie jest podłączona do żadnej z nich. Musi zatem istnieć programowa metoda wymuszenia transmisji: umożliwiają rejestr żądań. Rejestr ten może być tylko zapisywany. Budowa rejestru żądań (port 009h w PC/XT, 009h i 0D2h w PC/AT) 0; 0; 0; 0; 0; bit 2; bit 1; bit 0; bity 7-3 - Zawsze zero. bit 2 - Wartość l na tym bicie oznacza natychmiastowe uruchomienie transmisji (gdy kolejka oczekujących zgłoszeń jest pusta) lub wprowadzenie żądania do kolejki zgodnie z aktualnym systemem priorytetów. Zero oznacza brak żądania transmisji. bity l-0 - Adres kanału DMA, którego dotyczy żądanie: 00 - kanał pierwszy (0 lub 4), 01 - kanał drugi (l lub 5), 10 - kanał trzeci (2 lub 6), 11 - kanał czwarty (3 lub 7). Budowa rejestru stanu (port 008h w PC/KT, 008h 0D0h w PC/AT) Wewnętrzny stan układu 8237A obrazuje rejestr stanu. Można go tylko odczytywać. Pod tym samym adresem znajduje się rejestr rozkazów, który z kolei można tylko zapisywać. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-4 - Wartość l na odpowiednim bicie oznacza wystąpienie zgłoszenia od kanału 3-0 lub 7-4. bity 3-0 - Wartość l na odpowiednim bicie oznacza osiągnięcie zadanej liczby transmisji dla kanału 3-0 lub 7-4. Budowa rejestru rozkazów (port 008h w PC/KT, 008h i 0D0h w PC/AT) bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bit 7 - Wartość l oznacza, że aktywnym stanem logicznym wyjść DACKw jest stan wysoki. bit 6 - Wartość l oznacza, że aktywnym stanem logicznym wejść DRQ/7 jest stan niski. bit 5 - Wartość l oznacza wydłużony impuls -IOW lub -MEMW. Pełny cykl DMA trwa normalnie przez cztery okresy zegara taktującego. Impuls IOW lub MEMW rozpocznie się wtedy w drugim zamiast w trzecim okresie cyklu. bit 4 - Wartość l oznacza, że kanał O ma największy, a kanał 3 najmniejszy priorytet. Zero oznacza obsługiwanie zgłoszeń w kolejności ich nadchodzenia. bit 3 - Wartość l wymusza przyspieszony cykl pracy (jeden cykl - 3 okresy zegara taktującego). bit 2 - Wartość l oznacza przejście kontrolera w stan programowania. Kontroler nie reaguje wówczas na zgłoszenia na liniach DREQ/7. bit l - Wartość l oznacza transfer typu pamięć-pamięć w obrębie jednego bloku o wielkości do 64 kB. Zero oznacza używanie pełnego adresu. bit 0 - Wartość l oznacza przejście do transferu typu pamięć-pamięć. Kanał O określa miejsce źródłowe transferu, a kanał l docelowe. Budowa rejestru maski kanału (port 00Ah w PC/XT, 00Ah i 0D4h w PC/AT) Pojedyncze kanały mogą być programowo wyłączone (zamaskowane) i nie reagować na zgłoszenia. Można to zrealizować ustawiając rejestr maski kanału. Każda operacja maskowania i odsłaniania jednego kanału wymaga jednorazowego załadowania rejestru. 0; bit 4; bit 3; bit 2; bit l; bit 0 bity 7-3 - Zawsze zero. bit 2 - wartość l powoduje zamaskowanie kanału. bity l-0 - Adres kanału DMA, którego dotyczy żądanie: 00 - kanał pierwszy (0 lub 4), 01 - kanał drugi (l lub 5), 10 - kanał trzeci (2 lub 6), 11- kanał czwarty (3 lub 7). To samo można osiągnąć „globalnie", ustawiając jednocześnie żądaną konfigurację masek przez zaprogramowanie rejestru maskującego. Rejestr ten służy wyłącznie do zapisu. Budowa rejestru maskującego (port 00Fh w PC/XT, 00Fh i 0DEh w PC/AT) 0; 0; 0;0; bit; bit 2 ;bit l; bit 0; bity 7-4 - Zawsze zero. bit 3 - Wartość l na tym bicie maskuje kanał czwarty (3 lub 7). bit 2 - Wartość l na tym bicie maskuje kanał trzeci (2 lub 6). bit l - Wartość l na tym bicie maskuje kanał drugi (1 lub 5). bit 0 - Wartość l na tym bicie maskuje kanał pierwszy (0 lub 4). Budowa rejestru trybu (00Bh w PC/XT, 00Bh i 0DGh w PC/AT): Ustawienie trybu pracy każdego z kanałów odbywa się w rejestrze trybu. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-6 - Tryb pracy: 00- tryb „D" (Demand), 01 - tryb „S" (Single), 10- tryb „B" (Błock), 11 - tryb „C" (Cascade). bit 5 - Wartość l na tym bicie wymusza dekrementację (zmniejszanie o jeden) licznika adresowego podczas każdego cyklu transmisji. Zero oznacza inkrementację licznika. bit 4 - Wartość l powoduje wykonanie samoprogramowania się układu do stanu początkowego po zliczeniu zadanej liczby przesłań. bity 3-2 - W trybie „C" są bez znaczenia, w przeciwnym razie oznaczają kierunek transmisji: 00- tryb„V", 01 - zapis do pamięci, 10 - odczyt z pamięci, 11- nie używane; bity l -0 - Adres kanału opisanego stanem bitów 3-2: 00 - kanał pierwszy (0 lub 4), 01 - kanał drugi (l lub 5), 10 - kanał trzeci (2 lub 6), 11 - kanał czwarty (3 lub 7). Przykładowy program Przytoczony fragment programu w języku Turbo C pokazuje zasadę transmisji danych przez kanał DMA. Osiem wartości zawartych w zmiennej Tabl ma zostać przeniesionych do karty umieszczonej w jednym z gniazd rozszerzenia. Transmisja wyzwalana jest wysokim poziomem na linii DREQ1, która jest oczywiście wyprowadzona do gniazd rozszerzenia (końcówka B18). Proces może być cyklicznie inicjowany przez impulsy generowane na karcie rozszerzenia, zaś CPU nie bierze w nim udziału. Układy logiczne karty muszą oczywiście identyfikować właściwy adres przestrzeni adresowej wejścia-wyjścia na podstawie sygnałów AEN, -IOW i -DACK1. #include #define Przerzutnik 0x0c #define LicznAdrKan_l 0x02 #define RejMaskiKan_l 0x0a #define RejTrybu 0x0b #define RejStronyKan_l 0x83 #define LicznTransKan_l 0x03 #define RejStanu 0x08 char Tabl[8] = { 11,12,13,14,15,16,17,18 } ; unsigned int Adres; unsigned char Strona; void TestDMA (void) { outp (RejMaskiKan_l,0x05); /* zablokuj kanał l na czas programowania */ outp (RejTrybu,0xa9); /* Tryb "B", licznik adresów dekrementowany, samoprogramowanie wyłączone, czytanie z pamięci, programowany kanał nr l */ Adres=(FP_SEG(Tabl) ź 4 + FP_OFF(Tabl)) & Oxffff; /* ostatnie 16 bitów adresu rzeczywistego obiektu */ Strona=(FP_SEG(Tabl) & 0xf000) » 12; /* strona=0000xxxx, gdzie xxxx to pierwsze 4 bity adresu */ outp(RejStronyKan_l,Strona); outp(Przerzutnik,Oxff); outp(LicznAdrKan_l,(Adres & Oxff)); /* młodszy bajt adresu */ outp(LicznAdrKan_l,(Adres » 8) & Oxff); /* starszy bajt */ outp(Przerzutnik,Oxff); outp(LicznTransKan_l,0x08); /* młodszy bajt licz. transmisji*/ outp(LicznTransKan_l, 0x00) ; /* starszy bajt */ outp(RejMaskiKan_l,0x01) ; /* odblokuj kanał nr l */ while((inp(RejStanu) & 0x02) == 0); /* czekaj na koniec transmisji */ Przebieg transmisji Komputer IBM PC Komputer PC z procesorem 8088 posiada 8-bitową magistralę danych i 20-bitową magistralę adresową. Dla pokrycia całej przestrzeni adresowej należy do wewnętrznych 16-bitowych rejestrów adresowych układu 8237A dodać 4-bitowy zewnętrzny rejestr strony. W PC obsługiwane mogą być wyłącznie 8-bitowe urządzenia wejścia-wyjścia, tj. takie, których porty komunikacyjne mają szerokość 8 bitów (szerokość magistrali danych komputera). Transmisja jednego bajtu z pamięci operacyjnej do urządzenia wejścia-wyjścia przebiega następująco: • Urządzenie zgłasza sygnałem na linii DREQn żądanie obsługi. • Układ 8237A przejmuje od procesora kontrolę nad magistralą systemową. • Układ 8237A wystawia na liniach AO - A7 bardziej znaczącą część adresu, która jest zatrzaskiwana w zewnętrznym rejestrze sygnałem ADSTB. Rejestr strony programowany jest wcześniej bezpośrednio przez CPU. • Rejestr strony, adres zapisany w rejestrze zatrzaskowym i aktualny adres na liniach adresowych układu 8237A tworzą 20-bitowy adres na magistrali adresowej systemu. • Układ 8237A uaktywnia (podając na odpowiednią linię zero logiczne) sygnał MEMR. • Sterownik pamięci wystawia na magistralę danych zawartość zaadresowanej komórki pamięci. • Układ 8237A uaktywnia (zero logiczne) sygnał ~IOW. • Urządzenie wejścia-wyjścia (identyfikowane za pomocą sygnałów DACKn i AEN - układ DMA nie wytwarza adresów dla urządzeń wejścia-wyjścia!) pobiera bajt z magistrali danych do swojego bufora. Jak widać, przy transmisjach z udziałem pamięci i urządzenia wejścia-wyjścia nie występuje konieczność buforowania danych w układzie DMA. Tabela 5.1. Przyporządkowanie kanałów DMA w modelu PC Kanał;; Przyporządkowanie 0; układ odświeżania pamięci RAM 1; zarezerwowany dla karty SDLC (standard szeregowej transmisji synchronicznej firmy IBM, który nigdy nie doczekał się popularności) 2; kontroler napędu dysków elastycznych 3; kontroler dysku twardego Komputer IBM PC/XT Ten typ komputera posiada już 16-bitową magistralę danych. Nic to jednak nie daje urządzeniom wejścia-wyjścia na kartach rozszerzenia, których gniazda są i tak 8-bitowe (16-bitowa jest tylko organizacja pamięci). Oznacza to, że na liniach AO - A7 magistrali danych może wystąpić jedynie bajt o adresie parzystym, a na liniach A8 - A15 odpowiednio bajt o adresie nieparzystym. Dodatkowe układy logiczne muszą kierować właściwą część 16-bitowej magistrali danych do 8-bitowego urządzenia wejścia-wyjścia, natomiast druga połowa magistrali musi być ewentualnie odłączona (zależnie od tego, czy adres urządzenia jest parzysty czy nie). Bajty o parzystych adresach umieszczane są w „dolnej" połowie magistrali danych. Ten sam problem dotyczy oczywiście również zapisu do pamięci. Podczas transmisji bloku danych pod kolejne adresy w pamięci urządzenie musi przesuwać co drugi bajt „na drugą stronę" magistrali danych. Komputer XT posiada jeden kontroler 8237A, wszystkie kanały są 8-bitowe, a ich przydział jest taki jak w modelu PC. Komputer IBM PC/AT Model ten, w którym zastosowano procesor 80286, posiada również 16-bitową magistralę danych i występuje w nim ten sam problem co w modelu XT. Podczas sekwencyjnego dostępu do pamięci należy naprzemiennie używać jednej połowy systemowej szyny danych. Komputery AT z procesorem 80386 lub 80486 posiadają zwykle 32-bitową organizację pamięci. Adresowany bajt pojawia się na jednej z czterech części magistrali danych. Tabela 5.2. Przyporządkowanie kanałów DMA w modelu AT Kanał; Przeznaczenie; K 0; Slave, układ odświeżania pamięci 1; Slave, wolny 2; Slave, kontroler napędu dysków elastycznych 3; Slave, wolny 4; Master, kaskada do Slave 5; Master, wolny 6; Master, wolny 7; Master, wolny Kanały 5, 6, 7 są 16-bitowe, natomiast kanały 0-3 obsługuj ą transmisje 8-bitowe. Kanały 16-bitowe Dotychczas omawialiśmy transmisje kanałami 8-bitowymi. Wolne kanały 5, 6 i 7 układu Master przystosowane są do transmisji 16-bitowej. Jak wynika z powyższych opisów, wewnętrzny 8-bitowy rejestr pośredni układu 8237A nie bierze udziału w transmisji między pamięcią i układami wejścia-wyjścia (w dowolnym kierunku). Dane przejmowane są bezpośrednio z szyny danych lub z jej części. Wewnętrzne rejestry adresowe układu 8237A są 16-bitowe. Układ posiada jednak tylko osiem wyjść adresowych AO - A7. Adres jest oczywiście multipleksowany. Układ wystawia na końcówki AO - A7 najpierw bardziej znaczącą część adresu i uaktywnia sygnał ADSTB. Zewnętrzny 8-bitowy rejestr zatrzaskowy przechwytuje ten bajt i wystawia na szynę adresową systemu jako bity A8 - A15. W następnym cyklu zegara układ 8237A wystawia mniej znaczący bajt adresu, który jest bezpośrednio podawany na szynę adresową. Pozostałe osiem bitów, w przypadku 24-bitowej szyny adresowej, doprowadzane jest z rejestru strony. Obrazuje to rysunek 5.4. Efektywny adres dla transmisji 16-bitowych tworzony jest w następujący sposób: bity A0 - A15, złożone z bardziej znaczącej części adresu przechowywanej w zewnętrznym rejestrze zatrzaskowym i mniej znaczącej, wystawianej bezpośrednio na liniach A0 - A7 układu 8237A, jest przesuwana o jeden bit w lewo tworząc linie adresowe A 1 - A16. Bit A0 przyjmuje wartość zero. Taki adres musi wskazywać na dwubajtowe słowo, gdyż pamięć o organizacji 16-bitowej ma słowa rozlokowane na adresach parzystych. Linie adresowe A17 - A23 uzupełniane są zawartością rejestru strony. Strona taka ma więc wielkość 128 kB (adresowana jest 17 bitami AO - A16), podczas gdy w przypadku kanałów 8-bitowych wielkość strony wynosi 64 kB. Podczas transmisji przenoszone są całe słowa 16-bitowe. Na magistrali danych pojawia się zawsze słowo o adresie parzystym, nie ma więc konieczności naprzemiennego przełączania bajtów z magistrali danych. Systemy z procesorem 80386/486 w odniesieniu do swoich 32-bitowych szyn danych posługują się tą samą logiką co komputer AT w stosunku do magistrali 16-bitowej. Głównym celem układu DMA jest, jak wiadomo, realizacja przesłań typu pamięć-urządzenie wejścia-wyjścia „za plecami" procesora. Transmisje typu pamięć-pamięć są dużo szybciej realizowane przez sam procesor, tym bardziej, że odpada wtedy konieczność wewnętrznego buforowania bajtu (lub - co gorsza - słowa) w 8-bitowym rejestrze pośrednim układu DMA. Poprzez opisane powyżej przesuwanie adresu można uzyskać adresy dla słów nawet 64-bitowych i większych, ale transmisja musi wtedy obejmować całkowitą liczbę takich słów. Urządzenie blokowe chcące przesłać np. 1025 bajtów nie będzie więc właściwie obsłużone. W architekturach odmiennych od AT (np. EISA) kontrolery DMA są 32-bitowe i tym samym dopasowane do szerokości szyn. Również szybkość zegara DMA przekracza znacznie początkowe 4.77 MHz pamiętające czasy IBM PC. Układ odświeżania pamięci Zasadniczo stosowane są cztery metody odświeżania pamięci dynamicznej RAM: • Przez niezależny (sprzętowy) układ wbudowany w kontroler pamięci. • Przez układ analogiczny do powyższego, ale pobudzany impulsami z licznika programowalnego 8254. • Przez podprogram wykonywany przez procesor w odpowiedzi na zgłoszenie przerwania NMI. • Przez kanał O DMA, pobudzany impulsami z licznika programowalnego 8254 (metoda ta stosowana jest standardowo w PC/XT, rzadziej w PC/AT). Programowany licznik nr l układu 8254 pracuje jako generator przebiegu prostokątnego o częstotliwości około 66 Hz. Wyjście jego połączone jest z końcówką DREQO układu 8237A (Slave) i wyzwala żądanie obsługi. Kanał 0 zaprogramowany jest w trybie „S" (Single) do realizacji pojedynczych transmisji typu pamięć-urządzenie wejścia-wyjścia. Obsługa żądania polega na odczytaniu (przejęcie kontroli nad magistralami, wystawienie adresu na magistralę adresową, wygenerowanie impulsu ~MEMR) komórki pamięci i przekazaniu go do urządzenia zgłaszającego żądanie (impulsy ~IOW i AEN). W rzeczywistości jednak pobudzone zostają do pracy również wzmacniacze odczytu wiersza/ /kolumny pamięci dynamicznej. Powoduje to automatyczne odświeżenie zawartości nie tylko danej komórki, ale i wiersza lub kolumny (zależnie od organizacji pamięci). Na magistrali danych wystawione zostaje oczywiście adresowane słowo, a możliwość pobrania go przez urządzenie wejścia-wyjścia jest sygnalizowana przez układ kontrolera DMA niskim poziomem na wyjściu ~IOR. Polecenie to jest oczywiście ignorowane, gdyż żadne urządzenie nie reaguje na kombinację sygnałów ~DACK0, AEN i ~IOW. W następnym cyklu zegara systemowego dane znikaj ą z magistrali. Każda taka pseudotransmisja powoduje zmniejszenie wewnętrznego licznika transmisji i zwiększenie licznika adresu o jeden. Następny impuls na wejściu DREQO powoduje wygenerowanie następnego adresu. Układ 8237A może być tak zaprogramowany, że po osiągnięciu zadanej liczby przesłań (dekrementowany licznik transmisji przechodzi przez stan 0000h do FFFFh) następuje ponowne zapisanie rejestrów adresowych i licznika tymi samymi wartościami (patrz bit 4 rejestru trybu). Czynności związane z inicjalizacją rejestrów kontrolera DMA zawarte są w procedurach inicjalizacyjnych BlOS-u. * * * Rozdział 6. Kontroler napędu dysków elastycznych Zapis informacji na dyskietce Modele IBM PC posługiwały się systemem zapisu magnetycznego określanym mianem FM (ang. Freąuency Moditlation). Jest to bardzo prosty i zarazem mało wydajny sposób kodowania informacji na nośniku magnetycznym. Najstarsze modele jako pamięć zewnętrzną wykorzystywały magnetofon, ale ma to znaczenie wyłącznie historyczne, dlatego też nie będzie tutaj omawiane. Pamiętajmy, że tylko zmiana namagnesowania podłoża magnetycznego dyskietki niesie z sobą informację. Stałe namagnesowanie nośnika nie wywołuje impulsów w głowicy napędu. Źródłem impulsów jest zmiana namagnesowania nośnika, przy czym stan początkowy namagnesowania nie ma absolutnie znaczenia (tzn. symboliczna zmiana N->S i S->N niesie tę samą informację). Idee zapisu magnetycznego FM można wyrazić następującymi regułami: • Na ciąg danych przeznaczonych do zapisywania nakładany jest prostokątny przebieg zegarowy, którego okres „pokrywa" jeden bit informacji wejściowej. • Każdy impuls zegara powoduje zmianę namagnesowania podłoża (Z). • Jeżeli w danym cyklu zegara ciąg danych wejściowych reprezentuje jedynkę, pomiędzy impulsami pochodzącymi od zegara wprowadzany jest dodatkowy impuls (D). Pokazano to na rysunku 6. l. Obecnie powszechnie stosowaną metodą zapisu danych na dyskietkach stał się konkurencyjny do systemu FM system MFM (ang. Modified Freąuency Moditlation). Rysunek 6. l. przedstawia schematycznie różnicę między tymi dwoma systemami. Zapis MFM rządzi się następującymi regułami: • Na ciąg danych przeznaczonych do zapisywania nakładany jest prostokątny przebieg zegarowy, którego okres „pokrywa" jeden bit informacji wejściowej. Impuls przemagnesowania dla jednego bitu (impulsu zegara) może pojawić się tylko raz; • Impuls zegara powoduje zmianę namagnesowania podłoża tylko wtedy, gdy stowarzyszony z nim bit danych i poprzedni bit danych mają wartość zero (Z); • Jeżeli w danym cyklu zegara ciąg danych wejściowych reprezentuje jedynkę, to generowany jest impuls do przemagnesowania nośnika (D). Można to przedstawić następująco: Ciąg danych; Impuls przemagnesowujący 00; tak 01; tak 10; nie 11; tak W obydwu metodach kodowania na ciąg impulsów wyjściowych będących źródłem przemagnesowywania podłoża składają się impulsy pochodzące od zegara (Z) i odkodo-wanych danych (D). Widać wyraźnie, że liczba zmian namagnesowania nośnika przypadających na jeden bit informacji jest większa (teoretycznie dwukrotnie) dla zapisu FM. Materiał magnetyczny, którym pokryta jest dyskietka, wykazuje ziarnistość; istnieje ściśle określona dolna granica wielkości obszaru, który można indywidualnie przemagnesować. W przypadku dyskietek HD ta granica to około 2 mikrometra. Na tej samej długości ścieżki można więc w for-macie MFM zmieścić dwukrotnie więcej informacji. Do dekodowania impulsów MFM używa się dwóch bramek sterowanych przesuniętymi o pół okresu przebiegami o częstotliwości zegara. Obie bramki otrzymują też dekodo-wany sygnał MFM. Jedna z bramek odfiltrowuje składowe Z i kieruje je do układu synchronizowania zegara, a druga wydziela dekodowane dane. Należy podkreślić, że przebieg MFM niesie w sobie informację o fazie i częstotliwości sygnału zegarowego tylko w ograniczonym stopniu. Aby zagwarantować właściwą pracę dekodera, co pewien czas należy wymuszać obecność sygnałów synchronizacyjnych. Dokonuje się tego wprowadzając pola zawierające same zera - ciąg taki, jak wiemy, powoduje generację sygnału zegarowego. Szczególnie narażone na rozsynchronizowanie są sektory zawierające tylko bajty o wartości FFh. Fizyczna organizacja danych na dyskietce Informacja nie jest zapisywana na dyskietce w postaci jednolitego ciągu bajtów, lecz zorganizowana jest w tzw. sektory. Każdy sektor zawiera 512 bajtów, co jest jednocześnie najmniejszą porcją informacji, jaka może być z dyskietki odczytana. Z punktu widzenia systemu operacyjnego logiczną strukturę dyskietki tworzą pliki i katalogi, zaś niektóre informacje (zapisane w ściśle określonym miejscu na dysku) mają specjalne znaczenie, np. sektor ładujący (ang. boot sector), katalog (ang. directory). Każdy sektor należy ponadto do tzw. jednostki alokacji (ang. cluster) o kolejnym numerze logicznym, a jednocześnie, z fizycznego punktu widzenia, wchodzi w skład ścieżki (ang. track). Na szczególną uwagę zasługuje tzw. tablica alokacji (ang. FAT - File Allocation Table), będąca specjalną „łańcuchową" strukturą informującą system, które jednostki alokacji (i w jakiej kolejności) składają się na dany plik. System operacyjny korzysta bardzo intensywnie ze wsparcia kontrolera napędu dysków elastycznych, któremu powierza się zadanie administrowania fizyczną powierzchnią dyskietki. To kontroler musi wiedzieć, gdzie odszukać żądany sektor oraz jak radzić sobie z uszkodzonymi sektorami. Operacja formatowania dyskietki nanosi na nią określoną fizyczną strukturę ścieżek i ich sektorów. Oprócz znanych nam 512-bajtowych sektorów logicznych, dyskietka zawiera wiele dodatkowych pól służących kontrolerowi do administracji sektorami (odnajdywania sektorów i przechowywania informacji o ich stanie) oraz pomagających korygować niedokładności mechanicznego wykonania napędu i dyskietki, jak również wahania prędkości obrotowej dysku. Dodatkowe pola na ścieżce pomagają w uzyskaniu stabilnego ciągu impulsów synchronizacyjnych potrzebnych w obróbce danych (szczególnie MFM). W pierwszym przybliżeniu fizyczna organizacja powierzchni dyskietki składa się z jednakowych, koncentrycznych ścieżek. Każda z nich zawiera znacznik początku ścieżki (ang. BOT- Beginning of Trach], sektory w liczbie zależnej od rodzaju dyskietki oraz znacznik końca ścieżki (ang. EOT- End of TracK). Budowę jednej ścieżki dyskietki obrazuje rysunek 6.2. Kontrolery starszej generacji, wyposażone w mikrokontroler "NEC mPD765 lub jego odpowiednik funkcjonalny Intel 8272, mają zaimpleinentowaną możliwość przełączenia w tryb pracy FM (format używany na dyskietkach komputerów IBM PC). Organizacja zapisu na dyskietce, tj. układ pól dodatkowych i ich znaczenie są takie same dla formatów FM i MFM. Inne są tylko długości i zawartości pewnych znaczników. Przykładowo: znacznik synchronizacyjny S (ciąg zer) jest w przypadku formatu FM skrócony do połowy, bowiem -jak wiemy z poprzedniego podrozdziału - ten rodzaj zapisu niesie w sobie bezpośrednio impulsy synchronizacji niezależnie od składu strumienia danych i łatwiej jest utrzymywać generator w stanie zgodności fazowej. Format FM nie ma w obecnych czasach praktycznego znaczenia i nie będziemy się nim dalej zajmować. Poszczególne pola ścieżki formatu MFM maj ą następującą za wartość: Pole; Zawartość; Z1; 80 bajtów o wartości 4Eh S; 12 bajtów o wartości OOh Z2; 4 bajty o wartościach: C2h C2h C2h FCh Z3; 50 bajtów o wartości 4Eh Dl; 4 bajty o wartościach: Alh Alh Alh FEh Pole; Zawartość ID; metryka adresowa sektora - 4 bajty o następującym znaczeniu: bajt 1 - numer ścieżki, bajt 2 - numer głowicy, bajt 3 - numer sektora, bajt 4 - rozmiar sektora kodowany wg klucza: 000- 128 bajtów, 001 -256 bajtów, 010 - 512 bajtów, 011 - 1 kB, 111 - 16 kB CRC-1; 16-bitowy kod CRC* zabezpieczający pola Dl oraz ID CRC-2; 16-bitowy kod CRC* zabezpieczający pole danych sektora Z4; 22 bajty o wartości 4Eh D3; 4 bajty o wartości: Alh Alh Alh FBh Z5; 80 bajtów o wartości 4Eh Z6; bajty o wartości 4Eh - znacznik końca ścieżki (EOT) * pojęcie kodu CRC wyjaśnione jest na stronie 358 System operacyjny może mieć wpływ jedynie na zawartość pola ID. Wszystkie funkcje formatujące ścieżkę muszą przekazać kontrolerowi napędu dysków adres w pamięci, pod którym znajduje się odpowiednio przygotowana 4-bajtowa struktura opisująca każdy sektor formatowanej ścieżki oddzielnie. W następnym podrozdziale podam przykład formatowania ścieżki za pomocą funkcji 05h przerwania 13h BIOS-u. Każda dyskietka posiada w pobliżu swego środka mały otwór, który odsłania przy każdym obrocie fotokomórkę zainstalowaną w napędzie. W ten sposób wytwarzany jest przebieg prostokątny, który podawany jest linią IDX przewodu połączeniowego do kontrolera. Stanowi on przybliżoną informację o początku ścieżki. Jeden bajt danych w przypadku dyskietki HD zajmuje około 16 mikrometra na powierzchni nośnika, tak więc dokładne zlokalizowanie początku ścieżki za pomocą otworu o średnicy 2 mm nie jest oczywiście możliwe. Dla kontrolera sygnałem początku ścieżki jest napotkanie znacznika Z1 W następnej kolejności odczytywany jest blok impulsów synchronizacyjnych S, które dopasowują dokładnie częstotliwość i fazę drgań generatorów potrzebnych do zdekodowania sygnału MFM. Znacznik S zawiera same zera i powoduje generację czystego sygnału synchro-nizacyjnego. Zmniejszany jest tym samym do minimum szkodliwy wpływ chwilowych zmian prędkości obrotowej dysku. Sygnatura Z2 informuje kontroler, że po niej następować będą sektory ścieżki. Resztę znacznika początku ścieżki wypełnia „szczelina" Z3. Każdy z następujących teraz sektorów ścieżki ma jednakową budowę i zawiera 10 pól. Pierwsze z nich to pakiet sygnałów synchronizacyjnych S o budowie i znaczeniu takim, jak w znaczniku początku ścieżki. Następnym jest 4-bitowa sygnatura Dl, informująca kontroler, że nastąpi metryka adresowa sektora ID. Pole to jest 4-bajtowym (ścieżka-głowica-sektor-rozmiar) adresem sektora na dysku i stanowi zawartość bloku formatującego, który należy przygotować w pamięci przed wywołaniem funkcji 05h przerwania 13h BIOS-u. Metryka adresowa ID i jej sygnatura Dl zabezpieczone są 16-bitowym kodem CRC umieszczonym w polu CRC-1. Następuje teraz ponowne zsynchronizowanie generatora MFM z aktualną prędkością obrotową dysku (pole S) i pod głowicami pojawia się znacznik początku danych sektora D3. Pole danych sektora nie musi mieć standardowej długości 512 bajtów, choć jest to wartość powszechnie używana. Długość sektora określona jest w czwartym bajcie pola ID. Może ona sięgać teoretycznie nawet 16 kB, jednak w polach danych o długości większej od 2 kB mogą występować częste przekłamania spowodowane rozsynchroni-zowywaniem się generatorów MFM. Pole danych zabezpieczane jest własną sumą kontrolną w kodzie CRC umieszczaną w polu CRC-2. Szczelina Z5 daje kontrolerowi czas na obliczenie tej sumy i weryfikację wyniku. Pamiętajmy, że kontroler napędu dysków elastycznych nie posiada bufora ścieżki i wszystkie informacje opracowywane są w czasie rzeczywistym, tj. w miarę pojawiania się danych pod głowicami napędu. Szczelina Z5 ma jeszcze dodatkowe znaczenie: jest ona elastycznym buforem między sektorami. Rzeczywiste długości pola danych sektorów mogą się zmieniać, bowiem minimalna zmiana tarcia głowicy o powierzchnię dyskietki (i tym samym zmiana prędkości obrotowej) podczas zapisywania danych nie może być kompensowana zmianą częstotliwości zegara, który jest synchronizowany jedynie polem S. Mogą zatem powstawać lokalne wahania gęstości zapisu, co prowadzi do zmian długości pól danych w sektorach. Pole Z5 zmniejsza zatem szansę na nałożenie się danych sektora na następujące po nich pola. Całkowita długość sektora, po uwzględnieniu wszystkich pól dodatkowych, wynosi więc 654 bajty. Ten fakt, a także istnienie znaczników BOT i EOT, stanowi o różnicy między pojemnością dysku sformatowanego i niesformatowanego. Koniec ścieżki (brak dalszych danych) sygnalizowany jest znacznikiem Z6. Programowanie operacji dyskowych z poziomu systemu MS-DOS System operacyjny składa się z podprogramów obsługujących różne funkcje komputera, m.in. czytanie i zapis na dyskietkę. Dla uproszczenia (skrócenia) wywołania tych programów korzysta się ze specyficznych dla procesorów serii 80x86 rozkazów zwanych przerwaniami programowymi (instrukcja int n). DOS udostępnia trzy przerwania programowe (21 h, 25h i 26h), które tworzą zestaw elementarnych funkcji obsługujących operacje na dyskach. W tym rozdziale zajmować się będziemy tylko dyskietkami. Przerwania 25h i 26h są funkcjami niskiego poziomu, tzn. umożliwiają dostęp do logicznych sektorów DOS. Należy zachować szczególną ostrożność w stosowaniu tych funkcji, bowiem system nie sprawdza, gdzie i co piszemy na dysk, toteż niezmiernie łatwo jest uszkodzić logicznie dyskietkę, zamazując np. sektor ładujący. Natomiast przerwanie 21h jest specyficznym podprogramem, udostępniającym wszystkie funkcje systemu operacyjnego MS-DOS (PC-DOS) (tzw. function dispatcher). System „wie", co ma robić dzięki odpowiedniemu mechanizmowi przekazywania parametrów. W pierwszej kolejności do akumulatora ładuje się numer funkcji, a do pozostałych rejestrów jej parametry, następnie wykonuje się przerwanie 21h (rozkazem int 21 h). Po wykonaniu danej funkcji w akumulatorze zwracany jest symboliczny kod błędu lub poprawnie zakończonej operacji. Wszystkie funkcje usługowe DOS posługują się tym samym mechanizmem przekazywania parametrów i wyników przez rejestry procesora. Numer wykonywanej funkcji przekazywany jest w rejestrze AH. Ustawienie bitu CF (ang. Carry Flag - przeniesienie) rejestru stanu CPU informuje w poniższych funkcjach o wystąpieniu błędu. Symboliczny kod błędu zwracany jest w rejestrze AX. Znaczenie tych kodów podano poniżej. Zawartość rejestru AX; Przyczyna błędu 00h; operacja wykonana poprawnie 01h; nieznany kod rozkazu 02h; zły adres 04h; nie znaleziono sektora 08h; przepełnienie strony DMA 10h; błąd kodu CRC lub ECC 20h; błąd kontrolera napędu 40h; błąd pozycjonowania głowicy 80h; brak gotowości napędu (np. otwarte drzwiczki) Przerwanie 25h Przerwanie 25h umożliwia wczytanie jednego lub większej liczby sektorów logicznych. Parametry wejściowe: AL numer napędu (0 = A, l = B, 2 = C itd.); CX liczba czytanych sektorów; DX numer pierwszego sektora; DS:BX adres bufora w pamięci, w którym mają być umieszczone odczytane dane. Wartości zwracane: (po powrocie z przerwania 25h i 26h zawartość rejestru stanu procesora umieszczana jest również na stosie, skąd należy ją usunąć): AXkod błędu; CF l w przypadku wystąpienia błędu. Przykład: Przytoczony fragment kodu w języku Turbo C obrazuje wykorzystanie funkcji INT 25h do odczytania sektora 13 dyskietki umieszczonej w napędzie A: i umieszczenia go w tablicy Sektor. (Odczyt sektorów za pomocą przerwania 25h realizuje funkcja biblioteczna absread Turbo C). /* Funkcja czyta sektor logiczny 13 dyskietki w stacji A: używając przerwania 25h DOS i umieszcza go w tablicy Sektor */ #include #include unsigned char far Sektor[512]; union REGS RejWej, RejWyj; struct SREGS RejSeg; void CzytajSektorInt_25(void) { RejSeg.ds=FP_SEG(Sektor) ; /* adres bufora */ RejWej.x.bx=FP_OFF{Sektor) ; RejWej.h.al=OxOO; /* napęd A: */ RejWej.x.cx=0x01; /* jeden sektor */ RejWej.x.dx=0x0d; /* pierwszy sektor nr 13 */ int86x(0x25,SRejWej,SRejWyj,&RejSeg); asm pop ax; /* usuń zbędne słowo ze stosu */ if((RejWyj.K.cflag & 0x01) == 0x01) printf ("\n Wystąpił błąd nr: %x\n",RejWyj.x.ax); Przerwanie 26h Przerwanie 26h umożliwia zapisanie jednego lub większej liczby sektorów logicznych. Parametry wejściowe: AL numer napędu (0 = A, l = B, 2 = C itd.); CX liczba czytanych sektorów; DX numer pierwszego sektora; DS:BX adres bufora w pamięci, zawierającego zapisywane dane. Wartości zwracane: AX kod błędu; 1 w przypadku wystąpienia błędu. Przerwanie 21h Zmiana 1565 bajtu w pliku dos5net.txt zapisanym w katalogu c:\bin\dos5\doc za pomocą funkcji INT 25h i INT 26h może przyprawić o frustrację. Aby to uczynić, należy wykonać przedstawione poniżej kroki: • Wczytać funkcją INT 25h sektor zawierający katalog główny. • Odszukać numer jednostki alokacji dla katalogu \bin. Przy obszernych katalogach może okazać się konieczne wczytanie sektora tablicy alokacji. • W sektorze zawierającym katalog \bin odszukać informację o podkatalogu \dos5, wczytać odpowiedni sektor i postępować dalej w analogiczny sposób aż do odnalezienia katalogu \doc. • Po określeniu pierwszej jednostki alokacji dla pliku dos5net.txt należy, podążając łańcuchem jednostek alokacji zapisanych w FAT, określić numer czwartej jednostki alokacj i (1565 = 3 x 512 + 29). • Wczytać odnaleziony sektor funkcją INT 25h i zmodyfikować jego 29 bajt. • Zapisać zmodyfikowany sektor funkcją INT 26h. • Zmodyfikować (ewentualnie) datę i czas utworzenia pliku w zawierającym go katalogu. • Gdyby zaszła konieczność przedłużenia pliku, dodatkowo odnaleźć wolne jednostki alokacji w FAT i dowiązać je do opisującego plik łańcucha. Na szczęście, oprócz wyżej opisanych funkcji, które ukierunkowane są na logiczne sektory dysku, możliwe jest wykorzystanie funkcji przerwania 21h, dzięki którym można przekazywać nazwy plików w tradycyjnie przyjętej formie: napęd:\sciezka\nazwa.rozszerzenie Operacje zapisu bądź odczytu pojedynczych bajtów definiuje się w odniesieniu do początku pliku lub miejsca ostatniej operacji. Przytaczam tu tylko przykładowe funkcje przerwania 21h obsługujące dyski, gdyż nie jest to książka poświęcona programowaniu jako takiemu, a raczej technicznej stronie budowy komputera. Oto niektóre funkcje przerwania 21h Funkcja; Działanie; 3Ch; utworzenie pliku 3Dh; otwarcie pliku 3Eh; zamknięcie pliku 41h; usunięcie pliku 39h; utworzenie katalogu 3Ah; usunięcie katalogu 3Bh; przejście do innego katalogu 57h; odczyt lub zmiana informacji o dacie i czasie modyfikacji pliku: Obsługa dysków za pomocą funkcji BIOS Piętro niżej w hierarchii wewnętrznych procedur komputera leżą zawarte w pamięci stałej podprogramy BIOS-u. Jakkolwiek prawie każdy model płyty głównej komputera posługuje się inną wersją tych procedur, musi być zagwarantowana zgodność punktów wejścia, realizowana przez wypełnienie obszaru wektorów przerwań odpowiednimi adresami procedur oraz zgodność realizowanych funkcji. Właśnie z tych procedur korzysta system operacyjny. Napędy dysków elastycznych obsługiwane są przez funkcje OOh - 05h, 08h i 15h przerwania 13h BIOS. Model AT wyposażony został w dwie dodatkowe funkcje, poświęcone kontroli „tożsamości" dyskietki w napędzie. Procedura obsługi przerwania 13h sprawdza poprawność przekazywanych w rejestrach parametrów (np. czy następuje odwołanie do istniejącego napędu) i ostatecznie wywołuje żądaną funkcję. BIOS numeruje napędy dysków elastycznych następująco: A = 0, B - l itd. Numery dysków twardych rozpoczynają się od 80h, tj. C = 80h, D = 81h itd. Po powrocie z przerwania należy sprawdzić bit przeniesienia (CF) rejestru stanu procesora. Ustawienie tego bitu świadczy o nieprawidłowym wykonaniu operacji. Symboliczny numer błędu umieszcza BIOS w rejestrze AH oraz w obszarze danych BIOS-u pod adresem 0040:0041 h. Kody błędów zwracane przez przerwanie 13h podano niżej. Wartość; Znaczenie 00h; operacja wykonana bezbłędnie 0lh; zły numer funkcji 02h; nie znaleziono znacznika adresu 03h; dyskietka zabezpieczona przed zapisem 04h; nie znaleziono sektora 08h; błąd DMA 09h; przepełnienie strony DMA l0h; błąd odczytu 20h; błąd kontrolera 40h; nie znaleziono ścieżki 80h; brak reakcji napędu Poniżej opisano funkcje przerwania 13h obsługujące napędy dysków elastycznych. Funkcja 00h Działanie: Funkcja wykonuje inicjalizację kontrolera, tj. sprowadza wewnętrzne rejestry kontrolera i napędu do ściśle określonego stanu początkowego. Aktualnie wykonywana operacja zostaje przerwana. Działanie funkcji nie dotyczy konkretnego napędu, ale kontrolera i wszystkich do niego przyłączonych napędów. Parametry wejściowe: AH 00h; DL 00h (dla kontrolera napędu dysków elastycznych). Wartości zwracane: AH kod błędu; CF l w przypadku wystąpienia błędu. Przykład: mov ah,OOh ; funkcja O mov dl,OOh ; zawsze dla kontrolera napędu dyskietek int 13h ; inicjalizacja kontrolera Funkcja 01h Działanie: Funkcja odczytuje status ostatniej operacji. Odtwarza w rejestrze AH bajt statusu opisujący ostatnio przeprowadzoną operację bez względu na to, jak dawno się ona zakończyła. Znaczenie kodów statusu podano na str. 346. Parametry wejściowe: AH 0lh; DL 00h (dla kontrolera napędu dysków elastycznych). Wartości zwracane: AH kod statusu; CF l w przypadku wystąpienia błędu. Funkcja 02h Działanie: Odczytuje jeden lub kilka sektorów z dyskietki do bufora w pamięci. Zawartość wszystkich odczytanych sektorów zapisywana jest do pamięci począwszy od podanego w rejestrach ES:BX adresu, zamazując ewentualnie inne dane. Do obowiązków programisty należy zarezerwowanie odpowiedniej ilości wolnego obszaru pamięci. Parametry wejściowe: AH - 02h; AL - liczba sektorów do przeczytania; CH - numer ścieżki; CL - numer sektora; DH - numer głowicy; DL - numer napędu (0 = A, l = B itd.); ES:BX - adres bufora na zawartość przeczytanych sektorów. Wartości zwracane: AH - kod błędu; CF - l w przypadku wystąpienia błędu. Przykład: /* Funkcja czyta sektor 5 ścieżki O dyskietki w stacji A: używając funkcji 2 przerwania 13h BIOS i umieszcza go w tablicy Sektor */ #include ttinclude unsigned char far Sektor[512]; union REGS RejWej, RejWyj; struct SREGS RejSeg; void CzytajSektorInt_13 (void) { RejSeg.es=FP_SEG(Sektor); RejWej.x.bx=FP_OFF(Sektor); /* adres bufora */ RejWej.h.ah=0x02; /* funkcja nr 2 INT 13h */ RejWej.h.dl=OxOO; /* napęd A: */ RejWej.h.dh=OxOO; /* ścieżka O */ RejWej.h.cl=0x05; /* sektor 5 */ int86x(0x13,SRejWej,SRejWyj,SRejSeg); if((RejWyj.x.cflag & 0x01) == 0x01) printf("\n Wystąpił błąd nr: %x\n",RejWyj.h.ah); } Funkcja 03h Działanie: Funkcja ta jest dopełnieniem funkcji 02h, zapisującym dane do podanych sektorów dysku. Należ)' zwrócić uwagę na to, że jako sektor zapisywane są zawsze pełne 512-bajtowe bloki pamięci (począwszy od adresu podanego w rejestrach ES:BX) - także wtedy, gdy nie zawierają one wyłącznie danych umieszczonych tam przez programistę. Parametry wejściowe: AH - 03h; AL -liczba sektorów do zapisu; CH - numer ścieżki; CL - numer sektora; DH - numer głowicy; DL - numer napędu (O = A, l = B itd.); ES:BX - adres bufora zawierającego zapisywane dane. Wartości zwracane: AH - kod błędu; CF - 1 w przypadku wystąpienia błędu. Funkcja 04h Działanie: Funkcja ta sprawdza poprawność kodów CRC sektora, przeprowadzając czytanie próbne. Druga część działania funkcji, polegająca na odczytaniu sektora i porównaniu go z zawartością obszaru wskazywanego przez ES:BX, jest dziedzictwem z czasów IBM PC i nie jest obecnie implementowana. Parametry wejściowe: AH - 04h; AL - liczba sektorów do weryfikacji; CH - numer ścieżki; CL - numer sektora; DH - numer głowicy; DL - numer napędu (O = A, l = B itd.); ES:BX - adres obszaru pamięci zawierającego dane do porównania. Wartości zwracane: AH - kod błędu; CF - l w przypadku wystąpienia błędu. Funkcja 05h Działanie: Funkcja ta służy do formatowania ścieżki. W pamięci należy przygotować odpowiednie bloki danych, opisujące oddzielnie każdy sektor. Funkcja umieszcza je w polu identyfikatora (ID) danego sektora. Stanowią one metrykę adresową, umożliwiającą późniejsze odnalezienie właściwego sektora. Blok danych składa się z czterech bajtów, które oznaczają kolejno: bajt 0-numer ścieżki, bajt l-numer głowicy, bajt 2-numer sektora, bajt 3-liczbę bajtów w sektorze: 0 - 12, 1 - 256, 2 - 512; 3 - 1024. Parametry wejściowe: AH-05h; AL-liczba sektorów na ścieżce; CH-liczba ścieżek w cylindrze (dotyczy dysku twardego); CL-numer sektora; DH-numer głowicy; DL-numer napędu (0 = A, l = B itd.); ES:BX adres 512-bąjtowego bufora zawierającego identyfikatory kolejnych sektorów (część bufora pozostaje nie wykorzystana). Wartości zwracane: AH-kod błędu; CF-1 w przypadku wystąpienia błędu. Przykład: /* Funkcja formatuje ścieżkę "Sc" na stronie "Str" formatem 256 bajtów na sektor, 10 sektorów na ścieżkę */ #include #include #include #define dens_256 1 struct BlokForm { unsigned char sc; /* ścieżka */ unsigned char st; /* strona */ unsigned char se; /* sektor */ unsigned char dl; /* liczba bajtów/sektor */ }; struct BlokForm far * WskBlokForm; union REGS RejWej, RejWyj; struct SREGS RejSeg; void FormatSc (int Sc, int Str) { int i ; WskBlokForm=(struct BlokForm far * ) malloc (10*4 ) ; for(i = 0;i<10; i + +)/* przygotowanie bloku identyfikatorów */ { WskBlokForm[i].sc=Sc; WskBlokForm[i].st=Str; WskBlokForm[i].se=i; WskBlokFormfi].dl=dens_256; } RejSeg.es=FP_SEG(WskBlokForm); /* adres bloku identyfikatorów */ RejWej.x.bx=FP OFF(WskBlokForm}; RejWej.h.ah=0x05; /* funkcja nr 5 INT 13h */ RejWej.h.dl=0x01; /* napęd B: */ RejWej.h.dh=Str; /* parametr "strona" */ RejWej.h.ch=Sc; /*parametr "ścieżka" */ RejWej.h.al=0x0a; /* 10 sektorów na ścieżkę */ int86x(0x13,SRejWej,SRejWyj,&RejSeg); /* przerwanie 13h */ if((RejWyj.x.cflag & 0x01) == 0x01) printf("\n Wystąpił błąd nr: %x\n",Rej Wyj.h.ah); free (WskBlokForm); Funkcja 08h Działanie: Funkcja zwraca informację o zainstalowanym napędzie, ale zupełnie lekceważy aktualnie stosowany nośnik. Oznacza to na przykład, że napęd HD (1.2 MB) z umieszczoną w nim dyskietką 360 kB melduje się jako typ 2 (tak samo identyfikowany jest napęd pusty). Elementarne wiadomości o napędzie można odczytać wprost z rejestrów CX i DX. Dokładne dane znajdują się w obszarze danych DOS począwszy od adresu 0050:0022h. Na pełną tablicę danych wskazuje też po powrocie z funkcji 08h para rejestrów ES:DI. Parametry wejściowe: AH - 08h; BH - 0 Wartości zwracane: BL-typ napędu: 0 - dysk twardy, 1- 360 kB, 2-1,2 MB, 3 - 720 kB, 4-l,44 MB; CH-liczba ścieżek pomniejszona o l; CL-liczba sektorów na ścieżkę pomniejszona o 1; DH-liczba głowic napędu pomniejszona o l; DL-numer napędu (0 = A, l = B itd.); ES:DI-wskaźnik do tablicy informacyjnej; CF-1 w przypadku wystąpienia błędu. Budowa tablicy informacyjnej: Bajt 0: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-4 - Czas pozycjonowania głowicy. bity 3-0 - Opóźnienie podnoszenia głowic (T2). Kontroler napędu wprowadza to opóźnienie, wykonawszy bieżący rozkaz i oczekując na następny. Bajt l: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-l - Opóźnienie opuszczania głowic (Tl). bit 0 - 0 - transmisja kanałem DMA, l - transmisja bez udziału DMA. Bajt 2: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0 - Opóźnienie wyłączenia silnika napędu. Bajt 3: x; x; x; x; x; x; x; bit l; bit 0; bity 7-2 - Nie używane. Liczba bajtów w sektorze: 00 - 128, 01 - 256, 10 - 512, 11 - l 024 Bajt 4: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0 bity 7 - O - Liczba sektorów na ścieżce: 00001000 - 8; 00001001 - 9; 00001111 - 15; 00010010- 18; Bajt 5: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0 bity 7 - O - Rozmiar szczeliny (GAP) w bajtach: 1Bh dla napędów HD (l ,2 MB), 2Ah dla napędów DD (360/720 kB). Bajt 6: x; x; x; x; x; x; x; x; bity 7-0 - Nie używane. Bajt 7: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-O - Rozmiar szczeliny przy formatowaniu: 50h dla napędów DD 360/720 kB, 54h dla napędu HD l,2 MB, 6Ch dla napędu HD 1,44 MB. Bajt 8: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-O - Wartość bajtu wypełniającego formatowany sektor, zwykle F6h. Bajt 9: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-O - Czas uspokojenia głowic po pozycjonowaniu, w milisekundach. Bajt 10: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0 - Czas rozbiegu silnika w jednostkach równych 0,125 s. Funkcja 15h Działanie: Model AT wyposażono w dwie dodatkowe funkcje, robiące użytek z końcówki 34-tej przewodu łączącego kontroler z napędem. Można na tej podstawie ustalić, czy od czasu poprzedniej operacji dyskowej otwierane były drzwiczki napędu. Jeżeli w komputerze AT wydamy dwa razy pod rząd polecenie dir a: pozostawiając dyskietkę w napędzie, drugie polecenie odczyta zawartość katalogu z wewnętrznego bufora DOS. Otwarcie i zamknięcie drzwiczek wymusi powtórne przeczytanie dyskietki - system zakłada, że nośnik został wymieniony. Nie wszystkie modele napędów wystawiają odpowiedni sygnał, ponadto nie każdy BIOS obsługuje tę funkcję. Funkcja 15h zwraca rodzaj nośnika (rzeczywistą pojemność dyskietki umieszczonej w danym napędzie). Funkcja sprawdza też, czy napęd posiada funkcję kontroli zmiany nośnika. Parametry wejściowe: AH-15h; DL-numer napędu (O = A, l = B itd.). Wartości zwracane: AH-numer błędu lub następująca informacja: 00h - brak napędu, 01 h - napęd nie korzysta z linii 34, 02h - napęd korzysta z linii 34, 03h - dysk twardy; CF-l w przypadku wystąpienia błędu (AH zawiera numer błędu). Funkcja 16h Działanie: Funkcja informuje, czy od czasu ostatniej operacji dyskowej nastąpiło otwarcie i zamknięcie drzwiczek napędu. Jeśli tak, to należy zakładać, że wymieniono dyskietkę w napędzie. Parametry wejściowe: AH-16h; DL-numer napędu (0 = A, l = B itd.). Wartości zwracane: AH - numer błędu lub następująca informacja: 00h - nie wymieniono dyskietki, 0l h - nieprawidłowy numer napędu, 06h - wymieniono dyskietkę; CF - 1w przypadku wystąpienia błędu (AH zawiera numer błędu). Bezpośredni dostęp do kontrolera napędu dysków elastycznych Opisane w poprzednich rozdziałach funkcje nie stanowią najniższego piętra w hierarchii procedur wewnętrznych komputera. Wcześniej czy później muszą się one odwołać bezpośrednio do kontrolera napędu dysków elastycznych. Nazwa „kontroler" jest w tym wypadku w pełni uzasadniona, gdyż układ ten jest małym komputerem (mikrokontrolerem) wyposażonym we własny procesor (zwykle mPD765 w PC/XT lub 82072 w PC/AT) i wykonującym własny program. Kontroler napędu dysków elastycznych pośredniczy między magistralami systemowymi a maksymalnie czterema napędami dysków elastycznych. Jest on zwykle montowany na karcie umieszczanej w jednym z gniazd rozszerzenia i tym samym ma dostęp do magistral systemowych. Istnieją również rozwiązania płyt głównych ze zintegrowanym na nich kontrolerem. Połączenie kontroler-napęd realizowane jest za pomocą wielożyłowego przewodu płaskiego, którego wtyki są różne dla różnych typów napędów, ale sygnały i ich poziomy ściśle trzymają się do dziś standardu SA-450 opracowanego dla potrzeb modelu IBM PC przez firmę Shugart Associates. Powszechnie stosowana jest metoda zapisu MFM, która, upraszczając zagadnienie, daje podwój na gęstość zapisu w porównaniu do systemu FM i praktycznie go wyparła. Skupmy przez chwilę naszą uwagę na operacji zapisu (odczyt wymaga wykonania czynności odwrotnych). Do zadań kontrolera należy: • Nadzorowanie sygnałów na magistralach systemowych i dekodowanie adresów własnych portów. • Transformacja równoległego formatu danych na szynie danych na postać szeregową. • Wyposażenie uformowanych bloków danych w sumy kontrolne CRC. • Wytwarzanie wszystkich fizycznych elementów sektora zapisywanego na dysk, tj. znaczników adresowych, synchronizacyjnych, sygnatur itp. • Generowanie sygnału synchronizującego dla potrzeb formatu MFM. Nadzorowanie stanu elementów mechanicznych napędu i sterowanie ich położeniem. Rejestry kontrolera napędu dysków elastycznych. Rozkazy i dane przekazywane są do rejestrów kontrolera, widzianych w przestrzeni adresowej komputera jako porty (tabela 6.1). Tabela 6.1. Porty udostępniające rejestry kontrolera napadu dysków elastycznych Rejestr; Kontroler nadrzędny; Kontroler podrzędny; Kierunek adres bazowy; 3Foh; 370h; - rejestr wyjściowy; 3F2h; 372h; tylko zapis rejestr stanu; 3F4h; 374h; tylko odczyt rejestr danych; 3F5h; 375h; dwukierunkowy dodatkowe porty dostępne w modelu AT rejestr wejściowy; 3F7h; 377h; tylko odczyt rejestr konfiguracji; 3F7h; 377h; tylko zapis Modele PS/2 mają poszerzoną listę rejestrów i rozkazów. Pomiędzy poszczególnymi modelami tej serii występują istotne różnice; ich opis zostanie pominięty, aby nie zaciemniać tematu. Kontroler może być uznany przez system za nadrzędny lub podrzędny. Jeden kontroler w systemie jest zawsze nadrzędny. Standardowo do przesyłania danych między pamięcią i kontrolerem wykorzystywany jest kanał 2 DMA (dla obydwu typów konfiguracji). Kontroler sygnalizuje zakończenie transmisji przerwaniem sprzętowym IRQ6. Przerwanie to obsługiwane jest standardowo przez procedurę obsługi przerwania OEh BIOS-u. Poniżej podano znaczenie poszczególnych bitów rejestrów. Rejestr wyjściowy bit 7; bit 6; bit 5; bit 4; bit 2; bit1; bit 0; bit 7-Wartość l powoduje włączenie silnika napędu D. bit 6-Wartość l powoduje włączenie silnika napędu C. bit 5-Wartość l powoduje włączenie silnika napędu B. bit 4-Wartość l powoduje włączenie silnika napędu A. bit 3-Wartość l włącza mechanizm obsługi kanału 2 DMA i IRQ6. bit 2=Wartość 0 powoduje wyzerowanie (resef) kontrolera. bity l - 0 - Wybór napędu: 00- A 01 - B 10- C 11 - D Rejestr stanu bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l ; bit 0; bit 7=Rejestr danych (port3F5h/375h): l - gotowy, 0 - niegotowy. bit 6-Kierunek transmisji: l - kontroler -> CPU, 0 - CPU -> kontroler. bit 5-0 - tryb pracy z wykorzystaniem DMA, l - bezpośredni zapis/odczyt do portu danych. bit 4-l - kontroler jest w trakcie wykonywania rozkazu, 0 - kontroler w stanie oczekiwania. bit 3-l - napęd D w trakcie pozycjonowania głowic, bit 2-l - napęd C w trakcie pozycjonowania głowic, bit 1-l - napęd B w trakcie pozycjonowania głowic, bit 0-l - napęd A w trakcie pozycjonowania głowic. Rejestr wejściowy (występuje od modelu AT) bit 7; x; x; x; x; x; x; x; bit 7-informacja o zmianie dysku od czasu ostatniej operacji: 1 - l = dysk wymieniony, O - dysk nie wymieniony bity 6-0 - Nie używane. Rejestr konfiguracji (występuje od modelu AT) X; x; x; x; x; x; bit 1; bit O; bity 7-2 -Nie używane. bity l-0 -Prędkość transmisji kontroler-napęd: 00- 500kbit/s 01- 300 kbit/s, 10- 250 kbit/s, 11- 1 Mbit/s. Napędy dysków o wysokiej gęstości (HD - High Density) 1,2 MB i 1,44 MB mają podwyższoną do 360 obr/min prędkość obrotową. Zwykła dyskietka 360 kB w swoim rodzimym napędzie obraca się z prędkością 300 obr/min. Przy efektywnej długości sektora i szczeliny między sektorowej wynoszącej około 800 bajtów daje to prędkość transmisji 250 kbit/s. Ta sama dyskietka umieszczona w napędzie 1,2 MB jest odczytywana z prędkością 300 kbit/s. Podobne zjawiska występują w napędach 3,5-calowych (1,44 MB). Dla prawidłowej pracy kontrolera należy zawsze, testując rodzaj napędu i aktualnego w nim nośnika, zapisywać właściwe wartości w rejestrze konfiguracyjnym. Cykl rozkazowy kontrolera Faza przygotowawcza W skład tej fazy wchodzą następujące czynności: Przygotowanie oprogramowania DMA tak, by po zgłoszeniu przez kontrolera żądania DRQ2 adres bazowy DMA wskazywał na początek bufora, a licznik adresowy był inkrementowany. Zapisanie do rejestru wyjściowego (port 3F2h/372h) następujących danych: • numeru napędu (bity l - 0), • aktywacji kontrolera (bit 2), • typu transmisji = DMA (bit 3), • rozkazu uruchomienia silnika stosownego napędu (jeden z bitów 7 - 4). Kontroler oczekuje teraz rozkazu podawanego przez rejestr danych (port3F5h/375h). Faza przekazywania rozkazu • Na każdy z rozkazów może składać się wiele bajtów. • Na podstawie pierwszego bajtu rozkazu (zawartej w nim sygnatury) kontroler rozpoznaje, z ilu bajtów składa się rozkaz. • Poszczególne bajty rozkazu są akceptowane tylko wtedy, gdy bit 7 rejestru stanu jest ustawiony (należy to sprawdzić przed przesłaniem każdego bajtu). Budowa przykładowego rozkazu - rozkaz RS (Read Sector) Zajmijmy się przykładową funkcją odczytu sektora. Ponieważ napędy dysków elastycznych mają dwie głowice położone naprzeciw siebie po obu stronach dyskietki, możliwe jest jednoczesne czytanie naprzeciwległych (leżących po przeciwległych stronach dyskietki) sektorów. Faza przekazywania rozkazu Długość: 9 bajtów. Bajt l: bit 7; bit 6; bit 5; t; 0; 1; 1; 0; bit 7-Wartość l oznacza czytanie obustronne. bit 6- Format zapisu sektora: l - MFM, O- FM. bit 5-Wartość l oznacza brak reakcji na napotkanie skasowanego znacznika adresu, wartość O powoduje w takiej sytuacji wystąpienie błędu. bit 4-0 - 00110 - sygnatura rozkazu (opcode). bit 2: x; x; x; x; x; bit 2; bit 1, bit 0; bity 7-3 -Nie używane. bit 2 -Numer głowicy. bity l-0 -Numer napędu: 00- A, 01 - B, 10- C, 11 - D. Bajt 3: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bit 7-0-Numer ścieżki. Bajt 4: x; x; x; x; x; x; x; bit O; bity 7-1-Nie używane. bit O-Numer głowicy. Bajt 5: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0- Numer sektora. Bajt 6: x; x; x; x; x; bit 2; bit l; bit 0; bity 7-3-Nie używane. bity 2-0- Wielkość sektora: 000 - 128 B, 001 - 256 B, 010 - 512B, 011 - l kB, 111 - 16 kB. Bajt 7: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0-Numer ostatniego sektora do przeczytania. Uwaga: gdy czytany jest tylko jeden sektor, równe wartości z bajtu 5. Inną możliwością zaprogramowania liczby sektorów do przeczytania jest ustawienie licznika transmisji kanału DMA; sygnał TC (Terminal Counf] z kanału DMA przerywa wówczas transmisję po przeczytaniu zadanej liczby sektorów. Bajt 8: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0- Długość szczeliny Z5. Zwykle bajt zawiera sygnaturę 01000110, oznaczającą szczelinę 80-bajtową. Bajt 9: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0- WPC zwykle zawierają sygnaturę FFh, co oznacza sektor 512-bajtowy. Po odebraniu właściwej liczby anonsowanych w pierwszym słowie rozkazu bajtów kontroler przechodzi do fazy przekazywania danych. Faza przekazywania danych • W podanym przykładzie kontroler ustawia głowice nad adresowaną ścieżką i od-czekuje czas T1 (por. opis funkcji 08h przerwania 13h BIOS-u). • Głowice opuszczane są na powierzchnię dyskietki i rozpoczyna się czytanie metryk adresowych sektorów ścieżki aż do napotkania sektora określonego w bajcie 5 rozkazu (większość nowoczesnych napędów dyskietek ma głowice cały czas opuszczone, co przyspiesza operacje dyskowe). • Odczytywany jest blok danych sektora wraz z polem CRC-2, po czym sprawdzana jest ich suma kontrolna. • Sygnałem DRQ2 uruchamiany jest mechanizm DMA i blok danych przekazywany jest do pamięci (kontroler napędu dysków elastycznych nie posiada żadnego mechanizmu buforowania danych!). • Następne sektory odczytywane są do momentu, gdy: • nadejdzie sygnał TC z kanału DMA lub • napotkany zostanie koniec ścieżki lub • odczytany zostanie ostatni sektor podany w bajcie 7 rozkazu RS. • Głowice pozostają jeszcze na powierzchni dyskietki przez czas T2, oczekując na mogący nadejść kolejny rozkaz (przyspiesza to dostęp do danych). • Głowice są podnoszone. • Wykonanie fazy przekazywania danych kończy się wygenerowaniem przez kontroler napędu dysków przerwania IRQ6. Kontroler ma w swoim repertuarze również rozkazy pozbawione fazy przekazywania danych (np. odpytywanie stanu napędu). Po odebraniu rozkazu przechodzi on wtedy do fazy końcowej, jednak i w tym przypadku generowane jest przerwanie 1RQ6. Faza końcowa Kontroler dysponuje czterema rejestrami statusowymi STATUS-0 - STATUS-3 (nie mylić z rejestrem stanu dostępnym przez port 3F4h/374h), które dostępne są do wglądu dla procesora w fazie końcowej. Zależnie od rodzaju zrealizowanego rozkazu niosą one też inne informacje. Bajt l; STATUS-0 Bajt 2; STATUS-1 Bajt 3; STATUS-2 Bajt 4; ŚCIEŻKA Bajt 5; GŁOWICA Bajt 6; SEKTOR Bajt 7; ROZMIAR W naszym przykładzie przez port danych zwracany jest ciąg siedmiu bajtów niosących informacje o zakończonej operacji. Bez względu na ich ewentualne wykorzystanie do obsługi mogących wystąpić sytuacji wyjątkowych, należy odebrać z portu danych wszystkie 7 bajtów. Standardowa procedura obsługi przerwania IRQ6 po każdej operacji dyskowej odbiera automatycznie z portu danych do siedmiu bajtów i umieszcza je w obszarze informacyjnym BIOS-u począwszy od adresu 0040:0042h. W poniższym opisie objaśnienie znaczenia danej pozycji bitowej rejestrów odnosi się do stanu, w którym jest ona ustawiona (ma wartość logicznej jedynki). Zero logiczne na danej pozycji oznacza sytuację odwrotną, chyba że podano inne wyjaśnienie. Bajt l: STATUS-0 bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; Kod zwracany po wykonaniu rozkazu: 00 - normalne zakończenie rozkazu, 0l - rozpoczęto wykonanie rozkazu ale go nie dokończono, 10 - nie podjęto wykonania rozkazu (zły kod), 11 - przerwano wykonywanie rozkazu poprzez polling. bit 5 - 1 - poszukiwanie ścieżki zakończone prawidłowym pozycjonowaniem głowic, 0 - poszukiwanie ścieżki trwa. bit 4 - Sygnał błędu pozycjonowania. Mimo wysłania 79 impulsów do mechanizmu silnika krokowego napędzającego ramiona głowic nie osiągnięto ścieżki zerowej. bit 3 - Brak sygnału gotowości napędu. bit 2 - Aktualnie pracująca głowica: I - głowica nr 1, 0 - głowica nr 0. bity l-O - Aktualnie wybrany napęd: 00 - A, 01 - B, 10- C, 11 - D. Bajt 2: STATUS-1 bit 7; x; bit 5; bit 4; x; bit 2; bit l; bit 0; bit 7-Osiągnięto koniec ścieżki. bit 6-Nie używany. bit 5-Błąd sumy kontrolnej CRC-1 lub CRC-2. bit 4-Przekroczenie limitu czasu w oczekiwaniu na reakcję ze strony procesora lub układu DMA (overrun). bit 3-Nie używany. bit 2-Nie znaleziono sektora. bit 1-Dyskietka zabezpieczona przed zapisem. bit 0-Mimo wykonania pełnego obrotu dyskietki (dwa impulsy IDX z zespołu fotokomórki) nie znaleziono metryki adresowej sektora. Bajt 3: STATUS-2 x; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bit 7-Nie używany. bit 6-Podczas odczytu napotkano sektor z metryką adresową usuniętych danych. bit 5-Błąd sumy kontrolnej CRC-2. bit 4-Niewłaściwy numer ścieżki. bit 3-Dane odczytane z sektora w tiybie porównania są identyczne z danymi przesłanymi przez CPU lub kanał DMA. bit 2-Nie znaleziono ścieżki zawierającej dane identyczne z przesłanymi przez CPU lub kanał DMA. bit 1-Niewłaściwy numer ścieżki. bit 0-Nie znaleziono metryki adresowej sektora. Bajt STATUS-3, nieobecny w fazie końcowej rozkazu RS, występuje w fazach końcowych innych rozkazów. Odzwierciedla on stan niektórych linii przewodu połączeniowego napęd-kontroler. Bajt STATUS-3 bit 7; bit 6; bit 5; bit 4; bit 3; bit2; bit l; bit 0; bit 7-Linia FSIG (Faulf), istotna tylko dla kontrolera mPD765, poza tym stale 0. bit 6-Linia WP (Write Protected) - dyskietka zabezpieczona przed zapisem. bit 5-Linia RDY (Ready) - gotowość napędu, istotna tylko dla kontrolera mPD765, poza tym stale l. bit 4-Linia TRKO (Track 0), l = osiągnięto ścieżkę zerową. bit 3-Linia DSLW (Double Side), l = napęd jest dwustronny. bit 2-Linia HDSEL (HeadSelecf): I - wybrano głowicę nr l, O - wybrano głowicę nr 0. bity l-O-Linie DS l i DSO (Drive Selecf) - wybór napędu: 00 - A, 01 - B, 10 - C, 11 - D. Bajt 4: Ścieżka bit 7; bit 6; bit 5; bit 4; bit 3; bit2; bit l; bit 0; bity 7-0-Podają numer ścieżki, na której znajdował się ostatni z przeczytanych przez kontroler sektorów. bit 7; bit 6; bit 5; bit 4; bit 3; bit2; bit l; bit 0; Bajt 5: Głowica x; x; x; x; x; x; x; bit 0; bity 7-l-Nie używane. bit 0=Numer głowicy, która była aktywna jako ostatnia: 0 - głowica 0, l - głowica 1. Bajt 6: Sektor bit 7; bit 6; bit 5; bit 4; bit 3; bit2; bit l; bit 0; bity 7-0-Numer ostatniego z przeczytanych sektorów. Bajt 7: Rozmiar sektora x; x; x; x; x; bit2; bit l; bit 0; bity 7-3-Nie używane. bity 2-0-Rozmiar ostatnio przeczytanego sektora, kodowany następująco: 000 - 128 bajtów, 001 - 256 bajtów, 010 - 512 bajtów, 011 - l kB, ... 111 - 16kB. Alternatywne metody transmisji danych Transmisja poprzez kanał DMA nie jest oczywiście jedyną możliwością przekazywania danych między pamięcią a kontrolerem. Ustawienie bitu 3 w rejestrze wyjściowym kontrolera oraz wyzerowanie bitu O w drugim bajcie rozkazu STOD (inne rozkazy kontrolera nie są tu omawiane) wprowadza kontroler w tryb pracy bez udziału DMA. Obecność bajtu w porcie danych (przy odczycie danych z dysku) lub żądanie umieszczenia tam bajtu (przy zapisie danych na dysk) wyzwala przerwanie sprzętowe IRQ6, nie pobudzając jednocześnie linii DREQ2 kontrolera DMA. Procedura obsługi przerwania IRQ6 musi umieć obsłużyć żądanie kontrolera (przesłać bajt danych z portu do pamięci lub odwrotnie). Zakończenie tak zmodyfikowanej fazy przekazywania danych również powoduje wygenerowanie przerwania IRQ6, sygnalizującego obecność w porcie danych ciągu rejestrów statusowych (oraz innych) i kończącego rozkaz. Wyzerowanie bitu 3 w rejestrze wyjściowym i ustawienie bitu O w drugim bajcie rozkazu STOD prowadzi do wyłączenia przez kontroler generacji zarówno impulsów DREQ2 jak i IRQ6. Jest to tak zwany tryb pracy polling. Kontroler nie sygnalizuje w żaden sposób konieczności obsługi, a jedynym sposobem stwierdzenia tej konieczności jest stałe sprawdzanie stanu bitu 7 rejestru stanu kontrolera. Ustawienie tego bitu świadczy o konieczności ingerencji w rejestr danych, czyli: • Odczytania bajtu, gdy bit 6 rejestru stanu jest ustawiony (żądany kierunek transmisji kontroler -> CPU). • Zapisania bajtu, gdy bit 6 rejestru stanu jest wyzerowany (żądany kierunek transmisji CPU -> kontroler). W takiej sytuacji należy programowo rozstrzygnąć, czego oczekuje od nas kontroler i co czeka na nas w rejestrze: dane, rozkaz czy bajty statusu. Ta forma obsługi kontrolera nie ma znaczenia praktycznego ze względu na zależności czasowe. Port danych kontrolera nie może bowiem przetrzymywać w nieskończoność jakiegoś bajtu i tym samym nie reagować na żadne inne rozkazy. Uwzględnianie mechanicznych własności napędu Jak wiadomo, głowice zapisująco-odczytujące napędu dysków elastycznych muszą mieć możliwość osiągnięcia każdej ze ścieżek, tj. przemieszczać się nad powierzchnią dyskietki. Głowice umieszczone są na wózku napędzanym silnikiem krokowym. Oś tego silnika nawija taśmę przymocowaną do wózka (stosowane są również inne mechanizmy np. przekładnia ślimakowa). Cały ten układ ma pewną bezwładność, częstotliwość rezonansu mechanicznego i inne rzeczywiste właściwości mechaniczne. Każdy rozkaz dostępu do napędu wymaga wcześniejszego określenia podstawowej charakterystyki dynamicznej zespołu napędowego głowic. Możliwości korekcji błędu położenia głowic napędu dyskietek są bardzo ograniczone. Układ sterowania położeniem wózka z głowicami pracuje w otwartej pętli sprzężenia zwrotnego, tzn. kontroler wydaje polecenie umieszczenia ustawienia głowic nad żądaną ścieżką, ale nie otrzymuje informacji o faktycznym położeniu głowic. Jedynym punktem orientacyjnym jest ścieżka zerowa dysku. Algorytm działania układu pozycjonowania jest następujący: • Wydawane jest polecenie ustawienia głowic nad ścieżką zerową. Silnik krokowy otrzymuje impulsy w liczbie równej maksymalnej liczbie ścieżek dla danego typu nośnika. Osiągnięcie tej pozycji przez głowicę potwierdzane jest sygnałem z czujnika położenia (najczęściej fotokomórki). Jeżeli sygnał ten nie nadchodzi, sygnalizowany jest błąd. • Silnik krokowy otrzymuje impulsy w liczbie żądanego numeru ścieżki. • Jeżeli kontroler rozpoznaje inną ścieżkę, mamy do czynienia z błędem pozycjonowania (kalibracji). • BIOS inicjuje kilkakrotną próbę zapisu/odczytu. Brak sukcesu oznacza konieczność powtórnej kalibracji (rozpoczynającej się od najazdu na ścieżkę zerową; standardowo próba taka wykonywana jest 8 razy). Szczególnie podatne na błędy są oczywiście operacje, podczas których głowice przemierzają duże odległości np. ze ścieżki O na 79. Wszystkie niedokładności mechanizmu mogą się wtedy nawarstwiać. Aby zmniejszyć ryzyko błędów pozycjonowania, wprowadzono trzy parametry, które w pewnym stopniu odzwierciedlają rzeczywiste właściwości mechaniczne napędu. Kontroler uwzględnia te dane wprowadzając do pracy swoich układów wykonawczych trzy opóźnienia: T1 - Czas opóźnienia opuszczenia głowic - uwzględnia czas wygaśnięcia drgań głowic po zakończeniu procesu pozycjonowania, a przed opuszczeniem ich na powierzchnię dyskietki. T2 - Czas opóźnienia podnoszenia głowic -jego wprowadzenie ułatwia czytanie całej ścieżki przy realizacji grup rozkazów odwołujących się do kolejnych sektorów. T3 - Okres impulsów silnika krokowego - uwzględnia bezwładność i czas martwy zespołu silnik-wózek głowic. Zmniejszenie tej wartości powoduje wprawdzie szybszy dostęp do danych, ale niesie w sobie niebezpieczeństwo „połykania" impulsów przez silnik i błędów pozycjonowania. Powyższe parametry czasowe oraz informacje o wykorzystaniu kanału DMA przekazywane są kontrolerowi rozkazem STOD (Set Type of Disk}. Na rozkaz ten składają się trzy bajty, przesyłane, tak jak przy wszystkich innych rozkazach, przez port danych (3F7h ewentualnie 377h), naturalnie z zachowaniem każdorazowej kontroli bitu 7 rejestru stanu (ustawienie tego bitu przez kontroler świadczy o gotowości portu danych). Rozkaz STOD Bajt l: 0; 0; 0; 0; 0; 0; 1; 1; bity 7-O-Liczba 03h - sygnatura rozkazu. Bajt 2: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit O bity 7-4-Czas T3 [ms], kodowany w zależności od prędkości transmisji: KOD; 1 Mbit/s; 500 kbit/s; 300 kbit/s; 250 kbit/s OOh; 8,0; 16; 26,7; 32 Olh; 7,5; 15; 25,0; 30 ...; ...; ...; ...; ... OFh; 0,5; 1; 1,7; 2 bity 3-0-czas T2 [ms], kodowany w zależności od prędkości transmisji: KOD; 1 Mbit/s; 500 kbit/s; 300 kbit/s; 250 kbit/s OOh; 128; 256; 426; 512 Olh; 8; 16; 26,7; 32 02h; 16; 32; 53,5; 64 ...; ...; ...; ...; ... OFh; 120; 240; 400; 480 Bajt 3: hit 7; hit 6; hit 5; hit 4; hit 3; hit 2; hit l; hit 0; bity 7-4-Czas T1 [ms], kodowany w zależności od prędkości transmisji: KOD; 1 Mbit/s; 500 kbit/s; 300 kbit/s; 250 kbit/s 00h; 128; 256; 426; 512; 0lh; 1; 2; 3,3 4; 02h; 2; 4; 6,7; 8; ...; ...; ...; ...; ... 0Eh; 126; 252; 420; 504; 0Fh; 127; 254; 423; 508; bit 0-l - transmisja kanałem DMA, 0 - transmisja bez udziału kanału DMA Zastosowanie kodów CRC Nieuniknione niedoskonałości wykonania elementów mechanicznych napędu oraz wady nośnika magnetycznego mogą, mimo prób ich wyeliminowania, powodować przekłamania utrwalanej informacji. Przyjrzyjmy się więc przez chwilę kontroli poprawności zapisanych danych. Najprostszą, ale i najmniej efektywną metodą kontroli jest tzw. kontrola parzystości. Każdy bajt danych otrzymuje dodatkowy, dziewiąty bit informujący o tym, czy liczba jedynek w bajcie jest parzysta lub nieparzysta (w zależności od umowy). Łatwo zauważyć, że w najbardziej niesprzyjających warunkach można, bazując jedynie na informacji o parzystości, cały zanegowany bajt (przekłamanie na wszystkich pozycjach) uznać za poprawny. Podobnie ma się sprawa z przekłamaniem każdej parzystej liczby jedynek. W związku z tym opracowano wiele innych, bardziej efektywnych sposobów rozwiązania tego problemu. Magnetyczne systemy cyfrowego zapisu informacji posługują się generalnie tzw. kodami CRC (ang. Cyclic Redimdancy Check). Budowa kodu CRC Rozpatrzmy klasyczne dzielenie dwóch liczb całkowitych. Bez względu na podstawę systemu (dziesiętny, binarny czy inny) obowiązuje zasada: dzielna : dzielnik = iloraz + reszta Przypomnijmy sobie znany ze szkoły podstawowej algorytm wykonywania takiego dzielenia. Należy ustalić, ile razy mieści się dzielnik w lewostronnej części dzielnej. Wynik ten jest pierwszą cyfrą ilorazu. Cyfrę tę mnożymy przez dzielnik i uzyskaną sumę częściową odejmujemy od wspomnianego lewostronnego fragmentu dzielnej. Do wyniku odejmowania dopisywana jest kolejna cyfra dzielnej i proces powtarza się. Tak samo można postępować z liczbami w systemie binarnym. Nie musimy tu obliczać częściowych ilorazów - wyniki mogą być tylko dwa: dzielna jest większa od dzielnika i częściowy iloraz równa się l, lub też dzielnik jest większy od dzielnej, a iloraz wynosi zero (dzielenie jest tu zastąpione przez porównywanie). Przykład: 324#d : 19#d - 101000100#b : 10011#b = 17#d = 10001#b, reszta l Wykonujemy dzielenie: 101000100 : 10011 = 10001 10011 -------- 000010 00000 ------- 00101 00000 ------- 01010 00000 ------- 10100 10011 ------ 00001 - reszta Do realizacji powtarzających się w tym algorytmie operacji odejmowania używamy zwykłej arytmetyki binarnej, tj. uwzględniamy przeniesienia na sąsiednie pozycje podczas odejmowania liczby większej od mniejszej. Komplikuje to w istotny sposób obliczenia, gdyż wynik na danej pozycji bitowej zależy również od pozycji poprzedniej. Nie jest tak natomiast w tzw. arytmetyce modulo 2. Zastosujmy operację bitowej różnicy symetrycznej (XOR). Oto tablica prawdy dla tej operacji. X; y; xXORy; 0; 0; 0; 0; 1; 1; 1; 0; 1; 1; 1; 0; Tak zdefiniowane dodawanie i odejmowanie daje te same wyniki. Wróćmy do naszego przykładu, zastępując klasyczne odejmowanie nowo zdefiniowanym działaniem. 101000100 : 10011 = 10111 10011 ------- 001110 000000 ------- 11101 10011 ------- 011100 10011 ------- 011110 10011 ------- 01101 - reszta Otrzymane wyniki będą się różnić, ale nie należy zapominać, że operujemy inną arytmetyką. Kody kontrolne CRC wykorzystują właśnie reszty z takiego dzielenia. Ilorazy nadają się do tego celu gorzej, gdyż ich długość jest zmienna i silnie zależy od długości dzielnej. Reszta musi krótsza od dzielnika - gdyby była większa, można byłoby przecież podzielić jeszcze raz i zwiększyć iloraz. Pod pojęciem sumy kontrolnej danego ciągu danych w kodzie CRC rozumiemy resztę z dzielenia tego ciągu przez pewien określony dzielnik. Oczywiste jest, że układy wytwarzające sumę kontrolną CRC podczas zapisu posługują się takim dzielnikiem, jaki będzie później użyty przez układy odczytujące do kontroli poprawności danych. Dowolnie długi ciąg danych zabezpieczanych przy użyciu kodu CRC traktuje się jako dzielną. Ustalony z góry dzielnik binarny nazywany jest też generatorem kodu. Reszta z powyższego dzielenia (iloraz jest ignorowany) jest właśnie poszukiwanym kodem CRC, a dokładniej mówiąc - sumą kontrolną w kodzie CRC. Intuicyjnie można przewidzieć, że zdolność do wykrywania błędów przez kod CRC zależy od długości generatora. Dokładna analiza matematyczna, która traktuje powyższe zagadnienia jako element algebry wielomianów, pozwala wyznaczyć szczególnie optymalne generatory. Dla celów zabezpieczenia informacji na nośniku magnetycznym stosuje się 17-bitowy generator 10001000000100001, który produkuje 16-bitową resztę. Taki kod CRC (nazywany kodem CCITT) pozwala rozpoznać pojedynczy błędny bit w ciągach dowolnej długości. Można w tym momencie powiedzieć, że to samo potrafi bit kontroli parzystości. Kod CRC może jednak dużo więcej. Rozpoznaje on w 100 % błędy dowolnej pary sąsiadujących bitów. Przekłamania w szeregu bitów o długości do 16 pozycji wykrywane są w 100 %, a przekłamania w ciągu o dowolnej długości w 99,9984 %. 512-bajtowy blok danych sektora dyskietki zabezpieczany jest przez dopisanie w polu CRC-2 dwóch bajtów zawierających 16-bitowy kod CRC tego bloku. Kontroler odczytując tak zapisaną informację korzysta z właściwości arytmetyki modulo 2 - zamiast obliczać sumę kontrolną dla bloku danych i porównywać ją z zawartością pola CRC-2, oblicza sumę kontrolną dla całych 514 bajtów (dane + CRC). Jeżeli nie nastąpiło przekłamanie w polu danych, spodziewany jest wynik równy zero. Metoda ta jest szybsza i technicznie łatwiejsza w realizacji. * * * Rozdział 7. Obsługa dysku twardego Można śmiało powiedzieć, że udział dysku twardego w pracy całego systemu jest nie mniejszy od wkładu, jaki wnosi sam procesor. Pakiety oprogramowania o monstrualnych rozmiarach tylko dlatego mogą znaleźć nabywców, że od czasów wprowadzenia na rynek pierwszego dysku twardego o pojemności 10 MB (w cenie 4 000 dolarów) wiele się w tej dziedzinie zmieniło. Przez wiele lat dominował standard ST412/506. którego nazwa wywodziła się od pierwszych modeli tego systemu. W miarę upływu czasu i wzrostu wymagań stawianych dyskom twardym, zwłaszcza w dziedzinie zastosowań profesjonalnych, opracowane zostały nowocześniejsze systemy (IDE, ESDI, SCSI). Jednemu z nich - standardowi IDE, nazywanemu również AT-BUS - udało się zdominować również rynek komputerów powszechnego użytku. Wszystko wskazuje na to, że został on wyparty przez standard Enhanced IDE (EIDE), który stanowi jego rozwinięcie. Budowa kontrolera W obudowie klasycznego dysku twardego zintegrowane są jedynie układy bardzo ściśle współpracujące z elementami wykonawczymi sterowania części ruchomych napędu dysku, jak silniki krokowe i liniowe, oraz systemy bezpośrednio związane z głowicami odczy-tująco-zapisującymi. Skomplikowane zadanie sterowania tymi elementami i obróbkę danych przejmuje kontroler dysku. Jest to układ podobny do kontrolera napędu dysków elastycznych. Z logicznego punktu widzenia kontroler dysku twardego wymienia dane z magistralą systemową komputera PC tak samo, jak każde inne urządzenie. Procesor wysyła do odpowiednich rejestrów sterujących dane i rozkazy, a pozostający w kontakcie z dyskiem kontroler odpowiada danymi i informacjami dodatkowymi. Sam kontroler składa się z mikroprocesora otoczonego niezbędnymi układami dodatkowymi, jak pamięci RAM i ROM, dekodery adresów i specjalistyczne układy obróbki danych. Każdy kontroler zawiera dodatkowo pamięć mogącą pomieścić dane jednego pełnego sektora wraz z kodami ECC (ang. Error Correction Code), nazywaną buforem sektora. Systemy kontroli i korekcji ECC są również rozwiązaniami sprzętowymi. Spróbujmy prześledzić działanie kontrolera w trakcie realizacji operacji odczytu sektora dysku. • Procesor przekazuje kontrolerowi grupę bajtów zawierającą rozkaz odczytu wraz z niezbędnymi parametrami lokalizującymi żądany sektor. • Po rozpoznaniu rozkazu mikroprocesor kontrolera przechodzi do wykonywania odpowiadającego mu fragmentu programu zapisanego w jego pamięci stałej. • Ze strumienia danych napływających z głowic wyławiane są metryki adresowe (ID). Pozwala to na określenie aktualnego położenia głowic. Na tej podstawie obliczana jest liczba impulsów sterujących, które należy przesłać do silnika krokowego ramienia głowic, by znalazły się one nad żądaną ścieżką. • Jeżeli założymy, że poprzednia operacja została przeprowadzona bezbłędnie (co nie zawsze musi mieć miejsce), rozpoczyna się oczekiwanie na pojawienie się w strumieniu danych ścieżki metryki adresowej poszukiwanego sektora. • W zależności od stosowanego systemu zapisu magnetycznego (MFM, RLL), dane podlegają różnym przekształceniom do form pośrednich (np. NRZ). W końcowej fazie odseparowany blok danych kontrolowany jest przez system ECC. Kod ECC spełnia podobną rolę do opisanych w poprzednim rozdziale sum kontrolnych CRC. Główna różnica polega na stopniu komplikacji generatora (wielomianu) kodu. Dyski twarde systemu ST412 stosują najczęściej generator 32 stopnia postaci 100010100000010100000010001000110. Wielomian taki produkuje 4-bajtowe kody ECC mające zdolność nie tylko do wykrywania, ale również - co dużo bardziej interesujące - korekcji błędów. Korygowane mogą być nie tylko pojedyncze błędy, lecz również błędne ciągi o długości nie przekraczającej 11 bitów. • Odczytane, sprawdzone i ewentualnie poprawione dane lokowane są w buforze sektora i mogą być przekazane do pamięci operacyjnej. Kontroler komputera PC/XT posługuje się kanałem 3 DMA, natomiast modele AT korzystają z przerwań. Po odczytaniu sektora kontroler modelu AT wyzwala przerwanie na linii IRQ14. Procedura obsługi tego przerwania rozpoczyna, wykorzystując rozkaz in, żmudną operację przenoszenia krok po kroku wszystkich 512 (a czasem 516, tj. dane wraz z ECC) bajtów z portu danych kontrolera do pamięci operacyjnej. Systemy kodowania MFM i RLL Z poprzedniego rozdziału, poświęconego dyskom elastycznym, pamiętamy, że sama zmiana systemu kodowania danych z FM na MFM przyniosła znaczne zwiększenie upakowania danych przy tej samej gęstości zapisu magnetycznego. Nic więc dziwnego, że poszukiwane były nadal metody pozwalające na jeszcze większy wzrost pojemności tego samego nośnika wyłącznie kosztem komplikacji towarzyszącej mu elektroniki. Jednym z takich nowych systemów, któremu udało się ugruntować swoją pozycję, jest standard RLL (ang. Run Length Limited). Powróćmy na chwilę do metody MFM. Punktem wyjścia do naszych rozważań będzie przykładowy bajt danych o wartości 00101110, reprezentowany przez przebieg (1) na rysunku 7.1. Na ciąg wyjściowych impulsów w systemie MFM (3) składała się, jak pamiętamy z rozdziału 6, suma impulsów zegarowych Z (2) oraz impulsów D, pochodzących od strumienia danych (1). Obowiązywała przy tym zasada, że składowe D reprezentowały ustawione bity danych, a składowe Z - tylko te impulsy zegara, które wypadają pomiędzy dwoma kolejnymi wyzerowanymi bitami danych. Istota kodowania RLL polega na rezygnacji ze składowej Z. Układy logiczne dekodera muszą wtedy obliczać, na podstawie odległości dzielących kolejne impulsy, liczbę zer między nimi. System taki może poprawnie funkcjonować w warunkach rzeczywistych (uwzględniając fluktuacje prędkości obrotowej) jedynie w pewnych granicach, tzn. gdy liczba następujących po sobie zer strumienia danych nie jest zbyt duża. Trudno wymagać od zapisywanych danych, by miały określony skład, a w szczególności by nie zawierały zbyt wielu zer. Można natomiast tak je zakodować, by spełniały narzucone warunki. W najbardziej rozpowszechnionym wariancie systemu RLL liczba zer zawiera się w przedziale od 2 do 7. Stąd wywodzi się też nazwa systemu - RLL(2,7). Wejściowy strumień danych poddawany jest więc wstępnie takiemu przekodowaniu, które gwarantuje spełnienie tego wymogu - tablica przekodowań została zmieszczona w tabeli 7.1. Tabela 7.1. Tablica przekodowań systemu RLL(2,7) Dane wejściowe; Dane wyjściowe; 000; 000100; 10; 0100; 010; 100100; 0010; 00100100; 11; 1000; 011; 001000; 0011; 00001000; Czytelnik zechce sprawdzić, że przedstawiona tablica istotnie spełnia założenia systemu. Dowolne kojarzenie łańcuchów wyjściowych nie może dać ciągu zawierającego więcej niż 7 lub mniej niż 2 następujące po sobie zera. Nasz przykładowy bajt danych 00101110 zostaje rozłożony na elementy (0010)+(11)+ (10), a tym z kolei przyporządkowuje się odpowiednie łańcuchy z prawej kolumny tablicy. Otrzymujemy ciąg 0010010010000100, reprezentowany na rysunku 7.1 przez przebieg (5). Na nośniku magnetycznym utrwalone zostaną (7) jedynie cztery ustawione bity tego ciągu, co wywoła namagnesowanie powierzchni zgodnie z przebiegiem (8). Nietrudno zauważyć, że stosowana tablica kodowa wydłuża ciąg wejściowy o 100%. Dokładna analiza matematyczna systemu RLL(2,7) dowodzi, że opisane powyżej pomijanie składowej Z prowadzi średnio do trzykrotnej redukcji liczby przemagnesowań nośnika. Efektywna przewaga RLL(2,7) nad MFM wyraża się więc współczynnikiem 1,5. Te dodatkowe 50% jest zyskiem, który owocuje wzrostem pojemności dysku bez konieczności poprawy parametrów głowic lub warstwy magnetycznej. Ponieważ jednak nic nie ma za darmo, płaconą za to cenąjest znaczna komplikacja układów kontrolera. Stosunkowo rzadko spotykane są pokrewne warianty systemu RLL(2,7) ukrywające się pod wspólną nazwą ARLL (Advanced RLL). Do grupy tej należą przykładowo systemy RLL(1,7) i RLL(3,9). Pozwalają one na blisko 90% (jedna zmiana namagnesowania koduje średnio 2 bity danych!) wzrost wydajności w stosunku do metody MFM, ale nakładają dużo ostrzejsze wymagania na precyzję wykonania mechaniki napędu oraz stabilną pracę układów elektronicznych kontrolera. Fizyczna organizacja danych i formatowanie Fizyczna organizacja danych zapisanych na ścieżce dysku twardego jest analogiczna jak dla dyskietki. Główna różnica polega na tym, że w obudowie dysku znajduje się nie jeden, lecz kilka talerzy powleczonych warstwą nośnika magnetycznego i obsługiwanych przez odpowiednie zespoły głowic, poruszane jednym mechanizmem. Z tego też względu w przypadku dysków twardych nie mówi się o pojedynczych ścieżkach, lecz tzw. cylindrach, w skład których wchodzą ścieżki o tym samym numerze położone na kolejnych talerzach pakietu. Logika podziału ścieżek na sektory została oczywiście zachowana. Dodatkowo, ponieważ prędkość obrotowa dysku twardego jest znacznie większa niż dyskietki (od 3 do 7 tysięcy obrotów na minutę), ilość informacji odczytywanych przez głowice może przekroczyć przepustowość kontrolera (miało to miejsce głównie dla starszych kontrolerów MFM). Z tego względu odczyt danych z dysku realizowany jest z tzw. przeplotem (ang. interleave], który polega na niesekwencyjnym odczycie kolejnych sektorów. Ważnym parametrem charakteryzującym zespół dysk-kontroler jest tzw. współczynnik przeplotu (interleave factor, I LV) określający, co który sektor jest odczytywany podczas obrotu dysku. Przykładowo, dla współczynnika przeplotu równego 1:3 (patrz rysunek 7.2) odczytywane są sektory 1, 4, 7,..., 2, 5, 8,... itd. Technika ta daje kontrolerowi czas na przetworzenie odczytanego sektora, ale jednocześnie znacznie spowalnia proces odczytywania informacji. Z tego też względu dla starszych kontrolerów MFM bardzo istotne było dobranie właściwego współczynnika przeplotu, objawiające się na zewnątrz osiągnięciem maksymalnej przepustowości zespołu dysk-kontroler. Obecnie stosowane kontrolery (głównie IDE) są na tyle szybkie, że pozwalają na pracę z przeplotem l :1, tj. odczytuj ą sektory po kolei. Formatowanie wysokiego poziomu Tzw. formatowania wysokiego poziomu (ang. high level format) dokonuje wchodzący w skład systemu operacyjnego MS-DOS program fonnat.com. W przeciwieństwie do dyskietek, polecenie format odnoszące się do dysku twardego nie nanosi na jego powierzchnię ścieżek ani sektorów. Program fonnat.com buduje jedynie logiczną strukturę partycji. Partycją nazywamy wyodrębniony logicznie obszar dysku twardego, na który składa się pewna liczba przyległych do siebie cylindrów. Obszar taki może być administrowany tak, jak oddzielny, logiczny napęd dyskowy. Każdy taki napęd logiczny (w systemie DOS identyfikowany literą - C, D, E itd.) należy poddać właśnie operacji fonnatowania wysokiego poziomu, w trakcie którego program format zapisuje w obszarze partycji sektor ładujący (boot sector}, tablicę alokacji (FAT) i katalog główny. Wszystkie pozycje tablicy FAT inicjalizowane są wartością zero, co oznacza, że cała partycja jest wolna. Położenie partycji na dysku fizycznym określone jest jednoznacznie przez podanie jej cylindra początkowego oraz liczby cylindrów, na które się rozciąga. Tego rodzaju dane, obejmujące wszystkie zadeklarowane parrycje, przechowywane są w tablicy partycji (ang. partition table). Program format.com korzysta z tej tablicy, ale nie tworzy jej ani nie modyfikuje. Musi ona być zapisana na dysku przed przystąpieniem do formatowania wysokiego poziomu. Tablicę partycji generuje np. program fdisk.com. Proszę zwrócić uwagę na fakt, że powtórne formatowanie dysku twardego (celowe lub niezamierzone) nie niszczy zapisanej na nim infonnacji, a jedynie jej logiczną strukturę. Nie oznacza to bynajmniej, że odzyskanie danych jest sprawą banalną, szczególnie gdy były one rozproszone na całym dysku. Niszczona jest informacja o strukturze danych zawarta w FAT, dlatego przechowywanie „rezerwowej" kopii FAT w dodatkowym miejscu dysku pozwala odzyskać dane po formatowaniu. (System przechowuje w partycji dwie kopie tablicy FAT, co pozwala na wykrywanie ewentualnych błędów alokacji, nie umożliwia natomiast odzyskania danych po formatowaniu wysokiego poziomu. Do utworzenia kopii bezpieczeństwa obszaru zawierające dane systemowe (FAT, sektor ładujący, katalog główny) należy użyć specjalnego programu, na przykład mirror.com lub Norton DiskTool.). Formatowanie niskiego poziomu Operacja nanoszenia na powierzchnię dysku ścieżek, sektorów i wszystkich innych pól dodatkowych nazywana jest fonnatowaniem niskiego poziomu (ang. low level format}, inicjalizacją lub prefonnatowaniem. Zdecydowana większość produkowanych obecnie napędów poddawana jest tej operacji jeszcze u producenta i nie należy jej powtarzać. Kategoryczny zakaz formatowania niskiego poziomu obowiązuje w stosunku do dysków IDE (AT-BUS), których kontrolery, zgodne na poziomie rejestrów z systemem ST412/ 506 bardzo łatwo się tej operacji poddają. Przy dużej dozie szczęścia tak „potrakto- wany" dysk będzie jeszcze funkcjonował, często pozornie bezbłędnie. Jeżeli przy okazji formatowania niskiego poziomu została zniszczona jedna z tablic odwzorowania uszkodzonych sektorów (ang. bad sector mapping), wcześniej czy później da to o sobie znać. Najczęściej jednak dostępu do takiego dysku odmawia nawet program fdisk. Z góry skazane na niepowodzenie są również próby „poprawy" współczynnika przeplotu (ang. interleave), bowiem bez względu na to, co meldują programy diagnostyczne (a są na nieszczęście i takie, które dla dysków AT-BUS nie odmawiają działania), współczynnik przeplotu dysków IDE z reguły wynosi 1:1. Przyjmijmy więc, że struktura ścieżek i sektorów znajduje się już na dysku, a my możemy się jej co najwyżej przyjrzeć. Na rysunku 7.3 przedstawiona jest budowa jednej ścieżki dysku twardego systemu ST412/506. W zależności od systemu kodowania (MFM lub RLL) zmieniają się zawartości niektórych pól, ale ich ogólny układ pozostaje ten sam. Z porównania rysunków 6.2 i 7.3 wynika, że ścieżka dysku twardego zbudowana jest podobnie do ścieżki dyskietki. Uwagę zwraca jedynie kilka szczegółów. Znacznemu zmniejszeniu uległy rozmiary odstępów (szczelin) między elementami ścieżki (sektorami i znacznikami EOT i BOT). Szczeliny te miały za zadanie kompensację wahań prędkości obrotowej dyskietki. Redukcja ich wielkości stała się możliwa dzięki lepszej stabilizacji prędkości wirowania dysku, co z kolei ma swoje „uzasadnienie" w elektronicznej regulacji obrotów silnika oraz braku tarcia między głowicami a powierzchnią nośnika magnetycznego. Kolejną różnicę widać wyraźnie w czwartym bajcie metryki adresowej ID, oznaczonym przez Z. Stanowi on tzw. znacznik sektora, a jego rola omówiona zostanie w następnym punkcie tego rozdziału. Błędy i ich korekcja Fizycznym nośnikiem informacji w dysku twardym jest, zespół koncentrycznie osadzonych krążków (płyt) pokrytych warstwą magnetyczną. Pomimo wyrafinowanej technologii produkcji tej części napędu, do dnia dzisiejszego nie jest możliwe uzyskanie absolutnie idealnych właściwości magnetycznych materiału pokrycia. Już mikroskopijnej wielkości defekt niszczy jeden bit informacji, co z kolei eliminuje cały sektor. Tabela 7.2. Organizacja danych na ścieżce dysku twardego Pole; System MFM; System RLL; S (BOT); 10 bajtów o wartości 00h; 11 bajtów o wartości 00h; D1; AlFCh; AlFCh; Z1ł; 11 bajtów o wartości 4Eh; 12 bajtów o wartości FFh; D2; 7 bajtów o wartości 4Eh; -; S; ] 0 bajtów o wartości 00h; 10 bajtów o wartości 00h; D3; AlFEh; 5EAlh; ID; C:G:N:Z*; C:G:N:Z*; ECC-1; 4 bajty kodu ECC; 4 bajty kodu ECC; Z2; 5 bajtów o wartości 00h; 5 bajtów o wartości 00h; S; 10 bajtów o wartości 00h; 11 bajtów o wartości 00h; D4; AlFSh; 5EAlh; Dane; 512 bajtów; 512 bajtów; ECC-2; 4 bajty kodu ECC; 4 bajty kodu ECC; Z3; 15 bajtów o wartości 00h; 3 bajty o wartości 00h + 17 bajtów o wartości FFh; Z4; ok. 56 bajtów o wartości00h; ok. 93 bajty o wartości 00h; * - Symbol C:G:N:Z oznacza zakodowaną w polu ID metrykę adresową sektora w postaci numer; cylindra-numer głowicy-numer sektora-znacznik sektora. Dyski twarde, przechodząc kolejne etapy produkcji, poddawane są długotrwałym próbom mającym na celu wykrycie wszystkich takich miejsc na powierzchni. Dla każdego dysku sporządzana jest lista błędów, której pozycje, określające jednoznacznie uszkodzone sektory, definiują dla każdego z nich numer cylindra, głowicy i sektora. Lista taka dołączana jest często do napędu w formie oddzielnego arkusza lub naklejki na obudowie. Nawet gdy liczba pozycji na niej przekracza kilkadziesiąt, nie stanowi to powodu do rozpaczy, gdyż jest to „ryzyko wkalkulowane", a problem rozwiązywany jest elegancko przez tzw. system odwzorowania uszkodzonych sektorów (ang. bad sector mapping). Uważny czytelnik zwrócił zapewne uwagę, że czterobajtowe pole ID metryki adresowej sektora dysku twardego (zobacz rysunek 7.3) ma nieco inną budowę niż jego dyskietkowy odpowiednik (porównaj rysunek 6.2). Główna różnica tkwi w ostatnim bajcie, który w przypadku dysku twardego nie podaje wielkości sektora, lecz stanowi jego znacznik. Postać znacznika sektora Z (bajt 4 metryki adresowej ID): bit 7; Bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; Objaśnienia odnoszą się do sytuacji, w której dany bit jest ustawiony. bity 7-4-Zarezerwowane. bit 3- Oznacza ścieżkę zastępczą. bit 2- Metryka adresowa wskazuje na ścieżkę zastępczą. bit l-Ścieżka uszkodzona bez przydziału ścieżki zastępczej. bit 0-Sektor uszkodzony. Tak więc ustawienie bitu O znacznika sygnalizuje uszkodzenie danego sektora. Jeżeli uszkodzona jest cała ścieżka, a kontroler nie był w stanie przydzielić dla niej „zastępstwa", ustawiany jest bit 1. Odpowiednio duża przestrzeń rezerwowa dysku pozwala kontrolerowi zastąpić całą uszkodzoną ścieżkę. Sektory uszkodzonej ścieżki mają wtedy ustawiony bit 2 znacznika, a pierwsze trzy bajty pola ID wskazują nie na ścieżkę aktualną, lecz na zapasową. Ścieżka uznana za zastępczą posiada ustawiony bit 3 znacznika. Mechanizm odwzorowania uszkodzonych sektorów opiera się na dwóch tablicach przechowywanych na dysku. Pierwszą z nich jest lista błędów wykrytych podczas testowania powierzchni magnetycznej jeszcze u producenta. Umieszczona jest ona zwykle na ścieżce zerowej i może zawierać maksymalnie 101 pozycji. Poszczególne pozycje lokalizują uszkodzone miejsce przez podanie numeru cylindra, głowicy i liczby bajtów zawartych między znacznikiem D3 na początku ścieżki a miejscem uszkodzenia. Drugą listę tworzy sam kontroler dysku podczas operacji formatowania (automatycznie lub na życzenie wyrażone odpowiednim rozkazem - aktualizacja listy). Lista ta nosi nazwę listy znanych błędów (ang. Grown Error List). Pozycje na tej liście, w przeciwieństwie do listy błędów ustalonej przez producenta, oznaczają uszkodzone miejsca poprzez podanie sekwencji cylinder-głowica-numer sektora. W oparciu o przedstawione listy kontroler ma możliwość optymalnego zagospodarowania powierzchni dysku. Niesprawne sektory i ścieżki są logicznie przesuwane lub zastępowane innymi tak, że dysk „na zewnątrz" prezentuje się nienagannie mimo wielu uszkodzeń. Zjawiska tego nie należy traktować jako wady dysku. Jeżeli dana ścieżka posiada tylko jeden zły sektor, kontroler może w trakcie operacji formatowania tak przesunąć wszystkie sektory, że uszkodzenie trafi w niewykorzystywaną część ścieżki. Operacja ta określana jest często mianem sector-slipping; jeśli może być przeprowadzona, nie powstaje ubytek pojemności dysku. Wykluczenie uszkodzonego sektora przez oznaczenie go jako zły stanowi nieco gorszą alternatywę, gdyż zmniejsza pojemność dysku. Niektóre kontrolery „profilaktycznie" formatują w tym celu na każdej ze ścieżek o jeden sektor więcej (zwykle 18 zamiast 17 lub 27 zamiast 26). Dodatkowe sektory nie są w normalnych warunkach wykorzystywane i oczekują w rezerwie. Pozwala to na eliminację pojedynczych sektorów ścieżki bez utraty pojemności. Widzimy więc, że niewielkie błędy mogą być stosunkowo łatwo likwidowane przez kontroler. Uszkodzenia obejmujące więcej niż jeden sektor nie mogą być skompensowane w ramach tej samej ścieżki. Kontroler oznacza w takim przypadku całą ścieżkę jako uszkodzoną, a jako zastępczą wyznacza najwyższą z pozostałych dostępnych ście-żek. Jej metryki adresowe (cylinder-głowica-sektor-znacznik) odkładane są we wszystkich polach ID ścieżki uszkodzonej, przy czym ustawiony zostaje bit 2 znacznika. Z kolei w znacznikach sektorów ścieżki rezerwowej ustawiony zostaje bit 3. Ścieżka taka, adresowana swymi własnymi parametrami, przestaje być dostępna dla normalnych operacji. Każda próba dostępu do sektorów uszkodzonej ścieżki kierowana jest przez kontroler do ścieżki rezerwowej. Praktycznie oznacza to dodatkowy manewr najazdu (pozycjonowania) głowic. Przydział ścieżki zapasowej powoduje wprawdzie zmniejszenie pojemności dysku, ale pozostawienie uszkodzonej ścieżki bez przydzielenia „zastępstwa" jest jeszcze gorsze, oznacza bowiem przerwanie ciągłości w przestrzeni adresowej sektorów. Zarządzanie takim obszarem jest dla kontrolera zadaniem dużo trudniejszym i sprawność dysku obniża się. Na szczęście obecny poziom technologii pozwala na minimalizację liczby uszkodzeń powierzchni dysków do tego stopnia, że na skorygowanie wszystkich błędów pozwala w zasadzie sama technika sector-slipping. Kontrolery realizujące opisany powyżej mechanizm odwzorowania uszkodzonych sektorów rezerwują zwykle dla swoich celów pierwszy cylinder fizyczny dysku i przydzielają mu numer ujemny (-1). Daje to gwarancję, że dostęp do tego cylindra może mieć wyłącznie kontroler, żaden rozkaz nie może bowiem zaadresować sektora położonego na ujemnym cylindrze. W tak zabezpieczonych sektorach kontroler przechowuje wykorzystywane listy błędów oraz dokładny opis rzeczywistej geometrii dysku (dla bezpieczeństwa - w kilku kopiach). Oprócz uszkodzeń powierzchni w dobrze znanych kontrolerowi miejscach występują sporadycznie również inne problemy. Na skutek niezmiernie wysokiej gęstości zapisu danych na dyskach twardych pojawiać się mogą często błędy pozycjonowania lub odczytu. Istnieje kilka znanych źródeł tego rodzaju błędów. Najbardziej drastycznym przykładem jest zetknięcie się głowic z powierzchnią magnetyczną (ang. head crush). W normalnych warunkach pracy głowice utrzymywane są w odległości około 0,0003 mm od powierzchni nośnika. Dla porównania, średnica włosa ludzkiego wynosi w przybliżeniu 0,01 mm, a więc 30 razy więcej! Mikroskopijnej wielkości drobiny pyłów lub też raptowny wstrząs mogą więc łatwo doprowadzić do kolizji, w wyniku której zniszczony zostanie fragment powierzchni magnetycznej (jeśli nie sama głowica). Znany jest też powszechnie efekt stopniowego zaniku namagnesowania sektorów poddawanych wyłącznie odczytowi. Najbardziej klasycznym tego przykładem jest sektor ładujący, dla którego już po kilku latach mogą wystąpić pojedyncze błędy odczytu. W początkowej fazie powstawania takich błędów procedury korekcji są w stanie jeszcze je wyeliminować, ale pewnego (niekoniecznie pięknego) dnia sektor przestaje być czytelny. Istnieją oczywiście specjalne programy rozpoznające takie słabe punkty dysku i odświeżające zawartość zagrożonych sektorów. Najczęstszym źródłem błędów są oczywiście niedokładności pozycjonowania głowic nad żądaną ścieżką, szczególnie często spotykane wśród dysków wyposażonych w mechanizm przesuwu sterowany silnikiem krokowym. Realizując dostęp do określonego sektora kontroler musi ustawić głowice nad cylindrem, do którego przynależy ścieżka zawierająca ten sektor. Liczba niezbędnych kroków mechanizmu przesuwu obliczana jest na podstawie odległości żądanego cylindra od pozycji bieżącej. Jeżeli zapis w polu ID dowolnego sektora po osiągnięciu celu wskazuje mimo wszystko na inny cylinder, mamy do czynienia właśnie z błędem pozycjonowania. Ewentualny błąd w polu danych sektora wykrywany jest natychmiast dzięki obecności kodów ECC. Nie oznacza to jednak, że kontroler od razu daje za wygraną. W zależności od szczegółowych rozwiązań zawartych w pamięci stałej mikroprocesora kontrolera możliwych jest ponad 30 różnych prób odczytu, zanim systemowi operacyjnemu przekazany zostanie meldunek o niemożności dostępu do sektora. Ogólny algorytm postępowania wygląda zwykle następująco: • Krok pierwszy: podejmowana jest ośmiokrotnie próba odczytu sektora bez korzystania z korekcyjnych właściwości kodu ECC. Ta prosta strategia może być uwieńczona sukcesem, jeżeli przyczyną błędu było chwilowe rozsynchronizowa-nie spowodowane zachwianiem prędkości obrotowej dysku. • Krok drugi: następuje wymuszenie przejazdu głowicy nad powierzchnią dysku; składają się nań polecenia powrotu nad ścieżkę zerową, a stamtąd na koniec obszaru danych i ponownie do punktu wyjścia. Manewr taki likwiduje ewentualne przesunięcie fazy mechanizmu pozycjonowania, który nie lokuje głowic w środkowej części ścieżek, lecz na ich krawędzi, gdzie odczytywany sygnał może być zbyt słaby. • Krok trzeci: podejmowana jest próba odczytu sektora z wykorzystaniem samo-korygujących właściwości kodu ECC. • Krok czwarty: kontroler wykonuje próby odczytu sektora z celowo wprowadzonym przesunięciem fazy danych i zegara. Kontroler sprawdza kolejno następujące przesunięcia: +1,5%, +6%, +7,5%, -1,5%, -6%, -7,5%. Tego typu postępowanie likwiduje ewentualne przesunięcia bitów powstałe na skutek braku tzw. prekompensacji przy zapisie. • Krok piąty: mechanizm pozycjonowania głowic przechodzi do pracy w trybie mi-krokrokowym. Kontroler realizuje osiem kolejnych prób odczytu, podczas których głowice przesuwane są kolejno o jeden mikrokrok w poprzek szerokości ścieżki. Korekcyjne właściwości kodu ECC nie są brane pod uwagę. W ten sposób mogą być zlikwidowane błędy wywołane zmianą wymiarów powierzchni dysku pod wpływem różnicy temperatur w stosunku do momentu formatowania. • Krok szósty: kontroler realizuje osiem kolejnych prób odczytu z wykorzystaniem strategii inikrokroków, a odczyt odbywa się z udziałem kodów ECC. Realizacja powyższego algorytmu jest naturalnie przerywana, jeśli tylko uda się odczytać dane z sektora. Metodyka korekcji błędów pozycjonowania nie jest aż tak rozbudowana, jak w powyższym opisie. Proszę zauważyć, że błędem pozycjonowania w rozumieniu kontrolera może być zarówno brak pod głowicą jakiejkolwiek metryki adresowej, jak i odczytanie metryki niezgodnej z oczekiwaną. W pierwszym przypadku przyczyną jest przeważnie ustawienie głowic w położeniu międzyścieżkowym, które likwiduje pojedyncza kalibracja napędu. W drugim przypadku kontroler przeprowadza zwykle kilkakrotną kalibrację i ponawia próbę odczytu. Kontrolery dysków realizujące technikę odwzorowania uszkodzonych sektorów kierują się często swoimi własnymi regułami i może się zdarzyć, że po kolejnej nieudanej próbie najazdu ścieżka zostanie oznaczona jako zła. Przydział ścieżki zastępczej odbywa się wówczas w opisany wcześniej sposób. Standard AT-BUS Architektura pierwszych komputerów PC łączyła dysk twardy z resztą systemu przy pomocy magistrali ST412/506. Dziś trudno było by znaleźć zarówno taki komputer jak i dysk ze złączem w tym standardzie. ST412/506 został wyparty przez nowy model określany mianem AT-BUS, IDE lub ATA. Symbol IDE (Intelligent Drive Electronics) ma podkreślać fakt, iż napędy dysków jako takie zdolne są do samodzielnych (inteligentnych) działań i nie wymagają oddzielnych kontrolerów (tak jak to miało miejsce w przypadku ST412/506). Często spotykane jest również tłumaczenie tego skrótu jako Integrated Device Electronics. Ta wersja tłumaczenia kładzie nacisk na inną charakterystyczną cechę nowego standardu: zintegrowanie układów kontrolera i mechanizmów napędu w jednej obudowie. Elektronika montowana w dyskach starszych generacji miała za zadanie wyłącznie sterowanie pracą części ruchomych i obróbkę sygnałów zapisu i odczytu dla głowic magnetycznych. Stąd jeszcze daleka droga do przeprowadzenia kompletnej operacji odczytania określonego sektora. Czynności pozycjonowania głowic nad określoną ścieżką, odszukania metryki sektora, zdekodowania sygnału, oddzielenia danych od zegara i wreszcie przesłanie bloku danych do pamięci (że przemilczę całą strategię kontroli i korekcji błędów) wykonywał dotychczas układ kontrolera dysku twardego umieszczany na oddzielnej karcie. Konieczność przesyłania przewodem łączącym kontroler-dysk również zakodowanych danych zwiększała podatność na zakłócenia i ograniczała prędkość transmisji. Skrót ATA (ATAttachmenf), chociaż oznacza w gruncie rzeczy to samo co IDE pojawił się nieco później i stanowi określenie używane przez zespoły normalizacyjne pracujące nad standardem IDE w jego kolejnych wersjach. Jedno i drugie określenie odnosi się do implementacji tej samej magistrali połączeniowej. Bliższe informacje na ten temat znajdzie czytelnik w dalszej części tej książki przy omawianiu rozszerzeń standardu IDE. Stale powstające nowe modele dysków o różnorodnych geometriach (ilość głowic, cylindrów, sektorów itd.) nie mogły być jednocześnie obsługiwane przez ten sam w gruncie rzeczy kontroler. Drastyczny spadek cen układów elektronicznych doprowadził wreszcie do sytuacji, że opłacalnym stało się wyposażanie każdego dysku twardego we własny, ściśle do niego dopasowany kontroler. Efektem ubocznym jest naturalnie skrócenie drogi wszystkich sygnałów. Parametry pierwszych dysków ze złączem IDE mieściły się gdzieś pomiędzy ST412/506 a SCSI i ESDI. Przez krótki czas na rynku były obecne modele z wszystkimi czterema interfejsami. W chwili obecnej nie ma innej alternatywy: albo IDE albo SCSI. Ceny napędów IDE/AT kształtują się do dnia dzisiejszego na poziomie leżącym lekko poniżej grupy z interfejsem SCSI. Do tego należy doliczyć wyższy koszt systemu SCSI powiększony o koszt kontrolera i często droższego od IDE okablowania. Wspólna dla dysków wszelkich rodzajów pozostała na szczęście jedna pozytywna cecha: stały spadek cen. Różnorodność modeli oferowanych przez kilku znaczących producentów pozwala zaspokoić wszelkie gusty. Logiczny opis złącza AT-BUS jako złącze jest strukturą logiczną. Standard IDE wywodzi się od ST412/506 i w pełni odwzorowuje jego rejestry sterujące. Akceptowane są więc wszelkie polecenia wysokiego poziomu typu formatuj ścieżkę lub pisz sektor. To, co w systemach ST412/506 i ESDI określane było mianem złącza, tj. fizyczne połączenie kontrolera i napędu wraz z określeniem znaczenia poszczególnych linii, tutaj nie istnieje z logicznego punktu widzenia. Praktycznie każdy model dysku IDE ma inne parametry, do których dostosowany jest inny kontroler i nie może być mowy o jakimkolwiek standardzie na tym odcinku. Dysk IDE komunikuje się z szynami systemowymi za pośrednictwem sterownika określanego często mianem Host-Adapter. W początkowym okresie wprowadzania standardu IDE sterownik ten stanowił dodatkową kartę I/O (ISA), na. której integrowane były również złącza szeregowe i równoległe oraz kontroler FDD. Sam Host-Adapter to prosty zestaw bramek logicznych realizujących jedynie funkcje dekodowania adresu i buforowania sygnałów szyn. Rysunek 7.5 przedstawia wykorzystanie sygnałów szyn systemowych do sterowania dysku AT-BUS. Wszystkie płyty główne aktualnej generacji wyposażone są już w ten układ. Stanowi on de facto jedno z urządzeń PCI (PCI to (E)IDE Bridge). Jedyne co należy wtedy zrobić, to połączyć 40-żyłowym przewodem dysk twardy z odpowiednim gniazdem na płycie. W przypadkach gdy jest to z jakichś względów niezbędne, stosuje się Host-Adapter w formie karty rozszerzającej ISA lub PCI. Pierwotny standard IDE dopuszczał obsługę jedynie dwóch dysków twardych. Jeden z nich musiał być wtedy oznaczony jako Master, a drugi jako Slave. Ustaleń tych dokonuje się za pomocą zwór konfiguracyjnych zlokalizowanych na dyskach. To co spotykamy w komputerach obecnie to już rozszerzenie standardu (EIDE). Dozwolona jest większą liczbę urządzeń, które niekoniecznie muszą być wyłącznie dyskami twardymi. Omówieniu systemu EIDE znajdzie czytelnik w jednym z następnych punktów. Złącze fizyczne Połączenie kontrolera IDE z dyskami odbywa się 40-żyłowym płaskim przewodem. Wyjątek stanowią stosowane w komputerach przenośnych dyski 2,5" i 1,8", które są połączone przewodem 50-żyłowym. Kabel połączeniowy posiada trzy wtyki: jeden dla kontrolera i po jednym dla urządzeń Master i Slave. Żadne z przewodów nie są skrzyżowane a fizyczna kolejność urządzeń na magistrali nie odgrywa roli. Położenie poszczególnych końcówek i w złączu zostało pokazane na rysunku 7.6, a ich znaczenie przedstawia tabela 7.3. Tabela 7.3. Znaczenie linii magistrali IDE Nr linii; Sygnał IDE; Znaczenie; Sygnał magistrali zewn.; 1; -Reset; Sprowadzenie do stanu początkowego; RESET DRV 2; GND;Masa;-; 3; DD7; Dwukierunkowa linia danych, bit 7; SD7; 4; DD8; Dwukierunkowa linia danych, bit 8; SD8; 5; DD6; Dwukierunkowa linia danych, bit 6; SD6; 6; DD9; Dwukierunkowa linia danych, bit 9; SD9; 7; DD5; Dwukierunkowa linia danych, bit 5; SD5; 8; DD4; Dwukierunkowa linia danych, bit 4; SD4; 10; DD11; Dwukierunkowa linia danych, bit 11; SD11; 11; DD3; Dwukierunkowa linia danych, bit 3; SD3; 12; DD12; Dwukierunkowa linia danych, bit 12; SD12; 13; DD2; Dwukierunkowa linia danych, bit 2; SD2; 14; DD13; Dwukierunkowa linia danych, bit 13; SD13; 15; DD1; Dwukierunkowa linia danych, bit 1; SD1; 16; DD14; Dwukierunkowa linia danych, bit 14; SD14; 17; DDO; Dwukierunkowa linia danych, bit 0; SDO; 18; DD15; Dwukierunkowa linia danych, bit 15; SD15; Tabela 7.3. Znaczenie linii magistrali IDE Nr linii; Sygnał IDE; Znaczenie; Sygnał magistrali zewn.; 1; -Reset; Sprowadzenie do stanu początkowego; RESET DRV 2; GND;Masa;-; 3; DD7; Dwukierunkowa linia danych, bit 7; SD7; 4; DD8; Dwukierunkowa linia danych, bit 8; SD8; 5; DD6; Dwukierunkowa linia danych, bit 6; SD6; 6; DD9; Dwukierunkowa linia danych, bit 9; SD9; 7; DD5; Dwukierunkowa linia danych, bit 5; SD5; 8; DD4; Dwukierunkowa linia danych, bit 4; SD4; 10; DD11; Dwukierunkowa linia danych, bit 11; SD11; 11; DD3; Dwukierunkowa linia danych, bit 3; SD3; 12; DD12; Dwukierunkowa linia danych, bit 12; SD12; 13; DD2; Dwukierunkowa linia danych, bit 2; SD2; 14; DD13; Dwukierunkowa linia danych, bit 13; SD13; 15; DD1; Dwukierunkowa linia danych, bit 1; SD1; 16; DD14; Dwukierunkowa linia danych, bit 14; SD14; 17; DDO; Dwukierunkowa linia danych, bit 0; SDO; 18; DD15; Dwukierunkowa linia danych, bit 15; SD15; 19; GND; Masa;- 20; x; Znacznik blokady wtyku; - 21*; DMARQ; Żądanie obsługi DMA; DRQn 22; GND; Masa; - 23; -DIOW; Zapis do wej/wyj; IOW 24; GND; Masa; - 25; -DIOR; Odczyt z wej/wyj; 1OR 26; GND; Masa; - 27*; IORDY; Zakończono dostęp do wej/wyj; IO CH RDY 28*; SPSYNC (CSEL); Synchronizacja obrotów dysków; - 29*; -DMACK; Potwierdzenie przydziału kanału DMA; DACKn 30; GND; Masa; - 31; INTRQ; Żądanie przerwania; IRQn 32; IOCS16; Możliwość dostępu 16-b. do wej/wyj; I/OCS 16 33; DA1; Linia adresowa „1;" SA1 34; ~PDIAG(~CBLID)**; Połączenie z napędem Słave; - 35; DAO; Linia adresowa „0"; SAO 36; DA2; Linia adresowa „2"; SA2 37; ~CSlFx; Wybór bazy rejestrów 1f0h; - 38; ~CS3Fx; Wybór bazy rejestrów 3f0h; - 39; -DASP; Połączenie z napędem Slave; - 40; GND; Masa; - 41; +5V (logie); Zasilanie układów logicznych; - 42; +5V (motor); Zasilanie silnika; - 43; GND; Masa; - 44; Type; (0- ATA); - A; M/S; Master/Slave jumper; - B; M/S; Master/Slave jumper; - C; M/S; Master/Slave jumper; - D; M/S; Master/Slave jumper; - * -Sygnały zdefiniowane jako opcjonalne w pierwotnej wersji specyfikacji ATA. **W obecnej wersji standardu EIDE końcówka ta służy do rozpoznawania typu kabla (40 lub 80 żył). Różnica pomiędzy złączem 40- a 50-żyłowym sprowadza się do tego. że przez dodatkowe styki 41.42 i 43 przekazywane jest zasilanie. Z kolei styki A. B, C i D są wykorzystywane jako przełączniki Master/Slave. Jak widać z powyższego zestawienia większość linii stanowi przedłużenie magistrali zewnętrznej PC. Zaślepiona końcówka 20 ma stanowić blokadę uniemożliwiającą omyłkowe odwrócenie wtyku. Host-Adapter wytwarza 5 sygnałów, które nie mają swoich odpowiedników w szynie systemowej: • Końcówka 37 (CS1 Fx). Sygnał selekcji grupy rejestrów o adresie bazowym 1F0h. • Końcówka 38 (CS3Fx). Sygnał selekcji grupy rejestrów o adresie bazowym 3F0h. • Końcówka 28 (SPSYNC/CSEL). Znaczenie tego sygnału zmieniało się wraz z kolejnymi wersjami opracowań komitetów normalizacyjnych. SPSYNC miał za zadanie synchronizację prędkości obrotowej dysków Master i Slave. Synchronizacja taka była niezbędna w specjalnych trybach pracy połączonych dysków (Mirro-ring), który stanowi dokładne (lustrzane) dublowanie każdej operacji dyskowej. System taki wykorzystywany jest w serwerach sieci lokalnych dla zwiększenia pewności ochrony danych ale raczej wśród urządzeń połączonych magistralą SCSI a nie IDE. Wiele napędów nigdy nie korzystało z tego trybu i końcówka SPSYNC pozostawała nie podłączona. W niektórych typach napędów końcówka 28 nosiła nazwę CSEL (Cable Select) i miała służyć do selekcji jednostek Master i Slave. Również i ten system nie zdobył większej popularności. • Końcówki 39 i 34 (DASP i -PDIAG). Obie linie służą wzajemnej komunikacji między Master i Slave, ale jedynie podczas inicjalizacji. Również te sygnały nie są niezbędnie konieczne i nie zawsze występują. Linia 34 (wtedy nosi nazwę -CBLID) służy w dzisiejszej wersji standardu EIDE do rozpoznania typu kabla (40 lub 80 żyłowy) w systemach Ultra DMA/66. Końcówka IORDY połączona jest w nowoczesnych (szybkich) napędach z plusem napięcia zasilania, co wymusza stały wysoki poziom logiczny. W przeciwnym razie sygnał ten służy sygnalizacji konieczności wprowadzenia opóźnień (Wait States}. Modele XT używały kanału DMA do wymiany danych z dyskiem twardym. Architektura AT stosuje na pozór bardziej archaiczną metodę opartą na pojedynczych operacjach odczytu portu danych do rejestru (instrukcją in) i stąd przesyłania ich do pamięci (instrukcją mov). Biorąc pod uwagę szybkość klasycznych układów DMA taktowanych zegarem 4,77 MHz, metoda ta przynosiła lepsze efekty. Późniejsze wersje PC-AT wyposażane były często w szybkie kontrolery DMA nowszej generacji. Ich zastosowanie było bardziej efektywne od powtarzanych cykli dostępu do portów I/O. W ślad za tym podążali producenci dysków twardych wypuszczając nowe modele współpracujące z kanałem DMA. Dyski takie robiły użytek z linii DMARQ i DMACK. Dostęp CPU do dysku AT-BUS CPU komunikuje się z kontrolerem dysku AT-BUS poprzez obszerny zestaw rejestrów CBR49. Rejestry CBR(Inna spotykana w literaturze nazwa to AT-Task-File.), podzielone są na dwie grupy: podstawową (Command Błock Registers} i dodatkową (Control Błock Registers). Adresy i znaczenia poszczególnych rejestrów odpowiadają w PC-AT (ale nie w XT!) w pełni systemowi ST412/ 506. Jest chyba oczywiste, że całkowicie odmienne systemy SCSI i ESDI posługują się swoimi własnymi rozwiązaniami. Omawiane rejestry skupiają się wokół adresów bazowych: podstawowy od IFOh i dodatkowy od 3F6h. Adres rejestru to adres bazowy plus adres DA. Procesor może osiągnąć każdy z nich programując stan linii adresowych DA#0-DA#2 oraz selekcyjnych CS#3fx, CS3fx. Kierunek transmisji (odczyt lub zapis do portu) wybierany jest poprzez aktywację linii -DIOR oraz -DIOW. Proszę zwrócić uwagę, iż pod tym samym adresem portu może się ukrywać inny rejestr przy odczycie a inny przy zapisie. Tryby dostępu do rejestrów CBR zebrane zostały w tabeli 7.4. Poniżej podany jest krótki opis znaczenia poszczególnych rejestrów grupy. Rejestr danych (IF0h) Jest to 16-bitowy dwukierunkowy port służący wymianie danych między CPU i kontrolerem AT-BUS. Należy zwrócić uwagę, że wyzerowany bit 3 rejestru stanu oznacza chwilowy brak dostępu do portu danych (zarówno do odczytu, jak i do zapisu). Rejestr błędów (IFlh) Rejestr ten może być wyłącznie odczytywany, a zawarte w nim dane stanowią informację o błędzie wykonania ostatniego rozkazu jeżeli ustawiony jest bit O rejestru stanu. W przeciwnym przypadku zawartość rejestru błędu jest nieokreślona. bit 7; bit 6; bit 5; 0; bit 3; 0; bit 1; bit 0; bit 7-l - nie znaleziono znacznika DAM (Data Address Mark) pomiędzy metryką ID a polem danych sektora. bit 6-l - nie znalezione ścieżki O (po rozkazie RECALIBRATE). bit 5-l - kontroler zaniechał wykonania rozkazu (np. nieznany kod rozkazu). bit 4-Równy 0 bit 3-l - nie znaleziono metryki ID sektora. . Tabela 7.4. Rejestry CBR standardu IDE CS#1Fx; CS#3Fx; DA# 2; DA#1, DA#0; Rejestry CBR; Adres; Przy odczycie (-DIOR)Przy zapisie (-DIOW); 0; 1; 0; 0; 0; Rejestr danych (Data Register) -Rejestr danych (Data Register);0x1F0h 0; 1; 0; 0; 1; Rejestr błędów (Error Register) - Rejestr prekompensacji (Features Register); 0xlFlh 0; 1; 0; 1; 0; Rejestr liczby sektorów (Sector Count Register) - Rejestr liczby sektorów (Sector Count Register); 0x1F2h 0; 1; 0; 1; 1; Rejestr numeru sektora lub bity 0-7 ŁBA (Sector Number Register) - Rejestr numeru sektora lub bity 0-7 ŁBA (Sector Number Register); 0x1F3h 0; 1; 1; 0; 0; Rejestr numeru cylindra LSB lub bity 8- 15 ŁBA (Cylinder Low Register) -Rejestr numeru cylindra LSB lub bity 8- 15 ŁBA (Cylinder Lo\v Register); 0x1F4h 0; 1; 1; 0; 1; Rejestr numeru cylindra MSB lub bity 16-23 ŁBA (Cylinder High Register) -Rejestr numeru cylindra MSB lub bity 16-23 ŁBA (Cylinder High Register); 0x1F5h 0; 1; 1; 1; 0; Rejestr napęd/głowica lub bity 24-27 ŁBA (Drive/Head Register) -Rejestr napęd/głowica lub bity 24-27 ŁBA (Drive/Head Register); 0x1 F6h 0; 1; 1; 1; 1; Rejestr stanu (Status Register)Rejestr rozkazów (Command Register); 0x1 F7h 1; 0; 1; 1; 0; Zastępczy rejestr stanu (Alternate Status Register) - Rejestr sterujący urządzenia (Device Control Register); 0x3 F6h 1; 0; 1; 1; 1; Rejestr adresu napędu (Drive Address Register) -Nie używany; 0x3F7h 1; 1; x; x; x; Magistrala w stanie wysokiej impedancji (Data Bus High) - Nie używany; -1; 0; 0; x; x; Magistrala w stanie wysokiej impedancji (Data Bus High) - Nie używany; -1; 0; 1; 0; x; Magistrala w stanie wysokiej impedancji (Data Bus High) - Nie używany; -0; 0;x; x; x; Stan zabroniony; - bit 2-Równy 0. bit l-Błąd danych niemożliwy do skorygowania przez kontroler (mimo zastosowania ECC). bit 0-1 próba zapisu do sektora oznaczonego jako zły (flaga w polu ID). Uwaga: Znaczenie pozycji bitowych tego rejestru po powrocie z rozkazu EXECUTE DIAGNO-STIC (oraz tuż po załączeniu napięć zasilających) jest odmienne. Rejestr błędu może wtedy przyjąć następujące wartości: Ol: brak błędów, 02: nie używany, 03: uszkodzony bufor pamięci RAM, 04: błąd układu kontrolera magistrali AT-BUS, 05: niesprawność pamięci ROM lub RAM mikrokontrolera, 8x: błąd jednostki dyskowej Slave. Rejestr prekompensacji (IFlh) Rejestr ten istnieje wyłącznie dla utrzymania zgodności AT-TASK-FILE z zestawem rejestrów sterujących systemu ST412/506. Wszystkie przekazywane do tego rejestru dane są ignorowane, bowiem kontroler reguluje kompensację we własnym zakresie bez udziału CPU. Rejestr liczby sektorów (lF2h) W rejestrze tym ustawiana jest liczba sektorów, która ma być objęta operacją zapisu, odczytu lub weryfikacji. W miarę wykonywania operacji, zawartość rejestru jest stale zmniejszana przez kontroler, tak że zawsze wskazywana jest liczba pozostałych sektorów. Uwaga l: Liczba O zapisana do tego rejestru oznacza 256 sektorów. Uwaga 2: Znaczenie tego rejestru w rozkazie ustawiania parametrów napędu jest inne. Rejestr numeru sektora (lF3h) CPU zapisuje tu numer pierwszego sektora, którego dotyczy rozkaz. Kontroler aktualizuje tę liczbę w miarę postępów w realizacji rozkazu. Odczyt rejestru dostarcza więc informacji o ostatnio opracowanym sektorze. Jeżeli bit 6 rejestru IFóh jest równy l, rejestr 1F3H zawiera składowe LBA0 - LBA7. Rejestry numeru cylindra - LSB, MSB (lF4h, 1F5H) Para rejestrów tworząca 10-bitową liczbę określającą numer cylindra. Wykorzystywane są wszystkie bity rejestru 1F4H oraz dwa najmłodsze bity rejestru 1F5H. Reszta bitów rejestru lF5h jest ignorowana. Dopuszczalne są więc cylindry o numerach z przedziału O - l 023. W rzeczywistości wiele napędów AT-BUS posiada więcej fizycznych cylindrów, ale układy kontrolera dokonują tzw. translacji tej liczby do właściwego przedziału kosztem wyimaginowanej modyfikacji liczby sektorów na ścieżkę i innej niż faktyczna liczby głowic. Zawartość tych rejestrów jest modyfikowana przez kontroler zgodnie z aktualnym położeniem głowic i może być odczytywana przez CPU. Jeżeli bit 6 rejestru IFóh jest równy l, rejestry lF4h i lF5h zawieraj ą składowe LBA8 - LBA23. Rejestr napęd/głowica (IFGh) Rejestr pozwala określić, do którego z napędów adresowany jest bieżący rozkaz. Bit 6 stanowi przełącznik trybów ŁBA/CHS. bit 7; bit 6; 1; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7-Równy 1. bit 6-Przełącznik trybu adresowania ŁBA/CHS: l - CHS, 0- ŁBA. bit 7-Równy 1. bit 7-Adres napędu: l - Slave, 0 - Master. bity 3-0-Kodowany binarnie numer głowicy (jeżeli bit 6 = 7): 0000 - głowica 0, 0001 - głowica l, ... ... 1111 - głowica 15. Jeżeli bit 6 rejestru lF6h jest równy l, bity 3-0 zawieraj ą składowe LBA#24 - LBA#27. Rejestr stanu (1F7H) Rejestr ten może być wyłącznie odczytywany i zawiera informacje o ostatnio wykonanym rozkazie. Kontroler wpisuje tu dane zaraz po zakończeniu rozkazu lub jeśli wystąpił błąd. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7-l - Sygnał zajętości (BSY, Busy); jak długo bit ten jest ustawiony, Host nie ma dostępu do żadnego z rejestrów grupy AT-Task-File. bit 6-l - Sygnał gotowości, dysk osiągnął właściwą prędkość obrotową (RDY, Ready). bit 5-l - Nienormalne zachowanie się dysku (np. hazard sygnałów na złączu IDE). bit 4-l - Zakończono pozycjonowanie głowic. bit 3-l - Możliwy dostęp do portu danych, dane gotowe do przekazania do Host. bit 2-l - Wystąpił błąd danych (możliwy do skorygowania kodem ECC), który został skorygowany. bit 1-l - Głowica czyta właśnie znacznik początku ścieżki (IDX, Index); trwa to ok. 300 ns. bit 0-l - Błąd, szczegóły w rejestrze błędów. Uwaga: Wszystkie bity tego rejestru z wyjątkiem bitu 7 oraz wszystkie inne rejestry grupy AT-Task-File zawierają nieokreślone dane jak długo ustawiony jest bit 7 tego rejestru, co oznacza, że kontroler zajęty jest wykonywaniem rozkazu. W stanie tym wolno jednak zapisywać rejestr sterujący 3F6h. Rejestr rozkazów (lF7h) CPU wpisuje do tego rejestru kod operacji (słowo rozkazowe). Lista standardowych rozkazów (zgodnych z ST412/506) obejmuje 8 pozycji. Standard IDE definiuje dodatkowe rozkazy, np. do obsługi funkcji oszczędnościowych. Kontroler przechodzi do realizacji polecenia natychmiast po zapisaniu tego rejestru, więc wszystkie inne parametry (rejestry) muszą być ustawione wcześniej. Tabela 7.5 prezentuje rozkazy systemu IDE wraz z wymaganymi przez nie parametrami. Rejestr stanu (1F7H) Rejestr ten może być wyłącznie odczytywany i zawiera informacje o ostatnio wykonanym rozkazie. Kontroler wpisuje tu dane zaraz po zakończeniu rozkazu lub jeśli wystąpił błąd. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; l - Sygnał zajętości (BSY, Busy); jak długo bit ten jest ustawiony, Host nie ma dostępu do żadnego z rejestrów grupy AT-Task-File. l - Sygnał gotowości, dysk osiągnął właściwą prędkość obrotową (RDY, Ready). l - Nienormalne zachowanie się dysku (np. hazard sygnałów na złączu IDE). l - Zakończono pozycjonowanie głowic. Rejestr numeru sektora (lF3h) CPU zapisuje tu numer pierwszego sektora, którego dotyczy rozkaz. Kontroler aktualizuje tę liczbę w miarę postępów w realizacji rozkazu. Odczyt rejestru dostarcza więc informacji o ostatnio opracowanym sektorze. Jeżeli bit 6 rejestru IFóh jest równy l, rejestr 1F3H zawiera składowe LBA0 - LBA7. Rejestry numeru cylindra - LSB, MSB (lF4h, 1F5H) Para rejestrów tworząca 10-bitową liczbę określającą numer cylindra. Wykorzystywane są wszystkie bity rejestru 1F4H oraz dwa najmłodsze bity rejestru 1F5H. Reszta bitów rejestru lF5h jest ignorowana. Dopuszczalne są więc cylindry o numerach z przedziału O - l 023. W rzeczywistości wiele napędów AT-BUS posiada więcej fizycznych cylindrów, ale układy kontrolera dokonują tzw. translacji tej liczby do właściwego przedziału kosztem wyimaginowanej modyfikacji liczby sektorów na ścieżkę i innej niż faktyczna liczby głowic. Zawartość tych rejestrów jest modyfikowana przez kontroler zgodnie z aktualnym położeniem głowic i może być odczytywana przez CPU. Jeżeli bit 6 rejestru IFóh jest równy l, rejestry lF4h i lF5h zawieraj ą składowe LBA8 - LBA23. Rejestr napęd/głowica (IFGh) Rejestr pozwala określić, do którego z napędów adresowany jest bieżący rozkaz. Bit 6 stanowi przełącznik trybów ŁBA/CHS. bit 7; bit 6; 1; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7-Równy 1. bit 6-Przełącznik trybu adresowania ŁBA/CHS: l - CHS, O- ŁBA. bit 7-Równy 1. bit 7-Adres napędu: l - Slave, O - Master. bity 3-0-Kodowany binarnie numer głowicy (jeżeli bit 6 = 7): 0000 - głowica O, 0001 - głowica l, ... ... 1111 - głowica 15. Jeżeli bit 6 rejestru lF6h jest równy l, bity 3-0 zawieraj ą składowe LBA#24 - LBA#27. bito bit 5 bit 4 bit 3 bit 2 bit l bitO Uwaga: Wszystkie bity tego rejestru z wyjątkiem bitu 7 oraz wszystkie inne rejestry grupy AT-Task-File zawierają nieokreślone dane jak długo ustawiony jest bit 7 tego rejestru, co oznacza, że kontroler zajęty jest wykonywaniem rozkazu. W stanie tym wolno jednak zapisywać rejestr sterujący 3F6h. l - l - l - Możliwy dostęp do portu danych, dane gotowe do przekazania do Host. Wystąpił błąd danych (możliwy do skorygowania kodem ECC), który został skorygowany. Głowica czyta właśnie znacznik początku ścieżki (IDX, Index); trwa to ok. 300 ns. l - Błąd, szczegóły w rejestrze błędów. Rejestr rozkazów (lF7h) CPU wpisuje do tego rejestru kod operacji (słowo rozkazowe). Lista standardowych rozkazów (zgodnych z ST412/506) obejmuje 8 pozycji. Standard IDE definiuje dodatkowe rozkazy, np. do obsługi funkcji oszczędnościowych. Kontroler przechodzi do realizacji polecenia natychmiast po zapisaniu tego rejestru, więc wszystkie inne parametry (rejestry) muszą być ustawione wcześniej. Tabela 7.5 prezentuje rozkazy systemu IDE wraz z wymaganymi przez nie parametrami. Tabela 7.5. Rozkazy systemu IDE Nazwa; Typ; Bity słowa rozkazowego:7, 6, 5, 4, 3, 2, 1; 0; Niezbędne parametry:FR 1Flh, SCR 1F2h SNR 1F3H, CYL 1F4h 1F5H, DHR 1F6h; NOP; puste; 0, 0, 0, 0, 0, 0, 0, 0; -, -, -, -, • Recalibrate; puste; 0, 0, 0, 1, x, x; x, x; -, -, -, -, DRV Read Sector; PIOR; 0 , 0, 1, 0, 0, 0, L, R; -, •, •, •, • Write Sector; PIOW; 0, 0, 1, 1, 0, 0, L, R; -, •, •, •, • Write Verify; PIOW; 0, 0, 1, 1, 1, 1, 0, 0; -, •, •, •,• Read Verify; PIOR; 0, 1, 0, 0, 0, 0, 0, R; -, •, •, ,• • Format Track; PIOW; 0, 1, 0, 1, 0, 0, 0, 0; -, •, -, •, • Seek; puste; 0, 1, 1, 1, x, x, x, x; -,-, •, •, • Execute Drive Diagnostic; puste; 1, 0, 0, 1, 0, 0, 0, 0; -, -, -, -, M/S Initialize Drive Parameters; puste; 1, 0, 0, 1,0, 0, 0, 1; -, •, -, -,• Read Multiple;PIOR; 1, 1, 0, 0, 0, 1, 0, 0; -, •, •, •, • Write Multiple;PIOW; 1, 1, 0, 0, 0, 1,0, 1; -, •, •, •, • Read DMA; DMA; 1, 1, 0,0, 1, 0, 0, R; -, •, •,•, • Write DMA; DMA; 1, 1, 0, 0, 1, 0, 1, R; -,, •, •, •, • Read Buffer; PIOR; 1, 1, 1, 0, 0, 1, 0,0; -, -, -, -, DRV Write Buffer; PIOW; 1, 1, 1, 0,1, 0, 0, 0; -, -, -, -,DRV Write Same; PIOW; 1, 1,1, 0, 1, 0, 0,1; •, •, •, •, • Identify Drive; PIOR; 1, 1, 1, 0, 1, I, 0, 0; -, -, -, -, DRV Set Features; puste; 1,1, 1, 0, 1, 1, 1, 1; •,-, -, -, DRV DMA - transfer danych kanałem DMA. PIoR - odczyt w trybie PIO. PIOW - zapis w trybie PIO. L O - odczytywane lub zapisywane są tylko dane. 1 - odczytywane lub zapisywane są dane + ECC (tak zwany długi rozkaz - Read Long, Write Long). R O - powtórki dozwolone (Retry Enable), l - powtórki zabronione (Rrtry Disable). x - stan bitu bez znaczenia (0/1). - - zawartość rejestru jest ignorowana. • - rejestr niezbędny jako parametr. DRV - w rejestrze DHR istotny jest jedynie numer dysku, reszta jest ignorowana. M/S - rozkaz jest wykonywany przez oba dyski połączone w układzie Master/ Slave niezależnie od adresu dysku ustawionego w SDH. Alternatywny rejestr stanu (3F6h) Rejestr ten zawiera informacje całkowicie zgodne ze stanem rejestru lF7h. Jedyna różnica polega na obsłudze przerwania IRQ14. Rejestr stanu (lF7h) spełnia dodatkową funkcję w komunikacji między kontrolerem i PC. Kontroler dysku wyzwala żądanie przerwania IRQ14 przykładowo po odczytaniu sektora. Sygnałem potwierdzenia przyjęcia tego przerwania przez CPU jest właśnie odczytanie rejestru stanu lF7h, co stanowi jednocześnie dla kontrolera polecenie anulowania tego zgłoszenia. Właściwości tych nie posiada alternatywny rejestr stanu. Jego odczytanie nie ma wpływu na żądanie obsługi IRQ. Rejestr sterujący (3F6h) bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; W rejestrze tym CPU może zapisywać dane precyzujące określone zachowanie kontrolera. bity 7-3-Zarezerwowane. bit 2-1 - Wymuszenie przejścia w stan Software-Reset, który będzie się utrzymywał aż do wyzerowania tego bitu przez CPU. bit l-IRQ14: O - aktywne, 1 - zablokowane (linia INTRQ na wysokim poziomie logicznym). bitO-Zarezerwowane. Ustawienie bitu 2 wprowadza podłączone napędy w stan biernego oczekiwania, w którym nie mogą być wykonywane żadne polecenia (napędy nie reagują). Dopiero wyzerowanie tego bitu przywraca stan gotowości. Wyzerowanie bitu l uruchamia system wyzwalania przerwań. Napęd zgłasza przerwanie jeżeli wykonanie rozkazu przenosi się na inny sektor oraz przed wejściem w tzw. fazę końcową. Ustawienie bitu l blokuje mechanizm przerwań; jedyną formą komunikacji staje się wówczas odpytywanie (Polling), tzn. procesor sam sprawdza w pewnych odstępach czasowych rejestr stanu. Rejestr adresu napędu (3F7h) Odczyt tego rejestru pozwala określić, która z głowic i w którym napędzie jest w danym momencie aktywna. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7-Nieokreślony. bit 6-Bramka zapisu: 0 - otwarta (zapistrwa), l - zamknięta. bit 5-2=Aktualnie pracująca głowica (15 - numer głowicy): 0000 -głowica 15, 0001 -głowica 14, 0010 -głowica 13, ... ... 111 - głowica 0. bit 1-Napęd 1: 0- aktywny, l - oczekuje. bit 0-Napęd 0: 0 - aktywny, l - oczekuje. Cykl programowania kontrolera W cyklu programowania zintegrowanego kontrolera dysków twardych AT-BUS można wyróżnić pewne charakterystyczne fazy: Faza przekazywania rozkazu CPU ładuje wszystkie wymagane rejestry pomocnicze i w ostatniej kolejności rejestr rozkazowy kontrolera (rysunek 7.7). Faza przekazywania danych W fazie tej odbywa się wymiana informacji między kontrolerem a pamięcią operacyjną. Oczywiście nie wszystkie rozkazy posiadają tę fazę. Przebieg sygnałów sterujących na magistrali PC-BUS w trakcie realizacji wymiany danych CPU 4-» IDE przedstawiają wykresy na rysunkach 7.8. i 7.9. Sygnał -IOCS16 generowany jest przez Host-Adapter wyłącznie po wykryciu żądania dostępu do 16-bitowego portu danych (OxlFO). Faza końcowa Kontroler melduje o zakończeniu operacji zgłoszeniem przerwania IRQ 14. Do dyspozycji CPU stoją również dane dodatkowe(umieszczone w rejestrach stanu i błędów) informujące o przebiegu realizacji ostatniego rozkazu. Wymiana danych kanałem DMA miała miejsce w dyskach modeli XT, PC-AT posługuje się przerwaniami i portami ulokowanymi w przestrzeni adresowej I/O. Dane sektora przesyłane są w porcjach po 2 bajty, bowiem port danych jest 16-bitowy. Wyjątek stanowią kody ECC transportowane bajt po bajcie poprzez młodszą połowę portu danych. Przerwanie IRQ 14 wyzwalane jest przez kontroler w następujących sytuacjach: • W rozkazie „Czytaj sektor", jeżeli został zapełniony bufor sektorowy kontrolera. W przeciwieństwie do wszystkich innych rozkazów nie jest jednak wyzwalane przerwanie przy przejściu do fazy końcowej. Można powiedzieć, że liczba sygnałów IRQ14 odpowiada tu liczbie przeczytanych sektorów. • W rozkazie „Pisz sektor", jeżeli kontroler oczekuje danych od CPU. Charakterystyczne jest przy tym, że pierwszy sektor przekazywany jest natychmiast po załadowaniu rejestru rozkazowego i nie towarzyszy mu żadne przerwanie. Każde wejście do fazy końcowej tego rozkazu wywołuje również przerwanie. Liczba impulsów przerwań odpowiada więc i tutaj w pełni ilości zapisanych sektorów. • We wszystkich innych rozkazach, przy wejściu w fazę końcową. Procedura INT 76h obsługująca to przerwanie musi umieć odróżnić, czy kontroler dysponuje danymi, czy też na nie czeka lub czy chodzi tu o fazę końcową rozkazu. Informacja zawarta w rejestrach stanu i błędów kontrolera pozwala na jednoznaczną diagnozę. Odczyt rejestru stanu (lF7h) automatycznie kasuje żądanie przerwania. Jeżeli jakieś względy dyktują utrzymanie w mocy zgłoszenia, należy posłużyć się alternatywnym rejestrem stanu (3F6h). Przykład realizacji rozkazu CZYTAJ SEKTOR Rozkaz czyta od l do 256 sektorów. Możliwy jest odczyt danych wraz z kodami ECC lub ich pominięcie. Po przyjęciu rozkazu ustawiany jest bit 7 (kontroler zajęty) rejestru stanu (lF7h) i kontroler przystępuje do pozycjonowania głowic i odczytu pierwszego sektora. Po odczytaniu sektora nastąpi ustawienie bitu 3 rejestru stanu (dane gotowe) oraz zgłoszenie przerwania IRQ14. Procedura obsługi odbiera dane z bufora sektorowego kontrolera. Jeżeli zaprogramowany został odczyt większej liczby sektorów, ustawiany jest ponownie bit 7, a zerowany bit 3 i cykl powtarza się. Rejestry grupy AT-Task-File podają stale parametry aktualnie przerabianego sektora, tak więc wystąpienie błędu, który przerwie wykonywanie rozkazu, można zawsze odnieść do wskazywanego sektora. Jeżeli błąd w polu danych uda się skorygować za pomocą kodów ECC, wykonywanie rozkazu jest kontynuowane i jedynie fakt ustawienia bitu 2 rejestru stanu sygnalizuje zaistniały problem. Ustawienie bitu l w kodzie rozkazu (patrz poniżej) oznacza tzw. długi odczyt. Oprócz 512 bajtów z pola danych, do portu 1F0h wyprowadzane są również bajty kodu ECC. Kontroler nie przeprowadza w tym przypadku ani kontroli, ani korekcji danych sektora. Dane przekazywane są w formie 2-bajtowych słów (port 1F0h jest 16-bitowy), a kody ECC po jednym bajcie, młodszą połową portu. Faza przekazywania rozkazu Do rejestru l F2h ładowana jest liczba sektorów przeznaczonych do odczytu. Uwaga: 0 oznacza 256 sektorów. Rejestr lF3h ładowany jest numerem pierwszego (ewentualnie jedynego) sektora. W rejestrach lF5h (MSB) i lF4h (LSB) ustawiany jest cylinder początkowy. MSB(lF4h):puste; puste; puste; puste; puste; puste; bitl; bit0; LSB(lF5h):bit7; bit6; bit5; bit4; bit3; bit2; bitl; bit0; 1- MSB + bity 7 - 0 LSB dają 10-bitowy numer cylindra. -Numer głowicy i adres napędu umieszczany jest w rejestrze 1F6h. 1; 1; 0; bit4; bit3; bit2; bitl; bit0; bity 7-5-Sygnatura 101. bit 4-Napęd: 0 -Master, 1 -Slave. bity 3-0-Numer głowicy (binarnie): 0000 - głowica 0, 0001 - głowica l, ... ... 1111 - głowica 15. Jako ostatni ładowany jest rejestr rozkazowy lF7h. 0; 0; 1; 0; 0; 0; 0; bitl; bit0; bity 7-2-Sygnatura rozkazu 001000. bit l-Długi odczyt: O - dane + ECC, l - tylko dane. bit O-Mechanizm automatycznego powtarzania: O - wyłączony, l - aktywny. Faza przekazywania danych W fazie tej procedura obsługi przerwania IRQ14 odbiera dane od kontrolera. Faza końcowa Kontroler umieszcza w swoich rejestrach następujące informacje: Rejestr błędów (lFlh): bit7; bit6; bit5; bit4; bit3; bit2; bitl; bit0; bit 7-l - nie znaleziono znacznika DAM. bit 6-Zarezerwowany. bit 5-l - przerwano wykonywanie rozkazu. bit 4-Zarezerwowany. bit 3-l - nie znaleziono metryki ID. bit 2-Zarezerwowany. bit l-l - błąd niemożliwy do skorygowania przez ECC. bit 0- - adresowany sektor jest oznaczony jako zły. Rejestr liczby sektorów (lF2h). W przypadku przerwania wykonywania rozkazu rejestr ten zawiera liczbę pozostałych jeszcze do odczytu sektorów. W przeciwnym razie równy jest zeru. Rejestry lF3h, lF4h, lF5h, l F6h wskazują na ostatnio przeczytany sektor. Rejestr stanu (1F7h): bit7; bit6; bit5; bit4; bit3; bit2; bitl; bit0; bit 7-l - napęd zajęty wykonywaniem rozkazu (Busy). bit 6-l - napęd gotów (Ready). bity 5-4-Zarezerwowane. bit 3=l - dane mogą być odebrane od kontrolera. bit 2- l - w polu danych wykryto błąd, zlikwidowany kodem ECC. bit l-Zarezerwowane. bit 0-l - rejestr błędów zawiera informacje dodatkowe. Przykład realizacji rozkazu samoidentyfikacji dysku (Device Identify) Rozkaz odczytuje 512 bajtów informacji o dysku. Po przyjęciu rozkazu ustawiany jest bit 7 (kontroler zajęty) rejestru stanu (lF7h) i przygotowywana jest transmisja 512 bajtowego bloku danych. Następnie ustawiany jest bit 3 rejestru stanu (dane gotowe) oraz zgłoszenie przerwania IRQ14. Procedura obsługi odbiera dane z bufora sektorowego kontrolera. Faza przekazywania rozkazu Numer napędu umieszczany jest w rejestrze 1F6h. bity 7-5- Bez znaczenia. bit 4- Napęd: O - Master, l - Slave. bity 3-0-Bez znaczenia. Ładowany jest rejestr rozkazowy lF7h. 1; 1; 1; 0; 1; 1; 0; 0; bity 7-0-Sygnatura rozkazu 11101100. Faza przekazywania danych W fazie tej procedura obsługi przerwania IRQ14 odbiera dane od kontrolera. 512-bąj-towy blok danych o dysku ma strukturę przedstawioną w tabeli 7.6. Tabela 7.6. Struktura bloku informacyjnego Słowo; Bit; Opis; 0; 15; 0 - zarezerwowane dla nośników niemagnetycznych 0; 14; 1 - między sektorami wymagana jest szczelina kompensująca wahania prędkości obrotowej dysku 0; 13; 1 - dysk ma możliwość przydzielania ścieżki zapasowej 0; 12; 1 - dysk ma możliwość przydzielania zapasowego sektora 0; 11; 1 - tolerancja prędkości obrotowej powyżej 0,5 % 0; 10; 1 - szybkość transferu danych powyżej 10 Mb/s 0; 9; 1 - szybkość transferu danych od 5 Mb/s do 1 0 Mb/s 0; 8; 1 - szybkość transferu danych poniżej 5 Mb/s 0; 7; 1 - nośnik magnetyczny wymienny 0; 6; 1 - dysk twardy 0; 5; 1 - zaimplementowana kontrola silnika napędu 0; 4; 1 - czas pozycjonowania głowic poniżej 15 ms 0; 3; 1 - system kodowania danych inny niż MFM 0; 2; 1 - Soft Sector 0; 1; 1 - Hard Sector 0; 0; Zarezerwowany, powinien mieć wartość 0 1; puste; Logiczna liczba cylindrów zgodnie ze standardową translacją proponowaną przez urządzenie. Zakres wartości od 1 do 65 535. 2; puste; Zarezerwowany, powinno być 0. 3; puste; Logiczna liczba głowic zgodnie ze standardową translacją proponowaną przez urządzenie. Zakres wartości od 1 do 16. 4; puste; Liczba bajtów na ścieżkę (dysk nie sformatowany). 5; puste; Liczba bajtów na sektor (dysk nie sformatowany). 6; puste; Logiczna liczba sektorów na logicznej ścieżce zgodnie z translacją standardową. Zakres wartości 1 do 63. 7-9; puste; Zarezerwowane. 10- 19; puste; Numer seryjny dysku. 20; puste; Typ bufora: (0000h - bufor nie jest określony, 0001 h - bufor nie może równocześnie transferować w obydwu kierunkach dysku, 0002h - bufor może równocześnie transferować w obydwu kierunkach. 0003 h - bufor może równocześnie transferować w obydwu kierunkach i stosować pamięć podręczną przy odczycie. 0004h - FFFFh - zarezerwowane.) - wszystko w nawiasie dotyczy bufora. 21; puste; Rozmiar bufora podany w 512-bąjtowych blokach. 22; puste; Liczba bajtów kodu ECC dostępna w „długich" rozkazach. 23-26; puste; Numer wersji modelu dysku. 27-46; puste; Nazwa modelu dysku (40 znaków ASCII). 47; 15-8; Zarezerwowane. 47; 7-0; 00h - komendy Read/Write Multiple Sector nie są zaimplementowane. xxh - xx oznacza maksymalną liczbę sektorów, która może być transferowana (podczas jednego przerwania) przez komendy Read/Write Multiple Sector. 48; puste; 0000h - dysk nie może pracować w trybie 32-bitowym. 0001 h - dysk może pracować w trybie 32-bitowym. 49; 15- 12; Zarezerwowane. 49; 11; 1 - kontrola przepływu danych sygnałem IORDY jest obsługiwana. 49; 10; 1 - kontrola przepływu danych sygnałem IORDY może być wyłączona. 49; 9; 1 - dysk obsługuje tryb LBA. 49; 8; 1 - dysk może przesyłać dane w trybach DMA. 49 7-0; Zarezerwowane. 50; puste; Zarezerwowane. 51; 15-8; Czas trwania cyklu przesyłania danych w trybie P1O [ns] - wartość 0180h oznacza przykładowo, że dysk może pracować w trybie PIO 3 (patrz rysunek 7 13. - T#0). 51; 7-0; Zarezerwowane. 52; 15-8; Czas trwania cyklu przesyłania danych w trybie DMA [ns] (patrz rysunek 7 15. - T#0). 52; 7-0; Zarezerwowane. 53; 15-2; Zarezerwowane. 53; 1; 1 - dane zawarte w słowach 64 - 65 są dostępne. 53; 0; 1 - dane zawarte w słowach 54 - 58 są dostępne. 54; puste; Bieżąca liczba cylindrów ustawiona komendą Initialize Drive Parameters (jeżeli nie jest używana domyślna geometria napędu powinien być ustawiony bit 0 w słowie 53). 55; puste; Bieżąca liczba głowic ustawiona komendą Initialize Drive Parameters (jeżeli nie jest używana domyślna geometria napędu powinien być ustawiony bit 0 w słowie 53). 56; puste; Bieżąca liczba sektorów na ścieżkę ustawiona komendą Initialize Drive Parameters (jeżeli nie jest używana domyślna geometria napędu powinien być ustawiony bit 0 w słowie 53). 57-58; puste; Bieżąca pojemność dysku w sektorach (jeżeli nie jest używana domyślna geometria napędu powinien być ustawiony bit 0 w słowie 53). 59; 15-9; Zarezerwowane. 59; 8; 1 - komendy Read/Write Multiple sązaimplementowane. 59; 7-0; Maksymalna liczba sektorów, która może być transferowana podczas jednego przerwania przez komendy Read/Write Multiple. 60-61; puste; Tryb ŁBA - liczba sektorów na dysku; pozostałe tryby - 0. 62; 15-8 Numer aktywnego trybu Singleword-DMA. 62; 7-0; Nnumery obsługiwanych przez dysk trybów Singleword-DMA (bit 0 - tryb 0. bit 1 - tryb 1. ...). 63; 15-8; Numer aktywnego trybu Multiword-DMA. 63; 7-0; Numery obsługiwanych przez dysk trybów Multiword-DMA (bit 0 - tryb 0. bit 1 - tryb 1. ...). 64; puste; Dysk może pracować w trybach PIO z kontrolą przepływu danych (tryb PIO 3 i wyższe) - ustawiony bit 0 oznacza, że dysk obsługuje tryb PIO 3. 65; puste; Minimalny czas trwania cyklu przesyłania danych w trybie Multiword-DMA [ns] - (patrz rysunek 7. 1 5. - T0) 66; puste; Zalecany przez producenta czas trwania cyklu przesyłania danych w trybie Multiword-DMA [ns] - (patrz rysunek 7.15. - T0). 67; puste; Minimalny czas trwania cyklu przesyłania danych w trybie PIO bez kontroli przepływu danych [ns] - (patrz rysunek 7.13. - T0). 68; puste; Minimalny czas trwania cyklu przesyłania danych w trybie PIO z kontrolą przepływu danych [ns] - (patrz rysunek 7. 1 3. - T0). 69 - 255; puste; Zarezerwowane. Faza końcowa Kontroler umieszcza w swoich rejestrach następujące informacje: Rejestr stanu (l F7h): bit7; bit6; bit5; bit4; bit3; bit2; bitl; bit0; bit 7-l - napęd zajęty wykonywaniem rozkazu (Busy). bit 6-1 - napęd gotów (Ready). bity 5-4- Zarezerwowane. bit 3- l - dane mogą być odebrane od kontrolera. bit 2 bit l- Zarezerwowane. bit 0 Funkcje oszczędnościowe Nowsze modele dysków twardych standardu IDE (AT-BUS) wyposażane są w układy ograniczające zużycie mocy. Początkowo dotyczyło to wyłącznie dysków małych rozmiarów (l" i 2.5") przeznaczonych do komputerów przenośnych, gdzie wartość poboru prądu z akumulatorów odgrywa kluczową rolę. W chwili obecnej funkcje oszczędnościowe należą do standardowego wyposażenia każdego dysku IDE. W skład systemu ograniczania (Power Saving) wchodzi warstwa automatyczna (Automatic Power Reduction) oraz zestaw specjalnych rozkazów systemowych, wykonywanych tak, jak każde inne polecenie zwracające się do rejestrów AT-Task-File. System automatyczny Mechanizm automatycznej redukcji mocyjesttrójpoziomowy i zawiera: • Standardowy poziom Idle. • Poziom Idle_l. • Poziom Idle_2. Jednostka dyskowa, która kończy wykonywanie rozkazu (a żaden nowy jeszcze nie nadszedł) wpada automatycznie w stan Idle. Jeżeli w przeciągu kolejnych 20 - 50 ms Host (PC) nadal nie przesyła żadnego polecenia, dysk przechodzi automatycznie w tryb Idle_l. Wysokość tego pierwszego opóźnienia wynika z czasu wykonania przez procesor kontrolera fragmentu mikrokodu dotyczącego operacji przełączenia. Po wejściu w fazę Idle_l uruchamiany jest licznik czasu (Idle 2 Timer). Zwykle nastawiony jest on na 2 sekundy, ale wartość tą można zmienić modyfikując odpowiednią pozycję w sektorze konfiguracyjnym dysku. Jeżeli upłynął ten czas, a Host nadal nie wysłał rozkazu, układ przesuwany jest na poziom Idle_2. W trybie Idle nie są realizowane żadne funkcje oszczędnościowe. Wszystkie układy scalone zasilane są w całości, a dysk wiruje z pełną prędkością. Poziom Idle_l oznacza przełączenie niektórych układów w stan niskiego poboru mocy. W stanie tym dysk zdolny jest do natychmiastowej reakcji na rozkazy. W fazie Idle_2 wykonuje się wszystkie działania z fazy poprzedniej, a dodatkowo następuje całkowite odcięcie napięcia zasilającego +12 V oraz zablokowanie separatora danych. Okres powrotu do poziomu Idle (opóźnienie reakcji) wydłuża się w tym przypadku do czasu potrzebnego na odzyskanie kontroli nad serwomechanizmem, co wyraża się czasem dostępu do sektora dysku. Zysk energii osiągany przez ten trój poziomowy system automatycznej redukcji obciążenia zależy od przyjętej wartości czasu Idle 2 Timer oraz od stopnia wykorzystania napędu. Jeżeli rozkazy nadchodzą częściej niż co 2 s - dysk w ogóle nie zdąży wejść w fazę Idle_2. Rozkazy specjalne Poniższe rozkazy mogą wprowadzać dysk w jeden z opisanych powyżej poziomów jałowych (Idle), ale i także w dodatkowe stany: czuwania (Stand By) i uśpienia (Sleep Power Modę). W stanie czuwania interfejs dysku jest aktywny i zdolny do przyjęcia i opracowania każdego z implementowanych przez siebie rozkazów IDE. Na odpowiedź trzeba jednak czekać ok. 10 s, bowiem tyle potrzeba na ponowne rozpędzenie dysku do obrotów nominalnych (w stanie czuwania dysk wiruje, ale z mniejszą prędkością). Stan uśpienia napędu można osiągnąć jedynie przez rozkazy specjalne. Dysk uśpiony zatrzymuje silnik i blokuje swój interfejs, czyli nie reaguje na żadne rozkazy. Wyjście z tego trybu osiągnąć można jedynie poprzez wywołanie jednej z form funkcji Reset: •Software Reset, • AT-Bus Reset, • Power On Reset. Do grupy rozkazów specjalnych zarządzających gospodarką energetyczną dysku zaliczamy 6 poleceń zebranych w tabeli 7.7. Rozkaz Stand By Immediate Kod rozkazu IDE: OxEOh lub Ox94h. Argumenty: numer dysku (Master/Slave), bit 4 rejestru SDH1). Stan innych bitów SDH i rejestrów AT-Task-File: bez znaczenia. Realizacja: • Ustawienie bitu BSY 2. • Wejście w tryb Stand By Power Modę. • Wyzerowanie bitu BSY. • Wygenerowanie przerwania IRQ. Tabela 7.7 Rozkazy specjalne IDE Nazwa rozkazu; Bity słowa rozkazowego:7, 6, 5, 4, 3, 2, 1, 0; Niezbędne parametry: FR; SCR, SNR; CYL; SDH; Stand By Immediate; 1, 0, 0, 1,0, 1, 0, 0; -, -, -, -; DRV Idle Immediate; 1, 0, 0, 1, 0, 1, 0, 1;-, -, -, -; DRV Stand By With Timer; 1, 0, 0, 1, 0, 1, 1, 0; -, •, -, -; DRV Idle With Timer; 1, 0, 0, 1, 0,1, 1, 1; -, •,-, -; DRV Check Power Mode; 1, 0,0, 1, 1, 0, 0, 0; -, •,-, -; DRV Sleep; 1, 0, 0,1, 1, 0, 0, 1; -, -, -,-; DRV Stand By Immediate; 1, 1, 1, 0, 0, 0, 0, 0; -, -, -, -; DRV Idle Immediate; 1, 1, 1, 0, 0, 0, 0, 1;-, -, -, -; DRV Stand By With Timer; 1, 1, 1, 0, 0, 0, 1, 0; -, •, -, -; DRV Idle With Timer; 1, 1, 1, 0, 0,0, 1, I; -, •, -, -; DRV Check Power Mode; 1, 1,1, 0, 0, 1, 0, 1; -, •,-, -; DRV Sleep; 1, 1, 1,0, 0, 1, 1, 0; -, -, -,-; DRV - - zawartość rejestru jest ignorowana. • - rejestr niezbędny jako parametr. DRV - w rejestrze SDH istotny jest jedynie numer dysku, reszta jest ignorowana. . Rozkaz Idle Immediate Kod rozkazu IDE: 0xElh lub 0x95h. Argumenty: numer dysku (Master/Slave), bit 4 rejestru SDH. Stan innych bitów SDH i rejestrów AT-Task-File: bez znaczenia. Realizacja: • Ustawienie bitu BSY. • Wejście w tryb ldle_l Power Modę. • Wyzerowanie bitu BSY. • Wygenerowanie przerwania IRQ. Rozkaz Stand By With Timer Kod rozkazu IDE: OxE2h lub Ox96h. Argumenty: numer dysku (Master/Slave), bit 4 rejestru SDH. Licznik czasu: w rejestrze SCR1). Stan innych bitów SDH i rejestrów AT-Task-File: bez znaczenia. Realizacja: • Ustawienie bitu BSY. • Wejście w tryb Stand By Power Modę. • Wyzerowanie bitu BSY. • Wygenerowanie przerwania IRQ. Wartość czasu w rejestrze SCR podawana jest w jednostkach 5-sekundowych. Akceptowane są jednak tylko wartości z przedziału OxOCh - OxC8h, co odpowiada opóźnieniom od 60 s do 17 min. Jeżeli licznik nastawiony został na zero, dysk wchodzi natychmiast w fazę Stand By Power Modę. Realizowany więc jest de facto rozkaz OxEOh. Dysk wejdzie oczywiście również w ten tryb jeżeli upłynie czas zadeklarowany w liczniku. Czas odliczany jest od momentu zakończenia wykonywania ostatniego z rozkazów, który pozostawił dysk w trybie Idle Power Modę. Rozkaz Idle With Timer Kod rozkazu IDE: OxE3h lub Ox97h. Argumenty: numer dysku (Master/Slave), bit 4 rejestru SDH. Licznik czasu: w rejestrze SCR. Stan innych bitów SDH i rejestrów AT-Task-File: bez znaczenia. Realizacja: • Ustawienie bitu BSY. • Wejście w tryb Idle_l Power Modę. • Wyzerowanie bitu BSY. • Wygenerowanie przerwania IRQ. Wartość czasu w rejestrze SCR podawana jest w jednostkach 5-sekundowych. Akceptowane są jednak tylko wartości z przedziału OxOCh - OxC8h, co odpowiada opóźnieniom od 60 s do 17 min. Jeżeli licznik nastawiony został na zero, rozkaz jest ignorowany. Dysk wchodzi w stan Idle i przebywa w nim tak długo aż minie czas nastawiony w SCR. Wówczas dysk przechodzi w stan Stand By. Czas odliczany jest od momentu wydania rozkazu 0xE3h lub każdego innego rozkazu, który pozostawił dysk w trybie Idle Power Modę. Rozkaz Check Power Modę Kod rozkazu IDE: 0xE5h lub 0x98h. Argumenty: numer dysku (Master/Slave), bit 4 rejestru SDH. Stan innych bitów SDH i rejestrów AT-Task-File: bez znaczenia. Realizacja: • Jeżeli dysk znajduje się w stanie Stand By: • ustawienie bitu BSY, • wyzerowanie rejestru SCR (SCR = 0x00h), • wyzerowanie bitu BSY, • wygenerowanie przerwania IRQ. • Jeżeli dysk znajduje się w stanie Idle: • ustawienie bitu BSY, • ustawienie rejestru SCR (SCR = OxFFh), • wyzerowanie bitu BSY, • wygenerowanie przerwania IRQ. W rejestrze CLR l odczytać można też stan licznika czasu. Jeżeli zwracana jest wartość zero, timer nie jest aktywny. Rozkaz Sleep Kod rozkazu IDE: 0xE6h lub 0x99h. Argumenty: numer dysku (Master/Slave), bit 4 rejestru SDH. Stan innych bitów SDH i rejestrów AT-Task-File: bez znaczenia. Realizacja: • Wyłączenie silnika. • Wyzerowanie bitu BSY. • Wygenerowanie przerwania IRQ. • Deaktywacja złącza IDE. Wartość czasu w rejestrze SCR podawana jest w jednostkach 5-sekundowych. Akceptowane są jednak tylko wartości z przedziału 0x0Ch - 0xC8h, co odpowiada opóźnieniom od 60 s do 17 min. Jeżeli licznik nastawiony został na zero, dysk wchodzi natychmiast w fazę Stand By Power Modę. Realizowany więc jest de facto rozkaz 0xE0h. Dysk wejdzie oczywiście również w ten tryb skoro tylko upłynie czas zadeklarowany w liczniku. Czas odliczany jest od momentu zakończenia wykonywania ostatniego z rozkazów, który pozostawił dysk w trybie Idle Power Mode. Standard EIDE Standard AT-BUS (IDE) zdominował bez wątpienia na długi czas rynek komputerów klasy PC. Jednak w miarę rozwoju technologii, coraz dotkliwiej dawały znać o sobie następujące główne ograniczenia tego systemu: •limit pojemności (do 504 MB), • niezbyt duża szybkość transmisji danych, • możliwość podłączenia dwóch dysków twardych, • brak możliwości podłączenia innych urządzeń niż dyski twarde. Pierwsze dyski twarde instalowane w PC miały pojemność 10 MB, a produkowane obecnie przekroczyły granicę 10 GB. Programiści tworzący w 1992 roku BIOS komputera IBM-XT nie przypuszczali chyba w najskrytszych snach, by ktokolwiek próbował przez zdefiniowane przez nich złącze komunikować się z urządzeniami o pojemności przekraczające 1000-krotnie wartość graniczną całego systemu. Stały wzrost pojemności produkowanych dysków skutecznie kompensował przyrost zapotrzebowania na pamięć masową. Wydawało się, iż zakres 500 MB zaspokoi na dłuższy czas wszelkie wymagania. W momencie, gdy rozmiary samego systemu operacyjnego sięgnęły kilkudziesięciu MB, ograniczenia zaczęły być na tyle dotkliwe, że zmusiły do nowych poszukiwań. Zgodnie z przyjętymi założeniami architektury PC XT, wymiana danych z dyskami twardymi miała przebiegać w tempie nie większym niż około 3 MB/s. Prędkość ta znacznie przewyższała możliwości pierwszych dysków twardych. Dziś wiele z pośród nich przekroczyło granicę 10 MB/s. Pojawiły się nowe urządzenia pamięci masowej takie jak CD-ROM i napędy taśm. Dostęp do nich był naturalnie wygodniejszy poprzez magistralę SCSI ale rynek zaczął wywierać nacisk na producentów, by zintegrować ich obsługę w dobrze już zadomowionym wśród użytkowników systemie IDE. Opracowanie nowoczesnego i na miarę czasu standardu, zdolnego do obsługi szybkich urządzeń o astronomicznych pojemnościach, nie stanowiło by w chwili obecnej najmniejszej trudności. Problem polega na konieczności wkomponowania takiego systemu w rzeczywisty świat użytkowników PC. Każdy oczekuje, by nowe elementy dały się zintegrować w starej architekturze. Potrzeba zagwarantowania „zgodności w dół" napiętnowała cały dotychczasowy rozwój techniki PC i nie ogranicza się niestety wyłącznie do zagadnień związanych z dyskami i ich magistralami. Z konieczności więc, stary i wysłużony system IDE podlega coraz to nowym adaptacjom. Jego kolejne modyfikacje, ukrywające się pod wspólną nazwą EIDE (Enhanced IDE} mają za zadanie usunięcie wspomnianych ograniczeń, zapewniając zgodność ze standardem IDE, tak iż nawet najnowocześniejsze urządzenia (ULTRA-DMA/66) pracują poprawnie podłączone do starego kontrolera IDE. Poprawna praca nie oznacza bynajmniej wykorzystania pełnych możliwości systemu: z dysku 8 GB system widzi jedynie ułamek pojemności (540 MB) a maksymalna prędkość transmisji przekracza nieznacznie wartość 3 MB/s. Również „stare" dyski IDE muszą współpracować poprawnie z najnowszym Host-Adapterem implementującym aktualne rozszerzenia EIDE. Normalizacją grupy zagadnień związanych z interfejsem EIDE zajmuje się komitet techniczny T13 należący do grupy NCITS (National Committee on Information Technology Standards}. Zespół ten podlega amerykańskiemu komitetowi do spraw normalizacji ANSI (American National Standards Institute). Prace tego gremium dostępne są również w internecie pod adresem www.ncits.org. Oto krótki rys historyczny obrazujący przekształcenia i rozwój kolejnych faz normalizacji standardu ATA: od IDE do aktualnie uzgadnianej wersji ATA-5. • IDE (ATA) - rok wprowadzenia 1981. Punkt wyjściowy do dalszych rozszerzeń. Oferowane podstawowe funkcje standardu IDE, maksymalna prędkość transmisji w zakresie 4 MB/s w oparciu o mechanizm PIO (Tryb-1). Liczba urządzeń ograniczona do dwóch a maksymalna długość przewodu połączeniowego nie przekraczająca 46 cm (w oryginale specyfikacji 18"). • ATA-2 (wprowadzone w roku 1994). Nowe typy transmisji w systemie PIO (Type-3 oraz Type-4). Transmisja w tych trybach posługuje się sprzętowym mechanizmem regulującym prędkość przekazu (sygnał IORDY). Dzięki temu dysk może w miarę potrzeby spowalniać pracę magistrali. Konieczność wprowadzenia mechanizmu regulacji wynikła w momencie wprowadzenia transmisji w szybkim trybie PIO-4, gdzie pojawiło się po raz pierwszy niebezpieczeństwo „przysypania" dysku danymi przez kontroler. Standard ATA nie przewidywał takiej sytuacji. Zdefiniowane zostały ponadto tryby DMA (Type-0, Type-1 oraz Type-2). Maksymalna prędkość transmisji (PIO-4 i DMA-2) przekracza już 16 MB/s. Specyfikacja ATA-2 nie zmienia ani dopuszczalnej liczba urządzeń ani maksymalnej długości przewodu połączeniowego. Zostały natomiast zaimplementowane funkcje wspierające mechanizmy Pług & Play. • ATA-3 (rok 1996). Poprawki ograniczające się głównie do implementacji trybu gwarantującego pewną formę zabezpieczenia dostępu do danych (Secure Modę) oraz systemu nadzoru i samo diagnostyki S.M.A.R.T (Self Monitoring Analysis and Reporting Technology). • ATA/ATAPI-4 (w roku 1997). Maksymalna prędkość transmisji podnosi się do poziomu 33 MB/s dzięki wprowadzeniu trybów Ultra-DMA. Obsługa do czterech urządzeń, po dwa na kabel, przy czym długość kabla pozostaje bez zmian. Definicja współpracy z urządzeniami o fizycznej organizacji danych innych niż dyski twarde (Streamer i CD-ROM). Dla potrzeb tych urządzeń powstaje nowy logiczny interfejs określany mianem ATAPI (AT Attachment Packet Interface). Składają się na niego nowe funkcje, tzw. pakietowe, które przekazują swoje obszerne parametry w specjalnych blokach (pakietach). • ATA/ATAPI-5 (aktualnie w opracowaniu). Zwiększenie zakresu pojemności dysków Zakup nowego dysku twardego i próba jego integracji w ramach posiadanego systemu nie zawsze kończy się sukcesem. To czy dany dysk będzie poprawnie pracował w konkretnym komputerze zależy od kilku czynników, z których większość jest odzwierciedleniem historii rozwoju systemów operacyjnych, programów BIOS oraz interfejsów dysków. Aby poznać przyczyny ewentualnych niepowodzeń i móc im przeciwdziałać trzeba prześledzić ten rozwój. Całe zagadnienie sprowadza się zawsze do jednego punktu centralnego: możliwości objęcia (zaadresowania) całej dostępnej przestrzeni dyskowej, czyli jednoznacznego dostępu do każdego pojedynczego sektora. Przemysł wprowadzając na rynek dyski o coraz to większych rozmiarach stale podnosi poprzeczkę dla systemów operacyjnych. Na omawianej drodze rozwoju występuje kilka charakterystycznych punktów (nazywanych często barierami), które trzeba kolejno omijać. Przed przystąpieniem do bardziej szczegółowych rozważań warto zwrócić uwagę na niejednorodny sposób oznaczania pojemności dysków. W użyciu są mianowicie dwie jednostki: binarna i dziesiętna (W książce tej używane sąjednostki binarne.). Jednostka; Notacja dziesiętna; Notacja binarna; 1 MB 10^6 ( 1 000 000) bajtów; 2^20(1 048 576) bajtów; 1 GB; 10^99(1 000 000 000) bajtów; 2^30(1 073741 824) bajtów; Niestety nie jest jednoznacznie unonnowane, które z jednostek należy używać ani też nie ma obowiązku informować o tym, które ma się na myśli. Prowadzi to do szeregu nieporozumień, zwłaszcza wśród niedoświadczonych posiadaczy komputerów. Nalepka producenta na dysku informuje o pojemności w jednostkach dziesiętnych, co jest o tyle zrozumiałe, iż zawsze to lepiej wygląda (przynajmniej o 5 - 7%) a poza tym konkurencja też tak robi. Prawie wszystkie nowe wersje programów konfiguracyjnych (SETUP) wyrażają wymiary w jednostkach dziesiętnych a stare różnie. W kolejnej fazie instalowania użytkownik musi sięgnąć do programu fdisk. I tutaj pierwsza niespodzianka: pojemności ubywa (fdisk wypowiada się w jednostkach binarnych). Zdezorientowany człowiek szuka poparcia w innych programach. Tutaj znowu ulga, bo chkdsk „widzi" pełną pojemność (jednostki dziesiętne). W kilka chwil potem spotyka się z informacją jakiegoś innego programu (na przykład File Manager Win.3.11 pracuje w jednostkach binarnych) i wartość jest znów zaniżona. Bariera 504 MB Omawiana tu bariera nie wynika, wbrew powszechnej opinii, z ograniczeń wbudowanych w system IDE. Może on jako taki obsługiwać teoretycznie dyski o rozmiarach dobrze powyżej 100 GB. Ograniczenie 504 MB powstaje na styku funkcjonowania dwóch niedopasowanych do siebie systemów i aby je zrozumieć, trzeba wgłębić się nieco w mechanizm dostępu do dysków. Aplikacje (programy użytkownika) chcące czytać lub pisać na dysku odwołują się do systemu operacyjnego. Jeżeli systemem tym jest MS-DOS, operacje dyskowe realizowane są za pośrednictwem przerwania INT13h BIOS. Stanowi ono po prostu kanał komunikacyjny łączący system operacyjny z wyspecjalizowanymi procedurami zapisanymi w pamięci stałej komputera. To właśnie one są bezpośrednimi wykonawcami operacji zleconych przez MS-DOS. Ogólny schemat przekazywania takich poleceń korzystając z przerwania INT13 można przedstawić w następujący sposób: • Do rejestru AH ładowany jest numer identyfikujący żądaną funkcję, np. 0x0Ah oznacza czytanie sektorów. • Para rejestrów ES:BX musi zawierać adres przygotowanego wcześniej obszaru pamięci, który jest niezbędny w niektórych rozkazach, np. tutaj zostaną przesłane odczytane z dysku dane. •Rejestr AL określa liczbę sektorów, których dotyczy rozkaz. •W DL trzeba umieścić numer dysku do którego chcemy się zwrócić. •DH podaje numer głowicy dysku (identyfikacja strony dyskowej). • Para CL-CH określa numer cylindra dyskowego i numer sektora na ścieżce zgodnie z rysunkiem 7.11. • Procesor wyzwala teraz przerwanie INT13h i sterowanie przejmuje BIOS, który w oparciu o przekazane parametry kontaktuje się bezpośrednio z kontrolerem dysku. • Jeżeli procedury BIOS stwierdziły wystąpienie błędu uniemożliwiającego wykonanie operacji trzeba o tym poinformować MS-DOS. Sygnalizacja błędu odbywa się poprzez ustawienie flagi CF. Rejestr AH zawiera wtedy jednobajtowy kod błędu podający bliższe określenie przyczyn (np. AH = 0x04h: nie znaleziono żądanego sektora). Powyższy „klasyczny" schemat adresowania nosi nazwę CHS (Cylinder/Head/Sector) bowiem poszczególne parametry (numer cylindra, strona powierzchni dyskowej i numer sektora na ścieżce) przekazywane są niezależnie od siebie, a ponadto podkreślają fizyczny związek z rzeczywistą budową dysku i organizacją danych. Przyjrzymy się teraz nieco bliżej elementom złącza INTISh. Przekazywanie parametrów CHS w powyższej formie nakłada następujące ograniczenia: • Maksymalna liczba cylindrów (C) wynosi 2^10, czyli l 024 (numerowanych od O do l 023) • Maksymalna liczba głowic (H) nie przekracza 2^8, to jest 256 (numerowane od O do 255) • Maksymalna liczba sektorów na ścieżce (S) sięga 2^6 - l, czyli 63 (numeracja od l do 63) Największa liczba sektorów, którą można w ten sposób zaadresować wynosi więc 16515 072 (l 024 x 63 x 256) co przy rozmiarach sektora 512 B daje pojemność 8 455 716 864 bajtów (7,9 GB). Parametry podawane w rejestrach DX i CX przepisywane są (w ramach obsługi przerwania INT13h) do odpowiednich portów CBR kontrolera IDE tak jak to zostało schematycznie przedstawione na rysunku 7.12. Cztery młodsze bity rejestru DH przechodzą do portu 0x1 F6h (Drive/Head Register). Numer cylindra umieszczany jest w parze portów 0xlF4h/0xlF5h (Cylinder Low Register/Cylinder High Register), a sześć młodszych bitów CH przenoszonych jest do portu Ox l F3h (Sector Number Register). Maksymalna liczba sektorów, którą może przyjąć zestaw rejestrów CBR wynosi więc 267 386 880 (65 536 x 255 x 16) bowiem wyznaczona jest według następującej zależności: •Maksymalna liczba cylindrów (c0 - c 15) równa jest 2^16, czyli 65 536. •Maksymalna liczba głowic (a0 - a3) wynosi 2^4, czyli 16. •Maksymalna liczba sektorów (b0 - b7) sięga 20^8 - l, czyli 255. Widać więc, iż sam system IDE może obsłużyć bez trudu dyski o rozmiarach do 127 GB, a złącze komunikacyjne przerwania INT13h do 7,9 GB. Maksymalna pojemność jaką można zaadresować stosując oba te mechanizmy jednocześnie jest jednak ograniczona do części wspólnej zaznaczonej w tabeli 7.8. BIOS nie przyjmuje do wiadomości, iż mogą istnieć dyski o liczbie cylindrów większej od l 024, a złącze IDE nie jest zdolne do obsługi dysków o liczbie głowic przekraczającej liczbę 16. To właśnie powyższe niedopasowanie współpracujących ze sobą systemów (niezgodność wymiarów poszczególnych pól informacyjnych) powoduje powstanie „słynnej" bariery 504 MB. Tabela 7.8. Tworzenie bariery 504 MB Interfejs; Liczba sektorów na ścieżce; Liczba głowic; Liczba cylindrów; Maksymalna pojemność; INT 13HBIOS; 63; 256; 1 024; 7,9 GB Złącze AT-Task-File; 255; 16; 65536; 127 GB Maksymalna część wspólna; 63; 16; 1 024; 504 MB Metody omijania bariery 504 MB Bariera 504 MB daje znać o sobie w przypadku dysków o parametrach CHS przekraczających limit l 024 x 16 x 63. Konfiguracje powyżej tego zakresu trzeba tak przekształcić, by była możliwa do zaakceptowania przez obydwa współpracujące ze sobą systemy. Jeżeli pojemność dysku zawiera się w zakresie do 504 MB (a konkretnie liczba cylindrów nie przekracza l 024, liczba głowic 16 i liczba sektorów na ścieżce 63) żadna translacja nie jest konieczna i parametry CHS przekazywane są w niezmienionej postaci. Jeżeli MS-DOS wywoła funkcję 08h INT13h, BIOS zwraca takie same wartości jakie sam otrzymał w słowach l, 3 i 5 po wydaniu rozkazu DEVICE IDENTIFY. Gdy któryś z parametrów wybiega poza limit, BIOS dokonuje przeliczenia czynników CHS i od tej pory system operacyjny widzi dysk o innej konfiguracji niż ma to miejsce w rzeczywistości. Geometria urządzenia o parametrach CHS określonych jako 2 000 cylindrów, 16 głowic i 63 sektorów na ścieżce może być przekształcona do postaci l 000 cylindrów 32 głowic i 63 sektorów. Każdorazowe odwołanie się do dysku w celu zapisu lub odczytu pociąga za sobą również tłumaczenie adresów według takiego samego schematu. Powyższe przeliczenie dokonuje się na jeden z dwóch sposobów: przejście na adresowanie liniowe ŁBA (Logical Block Addresś) lub tzw. translacja XCHS (eXtended Cylinder HeadSector}. Oba sprowadzają się niezmiennie do tego, by system operacyjny mógł w jednoznaczny sposób zaadresować dowolnie wybrany sektor dyskowy. Techniczna realizacja tych mechanizmów leży w gestii funkcji BIOS a konkretnie tych realizujących rozszerzenia EIDE. Implementacja nowych funkcji wiązała się więc na ogół z koniecznością wymiany EPROM-BIOS lub co najmniej instalacją kontrolera EIDE wyposażonego we własny BIOS. Możliwa jest też droga uproszczona - instalacja w komputerze ze złączem IDE dodatkowego oprogramowania przechwytującego obsługę przerwania INT13h. Typowymi przedstawicielami programów tego typu są ogólnie dostępne sterowniki o nazwach EZ-Drive lub Ontrack Disk Manager. Nie trzeba chyba dodawać, iż implementacja mechanizmów LBA i XCHS musi mieć również miejsce w samym dysku. Żaden BIOS nie jest naturalnie w stanie wymusić trybu ŁBA w starym modelu znającym wyłącznie funkcje standardu IDE. Adresy liniowe (LBA) W trybie LBA dowolny adres sektora X o parametrach C#xH#XS#X przekształcany jest na kolejny numer obliczany na podstawie wzoru: LBA = [ (C#X x H#T + H#X) x S#T] + S#X - l H#T i S#T stanowią parametry dysku po translacji geometrii C#GH#GS#G => C#TH#TS#T są to te same wartości, które znaleźć można w słowach 3 i 6 bloku informacyjnego zwracanego po komendzie DEVICE IDENTIFY. Adres LBA = 0 odnosi się zawsze do pierwszego sektora pod głowicą zerową na zerowym cylindrze. Przykład: Parametry geometryczne C#G:H#G:S#G =2000:16:63 Translacja parametrów C#T:H#T:S#T=1000:32:63 Sumaryczna liczba sektorów dysku wynosi 2016 000. System operacyjny porusza się w zakresie określonym parametrami translacyjnymi i nie wykracza poza obszar l 000 cylindrów. BIOS tłumaczy otrzymane wartości na liczbę LBA i przekazuje ją do dysku. Oto kilka przykładowych przeliczeń adresów dla omawianej tu konfiguracji. C#X:H#X:S#X; LBA 0:0:1; 0 500:0:1; 1 008 000 500:16:2; 1 009 009 999:31:63; 2015999 W trybie LBA sektory adresowane są za pomocą liczby 28-bitowej. Poszczególne pozycje bitowe takiego adresu tworzone są z następujących składowych: •LBA 0-7 - rejestr numeru sektora (l F3h), • LBA 8-15 - rejestr numeru cylindra, składowa LSB (lF4h), •LBA 16 - 23 - rejestr numeru cylindra, składowa MSB (l F5h), •LBA 24 - 27 - bity O - 3 rejestru napęd/głowica (l F6h). Dysk rozpoznaje tryb adresowania (CHS lub LBA) oceniając każdorazowo stan bitu 6 w rejestrze lF6h. Translacja XCHS (eXtended Cylinder-Head-Sector) Sam BIOS może, zgodnie z tabelą 7.9, zarządzać dyskami o pojemności do 7,9 GB. Jeżeli można by było przekazać do złącza E1DE więcej niż 16 głowic granica 504 MB zaczyna wędrować w górę. Dysk EIDE z kolei jest w stanie zaakceptować zarówno zwiększoną liczbę sektorów na ścieżce jak i większą liczbę cylindrów. Można więc, zachowując taką samą wartość pojemności tak manipulować komponentami CHS by wynik końcowy pozostał bez zmian. Tabela 7.9. Translacja XCHS omijająca barierę 504 MB Interfejs; Możliwości INT 13hBIOS; Możliwości złącza EIDE; Zakres translacji XCHS; Liczba sektorów na ścieżce; 63; 255; 63; Liczba głowic; 256; 16; 256; Liczba cylindrów; 1 024; 65536; 1 024; Maksyma/na pojemność; 7,88 GB; 127 GB; Algorytm dokonujący translacji XCHS pracuje według następującej prostej reguły: liczba cylindrów dysku jest dzielona przez dwa a w zamian za to zwiększana jest liczba głowic. Operacje te są tak długo powtarzane, aż liczba cylindrów znajdzie się w obszarze obsługiwanym przez BIOS - poniżej 1025. W ten sposób system BIOS trzyma pod kontrolą dyski o pojemności przewyższającej 504 MB. Raz ustalone dla danego dysku parametry translacji są zapamiętywane i korzysta się z nich w cyklach dostępu. Tabela 7.10. Algorytm translacjiXCHSpodwyższający liczbę głowic Liczba cylindrów przed translacją; Liczba glowic przed translacją; Translacja liczby cylindrów;Translacja liczby glowic; 0-1024; <16; bez zmiany bez zmiany 1025-2048; <16; <1024; <32 2047-4096; <16; <1024; <64 4097-0191; <16; <1024; <128 8192-16384; <16; <1024; <256 8193-32768; <16; <1024; <512 Bariera 2 GB Wystąpienie tego problemu ma związek nie tyle z samym systemem adresowania co z pamięcią konfiguracyjną (CMOS) w której BIOS przechowuje parametry geometrii dysku. Wiele wczesnych wersji BIOS przeznaczało na pole poświęcone liczbie cylindrów jedynie 12 bitów. W wyniku tego pojawia się następujące ograniczenie: Tabela 7.11. Tworzenie bariery 2 GB PUSTE; Liczba sektorów na ścieżce; Liczba głowic; Liczba cylindrów; Maksymalna pojemność; Dostępna liczba bitów; 6; 4; 12; PUSTE; Zakres; 1-63; 0-15; 0 - 4 095; PUSTE; Ograniczenie; 63; 16; 4096; 1,97 GB System FAT (bariera 2 047 MB) System zarządzania logicznymi strukturami danych na dysku prowadzi tzw. tablice przydziału (FAT - File Allocation Tables). Jednostki przydziału (Clusters) grupują pewną liczbę sektorów. Maksymalny rozmiar tablicy przydziału w systemie FAT-16 wynosi (w przypadku MS-DOS i wczesnych wersji Windows 95) jedynie 65 525 a pojedynczy klaster nie może być większy niż 32 kB. Późniejsze wersje Windows 95 (począwszy od SR-2) miały zaimplementowany FAT-32, który pokrywa swym zasięgiem dużo większe dyski. Bariera 4 GB Wszystkie wersje MS-DOS (włącznie z tą zawartą w Windows 95) nie są w stanie posługiwać się wartością głowic większą od 255 (w szczególności 256). Sytuacja taka pojawia się w przypadku dysków o liczbie cylindrów większej lub równej 8 192 (w wyniku translacji mamy przejście z 16 na 256 głowic). Tabela 7.12. Tworzenie bariery 4 GB Puste; Liczba sektorów na ścieżce, Liczba głowic, Liczba cylindrów, Maksymalna pojemność, Dostępna liczba bitów, 6, 4, 13, Puste; Zakres, 1 -63, 0- 15, 0-8 190, Puste; Ograniczenie, 63, 16, 8 191, 3,94 GB Jakkolwiek źródeł tego problemu należy szukać w systemie operacyjnym, jego rozwiązanie jest stosunkowo łatwe do zaimplementowania w ramach struktur translacyjnych LBA lub XCHS. Wyróżniamy dwie formy korekcji: • Zmodyfikowana wersja generowania adresu liniowego A-LBA (Assisted LBA) polegająca na ograniczenie liczby głowic do 255 • Konwersja wstępna R-XCHS (Revised XCHS), gdzie jeszcze przed właściwą translacją redukuje się liczbę głowic z 16 do 15 a w zamian za to podwyższeniu ulega liczba cylindrów w stosunku 16/15. Windows NT - bariera 4 GB Maksymalny rozmiar partycji, na której instalowany jest system operacyjny Windows NT również nie może przekraczać 4 GB. Ograniczenie to nie ma jednak żadnego związku z omawianą w tym punkcie barierą 4 GB. Nawet jeśli z góry wiadomo, iż decydujemy się na system NTFS, program instalacyjny formatuje wstępnie taką partycje zgodnie z systemem FAT-16 (maksymalny rozmiar klastrów w przypadku NT wynosi 64 kB zamiast 32 kB) i dopiero potem dokonuje konwersji na NTFS. Bariera 8 GB 8 GB jest ogólną granicą, powyżej której nie mogą sięgać funkcje BIOS obsługujące przerwanie INT13h. Nie oznacza to jednak, iż daje ona znać o sobie wyłącznie w przypadku dysków o pojemności przekraczającej 8 GB. Powróćmy jeszcze raz na chwilę do ostatniego wiersza tabeli translacyjnej. Tłumaczenie parametrów dysku o 16 385 cylindrach (lub więcej) daje przeliczenie liczby głowic z 16 na 512. Kanał informacyjny INT13H przeznacza na liczbę głowic pole 8 bitowe i w żadnym przypadku nie jest w stanie zaakceptować wartości 512. Widać więc wyraźnie, iż liczba cylindrów nie może przekraczać 16 384. Dla uniknięcia sytuacji tego rodzaju, specyfikacja ATA-3 zaleca, by dyski deklarujące więcej niż 8 głowic nie używały więcej niż 16383 cylindrów. Tabela 7.13. Tworzenie bariery 8 GB Puste; Liczba sektorów na ścieżce; Liczba głowic; Liczba cylindrów; Maksymalna pojemność; Dostępna liczba bitów; 6; 4; 14; Puste; Zakres; 1 -63; 0-15; 0-16383; Puste; Ograniczenie; 63; 16; 16384; 7,88 GB Jeżeli BIOS ma zaimplementowany jeden z mechanizmów omijania bariery 4 GB, omawiana granica 8 GB przesuwa się jeszcze nieco w dół, a poza tym nie każda kombinacja wartości wstępnych CXHXSX jest w ogóle transformowalna. Tabela 7.14. Bariera 8 GB w komputerach z zaimplementowanym mechanizmem omijania bariery 2 GB A-LBA; Liczba sektorówna ścieżce; Liczba głowic; Liczba cylindrów; Razem sektorów; Maksymalna pojemność Największa wartość wstępna; 63; 16; 16320; 16450560; 7,88 GB Maksymalny wynik translacji; 63; 255; 1 024; 16450560; 7,88 GB R-XCHS; Liczba sektorówna ścieżce; Liczba głowic; Liczba cylindrów; Razem sektorów; Maksymalna pojemność; Największa wartość wstępna; 63; 16; 15360; 15 482 880; 7,38 GB; Maksymalny wynik translacji; 63; 240; 1 024; 15 482 880; 7,38 GB; Granica 8GB wyznaczana przez BIOS stanowi barierę również dla systemów operacyjnych odwołujących się do dysku poprzez własne sterowniki i nie korzystających z przerwania INT13h. Wynika to z prostego faktu, iż proces ładowania systemu operacyjnego odbywa się pod kontrolą BIOS. Przynajmniej więc partycja, z której uruchamia się komputer oraz gdzie umieszczone są ewentualnie programy zarządzające konstrukcjami wielo systemowymi (Boot-Manager) musi być ograniczona do zakresu 8 GB. Straty pojemności Jeżeli w operacjach dzielenia podczas przeliczania parametrów pojawi się reszta, algorytmy translacyjne zaokrąglają w dół, co jest jedynym rozsądnym rozwiązaniem gwarantującym, iż na dysku nie pojawią się „nieistniejące" sektory. Jeśli zaokrąglenie miało miejsce (co zależy od konkretnych kombinacji CHS i przyjętego typu translacji) dysk traci część ze swej fizycznej pojemności. Oto przykład „z życia". Wybrany został dysk Maxtor 85120A o parametrach CHS zestawionych w tabeli 7.15. Jak widać strata pojemności zależy od zastosowanej translacji. Tabela 7.15. Strata pojemności dla dysku Mcator 85120A Puste; Parametry fabryczne; Translacja A-LBA; XCHS; R-XCHS; CHS; 9924x 16x63; 622 x 255 x 63; 620 x 256 x 63; 661 x 240x63 Konwersja wstępna: 10585 x 15 x 63 Liczba sektorów; 10003392; 9 992 430; 9 999 360; 9 994 320 Pojemność; 4 884,47 MB;4 879,12 MB; 4 882,50 MB; 4 880,04 MB Strata sektorów; Puste;10962; 4032; 9072 Strata pojemności; Puste; 5,35 MB; 1,97 MB; 4,43 MB Przekraczanie bariery 8 GB Wyjście poza limit 8 GB nie jest możliwe bez poszerzenia kanału informacyjnego przerwania INT13h. Rozszerzenia takie zaproponowane zostały przez firmę Phoenix produkującą znaczną część programów BIOS dla komputerów PC. Nowe funkcje (określane często wspólną nazwą Enhanced BIOS Services) pracują na 64 bitowych adresach ŁBA i obejmują swoim zasięgiem przestrzeń dyskową o wymiarze 16 x 10^18 Bajtów. Obsługiwane są również napędy mediów wymiennych. Tabela 7.16 prezentuje pokrótce te funkcje. Funkcje zwracające się do określonych sektorów dysku (42h, 43h, 44h i 47h) oczekują swoich parametrów w zdecydowanie innej formie niż te do których przywykliśmy posługując się podstawowymi funkcjami przerwania INT13h. Para rejestrów DS:SI niesie w sobie wskaźnik do specjalnej 16-bajtowej tablicy informacyjnej (Disk Address Packet}- tabela 7.17. Tabela 7.16. Funkcje Enhanced BIOS Services Funkcja; Nazwa; Znaczenie 41h; Check Extensions Present; Funkcja odwołuje się do określonego urządzenia w celu potwierdzenia zdolności do obsługi funkcji rozszerzeń INTISh. Urządzenie zwraca szczegółową informację włącznie z wersją zaimplementowanej specyfikacji. 42h; Extended Read; Odczyt sektora. 43h; Extended Write; Zapis sektora (z lub bez weryfikacji). 44h; Verify Sectors; Czytanie kontrolne sektora bez pobudzania do działania interfejsu magistrali. 45h; Lock/Unlock Media;Logiczna implementacja blokady wyrzutnika nośnika z napędu mediów wymiennych. 46h; Eject Removable Media; Polecenie wyrzucenia nośnika z napędu mediów wymiennych. System wydający ten rozkaz musi zadbać o utrwalenie na nośniku wszelkich informacji znajdujące się w buforach. 47h; Extended Seek; Polecenie pozycjonowania głowic nad określonym sektorem, traktowane jako przygotowanie do przewidywanej operacji I/O. 48h; Get Drive Parameters; Funkcja zwraca parametry fizyczne urządzenia takie jak geometria (CHS), rozmiary sektora, ewentualnie szczegóły techniczne realizacji funkcji wymiany nośników. 49h; Get Extended Media Change Status; Funkcja informuje o ewentualnej zmianie nośnika w napędzie obsługującym media wymienne. 4Eh; Set Hardware Configuration; Funkcja ustawia tryby PIO i DMA. Tabela 7.17. Struktura tablicy informacyjnej Disk Address Packet Bajt; Typ; Opis; 0; Byte; 10h. rozmiar tablicy 16 bajtów 1; Byte; 00h 2; Byte; Liczba bloków do przesłania, dopuszczalna wartość maksymalna wynosi 127 3; Byte; 00h 4-7; Double Word; 32-bitowy adres lokalizacji w pamięci w formie Seg:Off. Z obszaru tego pobierane są dane przy operacji zapisu a do niego przesyłane dane przy operacji odczytu. 8-15; Quad Word; 64-bitowy adres liniowy sektora (LBA). Jeżeli urządzenie może pracować w trybie LBA adres ten przekazywany jest w formie bezpośredniej, a jeżeli nie. to następuje przeliczenie na składniki CHS. Prędkości transmisji danych Jakkolwiek w chwili obecnej na rynku dominuj ą produkty pracujące w trybie UDMA/33 (i stopniowo pojawiają się modele dostosowane do UDMA/66) w tej części rozdziału omówione zostaną również inne, wcześniej stosowane tryby pracy. Najszybsze z aktualnych modeli dysków ze złączem IDE3 (Dysk firmy Maxtor (92048D8), Model Diamond Max Plus 5120 (19 GB/7 200 obr/min) jako pierwszy przekroczył barierę 20 MB/s.), nadal nie wykorzystują w pełni możliwości oferowanych przez kanał UDMA/33 ale sporo z nich przekracza jednak limit 16 MB/s trybu PIO4. Należy jednak pamiętać, iż tryby UDMA to nie tylko prędkość ale i zwiększenie bezpieczeństwa transmisji dzięki wprowadzenia mechanizmów kontrolnych. W trybach UDMA magistrala kluczowana jest obydwoma zboczami impulsów zegarowych, za każdym razem przesyłane są po dwa bajty. Tabela 7.18 stanowi przegląd dostępnych trybów transmisji danych. Tabela 7.18. Tryby transmisji danych Tryb; Maksymalny transfer [MBz]; Zegar UDMA [MHz]; PIO 0; 3,33; PIO 1; 5,22; PIO 2; 8,33; PIO 3; 11,11; PIO 4; 16,66; Singleword DMA 0; 2,08; Singleword DMA 1; 4,16; Singleword DMA 2; 8,33; Multiword DMA 0; 4,16; Multiword DMA 1; 13,33; Multiword DMA 2; 16,66; Ultra DMA 0; 16,66; 4,16; Ultra DMA 1; 25,00; 6,25; Ultra DMA 2 (UDMA/33); 33,33; 8,33; Ultra DMA 3 (UDMA/44); 44,44; 11,11; Ultra DMA 4 (UDMA/66); 66,64; 16,66; Tryby PIO Przy przesyłaniu danych z kontrolera do pamięci PC dyski AT-BUS wykorzystują klasyczny tryb przekazu z udziałem portu danych (PIO). W kontrolerach IDE wykorzystywany był tryb PIO O, zapewniający przesłanie w jednym cyklu, trwającym 280 ns, 16 bitów danych, co odpowiada 3,33 MB/s. Ta prędkość transmisji jest z jednej strony znacznie niższa od maksymalnej prędkości magistrali ISA (8,3 MB/s), a z drugiej wyższa niż maksymalna prędkość transmisji danych z głowicy do kontrolera (na przykład dysk wirujący z prędkością 3 600 obr/min, który na jednej ścieżce ma 100 sektorów 512-bajtowych, może w ciągu sekundy przesłać 60 razy po 51 200 bajtów, czyli 3 MB/s). Postęp technologiczny (zwiększenie prędkości obrotowej talerzy i podniesienie gęstości zapisu czyli liczby sektorów na ścieżce) sprawił, że prędkość transferu danych z głowicy do kontrolera przekroczyła możliwości interfejsu IDE. W pewnym momencie na rynku zaczęły pojawiać się dyski osiągające transfer przekraczający możliwości trybu PIO 0. Dla potrzeb obsługi urządzeń tego typu zdefiniowane zostały kolejne tryby PIO l - 3 (patrz rysunek 7.13) Standard ElDE wykorzystujący tryb PIO 3 zapewnia transfer z prędkością 11,11 MB/s. Ponieważ parametry transmisji w tym trybie przekraczają możliwości magistrali ISA, adaptery EIDE musiały korzystać z magistrali VESA Local Bus a później PCI. To samo odnosi się oczywiście do pracy w trybie PIO 4 (ponad 16 MB/s). Tryby DMA Komputery klasy XT do komunikacji z dyskiem wykorzystywały kanał DMA. Ze względu na konieczność zachowania zgodności „w dół" (kompatybilności) moduł DMA modelu XT znalazł swe odbicie w architekturze komputera AT. Standard EIDE (rysunek 7.15) oferuje bezpośredni dostęp do pamięci w trybie l standardu Multi-Word-DMA). Przewaga trybów DMA nad PIO sprowadza się do wyłączenia transferu spod bezpośredniej kontroli procesora - może on pracować zamiast nadzorować transmisję danych. Niestety, w typowych komputerach klasy PC brakuje podstawowego ogniwa umożliwiającego transmisję kanałami DMA - szybkiego, nowoczesnego kontrolera DMA. Definicje trybów Singleword-DMA zostały poniechane i nie występują w specyfikacjach ATA począwszy od wersji ATA-4. Tryb Ultra DMA/33 Zasady pracy w trybie UDMA/33 (nazywanym też Ultra-ATA) ujęte zostały w specyfikacji ATA/ATAPI-4. Jego główna zaleta to zwiększenie prędkości przesyłania danych. W porównaniu z najszybszymi jak dotąd trybami pracy (PIO-4 i MDMA-2) UDMA/33 oferuje podwojenie prędkości do poziomu 33,3 MB/s. Podwojenie to uzyskuje się wyłącznie dzięki zmianom w protokole, obydwa zbocza sygnału strobującego wyzwalają przesłanie jednego słowa. UDMA/33 jest całkowicie zgodny „w dół" a dla jego zaimple-mentowania wymagane są jedynie niewielkie zmiany. Ponieważ częstotliwość żadnego z sygnałów nie ulega zwiększeniu, system może posługiwać się dotychczas stosowanymi przewodami połączeniowymi. UDMA/33 wprowadza od dawna oczekiwany mechanizm kontroli spójności transmitowanych danych. Odbywa się to przy pomocy kodów CRC. Zmniejszona zostaje również sama podatność na przekłamania spowodowane odbiciami sygnałów na skutek niedopa-sowań impedancji. Specyfikacja UDMA/33 określa dokładne wartości szeregowych rezystancji wprowadzanych do linii magistrali zarówno po stronie urządzeń jak i kontrolera. Maksymalna długość przewodu połączeniowego wynosi nadal 46 cm (18") - specyfikacja UDMA/33 nie wnosi tu nic nowego. Zaleca się jedynie, by niezależnie od długości przewodu, odległość pomiędzy urządzeniami wynosiła 15 cm (6"). Protokół • W przeciwieństwie do trybów pracy PIO i DMA to nie Host-Adapter narzuca tempo transmisji. Źródłem impulsów kluczujących urządzenie, czyli zwykle dysk. • Poprzez przedefiniowanie znaczenia egzystujących już linii magistrali IDE (ATA) utworzone zostają nowe sygnały, zebrane w tabeli 7.19. Przedefiniowania to ma miejsce wyłącznie na czas trwania cyklu transmisyjnego U-DMA (UDMA Burst), Cykl taki trwa od momentu aktywacji -DMACK i kończy się z chwilą zwolnienia -DMACK. Wszystkie sygnały standardu ATA zachowują swoje klasyczne funkcje aż do momentu aktywowania -DMACK. W trakcie cyklu UDMA mogą wystąpić kombinacje sygnałów, które w normalnych warunkach są niedopuszczalne, np. jednoczesna aktywacja -DIOR i -DIOW. Wyjście z cyklu UDMA (zwolnienie -DMACK) poprzedzane jest przez powrót wszystkich sygnałów do stanu spoczynkowego w sensie funkcji ATA. Tabela 7.19. Nowe sygnały wykorzystywane w transmisji UDMA/33 Linie IDE-BUS; Znaczenie w cyklach odczytu UDMA; Znaczenie w cyklach zapisu UDMA; IORDY (pin 27); DSTROBE; DDMARDY ~DIOR(pin25); HDMARDY; HSTROBE ~DIOW (pin 23); STOP; STOP Przewiduje się różne wersje (poziomy) protokołów UDMA, różniące się od siebie w pierwszym rzędzie prędkością transmisji. Zgodnie z tą konwencją, Ultra DMA/33 nosi też miano UDMA typu 2 (UDMA-2). Konstrukcja protokołu umożliwia oczywiście (zgodność „w dół") koegzystencję urządzeń z interfejsem UDMA i urządzeń pozbawionych tych możliwości. W takim wypadku podejmowany jest klasyczny protokół ATA. Strona (Host-Adapter lub urządzenie), która identyfikuje się jako zdolna do realizacji protokołu UDMA określonego poziomu musi być w stanie odbierać dane w rytmie narzuconym przez specyfikację (czas cyklu TCYC)- Nie stanowi natomiast żadnego pogwałcenia protokołu wysyłanie danych w tempie wolniejszym od maksymalnego lub wręcz chwilowe zatrzymanie zegara (STROBE). Procedura uzgadniania pracy w trybie UDMA przebiega w następujący sposób. Host-Adapter wysyła rozkaz IDENTIFY DEVICE i otrzymuje informację o ewentualnej zdolności urządzenia do pracy w określonym trybie UDMA. Host-Adapter może włączyć lub wyłączyć zdolność UDMA urządzenia poprzez wystosowanie rozkazu SET FEATURES. Zainicjowanie cyklu UDMA (Faza inicjalizacji) może odbywać się wyłącznie na żądanie urządzenia, które aktywuje DMARQ. Host-Adapter potwierdza przyjęcie zgłoszenia aktywując -DMACK i negując STOP. Od tego momentu może rozpocząć się transmisja. Przejście do fazy transmisji zaznaczane jest przez aktywację -HDMARDY (Host-Adapter w cyklach odczytu) lub -DDMARDY (urządzenie w cyklach zapisu). W fazie transmisji liniami DO - Dl5 przesyłane są dane. Magistrala przekazuje dane w rytmie wyznaczanym przez obydwa zbocza sygnału kluczującego. Sygnałem tym jest HSTROBE lub DSTROBE, zależnie od kierunku transmisji. Żądanie wstrzymania (przerwa) odbywa się poprzez zanegowanie -DMARDY przez stronę odbierającą dane, tj. -HDMARDY przy odczycie lub -DDMARDY przy zapisie. Protokół przewiduje, iż urządzenie nadające musi mieć czas na zatrzymanie synchronicznego mechanizmu zegarowego (STROBE). Strona odbiorcza powinna więc być przygotowana na ewentualne przyjęcie jeszcze dwóch słów, których wysłania nie dało się już uniknąć. Zakończenie cyklu UDMA może nastąpić zarówno na życzenie Host-Adapter jak i urządzenia. Faza kończąca wprowadzana jest poprzez specjalną sekwencję sygnałów sterujących zależnych od aktualnego kierunku transmisji. Jakkolwiek strona nadawcza nie otrzymuje potwierdzenia dla każdego wysłanego słowa, ma miejsce stała kontrola spójności przekazu poprzez kod CRC. Kontrola obejmuje swym zakresem cały aktualny cykl UDMA (Burst). Zarówno strona nadawcza jak i odbiorcza wyposażone są w 16-bitowe rejestry CRC, które podlegają wyzerowaniu przed każdym cyklem. Niezależnie od aktualnego kierunku transmisji, zawartość rejestru CRC po stronie Host-Adapter przesyłana jest w fazie kończącej (wraz z opadającym zboczem DMACK) do urządzenia, które dokonuje porównania ze stanem swojego rejestru CRC. Jeśli wystąpiły błędy kontroler ustawia jeden z bitów w rejestrze błędów (port AT-Task-File). Możliwe błędy to przerwana transmisja lub rozbieżności kodów CRC po stronie nadawczej i odbiorczej. Obowiązek odczytania rejestru błędów spoczywa na programowym sterowniku obsługującym tryb UDMA. Jeśli wystąpił błąd, konieczna jest powtórka ostatniego przekazu. Częste powtórki obniżają naturalnie efektywną prędkość transmisji. Rozsądnie zaprogramowany sterownik powinien obniżać w takim wypadku tryb UDMA do poziomu niższego dla zredukowania podatności na błędy. Specyfikacja ATA-4 mówi, iż po załączeniu zasilania (Power On) urządzenia znajdują się w trybach NON-UDMA, to samo wywołuje zresztą przeprowadzenie wyzerowania (reset sprzętowy). Reset programowy (Soft-Resei) i reset urządzenia nie mają wpływu na ustawiony tryb UDMA. Tryb Ultra DMA/66 Transport danych z powierzchni dysku do pamięci komputera przebiega w dwóch etapach. W pierwszym odbywa się pobranie danych do pamięci podręcznej zintegrowanego z dyskiem kontrolera a w drugim następuje przekazanie (poprzez interfejs IDE) do pamięci operacyjnej. Szybkość transferu na pierwszym odcinku nie zależy w najmniejszym stopniu od możliwości oferowanych przez interfejs IDE. Samo podniesienie prędkości pracy magistrali IDE przynosi korzyści w stosunku do danych, które zostały pobrane z powierzchni dysku i znajdują się już w pamięci podręcznej kontrolera. To samo odnosi się do cykli zapisu: kontroler może przyjąć pewną (zależną od pojemności pamięci) ilość danych w tempie określonym przez interfejs. Po kolejnych coraz to szybszych trybach UDMA nie należy oczekiwać żadnych cudów. Czynnikami decydującymi o faktycznej prędkości transmisji są nadal szczegóły konstrukcyjne dysku: prędkość wirowania i gęstość zapisu. Specyfikacja trybów UDMA-3(Tryb UDMA/44 został co prawda zdefiniowany ale nie doczekał się praktycznej realizacji, bowiem nastąpiło bezpośrednie przejście z UDMA/33 na UDMA/66.) i UDMA-4 nakłada obowiązek stosowania specjalnego okablowania. O ile sama magistrala IDE składa się nadal z 40 przewodów sygnałowych, każdy z nich oddzielony zostaje od sąsiada dodatkową linią masy. Tak zmodyfikowany 80-żyłowy kabel (impedancja falowa 82 om) zakończony jest tymi samymi 40-końców-kowymi wtykami. Jednak ze względu na opisaną poniżej konieczność rozpoznawania rodzaju kabla, trzy wtyki są przypisane do określonych urządzeń i oznakowane różnymi kolorami: niebieski od strony kontrolera, czarny Master i szary Slave. System taki pozwala naturalnie na zagwarantowanie zgodności „w dół" - nowy kabel może obsługiwać stare urządzenia, a dyski UDMA-4 dają się podłączyć do klasycznego przewodu. Nie wolno jednak aktywować szybkiego trybu jeśli mamy do dyspozycji klasyczny przewód. Dlatego właśnie urządzenia zdolne do pracy w trybie UDMA-3 i wyższych muszą mieć zaimplementowaną sprzętową zdolność do rozpoznawania typu kabla. W oparciu o wynik tego rozpoznania Host aktywuje lub nie stosowny tryb UDMA. Procedury detekcji przejęte zostały ze specyfikacji ATA/ATAPI-4. Sprzętowe rozpoznanie typu kabla bazuje na ocenie poziomu napięcia na linii 34( Pierwotna specyfikacja IDE przypisała linię 34 (-PDIAG) dla celów komunikacji pomiędzy jednostkami Master i Slave, przez co końcówka ta jest niejako wolna od strony kontrolera (Host). Wtyk kabla 80-liniowego (niebieski) zwiera ją do masy. i może być realizowane na jeden z dwóch sposobów: • Metoda podstawowa, detekcja od strony Host (Host Based Cable Detectiori). Host powoduje aktywowanie linii 34 (-CBLID) i bada jej stan. Jeżeli poziom napięcia leży poniżej V#IL to mamy do czynienia z kablem 80-liniowym a jeśli powyżej V#IH to przewód składa się z 40 linii. • Metoda alternatywna, detekcja od strony urządzenia (Device Based Cable Detection). Specyfikacja ATA/ATAPI-4 nakłada na urządzenia sterujące (Host) spełniające wymóg UDMA>2 konieczność blokowania linii -PDIAG/-CBLID przy pomocy kondensatora 0,047 mikrofarada. Na tej samej linii (ale od strony dysku) zainstalowany jest rezystor 10kilooma podnoszący poziom do napięcia zasilającego (Pull-Up). Kontroler wysyła do dysku rozkaz IDENTIFY, który powoduje aktywację sygnału -PDIAG (sprowadzenie do masy) na czas co najmniej 30 us. Pozwolnieniu sygnału dysk odczekuje 2-13 us i mierzy poziom napięcia na linii. Wynik pomiaru umieszczany jest w bicie 13 słowa 93. Jeżeli poziom był mniejszy od V#IL bit jest zerowany (kabel 40) a jeżeli większy od V#IH to ustawiany (kabel 80). Przewód 80-liniowy istotnie wpływa na jakość przesyłanych sygnałów poprawiając przede wszystkim stromość zboczy impulsów, redukując odbicia i zmniejszając przesłuchy międzyliniowe (rysunek 7.17). W ramach specyfikacji UDMA>2 operuje się innym kryterium minimalnych stromości zboczy impulsów. Zamiast dotychczas używanych czasów narastania i opadania (nie dłuższych od 5 ns) określa się szybkość narastania i opadania wynoszącą 1,25 V/ns. Zwiększenie liczby urządzeń Standard EIDE wprowadził oficjalnie drugi adapter IDE do komputera PC (rysunek 7.18). Niestety nie wyspecyfikowano ani adresu portu I/O, ani linii przerwania IRQ. Przemysł wykorzystuje więc IRQ15 oraz porty skupione wokół adresów bazowych 170h i 376h. W każdym kanale można włączyć dwa urządzenia IDE, które pracują jako Master lub Slave. Jeżeli rozpatrzymy konfigurację przedstawioną na rysunku 7.18 (oczywiście wszystkie urządzenia mogą być dyskami twardymi), otrzymamy następującą kolejność: •dysk Master adaptera pierwotnego, • dysk Slave adaptera pierwotnego, • CD-ROM Master adaptera wtórnego, • streamer Slave adaptera wtórnego. Większość producentów adapterów EIDE postępuje według najtańszej metody dopuszczonej przez specyfikację -jedynie kanał pierwotny jest sprzężony z magistralą (VL lub PCI), natomiast kanał wtórny stanowi przedłużenie magistrali ISA. Podejście tego typu było uzasadnione, bowiem drugi kanał obsługiwał grupę wolniejszych urządzeń zewnętrznych, takich jak CD-ROM-y czy streamery, które na początku nie osiągały prędkość transmisji powyżej l MB/s. Konfiguracja taka traci sens w przypadku nowoczesnych napędów CD-ROM sięgających zakresu powyżej 7 MB/s (x50). Poszerzenie oferty urządzeń IDE Standard ATAPI (AT Attachment Packet Interface) określa parametry techniczne, jakie muszą spełnić urządzenia (czytniki i nagrywarki CD-ROM, napędy taśm czy media wymienne) podłączane do adaptera EIDE. Nowe rozkazy Najważniejsze rozszerzenia stanowi ą rozkazy: • Read-DMA (C8h i C9h) • Write-DMA (CAh i CBh) poszerzone o funkcje błędów, które występują tylko w trybach UDMA. Rejestr błędów (Error Register} dostarcza wówczas następujących informacji: • ustawiony bit 2 (ABRT) sygnalizuje przerwanie transmisji, • ustawiony bit 7 (ICRC) wskazuje na błąd CRC. Blok informacyjny po komendzie IDENTIFY W tabeli 7.20 zostały zebrane zmiany w bloku informacji o dysku wprowadzone przez rozszerzenie EIDE. Struktura całego bloku danych o dysku została zamieszczona w tabeli 7.6. Tabela 7.20. Struktura bloku danych o dysku, rozszerzenia EIDE Słowo; Bit; Opis; 0; 15; 1 - ATAPI, 0 - ATA. 53; 2; 1 - ultra DMA jest zaimplementowane, dalsze informacje zawarte są w słowie 88, 0 - urządzenie nie może pracować w trybie Ultra DMA, słowo 88 bez znaczenia. 80; 1; 1 - urządzenie zna rozkazy zgodne ze specyfikacją ATA- 1. 80; 2; 1 - urządzenie zna rozkazy zgodne ze specyfikacją ATA-2. 80; 3; 1 - urządzenie zna rozkazy zgodne ze specyfikacją ATA-3. 80; 4; 1 - urządzenie zna rozkazy zgodne ze specyfikacją ATA-4. 81; 15-0; Podnumer wersji specyfikacji ATA (np. dla ATA-4. 5 mamy 5) 82; 0; 1 - urządzenie zna system S. M. A. R. T. 82; 1; 1 - urządzenie zna rozkazy systemu zabezpieczeń. 82; 2; 1 - urządzenie zna rozkazy obsługi nośników wymiennych. 82; 3; 1 - urządzenie zna rozkazy obsługi system zarządzania poborem mocy. 83; 14;musi być ustawiony na 1 83; 15; musi być ustawiony na 0 88; 0; 1 -urządzenie może pracować w trybie Ultra DMA 0. 88; 1; 1 -urządzenie może pracować w trybach Ultra DMA 1 lub Ultra DMA 0. 88; 2; 1 -urządzenie może pracować w trybach Ultra DMA 2 DMA 0, Ultra DMA 1 lub Ultra DMA 0 88; 3; 1 -urządzenie może pracować w trybach Ultra DMA 3 lub Ultra DMA 2, Ultra DMA 1,Ultra DMA 88; 4; 1 - urządzenie może pracować w trybach Ultra DMA 4, Ultra DMA 3, Ultra DMA 2, Ultra DMA 1 lub Ultra DMA 0. 88; 8; 1 - urządzenie znajduje się w trybie Ultra DMA 0. 88; 9; 1 - urządzenie znajduje się w trybie Ultra DMA 1. 88; 10; 1 - urządzenie znajduje się w trybie Ultra DMA 2. 88; 11; 1 - urządzenie znajduje się w trybie Ultra DMA 3. 88; 12; 1 - urządzenie znajduje się w trybie Ultra DMA 4. 93; 13;1 - system autodetekcji rozpoznał kabel 80-żyłowy. 0 - system autodetekcji rozpoznał kabel 40-żyłowy. Informacja ma znaczenie wyłącznie dla urządzeń mogących pracować w trybie UDMA-2 lub wyższym. 128; 0-8; Pola informacyjne systemu zabezpieczeń Standard SCSI Magistrala SCSI (Smali Computer System Interface) stanowi ogólną koncepcję szyny równoległej łączącej urządzenia, które mogą wymieniać między sobą dane. W swej pierwotnej wersji (8-bitowej) szyna mogła obsługiwać do ośmiu urządzeń, późniejsze rozszerzenia standardu dopuszczają ich dwukrotnie więcej. Pojęcia SCSI nie należy utożsamiać wyłącznie z dyskami twardymi. System ten może łączyć ze sobą bardzo różnorodne urządzenia: oprócz dysków twardych napędy jednostek taśmowych, czytniki i nagrywarki CD-ROM oraz DVD, skanery, a także różnorodne media wymienne takie jak JAZZ, ZIP itp. Ogólny opis systemu Początkowo system powstał dla potrzeb obsługi komunikacji w obrębie stacji roboczych i minikomputerów. Pierwowzór nosił nazwę SASI (Shugart Associates System Interface) i opracowany został w firmie Seagate. Magistrala SCSI w swej dzisiejszej formie egzystuje w zasadzie od 1982. Od 1986 roku uznana została jako standard przez ANSI (American National Standards Institute - Amerykański Komitet Normalizacyjny) i wydana w formie dokumentu ANSIX3.131-1986. Skoro tylko świat komputerów klasy PC odkrył dla siebie zalety tego systemu, rozpoczęto niezbędne modyfikacje. Ponieważ działania komitetu normalizacyjnego przebiegały opieszale, wielu producentów zaczęło wprowadzać na własną rękę swoje „pseudo-stan-dardy". Doprowadziło to do sytuacji, że na rynku pojawiły się kontrolery i urządzenia, które mimo iż reprezentowały „standard SCSI" nie mogły się ze sobą porozumieć. Doprowadzona wreszcie do szczęśliwego finału procedura normalizacyjna spowodowała powstanie tzw. standardu SCSI-1. Norma ta przewidywała jednak pewne furtki wbudowane w celu uelastycznienia systemu i aby nie wiązać rąk producentom. Ta nadmierna elastyczność doprowadziła do tego, że norma normą być przestała. Kolejna próba normalizacji tego trudnego zagadnienia ujęta została w zespole dokumentów X3T9.2/86-109 (szkic) i X3T9.2/85-52 (zestaw rozkazów), które stanowią de facto (choć sąjedynie tzw. propozycjami) od dawna oczekiwany standard SCSI-2. Należy jednak od razu dodać, że różni producenci skwapliwie wykorzystują fakt, że nie wszystkie standardowe rozkazy muszą być implementowane. Tak więc mamy znowu urządzenia, które - niby zgodne z normą SCSI-2 (w zakresie tych rozkazów, które implementują) - nie mogą współpracować z innymi, które zakładają szerszą gamę poleceń. W roku 1990 niektóre z rozkazów SCSI (wraz z rozlicznymi towarzyszącymi im parametrami) zebrane zostały w ramach normy (a nie propozycji) SCSI-2, co pozwala żywić nadzieję na ostateczne rozwiązanie problemu. Do głównych cech, które odróżniają SCSI-1 od SCSI-2, należy zaliczyć: • Ujednolicony i poszerzony zestaw rozkazów. • Możliwość pracy w szybszym trybie (Fast SCSI), tj. podniesienie przepustowości magistrali do 10 MB/s (zamiast 5 MB/s). • Możliwość poszerzenia szerokości magistrali do 16 bitów (Wide SCSI). • Kombinację trybów Fast-Wide pozwaljącą uzyskać teoretycznie prędkości transmisji do 40 MB/s. Wymagane są tu już jednak rozszerzenia sprzętowe, tj. 68-żyłowe przewody połączeniowe i naturalnie inne wtyki i gniazda. Dalszy krok w rozwoju SCSI oznaczony jest symbolem SCSI-3. Magistrala tego nowego standardu wzbogacona została o szereg nowych możliwości: •Nowe rozkazy. • Obsługę większej liczby urządzeń (SCSI-2 pozwala jedynie na 8). •Dłuższe dopuszczalne przewody połączeniowe. • Dodatkowe, opcjonalnie wyjście na światłowód. W tabeli 7.21. zebrane zostały rozkazy systemu SCSI. Według oryginalnej specyfikacji tworzą one tzw. grupy. Podstawą podziału grupowego jest stan pierwszych trzech bitów kodu operacyjnego. Większość z rozkazów posiada cały szereg wariantów zależnych od parametrów (rozkaz MODĘ SELECT ma ich ponad 70!). Z tej szerokiej gamy możliwych poleceń wykorzystywanych jest praktycznie niewiele. Dyski twarde posługują się przy tym uproszczonym zestawem, w skład którego wchodzi nie więcej niż l O rozkazów. Tabela 7.21. Pełny zestaw rozkazów systemu SCSI Rozkazy grupy 0; TEST UNIT READY; REZERO UNIT; REQUEST LOG; REQUEST SENSE; FORMAT UNIT; READ DEFECT LIST; REASIGN BLOCKS; READ; WRITE; SEEK; NO OPERATION; SET FILE MASK; INQUIRY; READ DEYICE; CHARACTERISTIC PRIORITY RESERVE; MODE SELECT; RESERVE UNIT; RELASE UNIT; COPY; MODE SENSE; START/STOP UNIT; RECEIVE; DIAGNOSTIC; RESULTS; SEND DIAGNOSTIC PREYENT/ALLOW MEDIUM REMOYAL Rozkazy grupy 1; CHANGE; DEFINITION; WRITE SAME; LOG SELECT; LOG SENSE; MODE SELECT; EXTENDED; MODE SENSE; EXTENDED; READ EXTENDED; WRITE EXTENDED; SEEK EXTENDED; WRITE & WERIFY; VERIFY; SEARCH DATA HIGH; SEARCH DATA; EQUAL; SEARCH DATA LOW; SET LIMITS; PRE-FETCH; SYNCHRONIZE; CACHE; LOCK/UNLOCK; CACHE; READ DEFECT DATA; COMPARE; COPY & WERIFY WRITE BUFFER READ BUFFER READ LONG WRITE LONG Rozkazy grupy 2; SEARCH BŁOCK; HIGH; SEARCH BŁOCK; EQUAL; SEARCH BŁOCK; LOW; READ CAPACITY; PARTIAL MEDIUM; INDICATOR; PREVENT/ALLOW; MEDIUM REMOVAL; Rozkazy grupy 6; DIAGNOSTIC WRITE; DATA; DIAGNOSTIC READ; DATA; FORMAT ID; SPACE ID & READ; DATA; DISPLACED ID; READ ID; DIAGNOSTIC; FORMAT ID; DIAGNOSTIC READ; ID; WRITE RAM; READ RAM; RECOYER DATA; RECOVER ID; Trzeba również pamiętać, że wielu producentów gwarantuje poprawną pracę swoich wyrobów (dotyczy to najczęściej skanerów) jedynie w połączeniu z własnym Host Adapterem, do którego dołączany jest zestaw odpowiednich sterowników programowych. Idea SCSI z natury rzeczy służyć ma łączeniu ze sobą wielu różnych urządzeń, co jest w świetle powyższego źródłem potencjalnych problemów (niekompatybilność). Nie można też przecież zdawać się na jednego producenta dla wszystkich różnorodnych urządzeń peryferyjnych w całym rozbudowanym układzie. Jeżeli mowa jest o prostym systemie wyposażonym w dysk twardy i CD-ROM należałoby zasugerować pozostanie przy magistrali AT-BUS, tym bardziej że szybkość tych urządzeń (zwłaszcza modeli nowej generacji) jest bardzo duża. Za rozwiązaniem takim przemawiają również względy ekonomiczne bowiem dyski SCSI są nieco droższe od swych odpowiedników AT-BUS. Całkowity koszt systemu podnoszą również kontrolery SCSI oraz okablowanie. Rozbudowa takiego układu o kolejne urządzenia (dodatkowe dyski, nagrywarki, napędy taśm, media wymienne) napotyka jednak na barierę stawianą przez magistralę EIDE. Liczba urządzeń nie może wykraczać poza cztery. Wyższa cena urządzeń peryferyjnych SCSI jest w pełni usprawiedliwiona stopniem ich komplikacji. Muszą one realizować złożony protokół komunikacyjny SCSI i umieć się zachowywać w inteligentny sposób stosownie do zaistniałych sytuacji. Dysk twardy SCSI (a właściwie jego kontroler) musi stawiać do dyspozycji innych użytkowników szyny (tj. praktycznie Host-Adaptera), tzw. logiczne bloki danych. Nikt nie jest zainteresowany strukturą wewnętrzną dysku: cylindrami, ścieżkami i sektorami. Każdy sektor ma swój numer kolejny (adres liniowy). Cała procedura formatowania odbywa się w odpowiedzi na pojedynczy rozkaz. Podobnie administracja powierzchnią dodatkową i jej stosowny przydział w wypadku uszkodzeń sektorów leży w gestii samego kontrolera dysku. Jak widać z tego krótkiego przeglądu, urządzenia SCSI są układami o bardzo wysokim stopniu komplikacji. Realizacja magistrali Na system SCSI składa się sama magistrala oraz protokół określający zasady korzystania z niej. Każdy z współużytkowników (nazywanych urządzeniami lub jednostkami) identyfikuje się przez unikalny adres SCSI-ID. Adres ten, zwany też identyfikatorem, przypisywany jest urządzeniu przed uruchomieniem magistrali. Nadanie identyfikatorów odbywa się zwykle za pomocą zwór konfiguracyjnych lub przełączników a czynność tę powierza się użytkownikowi. Warto wspomnieć, iż istnieje co prawda system automatycznego przydzielania adresów SCAM (SCSI Configitred AutoMagically)(System SCAM predestynował do miana odpowiednika Plug&Play w odniesieniu do SCSI. W założeniach miał przejmować nie tylko automatyczny przydział adresów ale i konfigurację terminatorów. O ile część pierwsza funkcjonuje w miarę w praktyce i jest przynajmniej czasami stosowana, część druga nie ma prawa na pozycję na rynku z uwagi na prawie całkowity brak odpowiednio dostosowanego sprzętu.) ale jego działanie nie jest niezawodne (zwłaszcza jeśli w układzie występują zarówno urządzenia znające jak i nie znające SCAM). System automatyczny skanuje magistralę a specjalny protokół (unikając kolizji) przydziela właściwe adresy w trakcie przeglądania kolejnych urządzeń. Automatyczne rozdawanie adresów w systemach o zmiennej konfiguracji (np. różne dyski podmieniane w specjalnych szufladkach) niesie w sobie zawsze niebezpieczeństwo pomieszania oznaczeń literowych jednostek i lepiej jest wykonywać je ręcznie. Chociaż do adresowania urządzeń używa się 8-bitów (linie magistrali danych), przyjęty sposób kodowania pozwala na utworzenie jedynie ośmiu adresów. Nie stosuje się kodowania binarnego lecz każda z ośmiu linii szyny danych oznacza jeden adres z zakresu 0- 7. W trakcie realizacji procedur samo kontrolnych i inicjujących, które przeprowadza każde z urządzeń tuż po doprowadzeniu zasilania, zostaje zapamiętany przydzielony (zwory konfiguracyjne lub SCAM) adres. Od tej pory urządzenie reaguje wyłącznie na rozkazy do siebie adresowane. Ważne jest by nie doprowadzić do konfliktu adresowego, który ma miejsce jeżeli jeden z identyfikatorów nadany zostanie dwukrotnie. Magistrala nie została wyposażona w możliwości korekcji takiej sytuacji. Jedyną jej odpowiedzią są permanentnie występujące błędy. Przydział adresów do urządzeń jest w zasadzie dowolna poza dwoma wyjątkami. Pierwszy z nich to adres kontrolera. Koncepcja SCSI stosuje bowiem pojęcie priorytetu w dostępie do magistrali. Im większy adres urządzenia, tym wyższy jest jego priorytet. Konsekwencją takiego podejścia jest nadawanie kontrolerowi (Host-Adapter) identyfikatora największego z możliwych czyli #7. Trochę wbrew logice przydziela się kontrolerowi magistrali 16-bitowej (Wide) również adres #7, ale czyni się tak z pewnych względów historycznych (kompatybilność programowych sterowników urządzeń SCSI). Drugi wyjątek wynika z faktu, iż niektóre kontrolery wymagają by SCSI-ID dysku, z którego ładuje się system operacyjny oznaczony był jako #0. Magistrala może wykorzystywać swoje linie sygnałowe na jeden z dwóch sposobów: symetryczny lub asymetryczny. W trybie symetrycznym na każdy sygnał przypadają dwie końcówki, w przeciwnym razie jedna z nich połączona jest z masą. System symetryczny jest droższy i rzadko wykorzystywany ale pozwala na łączenie ze sobą układów oddalonych od siebie do 25 m. Wersja asymetryczna dopuszcza Jedynie" 6 m, co jednak w porównaniu z szyną AT-BUS (46 cm) stanowi milowy krok naprzód. Odpowiednio do rodzaju połączenia mówi się o urządzeniach wyposażonych w interfejs symetryczny lub asymetryczny. Oba fizyczne końce magistrali muszą być jednak w obydwu przypadkach obciążone specjalnie dobranymi układami rezystorów (terminatorami). W zależności od technicznej realizacji połączenia i typu okablowania terminatory zlokalizowane są na jednym z urządzeń lub poza nim. Obowiązuje generalna zasada zabraniająca tworzenia rozgałęzień typu T lub Y. Magistrala musi stanowić jeden ciąg, w którym jest jasno określony koniec i początek. Rysunek 7.19 przedstawia kilka przykładów wyjaśniających zasady instalowania terminatorów. W większości klasycznych przypadków35 (wyłącznie urządzenia wewnętrzne i stała szerokość magistrali) korzysta się z terminatorów własnych urządzeń. Umieszczane są one przez producenta w pobliżu gniazd doprowadzających magistralę do układów. Urządzenia nie stanowiące fizycznych końców magistrali (nawet jeśli jest to Host-Adap-ter) muszą być pozbawione terminatorów. Aktywowanie terminatorów odbywa się przy pomocy zwór konfiguracyjnych. Magistrala może łączyć ze sobą (w zależności od szerokości) maksymalnie osiem lub szesnaście urządzeń. Każde z nich może nawiązywać kontakt (i wymieniać dane) z dowolnym innym, przy czym w danym momencie aktywne mogą być wyłącznie dwa z nich. Jednostki aktywne, które są ze sobą połączone, spełniają (na czas tego połączenia określanego też mianem sesji) ściśle określone przez protokół role i nie są równouprawnione. Jedna z nich określana jest mianem inicjatora (w skrócie INIT), a druga jest jednostką docelową (TARG od ang. Target). To, jaka rola przypada danemu urządzeniu w sesji, wynika ze stanu linii sterujących. Niezależnie od ilości urządzeń dołączonych do magistrali można ją zawsze sprowadzić na czas trwania danej sesji do uproszczonego logicznego połączenia inicjatora i jednostki docelowej. To symboliczne połączenie przedstawione jest na rysunku 7.20. Sytuacja komplikuje się w przypadku mieszania magistrali 16-bitowej z 8-bitową, odgałęzień pracujących w oparciu o okablowanie Ultra-SCSI oraz w momencie jednoczesnego stosowania urządzeń wewnętrznych i zewnętrznych. Przykłady takich konfiguracji znajdzie czytelnik w dalszej części rozdziału. Magistrala w wersji 8-bitowej składa się z 18 linii sygnałowych, w tym 9 dla sygnałów sterujących i 9 dla danych: • 8-bitowa szyna danych DB0 - DB7, która objęta jest kontrolą parzystości. Sygnał kontroli parzystości przekazywany jest linią DBP. •Sygnał zajętości BSY (Busy). • Sygnał wybierania SEL (Selection). • Identyfikator danych C/D (Control/Data). • Sterownik kierunku I/O (Input/Outpuf). • Identyfikator wiadomości MSG (Message). • Para sygnałów do przesyłania z potwierdzeniem REQ i ACK (Reąnest i Acknowledge). • Dwa sygnały specjalne ATN i RST (Attention i Reset). SCSI w komputerach PC Magistrala SCSI nie powstała dla gruncie architektury PC ale została do niej zaadaptowana. Początkowo wydawało się, iż nie wyjdzie ona nigdy poza obszar zastosować profesjonalnych, głównie ze względu na barierę ekonomiczną. Po wstępnym okresie ograniczonej aprobaty na rynku masowego konsumenta przyszły „lata tłuste" i spirala cenowa zaczęła się wreszcie kręcić w dobrą stronę. Coraz więcej urządzeń z tym interfejsem pobudziło ospały do tej pory rynek kontrolerów SCSI. Pojawiły się atrakcyjne cenowo płyty główne ze zintegrowanym kontrolerem. Każdy szanujący się producent peryferiów (czytników i nagrywarek CD-R, skanerów, napędów mediów wymiennych) zmuszony jest wypuszczać wersję SCSI. Wprowadzanie na rynek szeregu nowych urządzeń wyposażonych w ten interfejs powoduje wzrost zainteresowania i skłania do rozbudowy komputerów. Zagadnienia związane z SCSI uchodziły przez długi czas za „wyższą szkołę jazdy" i sztukę uprawianą wyłącznie przez profesjonalistów. Technika ta, początkowo owiana tajemnicą i opatrzona stemplem „tylko dla orłów" nie jest w gruncie rzeczy niczym strasznym, a jeśli przestrzegać kilku elementarnych reguł, odwdzięcza się niezawodnością w działaniu i dobrze znosi częste zmiany konfiguracji. Poznanie tych reguł uchronić może przed zbędnym stresem, utratą czasu, nieprzespanymi nocami lub zniszczonymi nerwami. SCSI w swej pierwotnej wersji nie był w stanie zbyt długo zaspokoić rosnących wymagań stawianych ze strony urządzeń. Standard ten poddawany jest nieustającym zmianom i przekształceniom. Rośnie zarówno szybkość transmisji jak i szerokość magistrali. W chwili obecnej granice wyznacza tryb Ultra-2 co w połączeniu z 16-szerokością szyny gwarantuje maksymalną przepustowość 80 MB/s. Tabela 7.22 zawiera zestawienie kolejnych etapów na drodze rozwoju koncepcji SCSI. Poszczególne typy zdefiniowane są jako rozszerzenia stosownych klas, i tak Ultra-SCSI stanowi rozszerzenie SCSI-3. Magistrale 16-bitowe oznaczane są jako szerokie (Wide) w przeciwieństwie do wersji 8-bitowych czyli wąskich (Narrow). Wąska magistrala SCSI (Narrow) może obsługiwać nie więcej niż 8 urządzeń. Dla zapewnienia połączenia ze światem PC, co najmniej jedno z nich musi być układem sprzęgającym z komputerem (Host-Adapter). Dla pozostałych jednostek mamy do dyspozycji siedem adresów SCSI-ID. Fizyczna kolejność urządzeń na magistrali nie pozostaje w żadnym związku z numeracją adresów SCSI-ID. Urządzeniami tymi mogą być dyski lub zestawy dysków (macierze dyskowe, zwykle dysponujące własnym kontrolerem meldującym się jako niezależne urządzenie), napędy taśm, skanery, czytniki i nagrywarki CD-ROM, pamięci magnetooptyczne, różnorakie media wymienne (ZIP, JAZZ itp.). Konfiguracja taka przedstawiona jest schematycznie na rysunku 7.21. Tabela 7.22. Typy magistral SCSI Klasa; Typ; Maksymalna liczba urządzeń; Maksymalny transfer; Maksymalna długość magistrali; SCSI-1; SCSI (async.); Host + 7; 5 MB/s; 6 m SCSI-2; SCSI-Fast (sync.); Host + 7; 10 MB/s; 3 m SCSI-2; SCSI-Wide; Host+ 15; 20 MB/s; 3 m SCSI-2; SCSI-Fast-Wide; Host +15; 20 MB/s; 3 m SCSI-3; Ultra-SCSI; Host + 7*; 20 MB/s; 3 m (1,5 m)* SCSI-3;Ultra-Wide-SCSI; Host + 7**; 40 MB/s 3 m (1,5 m)* SCSI-3;Ultra-Wide-SCSI-Diff.; Host+ 15; 40 MB/s; 25 m SCSI-3; Ultra-2 Wide-SCSI; Host+ 15; 80 MB/s; 12 m * - Jeżeli liczba podłączonych urządzeń przekroczy 4, dopuszczalna długość magistrali spada do 1,5 ** - Kontroler i protokół mogą wprawdzie zaadresować do 15 urządzeń , ale nie jest gwarantowana bezpieczna transmisja ze względu na parametry fizyczne magistrali przy tej częstotliwości. Host Adapter Sporo uwagi należy poświęcić na dobór właściwego kontrolera SCSI, bowiem decyduje on w dużej mierze o zachowaniu się całego systemu. Wybór zależy zarówno od zasobności kieszeni jak i typu podłączanych urządzeń (8-bitowe lub 16-bitowe, ewentualnie Ultra lub nawet Ultra-2) oraz topologii magistrali (wewnętrzna, zewnętrzna, mieszana). W zasadzie należy porzucić myśl o kontrolerach ISA. Są one co prawda do nabycia za śmieszne pieniądze ale to jeszcze nie wszystko(Kontroler ISA zabiera jedną z coraz bardziej cenniejszych w rozbudowanych systemach PC linii przerwań IRQ.). Różnica w cenie naprawdę nie usprawiedliwia takiego wyboru. Proste kontrolery ISA są kompatybilne ze standardem SCSI ale nie wolno ich stosować do nagrywarek CD-R. Uwaga ta dotyczy w szczególności układów pracujących jako Bus-Master-DMA (np. popularny AHA 1542) w komputerach z magistralą PCI. Kanał ISA ma stosunkowo niewielki priorytet i jest blokowany przez magistralę PCI. Przerwany strumień danych w procesie wypalania oznacza wyrzuconą płytkę CD. Jeżeli już koniecznie chcemy posługiwać się kontrolerem ISA wybierzmy taki, który pracuje w trybie PIO (np. AYA1505 lub AYA1515). Układy takie gwarantuj ą tran sfer 2-3 MB/s. Prymitywny kontroler ISA-SCSI dostarczany jest często wraz z niektórymi typami skanerów. Przerwanie strumienia danych w przypadku skanera nie ma naturalnie żadnych negatywnych skutków. Kontroler nie musi w zasadzie posiadać własnego BIOS-u (i tak jest zwykle w przypadku tych najtańszych modeli) jak długo nie obsługuje urządzeń, z których ładowany jest system operacyjny. Spora grupa urządzeń (wszelkie media wymienne, zarówno taśmy jak i dyski) komunikują się z systemem przy pomocy własnych ładowanych sterowników programowych. Sterowniki takie dostarczane są wraz z urządzeniami lub stanowią fragment systemu operacyjnego(Warto jest zwrócić uwagę na numer wersji i datę stosownych plików. Zdarza się często, iż te dostarczane wraz z systemem operacyjnym są nowsze i bardziej stabilne.). Jednym z kluczowych pytań, które zadaje sobie użytkownik chcący zmodyfikować swój komputer lub rozbudować go o magistralę SCSI sprowadza się do następującej kwestii: czy lepiej jest zainwestować w nową płytę główną ze zintegrowanym kontrolerem SCSI, czy też postarać się o niezależny kontroler. Na tak postawione pytanie trudno jest udzielić jednoznacznej odpowiedzi bowiem oba punkty widzenia nie są pozbawione swych racji. Aspekt ekonomiczny przemawia zazwyczaj za pierwszym z tych rozwiązań a dodatkowo do dyspozycji pozostaje co najmniej jeden dodatkowy PCI-Slot. Chętni do późniejszego unowocześnienia takiego systemu mogą jednak napotykać na spore trudności. Zintegrowane kontrolery nie zawsze dają się całkowicie deaktywować a uszkodzenia w ich obrębie dyskwalifikują płytę główną jako całość. Z ogólnych właściwości magistrali PCI wynikają dwa podstawowe tryby pracy, które może stosować kontroler SCSI. Podstawowy i powszechnie stosowany tryb to PCI-Mastering. W tym wypadku kontroler jest informowany jedynie o miejscu w pamięci gdzie leżą lub mają spocząć dane a reszta pracy należy do niego (Memory Transfer). W trybie PCI-Slave rolę mechanizmu napędowego transmisji danych bierze na siebie CPU. Transmisja odbywa się w formie następujących po sobie cykli dostępu do portów I/O (I/O Transfer). Warto wiedzieć, iż kontroler SCSI wymaga przydzielenia pewnej ilości tzw. zasobów (Resources). Na potrzeby komunikacji okupowany jest pewien zakres przestrzeni adresowej lub przestrzeni I/O (a w przypadku niektórych kontrolerów obydwa) oraz linia przerwań. Własny BIOS kontrolera (przejmujący obsługę przerwania INT13h) zajmuje oczywiście pewien zakres adresów na pamięć ROM. BIOS kontrolera SCSI (podobnie jak BIOS komputera PC) posiada programowe złącze konfiguracyjne (Setup) umożliwiające w mniejszym lub większym stopniu na manipulowanie parametrami poszczególnych urządzeń oraz systemu jako całości. Wejście do programu Setup-SCSI odbywa się (podobnie ja w przypadku Setup-PC) poprzez naciśnięcie w odpowiednim momencie(Moment przekazania sterowania z BIOS-PC do BIOS-SCSI sygnalizowany jest stosownym komunikatem, który określa również sposób wejście do programu konfiguracyjnego (w przypadku produktów Adaptec jest to kombinacja Ctrl-A. w innych zwykle poprzez analogię do Setup-PC klawisz Del).) jednego z klawiszy lub ich kombinacji. Oto niektóre z oferowanych zwykle opcji: • Wysokość maksymalnego transferu dla każdego urządzenia oddzielnie (jeżeli rezygnuje się z automatycznej negocjacji). • Możliwość pominięcia fazy negocjacji (Sync. Negotiatiori). W takim wypadku kontroler nie próbuje wynegocjować najbardziej korzystnego trybu współpracy, lecz tylko zasila urządzenie takim strumieniem jaki jest nastawiony ręcznie. • Możliwość pominięcie tzw. skanowania które wydłuża sumaryczny czas ładowania systemu. Wystarczy przeprowadzić je tylko raz (podczas konfiguracji i w razie ewentualnych modyfikacji). • Opcje dotyczące ładowania systemu (z których urządzeń i w jakiej kolejności) • Możliwość niejednoczesnego uruchamiania silników dysków. Rozkaz Start Unit, rozsyłany jest wówczas do kolejnych urządzeń z opóźnieniem ( Opóźnienie wyliczane jest jako prosta funkcja liniowa adresu SCSI-ID danego urządzenia.) przez co nie startują one na raz. Opcja taka przydatna w systemach składających się z wielu dysków. Ich jednoczesny start mógłby spowodować zakłócenia pracy zasilacza. • Wybór opcji programowej obsługi urządzenia: albo poprzez procedury BIOS kontrolera albo przez ładowalne sterowniki ASPI. Warto jest przeanalizować topologię planowanej magistrali i sprawdzić możliwość jej realizacji przez dany kontroler pod kątem rodzaju i liczby wyjść. Nowoczesne kontrolery (zarówno te realizowane w formie niezależnych kart PCI jak i te zintegrowane na płytach głównych) dysponują złączami wewnętrznymi i zewnętrznymi. Nadal jednak obowiązuje generalna zasada, iż magistrala SCSI może mieć jeden koniec i jeden początek (obydwa obciążone terminatorami). Nie są więc dozwolone rozgałęzienia typu Y i T. Te pozornie banalnie proste warunki stają się trudne do spełnienia w momencie wyjścia magistrali na zewnątrz obudowy komputera. Urządzenia zewnętrzne są z reguły nadal 8-bitowe. We wnętrzu komputera królują już formy szerokie (dyski twarde to z reguły W-SCS1, UW-SCSI, lub wręcz U2W-SCSI) ale nadal obecne są czytniki i nagry-warki CD-R posiadające wąski interfejs. Już sam fakt zmian szerokości uniemożliwia wykorzystanie wszystkich wyjść kontrolera jednocześnie. Rysunek 7.22 ilustruje istotę zagadnienia. Nie zaznaczono na nim szczegółów dotyczących instalacji tenninatorów, bowiem do tego tematu powrócimy w oddzielnym punkcie. Okablowanie Przez długie lata zdecydowana większość typowych zastosowań magistrali SCSI stosowała wersję asymetryczną, w której to poziomy sygnałów mają punkt odniesienia do masy. Istniała co prawda również wersja symetryczna ( Dzięki dużemu tłumieniu zakłóceń wersja ta dopuszcza długość przewodów linii aż do 25 m.W tabeli 7.24 przedstawiony jest sposób przyporządkowanie różnicowych sygnałów SCSI końcówkom przewodu płaskiego.) z liniami sygnałowymi S#+ i S#-, a w katalogach producentów można było znaleźć wzmianki o urządzeniach z tym interfejsem ale koszt takiego przedsięwzięcia z pewnością studził zapały wielu projektantów. Te ogromne różnice w cenie wynikały z konieczności stosowania specjalnych (i przez to drogich) układów interfejsów pracujących z pełną rozpiętością poziomów napięć (HVD - High Yoltage Differential). Aktywowanie różnicowego trybu pracy odbywało się na podstawie oceny poziomu sygnału na końcówce kontrolnej. Proszę zwrócić uwagę na znaczenie linii 21 w wersjach symetrycznych i asymetrycznych. Poziom napięcia na niej (O - magistrala asymetryczna, l - magistrala symetryczna) dostarcza podłączanym urządzeniom informacji o typie interfejsu. Układy kontrolne nie pozwolą na aktywowanie nadajników i odbiorników linii jeżeli nie ma zgodności typu. Idea magistrali różnicowej została ponownie wskrzeszona systemie LVD (Low Yoltage Differential), który omówiony zostanie w dalszej części rozdziału. Na razie pozostawmy na boku wszelkie odmiany różnicowe, przyjmując iż służą wyłącznie do zastosowań specjalnych. Fizyczne realizacja wewnętrznej magistrali 8-bitowej dokonywana jest za pośrednictwem 50-żyłowego przewodu płaskiego. Znaczenie poszczególnych linii zebrane zostało w tabeli 7.23. Każdy z przewodów sygnałowych (zarówno sterujących jak i danych) posiada towarzyszącą mu linię masy. Wyjątek stanowi linia 26 (TERMPWR), której wrażliwość na zakłócenia jest pomijalna. W płaskim przewodzie połączeniowym linie masy oddzielają od siebie linie sygnałowe. Zarówno urządzenia jak i kontroler stawiają w tym wypadku do dyspozycji klasyczne złącze 50-końcówkowe (50-pol/Box Header). Kable z dwoma lub trzema wtykami należą na ogół do standardowego wyposażenia kontrolera. Jeśli przygotowujemy własny przewód (samodzielnie zaprasowując wtyki na taśmę łączącą) trzeba pamiętać, iż minimalna odległość pomiędzy urządzeniami nie może być mniejsza niż 10 cm. Tabela 7.23. Przyporządkowanie sygnałów asymetrycznego 8-bitowego interfejsu SCSI liniom 50-końcówkowego przewodu płaskiego Numer linii; Sygnal; 01; GND; -DBO; 02; 03; GND; ~DB1; 04; 05; GND; ~DB2; 06; 07; GND; -DB3; 08; 09; GND; -DB4; 10; 11; GND; -DB5; 12; 13; GND; -DB6; 14; 15; GND; -DB7; 16; 17; GND; ~DBP; 18; 19; GND; GND; 20; 21; GND; GND; 22; 23; Zarezerwowane; Zarezerwowane; 24; 25; Brak podłączenia; TERMPWR; 26; 27; Zarezerwowane; Zarezerwowane;28; 29; GND; GND; 30; 31; GND; ~ATN; 32; 33; GND; GND; 34; 35; GND; -BSY; 36; 37; GND; -ACK; 38; 39; GND; -RST; 40; 41; GND; -MSG; 42; 43; GND; -SEL; 44; 45; GND; -C/D; 46; 47; GND; ~REQ; 48; 49; GND; -I/O; 50; Tabela 7.24. Przyporządkowanie sygnałów symetrycznego 8-bitowego interfejsu SCSI liniom 50-końcówkowego przewodu płaskiego Numer linii; Sygnal; Sygnal; Numer linii; 01; GND; GND; 02; 03; +DB0; -DB0; 04; 05; +DB1; -DB; 06; 07; +DB2; -DB2; 08; 09; +DB3; -DB3; 10; 11; +DB4; -DB4; 12; 13; +DB5; -DB5; 14; 15; +DB6; -DB6; 16; 17; +DB7; -DB7; 18; 19; +DBP; -DBP; 20; 21; DIFFSENS; GND; 22; 23; Zarezerwowane; Zarezerwowane; 24; 25; TERMPWR; TERMPWR; 26; 27; Zarezerwowane; Zarezerwowane; 28; 29; +ATN; -ATN; 30; 31; GND; GND; 32; 33; +BSY; -BSY; 34; 35; +ACK; -ACK; 36; 37; +RST; -RST; 38; 39; +MSG; -MSG; 40 41; +SEL; -SEL; 42 43; +C/D; -C/D; 44; 45; +REQ; -REQ; 46; 47; +I/O; -I/O; 48; 49; GND; GND; 50; Wewnętrzne fragmenty magistrali 16-bitowej realizowane są również za pomocą przewodu taśmowego ale liczba linii wzrasta do 68. Inne są też w tym wypadku gniazda i wtyki (68-pol/Sub-D). Magistrala zewnętrzna nie może ze zrozumiałych względów używać kabli płaskich. Okrągłe przewody obejmują swoim pancerzem 25 lub 34 par skrętek. Inne są też zwykle gniazda i wtyki. W wersji 8-bitowej spotkać można 50-pol/Sub-D i 50-pol/Centronics z rastrem 1,27 mm lub 2,54 mm a w wersji 16-bitowej 68-pol/Sub-D i 68-pol/Centronics z rastrem 1,27 mm. Technika Ultra i Ultra-2 wymaga w obrębie magistrali zewnętrznej przewodów szczególnej jakości, które można odróżnić od klasycznego okablowania (oprócz napisów na pancerzu) dzięki stosunkowo dużej grubości. Terminatory SCSI jest magistralą równoległą, którą przesyłane są przebiegi prostokątne o stosunkowo ostrych zboczach. Częstotliwości tych przebiegów są tak wysokie iż wywołują zjawiska falowe w przewodach. Specyfikacja SCSI wymaga, by obydwa końce przewodów sygnałowych (zarówno szyny danych jak i linii sterujących) były zamknięte terminatorami. Jeśli wartość terminatora zbliżona jest do oporu falowego linii, osiąga się minimalizację odbić sygnałów, ogranicza powstawanie fal stojących i eliminuje inne niekorzystne zjawiska. Proszę zwrócić uwagę, iż zakończeniu podlega fizyczny koniec magistrali a nie ostatnie urządzenie na niej. Jeśli z jakichkolwiek względów pozostawiamy odcinek kabla biegnący jak na razie „do nikąd", trzeba go zakończyć terminatorem. Nie wolno w żadnym wypadku stosować praktyk znanych z AT-BUS (pozostawiona wolna wtyczka na końcu przewodu płaskiego). W typowej konfiguracji, która skupia wszystkie urządzenia SCSI we wnętrzu obudowy komputera, Host-Adapter stanowi jeden z fizycznych końców magistrali. Nowoczesne kontrolery dysponują z reguły również wyjściem na zewnątrz. Odcinki wewnętrzne (zarówno 8-bitowe jak i 16-bitowe) łączone są przewodem płaskim a fragmenty zasilające urządzenia zewnętrzne posługują się nieco innymi wtykami oraz dostosowanym lepiej do warunków zewnętrznych kablami okrągłymi. W systemie o takiej złożonej konfiguracji, kontroler nie stanowi już żadnego z końców magistrali i terminatory należy rozlokować na końcach odcinków: jeden na końcu segmentu wewnętrznego a drugi na końcu segmentu zewnętrznego. Specjalnego traktowania wymagają zewnętrzne wyjścia kontrolerów zintegrowanych z płytą główną. Wyjście takie tworzy odcinek płaskiego przewodu prowadzący od płyty głównej do blaszki z gniazdem (np. 68-pol/Centronics) zaślepiającej jeden z otworów na tylnej części obudowy(Problem dotyczy obudów i płyt w formacie AT. W technice ATX gniazdo wyjściowe SCSI lutowane jest bezpośrednio do płyty głównej.). Jeżeli decydujemy się na jego instalację, trzeba zadbać a jego właściwe zakończenie. W wypadku obecności urządzeń zewnętrznych, ostatnie z nich jest obarczone terminatorem. Jeżeli jednak okrągły przewód zewnętrzny zostanie usunięty, terminator należy umieścić w samym gnieździe. Widać, iż w takim wypadku terminator nie rezyduje na żadnym z urządzeń. Drugi przypadek tego rodzaju ujęty specyfikacją SCSI dotyczy terminatorów magistrali symetrycznej, które zlokalizowane są jako pseudo-urządzenia na fizycznych końcach magistrali SCSI ale poza urządzeniami. Jedne i drugie terminatory trzeba jednak jakoś zasilać. Rozwiązaniu tego problemu służy wkomponowana w magistralę linia TERMPWR. Specyfikacja dopuszcza by źródło zasilania i jego odbiornik (terminator), które łączone są linią TERMPWR, mogły znajdować się na różnych urządzeniach. Linię TERMPWR może (zgodnie z regułami SCSI-1) zasilać tylko jedno ze źródeł, ale za to z dowolnie wybranego urządzenia. W praktyce urządzeniem tym był kontroler SCSI. Wersja SCSI-2 specyfikacji czyni ustępstwo w tym zakresie, dopuszczając do głosu jednocześnie każde z obecnych urządzeń. W praktyce należy kierować się następującymi zasadami: • W klasycznych przypadkach źródłem zasilania TERMPWR powinien być kontroler. • Przy wyjątkowo długich kablach połączeniowych sięgających limitu określonego przez specyfikację, lepsze efekty przynosi jednoczesne zasilanie TERMPWR (wraz ze swymi aktywnymi terminatorami) przez obydwa urządzenia końcowe. Rola terminatora nie ogranicza się jedynie do symulowania rezystancji oporu falowego magistrali. Terminatory wymuszają pewien potencjał spoczynkowy przewodów sygnałowych (zarówno w przypadku magistrali asymetrycznej jak i symetrycznej). Pierwotnie stosowano proste terminatory pasywne (330 Q od masy i 220 H do zasilania) realizowane w formie sieci rezystancyjnych (33x, 22x, 331/221). Układy tego typu utrzymywały potencjał asymetrycznych linii sygnałowych na poziomie około 3,3 V. Od pewnego czasu dominują wyłącznie terminatory aktywne posiadające dużo lepsze parametry. Układy aktywne pracują z udziałem scalonych stabilizatorów ( Układy scalone firmy Dallas typu DS2107 lub Unitrode UC5601) napięcia (2,85 V) i oporów ograniczających pobór prądu (110 Q). Zasilanie stabilizatora odbywa się z linii TERMPWR. Zalety terminatorów aktywnych wynikają ze zwiększonej odporności źródeł stabilizowanych na raptowne zmiany poziomów sygnałów wywołane zmianami obciążenia (lepiej się je kompensuje). Magistrala zakończona tenninatorami aktywnymi jest z reguły w mniejszym stopniu podatna na zakłócenia. Im szybsza jest magistrala tym bardziej niezbędne staje się posługiwanie terminatorami aktywnymi. Chociaż w dzisiejszych czasach jest prawie niemożliwością znaleźć urządzenie SCSI pracujące wyłącznie w najprostszym trybie SCSI-1 (do 5 MB/s) na rynku nadal spotkać można tanie kontrolery SCSI wyposażone w pasywne terminatory. Należy zdecydowanie odradzać sięgania po tego rodzaju produkty. Najbardziej pewnym sposobem rozpoznania typu terminatorów jest (w przypadku kontrolerów SCSI) dokładny przegląd opcji programu konfiguracyjnego BIOS-SCSI. Jeżeli jakakolwiek manipulacja tenninatorami możliwa jest przez Setup-SCSI mamy z pewnością do czynienia z terminatorami aktywnymi. Rozszerzenia SCSI-3 Jedno z kolejnych rozszerzenie specyfikacji znane jest pod pojęciem Ultra-SCSI. Zwiększenie transferu uzyskiwane jest poprzez skrócenie czasu cyklu, a to automatycznie wymusza większe stromości zboczy impulsów. W ślad za tym idzie naturalnie dalszy wzrost wymagań jakościowych w stosunku do okablowania. Płaskie przewody wewnętrzne stwarzają mniejsze problemy, dużo gorzej jest z przewodami łączącymi urządzenia zewnętrzne. Kolejne rozszerzenia standardu oferują coraz to szersze pasmo przenoszenia. W chwili obecnej mamy następujące warianty podstawowe FAST, Wide i Ultra. Sumaryczną liczbę możliwych trybów pomnażają wzajemne kombinacje na przykład Ultra-Wide. Warianty podstawowe wy stępuj ą teoretycznie zarówno w wersji asymetrycznej (Single Ended) jak i różnicowej (Differentiat). W praktyce spotyka się jedynie typ asymetryczny. Znacznie droższa technika różnicowa króluje w świecie dużych komputerów i serwerów profesjonalnych systemów baz danych, bankach i instytucjach użyteczności publicznej. Przy próbach adaptacji urządzeń tego typu dla potrzeb domowego PC nie wolno zapominać, iż jakkolwiek zarówno okablowanie jak i złącza (wtyczki i gniazda) różnicowej magistrali SCSI wyglądają tak samo, znaczenie końcówek jest inne. Techniki Wide i Ultra-Wide posługuje się złączami 68-końcówkowym (68-pol/Sub-D i 68-pol/Centronics) o odstępie kontaktów 1,27 mm. Ta bardzo zwarta konstrukcja sprawia, iż gniazdo takie jest węższe od 50-końcówkowego złącza Centronics opartego na rastrze 2,54 mm. Stosunkową nowością na rynku są urządzenia pracujące w standardzie Ultra-2 oznaczane też jako LVD (Low Voltage Differential}. Magistrala SCSI typu Ultra-2 jest dwukrotnie szybsza od swego odpowiednika Ultra i może osiągnąć (w wersji 16-bitowej) transfer 80 MB/s. LVD stanowi kolejny krok w rozwoju udanej i sprawdzonej koncepcji magistrali równoległej SCSI. Uwzględniony został zarówno aspekt ekonomiczny (możliwość wykorzystania dotychczasowych urządzeń) jak i wzrost zapotrzebowania na pasmo przepustowe. Technika Ultra-2 pozwala ponadto na znaczne zwiększenie długości przewodów połączeniowych przy zachowaniu tych samych wtyków i gniazd. LVD jest z założenia formą SCSI pracującą wyłącznie w trybie różnicowym i nie ma wersji asymetrycznej (Single Ended SCSI}. Przejście na system różnicowy jest niezbędne dla uzyskania zwiększonej odporności na zakłócenia. Jednak w przeciwieństwie do wcześniej stosowanej techniki HVD( Układy l/O (Transceivers) techniki HVD nie dają się zintegrować w ramach taniego procesu CMOS, którym wytwarza się większość powszechnie stosowanych układów scalonych.) (High Yoltage Differential] pracującej na poziomach różnicowych 3 V (+1,5 V i -1,5 V) sięgnięto po nowoczesne rozwiązanie operujące w przedziale 120 mV (+60 mV i -60 mV). Tabela 7.25. Przyporządkowanie sygnałów interfejsu SCSI Ultra i Ultra Wide Sygnał; Wtyk 68-pin; Sygnał; 50-pin GND; 1; 35; -DB12; GND; 2; 36; -DB13; GND; 3; 37; -DB14; GND; 4; 38; -DB15; GND; 5; 39; -DBP1; GND; 6; 1; 26; 40; ~DB0; GND; 7; 2; 27; 41; ~DB1; GND; 8; 3; 28; 42; ~DB2; GND; 9; 4; 29; 43; ~DB3; GND; 10; 5; 30; 44; ~DB4; GND; 11; 6; 31; 45; ~DB5; GND; 12; 7; 32; 46; -DB6; GND; 13; 8; 33; 47; ~DB7; GND; 14; 9; 34; 48; -DBPO; GND; 15; 10; 35; 49; GND; GND; 16; 11; 36; 50; GND; (TERMPWR); 17; 12; 37; 51; (TERMPWR); (TERMPWR); 18; 13; 38;52; TERMPWR; res.; 19; 14;39; 53;res.; GND; 20; 15;40; 54;GND; GND; 21; 16; 41; 55; ~ATN; GND; 22; 17;42; 56;GND; GND; 23; 18; 43; 57; ~BSY; GND; 24; 19;44; 58;~ACK; GND; 25; 20;45; 59;~RST; GND; 26; 21;46; 60;~MSG; GND; 27; 22;47; 61;-SEL; GND; 28; 23;48; 62;~C/D; GND; 29; 24;49; 63;-REQ; GND; 30; 25;50; 64;~I/O; GND; 31; 65; -DBS; GND; 32; 66; -DB9; GND; 33; 67; -DB10; GND; 34; 68; -DB11; 68- pin - liczby brzegowe np:1, 35; 34, 68 50-pin - środkowe liczby np:1, 26; 25, 50 Tabela 7.26. Porównanie możliwości magistrali Ultra-SCSI i U/tra-2-SCSl Typ; Maksymalna liczba urządzeń; Maksymalny transfer; Maksymalna długość magistrali; Ultra-SCSI; Host + 7; 20 MB/s; 3 m (1,5 m)*; Ultra-Wide-SCSI; Host + 7; 40 MB/s; 3 m (1,5 m)*; Ultra-2-SCSI; Host + 7; 40 MB/s; 12 m; Ultra-2-Wide-SCSl; Host + 1 5; 80 MB/s; 12 m; Cały system SCSI wraz ze swymi dotychczasowymi mutacjami jest, jak już wielokrotnie podkreślano, koncepcją bardzo elastyczną. Zapewnia między innymi pełną zgodność „w dół" i to w obie strony. Oznacza to, iż nowoczesny kontroler U2W obsługuje urządzenia starszej generacji: Fast, Wide i Ultra. W przeciwieństwie jednak do magistrali IDE, powolne urządzenia nie hamują pracy całej magistrali i nie blokują szybkich jednostek. Parametry transmisji uzgadniane są w specjalnej fazie negocjacji indywidualnie dla każdego z urządzeń. Dzięki temu gwarantowana jest poprawna praca nowoczesnych urządzeń U2 (lub nawet U2W jeśli zastosowano odpowiednie „przejściówki") z kontrolerami, które nie znają wcale tego trybu pracy. Maksymalna prędkość transferu ograniczana jest naturalnie do wartości najwyższego z dopuszczalnych trybów kontrolera. Kompatybilność LVD z innymi odmianami interfejsów wymaga wprowadzenia systemu rozpoznawania typu urządzenia. Magistrala nie może być bowiem użytkowana naprzemiennie jako symetryczna i asymetryczna. Urządzenia U2(W) badają mianowicie stan specjalnej linii DS (Differential Sense). Linia ta zwierana jest do masy przez każde urządzenie z klasycznym interfejsem asymetrycznym (Single-Ended). Jeśli jednak stwierdza się wysoki poziom logiczny, oznacza to możliwość przełączenia w tryb LVD. Wiele nowoczesnych kontrolerów rozdziela magistralę SCSI na dwa odcinki: różnicowy i symetryczny. Pozwala to na wydzielenie urządzeń LVD i zapewnienie im odpowiedniego środowiska pracy. Warto zdawać sobie sprawę, iż często możliwości oferowane przez magistralę danego typu nie mają praktycznego zastosowania a inwestycja w drogi sprzęt jest pieniędzmi wyrzuconymi w błoto. Nawet najszybsza magistrala będzie czekać na dane dostarczane przez wolniejsze od niej urządzenia. Szczytowa wartość transferu odnosi się co najwyżej do danych zawartych w pamięci podręcznej (Cache). Aby się one tam znalazły potrzeba jednak często czasu o rząd wielkości większego. Bezpośredni transfer z/do nośnika odbywa się obecnie w najlepszym razie (dyski wirujące z prędkością 10000 obr/min) w tempie kilkunastu MB/s. Szybkie czytniki CD-ROM (x50) osiągają w najbardziej sprzyjających warunkach (ścieżki zewnętrzne) transfer poniżej 6 MB/s. Nagry-warki CD-ROM, nawet jeśli pracują w szybkim trybie x8 ograniczają swe zapotrzebowanie na strumień danych do wielkości około l MB/s. Wyraźnie widać, iż nie zawsze konieczne jest instalowanie kontrolera U2W. Sytuacja zmienia się w momencie wkraczania w dziedziny zastosowań specjalnych, takich jak macierzy dysków, systemów RAID itp. W układach takich osiąga się zdecydowanie lepsze wykorzystanie pasma magistrali bowiem korzysta z niej jednocześnie wiele urządzeń a dzięki naprzemiennym cyklom dostępu do dysków dane znajdują się prawie zawsze w pamięci podręcznej. Organizacja pracy magistrali SCSI W punkcie tym wgłębimy się nieco bardziej w sprawy dotyczące protokołu, przy czym zajmować się będziemy wyłącznie SCSI w klasycznej wersji 8-bitowej bez wdawania się w szczegóły odróżniające różne mutacje wyższego rzędu takie jak Wide i Ultra. Wszystkie sygnały magistrali SCSI (sterujące i danych) są zanegowane i przyjęło się zapisywanie ich jako -SYGNAŁ. Oznacza to, że interpretacja fizyczna (poziomy na-pięć) jest odwróceniem stanów logicznych O i 1. Dla takich sygnałów obowiązuje notacja przedstawiona w tabeli 7.27. W książce tej posługiwać się będziemy dla uproszczenia zapisem SYGNAŁ, mając jednak stale na uwadze jego negację. Wszystkie rysunki przebiegów opierać się będą na przyjęciu zasady, że obrazuje się stan logiczny sygnału, a nie jego napięcie. Tabela 7.27. Fizyczna realizacja stanów logicznych sygnałów magistrali Stan logiczny; Realizacja fizyczna: Asymetryczna,Różnicowa; 1 (prawda); poziom niski (< 0,8 V), Poziom na L+ > Poziom na L#_; 0 (fałsz); poziom wysoki (> 2,4 V), Poziom na L. > Poziom na L#+; W klasycznej i najczęściej stosowanej asymetrycznej magistrali SCSI poziomy napięć utrzymują się w przedziale wyznaczonym przez technikę TTL, tj. od zera do +5 V. Wymuszenie logicznej jedynki czy też mówiąc inaczej stanu „prawdy" nazywać będziemy też aktywowaniem danego sygnału. W przeciwnym razie sygnał będzie określany często mianem dezaktywowanego, a odpowiadająca mu linia mianem zwolnionej. Oznacza to, że jeżeli wykres sygnału przebiega po osi OX (wartość logiczna 0), towarzyszy temu wysoki poziom napięcia. Wszystkie przewody magistrali „podciągnięte" są za pomocą terminatorów do napięcia około +3 V. Tak więc sama magistrala (w hipotetycznym stanie biernym bez czynnych urządzeń ale z działającymi terminatorami) utrzymuje swoje linie na tym poziomie. Urządzenie, które chce aktywować dany sygnał, sprowadza potencjał odpowiadającej mu linii do poziomu bliskiego O V. Proszę jednak zauważyć, że zwolnienie linii nie oznacza bynajmniej, iż musi ona się „podnieść" do poziomu wysokiego. Inne urządzenie, które też ma dostęp do magistrali, może przecież w tym czasie również aktywować ten sygnał. Zjawisko to nazywane jest często „sumowaniem po drucie", dla podkreślenia realizowanej tu funkcji sumy logicznej bez udziału elementów aktywnych (np. bramek logicznych). Fazy pracy magistrali Faza w jakiej znajduje się magistrala daje się zawsze - a dokładniej nie później niż po czasie ustalenia (Dla SCSI-l 400 ns.)(Bus Settle Delay), który należy uwzględnić na ustabilizowanie się stanu sygnałów jednoznacznie określić jako funkcja stanu sygnałów sterujących. Standard SCSI definiuje następujące fazy: -szyna wolna, -współzawodnictwo, - selekcja, - reselekcja, - fazy informacyjne: - rozkazowa, - danych, - statusu, - wiadomości, - stany nadzwyczajne: - zerowanie, - uwaga. O wyborze rodzaju fazy informacyjnej decyduje urządzenie TARG sterujące liniami C/D, I/O i MSG tak jak to przedstawiono w tabeli 7.29. TARG jest jedynym uprawnionym do posługiwania się tymi sygnałami w fazach informacyjnych. Sygnały sterujące nie są ogólnie dostępne dla wszystkich urządzeń w dowolnej z faz. Niektóre linie natomiast (zależnie od fazy) mogą być sterowane przez wiele urządzeń jednocześnie co realizuje funkcję logiczną OR. Linia sygnału "S" Punkt podłączenia urządzenia 1 - dochodzi do lini sygnału Punkt podłączenia urządzenia 2 - dochodzi do lini sygnału Urządzenie I; Urządzenie 2; Stan logiczny sygnału „S" zwalnia sygnał S; zwalnia sygnał S; 0 zwalnia sygnał S; aktywuje sygnał S; 1 aktywuje sygnał S; zwalnia sygnał S; 1 aktywuje sygnał S; aktywuje sygnał S; 1 Z sygnału dodatkowego RST może skorzystać każde urządzenie w dowolnym momencie. Funkcja ATN natomiast może być wywołana tylko w ściśle określonym kontekście. Prawa dostępu urządzeń do sygnałów sterujących i szyny danych w poszczególnych fazach pracy magistrali SCSI zebrane są w tabeli 7.28. Szyna wolna (Bus Free) W fazie BUS FREE (szyna wolna) żadne z urządzeń nie korzysta z magistrali SCSI. Z drugiej strony jednak każde urządzenie może przystąpić do próby zawładnięcia magistralą. Stan sygnałów kontrolnych przedstawiony jest na lysunku 7.27. Tabela 7.28. Uprawnienia urządzeń do linii magistrali Faza; Linia: BSY, SEL, I/O, C/D, MSG, REQ, ACK, (DB, P), ATN, RST, Bus Free; F F FF F F FF F D Arbitration; D W F F F F F ID F D Selection; I/T I F F F F F I I D Reselection; I/T T T F F F T I D Command; T F T T T T I I I D Data In; T F T T T T I T I D Data Out; T F T T T T I I I D Status; T F T T T T I T I D Message In; T F T T T T I T I D Message Out; T F T T T T I I I D D - linia może być sterowana przez dowolne z urządzeń lub nawet wiele z nich. I - prawo do sterowania ma tylko urządzenie INT. ID - każde z urządzeń ubiegających się o przydział magistrali SCSI (biorących udział w fazie Arbitration) wystawia na stosowną linię szyny danych (DBO - DB7) swój identyfikator adresowy SCSI-ID. I/T - INT lub TARG, albo INT i TARG jednocześnie mogą sterować linią. T - prawo do sterowania ma tylko urządzenie TARG. W - prawo do sterowania ma tylko to urządzenie, które wygrało w fazie Arbitration. F - linia nie jest sterowana przez żadne z urządzeń. Terminatory utrzymują ją na poziomie logicznym 0, co odpowiada napięciu około +3 V. Urządzenia wykrywają tę fazę na podstawie oceny poziomów sygnałów sterujących SEL i BSY. Jeżeli oba te sygnały utrzymują się w stanie logicznego zera (czyli są nieaktywne - odpowiada to wysokiemu poziomowi napięcia) przez czas co najmniej 400 ns, szyna jest w stanie Bus Free. Urządzenie które wykryło tę fazę, ma obowiązek zwolnić wszystkie linie w maksymalnym czasie 800 ns. Innymi słowy można przyjąć, że najpóźniej po czasie 1,2 |is od momentu ustanowienia BSY=SEL=0 wszystkie urządzenia odłączyły się od magistrali. Faza BUS FREE ma miejsce w następujących sytuacjach: • TARG zwalnia linię BSY w przypadku gdy: • wykryto stan RESET, • TARG odebrał wiadomość ABORT lub BUS DEYICE RESET, • TARG stwierdził nienormalne (nie ujęte w protokole) zachowanie magistrali. • INIT zwalnia linię SEL w przypadku niepomyślnego zakończenia fazy SELECT-ION lub RESELECTION (np. przekroczenie czasu oczekiwania na odpowiedź). Jeżeli INIT wykryje niespodziewane wejście w fazę BUS FREE, powinien żądać od TARG podania szczegółowych przyczyn wysyłając polecenie REQUEST SENSE. Faza rozstrzygania (Arbitration Phase) W fazie rozstrzygania urządzenie dokonuje próby przejęcia szyny. Ponieważ może się zdarzyć, iż próbę taką podejmuje jednocześnie kilka z urządzeń, niezbędny jest mechanizm wyłaniający jednego zwycięzcę. Zależności czasowe towarzyszące fazie rozstrzygania przedstawia rysunek 7.28. Procedura rozstrzygania posługuje się następującym algorytmem: • Punktem wyjścia jest faza BUS FREE, tj. BSY - SEL = 0. • Urządzenie wchodzące do współzawodnictwa aktywuje sygnał BSY (tj. wymusza na nim niski poziom napięcia), a na szynie danych (DBO - DB7) magistrali kładzie swój identyfikator SCSI-ID. Stan ten przedstawia rysunek 7.29. Rysunek 7.28. Magistrala SCSI w fazie Arbitration Arbitration Delay [min. 2,4 milisekundy] - minimalny okres oczekiwania na ocenę priorytetów na szynie danych, liczony przez urządzenie od momentu aktywowania sygnału BSY. Urządzenie takie wchodzi w fazę Arbitration aktywując sygnał BSY i jednocześnie wystawiając swój SCSI-ID na szynę danych. Bus Clear Delay [max. 800 nanosekund] - maksymalny dopuszczalny okres czasu pomiędzy (jednym z trzech): • wykryciem fazy BUS FREE (tj. BSY=0, SEL=0) lub • stwierdzeniem, że współzawodnictwo wygrał ktoś inny (tj. został aktywowany sygnał SEL w fazie ARBITRATION) lub • wykryciem stanu RESET a momentem, gdy urządzenie przestaje sterować jakimkolwiek z sygnałów magistrali SCSI. Bus Free Delay [min. 800 nanosekund] - minimalny okres czasu, który musi odczekać każde urządzenie chcąc aktywować linię BSY (tj. pragnące wejść w fazę Arbitration) od momentu wykrycia stanu Bus Free. Bus Set Delay [max. 1,8milisekundy] - maksymalny dopuszczalny okres czasu, który może upłynąć od momentu wykrycia fazy Bus Free do wejścia w fazę Arbitration (tj. aktywowania linii BSY i wystawienia SCSI-ID na szynę danych). Bus Settle Delay [min. 400 nanosekundy] - minimalny okres czasu (liczony od ostatniej zmiany dowolnego z sygnałów sterujących), po którym stan magistrali musi się ustabilizować (tj. dać jednoznacznie określić) niezależnie od tego, jakie zmiany sygnałów sterujących go poprzedzały. • Wspomniane wyżej urządzenie odczekuje pewien okres czasu (Arbitration Delay) i przechodzi do analizy stanu linii DBO - DB7. Możliwe są następujące przypadki: •jedyną aktywną linią jest bit własnego identyfikatora, •aktywna jest również jedna z linii o niższym adresie, •aktywna jest również jedna z lini o wyższym adresie. Waga dowolnego z bitów szyny danych ma tu wymiar liczby określającej priorytet danego urządzenia (o tym właśnie adresie SCSI-ID). Priorytet ten rośnie wraz ze wzrostem tego adresu, tzn. najwyższy priorytet ma jednostka identyfikowana przez ID = 7. W przypadku pierwszym urządzenie czuje się uprawnione do przejęcia kontroli nad magistralą i daje o tym znać aktywując linię SEL. Sytuacja z punktu drugiego daje się sprowadzić do tej z punktu pierwszego, z tym, że przegrywa jednostka o niższym priorytecie. Na rysunku 7.28 urządzenie o adresie ID = l przegrywa z tym o adresie ID = 3, a w chwilę potem ID = 3 przegrywa z ID = 7. Jeżeli jednostka napotyka stan z punktu trzeciego, ma obowiązek wycofać się z konkurencji zwalniając sygnał BSY. Uwaga: Urządzenie wystawiające swój SCSI-ID na szynę danych steruje wyłącznie linią odpowiadającego sobie bitu DBx. Sterowanie to oznacza sprowadzanie tej linii do wysokiego poziomu logicznego, co w przyjętej konwencji równa się wymuszeniu napięcia O V. Inne z linii szyny danych muszą pozostać nietknięte. W przypadku linii kontroli parzystości DBP standard przewiduje: • albo zakaz sterowania tą linią, • albo sterowanie do poziomu logicznej jedynki (O V). W fazie ARBITRATION stan tej linii jest więc całkowicie nieokreślony. Wybór (Selection Phase) W fazie tej urządzenie które uzyskało dostęp do magistrali, staje się jednostką inicjującą (INIT) przebieg dalszych działań i dokonuje selekcji jednostki docelowej (TARG), do której będzie się zwracać. Taką wybieraną jednostką może być np. twardy dysk, któremu będzie się zlecać wykonanie określonej funkcji, choćby czytanie bloku danych. Charakterystyczny dla tej fazy jest brak aktywności sygnału sterującego I/O, co stanowi podstawę do odróżnienia od opisywanej w następnym punkcie fazy reselekcji. W prostych systemach, w których nie jest implementowana faza rozstrzygania, możliwe jest bezpośrednie wejście (z fazy BUS FREE) urządzenia INIT do fazy wyboru. Sytuację taką przedstawia rysunek 7.30. Rysunek 7.30. Bezpośrednie wejście urządzenia w fazę Selection Bus Clear Delay [max. 800 nanosekund] - maksymalny dopuszczalny okres czasu pomiędzy (jednym z trzech): • wykryciem fazy BUS FREE (tj. BSY=0, SEL=0) lub • stwierdzeniem, że współzawodnictwo wygrał ktoś inny (tj. został aktywowany sygnał SEL w fazie ARBITRATION) lub • wykryciem stanu RESET a momentem, gdy urządzenie przestaje sterować jakimkolwiek z sygnałów magistrali SCSI. Bus Settle Delay [min. 400 nanosekund] - minimalny okres czasu (liczony od ostatniej zmiany dowolnego z sygnałów sterujących), po którym stan magistrali musi się ustabilizować (tj. dać jednoznacznie określić) niezależnie od tego, jakie zmiany sygnałów sterujących go poprzedzały. Deskew Delay [min. 45 nanosekund] - Czas przeznaczony na kompensację różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami. Obsługa dysku twardego 451 Mamy tutaj następujący przebieg wydarzeń: • INIT odczekuje co najmniej 800 nanosekund od momentu wykrycia fazy BUS FREE. • INIT wystawia na szynę danych dwa identyfikatory SCSI-ID: swój oraz jednostki TARG. Stan szyny danych w tym momencie przedstawia rysunek 7.31. Uwaga: W systemach, w których jest tylko jeden INIT (brak fazy reselekcji) wystarczy dla uproszczenia aktywować w tym momencie jedynie adres jednostki wybieranej (TARG). • Po odczekaniu co najmniej 90 nanosekund INIT aktywuje sygnał SEL i oczekuje odpowiedzi (w postaci sygnału na linii BSY) od wywoływanej jednostki docelowejTARG. W systemach bardziej rozbudowanych wejście w fazę wyboru musi poprzedzać faza rozstrzygania (ARBITRATION). Sytuację taką przedstawia rysunek 7.32. Rysunek 7.32. Faza Arbitration poprzedza wejście urządzenia w fazę Selection Bus Clear Delay [max. 800 nanosekund] - maksymalny dopuszczalny okres czasu pomiędzy (jednym z trzech): • wykryciem fazy BUS FREE (tj. BSY=0, SEL=0) lub • stwierdzeniem, że współzawodnictwo wygrał ktoś inny (tj. został aktywowany sygnał SEL w fazie ARBITRATION) lub • wykryciem stanu RESET a momentem, gdy urządzenie przestaje sterować jakimkolwiek z sygnałów magistrali SCSI. Bus Settle Delay [min. 400 ns] - minimalny okres czasu (liczony od ostatniej zmiany dowolnego z sygnałów sterujących), po którym stan magistrali musi się ustabilizować (tj. dać jednoznacznie określić) niezależnie od tego, jakie zmiany sygnałów sterujących go poprzedzały. Deskew Delay [min. 45 nanosekund] - Czas przeznaczony na kompensację różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami. Podobnie i w tym przypadku: • INIT odczekuje co najmniej 1,2 milisekundy liczone od momentu aktywowania SEL (pozostałość po wygranej fazie ARBITRATION). • INIT wystawia na szynę danych dwa identyfikatory SCSI-ID: swój oraz jednostki TARG. Stan szyny danych jest w tym momencie taki, jak to już przedstawiono na rysunku 7.31. Uwaga: W systemach, w których jest tylko jeden INIT (brak fazy reselekcji) wystarczy dla uproszczenia aktywować w tym momencie jedynie adres jednostki wybieranej (TARG). • INIT zwalnia linię BSY po odczekaniu co najmniej 90 nanosekund. INIT musi teraz odczekać co najmniej 400 nanosekund zanim może spodziewać się odpowiedzi (w postacisygnału na linii BSY) od TARG. Zarówno w prostych, jak i złożonych systemach urządzenie TARG ma prawo uważać się za wybrane, gdy spełnione są następujące warunki: •urządzenie wykrywa swój adres SCSI-ID na szynie danych; •sygnał SEL jest aktywny; • sygnały BSY i l/O pozostają nieaktywne w czasie co najmniej 400 ns. Odpowiedź Urządzenie które stwierdzi, że zostało wybrane powinno odpowiedzieć w przeciągu 200 milisekund aktywując linię BSY. Najpóźniej w 90 ns po uzyskaniu takiego potwierdzenia jednostka wybierająca (INIT) musi zwolnić sygnał SEL. Dopiero w tym momencie dopusz czalne sąjakiekolwiek zmiany na szynie danych magistrali. Przekroczenie czasu oczekiwania na odpowiedź Jeżeli jednostka wybierająca nie otrzymuje oczekiwanej odpowiedzi w czasie 250 u,s następuje przekroczenie czasu (ang. Time Out). Rozpoczyna się następująca sekwencja: • INIT aktywuje linię RST, aby wywołać stan RESET. • INIT steruje sygnał SEL i zwalnia szynę danych (obydwa SCSI-ID). • Przez 200 milisekundy oczekiwana jest odpowiedź od TARG. Jeżeli odpowiedź mimo tego nie nadchodzi, INIT zwalnia SEL i pozwala wejść magistrali w fazę BUS FREE. • Jeżeli odpowiedź nadejdzie w powyżej określonym czasie INIT uznaje, że faza SELECTION zakończyła się pomyślnie. Reselekcja (Reselection) W fazie tej następuje ponowne nawiązanie kontaktu między INIT i TARG, przy czym tym razem inicjatywa wychodzi ze strony TARG. System taki pozwala na natychmiastowe zwolnienie magistrali (tuż po przekazaniu rozkazu) i oddaniu jej do dyspozycji innych urządzeń. Dzięki takiemu rozwiązaniu tworzą się kanały logiczne łączące różne pary urządzeń. W danym momencie magistrala może łączyć tylko jedną parę; inne w tym czasie mogą przetwarzać rozkazy (np. pozycjonować głowice, przewijać taśmę, dokonywać kompresji danych itp.). Operacja odczytu sektora dysku trwa stosunkowo długo. Sumując wszystkie nieuniknione opóźnienia otrzymuje się wysoce prawdopodobną realistyczną wartość 20 milisekunds, zanim512 bajtów danych gotowych jest do przesłania do pamięci. Średnio wydajna magistrala SCSI (transfer 5 MB/s) może w tym czasie przetransportować około 100 kB różnych informacji. Stopień wykorzystania magistrali wynosiłby więc tylko 0,5 % gdyby urządzenia blokowały się nawzajem. Tak więc TARG nawiązuje kontakt z INIT dopiero wtedy, gdy gotów jest do przekazywania danych. Urządzenie pragnące wejść w fazę RESELECTION musi przejść przez ARBITRATION aby uzyskać dostęp do szyny. Cechą charakterystyczną odróżniającą tę fazę od SELECTION jest aktywny sygnał I/O. Stan magistrali SCSI w fazie RESELECTION przedstawiony jest na rysunku 7.33. Rysunek 7.33. Magistrala SCSI w fazie reselekcji Bus Clear Delay [max. 800 nanaosekund] - maksymalny dopuszczalny okres czasu pomiędzy (jednymz trzech): • wykryciem fazy BUS FREE (tj. BSY=0, SEL=0) lub • stwierdzeniem, że współzawodnictwo wygrał ktoś inny (tj. zosta! aktywowany sygnał SEL w fazie ARB1TRATION) lub • wykryciem stanu RESET a momentem, gdy urządzenie przestaje sterować jakimkolwiek z sygnałów magistrali SCSI. Bus Settle Delay [min. 400 nanosec,] - minimalny okres czasu (liczony od ostatniej zmiany dowolnego z sygnałów sterujących), po którym stan magistrali musi się ustabilizować (tj. dać jednoznacznie określić) niezależnie od tego, jakie zmiany sygnałów sterujących go poprzedzały Deskew Delay [min. 45 nanosec.] - Czas przeznaczony na kompensację różnic w czasach propagacjisygnałów pomiędzy różnymi urządzeniami. Uwaga: Faza reselekcji może być używana wyłącznie w tych systemach, które mają zaimple-mentowaną fazę rozstrzygania. Wejście w fazę • TARG musi uzyskać kontrolę nad szyną przechodząc przez fazę ARBITRA-TION (patrz uwaga powyżej) i wychodzi z niej z aktywnym sygnałem SEL. • TARG musi odczekać l ,2 milisec od momentu w którym aktywował SEL. • TARG wystawia na szynę danych DBO - DB7, DBP identyfikatory SCSI-ID swoje i tej jednostki INIT, z którą zamierza się powtórnie połączyć. Stan szyny danych w tym momencie przedstawiony jest na rysunku 7.34. Po wystawieniu identyfikatorów adresowych aktywowany jest sygnał sterujący I/O. • TARG odczekuje 90 nanosec, i zwalnia sygnał BSY. • TARG odczekuje co najmniej 400 nanosec. na odpowiedź (BSY) ód jednostki INIT. Odpowiedź Urządzenie uznaje, że jest wywoływane w fazie reselekcji (tzn. jako INIT), jeżeli: • sygnały SEL i I/O są aktywne, • sygnał BSY jest wyłączony przez co najmniej 400 ns, • na szynie danych znajduje się własny adres SCSI-ID. Wywołane urządzenie udziela odpowiedzi w postaci sygnału BSY. Odpowiedzi należy udzielić w czasie krótszym od 200 milisec.. Jednostka adresowana w fazie reselekcji (INIT) musi również zbadać stan całej szyny danych, aby zidentyfikować urządzenie, które jest inicjatorem tej fazy (TARG). Warto dodać, że w fazie reselekcji może brać udział linia DBP (kontrola parzystości szyny danych DBO - DB7). Obowiązuje tu generalna zasada odnosząca się do magistrali SCSI jako całości wraz z wszystkimi współpracującymi jednostkami. Urządzenia te mają w zasadzie możliwość wyboru (za pomocą zwor konfiguracyjnych) w jakim trybie pracują: z kontrolą parzystości czy bez. Należy zawsze tak konfigurować system aby każde urządzenie korzystało z tej samej opcji: albo wszystkie kontrolują parzystość (i ją również wytwarzają), albo żadne z nich. Zależnie więc od konfiguracji, IN1T może nie odpowiedzieć wywołanie w fazie reselekcji jeżeli stwierdzi błąd kontroli parzystości. Jeżeli organizator fazy RESELECTION (tzn. TARG) otrzyma odpowiedź od inicjatora w postaci wspomnianego impulsu na linii BSY zwalnia sygnał SEL (po czasie max. 90 ns). Inicjator upewniwszy się, że SEL został zwolniony, zwalnia w odpowiedzi na to sygnał BSY. Przekroczenie czasu oczekiwania na odpowiedź Jeżeli jednostka wywołująca nie otrzymuje oczekiwanej odpowiedzi w czasie 250 us, następuje tzw. przekroczenie czasu (Time Out). Rozpoczyna się następująca sekwencja: • TARG aktywuje linię RST, aby wywołać stan RESET. • TARG steruje sygnał SEL i zwalnia szynę danych (obydwa SCSI-ID). • Przez 200 f.is oczekiwana jest odpowiedź od INIT. Jeżeli odpowiedź mimo tego nie nadchodzi, TARG zwalnia SEL i pozwala wejść magistrali w fazę BUS FREE. • Jeżeli odpowiedź nadejdzie w powyżej określonym czasie TARG uznaje, że faza RESELECTION zakończyła się pomyślnie. Fazy informacyjne To, co opisano powyżej, odnosi się do samych mechanizmów dostępu urządzeń do magistrali SCSI. Głównym jej zadaniem jest przecież jednak transmisja informacji. Pod tym pojęciem rozumie się tu nie tylko „czyste" dane, tj. na przykład zawartość bloku danych sektora dysku, ale i też szereg innych dodatkowych informacji, które wymieniają między sobą połączone magistralą urządzenia. Wszelkie informacje transmitowane są przez szynę danych w jednej z tak zwanych faz informacyjnych. Do grupy faz informacyjnych zaliczane są: • faza rozkazowa (COMMAND), • faza danych (DATA), • zwrot statusu (STATUS), • przekazywanie wiadomości (MESSAGE). Obraz przebiegów na magistrali w czasie realizacji powyższych faz informacyjnych przedstawia rysunek 7.35. W fazie COMMAND przekazywane są rozkazy do jednostki TARG. Rysunek 7.35. Magistrala SCSI w fazach informacyjnych ns - czytaj "nanosekundy" us - czytaj "milisekundy" Bus Settle Delay [min. 400 ns] - minimalny okres czasu (liczony od ostatniej zmiany dowolnego z sygnałów sterujących), po którym stan magistrali musi się ustabilizować (tj. dać jednoznacznie określić) niezależnie od tego, jakie zmiany sygnałów sterujących go poprzedzały. Dane mogą być oczywiście przesyłane w obydwu kierunkach: zarówno od TARG do INIT, jak i od INIT do TARG. Z tego względu faza DATA może przyjąć jedną z dwóch postaci: dane wychodzące (do INIT), czyli DATA OUT i napływające (do INIT), czyli DATA IN. W fazie statusowej jednostka TARG składa krótki raport z wyników przeprowadzonej operacji. Oprócz rozkazów, danych i raportu urządzenia wymieniają między sobą tzw. wiadomości (MESSAGES), które nie stanowią danych z punktu widzenia użytkownika, ale są niezbędne dla utrzymania poprawnej komunikacji i obsługi błędów. Wiadomości te mogą również przepływać w obydwu kierunkach. Stosownie do tego istnieje faza MESSAGE IN (wiadomości napływają do INIT) oraz MESSAGE OUT (wiadomości są przez INIT wysyłane). Rodzaj fazy jest dokładnie określony przez kombinację trzech sygnałów sterujących magistrali: C/D, I/O i MSG. Z ośmiu możliwych stanów dwa są zabronione, tak jak przedstawiono to w tabeli 7.29. Prawo do posługiwania się tymi trzema sygnałami ma jedynie jednostka uznana jako TARG (zacieniowany obszar w tabeli 7.30). Wynika z tego jasno, że tylko TARG decyduje o rodzaju fazy informacyjnej. Tabela 7.29. Kodowanie faz informacyjnych Linia C/D; Linia I/O; Linia MSG; Na szynie danych; Kierunek; Nazwa cyklu 0; 0; 0; Dane (Data); INIT -> TARG; DATA OUT 0; 1;0; Dane (Data); TARG -> INIT; DATA INl 1; 0; 0; Rozkazy (Command); INIT -> TARG; COMMAND 1; 1; 0 ; Status (Status); TARG -> INIT; STATUS 0; 0; 1; -; -; stan zabroniony 0; 1; 1; -; -; stan zabroniony 1; 0O; 1; Wiadomość (Message); INIT -> TARG; MESSAGE OUT 1; 1; 1; Wiadomość (Message); TARG -> INIT; MESSAGE IN Tabela 7.30. Zakres uprawnień w fazach informacyjnych. Faza; Linia: BSY; SEL; f/O; C/D; MSG; REQ; ACK; DB,P; ATN; RST Bus Free; F; F; F; F; F; F; F; F; F; D Arbitration; D; W; F; F; F; F; F; ID; F; D; Selection; I/T; I; F; F; F; F; F; I; I; D Reselection; I/T; T; T; F; F; F; F; T; I; D Command; T; F; T; T; T; T; I; I; I; D Data In; T; F; T; T; T; T; I; T; I; D Data Out; T; F T; T; T; T; I; I; I; D Status; T; F; T; T; T; T; I; T; I; D Message In; T; F; T; T; T; T; I; T; I; D Message Out; T; F; T; T; T; T; I; I; I; D Sama informacja, jakiejkolwiek by nie była postaci, płynie szyną danych DBO - DB7, DBP pod ewentualną kontrolą bajtu parzystości. Pojedyncze bajty tego strumienia przesyłane są pomiędzy TARG i INIT w sposób określony często mianem Hardware Hand-Shake (z ang. uścisk dłoni). Rolę tego potwierdzającego uścisku (dla każdego z bajtów oddzielnie lub też dla ich grupy) pełni odpowiednia sekwencja impulsów na liniach ACK i REQ, tak jak to przedstawiono na rysunku 7.35. W zależności od sposobu wysyłania impulsu REQ i sprawdzania odpowiedzi ACK zdefiniowane są dwa typy Podczas trwania faz infonnacyjnych TARG musi utrzymywać sygnał BSY w stanie aktywnym. Linia SEL natomiast musi pozostawać zwolniona. TARG musi ponadto, mając do dyspozycji trójkę sygnałów kontrolnych (C/D, I/O i MSG), ustanowić określony rodzaj fazy informacyjnej najpóźniej na 400 ns przed wysłaniem pierwszego impulsu REQ. Ten pierwszy impuls inicjuje właściwą transmisję. Zestaw sygnałów sterujących musi pozostać niezmieniony co najmniej przez czas trwania cyklu przekazu jednego bajtu, tzn. do nadejścia tylnego zbocza impulsu potwierdzającego ACK. W tym momencie jednak TARG jest już upoważniony do zmiany kombinacji trójki I/O-C/D-MSG w celu wywołania innej fazy informacyjnej (stosownie do kontekstu). Te trzy sygnały sterujące mogą się zmieniać jednocześnie lub niezależnie, ale nowa, określona przez nie faza rozpocznie się dopiero w momencie wystąpienia impulsu na linii REQ (a ściśle jego przedniego zbocza). Transfer danych w fazach informacyjnych Tryb asynchroniczny Asynchroniczny tryb wymiany informacji opiera się na wzajemnej kontroli (poprzez INIT i TARG) kolejnych par impulsów REQ i ACK. Ten tryb transmisji może być stosowany we wszystkich sześciu fazach informacyjnych (patrz tabela 7.29). Dozwolone jest więc zarówno TARG -> INIT, jak i INIT -> TARG. Kierunek przepływu danych ustala urządzenie TARG sterując linią I/O. Przykłady transmisji w obydwu kierunkach przedstawione są na rysunku 7.36. • Transmisja w kierunku TARG -> INIT. TARG ustanawia ten kierunek transmisji aktywując sygnał sterujący I/O. Kolejne bajty informacyjne przepływają szyną danych DBO - DB7, DBP według następującego schematu: • TARG kładzie na liniach DBO - DB7, DBP bajt danych i aktywuje REQ. Obraz szyny danych nie może ulegać zmianom aż do czasu nadejścia do TARG potwierdzenia, którym jest przednie zbocze impulsu ACK. • INIT zdejmuje bajt danych linii DBO - DB7, DBP (tzn. zatrzaskuje go w swoim buforze) po tym jak stwierdzi aktywność sygnału REQ. W odpowiedzi na ten impuls aktywowany jest (przez INIT) sygnał ACK. • TARG przyjąwszy potwierdzenie w postaci ACK zwalnia z kolei linię REQ. Teraz można już zmienić obraz szyny danych (przesyłając ewentualnie następny bajt). • INIT zwalnia ACK po rozpoznaniu zwolnienia REQ. • Powyższy cykl może się powtarzać; zostanie przekazany następny bajt. • Transmisja w kierunku INIT -> TARG. Jeżeli sygnał I/O jest zwolniony, przepływ informacji od INIT do TARG odbywa się zgodnie z następującym schematem: Rysdunek 7.36. Wymiana danych w trybie asynchronicznym. Deskew Delay [min. 45 ns] - czas przeznaczony na kompensacje różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami. Cable Skew Delay [max. 10 ns] - maksymalna dopuszczalna różnica czasów propagacji dowolnego z sygnałów wzdłuż magistrali SCSI pomiędzy dowolną parą urządzeń. TARG aktywuje sygnał REQ co oznacza wezwanie dla INIT do wysyłania danych. INIT wystawia na linie DBO - DB7, DBP bajt danych i aktywuje ACK. Stan szyny danych należy utrzymać do czasu stwierdzenia (przez INIT), że zwolniony został REQ. TARG zdejmuje bajt z szyny danych po wykryciu aktywności ACK, po czym zwalnia REQ dla potwierdzenia odbioru. INIT stwierdza zwolnienie REQ i zwalnia ACK. Dopiero w tym momencie stan szyny danych może ulec zmianie. TARG przystępuje do wyzwolenia akcji przesłania następnego bajtu, gdy stwierdzi zwolnienie ACK. Cykl może się powtarzać. TARG aktywuje REQ i jesteśmy na początku cyklu. Prędkość transmisji danych Na prędkość przesyłania danych magistralą SCSI w trybie asynchronicznym składa się kilka czynników. Są one przedstawione na rysunku 7.37. Składowe T1 i T2 reprezentuj ą następujące elementy: T1 =T1' + 2a T2 = T2' + 2a gdzie: T1' - opóźnienie między aktywowaniem impulsu REQ, a stwierdzeniem aktywności ACK, mierzone na końcówkach INIT; przyjmuje się 100 ns. T2' - opóźnienie między zwolnieniem linii REQ, a stwierdzeniem zwolnienia linii ACK, mierzone na końcówkach INIT; przyjmuje się 150 ns. a - opóźnienie sygnału na jednostkę długości przewodu; zakłada się 15 ns/m. Zgodnie z rysunkiem 7.37 częstotliwość z jaką transportowane są poszczególne bajty danych wyraża się następującą formułą: f = 1 / T = 1 / (T1 + T2 + T3) W tabeli 7.31 zebrane zostały wyniki obliczeń dla kilku przykładowych długości przewodów magistrali. Tabela 7.31. Prędkości transmisji asynchronicznej w funkcji długości magistrali Długość magistrali [m]; 1; 2; n; 4; 5; 6 Prędkość transmisji [MB/s]; 2,78; 2,38; 2,09; 1,85; 1,67; 1.52 Tryb synchroniczny W trybie synchronicznym następuje pewne uproszczenie mechanizmu Hand-Shake. Rezygnuje się z każdorazowego potwierdzania pojedynczego bajtu danych przy użyciu sekwencji impulsów REQ/ACK. Sygnał ACK służy tu do potwierdzania pewnej większej grupy bajtów. Transfer tego typu dopuszczalny jest wyłącznie w fazach informacyjnych DATA IN i DATA OUT. Ponadto nie wszystkie urządzenia SCSI dostosowane są dc pracy w tym stylu. Standardowym trybem pracy magistrali w fazach informacyjnych jest tryb asynchro-niczny. Synchroniczna wymiana danych wymaga wcześniejszego uzgodnienia między mającymi ją stosować urządzeniami. Odbywa się to na drodze wymiany wiadomości! Synchronous Data Transfer Reąuest. Wymiana ta stanowi uzgodnienie tzw. parametrów transmisji synchronicznej: • RAO - liczbę impulsów REQ, które może wysłać TARG zanim otrzyma sygnał potwierdzający ACK tj. REQ/ACK Offset. • TP - minimalna długość okresu sygnału REQ (i ACK), tj. Transfer Period. Uwaga: Zarówno moment włączenia napięcia zasilania, jak i wywołanie funkcji RESET wprowadza magistralę w tryb asynchroniczny. Przebiegi sygnałów podczas synchronicznego trybu transmisji danych prezentuje rysunek 7.38. Po stosownym uzgodnieniu parametrów TARG może wysłać więcej niż jeden impuls REQ (każdemu towarzyszy oczywiście jeden bajt danych) zanim nie otrzyma potwierdzenia w postaci przedniego zbocza impulsu ACK. Liczba takich wysłanych i niepotwierdzonych impulsów musi zawierać się w zakresie zdefiniowanym jako parametr RAO. W szczególności może też być od niego mniejsza. Tak więc jeżeli różnica między liczbą wysłanych impulsów REQ a liczbą odebranych ACK osiągnie RAO, TARG musi przerwać nadawanie do czasu nadejścia potwierdzenia ACK. Drugie ograniczenie wynika z parametru TP. Okres trwania przebiegu na liniach ACK i REQ, tj. odstęp pomiędzy kolejnymi najbliższymi zboczami tego samego rodzaju (narastającymi lub opadającymi) nie może być krótszy niż uzgodnione TP. Nakłada to automatycznie ograniczenie na maksymalną dopuszczalną częstotliwość pracy „pseudo-zegara" transmisji synchronicznej. Jak wspomniałem wcześniej tryb synchroniczny jest dozwolony w fazach DATA IN oraz DATA OUT. Mamy więc przypadki transmisji w dwóch kierunkach, oba przedstawione na rysunku 7.38. • Kierunek TARG -> INIT. TARG ustanawia powyższy kierunek transmisji poprzez aktywowanie linii I/O. Wymiana danych przebiega według następującego algorytmu: • TARG wystawia bajt na szynę danych i wysyła impuls REQ. • Z zachowaniem zależności czasowych przedstawionych na rysunku 7.32 ma miejsce powtórzenie poprzedniego punktu tyle razy, by nie przekroczyć uzgodnionej wartości parametru RAO. • INIT odbiera dane w takt nadchodzących do niego impulsów REQ. • INIT wysyła tyle impulsów ACK, ile odebrał bajtów danych. Snnchroniczna transmisja danych - opis rysunku 7.38 Assertion Period [min. 90 ns] - minimalna szerokość impulsu ACK (wysyłanego przez IN1T) i sygnału REQ (wysyłanego przez TARG) niezbędne do utrzymania synchronicznej wymiany danych. Negation Period [min. 90 ns] - w synchronicznym trybie wymiany danych minimalny czas liczony od tylnego zbocza impulsu REQ (lub ACK) do przedniego zbocza następnego impulsu REQ (lub ACK). Transfer Period - w synchronicznym trybie wymiany danych minimalny czas (minimalny czas repetycji) liczony od przedniego zbocza impulsu REQ (lub ACK) do przedniego zbocza następnego impulsu REQ (lub ACK). Aktualna wartość tego parametru uzgadniana jest pomiędzy INIT i TARG za pomocą wymiany wiadomości SYNCHRONOUS DATA TRANSFER REQUEST. Deskew Delay [min. 45 ns] - czas przeznaczony na kompensację różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami. Cable Skew Delay [max. 10 ns] - maksymalna dopuszczalna różnica czasów propagacji dowolnego /. sygnałów wzdłuż magistrali SCSI pomiędzy dowolną parą urządzeń. Hołd Time [min. 45 ns] - w synchronicznym trybie wymiany danych, minimalny czas liczony od przedniego zbocza ACK, przez który należy utrzymywać niezmienny stan szyny danych (Data Bvte). • Kierunek TARG <- INIT. TARG ustanawia powyższy kierunek transmisji poprzez zwolnienie linii I/O. Wymiana danych przebiega teraz według następującego algorytmu: • TARG wysyła impuls REQ czym pobudza INIT do wystawienia bajtu na szynę danych. Po wystawieniu bajtu INIT wysyła impuls ACK. • Z zachowaniem zależności czasowych przedstawionych na rysunku 7.38 ma miejsce powtórzenie poprzedniego punktu tyle razy, by nie przekroczyć uzgodnionej wartości parametru RAO. • TARG odbiera dane w takt nadchodzących do niego impulsów ACK. Uwaga: Dla poprawnego zakończenia fazy DATA IN lub DATA OUT wymagane jest, by całkowita liczba wysłanych impulsów REQ była równa sumarycznej liczbie odebranych impulsów ACK. Tryb synchroniczny „Fast" Tryb ten jest przyspieszoną odmianą trybu synchronicznego i ma miejsce, gdy urządzenia uzgadniają parametr TP krótszy od 200 ns. Najmniejsza dopuszczalna wartość tego parametru wynosi 100 ns. Tak więc tryb Fast leży w zakresie 100 < TP < 200. Sam mechanizm przesyłania danych nie różni się od opisanego powyżej; inne są tylko zależności czasowe. Przedstawia to rysunek 7.39. Prędkość transmisji danych Schemat przebiegu transmisji danych w trybie synchronicznym, rozważany pod kątem osiąganej prędkości przedstawia rysunek 7.40. Parametry transmisji synchronicznej muszą być uzgadniane między INIT i TARG przed rozpoczęciem przekazywania danych. Uzgodnienie to ma miejsce (jeżeli do niego dochodzi; nie każde urządzenie jest do tej formy przekazu zdolne) w fazie informacyjnej MESSAGE. INIT wysyła do TARG wiadomość SYNCHRONOUS DATA TRANSFER REQUEST. Wiadomość ta zawiera w sobie dwa parametry transmisji: REQ/ACK Offset (RAO) i TRANSFER PERIOD (TP). W tabeli 7.32 przedstawiony jest wyciąg z listy parametrów akceptowanych przez większość dysków twardych (oczywiście tych, które w ogóle zdolne są do trybu synchronicznego). Średnia prędkość transmisji ADTR (Average Data Transfer Ratę) jest funkcją uzgodnionych parametrów oraz rzeczywistych właściwości linii przesyłowych magistrali (długości, pojemności). Transmisja synchroniczna typu Fast - opis rys.7.39 Transfer Period - w synchronicznym trybie wymiany danych minimalny czas (minimalny czas repetycji) liczony od przedniego zbocza impulsu REQ (lub ACK) do przedniego zbocza następnego impulsu REQ (lub ACK). Aktualna wartość tego parametru uzgadniana jest pomiędzy 1NIT i TARG za pomocą wymiany wiadomości SYNCHRONOUS DATA TRANSFER REQUEST. Fast Assertion Period [min. 30 ns] - w trybie synchronicznym fast minimalna szerokość impulsu ACK (wysyłanego przez INIT) i sygnału REQ (wysyłanego przez TARG) niezbędne do utrzymania synchronicznej wymiany danych. Fast Negation Period [min. 30 ns] - w synchronicznym trybie wymiany danych fast minimalny czas liczony od tylnego zbocza impulsu REQ (lub ACK) do przedniego zbocza następnego impulsu REQ (lub ACK). Fast Deskew Delay [min. 20 ns] - czas przeznaczony na kompensację różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami podczas pracy w trybie fast. Fast Cable Skew Delay [max. 5 ns] - maksymalna dopuszczalna różnica czasów propagacji dowolnego z sygnałów wzdłuż magistrali SCSI pomiędzy dowolną parą urządzeń podczas pracy w trybie fast. Fast Hołd Time [min. 10 ns] - w trybie synchronicznym Fast wymiany danych, minimalny czas liczony od przedniego zbocza ACK, przez który należy utrzymywać niezmienny stan szyny danych (Data Byte). Tabela 7.32. Typowe wartości parametrów transmisji w trybie synchronicznym Parametr; Wartość; Maksymalna prędkość [MB/s]; Uwagi; Offset REQ/ACK; 2-15; -; - Minimalny okres impulsu REQ (Transfer Period); 0x1 9h;: 10; Odpowiada TP = 100 ns, (TP < 200; FAST) 0x1 Fh; 8; Odpowiada TP = 125 ns, (TP < 200; FAST) 0x25h; 6,7; Odpowiada TP - 150 ns, (TP < 200; FAST) 0x2Bh; 5,7; Odpowiada TP - 175 ns, (TP < 200; FAST) 0x32h; 5; TP = 200 ns 0x3 8h; 4,4; TP = 225 ns ...; ...; ... 0xClh; 1,3; TP = 775 ns 0xC8h; 1,2; TP = 800 ns Prędkość średnią można oszacować w następujący sposób: • jeżeli (RAO * TP) < (T + 260), to ADTR = 1000 / TP [MB/s], • jeżeli (RAO * TP) < (T + 260), to ADTR = (RAO * 1000) / (T + 260) [MB/s]. gdzie: T - średni czas dzielący przednie zbocze i-tego impulsu REQ i przednie zbocze odpowiadającego mu i-tego impulsu ACK, mierzony na końcówkach TARG (tj.dysku) [ns] RAO - jest liczbą całkowitą z przedziału 2-15. Parametr TP mniejszy od 200 ns oznacza transmisję synchroniczną typu FAST (szybką). Oczywiście nie każde urządzenie może godzić się na proponowaną transmisję typu FAST; musi być przecież do tego zdolne. Dyski, które uzgadniają wymianę danych w tym trybie stanowią jednak jeszcze dosyć małą podgrupę urządzeń mogących pracować synchronicznie. Są to na ogół jednostki o pojemnościach przekraczających znacznie granicę l GB. Wartości TP z przedziału 200 - 800 ns powinny być obsługiwane prawidłowo przez każde pracujące synchronicznie urządzenie. Zmiana kierunku transmisji O rodzaju fazy informacyjnej, a tym samym o kierunku przepływu informacji szyną danych decyduje wyłącznie TARG. Z aktualnego kontekstu może oczywiście wynikać przejście międzyfazowe, w którym zmianie ulega kierunek przepływu informacji (np. DATA IN na MESSAGE OUT). W przedziale czasu dzielącym takie dwie fazy, sygnały sterujące magistrali muszą spełniać określone warunki: • Linie BSY, SEL oraz REQ i ACK nie mogą się zmieniać. • Sygnały RST i ATN mogą być wprawdzie aktywowane, ale nie tak długo by zostały zinterpretowane jako wywołanie określonej funkcji. • Stan sygnałów sterujących C/D, I/O i MSG: • Przy zmianie kierunku z OUT na IN (tj. z TARG -> INIT na 1NIT ->TARG) TARG może zacząć sterowanie linii DB (szyny danych) nie wcześniej niż 800 ns po aktywowaniu I/O. INIT musi zwolnić szynę danych nie później niż 400 ns od wykrycia aktywności na linii I/O. • Przy zmianie kierunku z IN na OUT (tj. z INIT -> TARG na TARG -> INIT) TARG musi przestać sterować linie DB (szynę danych) w przeciągu 45 ns od zwolnienia I/O. Omówione warunki czasowe zobrazowane zostały na rysunku 7.41. Zmiana kierunku przepływu danych - opis rys.7.41 Data Release Delay [max. 400 ns] - maksymalny dopuszczalny czas, liczony od momentu wykrycia zmiany O -» l sygnału I/O, po którym inicjator zwalnia szynę danych (Data Bus). Bus Settle Delay [min. 400 ns] - minimalny okres czasu (liczony od ostatniej zmiany dowolnego z sygnałów sterujących), po którym stan magistrali musi się ustabilizować (tj. dać jednoznacznie określić) niezależnie od tego, jakie zmiany sygnałów sterujących poprzedzały go. Deskew Delay [min. 45 ns] - czas przeznaczony na kompensację różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami. Sytuacje wyjątkowe Oprócz sygnałów sterujących I/O, MSG, C/D oraz BSY i SEL identyfikujących jednoznacznie fazy pracy magistrali mamy jeszcze do dyspozycji dwie linie specjalnego przeznaczenia: RST i ATN. Obie służą do wymuszania określonych przejść międzyfazo-wych, innych niż by to wynikało z sekwencji aktualnie realizowanych operacji. Attention Należy przypomnieć, że w fazach informacyjnych jedyną jednostką uprawnioną do sterowania liniami I/O, C/D i MSG jest TARG. INIT pełni rolę wykonawcy i nie ma możliwości zwrócenia na siebie uwagi, chyba że inicjatywa wychodzi ze strony TARG. Dzięki istnieniu funkcji ATTENTION inicjator może natomiast zasygnalizować, że ma do przekazania wiadomość (MESSAGE) dla TARG. Stan sygnałów sterujących magistrali SCSI w trakcie realizacji tej funkcji oraz towarzyszące jej uzależnienia czasowe przedstawiają wykresy na rysunku 7.42. Rysunek 7.42. Realizacja funkcji Attention - opis Deskew Delay [min. 45 ns] - czas przeznaczony na kompensację różnic w czasach propagacji sygnałów pomiędzy różnymi urządzeniami. Wywołanie funkcji Wykorzystanie linii ATN, tj. moment aktywowania i zwolnienia leży w gestii inicjatora. • Aktywowanie ATN. Inicjator wywołuje funkcję ATTENTION aktywując linię ATN w dowolnym momencie, za wyjątkiem trwania faz ARBITRATION lub BUS FREE. W fazach informacyjnych inicjator powinien informować TARG o zamiarze wywołania tej funkcji zanim TARG przejdzie do następnej fazy, czyli na co najmniej 90 ns przed tylnym zboczem impulsu ACK potwierdzającego ostatni bajt bieżącej fazy. Jeżeli warunek ten nie zostanie spełniony, TARG może przyjąć zgłoszenie ATN dopiero pod koniec kolejnej fazy, co niekoniecznie musi być zgodne za zamierzeniami INIT. Zwolnienie ATN. Będąc w fazie MESSAGE OUT (INIT przekazuje wiadomość do TARG) inicjator musi utrzymywać sygnał ATN w stanie aktywnym. Linię ATN wolno zwolnić w jednym z okien czasowych, w których ACK = 0. W czasie trwania przekazu ostatniego bajtu wiadomości zwolnienie ATN następuje więc między aktywowaniem REQ a otrzymaniem potwierdzenia ACK. Reakcja TARG W odpowiedzi na wywołanie funkcji ATTENTION TARG musi wejść w fazę MESSAGE OUT. Dokładny moment wejścia zależny jest od bieżącej sytuacji i określany następująco: • W fazie COMMAND: natychmiast po dokończeniu cyklu przesłania dowolnego z bajtów składowych CDB, niezależnie od tego, czy był to już bajt ostatni. •W fazie DATA: po dokończeniu bieżącej fazy. • W fazie STATUS: po dokończeniu przesłania bajtu statusowego. •W fazie MESSAGE: po zakończeniu przekazu bieżącej wiadomości. •W fazie SELECTION: natychmiast po zakończeniu fazy. • W fazie RESET: po zakończeniu przesłania wiadomości IDENTIFY. Reset RESET jest funkcją o działaniu globalnym i natychmiastowym, a zasięgiem swym obejmuje zarówno TARG, jak i INIT. Funkcja ta dotyczy wszystkich urządzeń dołączonych do magistrali, a jej wykonanie jest niezależne od fazy, w jakiej magistrala się znajduje. Można też powiedzieć, że jest to funkcja o najwyższym priorytecie. Wywołanie funkcji Funkcję RESET może wywołać każde z podłączonych do magistrali urządzeń, jeżeli aktywuje linię RST na czas dłuższy od 25 ms. Stan wszystkich innych linii magistrali jest w tym przedziale czasowym (tzn. gdy RST jest aktywne) nieokreślony. Przebieg realizacji tej funkcji przedstawia rysunek 7.43. Reakcja urządzeń Urządzenie, które wykryło aktywny sygnał RST ma obowiązek zwolnić wszystkie linie (deaktywować wszystkie używane sygnały) w przeciągu maksymalnie 800 ns. Rysunek 7.43. Stan magistrali po wywołaniu funkcji Reset - opis Bus Clear Delay [max. 800 ns] - maksymalny dopuszczalny okres czasu pomiędzy (jednym z trzech): • wykryciem fazy BUS FREE (tj. BSY=0, SEL=0) lub • stwierdzeniem, że współzawodnictwo wygrał ktoś inny (tj. został aktywowany sygnał SEL w fazie ARBITRATION) lub • wykryciem stanu RESET a momentem, gdy urządzenie przestaje sterować jakimkolwiek z sygnałów magistrali SCSI. Reset Hołd Time [min. 25jas] - minimalny okres, podczas którego musi pozostać aktywny sygnał na linii RST, aby wywołać stan RESET. Konsekwencją przeprowadzenia tej funkcji jest więc odłączenie się wszystkich urządzeń i wejście magistrali w fazę BUS FREE. Dyski twarde nie mają zaimplementowanej możliwości wywoływania tej funkcji; muszą ją natomiast obsługiwać. Obsługa taka obejmuje oprócz obowiązkowego zwolnienia linii magistrali następujące punkty: • Przerwanie wykonywania aktualnego rozkazu. • Usunięcie rozkazów oczekujących w kolejce (Queue}. • Przestają obowiązywać uzgodnione parametry transmisji w trybie synchronicznym i przywracany jest tryb asynchroniczny. • Niszczony jest blok poszerzonych danych statusowych (Sense Data). • Unieważnione zostają dane w buforze dysku, które odczytane zostały w ramach akcji „czytania z wyprzedzeniem" (Read Aheacf). Rozkazy systemowe Rozkazy SCSI stanowią kilkubajtowe bloki (CDB - Command Data Block) niosące w sobie oprócz kodu identyfikującego również niezbędne parametry. Wszystkie CDB zbudowane są według tego samego schematu: Bajt l: Kod rozkazu Bajt 2: ... Bajt 3:... Bajt ostatni: Bajt kontrolny Obsługa dysku twardego 471 Długość rozkazu może wynosić 6, 10 lub 12 bajtów. Rozkazy 10- i 12-bajtowe określane są mianem rozszerzonych (Extended). Przedstawiony na rysunku 7.44 kod rozkazu (pierwszy bajt) składa się z 3-bitowego pola grupowego i 5-bitowego pola identyfikacji. W ramach jednej grupy mogą więc być zrealizowane 32 rozkazy. Kod rozkazu systemu SCSI Pole grupowe może przyjąć jedną z następujących wartości: 0:rozkazy 6-bajtowe, 1: rozkazy 10-bajtowe, 2, 3, 4: zarezerwowane, 5: rozkazy 12-bajtowe, 6,7: zarezerwowane. Teoretycznie możliwe jest więc zakodowanie 256 różnych poleceń. Większość kontrolerów SCSI realizuje jednak wyłącznie wybrane rozkazy 6- i 10-bajtowe. Zestawienie tych najczęściej implementowanych zawarte jest w tabeli 7.33. Ogólna konstrukcja tych poleceń przedstawiona jest na rysunkach 7.45 i 7.46. Ze względu na kompatybilność zachowane jest 3-bitowe pole LUN, które identyfikuje logiczny numer podrzędnej jednostki będącej pod opieką tego samego urządzenia TARG; standard dopuszcza istnienie do 8 takich jednostek. Obecnie, nawet jeśli tak jest, są one administrowane logicznie jako kolejne bloki danych i obowiązuje ustawienie LUN = 0. Adres bloku logicznego (ŁBA - Logical Block Address) ma wymiar 21 bitów w rozkazach 6-bajtowych, a 32 bity w rozkazach 10-bajtowych. Identyfikuje on logiczny blok danych, do którego odnosi się rozkaz. Jeżeli rozkaz dotyczy większej liczby takich bloków, ŁBA oznacza oczywiście początek obszaru. Rozkazy 6-bajtowe mogą adresować 2 M bloków, natomiast 10-bajtowe aż 4 G bloków. Dla dysków o typowej organizacji sektorów (512 B na sektor) odpowiada to l GB obejmowanej pojemności już przy rozkazach 6-bajtowych, co na ogół wystarcza. Jeżeli ustawiony jest bit REL (wyłącznie w rozkazach 10-bajtowych), adres ŁBA liczony jest względem ostatniego z wyspecyfikowanych bloków. Większość twardych dysków nie korzysta z możliwości adresowania względnego. Długość transmitowanych danych (TDL - Transfer Data Length) oznacza zwykle ilość bloków logicznych, choć są rozkazy, w których pola te rozumiane są jako rozmiar danych w bajtach. Magistralą SCSI można więc jednorazowo przetransportować: Tabela7.33. Zestawienie najczęściej stosowanych rozkazów SCSI Kod; Nazwa rozkazu; Znaczenie 00h; Test Unit Ready; Sprawdzenie gotowości urządzenia 01h; Rezero Unit; Ustawienie głowicy nad cylindrem O 03h; Rwguest Sense; Żądanie przesłania dodatkowego bloku informacyjnego 04h; Format Unit; Formatowanie dysku 07h; Reasign Blocks; Przesunięcie zawartości uszkodzonych bloków 08h; Read; Pobieranie danych od jednostki INT 0Ah; Write; Wysyłanie danych do jednostki INT 0Bh; Seek; Poszukiwanie bloku logicznego 12h; Inguiry; Wysyłanie listy identyfikacyjnej 15h; Modę Select; Ustanowienie trybu pracy 16h; Reserve Unit; Rezerwacja jednostki logicznej (LUN) 17h; Relase Unit; Zwolnienie jednostki logicznej (LUN) 1Ah; Modę Sense; Przesłanie do inicjatora parametrów urządzenia 11Bh; Start/Stop Unit; Zablokowanie/odblokowanie realizowania kolejnych rozkazów 1Ch; Receive Diagnostic,Results; Przesłanie wyników samokontroli IDh; Send Diagnostic; Przeprowadzenie samokontroli 25h; Read Capacity; Określenie pojemności 28h; Read Extended; Pobranie danych od inicjatora (transmisja w trybie extended) 2Ah; Write Extended; Wysłanie danych do inicjatora (transmisja w trybie extended) 2Bh; Seek Extended; Poszukiwanie bloku logicznego (tryb extended) 2Eh; Write & Yerify; Zapisywanie danych z weryfikacją 2Fh; Verify; Weryfikacja przesłanych danych 37h; Read Defect Data; Czytaj listę błędów 3Bh; Write Buffer; Zapis bufora 3Ch; Read Buffer; Odczyt bufora 3Eh; Read Long; Czytaj blok 512 bajtów 3Fh; Write Long; Zapisz blok 512 bajtów • CDB 6-bajtowe: 256 bloków (TDL = O oznacza 256) • CDB 10-bajtowe: 65535 bloków (TDL = O oznacza 0) 65 535 bloków po 512 bajtów to prawie 32 MB! Obrazuje to potężne możliwości tkwiące w koncepcji magistrali SCSI. Trzeba przy tym podkreślić, że transport tak dużego bloku danych odbywa się bez angażowania CPU. To, czy można to rozsądnie wykorzystać leży już jednak nie w gestii samej magistrali SCSI, a raczej architektury komputera. Procesor- aby nie blokować magistral PC - może przetwarzać jedynie dane zgromadzone w swej pamięci podręcznej. Z pamięcią operacyjną w PC nie mogą się jednocześnie kontaktować dwa różne urządzenia, w szczególności CPU i kontroler SCSI. Każdy rozkaz SCSI zamykany jest przez bajt kontrolny przedstawiony na rysunku 7.47. Bity 7 i 6 stoją do dyspozycji producenta (Yendor Uniąue) kontrolera i są ignorowane przez TARG. Pola bitowe 5-2 muszą być ustawione na zero. Bit l (FLG) jest tzw. flagą, a bit 0 (LNK) oznacza link. Oba związane są ściśle z możliwością łańcuchowego przekazywania rozkazów. Polega ono na potokowym przesyłaniu kolejnych CDB. TARG nie rozłącza się przy tym po każdym pojedynczym rozkazie by, przez kolejne fazy BUS FREE, ARBITRATION itd. ponownie nawiązywać kontakt. Inicjator przekazuje (a TARG odbiera) kolejne CDB tak długo, jak długo ustawiony jest LNK. Rozkaz zamykający łańcuch ma wyzerowany bit LNK. FLG pozostaje w związku z LNK. Jeżeli wyzerowany jest link, flaga też musi być wy-zerowana. Flaga ustawiona (oczywiście przy ustawionym linku) powoduje, iż po zrealizowaniu całego łańcucha rozkazów przekazana zostanie tylko jedna wiadomość: LINKED COMMAND COMPLETE WITH FLAG. W przeciwnym razie (FLG = 0) TARG wysyła po każdym rozkazie cząstkowym wiadomość LINKED COMMAND COMPLETE. Zdolność do kolejkowania rozkazów Mechanizm ten realizowany jest jedynie przez nieliczne z urządzeń SCSI, ale zostanie pokrótce omówiony dla podkreślenia szerokich możliwości systemu. Implementacja kolejkowania odbywa się pod kontrolą konkretnej jednostki TARG i jest prowadzona wyłącznie na jego użytek. Z magistrali mogą korzystać zarówno urządzenia w kolejkowanie wyposażone jak i te, które nie są. Inicjator może kontaktować się w jednej sesji z urządzeniem kolejkującym po czym przejść do urządzenia, które nie kolejkuje. Pod tym względem istnieje duża elastyczność. Kolejkowanie jest pewną funkcją luksusową, która nie jest niezbędna. TARG organizując kolejkę nie wiąże jej z określonym inicjatorem. W kolejce mogą oczekiwać rozkazy pochodzące od różnych inicjatorów. Każdy napływający do TARG rozkaz, który będzie kolejkowany, powołuje do życia tzw. proces I/O. Każdy z takich procesów otrzymuje unikalny numer będący 8-bitową liczbą całkowitą bez znaku. Jest to kolejkowy oznacznik procesu (Queue Tag). Liczbę taką można przydzielić powtórnie dopiero po zakończeniu stowarzyszonego z nią aktualnie procesu. Skoro tylko inicjator połączy się z jednostką TARG (faza selekcji), wysyłana jest wiadomość IDENTIFY. W ślad za nią może teraz podążać jedna z wiadomości Ox20h -Ox22h, by określić oznacznik stowarzyszony z tym procesem. W jednej sesji (połączeniu) może być ustanowiony tylko jeden oznacznik. Jeżeli nie wysłana została żadna z wiadomości Ox20h - Ox22h, proces nie jest kolejkowany. W kierunku przeciwnym, podczas kolejnych połączeń TARG z inicjatorem (fazy re-selekcji) odpowiednia wiadomość wysyłana jest w ślad za obowiązkową IDENTIFY. Wspomniane wiadomości umożliwiają realizację elementarnych operacji wprowadzania nowego procesu na stos rozkazów: • Umieść na szczycie stosu (0x21 h, Head of ąueue tag). Wiadomość nakazuje u-mieszczenie procesu jako pierwszego w kolejce. Umieszczanie odbywa się zgodnie z porządkiem LIFO (Last-ln-First-Out - wszedł jako ostatni, a wyszedł jako pierwszy). Nie ma to wpływu na proces aktualnie realizowany. "Nowy proces zostanie wykonany natychmiast po zakończeniu bieżącego, chyba że w międzyczasie nadejdzie kolejna taka wiadomość. • Umieść na bieżącej pozycji (0x22h, Ordered ąueue tag). Inicjator nakazuje wprowadzenie procesu do kolejki zgodnie z chronologią wydarzeń, tzn. proces który napłynął jako ostatni zostanie ustawiony jako ostatni. Odpowiada to logice LILO (Last-In-Last-Out). Aktualnie przybyły proces zostanie wykonany za wszystkimi wcześniejszymi. • Umieść w kolejce (0x20h, Simple ąueue tag). W dokładnym tłumaczeniu: umieść po prostu w kolejce. Inicjator nie precyzuje tu żądanej pozycji pozostawiając tę decyzję w gestii TARG. Inicjator może zażądać przerwania wykonywania aktualnego procesu (wiadomość 0x0Dh, Abort Tag). Powoduje to przejście do następnego oczekującego w kolejce. Można też postąpić bardziej radykalnie i zlikwidować całą kolejkę (wiadomość 0x0Eh, Clear Qiteue). Przedtem jednak zostanie zatrzymany również bieżący proces. Informacja statusowa W fazie STATUS urządzenie TARG przekazuje jeden bajt informujący INIT o zakończeniu wykonywania rozkazu. Bajt ten niesie w sobie jednocześnie krótką wiadomość o sposobie zakończenia. Status przekazywany jest na zakończenie każdego rozkazu, chyba że zaistnieje jedna z poniższych okoliczności: •odebrano wiadomość ABORT lub BUS DEYICE RESET, • wykonywanie rozkazu przerwało wywołanie funkcji RESET, •zostało wymuszone nienaturalne wejście magistrali w fazę BUS FREE; Konstrukcja bajtu statusowego przedstawiona jest na rysunku 7.48. W bajcie tym mogą być zakodowane następujące stany: • STATUS GOOD: wykonanie rozkazu zostało zakończone pomyślnie. • STATUS CHECK CONDITION: w trakcie wykonywania rozkazu wystąpił błąd, rozkaz jest niemożliwy do wykonania, wystąpił stan wyjątkowy lub nienormalne zakończenie. INIT powinien w tej sytuacji użyć rozkazu REQUEST SENSE dla zbadania przyczyn nienormalnego zachowania się systemu, TARG przygotowuje na tę okoliczność specjalny zestaw danych informacyjnych, tzw. SENSE DATA. • STATUS BUSY: oznacza, że TARG jest zajęty wykonywaniem aktualnego rozkazu i do czasu zakończenia nie może przyjąć nowego. Przyczyną takiego stanu rzeczy może być (w przypadku twardego dysku): • rozkazy nie są kolejkowane, a bieżący jest właśnie wykonywany, • rozkazy są kolejkowane ale kolejka jest przepełniona, • kontroler dysku jest w trakcie przeprowadzania procesu samokontroli, kalibracji termicznej itp. INIT może ponowić próbę wysłania bieżącego rozkazu po odczekaniu pewnego czasu. • STATUS INTERMEDIATE GOOD: pozytywne zakończenie realizacji każdego z cząstkowych rozkazów pewnego rozkazu łańcuchowego (LINKED COM-MAND), za wyjątkiem ostatniego w łańcuchu. • STATUS RESERYATION CONFLICT: może wystąpić w systemach, w których pracuje więcej niż jedno urządzenie mogące pełnić rolę inicjatora (INIT). TARG może być chwilowo związany z innym inicjatorem niż ten, który się aktualnie do niego zwraca. INIT ma możliwość ponowienia próby przekazania rozkazu po pewnym czasie. • STATUS QUEUE FULL: kolejka grupująca rozkazy jest pełna. I tym razem odczekanie powinno prowadzić do rozwiązania problemu. Po wysłaniu bajtu statusowego TARG przekazuje zwykle wiadomość COMMAND COMPLETE (ewentualnie LINKED COMMAND COMPLETE). Komunikaty Standard SCSI przewiduje cały rozbudowany system informacyjny, który wspomaga właściwą wymianę danych. Komunikaty zwane też wiadomościami (MESSAGES) służą więc usprawnieniu połączeń pomiędzy jednostkami SCSI oraz do przekazywania informacji statusowych, które wskazują na stan (stopień zaawansowania, wynik) aktywnych rozkazów (będących w trakcie realizacji). Tabela 7.34 przedstawia kompletny zbiór wiadomości zdefiniowanych przez standard. Tylko nieliczne z nich są wykorzystywane przez twarde dyski. Protokół SCSI wymaga jednak od każdego urządzenia implementacji co najmniej jednej podstawowej wiadomości: COMMAND COMPLETE. Tabela 7.34. Zestaw wiadomości systemu SCSI Kod; Wiadomość; Kierunek transmisji; ATN Wiadomości jednobajtowe OOh; Command Complete; TARG -> INIT 02h; Save Data Pointers; TARG -> INIT 03h; Restore Pointers; TARG -> INIT 04h; Disconnect; TARG -> INIT 05h; Initiator Detected Error; TARG -> INIT; * 06h; Abort; TARG <- INIT; * 07h; Message Reject; TARG <-> INIT; * 08h; No Operation; TARG <- INIT; * 09h; Message Parity Error; TARG <- INIT; * OAh; Linked Command Complete; TARG -> INIT OBh; Linked Command Complete With Flag; TARG -> INIT OCh; Bus Device Reset; TARG <- INIT; * ODh; Abort Tag; TARG <- INIT, * OEh; Clear Queue; TARG <- INIT 12h; Continue I/O Process; TARG -> INIT 13h; Target Transfer Disable; TARG -> INIT 80:FFh; Identify; TARG <-> INIT Wiadomości dwiibajtowe 20h; Simple Queue Tag; TARG <-> INIT; * 21h; Head of Queue Tag; TARG <- INIT; * 22h; Ordered Queue Tag; TARG <- INIT; * Wiadomość poszerzona (5 bajtów) 01; Synchronous Data Transfer Reąuest; TARG <-> INIT; * * - oznacza ATN Powróćmy na chwilę do fazy SELECTION. W fazie tej ma miejsce aktywowanie SEL i zwolnienie BSY. Pierwszą wiadomością jaką musi przekazać INIT do TARG po fazie SELECTION jest IDENTIFY (patrz rysunek 7.54a). Jest to jednocześnie pierwsza wiadomość przekazywana po wyjściu z fazy RESELECTION (rysunek 7.54c). Wszystkie wiadomości zbudowane są według tego samego schematu przedstawionego na rysunku 7.49. Mogą one być wielobajtowe, ale bajt pierwszy jest zawsze kodem wiadomości. Rysunek 7.49. Schemat konstrukcji wiadomości 0 - KOD WIADOMOŚCI; Wiadomość jednobajtowa 0 - KOD WIADOMOŚCI; 1 - PARAMETR; Wiadomość dwubajtowa 0 - SYGNATURA 00000001; 1 - DŁUGOŚĆ WIADOMOŚCI; 2 - KOD OPERACJI; 3 - LISTA PARAMETRÓW; Wiadomość rozszerzona Z grupy wiadomości jednobajtowych wymagana jest implementacja kodu 0x00h, co gwarantuje poprawne przeprowadzenia standardowych operacji wejścia-wyjścia. Inne wiadomości są nieobowiązkowe. Jeżeli jednak w systemie pracuje jakieś urządzenie, które implementuje dodatkowe wiadomości, musi istnieć możliwość ich odrzucania przez urządzenia wyposażone jedynie w 0x00h. Służy temu wiadomość MESSAGE REJECT. Jeżeli ponadto magistrala pracuje z kontrolą parzystości wymagane jest implementowanie wiadomości MESSAGE PARITY ERROR dla obsługi ewentualnie wykrytych błędów. Grupa wiadomości dwubajtowych nie jest w ogóle używana przez dyski twarde. Kod 0x01 h wprowadza wiadomości wielobajtowe o długości określonej w drugim bajcie (maksymalna długość 256 bajtów, dla n = 0). Poniższe zestawienie stanowi krótki opis wiadomości systemu SCSI, które mogą być używane przez dyski twarde. OxOOh: COMMAND COMPLETE (zakończono wykonanie rozkazu) Wiadomość ta przekazywana jest inicjatorowi w fazie MESSAGE IN. Oznacza ona, że wydany rozkaz (pojedynczy lub ostatni z grupy połączonych) został zakończony (niekoniecznie sukcesem). Dokładniejsze informacje otrzyma INIT w następującej zaraz po tym fazie STATUS. 0x02h: SAVE DATA POINTERS (zachowaj zestaw wskaźników) Ox03h: RESTORE POINTERS (przywróć zestaw wskaźników) Obie wiadomości dotyczą tzw. wskaźników, które omówione zostaną w dalszej części tego rozdziału. 0x04h: DISCONNECT (rozłączenie) TARG informuje inicjator, że będzie się odłączał od magistrali. Rozłączenie to polega na zwolnieniu sygnału BSY, co wprowadza szynę w stan BUS FREE. Dla ponownego połączenia urządzeń i dokończenia wymiany danych konieczna jest faza reselekcji. 0x05h: INITIATOR DETECTED ERROR (wykryto nienaturalne zachowanie inicjatora) TARG informuje, że zachowanie inicjatora jest niezgodne z protokołem komunikacyjnym. 0x06h: ABORT (przerwij natychmiast) Inicjator poleca przerwać wykonywanie aktualnej operacji. TARG zeruje swoje bufory i znaczniki, unieważnia odczytane już dane i informacje statusowe i wchodzi w fazę BUS FREE. 0x07h: MESSAGE REJECT (odmowa przyjęcia wiadomości) Zarówno INIT jak i TARG mogą użyć tego komunikatu aby zasygnalizować, że nie mogą zinterpretować odebranej wiadomości: jest błędna lub niezaimplementowana przez adresata. 0x08h: NO OPERATION (wiadomość pusta) Wiadomość nie niesie w sobie żadnych informacji ani nie powoduje żadnych działań. 0x09h: MESSAGE PARITY ERROR (wykryto błąd parzystości) Inicjator informuje TARG o wystąpieniu błędu parzystości. 0x0Ah: LINKED COMMAND COMPLETE (zakończono rozkaz cząstkowy) Zakończono wykonywanie rozkazu będącego składową łańcuchowej grupy rozkazów. Szczegóły w fazie STATUS. 0x0Bh: LINKĘ D COMMAND COMPLETE WITH FLAG (zakończono rozkaz cząstkowy plus flaga) Tak jak 0x0Ah, ale dotyczy rozkazów które miały ustawiony bit FLG w bajcie kontrolnym CDB. Proszę porównać z opisem bajtu kontrolnego i rysunkiem 7.31. 0x0Ch: BUS DEVICE RESET (wyzerowanie) Inicjator poleca jednostce TARG przeprowadzenie wyzerowania. Zakres przeprowadzanych czynności zależy od rodzaju urządzenia i obejmuje przywrócenie pewnych standardowych wartości parametrów i sprowadzenie elementów do określonego stanu początkowego. 0x0Dh: ABORT TAG (porzuć wykonanie procesu) Wiadomość ta umożliwia przerwanie pracy bieżącego polecenia i przejście do realizacji następnego. Dotyczy mechanizmu kolejkowania rozkazów. 0x0Eh: CLEAR QUEUE (wyczyść kolejkę procesów) Wiadomość ta umożliwia przerwanie pracy bieżącego polecenia i usunięcie z kolejki wszystkich oczekujących jeszcze procesów. Dotyczy mechanizmu kolejkowania rozkazów. 0x20h: SIMPLE QUEUE TAG (umieść w kolejce) 0x21h: HEAD OF QUEUE TAG (umieść na szczycie) 0x22h: ORDERED OUEUE TAG (umieść na końcu) Wiadomości określają różne sposoby umieszczania rozkazów w kolejce. Wszystkie trzy są dwubajtowymi wiadomościami zbudowanymi według tego samego schematu przedstawionego na rysunku 7.50. Znaczenie pola Queue Tag omówione jest dokładniej w części tego rozdziału poświęconej rozkazom systemowym. 0xl2h: CONTINUE l/O PROCESS 0xl3h: TARGET TRANSFER DISABLE Wiadomości te nie są implementowane przez większość dysków SCSI. Realizują mechanizm zamiany ról inicjatora i jednostki docelowej. Kod 0xl3h powoduje, że w następnej fazie reselekcji TARG nie będzie występował z żądaniem połączenia z FNIT. Jednostka docelowa musi wtedy czekać, aż inicjatywa powtórnego połączenia wyjdzie od inicjatora. Nasuwa się tu nieodparcie analogia z metodą nazywaną polling (przeciwieństwo systemu przerwań), zgodnie z którą CPU odpytuje pewne urządzenia zewnętrzne. Wiadomość 0x12h wywołuje właśnie takie odpylanie. Inicjator spełnia tutaj rolę jednostki docelowej w zainicjowaniu fazy reselekcji. 0x80h - 0xFFh: IDENTIFY (identyfikacja jednostki LUN) Identyfikowanie jednostki LUN konieczne jest dla ustanowienia „ścieżki logicznej" prowadzącej od urządzenia jako całości (TARG lub INIT) do podległej mu elementarnej jednostki składowej. Wiadomość ta przekazywana jest przez INIT po wyjściu z fazy selekcji, a przez TARG po zakończeniu fazy reselekcji. Jest ona zachowana jedynie ze względów historycznych, a dla dysków twardych w ogóle nie ma żadnego znaczenia. Konstrukcja jednobajtowej wiadomości IDENTIFY przedstawiona jest na rysunku 7.51. Bit 6 (DIS) może być ustawiony jedynie przez inicjator w relacji INIT -> TARG i oznacza wtedy, że INIT wyraża zgodę na przeprowadzanie operacji rozłączania jednostek przez TARG (Disconneci). W przeciwnym razie TARG nie może stosować wiadomości o kodzie Ox04h i w konsekwencji prowokować rozłączenia. Jeżeli TARG wysyła wiadomość INDENTIFY, musi zawsze wyzerować bit 6. Bity 2-0 adresują jednostkę logiczną (LUN, Logical Unit Number) podległą danemu urządzeniu. W przypadku dysków twardych LUN musi być zawsze równy zero; niezależnie od fizycznej organizacji (większa liczba dysków) jest tylko jedna jednostka LUN, a sektory ewentualnych dodatkowych dysków stanowią bloki o kolejnych numerach. Ox01h: SYNCHRONOUS DATA TRANSFER REOJUEST (uzgodnienie RAO i TP) Wiadomość ta, wymieniana pomiędzy dwoma urządzeniami służy uzgodnieniu parametrów transmisji synchronicznej: RAO (REQ/ACK Offset) i TP (Transfer Period). Rysunek 7.52. przedstawia konstrukcję i znaczenie poszczególnych bajtów tej wiadomości. Uwaga: Jeżeli RAO równy jest zero, domniemana jest transmisja w trybie asynchronicznym. RAO = 0xFFh oznacza natomiast nieograniczoną ilość niepotwierdzonych impulsów REQ. Procedura uzgadniania Uzgodnione muszą być takie parametry, które umożliwiają prawidłową pracę obydwu partnerów, nawet gdy ich możliwości techniczne nie są jednakowe. Oznacza to oczywiście „równanie do gorszego". • Nadawca. Urządzenie wysyłające tę wiadomość po raz pierwszy musi zawrzeć w niej takie graniczne wartości parametrów transmisji, które gwarantuj ą jeszcze jego poprawne działanie. • Odbiorca. Urządzenie otrzymuje omawianą wiadomość. Możliwe są dwie sytuacje: • Nadesłane parametry umożliwiają jego prawidłowe funkcjonowanie. Następuje odesłanie wiadomości w tym samym stanie. • Nie jest możliwe zapewnienie poprawnej pracy przy nadesłanych parametrach. Wiadomość zostaje odesłana i zawiera graniczne parametry dopuszczalne dla odbiornika. W obydwu przypadkach następuje uzgodnienie wartości parametrów zawartych w odpowiedzi. W trakcie następującej po uzgodnieniu wymiany danych żadne z urządzeń nie może przekroczyć granicznych wartości zadeklarowanych przez drugą stronę. Dozwolone jest więc nadawanie z parametrami TP i RAO spełniającymi warunki: TP > TPa RAO < RAOa gdzie: TPa i RAOa są uzgodnionymi parametrami transmisji synchronicznej. System wskaźników Zgodnie ze specyfikacją SCSI każdy inicjator posiada dwa zestawy tzw. wskaźników: zestaw bieżący i zestaw zachowany (zapamiętany). Zestaw bieżący wskazuje na następny bajt (danych, rozkazów lub statusowy), który powinien być przekazany do TARG. Zestaw ten wykorzystywany jest przez tę z (możliwie wielu) jednostek TARG, która ma aktualne połączenie z inicjatorem. Ze względu na stosowanie mechanizmu selekcji i reselekcji (różne urządzenia łączą się ze sobą po czym rozłączają zwalniając szynę) istnieje konieczność zabezpieczania zestawu wskaźników aktualnych w celu ich późniejszego wykorzystania (w kolejnej fazie reselekcji). W tym czasie ich miejsce zajmuje inny przywołany z pamięci zestaw, który odpowiada aktualnemu połączeniu. Dla każdego aktywnego, tj. będącego w trakcie realizacji rozkazu istnieje zestaw wskaźników i to niezależnie od tego, czy połączenie między jednostkami TARG i INIT ma aktualnie miejsce. Omawiana tu organizacja systemu wskaźników przedstawiona jest na rysunku 7.53. Dowolny z inicjatorów może pozostawać w kontakcie z wieloma jednostkami logicznymi będącymi pod opieką różnych urządzeń TARG. W wydzielonym obszarze przeznaczonym przez INIT na wskaźniki zachowane znajdują się trójki wektorów, z których każda przynależy do jednego z urządzeń logicznych. Poszczególne wektory takiej trójki mają następujące znaczenie: C - wskaźnik na blok rozkazowy, D -wskaźnik na blok danych, S - wskaźnik na blok statusowy. Na początku cyklu realizacji każdego rozkazu poszczególne składowe zestawu zachowanego wskazują na określone przynależne sobie bloki w pamięci do chwili odebrania przez INIT wiadomości Save Data Pointer. W tym momencie następuje przepisanie składowych zestawu bieżącego do odpowiadających sobie pól w obszarze wskaźników zachowanych. Jeżeli TARG przekazał informację Restore Data Pointer, inicjator odszukuje odpowiedni zestaw wskaźników i umieszcza go w miejscu wskaźników bieżących. Przykładowa wymiana danych Mechanizm przejść magistrali w kolejne fazy odbywa się według ściśle określonego algorytmu, którego nie będę tu przytaczał ze względu na stopień jego komplikacji. Wystarczy wspomnieć, że poza nielicznymi wyjątkami, bazującymi na wykorzystaniu funkcji RESET i ATTENTION, nie jest możliwe przejście z każdej fazy do dowolnej innej. Przytoczę tu tylko prosty przykład przebiegu realizacji konkretnej operacji: odczytu bloku danych z dysku. Rolę inicjatora (INIT) pełni kontroler magistrali SCSI, a jednostką docelową (TARG) jest dysk twardy. Oto krótkie wyjaśnienia zjawisk zachodzących na magistrali w przedziałach czasowych oznaczonych literami A - N: A - zwolnienie linii BSY w sytuacji gdy SEL = O wprowadza magistralę w stan BUS FREE. Wszystkie urządzenia zaprzestały sterowania jakichkolwiek sygnałów; B - INIT zdobywa dostęp do magistrali przechodząc jako zwycięzca (Winner) przez fazę rozstrzygania (ARBITRATION); C - INIT wywołuje funkcję ATTENTION w fazie SELECTION. Na szynie danych znajdują się identyfikatory SCSI-ID kontrolera i dysku; D - TARG wykrywa funkcję ATTENTION i odpowiada na nią wejściem w fazę informacyjną MESSAGE OUT aktywując kombinację I/O = O, C/D = MSG = 1. Pojedyncza sekwencja REQ/ACK powoduje przesłanie jednego bajtu od INIT do TARG. Jest to wiadomość IDENTIFY; E - nowa kombinacja sygnałów sterujących I/O = MSG = O, C/D = l oznacza fazę informacyjną COMMAND. W stanie tym dysk odbiera od kontrolera rozkaz określony grupą bajtów CDB (Command Descriptor Block). Bajty te przesyłane są szyną danych w trybie asynchronicznym. W tym przykładzie zakładamy, że jest to rozkaz READ; F - dysk po otrzymaniu rozkazu przystępuje do jego realizacj i. Wiadomo jest, że do uformowania kompletnego bloku logicznego w pamięci buforowej dysku potrzeba stosunkowo dużo czasu. TARG postanawia więc oddać szynę dla potrzeb innych urządzeń (o ile takie istnieją). Kombinacja MSG = I/O = C/D = l powoduje wejście w fazę informacyjną MESSAGE IN (wysyłam wiadomość do INIT). Treścią tej jednobajtowej wiadomości jest DISCONNECT czyli postanowienie rozłączenia; G - magistrala wchodzi w stan BUS FREE i pozostaje w nim do czasu, gdy jedno z urządzeń wejdzie w fazę ARBITRATION; H - TARG (dysk) jest już gotów do przekazywania danych, więc stara się uzyskać dostęp do magistrali (konieczna jest ewentualnie faza ARBITRATION); I - TARG inicjuje fazę RESELECTION (na szynie danych identyfikatory adresowe SCSI dysku i kontrolera ale I/O = l w odróżnieniu od fazy SELECTION), by wznowić kontakt z inicjatorem (kontrolerem SCSI) nawiązany w punkcie C; J - TARG zarządza wejście w fazę MESSAGE IN i wysyła do kontrolera wiadomość IDENTIFY zawierającą numer jednostki logicznej LUN żądającej połączenia. Numer ten w przypadku dysków twardych jest i tak zawsze równy zero, ale procedura ta jest przeprowadzana dla zachowania zgodności z protokołem; K - TARG wprowadza szynę w fazę DATA IN (C/D = MSG = O, I/O = 1) i przystępuje do przekazywania danych. Liczba bajtów, które zostaną przesłane, określona została w punkcie E w ramach rozkazu READ. Każdy przekazany bajt potwierdzany jest parą impulsów REQ/ACK. Ma tu miejsce asynchroniczny tryb przekazywania danych; brak było wcześniejszego uzgodnienia parametrów trybu synchronicznego; L - Zakończeniu przesyłania danych towarzyszy wejście w fazę STATUS (TARG steruje w tym celu MSG = O, C/D = I/O = 1). Para impulsów REGYACK przenosi jeden bajt informacji statusowej od TARG do INIT; M - TARG przełącza magistralę w stan MESSAGE IN (I/O = C/D = MSG) aby wysłać wiadomość COMMAND COMPLETE do kontrolera; N - Po zakończeniu operacji TARG zwalnia sygnał BSY co wprowadza magistralę w stan BUS FREE. * * * Rozdział 8. Karty graficzne Chociaż na wydajność systemu komputerowego wpływa głównie procesor oraz elementy płyty głównej, to o komforcie pracy decyduje monitor wraz ze sterownikiem graficznym. Od rodzaju sterownika zależy typ użytego monitora. W czasie kilkunastoletniego rozwoju komputerów typu IBM PC powstało kilka konstrukcji sterowników graficznych pozwalających na osiągnięcie obrazu o coraz lepszych parametrach. Przegląd kart graficznych Pierwszym sterownikiem instalowanym w oryginalnych komputerach IBM PC był sterownik MDA (Monochrome Display Adapter), który pracował wyłącznie w trybie tekstowym, umożliwiając wyświetlenie 80 znaków w 25 wierszach w dwóch kolorach: czarnym i białym (właściwie w czarnym i jasnozielonym, gdyż taki luminofor posiadały ówczesne monitory). Później pojawił się - opracowany przez firmę IBM - sterownik CGA (Color Graphics Adapter), pozwalający na wyświetlanie obrazu o rozdzielczości 320 na 200 punktów w czterech kolorach lub obrazu o rozdzielczości 640 na 200 punktów w dwóch kolorach. Mimo „oszałamiającej" grafiki sterownik został nisko oceniony, gdyż w trybie tekstowym znaki miały rozmiar tylko 8 na 8 punktów. Wkrótce na rynku pojawił się sterownik o lepszych parametrach graficznych - Hercules. W trybie tekstowym posiadał te same parametry co sterownik MDA, ale umożliwiał także wyświetlanie dwukolorowego obrazu graficznego o rozdzielczości 720 na 350 punktów. Dzięki niskiej cenie i wysokich jak na owe czasy parametrach zdobył on ogromną popularność i przez długi czas był stosowany wszędzie tam, gdzie kolorowy obraz nie był konieczny. W odpowiedzi na sterownik Hercules, firma IBM (która nigdy de facto nie uznała tego standardu) opracowała sterownik EGA (Enhanced Graphics Adapter}, o rozdzielczości 640 na 350 punktów i możliwości jednoczesnego wyświetlenia 16 kolorów z pośród 64 możliwych. Potomkiem karty EGA w prostej linii jest sterownik VGA (Video Graphics Array) i jako taki jest zgodny ze swoimi poprzednikami. Jest to jego ogromną zaletą, gdyż i większość programów działających ze sterownikami MDA i CGA będzie działała poprawnie ze sterownikiem VGA. Sterowniki VGA niektórych producentów umożliwiają także emulację karty Hercules, ale nie jest to opcja występująca w standardzie VGA. Oprócz wymienionych sterowników opracowano kilka innych kart graficznych, miedzy innymi przeznaczony dla systemu OS/2 sterownik MCGA (Multi-Color Graphics Array) oraz sterownik PGA (Professional Graphics Adapter}, stanowiący ogniwo pośrednie pomiędzy kartą EGA a VGA. Standardowy sterownik VGA umożliwia wyświetlenie na ekranie 25 wierszy znaków w 80 kolumnach. W tym trybie znaki mają rozmiar 9 na 16 punktów. Znak może być wyświetlony w jednym z 16 kolorów, niezależnie od koloru tła, które dla każdego znaku może być dobrane oddzielnie. Przy wykorzystaniu wszystkich kolorów znaków i tła oraz ustawieniu różnych atrybutów (rozjaśnienie, migotanie) można jednocześnie wyświetlić 256 kombinacji znak-tło. W pewnych przypadkach może on podwoić liczbę wierszy tekstu do 50, ale dzieje się to kosztem zmniejszenia rozmiarów znaku do 8 na 8 punktów. Można także zwiększyć liczbę wyświetlanych kolumn. W trybie graficznym standardowy sterownik VGA umożliwia wyświetlenie 640 punktów w 480 liniach przy 16 dostępnych kolorach (w jednym ze standardowych trybów możliwe jest wyświetlenie jednocześnie 256 kolorów, ale przy rozdzielczości 320 na 200). Jeśli sterownik posiada odpowiednio dużo pamięci, przez odpowiednie ustawienie rejestrów można uzyskać rozdzielczość nawet l 024 punktów w 768 liniach (przy odpowiedniej ilości pamięci nawet w 256 kolorach jednocześnie). Niezależnie od trybu graficznego wszystkie wyświetlane kolory mogą być wybrane z palety 262 144 barw. Jednym z elementów różniących sterownik VGA od poprzedników jest sposób generowania sygnału wyjściowego. Sterownik VGA generuje sygnał analogowy, dzięki czemu do standardowej karty VGA można podłączyć zarówno monitor kolorowy jak i monochromatyczny, który zamiast kolorów będzie wyświetlał 64 poziomy szarości. Istotną cechą sterownika VGA jest możliwość zamontowania go w jednym komputerze razem ze sterownikiem monochromatycznym, na przykład kartą Hercules. Tworzy się w ten sposób tak zwany system dual-monitor, bez którego bardzo trudno tworzyć programy korzystające ze skomplikowanej grafiki. Obecnie większość oprogramowania narzędziowego i graficznego pozwala na korzystanie z dwóch monitorów jednocześnie (na przykład środowiska programowe Borlanda lub pakiet graficzny AutoCAD). W miarę rozwoju technologii parametry standardowego VGA stały się nie wystarczające i wielu producentów zaczęło swoje produkty wyposażać w dodatkowe opcje. Rozbudowa obejmuje głównie zwiększenie pamięci karty graficznej (standardowy sterownik VGA posiada 256 kB pamięci VRAM - VIDEO RAM) oraz dodanie nowych trybów gra-ficznych (1024 x 768, 800 x 600, 2048 x 1024). Oprócz rozdzielczości zwiększeniu uległa także liczba jednocześnie wyświetlanych kolorów; obecnie istnieją karty umożliwiające wyświetlenie jednocześnie 32 768, 65 536 kolorów lub każdego punktu w innym kolorze, wybieranym z palety ponad 16 milionów odcieni (224 odcieni). Niestety, jak dotąd nie powstał jednolity standard kart SVGA (Super VGA - tak nazywane są karty VGA posiadające rozbudowane możliwości). Główni producenci procesorów graficznych kart SVGA (ATI Technologies, Chips and Technologies, Genoa Systems, Paradise/Western Digital, Trident, Tseng Labs i Video 7/Headland Technologies) prześcigali się w dodawaniu nowych możliwości do swoich produktów - niestandardowe tryby pracy, w zależności od użytego procesora graficznego, mają różne numery, pamięć zorganizowana jest w różny sposób i różne są adresy niestandardowych rejestrów. Jako przykład niech posłuży tabela 8.1, ukazująca numery niestandardowych trybów graficznych sterowników różnych producentów. Próby zapanowania nad tym bałaganem doprowadziły do powstania stowarzyszenia producentów urządzeń graficznych o nazwie VESA (Video Elestronics Standards Asso-ciation). Stowarzyszenie to postawiło sobie za cel opracowywanie norm umożliwiających standaryzację: •parametrów monitorów współpracujących z kartami SVGA, •numeracji rozszerzonych trybów graficznych, • interfejsu programowego (dodatkowych funkcji BIOS-u). Nowoczesne sterowniki SVGA coraz częściej sprzętowo obsługują założenia standardu VESA - dla starszych typów konieczne jest stosowanie programowych emulatorów, opracowanych specjalnie dla danej karty. Jednym z głównych zastosowań kart SVGA jest praca z aplikacjami graficznymi w Windows, gdyż oprogramowanie dostarczane przez producenta karty przeznaczone jest głównie dla tego systemu. Niektóre karty SVGA posiadają także sprzętowe akceleratory zaprojektowane specjalnie do współpracy z Windows; karty takie sprzętowo wypełniają prostokąty, rysują linie i operują prostokątnymi obszarami obrazu. Omówienie kart graficznych EGA, VGA i SVGA Sterownik EGA składa się z czterech głównych elementów funkcjonalnych: • Układu sekwencyjnego (sekwensera) - odpowiadającego za generowanie sygnału zegarowego, przesyłanie danych pomiędzy pamięcią obrazu, układem graficznym i układem określania atrybutu oraz za lokalizację wyświetlanego zbioru znaków. Tabela 8.1. Niestandardowe tryby pracy kart graficznych, wprowadzone przez różnych producentów Numer tiyhu; Rozdzielczość; Liczba kolorów; ATI Technology; 53; 800 x 600; 16; 54; 800 x 600; 16; 55; 1024x768; 16; 61; 640 x 400; 256; 62; 640 x 480; 256; 63; 800 x 600; 256; 65; 1024x768; 16; Chips and Technologies; 25; 640 x 480; 16; 6A; 800 x 600; 16; 70; 800 x 600; 16; 71; 960 x 720; 16; 72; I024x 768; 16; 78; 640 x 400; 256; 79; 640 x 480; 256; 7A; 768 x 576; 256; 7C; 800 x 600; 256; 7E; 1024x 768; 256; Genoa Systems; 59; 720 x 512; 16; 5B; 640 x 350; 256; 5C; 640 x 480; 256; 5D; 720 x 512; 256; 5E; 800 x 600; 256; 5F; 1024x 768; 16; 6A; 800 x 600; 16; 6C; 800 x 600; 256; 73; 640 x 480; 16; 79; 800 x 600; 16; 7C; 512x512; 16; 7D; 512 x 512; 256; 7E; 640 x 400; 256; 7F; 1024x 768; 4; Paradise/Western Digital; 54; 924 x 387; 16; 54; multisync 1056 x 387; 16; 55; 924 x 400; 16; 55; multisync 1056 x 400; 16; 56; 924 x 387; 14; 56; multisync 1056 x 387; 14; 57; 924 x 400; 14; 57; multisync 1056 x 400; 14; Trident; 5B; 800 x 600; 16; 5C; 640 x 400; 256; 5D; 640 x 480; 256; 5E; 800 x 600; 256; 5F; 1024x 768; 16; 61; portrait 768 x 1024; 16; 62; 1024x 768; 256; Tseng Labs; 25; 640 x 480; 16; 29; 800 x 600; 16; 2D; 640 x 350; 256; 2E; 640 x 480; 256; 2F; 640 x 400; 256; 30; 800 x 600; 256; 37; 1024x768; 16; 38; 1024x 768; 256; Video 7/Hcadland Technologies; 60; 752x410; 16; 61; 720 x 540; 16; 62; 800 x 600; 16; 63; 1024x 768; 2; 64; 1024x 768; 4; 65; 1024x 768; 16; 66; 640 x 400; 256; 67; 640 x 480; 256; 68; 720 x 540; 256; 69; 800 x 600; 256; • Układu graficznego - odpowiadającego za przekazywanie danych pomiędzy pamięcią obrazu a procesorem i układem określania atrybutu. • Układu sterowania atrybutem - służącego do zmiany kolorów zapisanych w pamięci obrazu na indeksy kolorów zdefiniowanych w rejestrach wzorców kolorów. • Układu sterowania wyświetlaczem (kontrolera CRT) - odpowiadającego za zachowanie zależności czasowych podczas wyświetlania obrazu oraz wyświetlającego kursor. Karta VGA posiada piąty element: przetwornik cyfrowo-analogowy, przetwarzający wzorce cyfrowe na sygnał analogowy przesyłany do monitora. Powyższe układy zawierają od kilkudziesięciu (karta EGA) do kilkuset (karta VGA) programowalnych rejestrów sterujących. Z punktu widzenia procesora, karta graficzna to zbiór portów wejścia-wyjścia i obszar pamięci obrazu - programowanie sterownika sprowadza się zatem do zapisu oraz odczytu do i z pamięci oraz portów wejścia-wyjścia. Pamięć obrazu jest odwzorowana bezpośrednio w przestrzeni adresowej procesora, pomiędzy adresami A000:0000h a B000:FFFFh, pozwalając na wykorzystanie do zapisu lub odczytu instrukcji mov lub mosv. Na pamięć obrazu przeznaczone jest 128 kB przestrzeni adresowej procesora. Była to ilość wystarczająca dla kart CGA. Standardowy sterownik VGA posiada 256 kB pamięci RAM, a karta SVGA co najmniej 512 kB. Z tego powodu pamięć obrazu zorganizowana jest na różne sposoby, w zależności od trybu pracy sterownika. W trybach odziedziczonych po kartach CGA wykorzystywana jest spakowana (ang. packed) metoda odwzorowania pamięci - w jednym bloku pamięci RAM każdemu punktowi na ekranie odpowiada fragment bajtu zawierający numer koloru tego punktu (rysunek 8.1). Pole odpowiadające jednemu punktowi wynosi zwykle l, 2, 4 lub 8 - co odpowiada 2, 4, 16 lub 256 kolorom obrazu. Dla kart EGA i VGA podstawową metodą odwzorowania ekranu jest metoda płatowa (ang. planar, bit mapped). Pamięć obrazu dzielona jest na 4 płaty (bloki) po 64 kB każdy (patrz rysunek 8.2). W każdym bloku jednemu bitowi odpowiada jeden punkt - dzięki takiej strukturze 256 kB pamięci obrazu zajmuje 64 kB przestrzeni adresowej. Konsekwencją przyjętej organizacji pamięci jest utrudniony dostęp do danych. Zapis lub odczyt wymaga dodatkowo programowania rejestrów układu graficznego. Karty SVGA umożliwiają współpracę z co najmniej 512 kB pamięcią obrazu. Ponieważ na pamięć obrazu zarezerwowane jest 128 kB przestrzeni adresowej procesora, do dostępu do pamięci karty SVGA wykorzystują technikę stronicowania - polegającą na kojarzeniu z niewielkim obszarem pamięci (oknem) w przestrzeni adresowej różnych fragmentów większego obszaru pamięci (stron lub banków). Zapis lub odczyt adresu położonego wewnątrz okna powoduje zapis lub odczyt odpowiadającego mu bajtu w banku. Rozmiar banku i okna wynosi zwykle 64 kB. Aby uzyskać dostęp do pamięci położonej poza ob.-rębem bieżącego banku, należy zmienić zawartość rejestru sterującego położeniem banku (przeważnie nosi on nazwę Bank Start Address). Stronicowanie pamięci wykorzystuje jedną z następujących technik: -pojedyncze okno, -dwa nakładające się okna, -dwa nie nakładające się okna . We wszystkich metodach stronicowania ważnym parametrem jest odstęp pomiędzy po-j czątkami kolejnych banków (granularity*) - może być on mniejszy niż rozmiar banku, co oznacza, że kolejne banki mają część wspólną. W trybach graficznych SVGA w obrębie banku odwzorowanie pamięci obrazu jest identyczne jak w analogicznych trybach VGA. Tryby tekstowe W trybach tekstowych pamięć obrazu sterowników EGA, VGA i SVGA zorganizowana jest tak samo jak w sterowniku MDA i CGA. Z tego powodu została zachowana całkowita zgodność pomiędzy poszczególnymi rodzajami kart graficznych. Każdy znak reprezentowany jest przez dwa bajty pamięci obrazu. Pierwszy z nich zawiera kod ASCII wyświetlanego znaku, drugi zaś określa jego atrybut. Wyświetlanie znaków odbywa się bardzo szybko, gdyż do zapisania jednego znaku wymagane jest przesłanie tylko dwóch bajtów. W pamięci obrazu kody znaków zapisane są na przemian z atrybutami, dlatego do wyświetlania znaków można wykorzystać instrukcję asemblera rep movsx. W pamięci obrazu można przechowywać do ośmiu stron tekstu, w zależności od ilości zainstalowanej pamięci i trybu pracy. Dostępne tekstowe tryby pracy podaje tabela 8.2. Tabela 8.2. Tekstowe tryby pracy kart graficznych Numer trybu; Rozdzielczość; Liczba kolorów; Karta graficzna; Adres początku pamięci obrazu; 0h; 40x25; 16/8 szarości; CGA, EGA, VGA; B8000h Ih; 40x25; 16/8; CGA, EGA, VGA; B8000h 2h; 80x25; 16/8 szarości; CGA, EGA, VGA; B8000h 3h; 80x25; 16/8; CGA, EGA, VGA; B8000h 7h; 80x25; 3; MDA, EGA, VGA; B0000h rozmiar matrycy znaku zależy od karty graficznej: tryby 0-3: CGA 8x8, EGA 8 x 14, VGA 9x16 tryb 7: MDA 9 x 14, EGA 9x14 VGA 9x16 W trybie tekstowym znak w lewym górnym rogu ekranu znajduje się w zerowym wierszu i zerowej kolumnie. Sterowniki graficzne posiadają zdefiniowane standardowe zestawy znaków zapisane w pamięci stałej. W przypadku sterowników EGA, VGA i SVGA możliwa jest zmiana miejsca w pamięci, z którego pobierane będą wyświetlane znaki. Po przygotowaniu tzw. matrycy znaków można wskazać ją sterownikowi graficznemu korzystając z funkcji 11 h (podfunkcje 00h i 10h) BIOS-u sterownika. W ten sposób, aby otrzymać na przykład polskie znaki diakrytyczne, nie trzeba dokonywać żadnych przeróbek sprzętowych, tak jak miało to miejsce w przypadku karty Hercules (do uzyskania polskich znaków trzeba było zmienić zawartość pamięci EPROM). Sterowniki SVGA posiadają dodatkowe tryby tekstowe. Przykładowe tekstowe tryby pracy sterowników SVGA to 80 x 30, 80 x 43, 80 x 60, 132 x 25, 132 x 30, 132 x 43, 132 x 60, wszystkie w 16 kolorach. Tryby graficzne W zależności od trybu graficznego zmienia się organizacja pamięci obrazu. Jednak we wszystkich trybach graficznych kolejne komórki pamięci obrazu reprezentują kolejne punkty położone w kolejnych liniach poziomych, odczytywane z lewa na prawo i od góry do dołu. W trybach dwukolorowych pojedynczy punkt opisywany jest przez jeden bit. Osiem kolejnych punktów opisywanych jest przez jeden bajt pamięci obrazu, przy czym najbardziej znaczący bit znajduje się z lewej strony, zaś najmniej znaczący z prawej. W trybach czterokolorowych pojedynczy punkt opisywany jest dwoma bitami, a w trybach szesnastokolorowych - czterema. W specyficznym 256-kolorowym trybie 13h pojedynczy punkt opisywany jest jednym bajtem. Większość gier korzysta z tego trybu mimo stosunkowo niskiej rozdzielczości (320 x 200), gdyż do umieszczenia punktu na ekranie nie trzeba wykonywać żadnych złożonych operacji - wystarczy policzyć przesunięcie względem początku pamięci obrazu. Dostępne tryby graficzne sterowników EGA i VGA przedstawia tabela 8.3. Tabela 8.3. Graficzne tryby pracy kart graficznych Numer trybu; Rozdzielczość; Ilość kolorów Rozmiar znaku; Segment pamięci obrazu; Zgodny ze sterownikiem 04h; 320 x 200; 4; 8x8; B800h; CGA, EGA 05h; 320 x 200; 4 (szarości); 8x8; B800h; CGA, EGA 06h; 640 x 200; 2; 8x8; B800h; CGA, EGA 0Dh; 320 x 200; 16; 8x8; A000h; EGA, VGA 0Eh; 640 x 200; 16; 8x8; A000h; EGA, VGA 0Fh; 640 x 350; 3; 8x14; A000h; EGA, VGA 10h; 640 x 350; 4; 8x14; A000h; EGA, VGA 11h; 640 x 480; 2; 8x16; A000h; VGA 12h; 640 x 480; 16; 8x16; A000h; VGA 13h; 320 x 200; 256; 8x16; A000h; VGA Sterowniki SVGA oferują dodatkowe tryby graficzne, na przykład tryb 640 x 480 w 256 kolorów, 800 x 600 w 16 i 256 kolorach lub tryb 1024 x 768 w 16 i 256 kolorach. Tryby zapisu i odczytu pamięci obrazu W trybach graficznych o spakowanej organizacji pamięci obrazu pamięć karty widziana jest jako ciągły obszar pamięci RAM. Z tego powodu zapis lub odczyt danych nie powinien sprawiać kłopotów. W trybach graficznych o płatowej organizacji pamięci obrazu, odczyt lub zapis komórek pamięci może być różnie zinterpretowany przez poszczególne układy karty. Z tego powodu wprowadzone zostały cztery tryby zapisu i dwa tryby odczytu. O. tryb zapisu W zerowym trybie zapisu dane przesyłane przez procesor zapisywane są bezpośrednio w pamięci obrazu. Zapisywany bajt może być poddany operacji przesunięcia cyklicznego, możliwe jest także zamaskowanie jego poszczególnych bitów. Ta operacja wymaga wykonania cyklu odczyt-modyfikacja-zapis. Podczas odczytu cztery bajty z poszczególnych płatów pamięci obrazu zapisywane są w rejestrach zatrzaskowych. Przed zapisem bajtu mogą być na nim wykonane operacje logiczne AND, OR lub XOR, których drugim argumentem jest zawartość rejestrów zatrzaskowych. Dane mogą być zapisywane osobno do poszczególnych płatów; jedną instrukcją mov można zapisać cztery bajty pamięci obrazu, po jednym bajcie na płat. 1. tryb zapisu Korzystając z zawartości rejestrów zatrzaskowych pojedynczą instrukcją mov można modyfikować wszystkie cztery płaty pamięci obrazu. Rejestry zatrzaskowe ładowane są podczas odczytu pamięci obrazu przez procesor. Pierwszy tryb zapisu umożliwia bardzo szybkie kopiowanie obszarów pamięci obrazu. 2. tryb zapisu W tym trybie wszystkie cztery płaty mogą być modyfikowane przez cztery najbardziej znaczące bity przesyłanego bajtu. Zerowy bit jest ośmiokrotnie kopiowany i zapisywany do komórki płatu zerowego. Pierwszy bit jest ośmiokrotnie kopiowany i zapisywany do komórki płatu pierwszego. Podobnie dzieje się z bitami drugim i trzecim, które powielone zapisywane są odpowiednio do drugiego i trzeciego płatu pamięci obrazu. Do określenia, które z ośmiu bitów faktycznie mają zostać zapisane do pamięci obrazu służy rejestr modyfikacji bitów (bit mask register). 3. tryb zapisu Trzeci tryb zapisu dostępny jest wyłącznie w sterowniku VGA i jest bardziej skomplikowany. Dane zapisywane do pamięci obrazu pobierane są z rejestru ustawiania/zerowania (set/reset register). Każdy z czterech najmniej znaczących bitów rejestru jest powielany osiem razy i zapisywany do odpowiednich płatów pamięci obrazu. Zapisywane bity mogą być maskowane operacją AND z przesuniętym cyklicznie bajtem wysłanym przez procesor. Bity o wartości O są kopiowane do pamięci z rejestrów zatrzaskowych, zaś bity o wartości l są albo kopiowane z rejestru ustawiania/zerowania lub podlegają operacji logicznej na bitach tego rejestru i odpowiednich bitach rejestrów zatrzaskowych. Możliwe jest także zablokowanie dostępu do poszczególnych płatów pamięci przez wpisacie odpowiedniej wartości do rejestru blokowania pamięci. Tryb ten jest szczególnie przydatny przy wyświetlaniu na ekranie jednokolorowych wzorów. 0. tryb odczytu W tym trybie odczytu przesyłane bajty pobierane są z pamięci obrazu. Podczas pojedynczego odczytu dostępny jest tylko jeden, aktywny płat pamięci. Jeśli poszczególne punkty są reprezentowane przez poszczególne bity na wszystkich płatach pamięci, operacja jednego odczytu może zwrócić bity ośmiu sąsiadujących punktów. 1. tryb odczytu W pierwszym trybie odczytu jako rezultat operacji zwracana jest wartość wynikająca z porównania zawartości pamięci z rejestrem porównania kolorów (color compare register}. Poszczególne bity rejestru są uwzględnianie na podstawie zawartości rejestru opuszczania kolorów (color don't car e register). W porównaniu uczestniczą wszystkie niezablokowane płaty pamięci. Odczytany bajt zawiera rezultat ośmiu równoległych porównań, po jednym dla każdego z ośmiu sąsiadujących poziomo punktów reprezentowanych przez pojedynczy bajt. Standard VESA Standard VESA ukazywał się w kilku edycjach. Do chwili obecnej opublikowano wskazania techniczne dotyczące: •parametrów monitorów przeznaczonych do współpracy z kartami SVGA, •numeracji i rozdzielczości trybów graficznych i znakowych, •interfejsu programowego (dodatkowych funkcji przerwania 10h BIOS-u), •magistrali lokalnej (Local Bus) do komunikacji ze sterownikiem graficznym. Każda edycja wnosiła rozszerzenia w stosunku do poprzedniej. Pierwsza norma, ogłoszona w kwietniu 1989, zalecała tylko jeden rozszerzony tryb - 800 x 600 punktów Tabela 8.4. Tryby graficzne i tekstowe wprowadzone w standardzie VESA Wersja BIOS-u; Numer trybu; Rodzaj trybu; Rozdzielczość; Liczba kolorów; 1.0; 100h; graficzny; 640 x 400; 256; 1.0; 101h; graficzny; 640 x 480; 256; 1.0; 102h; graficzny; 800 x 600; 16; 1.0; 103h; graficzny; 800 x 600; 256; 1.0; 104h; graficzny; 1024x768; 16; 1.0; 105h; graficzny; 1024x768; 256; 1.0; 106h; graficzny; 1280 x 1024; 16; 1.0; 107h; graficzny; 1280x 1024; 256; 1.1; 108h; tekstowy; 80x60; 16; 1.1; 109h; tekstowy; 132 x 25; 16; 1.1; 10Ah; tekstowy; 132x43; 16; 1.1; 10Bh; tekstowy; 132x50; 16; 1.1; 10Ch; tekstowy; 132x60; 16; 1.2; 10Dh; graficzny; 320 x 200; 32768; 1.2, 10Eh, graficzny; 320 x 200; 65536; 1.2, 10Fh, graficzny; 320 x 200; 16777216; 1.2, 110h, graficzny; 640 x 480; 32768; 1.2, 111h; graficzny; 640 x 480; 65536; 1.2, 112h, graficzny; 640 x 480; 16777216; 1.2, 113h, graficzny; 800 x 600; 32768; 1.2, 114h, graficzny; 800 x 600; 65536; 1.2, 115h, graficzny; 800 x 600; 16777216; 1.2, 116h, graficzny; 1024x768; 32768; 1.2, 117h, graficzny; 1024x768; 65536; 1.2, 118h, graficzny; 1024x768; 16777216; 1.2, 119h, graficzny; 1280 x 1024; 32768; 1.2, 11Ah, graficzny; 1280 x 1024; 65536; 1.2, 11Bh, graficzny; 1280 x 1024; 16777216; w 16 kolorach - przypisując mu l-bajtowy numer 6Ah. Przełączanie miało następować przy użyciu tej samej funkcji (OOh) przerwania lOh, co zwykły tryb VGA. Niestety, stało się to o wiele za późno, gdy producenci opracowali i rozpoczęli produkcję własnych rozwiązań (16-kolorowe tryby o wyższej rozdzielczości i tryby 256-kolorowe). W październiku 1989 standard VESA wprowadził 16-bitowe numery identyfikujące tryby oraz zdefiniował sześć nowych funkcji przerwania lOh do ich obsługi. Funkcje te pozwalają na stwierdzenie obecności w systemie oprogramowania VESA, dostarczają informacji o dostępnych trybach oraz umożliwiają przełączanie banków pamięci. Specyfikację rozszerzonego w ten sposób BIOS-u oznaczono jako wersję 1.0. Kolejne uzupełnienie (VESA BIOS 1.1) wprowadziło nowe tryby tekstowe oraz dwie kolejne funkcje, przeznaczone do wyboru wyświetlanego na ekranie obszaru pamięci. Obecnie najczęściej spotykane na rynku sterowniki VESA są zgodne z wersją 1.2. Oznacza to możliwość obsługi trybów wielobarwnych (15, 16 lub 24 bity na piksel) pod warunkiem, że karta SVGA wyposażona jest w specjalny układ przetworników C/A. Tabela 8.4 zawiera spis dodatkowych trybów graficznych i tekstowych, które zostały uznane za standardowe. Rejestry sterowników EGA/VGA Zapisu i odczytu rejestrów sterowników graficznych dokonuje się za pomocą instrukcji out i in procesora. Większość dostępnych rejestrów zgrupowana jest w pary, gdzie pierwszy rejestr jest rejestrem indeksowym, a drugi - indeksem informacyjnym. Przykładowy zapis wartości do rejestru może wyglądać następująco: mov dx,adres_rejestru mov al,index_rejestru out dx,al mov al,wartość inc dx out dx,al Przykładowy odczyt zawartości rejestru: mov dx,adres_rejestru mov al,index_rejestru out dx,al inc dx in al,dx ; rejestr AL zawiera odczytana wartość. Rejestry sterownika EGA służą tylko do zapisu, niemożliwe jest odczytanie ich zawartości. Jeżeli chcemy zachować wpisane wartości, musimy w pamięci RAM zachować ich kopie. Przed modyfikowaniem zawartości rejestrów należy zablokować przyjmowanie przerwań rozkazem cli, a po zapisie do rejestru odblokować je rozkazem sti. Do dobrego tonu programowania należy odtworzenie wartości wszystkich modyfikowanych rejestrów przed wyjściem z programu. Rejestry zewnętrzne (external/general registers) Pomocniczy rejestr wyjściowy (miscellaneous output register) - adres 3C2h/3CCh Opisuje podstawowe parametry pracy sterownika. bit 7; bit 6; bit 5; x; bit 3; bit 2; bit 1; bit 0 bity 7-6 = Rozdzielczość pionowa: 01 - 350 linii, 10- 400 linii, 11 - 480 linii. bit 5 = Selekcja połówki pamięci obrazu przy adresowaniu przemiennym: 0 - pierwsze 64 kB, 1 - drugie 64 kB. bity 3-2 = Częstotliwość taktowania przy wyświetlaniu punktów: 00 - częstotliwość 25,175 Mhz, 01 - częstotliwość 28,322 Mhz, 10 - zegar zewnętrzny podłączony przez złącze krawędziowe. bit 1 = Udostępnienie pamięci obrazu procesorowi: 0 - pamięć nieudostępniona, 1 - pamięć udostępniona (standardowy tryb pracy). bit 0 = Wybór adresów I/O dla rejestru urządzeń zewnętrznych, rejestru stanu i rejestrów sterowania wyświetlaczem: 0 - adresy 3B4h, 3B5h, 3BAh, 1 - adresy 3D4h, 3D5h, 3DAh. Rejestr urządzeń zewnętrznych (feature control register) - adres 3BAh/3CAh Zarezerwowane; bit 3; Zarezerwowane bity 7-4 = Zarezerwowane. bit 3 = Musi mieć wartość zero. bity 2 - 0 = Zarezerwowane. Zapis do rejestru odbywa się przez podanie adresu 3C2h, a odczyt przez podanie adresu 3CCh. Zerowy rejestr stanu (input status register zero) - adres 3C2h Informacja o wygenerowaniu przerwania przy powrocie pionowym, bit 7; Zarezerwowane bit 7=Informacja o wygenerowaniu przerwania IRQ2: 0 - przerwanie IRQ2 nie zostało wygenerowane lub zostało wygenerowane przez inne urządzenie, 1 - przerwanie IRQ2 zostało wygenerowane po powrocie pionowym. Procedura obsługi przerwania musi wyzerować ten bit modyfikując zawartość rejestru końca powrotu pionowego w układzie sterowania wyświetlaczem. bity 6-0=Zarezerwowane. Pierwszy rejestr stanu (input status register one) - adres 3BAh (3dah) Różne informacje o sterowniku. Nie używ.; bit 5; bit 4; bit 3; Zarezerw.; bit 0; bity 7-6=Zarezerwowane. bity 5-4=Bity diagnostyczne układu określenia atrybutu. bit 3=Powrót pionowy: 0 - poza powrotem pionowym, 1 - następuje powrót pionowy lub inne urządzenie wygenerowało przerwanie IRQ2. bity 2-l=Zarezerwowane. bit 0=Faza wyświetlania obrazu: 0 - powrót poziomy lub pionowy, 1 - odczyt pamięci obrazu (wyświetlanie informacji). Rejestr odłączenia sterownika (video subsystem enable register) - adres 3C3h Modyfikacja zawartości tego rejestru pozwala na programowe odłączenie i dołączenie sterownika. Zarezerwowane; bit 0; bity 7-1=Zarezerwowane. bit 0=Dołączenie/odłączenie sterownika: 0 - odłączenie sterownika, 1 - dołączenie sterownika. Układ sekwencyjny (seąuencer) Układ sekwencyjny odpowiada za generowanie sygnału zegarowego, przesyłanie danych pomiędzy pamięcią obrazu, układem graficznym i układem określania atrybutu oraz lokalizację wyświetlanego zbioru znaków. Rejestr adresowy układu sekwencyjnego (seąuencer address register) - adres 3C4h Wpisanie wartości do rejestru adresowego określa rejestr wewnętrzny, do którego chcemy się odwołać. Rejestr informacyjny układu sekwencyjnego - adres 3C5h Poprzez rejestr informacyjny następuje zapis/odczyt informacji do/z rejestru wskazanego przez rejestr adresowy. Rejestr zerowania (reset register) - indeks 00h Rejestr zerowania pozwala na zatrzymanie działania układu sekwencyjnego oraz ustawienie jego wyjść w stan wysokiej impedancji. Zarezerwowane; bit 1; bit 0; bity 7-2=Zarezerwowane. bit 1=Zerowanie synchroniczne: 0 - zatrzymanie układu sekwencyjnego, 1 - standardowa praca układu. bit 0=Zerowanie asynchroniczne: 0 - natychmiastowe zatrzymanie pracy układu sekwencyjnego (dane zostają utracone), 1 - standardowa praca układu. Rejestr trybu taktowania (clocking modę register) - indeks 01h Rejestr trybu taktowania określa większość parametrów zegara sterownika. Nie używane; bit 5; bit 4; bit 3; bit 2; nie używany; bit 0; bity 7-6=Nie używane. bit 5=Wygaszenie ekranu: 0 - standardowe wyświetlanie obrazu, 1 - odłączenie monitora przy dalszej pracy sterownika. bit 4=Tryb ładowania rejestrów przesuwających: - bajty pobierane są z czterech płatów pamięci, 1 - bajty ze wszystkich płatów pamięci są łączone w grupy po cztery, co powoduje zmniejszenie do 1/4 liczby kolorów, ale umożliwia wykorzystanie przestrzeni adresowej o poczwórnym rozmiarze. bit 3=Częstotliwość wyświetlania punktów: 0 - standardowa częstotliwość wyświetlania punktów, 1 - częstotliwość wyświetlania podzielona przez 2 (dla trybów 320 x 200 i 40 kolumn). bit 2=Tryb ładowania rejestrów przesuwających: 0 - bajty pobierane są z czterech płatów pamięci, 1 - bajty z dwóch płatów pamięci są łączone w pary, co powoduje zmniejszenie liczby kolorów, ale umożliwia wykorzystanie podwojonej przestrzeni adresowej. bit 1=Nie używany. bit 0=Szerokość znaków: 0 - znaki o szerokości 9 punktów (w tekstowych trybach pracy bez CGA i EGA), 1 - Znaki o szerokości 8 punktów. Rejestr blokowania pamięci (map mask register) - indeks 02h Rejestr blokowania pamięci umożliwia zezwolenie na modyfikację poszczególnych płatów pamięci. Nie używane; bit 3; bit 2; bit 1; bit 0 bity 7-4=Nie używane. bit 3=Trzeci płat pamięci - analogicznie do płatu 0. bit 2=Drugi płat pamięci - analogicznie do płatu 0. bit 1=Pierwszy płat pamięci - analogicznie do płatu 0. bit 0= Zerowy płat pamięci: 0 - brak zezwolenia na modyfikację, 1 - zezwolenie na modyfikację. Rejestr zbioru znaków (character map register) - indeks 03h Rejestr służy do określenia numeru zbioru znaków wyświetlanych w trybie tekstowym. Nie używane; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-6=Nie używane. bity 5, 3, 2=Numer drugiego zestawu znaków. bity 4, 1 0=Numer pierwszego zestawu znaków. Rejestr trybu dostępu do pamięci (memory modę register) - indeks 04h Rejestr trybu dostępu do pamięci służy do informowania układu sekwencyjnego o strukturze pamięci obrazu. Nie używane; bit 3; bit 2; 1; 0; bity 7-4=Nie używane. bit 3=Adresowanie modulo 4: 0 - standardowy dostęp do pamięci obrazu, 1 - komórki płatu zerowego mają adresy podzielne przez 4. Komórki płatu pierwszego mają adresy podzielne przez 4 z resztą l itd. W ten sposób czterokrotnie wzrasta rozmiar dostępnej przestrzeni adresowej. bit 2=Adresowanie przemienne: 0 - parzyste komórki na parzystych płatach pamięci obrazu mają adresy parzyste, komórki nieparzyste na płatach nieparzystych mają adresy nieparzyste, 1 - standardowy dostęp do pamięci obrazu. bit 1=Musi być równy 1 bit 0=Musi być równy 0. Układ graficzny (graphics controller) Układ graficzny odpowiada za przekazywanie danych pomiędzy pamięcią obrazu a procesorem oraz układem określania atrybutu. Rejestr adresowy układu graficznego (graphics l and 2 address register) - adres 3CEh Rejestr adresowy układu graficznego wiąże rejestr informacyjny z rejestrami wewnętrznymi układu. Rejestr informacyjny układu graficznego - adres 3CFh Poprzez rejestr informacyjny następuje zapis/odczyt informacji do/z rejestru wskazanego przez rejestr adresowy: Rejestr ustawiania/zerowania (set/reset register) - indeks 00h Rejestr ustawiania/zerowania służy do określenia bitów, które będą ustawiane lub zerowane i poddawane operacjom logicznym - za jego pomocą ustawia się więc kolor, który zostanie nadany punktom podczas zapisu do pamięci. Wykonywana operacja logiczna wybierana jest przez zapis do rejestru przesunięcia i wyboru funkcji. Nie używane; bit 3; bit 2; bit l; bit 0; bity 7-4=Zarezerwowane. bit 3=Analogicznie dla trzeciego płatu pamięci, bit 2=Analogicznie dla drugiego płatu pamięci, bit l=Analogicznie dla pierwszego płatu pamięci. bit 0=Tryb modyfikacji zerowego płatu pamięci: 0 - zerowanie (lub operacja logiczna z 0), 1 - ustawianie (lub operacja logiczna z 1). Rejestr zezwolenia na ustawiania/zerowania (enable set/reset register) - indeks 0lh Rejestr służy do zezwolenia na modyfikację płatów pamięci zgodnie z zawartością rejestru ustawiania/zerowania. Nie używane; bit 3; bit 2; bit l; bit 0; bity 7-4=Zarezerwowane. bit 3=Analogicznie dla trzeciego płatu pamięci, bit 2=Analogicznie dla drugiego płatu pamięci, bit l=Analogicznie dla pierwszego płatu pamięci. bit 0=Mmodyfikacja zerowego płatu zgodnie z zawartością rejestru ustawiania/zerowania: 0 - brak zezwolenia na modyfikację, 1- zezwolenie na modyfikację. Zawartość tego rejestru jest uwzględniana tylko w zerowym trybie zapisu. Rejestr porównania kolorów (color compare register) - indeks 02h Rejestr służy do określenia numeru koloru, z którym porównywane są punkty podczas odczytu pamięci obrazu. Nie używane; bit 3; bit 2; bit l; bit 0; bity 7-4=Nie używane. bity 3-0=Numer porównywanego koloru. Zawartość rejestru brana jest pod uwagę tylko w pierwszym trybie odczytu. Jeśli numer koloru punktu jest zgodny z numerem zapisanym w rejestrze, wartości bitów odczytanych z pamięci obrazu będą równe l, w przeciwnym przypadku - 0. Rejestr przesunięcia i wyboru funkcji (data rotate/function select register) - indeks 03h Rejestr przesunięcia i wyboru funkcji służy do określenia działań wykonywanych na danych zapisywanych do pamięci obrazu. Określa, o ile bitów ma zostać przesunięty bajt przesyłany do pamięci obrazu i czy na tym bajcie będzie wykonywana operacja logiczna z za wartością rejestru zatrzaskowego. Nie używane; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-5=Nie używane. bity 4-3=Wykonywana funkcja logiczna: 00 - zapis bez wykonywania operacji logicznej, 01 - operacja logiczna AND, 10 - operacja logiczna OR, 11 - operacja logiczna XOR. bity 2-0=Wielkość przesunięcia w prawo (przesunięcie jest przesunięciem cyklicznym). Przesunięcie bajtu ma priorytet wyższy od funkcji logicznej i dlatego przeprowadzane jest jako pierwsze. Przesunięcie wykonywane jest tylko w zerowym i trzecim trybie zapisu. Przesunięcie wykonywane jest wyłącznie na bajtach zapisywanych przez procesor. Rejestr wyboru płatu do odczytu (read map select register) - indeks 04h Rejestr wyboru płatu do odczytu służy do określenia numeru płatu pamięci, z którego zostanie odczytany następny bajt. Nie używane; bit 1; bit 0; bity 7-2=Nie używane bity 1-0=Numer płatu pamięci przeznaczonego do odczytu. Zawartość tego rejestru jest brana pod uwagę tylko w zerowym trybie odczytu. Rejestr trybu dostępu do pamięci (modę register) - indeks 05h Rejestr trybu dostępu do pamięci określa sposób zapisywania i odczytywania informacji z pamięci obrazu. Razem z rejestrem dodatkowym służy do określenia trybu adresowania pamięci przez układ graficzny. Nie używane; bit 6; bit 5; bit 4; bit 3; Nie używane; bit l; bit 0; bit 7=Nie używany. bit 6= Dotyczy trybu 256-kolorowego: 0 - bity z pamięci obrazu są przepisywane do rejestrów przesuwających, l 1 - podczas zapisu do pamięci obrazu bajt jest zamieniany na cztery dwubitowe wartości wysyłane do rejestru sterowania atrybutem. bit 5=Sposób ładowania rejestrów przesuwających: 0 - bity z pamięci obrazu są przepisywane do rejestrów przesuwających, 1 - nieparzyste bity każdego bajtu pamięci obrazu są umieszczane w rejestrach przesuwających nieparzystych płatów pamięci. Bity parzyste bajtów pamięci obrazu są umieszczane w rejestrach przesuwających parzystych płatów pamięci. Pozwala to na emulacje trybu czterokolorowego karty CGA. ' bit 4=Adresowanie przemienne: 0 - standardowy sposób adresowania, 1 - komórki o parzystych adresach położone na parzystych płatach pamięci mają adresy parzyste; komórki nieparzyste na nieparzystych płatach mają adresy nieparzyste. Pozwala to na podwojenie rozmiaru przestrzeni adresowej. bit 3=Numer trybu odczytu: 0 - zerowy tryb odczytu, 1- pierwszy tryb odczytu. bit 2=Nie używany. bity l-0=Tryb zapisu: 00 - zerowy tryb zapisu, 01 - pierwszy tryb zapisu, 10 - drugi tryb zapisu, 11 - trzeci tryb zapisu. Rejestr dodatkowy (miscellaneous register) - indeks 06h Rejestr dodatkowy układu graficznego służy do określenia trybu pracy sterownika i początku pamięci obrazu. Razem z rejestrem trybu dostępu do pamięci służy do określenia trybu adresowania pamięci przez układ graficzny. Nie używane; bit 3; bit 2; bit 1; bit 0 bity 7-4=Nie używane. bity 3-2=Adres początku pamięci obrazu oraz jej rozmiar: 00 - początek: A000:0000, rozmiar 128 kB, 01 - początek: A000:0000, rozmiar 64 kB, 10 - początek: 6000:0000, rozmiar 32 kB, 11 - początek: 8800:0000, rozmiar 32 kB. bit 1=Tryb adresowania: 0 - adresowanie standardowe, l - podczas zapisu/odczytu bajtu zerowany jest najmłodszy bit adresu, przez co nie są dostępne bajty o nieparzystych adresach. bit 0=Tryb pracy: 0 - tryb tekstowy, 1 - tryb graficzny. Jeśli pamięć obrazu rozpoczyna się od adresu A000:0000 i ma rozmiar 128 kB, występuje konflikt adresów pomiędzy sterownikami zainstalowanymi w systemie. Rejestr pominięcia koloru (color don't care register) - indeks 07h Rejestr pominięcia koloru służy do określenia płatów pamięci obrazu pomijanych podczas porównywania z zawartością rejestru porównywania kolorów. Nie używane; bit 3; bit 2; bit 1; bit 0; bity 7-4=Nie używane. bit 3=Pominięcie trzeviego płatu pamięci - analogicznie jak dla zerowego. bit 2=Pominięcie drugiego płatu pamięci - analogicznie jak dla zerowego. bit l=Pominięcie pierwszego płatu pamięci - analogicznie jak dla zerowego. bit 0=Pominięcie zerowego płatu pamięci: 0 - wartość bitu odczytanego z zerowego płatu pamięci jest zgodna z wartością bitu w rejestrze porównywania kolorów, l - wartość bitu odczytanego z zerowego bitu pamięci jest zgodna z wartością bitu w rejestrze porównywania kolorów wtedy, gdy oba bity są takie same. Wpisanie do rejestru wartości 00h spowoduje zgodność wszystkich kolorów z numerem koloru zapisanym w porównywaniu kolorów. Rejestr modyfikacji bitów (bit mask register) - indeks 08h Rejestr modyfikacji bitów służy do określenia bitów, które nie będą modyfikowane pod-1 czas zapisu do pamięci obrazu. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-1=Analogicznie dla bitów 7-1 komórki pamięci obrazu. bit 0=Modyfikacja zerowego bitu pamięci obrazu: 0 - bit nie będzie modyfikowany, 1 - podczas zapisu bit zostanie zmodyfikowany. W zerowym trybie zapisu zawartość rejestru nie jest uwzględniana. Układ sterowania atrybutem (attribute controller) Układ sterowania atrybutem służy do zamiany kolorów zapisanych w pamięci obrazu na indeksy kolorów zdefiniowanych w rejestrach wzorców kolorów. Układ sterowania atrybutem odpowiada także za kolor krawędzi ekranu. Rejestr adresowy układu sterowania atrybutem (graphics l and 2 address register) - adres 3C0h Rejestr adresowy układu sterowania atrybutem wiąże rejestr informacyjny z rejestrami wewnętrznymi układu. Jest także rejestrem informacyjnym tego układu. Zawartość rejestrów wewnętrznych układu może być także odczytana pod adresem wejścia-wyjścia 3Clh. Nie używane; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-6=Nie używane. bit 5=Dostęp do rejestrów palety: 0 - zabronienie dostępu do rejestrów palety, 1 - udostępnienie rejestrów palety. bity 4-0=Indeks wewnętrznego rejestru układu sterowania atrybutem. Powiązanie adresu informacyjnego z rejestrem wewnętrznym musi być poprzedzone od-zvtaniem zawartości pierwszego rejestru stanu o adresie 3BAh (3DAh). Przykład: cli ;zablokowanie przerwań mov dx,3dah in al,dx ; skojarzenie rej. ; indeksowego z adresem 3C0h mov al,indeks_rej_wewnetrz mov dx,3C0h out dx,al ; wybór rejestru wewn. nop ; zwłoka na zmianę stanu nop ; sterownika mov al,wartość out dx,al ; zapis wartości do rejestru ; wewnętrznego Rejestr informacyjny układu sterowania atrybutem - adres 3C0h/3C1h Poprzez rejestr informacyjny następuje zapis/odczyt informacji do/z rejestru wskazanego poprzez rejestr adresowy. Z powodu wspólnego adresu z rejestrem indeksowym, przed dostępem do wewnętrznych rejestrów należy dokonać odczytu zawartości pierwszego rejestru stanu o adresie 3BAh (3DAh). Zmiana zawartości rejestrów układu sterowania atrybutem powinna być dokonywana podczas powrotu pionowego; w przeciwnym przypadku na ekranie można zaobserwować efekt „śnieżenia". Rejestry palety (palette registers) - indeksy 00h - 0Fh Rejestry palety służą do przyporządkowania numerom koloru odpowiednich wzorców kolorów, przechowywanych w rejestrach wzorców kolorów przetwornika cyfrowo-analogowego. Nie używane; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-6 =Nie używane. bity 5-0=Numer rejestru wzorca koloru zawierającego 18-bitowy wzorzec koloru. W trybach 256-kolorowych nie są uwzględniane rejestry palety. Indeksem rejestru wzorca koloru staje się wtedy 8-bitowa wartość zapisana w pamięci obrazu. Rejestr sterowania trybem pracy (modę control register) - indeks 10h Rejestr sterowania trybem pracy służy do określenia trybu działania układu sterowania atrybutem. bit 7; bit 6; bit 5; Nie używane; bit 3; bit 2; bit l; bit 0; bit 7=Tryb podziału wzorców kolorów na bloki: 0 - cztery bloki po 64 wzorce kolorów, 1 - szesnaście bloków po 16 wzorców kolorów. bit 6=Liczba bitów opisujących kolor punktu: 0 - cztery bity na punkt (tryb 16-kolorowy), 11 - osiem bitów na punkt (tryb 256-kolorowy). bit 5=0graniczenie przesunięcia poziomego w trybie split screen: 0 - jednoczesne przesunięcie obu obszarów, 1 - przesunięcie tylko górnego obszaru. bit 4=Nie używany. bit 3=Tryb interpretacji bajtu atrybutu: 0 - bity 4-7 atrybutu określają kolor tła znaku, 1 - bity 6-4 atrybutu określają kolor tła znaku; bit 7 równy l oznacza migotanie znaku. bit 2=Tryb wyświetlania znaków o szerokości 9 punktów: 0 - dziewiąty punkt znaku przybiera kolor tła poprzedniego znaku, 1 - dla znaków o kodach C0h - DFh dziewiąty punkt ma taki sam kolor jak punkt ósmy; dla pozostałych znaków dziewiąty punkt ma kolor tła. bit l=Rodzaj monitora: 0 - monitor kolorowy, 1 - monitor monochromatyczny. bit 0=Tryb pracy sterownika: 0 - tryb tekstowy, 1 - tryb graficzny. Rejestr krawędzi ekranu (overscan register) - indeks 11h Rejestr krawędzi ekranu służy do określenia koloru (numeru wzorca koloru) brzegu ekranu. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Numer wzorca koloru krawędzi ekranu Standardowym kolorem krawędzi ekranu we wszystkich trybach pracy jest kolor o numerze 0 (zwykle czarny). Dla niektórych sterowników nie jest możliwe określenie koloru brzegu ekranu innego niż czarny. Rejestr uwzględnianych płatów pamięci (color pianę enable register) - indeks 12h Rejestr uwzględnianych płatów pamięci służy do określenia płatów pamięci, które będą brane pod uwagę podczas wyświetlania punktów. Pominięte płaty są traktowane tak, jakby były wypełnione zerami. Nie używane; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-6-Nie używane. bity 5-4-Wybór bitów diagnostycznych układu sterowania atrybutem, które mogą być odczytane z bitów 4 i 5 pierwszego rejestru stanu oadresie3DAh(3BAh): 00- bity 2 i 0, 01 - bity 5 i 4, 10- bity3 i 1, 11 - bity 7 i 6. bit 3=Uzględnienie trzeciego płatu pamięci podczas wyświetlania: 0 - trzeci płat pamięci nie jest uwzględniany, 1- trzeci płat pamięci jest uwzględniany. bit 2=Analogicznie dla drugiego płatu, bit l=Analogicznie dla pierwszego płatu, bit 0=Analogicznie dla zerowego płatu. Rejestr przesunięcia poziomego (horizontal pel panning register) - indeks 13h Rejestr przesunięcia poziomego służy do określenia przesunięcia obrazu w lewo. Nie używane; bit 3; bit 2; bit l; bit 0; bity 7-4=Nie używane. bity 3-0=Wielkość przesunięcia poziomego w punktach: 0000; tryby tekstowe=1; tryby graficzne 256-kolorowe=0; tryby graficzne 16-kolorowe=0 0001; tryby tekstowe=2; tryby graficzne 256-kolorowe=-; tryby graficzne 16-kolorowe=1 0010; tryby tekstowe=3; tryby graficzne 256-kolorowe=1; tryby graficzne 16-kolorowe=2 0011; tryby tekstowe=4; tryby graficzne 256-kolorowe=-; tryby graficzne 16-kolorowe=3 0100; tryby tekstowe=5; tryby graficzne 256-kolorowe=2; tryby graficzne 16-kolorowe=4 0101; tryby tekstowe=6; tryby graficzne 256-kolorowe=-; tryby graficzne 16-kolorowe=5 0110; tryby tekstowe=7; tryby graficzne 256-kolorowe=3; tryby graficzne 16-kolorowe=6 0111; tryby tekstowe=8; tryby graficzne 256-kolorowe=-; tryby graficzne 16-kolorowe=7 1000; tryby tekstowe=0; tryby graficzne 256-kolorowe=-; tryby graficzne 16-kolorowe=- Zawartość rejestru jest uwzględniana w tekstowych i graficznych trybach pracy. Rejestr wyboru koloru (color select register) - indeks 14h Rejestr wyboru koloru służy do wybrania bloku wzorców kolorów (grupy rejestrów przetwornika cyfrowo-analogowego). Nie używane; bit 3; bit 2; bit l; bit 0; Dla siódmego bitu rejestru sterowania trybem równego l: bity 7-4=Nie używane, bity 3-0=Numer jednego z szesnastu bloków wzorców kolorów. Dla siódmego bitu rejestru sterowania trybem równego 0: bity 7-4=Nie używane. bity 3-2=Numer jednego z czterech bloków wzorców kolorów, bity 1-0=Nie używane. Zawartość rejestru nie ma znaczenia w 256-kolorowych trybach pracy. Przetwornik cyfrowo-analogowy (digital to analog coiwerter) Rolą przetwornika cyfrowo-analogowego jest przetworzenie wzorców kolorów zawartych w rejestrach wzorców kolorów na sygnał analogowy wysyłany do monitora. Wzorce kolorów są zapisane w 256 18-bitowych rejestrach. Wartość 18-bitowa pozwala na wyświetlenie 262144 odcieni, choć sterownik VGA pozwala na jednoczesne wyświetlenie tylko 256 kolorów. Sterowniki SVGA pozwalają na uzyskanie większej ilości odcieni (nawet ponad 16 milionów) i jednoczesne wyświetlenie większej liczby kolorów na ekranie. Dla zachowania zgodności pierwsze 16 kolorów sterownika VGA odpowiada szesnastu kolorom sterownika EGA. Kolejnym numerom odpowiadają następujące kolory: Numer rejestru; Kolor 0; czarny (black) 1; niebieski (blue) 2; zielony (green) 3; siny (cyan) 4; czerwony (red) 5; fioletowy (magenta) 6; brązowy (brown) 7; jasnoszary (light gray) 8; szary (gray) 9; jasnoniebieski (light blue) 10; jasnozielony (light green) 11; jasnosiny (light cyan) 12; jasnoczerwony (light red) 13; różowy (pink) 14; żółty (yellow) 15; biały (white) Kolejne 16 kolorów odpowiada odcieniom szarości tych kolorów. Rejestr ograniczenia koloru (PEL mask register) - adres 3C6h Rejestr ograniczenia koloru służy do ograniczenia liczby wzorców kolorów używanych podczas wyświetlania punktów na ekranie. Wartość wysyłana przez układ sterowania! atrybutem oraz zawartość rejestru ograniczającego są argumentami funkcji AND, któraj jako wynik zwraca numer wzorca koloru. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; Po każdej zmianie trybu pracy do rejestru ograniczającego jest wpisywana wartość FFh. Rejestr stanu przetwornika (DAĆ status register) - adres 3C7h Rejestr stanu przetwornika cyfrowo-analogowego jest używany do odczytania stanu wzorców kolorów. Nie używane; bit 1; bit 0O; bity 7-2=Nie używane. bity l-0=Stan rejestrów wzorców kolorów: 00 - rejestry wzorców kolorów są aktualnie odczytywane, 11 - rejestry wzorców kolorów są aktualnie zapisywane. Rejestr jest przeznaczony wyłącznie do odczytu. Rejestr adresowy odczytu przetwornika (PEL address read modę register) - adres 3C7h Rejestr adresowy odczytu przetwornika służy do rozpoczęcia cyklu odczytu zawartości rejestrów wzorców kolorów. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Numer pierwszego rejestru wzorca koloru przeznaczonego do odczytu. Po wpisaniu wartości do rejestru powinien nastąpić cykl odczytów zawartości rejestrów wzorców kolorów. Cykl odczytu wzorca koloru polega na pobraniu trzech 6-bitowych wartości odpowiadających kolejno składowej czerwonej, zielonej i niebieskiej wzorca koloru. Jeden cykl odczytu wzorca wymaga trzech odczytów rejestru formacyjnego przetwornika o adresie 3C9h. Po każdym cyklu odczytu zawartość rejestru adresowego jest automatycznie zwiększana o jeden i może zostać rozpoczęty kolejny cykl odczytu wzorca koloru. Pomiędzy dwoma odczytami rejestru informacyjnego powinno upłynąć co najmniej 240 ns. Rejestr jest przeznaczony wyłącznie do zapisu. Rejestr adresowy zapisu przetwornika (PEL address write modę register) - adres 3C8h Rejestr adresowy zapisu przetwornika służy do rozpoczęcia cyklu zapisu do rejestrów wzorców kolorów. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0 =Numer pierwszego rejestru wzorca koloru przeznaczonego do zapisu. Po wpisaniu wartości do rejestru powinien nastąpić cykl zapisów do rejestrów wzorców kolorów. Cykl zapisu wzorca koloru polega na wpisaniu trzech 6-bitowych wartości odpowiadających kolejno składowej czerwonej, zielonej i niebieskiej wzorca koloru. Jeden cykl zapisu wzorca wymaga trzech zapisów rejestru informacyjnego przetwornika o adresie 3C9h. Po każdym cyklu zapisu zawartość rejestru adresowego jest automatycznie zwiększana o jeden i może zostać rozpoczęty kolejny cykl zapisu wzorca koloru. Pomiędzy dwoma zapisami rejestru informacyjnego powinno upłynąć co najmniej 240 ns. Rejestr jest przeznaczony wyłącznie do zapisu. Rejestr informacyjny przetwornika (PEL data register) - adres 3C9h Rejestr informacyjny przetwornika służy do zapisu i odczytu informacji o wzorcach kolorów. Nie używanybit; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-6=Nie używane. bity 5-0=Wartość jednej z trzech składowych wzorca koloru. Każdy cykl zapisu/odczytu wzorca koloru składa się z trzech operacji zapisu/odczytu 6-bitowych wartości odpowiadających kolejno składowej czerwonej, zielonej i niebieskiej wzorca koloru. Pierwszy cykl zapisu musi być poprzedzony wpisaniem do rejestru adresowego zapisii przetwornika (adres 3C8h) numeru pierwszego modyfikowanego wzorca koloru. Pier-j wszy cykl odczytu musi być poprzedzony wpisaniem do rejestru adresowego odc2 przetwornika (adres 3C7h) numeru pierwszego odczytywanego wzorca koloru. Pomiędzy dwoma operacjami zapisu/odczytu powinno upłynąć co najmniej 240 ns. Układ sterowania wyświetlaczem (CRT controller) Układ sterowania wyświetlaczem odpowiada za zachowanie zależności czasowych przy wyświetlaniu obrazu. Rejestry układu sterowania określają także kształt kursora i jego położenie, wysokość podkreślenia, wysokość znaków, poziomy podział obrazu oraz położenie wyświetlanej strony w pamięci obrazu. Rejestr indeksowy układu sterowania wyświetlaczem (CRTC address register) - adres 3B4h (3D4h) Rejestr adresowy układu graficznego wiąże rejestr informacyjny z rejestrami wewnętrznymi układu. Rejestr informacyjny układu sterowania wyświetlaczem - adres 3B5h (3D5h) Poprzez rejestr informacyjny następuje zapis/odczyt informacji do/z rejestru wskazanego przez rejestr indeksowy. Rejestr całkowitego czasu wyświetlania linii (horizontal total register) - indeks 00h Rejestr całkowitego czasu wyświetlania linii służy do określenia czasu trwania cyklu wyświetlania poziomej linii obrazu. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Całkowity czas wyświetlania linii. Na czas wyświetlania linii składa się czas wyświetlania punktów obrazu, czas wyświetlenia prawej krawędzi obrazu, czas powrotu pionowego i czas wyświetlania lewej krawędzi obrazu. Rejestr końca wyświetlania poziomego (horizontal display end register) - indeks 0lh Wartość zawarta w rejestrze końca wyświetlania poziomego określa moment zakończenia wyświetlania linii obrazu. bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bity 7-0=Szerokość obrazu w znakach. Wyświetlanie poziome kończy się w momencie osiągnięcia przez licznik znaków wartości zawartej w rejestrze + l. Rejestr początku wygaszania poziomego (start horizontal blanking register) - indeks 02h Wartość zawarta w rejestrze początku wygaszania poziomego określa moment rozpoczęcia wyświetlania prawego brzegu ekranu i wygaszenie plamki. bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bity 7-0=Wartość licznika znaków, przy której następuje wygaszenie plamki. Rejestr końca wygaszania poziomego (end horizontal blanking register) - indeks 03h Wartość zawarta w rejestrze końca wyświetlania poziomego określa moment zakończenia wygaszania poziomego. 1; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bit 7=Zawsze równy j eden. bity 6-5=Opóźnienie rozpoczęcia następnego cyklu: 00 - bez opóźnienia, 01 - jeden znak opóźnienia, 10 - dwa znaki opóźnienia, 11 - trzy znaki opóźnienia. bity 4-0=Mniej znaczące bity wartości określającej koniec wygaszania poziomego. W rejestrze znajduje się pięć najmniej znaczących bitów wartości określającej koniec wygaszania poziomego. Bit 5 znajduje się w rejestrze końca powrotu poziomego, a bity 7 - 6 są równe dwóm najbardziej znaczącym bitom rejestru początku wygaszania poziomego. • Rejestr początku powrotu poziomego (start horizontal retrace register) - indeks 04h Wartość zawarta w rejestrze początku powrotu poziomego określa moment rozpoczęcia powrotu poziomego. bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bity 7-0=Wartość określająca początek powrotu poziomego. • Rejestr końca powrotu poziomego (end horizontal retrace register) - indeks 05h Wartość zawarta w rejestrze końca powrotu poziomego określa moment zakończenia powrotu poziomego. bbit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bit 7=Bit piąty wartości określającej koniec wygaszania poziomego. bity 6-5=Opóźnienie początku powrotu poziomego: 00 - bez opóźnienia, 01 - jeden znak opóźnienia, 10 - dwa znaki opóźnienia, 11 - trzy znaki opóźnienia. bity 4-0 =Mniej znaczące bity wartości określającej koniec powrotu poziomego. Rejestr zawiera pięć mniej znaczących bitów wartości określającej koniec powrotu poziomego. Bity bardziej znaczące są równe najstarszym bitom rejestru początku powrotu poziomego. Rejestr całkowitego czasu wyświetlania obrazu (vertical total register) - indeks 06h Wartość zawarta w rejestrze całkowitego czasu wyświetlania obrazu odpowiada ośmiu najmniej znaczącym bitom wartości określającej całkowity czas wyświetlania obrazu. Bity ósmy i dziewiąty znajdują się w rejestrze przepełnień układu sterowania wyświetlaczem. bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bity 7-0=Najmniej znaczące bity wartości określającej całkowity czas wyświetlania obrazu. Jednostką czasu jest czas wyświetlania pojedynczej linii. Cykl wyświetlania obrazu rozpoczyna się od wyświetlenia pamięci obrazu, następnie wyświetlany jest dolny brzeg ekranu, następuje powrót pionowy, po czym wyświetlany jest górny brzeg obrazu. Rejestr przepełnień układu sterowania wyświetlaczem (cwerflow register) - indeks 07h Rejestr przepełnień zawiera bardziej znaczące bity wartości zawartych w innych rejestrach. bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bit 7=Dziewiąty bit wartości określającej początek powrotu pionowego. bit 6=Dziewiąty bit wartości określającej koniec wyświetlania pionowego. bit 5=Dziewiąty bit wartości określającej całkowity czas wyświetlania obrazu. bit 4=Ósmy bit rejestru porównania linii. bit 3=Ósmy bit wartości określającej początek wygaszania pionowego, bit 2=Ósmy bit wartości określającej początek powrotu pionowego, bit l=Ósmy bit wartości określającej koniec wyświetlania pionowego. bit 0=Ósmy bit wartości określającej całkowity czas wyświetlania obrazu. Rejestr położenia pierwszej linii (preset scan linę register) - indeks 08h Rejestr położenia pierwszej linii zawiera numer linii, od której wyświetlana jest pierwszą linia znaków. Nie używane; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bit 7-nie używany; bity 6-5-dodatkowe bity rejestru przesunięcia poziomego; bity 4-0-numer pierwszej wyświetlanej linii obrazu. W trybach graficznych przesuwanie obrazu wykonywane jest za pomocą zmiany zawartości rejestru adresowego (indeks 0Ch i 0Dh). Rejestr ostatniej linii znaku (max scan linę register) - indeks 09h Rejestr ostatniej linii znaku służy do określenia wysokości wyświetlanych znaków w punktach. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=Jakość obrazu przy rozdzielczości pionowej 200 linii: 0 - pojedyncze wyświetlanie linii, 1 - podwójne wyświetlanie linii. bit 6=Dziewiąty bit rejestru porównania linii; bit 5=Dziewiąty bit wartości określającej początek wygaszania pionowego; bity 4-0=Wysokość znaku pomniejszona o jeden. Rejestr pierwszej linii kursora (cursor start register) - indeks 0Ah Rejestr pierwszej linii kursora określa odległość górnej linii kursora od górnej krawędzi znaku. Nie używane; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-6=Nie używane. bit 5=Schowanie kursora: 0 - kursor widoczny, l - kursor schowany. bity 4-0=Numer górnej linii kursora pomniejszony o 1. Pierwsza linia od góry ma numer 0. Rejestr ostatniej linii kursora (cursor end register) - indeks 0Bh Rejestr ostatniej linii kursora określa odległość dolnej linii kursora od górnej krawędzi znaku. Nie używanebit; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bit 7=Nie używany. bitv 6-5=Opóźnienie wyświetlania kursora: 00 - brak opóźnienia, 01 - jeden znak opóźnienia, 10 - dwa znaki opóźnienia, 11 - trzy znaki opóźnienia. bity 4-0=Numer dolnej linii kursora pomniejszony o 1. Pierwsza linia od góry ma numer 0. Rejestry adresowe (start address high register, start address Iow register) - indeksy 0Ch i 0Dh Rejestry adresowe zawierają adres pierwszego wyświetlanego znaku (w trybach tekstowych) lub punktu (w trybach graficznych) . bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bit 7; bit 6; bit 5; bit 4; bit 3 ; bit 2; bit l; bit 0; bity 7-0=Bardziej i mniej znacząca część adresu pierwszego wyświetlanego punktu lub znaku. Bardziej znacząca część adresu znajduje się w rejestrze o indeksie 0Ch,. mniej znacząca - w rejestrze o indeksie 0Dh. Zmiana zawartości tych rejestrów powoduje przesunięcie początku wyświetlanego okna. Rejestry pozycji kursora (cursor location high register, cursor location Iow register) indeksy 0Eh i 0Fh Rejestry pozycji kursora mają adres znaku zawierającego kursor (w trybach tekstowych). bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Bardziej i mniej znacząca część adresu znaku zawiającego kursor. Bardziej znacząca część adresu zawarta jest w rejestrze o indeksie 0Eh, mniej znacząc - w rejestrze o indeksie 0Fh. Rejestr początku powrotu pionowego (yertical retrace start) - indeks lOh W rejestrze początku powrotu pionowego znajduje się osiem mniej znaczących bitów] wartości określającej moment początku powrotu pionowego. Bity ósmy i dziewiąty war-] tości określającej rozpoczęcie powrotu pionowego znajdują się w rejestrze przepełnień. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Mniej znaczące bity wartości określającej rozpoczęcie powrotu pionowego. Rejestr końca powrotu pionowego (vertical retrace end) - indeks 11h Rejestr końca powrotu pionowego zawiera cztery mniej znaczące bity wartości określa jącej moment zakończenia powrotu pionowego. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bit 7=Zabezpieczenie przed zapisem rejestrów o indeksach 00h - 07h: 0 - zezwolenie na modyfikację, l - brak zezwolenia na modyfikację. bit 6=Liczba cykli odświeżania pamięci RAM sterownika: 0 - trzy cykle odświeżania na jedną linię, l - pięć cykli odświeżania na jedną linię. bit 5=Zezwolenie na przerwanie powrotu pionowego: 0 - zezwolenie na generowanie przerwania, l - brak zezwolenia na generowanie przerwania. bit 4=Potwierdzenie przyjęcia przerwania powrotu pionowego: 0 - przyjęcie żądania obsługi przerwania, l - zakończenie obsługi przerwania. bity 3-0 =Mniej znaczące bity wartości określającej moment końca powrotu pionowego. Wystąpienie przerwania powrotu pionowego jest sygnalizowane zmianą stanu linii IRQ 2. Standardowy sterownik VGA nie generuje przerwania powrotu pionowego. Rejestr końca wyświetlania pionowego (yertical display end register) - indeks 12h Rejestr końca wyświetlania pionowego zawiera osiem mniej znaczących bitów wartości określającej moment końca wyświetlania zawartości pamięci obrazu. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Mniej znaczące bity wartości określającej moment końca wyświetlania pionowego pomniejszony o 1. Bity ósmy i dziewiąty wartości określającej moment końca wyświetlania pionowego znajdują się w rejestrze przepełnień. Rejestr długości linii (offset register) - indeks 13h Rejestr długości linii zawiera wartość określającą długość jednej linii wyświetlanego obrazu w bajtach, słowach lub podwójnych słowach w zależności od zawartości rejestru trybu adresowania. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0 =Rozmiar jednej linii wyświetlanego obrazu w bajtach. Rejestr pozycji podkreślenia (underline location register) - indeks 14h Rejestr pozycji podkreślenia zawiera numer linii, w której będzie wyświetlane podkreślenie. Nie używ.; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bit 7=Nie używany. bit 6=Tryb adresowania pamięci obrazu: 0 - tryb jest określany przez szósty bit rejestru trybu adresowania, l - tryb podwójnych słów (tryb 256-kolorowy - interpretowana jest co czwarta komórka pamięci obrazu). bit 5=Dzielnik licznika znaków: 0 - przejście do następnej komórki pamięci po zwiększeniu licznika o l, l - przejście do następnej komórki pamięci po zwiększeniu licznika o 4. bity 4-0=Numer linii, w której będzie wyświetlane podkreślenie. Rejestr pozycji podkreślenia zawiera także informację uzupełniającą o trybach adresowania stosowanych przez sterownik. Rejestr początku wygaszania pionowego (start vertical blanking register) - indeks 15h Rejestr początku wygaszania pionowego zawiera osiem mniej znaczących bitów wartości określającej moment rozpoczęcia wygaszania pionowego. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Mniej znaczące bity wartości określającej moment początku wygaszania pionowego. Ósmy bit wartości początku wygaszania pionowego znajduje się w rejestrze przepełnień, a bit dziewiąty znajduje się w rejestrze wysokości znaku. Rejestr końca wygaszania pionowego (end vertical blanking register) - indeks 16h W rejestrze końca wygaszania pionowego znajduje się osiem mniej znaczących bitów wartości określającej moment zakończenia wygaszania pionowego. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Mniej znaczące bity wartości określającej moment końca wygaszania pionowego. Bity ósmy i dziewiąty wartości określającej koniec wygaszania pionowego są takie same jak bity ósmy i dziewiąty wartości początku wygaszania pionowego. Rejestr trybu adresowania (modę control register) - indeks 17h Rejestr trybu adresowania razem z rejestrem pozycji podkreślenia określa sposób adresowania pamięci obrazu. bit 7; bit 6; bit 5; nie używ.; bit 3; bit 2; bit l; bit 0; bit 7=Zerowanie układu: 0 - brak zezwolenia na wykonanie powrotu pionowego i poziomego, 1 - standardowa praca. bit 6=Tryb adresowania pamięci obrazu: 0- tryb bajtów (interpretowana jest każda komórka pamięci), l - tryb słów (interpretowana jest co druga komórka pamięci). bit 5=Bit używany, jeśli wyzerowany bit szósty: 0 - podczas interpretowania pamięci obrazu zerowy bit adres jest zastępowany bitem trzynastym, l - podczas interpretowania pamięci obrazu zerowy bit adresu jest zastępowany bitem piętnastym. bit 4=Nie używany; bit 3=Dzielnik licznika znaków: 0 - przejście do następnego adresu, gdy licznik znaków zwiększa się o l, l - przejście do następnego adresu, gdy licznik znaków zwiększa się o 2. bit 2=Sposób zwiększania licznika linii: 0 - licznik linii jest zwiększany po każdym powrocie poziomym, l - licznik linii jest zwiększany co drugi powrót poziomy. bit l=Przesunięcie o 16 kB: 0 - pamięć obrazu podzielona jest na część zawierającą linie o numerach, których reszta z dzielenia przez 4 wynosi O lub l (16 kB) i na część zawierającą linie o numerach, których reszta z dzielenia przez 4 wynosi 2 lub 3 (16 kB), l - linie parzyste i nieparzyste występują na przemian. bit 0=Zgodność z CGA: 0 - pamięć obrazu podzielona jest na część zawierającą linie parzyste (8 kB) i część zawierającą linie nieparzyste (8 kB), l - linie parzyste i nieparzyste występują na przemian. Rejestr porównania linii (linę compare register) - indeks 18h Rejestr porównania linii umożliwia poziome podzielenie ekranu na dwa, w dużym stopniu niezależne obszary. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit l; bit 0; bity 7-0=Numer linii podziału ekranu. Rejestr porównania linii zawiera osiem mniej znaczących bitów numeru linii dzielącej obraz. Bit ósmy znajduje się w rejestrze przepełnień, a bit dziewiąty znajduje się w rejestrze wysokości znaku. Adres pierwszego wyświetlanego znaku dla górnego obszaru wynika z zawartości rejestrów adresowych, a adres początku dolnego obszaru zawsze wynosi zero. Funkcje BIOS obsługujące karty graficzne Funkcje konieczne do obsługi sterowników VGA i EGA zawarte są w BlOS-ach tych sterowników. BIOS sterownika VGA obejmuje wszystkie funkcje BIOS-u sterownika EGA; przy opisie podamy ewentualne różnice i dostępność danej funkcji. Funkcje BIOS-u sterownika można podzielić tematycznie na: -Funkcje określające tryb pracy i ogólne parametry sterownika (OOh - 07h oraz OFh). -Funkcje dostępu do ekranu (08h - OEh). -Funkcje służące do definiowania kolorów (lOh). -Funkcje generatora znaków (11 h). -Funkcje konfigurujące sterownik (l2h). -Funkcje uzupełniające (13h, lAh - ICh). Do wszystkich funkcji BIOS-u sterownika można odwołać się poprzez przerwanie programowe INT 10h. Parametry wejściowe i wyjściowe przekazywane są w rejestrach procesora oraz poprzez wydzielone obszary pamięci. Numer funkcji i podfunkcji przekazywany jest zawsze w rejestrach AH i AL lub BL. Funkcje określające tryb pracy i ogólne parametry sterownika Funkcja 00h - wybór trybu pracy sterownika (EGA/VGA) Funkcja służy do wyboru trybu pracy sterownika. Parametry wejściowe: AH 00h; AL bit 7= l; zawartość pamięci obrazu pozostanie bez zmian, bit 7= 0; przy zmianie trybu pamięć zostanie wyzerowana, bity 0-6; numer trybu. Wyjście: - brak - Uwagi dodatkowe: Tryby pracy standardowego sterownika VGA: Liczba; ; Numer trybu; Rozdzielczość; Liczba kolorów; Tryb graficzny/tekstowy; Emulacja sterownika 00h; 40x25; 16; tekstowy; CGA 01h; 40x25; 16; tekstowy; CGA 02h; 80x25; 16; tekstowy; CGA 03h; 80x25; 16; tekstowy; CGA 04h; 320x200; 4; graficzny; CGA 05h; 320x200; 4; graficzny; CGA 06h; 640x200; 2; graficzny; CGA 07h; 80x25; 2; tekstowy; MDA 0Dh; 320x200; 16; graficzny; EGA 0Eh; 640x200; 16; graficzny; EGA 0Fh; 640x350; 2; graficzny; EGA mono I0h; 640x350; 16; graficzny; EGA 11h; 640x480; 2 graficzny; MCGA 12h; 640x480; 16; graficzny; VGA 13h; 320x200; 256; graficzny; MCGA Funkcje dostępu do ekranu. Funkcja 01h - określenie postaci kursora (EGA/VGA) Funkcja służy do określenia wysokości i położenia wewnątrz znaku migającego prostokąta wyróżniającego znak na ekranie. Parametry wejściowe: AH 01h; CH bit 5- 1 kursor schowany; bit 5- 0 kursor wyświetlany, bity 4-0 numer górnej linii kursora, CL bity 0-4 numer dolnej linii kursora. Wyjście: - brak - Uwagi dodatkowe: Najwyższa linia ma numer 0. Ustawienie numeru górnej linii mniejszego lub równego 3 i ustawienie numeru dolnej linii większego lub równego 4 powoduje wyświetlenie linii zawartych pomiędzy czterema liniami górnymi i dolnymi. Funkcja 02h - ustawienie pozycji kursora (EGA/VGA) Funkcja służy do ustawienia kursora na ekranie. Parametry wejściowe: AH 02h; BH numer strony; DH numer wiersza; DL numer kolumny. Wyjście: - brak - Uwagi dodatkowe: Lewy górny róg ekranu ma pozycję 0,0. W trybach 04h do 06h i 11 h do 13h istnieje tylko jedna strona graficzna o numerze 0 Funkcja 03h - pobranie pozycji i postaci kursora (EGA/VGA) Funkcja służy do odczytania bieżącego kształtu i położenia kursora. Parametry wejściowe: AH 03h; BH numer strony. Wyjście: CH numer górnej linii kursora; CL numer dolnej linii kursora; DH numer bieżącego wiersza; DL numer bieżącej kolumny. Uwagi dodatkowe: Lewy górny róg ekranu ma pozycję 0,0. Funkcja 05h - ustawienie numeru wyświetlanej strony (EGA/VGA) Funkcja służy do wyboru wyświetlanej strony. Parametry wejściowe: AH 05h; AL numer strony. Uwagi dodatkowe: W różnych trybach pracy występuje różna ilość stron. Dla trybów 04h - 06h oraz 11 h -13h istnieje tylko strona 0, dla trybów 0Fh - 10h istnieją strony 0 i l, dla trybu 0Eh istnieją strony 0 - 3, a dla trybów 00h - 03h, 07h i 0Dh istnieją strony 0-7. Wywołanie funkcji nie zmienia zawartości pamięci obrazu. Funkcja 06h - przewinięcie tekstu w górę (EGA/VGA) Funkcja służy do przewinięcia w górę podanego obszaru ekranu. Wiersze pozostające u dołu obszaru wypełnione będą spacjami z podanym atrybutem. Parametry wejściowe: AH 06h; AL wartość przesunięcia w wierszach; BH atrybut spacji wypełniających puste linie; CH numer wiersza lewego górnego rogu obszaru; CL numer kolumny lewego górnego rogu obszaru; DH numer wiersza prawego dolnego rogu obszaru; DL numer kolumny prawego dolnego rogu obszaru. Wyjście: - brak - Uwagi dodatkowe: Wiersze przewinięte za górną krawędź obszaru zostają utracone. Podanie wartości przesunięcia równej 0 (AL = 0) powoduje wypełnienie spacjami (wymazanie) całego podanego obszaru. Pozycja kursora pozostaje bez zmian. Funkcja 07h - przewinięcie tekstu w dół (EGA/YGA) Funkcja służy do przewinięcia w dół podanego obszaru ekranu. Wiersze pozostające u góry obszaru wypełnione będą spacjami z podanym atrybutem. Parametry wejściowe: AH 06h; AL wartość przesunięcia w wierszach; BH atrybut spacji wypełniających puste linie; CH numer wiersza lewego górnego rogu obszaru; CL numer kolumny lewego górnego rogu obszaru; DH numer wiersza prawego dolnego rogu obszaru; DL numer kolumny prawego dolnego rogu obszaru. Wyjście: - brak - Uwagi dodatkowe: Wiersze przewinięte za dolną krawędź obszaru zostają utracone. Podanie wartości przesunięcia równej 0 (AL = 0) powoduje wypełnienie spacjami (wymazanie) całego podanego obszaru. Pozycja kursora pozostaje bez zmian. Funkcja 0Fh - pobranie numeru trybu pracy sterownika (EGA/VGA) Funkcja służy do odczytu numeru trybu pracy sterownika. Parametry wejściowe: AH 0Fh. Wyjście: AH liczba wyświetlanych kolumn; AL numer trybu pracy; BH numer wyświetlanej strony. Funkcje dostępu do ekranu Funkcja 08h - pobranie kodu i atrybutu znaku, znajdującego się w miejscu wskazywanym przez kursor (EGA/VGA) Parametry wejściowe: AH 08h; BH numer strony. Wyjście: AH atrybut znaku; AL kod ASCII znaku. Uwagi dodatkowe: W trybach graficznych zawartość rejestru AL powinna zostać zignorowana. Funkcja 09h - ustawienie atrybutu i wypisanie znaku w pozycji wskazywanej przez kursor (EGA/VGA) Funkcja służy do wypisania znaku (lub znaku i podanej liczby jego kopii) w miejscu wskazywanym przez kursor. Ustawiane są także atrybuty wypisywanych znaków. Parametry wejściowe: AH 09h; AL kod ASCII znaku; BH numer strony; BL w tekstowych trybach pracy - atrybut znaku, w graficznych trybach pracy - numer koloru; CX ilość kopii znaku. Uwagi dodatkowe: Pozycja kursora nie ulega zmianie; znaki sterujące nie są brane pod uwagę, lecz są wyświetlane tak jak normalne znaki. Funkcja 0Ah - wypisanie znaku w pozycji wskazywanej przez kursor (EGA/VGA) Funkcja służy do wypisania znaku (lub kilku jego kopii) w miejscu wskazywanym przez kursor. Atrybuty wypisywanych znaków zależą od atrybutów ekranu. Parametry wejściowe: AH 0Ah; AL kod ASCII znaku; BH numer strony; BL kolor (numer koloru) w graficznych trybach pracy; CX liczba kopii znaku w AL. Wyjście: - brak - Uwagi dodatkowe: Atrybuty wyświetlanych kopii znaku pobierane są z kolejnych pozycji na ekranie. Pozycja kursora nie ulega zmianie, gdyż kody sterujące nie są interpretowane, lecz wyświetlane tak jak normalne znaki. Funkcja 0Bh - wybranie koloru tła i krawędzi ekranu/wybranie palety kolorów Podfunkcja 00h - wybór koloru tła i krawędzi ekranu (EGA/VGA) W graficznych trybach pracy podfunkcja służy do określenia koloru tła i koloru krawędzi ekranu, natomiast w trybach tekstowych służy tylko do wyboru koloru krawędzi ekranu. Parametry wejściowe: AH 0Bh; BH 00h; BL numer koloru. Wyjście: - brak - Uwagi dodatkowe: W tekstowych trybach pracy numer koloru musi zawierać się w przedziale 0-31. W graficznych trybach pracy numer koloru musi zawierać się w przedziale 0-15. Podfunkcja 01h - wybór palety kolorów (EGA/VGA) Podfunkcja służy do wyboru palety kolorów wykorzystywanej w graficznych trybach pracy. Parametry wejściowe: AH 0Bh; BH 0lh; BL numer palety. Wyjście: - brak - Uwagi dodatkowe: Funkcja może być używana tylko w trybach pracy odpowiadających karcie CGA. W innych trybach do zmiany palety służą podfunkcje OOh i 02h funkcji 10h. Numer palety kolorów musi zawierać się w przedziale 0 - 127. Palety kolorów i odpowiadające im barwy przedstawia tabela: Tabela Palety o numerach parzystych; Numer koloru= 0; Barwa =kolor tła Numer koloru= 1; Barwa = zielony (GREEN) Numer koloru= 2; Barwa =czerwony (RED) Numer koloru= 3; Barwa=niebieski (BLUE) Palety o numerach nieparzystych Numer koloru= 0; Barwa =kolor tła Numer koloru= 1; Barwa =siny (CYAN) Numer koloru= 2; Barwa =fioletowy (MAGENTA) Numer koloru= 2; Barwa =biały (WHITE) Funkcja 0Ch - wyświetlenie punktu (piksela) w graficznych trybach pracy (EGA/VGA) Funkcja służy do wyświetlenia punktu w określonym miejscu i w podanym kolorze. Parametry wejściowe: AH 0Ch; AL kolor (numer koloru) punktu; BH numer strony; CX numer kolumny; DX numer linii. Wyjście: - brak - Uwagi dodatkowe: Ustawienie najbardziej znaczącego bitu rejestru BL (bit 7=1) powoduje wykonanie funkcji XOR pomiędzy kolorem w rejestrze AL a kolorem na ekranie. Przy dużej liczbie punktów użycie tej funkcji znacznie spowalnia działanie programu. Bezpośredni dostęp do pamięci obrazu trwa o wiele krócej. Funkcja 0Dh - odczytanie koloru punktu (piksela) w graficznych trybach pracy (EGA/VGA) Funkcja służy do pobrania koloru punktu w określonym miejscu ekranu. Parametry wejściowe: AH 0Dh; BH numer strony; CX numer kolumny; DX numer linii. Wyjście: AL kolor (numer koloru) punktu. Uwagi dodatkowe: Przy dużej liczbie punktów użycie tej funkcji znacznie spowalnia działanie programu. Bezpośredni dostęp do pamięci obrazu trwa o wiele krócej. Funkcja 0Eh - wyświetlenie znaku z przemieszczeniem kursora (EGA/VGA) Funkcja służy do wyświetlenia znaku oraz przesunięcia kursora na następną pozycję. Parametry wejściowe: AH 0Eh; AL kod ASCII znaku; BH numer strony; BL w graficznych trybach pracy numer koloru znaku. Wyjście: - brak - Uwagi dodatkowe: Funkcja działa zarówno w trybach graficznych jak i tekstowych. Brane są pod uwagę niektóre kody sterujące: 07h - sygnał dźwiękowy BEL, 08h - cofnięcie kursora BS, 0Dh - powrót na początek linii CR 0Ah - przejście do nowej linii LF, natomiast pozostałe kody sterujące wyświetlane są jak normalne znaki. Funkcje służące do definiowania kolorów Funkcja 10h - operacje na palecie kolorów Podfunkcja 00h - ustawienie jednego koloru palety (VGA) Podfunkcja służy do określenia pojedynczego koloru palety. Parametry wejściowe: AH 10h; AL 00h; BH numer wzorca koloru; BL numer koloru w palecie. Wyjście: - brak - Uwagi dodatkowe: Zmiana koloru następuje przez wpisanie numeru wzorca koloru do określonego rejestru palety. Podfunkcja 01h - zmiana koloru krawędzi ekranu (EGA/VGA) Podfunkcja służy do ustawienia koloru obrzeża ekranu. Parametry wejściowe: AH 10h; AL 01h; BH numer wzorca koloru. Wyjście: - brak - Uwagi dodatkowe: Zmiana koloru następuje przez wpisanie numeru wzorca koloru do określonego rejestru palety. Podfunkcja 02h - zmiana kolorów palety i krawędzi ekranu (VGA) Podfunkcja służy do jednoczesnego ustawienia wszystkich kolorów palety oraz koloru krawędzi ekranu. Parametry wejściowe: AH 10h; AL 02h; ES:DX adres obszaru zawierającego tablicę kolorów (17 bajtów = 16 kolorów + krawędzi). Wyjście: - brak - Uwagi dodatkowe: Zmiana kolorów następuje przez wpisanie numeru wzorca kolorów do kolejnych rejestrów palety oraz do rejestru koloru krawędzi ekranu. Pierwsze 16 bajtów wskazywanego obszaru powinno zawierać numery kolejnych wzorców kolorów (0 - 15), a bajt o adresie ES:DX + 16 powinien zawierać numer wzorca koloru krawędzi ekranu. Standardowe kolory w trybach 16-kolorowych pokazuje poniższa tabela: Numer koloru; Kolor 0; czarny (black) 1; niebieski (blue) 2; zielony (green) 3; siny (cyan) 4; czerwony (red) 5; fioletowy (magenta) 6; brązowy (brown) 7; jasnoszary (light gray) 8; szary (dark gray) 9; jasnoniebieski (light blue) 10; jasnozielony (light green) 11; jasnosiny (light cyan) 12; jasnoczerwony (light red) 13; różowy (pink) 14; żółty (yellow) 15; biały (white) Podfunkcja 03h - ustawienie sposobu interpretacji atrybutu znaku (EGA/VGA) Podfunkcja służy do określenia w jaki sposób będzie interpretowany najstarszy bit atrybutu znaku. Parametry wejściowe: AH 10h; AL 03h; BH sposób interpretacji bitów atrybutu: 1 - bit 7= 1-znak będzie migotał, bit 7=0 - znak nie będzie migotał, bity 6-4 - numer koloru tła (0 -7), bity 3-0 - numer koloru znaku (0 - 15), 0 - bity 7-4 - numer koloru tła (O - 15), bity 3-0 - numer koloru znaku (O - 15). Wyjście: - brak - Uwagi dodatkowe: Użycie funkcji ma sens tylko w trybach tekstowych. Podfunkcja 07h - pobranie pojedynczego koloru palety (VGA) Podfunkcja służy do odczytu numeru wzorca koloru podanego rejestru palety. Parametry wejściowe: AH 10h; AL 07h; BL numer koloru w palecie. Wyjście: BH numer wzorca koloru. Uwagi dodatkowe: Zwracana informacja jest odczytywana z odpowiedniego rejestru palety. Podfunkcja 08h - pobranie koloru krawędzi ekranu (VGA) Podfunkcja służy do odczytu numeru wzorca koloru krawędzi ekranu. Parametry wejściowe: AH 10h; AL 08h; Wyjście: BH numer wzorca koloru krawędzi ekranu. Uwagi dodatkowe: Zwracana informacja jest odczytywana z rejestru koloru krawędzi ekranu. Podfunkcja 09h - pobranie kolorów palety i krawędzi ekranu (VGA) Podfunkcja służy do jednoczesnego odczytu numerów wzorców kolorów całej palety i krawędzi brzegu ekranu. Parametry wejściowe: AH 10h; AL 09h; ES:DX adres obszaru pamięci do przechowania informacji o kolorach (17 bajtów). Wyjście: - brak - Uwagi dodatkowe: Zwracana informacja jest odczytywana z kolejnych rejestrów palety oraz rejestru koloru krawędzi ekranu i umieszczana we wskazanym obszarze pamięci. Pierwsze szesnaście bajtów zawiera numery kolejnych wzorców kolorów (0 - 15), a bajt o adresie ES:DX + 16 zawiera numer wzorca koloru krawędzi ekranu. Podfunkcja 10h - określenie pojedynczego wzorca koloru (VGA) Podfunkcja służy do określenia wzorca koloru poprzez podanie trzech składowych koloru składających się na 18-bitowy wzorzec. Parametry wejściowe: AH 10h; AL 10h; BX numer wzorca koloru (0 - 255); DH składowa czerwona koloru (0 - 63); CH składowa zielona koloru (0 - 63); CL składowa niebieska koloru (0 - 63). Wyjście: - brak - Uwagi dodatkowe: Wpisywane składowe powinny zawierać się w przedziale 0-63, wartości większe w standardowym sterowniku VGA zostaną obcięte do 6 bitów. Jeśli zostało włączone przeliczanie barw do odcieni szarości (podfunkcja IBh funkcji 10h), to wzorzec koloru zostanie przeliczony do odpowiedniego odcienia szarości, wybranego z 64 poziomów. Podfunkcja 12h - określenie bloku wzorców kolorów (VGA) Podfunkcja służy do określenia wzorców kolorów poprzez podanie trzech składowych koloru dla każdego koloru w podanym bloku. Parametry wejściowe: AH 10h; AL 12h; BX numer pierwszego wzorca koloru w bloku (0 - 255); CX liczba ustawianych wzorców; ES:DX adres obszaru zawierającego kolejne wzorce kolorów. Wyjście: - brak - Uwagi dodatkowe: Kolejne rejestry wzorców kolorów w bloku są wypełniane wartościami ze wskazanego obszaru, który powinien zawierać kolejno: składową czerwoną, składową zieloną i składową niebieską pierwszego koloru, składową czerwoną, składową zieloną, składową niebieską drugiego koloru itd. Wpisywane składowe powinny zawierać się w przedziale 0 - 63, wartości większe w standardowym sterowniku VGA zostaną obcięte do 6 bitów. Jeśli zostało włączone przeliczanie barw do odcieni szarości (podfunkcja IBh funkcji 10h), to wzorzec koloru zostanie przeliczony do odpowiedniego odcienia szarości, wybranego z 64 poziomów. Parametry wejściowe: AH 10h; AL 15h BX numer wzorca koloru (0 - 255). Wyjście: DH składowa czerwona koloru; CH składowa zielona koloru; CL składowa niebieska koloru. Uwagi dodatkowe: Pobrana informacja jest odczytywana z 18-bitowego rejestru wzorca koloru. Podfunkcja 17h - pobranie bloku wzorców kolorów (VGA) Podfunkcja służy do odczytania składowych wzorców kolorów w podanym bloku. Parametry wejściowe: AH 10h; AL 15h; BX numer pierwszego pobieranego wzorca koloru; CX liczba pobieranych wzorców koloru; ES:DX adres obszaru pamięci, w którym zapisane zostaną składowe kolorów. Wyjście: - brak - Uwagi dodatkowe: Informacja o składowych odczytywana jest z odpowiednich 18-bitowych rejestrów wzorców kolorów bloku. Po wykonaniu funkcji obszar wskazywany przez ES:DX zawiera trzybajtowe wzorce kolorów kolejno dla wszystkich kolorów we wskazanym bloku. Następne trzy bajty zawierają 6-bitową czerwoną składową, 6-bitową zieloną składową i 6-bitową składową niebieską koloru. Podfunkcja 1Ah - pobranie informacji o blokach wzorców kolorów (VGA) Funkcja służy do pobrania informacji o numerze aktywnego bloku i typie bloków wzorców kolorów. Parametry wejściowe: AH 10h; AL lAh. Wyjście: BH numer aktywnego bloku wzorców koloru; BL l - bloki wzorców kolorów zgrupowane są w 16 bloków po 16 wzorców, 0 - bloki wzorców kolorów zgrupowane są w 4 bloki po 64 wzorce. Uwagi dodatkowe: - brak - Podfunkcja IBh - przekształcenie do poziomów szarości (VGA) Podfunkcja służy do przeliczenia wzorców kolorów w podanym bloku do odpowiadających im poziomów szarości. Parametry wejściowe: AH 10h; AL IBh; BX numer pierwszego przeliczanego wzorca koloru; CX liczba przeliczanych wzorców kolorów. Wyjście: - brak - Uwagi dodatkowe: Dla wszystkich wzorców w bloku zostaje policzona wartość poziomu szarości. Każda barwa składowa zastępowana jest sumą ważoną trzech barw, składającą się z 0,30 składowej czerwonej, 0,59 składowej zielonej i 0,11 składowej niebieskiej koloru. Pierwotne wartości składowych zostają utracone. Funkcje generatora znaków Funkcja11h - działania na generatorze znaków Podfunkcja 00h - definiowanie znaków tekstowego trybu pracy (EGA/VGA) Podfunkcja służy do zastąpienia zbioru znaków lub jego części znakami zdefiniowanymi przez użytkownika. Parametry wejściowe: AH 11h; AL 00h; BH liczba bajtów opisujących pojedynczy znak; BL numer zastępowanego zbioru znaków; CX liczba zastępowanych znaków; DX kod ASCII pierwszego zmienianego znaku; ES:BP adres obszaru zawierającego definicje znaków użytkownika. Wyjście: - brak - Uwagi dodatkowe: Liczba bajtów opisujących pojedynczy znak waha się w zależności od trybu od 8 do 16, numer zastępowanego zbioru znaków należy do przedziału 0-7. Podczas wywołania funkcji może nastąpić zmiana trybu pracy sterownika, jednak zawartość pamięci obrazu pozostaje nienaruszona. Podfunkcja 0lh - załadowanie znaków standardowych 8 x 14 (EGA/VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x14 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; A 01h; BL numer zbioru znaków. Wyjście: - brak - Uwagi dodatkowe: Podczas wywołania funkcji może nastąpić zmiana trybu pracy sterownika, jednak zawartość pamięci obrazu pozostaje nienaruszona. Podfunkcja 02h - załadowanie znaków standardowych 8x8 (EGA/VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x8 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; AL 02h; BL numer zbioru znaków. Wyjście: - brak - Uwagi dodatkowe: Podczas wywołania funkcji może nastąpić zmiana trybu pracy sterownika, jednak zawartość pamięci obrazu pozostaje nienaruszona. Podfunkcja 03h - ustawianie domyślnego zbioru znaków (EGA/VGA) Podfunkcja służy do wyboru znaków, które będą wyświetlane na ekranie w tekstowych trybach pracy. Parametry wejściowe: AH 11h; AL 03h; BL bity 4, 1,0 - numer pierwszego zbioru znaków, bity 5, 3, 2 - numer drugiego zbioru znaków. Wyjście: - brak - Uwagi dodatkowe: Wybrany zbiór musi zostać przedtem załadowany podfunkcjami 00h, 0lh, 02h, 10h, 11 h, 12hlub 14h funkcji 11 h. W tekstowych trybach pracy można stosować zbiory 256-znakowe lub 512-znakowe. Dla zbioru 256-znakowego numery pierwszego i drugiego zestawu znaków muszą być takie same. W zbiorach 512-znakowych pierwsze 256 znaków zostanie wybrane, gdy trzeci bit atrybutu wynosi 0, a pozostałe 256 znaków - gdy trzeci bit atrybutu wynosi l. Podfunkcja 04h - załadowanie znaków standardowych 8 x 16 (VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x16 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH llh; AL 04h; BL numer zbioru znaków. Wyjście: - brak - Uwagi dodatkowe: Podczas wywołania funkcji może nastąpić zmiana trybu pracy sterownika, jednak zawartość pamięci obrazu pozostaje nienaruszona. Podfunkcja 10h - definicja znaków dla tekstowych trybów pracy (EGA/VGA) Podfunkcja służy do zastąpienia zbioru znaków lub jego części znakami zdefiniowanymi przez użytkownika. Parametry wejściowe: AH 11h; AL 10h; BH liczba bajtów opisujących pojedynczy znak; BL numer modyfikowanego zbioru znaków; CX liczba zastępowanych znaków; DX kod ASCII pierwszego zastępowanego znaku; ES:BP adres obszaru pamięci zawierającego definicję znaków. Wyjście: - brak - Uwagi dodatkowe: Podfunkcja 10h służy do modyfikowania zestawów znaków o różnych wymiarach (w odróżnieniu od podfunkcji 00h). Powinna być wywołana zaraz po ustawieniu tekstowego trybu pracy i podczas wyświetlania strony zerowej. Podfunkcja 11h - załadowanie znaków standardowych 8 x 14 (EGA/VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x14 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; AL 11h; BL numer zbioru znaków. Wyjście: - brak - Uwagi dodatkowe: Załadowany zbiór znaków odpowiada rozmiarami zbiorowi znaków sterownika MDA, ale może on zastąpić zbiory znaków o innych wymiarach. Podfunkcja powinna być wywołana zaraz po ustanowieniu tekstowego trybu pracy i podczas wyświetlania strony 0. Podfunkcja 12h - załadowanie znaków standardowych 8x8 (EGA/VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x8 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; AL 12h; BL numer zbioru znaków. - brak - Uwagi dodatkowe: Podfunkcja służy do zastąpienia zbioru znaków o wymiarach innych niż 8x8. Powinna być wywołana zaraz po ustanowieniu tekstowego trybu pracy i podczas wyświetlania strony 0. Podfunkcja 14h - załadowanie znaków standardowych 8 x 16 (VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x16 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; AL 14h; BL numer zbioru znaków. Wyjście: - brak - Uwagi dodatkowe: Podfunkcja służy do zastąpienia zbioru znaków o wymiarach innych niż 8x16. Powinna być wywołana zaraz po ustanowieniu tekstowego trybu pracy i podczas wyświetlania strony 0. Podfunkcja 20h - modyfikowanie zestawu znaków w graficznych trybach pracy (EGA/VGA) Podfunkcja służy do definiowania przez użytkownika wzorców znaków o kodach wyższych od 127. Parametry wejściowe: AH 11h; A 20h; ES:BP adres obszaru zawierającego opis znaków. Wyjście: - brak - Uwagi dodatkowe: Adres wskazywany przez rejestry ES:BP jest zapisywany w tablicy wektorów przerwań jako wektor IFh. Zmodyfikowane znaki są dostępne w graficznych trybach pracy 04h -06h. Podfunkcja powinna być wywołana zaraz po ustanowieniu graficznego trybu pracy. Podfunkcja 21h - modyfikowanie zestawu znaków w graficznych trybach pracy (EGA/VGA) Podfunkcja służy do definiowania przez użytkownika wzorców znaków dostępnych w graficznych trybach pracy. Parametry wejściowe: AH 11h; AL 21h; BL liczba wierszy na ekranie zakodowana następująco: 0 - liczba wierszy podana w rejestrze DL, 1 - 14 wierszy, 2 - 25 wierszy, 3 - 43 wiersze; CX liczba bajtów opisujących pojedynczy znak; DL dla rejestru BL = 0 zawiera liczbę wierszy na ekranie; ES:BP adres obszaru zawierającego opis znaków. Wyjście: - brak - Uwagi dodatkowe: Adres wskazywany przez rejestry ES:BP jest zapisywany w tablicy wektorów przerwań jako wektor 43h. Podfunkcja powinna być wywołana zaraz po ustanowieniu graficznego trybu pracy. Podfunkcja 22h - załadowanie znaków standardowych 8 x 14 (EGA/VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x14 zapisanym w pamięci ROM* sterownika VGA. Parametry wejściowe: AH 11h; AL 22h; BL liczba wierszy na ekranie zakodowana następująco: 0 - liczba wierszy podana w rejestrze DL, 1 - 14 wierszy, 2 - 25 wierszy, 3 - 43 wiersze; DL dla rejestru BL = 0 zawiera liczbę wierszy na ekranie. Wyjście: - brak - Uwagi dodatkowe: Adres zestawu znaków 8 x 14 jest zapisywany w tablicy wektorów przerwań jako wektor 43h. Podfunkcja powinna być wywołana zaraz po ustanowieniu graficznego trybu pracy. Podfunkcja 23h - załadowanie znaków standardowych 8x8 (EGA/VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorem znaków 8x8 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; AL 23h; BL liczba wierszy na ekranie zakodowana następująco: 0 - liczba wierszy podana w rejestrze DL, 1 - 14 wierszy, 2 - 25 wierszy, 3 - 43 wiersze; DL dla rejestru BL = 0 zawiera liczbę wierszy na ekranie. Wyjście: - brak - Uwagi dodatkowe: Adres zestawu znaków 8x8 jest zapisywany w tablicy wektorów przerwań jako wektor 43h. Podfunkcja powinna być wywołana zaraz po ustanowieniu graficznego trybu pracy. Podfunkcja 24h - załadowanie znaków standardowych 8 x 16 (VGA) Podfunkcja służy do zastąpienia wskazanego zbioru znaków standardowym zbiorę znaków 8x16 zapisanym w pamięci ROM sterownika VGA. Parametry wejściowe: AH 11h; BL liczba wierszy na ekranie zakodowana następująco: 0 - liczba wierszy podana w rejestrze DL, 1 - 14 wierszy, 2 - 25 wierszy, 3 - 43 wiersze; DL dla rejestru BL = 0 zawiera liczbę wierszy na ekranie. Wyjście: - brak - Uwagi dodatkowe: Adres zestawu znaków 8 x 16 jest zapisywany w tablicy wektorów przerwań jako we tor 43h. Podfunkcja powinna być wywołana zaraz po ustanowieniu graficznego trybu pracy. Podfunkcja 30h - pobranie informacji o zestawach znaków (EGA/VGA) Podfunkcja służy do pobrania informacji o dostępnych zbiorach znaków. Parametry wejściowe: AH 11h; AL 30h; BH zbiór znaków: 0 - zbiór znaków o adresie wskazywanym przez wektor przerwania IFh, 1 - zbiór znaków o adresie wskazywanym przez wektor przerwania 43h, 2 - zbiór znaków 8 x 14 z pamięci ROM sterownika, 3 - zbiór znaków 8 x 8 z pamięci ROM sterownika, 4 - zbiór znaków 8x80 kodach powyżej 127 z pamięci ROM sterownika, 5 - dodatkowy zbiór znaków 8 x 14 z pamięci ROM sterownika, 6 - zbiór znaków 8 x 16 z pamięci ROM sterownika, 7 - dodatkowy zbiór znaków 8 x 16 z pamięci ROM sterownika. Wyjście: CX liczba bajtów opisujących pojedynczy znak; DL liczba wierszy możliwych do wyświetlenia na ekranie; ES:BP adres początku obszaru zawierającego definicje znaków. Funkcje konfigurujące sterownik Funkcja 12h - konfiguracja sterownika Podfunkcja 10h - informacja o konfiguracji aktywnego sterownika (EGA/VGA) Podfunkcja służy do odczytania informacji o stanie aktywnego sterownika. Parametry wejściowe: AH 12h; BL 10h. Wyjście: BH typ monitora: 0 - monitor kolorowy, l - monitor monochromatyczny; BL rozmiar pamięci obrazu: 0 - 64 kB, l - 128 kB, 2- 192 kB, 3 -256 kB i więcej; CH wartość odczytana z rejestru złącza krawędziowego. Uwagi dodatkowe: Sterownik VGA zawsze zakłada obecność monitora kolorowego. Podfunkcja 20h - rozszerzenie operacji drukowania zawartości ekranu (EGA/VGA) Podfunkcja służy do rozszerzenia zakresu działania standardowej procedury drukowania zawartości ekranu na tryby tekstowe o różnej ilości wierszy na ekranie. Parametry wejściowe: AH 12h; BL 20h. Wyjście: - brak - Uwagi dodatkowe: BIOS sterownika obsługuje drukowanie zawartości ekranu tylko w tekstowych trybach pracy. Do drukowania zawartości ekranu w trybach graficznych należy posłużyć się programem DOS-a GRAPHICS.COM. Podfunkcja 30h - ustawienie rozdzielczości pionowej tekstowych trybów pracy (VGA) Podfunkcja służy do wybrania rozdzielczości pionowej, która będzie stosowana podczas najbliższego ustawienia tekstowego trybu pracy funkcją OOh. Parametry wejściowe: AH 12h; BL 30h; AL rozdzielczość pionowa: 0 -200 linii, l -350 linii, 2-400 linii. Wyjście: AL OOh jeżeli aktywnym sterownikiem nie jest VGA, 12h jeżeli aktywnym sterownikiem jest VGA. Uwagi dodatkowe: Wyświetlenie obrazu z większą rozdzielczością pionową pozwala na wyświetlenie większej ilości wierszy na ekranie. Podfunkcja 31h - powrót do standardowych kolorów (VGA) Podfunkcja służy do określenia, czy podczas przełączania trybów pracy nastąpi przywrócenie standardowej palety kolorów. Parametry wejściowe: AH 12h; BL 31h; AL 0 - po zmianie trybu pracy nastąpi przywrócenie standardowej palety, l - po zmianie trybu pracy nie nastąpi przywrócenie standardowej palety. Wyjście: Jeżeli podano poprawne parametry wejściowe, to AL = 12h. Podfunkcja 32h - odłączenie sterownika (VGA) Podfunkcja służy do programowego odłączenia sterownika i zablokowania dostępu pamięci obrazu i rejestrów. Parametry wejściowe: AH 12h; BL 32h; AL 0 - przyłączenie sterownika, l - odłączenie sterownika. Wyjście: Jeżeli podano poprawne parametry wejściowe, to AL = 12h. Uwagi dodatkowe: Po odłączeniu sterownika wszelki zapis do rejestrów i pamięci obrazu nie przynosi żadnych efektów. Podfunkcja 33h - przełączenie do poziomów szarości (VGA) Podfunkcja służy do określenia trybu wyświetlania obrazu na ekranie kolorowego monitora. Parametry wejściowe: AH 12h; BL 33h; AL 0 - obraz będzie wyświetlany w poziomach szarości, l - obraz będzie wyświetlany w kolorach. Wyjście: Jeżeli podano poprawne parametry wejściowe, to AL = 12h. Uwagi dodatkowe: Obraz wyświetlany w poziomach szarości wyświetlany jest jako suma ważona barw składowych poszczególnych kolorów . Na odcień szarości składa się 30 % barwy czerwonej, 59 % barwy zielonej i 11 % barwy niebieskiej. Przy podłączonym monitorze monochromatycznym następuje domyślne ustawienie zezwolenia na wyświetlanie poziomów szarości. Podfunkcja 34h - zezwolenie na emulację kursora (VGA) Podfunkcja służy do określenia, czy kursor będzie emulowany programowo. Parametry wejściowe: - brak - Wyjście: Jeżeli podano poprawne parametry wejściowe, to AL = 12h. Uwagi dodatkowe: W tekstowych trybach pracy OOh - 03h emulacja polega na zmianie górnej i dolnej linii kursora. Podfunkcja 35h - wybór aktywnego sterownika (VGA) Podfunkcja służy do zmiany aktywnego sterownika graficznego (jeżeli w systemie zainstalowano więcej niż jeden sterownik). Parametry wejściowe: AH 12h; BL 35h; AL 0 - pierwsze odłączenie aktywnego sterownika, 1 - pierwsze dołączenie nieaktywnego sterownika, 2 - kolejne odłączenie aktywnego sterownika, 3 - kolejne dołączenie nieaktywnego sterownika; ES:DX adres obszaru do przechowania informacji o stanie aktywnego sterownika (128 bajtów). Wyjście: Jeżeli podano poprawne parametry wejściowe, to AL = 12h. Uwagi dodatkowe: Zmiana sterownika polega na dwukrotnym wywołaniu funkcji, najpierw do odłączenia, a następnie do podłączenia sterownika. Operacja może być wykonana, gdy oba sterowniki można odłączyć za pomocą podfunkcji 32h. Dla każdego sterownika musi być zarezerwowany osobny 128-bajtowy obszar. Jeżeli adresy sterowników nie kolidują ze sobą, wywołanie funkcji przestaje być potrzebne. Podfunkcja 36h - wygaszanie ekranu (VGA) Podfunkcja służy do wygaszenia ekranu oraz do odtworzenia jego zawartości. Parametry wejściowe: AH 12h; BL 36h; AL O - wyświetlanie obrazu, l - wygaszenie obrazu. Wyjście: Jeżeli podano poprawne parametry wejściowe, to AL = 12h. Uwagi dodatkowe: Podfunkcja jest używana głównie w programach posiadających funkcję zapobiegania wypalaniu luminoforu (screen saver). Funkcje uzupełniające Funkcja 13h - wypisanie ciągu znaków (EGA/VGA) Funkcja służy do wypisania ciągu znaków z uwzględnieniem znaków sterujących CR - 0Dh, LF - 0Ah, BS - 08h i BEL - 07h. Pozostałe kody sterujące wyświetlane sąjak inne znaki. Podfunkcja 00h - wypisanie ciągu znaków bez przesuwania kursora (EGA/VGA) Podfunkcja służy do wyświetlenia ciągu znaków z podanym atrybutem bez zmiany pozycji kursora. Parametry wejściowe: AH 13h; AL 00h; BH numer strony ; BL atrybut wyświetlanych znaków; CX liczba znaków w wyświetlanym ciągu; DH numer wiersza; DL numer początkowej kolumny; ES:BP adres początku ciągu znaków. Wyjście: - brak - Uwagi dodatkowe: Podany ciąg musi zawierać tylko kody ASCII znaków. Użycie atrybutów jest niedopuszczalne. Podfunkcja 01h - wypisanie ciągu znaków z przesunięciem kursora (EGA/VGA) Podfunkcja służy do wyświetlenia ciągu znaków z podanym atrybutem oraz przesunięcia pozycji kursora poza ostatni wyświetlony znak. Parametry wejściowe: AH 13h; AL 0lh; B H numer strony; BL atrybut wyświetlanych znaków; CX liczba znaków w wyświetlanym ciągu; DH numer wiersza; DL numer początkowej kolumny; ES:BP adres początku ciągu znaków. Wyjście: - brak - Uwagi dodatkowe: Podany ciąg musi zawierać tylko kody ASCII znaków. Użycie atrybutów jest niedopuszczalne. Podfunkcja 02h - wypisanie ciągu znaków z atrybutami bez przesunięcia kursora (EGA/VGA) Podfunkcja służy do wyświetlenia znaków w postaci pary „znak-atrybut znaku" be2 przesunięcia pozycji kursora. Parametry wejściowe: AH 13h; AL 02h; BH numer strony; CX liczba par „znak-atrybut" w wyświetlanym ciągu; DH numer wiersza; DL numer początkowej kolumny; ES:BP adres początku ciągu par. Wyjście: - brak - Podfunkcja 03h - wypisanie ciągu znaków z atrybutami oraz przesunięcie kursora (EGA/VGA) Podfunkcja służy do wyświetlenia znaków w postaci pary „znak-atrybut" oraz przesunięcia pozycji kursora poza ostatni wyświetlany znak. Parametry wejściowe: AH 13h; AL 03h; BH numer strony ; CX liczba par „znak-atrybut" w wyświetlanym ciągu; DH numer wiersza; DL numer początkowej kolumny; ES:BP adres początku ciągu par. Wyjście: - brak - Funkcja 1Ah - pobranie informacji o sterowniku graficznym (VGA) Podfunkcja 00h - pobranie informacji o rodzaju sterownika graficznego (VGA) Podfunkcja służy do pobrania informacji o rodzaju występujących w komputerz równików. Parametry wejściowe: AH 1Ah; AL 00h. Wyjście: AL lAh; BL typ sterownika aktywnego; BH typ sterownika nieaktywnego, Uwagi dodatkowe: Jeśli zainstalowany jest tylko jeden sterownik, to rejestr BH = 0. Zwracane wartości i odpowiadające im sterowniki: 00h; brak sterownika 01h; sterownik MDA 02h; sterownik CGA 04h; sterownik EGA kolor 05h; sterownik EGA monochromatycznym 06h; sterownik PGA 07h; sterownik VGA kolor 08h; sterownik VGA monochromatycznym 0Ah; sterownik MCGA z cyfrowym monitorem kolorowym 0Bh; sterownik MCGA z analogowym monitorem monochromatycznym 0Ch; sterownik MCGA z analogowym monitorem kolorowym 0FFh; sterownik nie rozpoznany Podfunkcja 01h - wybranie rodzaju sterownika (VGA) Podfunkcia służy do określenia zainstalowanych sterowników graficznych. Parametry wejściowe: AH 1Ah; AL 01h; BL typ sterownika aktywnego; BH typ sterownika nieaktywnego. Wyjście: AL lAh. Uwagi dodatkowe: Rodzaje sterowników podano przy opisie podfunkcji 00h. Funkcja 1Bh - informacja o stanie i funkcjach aktywnego sterownika (VGA) Funkcja służy do odczytania stanu aktywnego sterownika. Parametry wejściowe: AH 1Bh; BX 0; ES:DI adres obszaru przeznaczonego do zapisania informacji (64 bajty). Wyjście: AL 1Bh. Uwagi dodatkowe: Informacje o sterowniku podzielone są na dwie części: informacje o stanie sterownika oraz informacje o dostępnych funkcjach. Adres obszaru informacji o funkcjach sterownika zajmuje pierwsze cztery bajty obszaru informacji o stanie sterownika. Struktura obszaru informacji o stanie sterownika: Przesunięcie; Ilość bajtów; Zawartość 00h; 4; adres obszaru zawierającego informacje o funkcjach sterownika 04h; l; aktualny tryb pracy 05h; 2; liczba wyświetlanych kolumn 07h; 2; rozmiar aktualnie wykorzystanej pamięci obrazu w bajtach 09h; 2; adres lewego górnego rogu obrazu względem początku pamięci obrazu 0Bh; 2; pozycja kursora na stronie 0 (wiersz, kolumna) 0Dh; 2;pozycja kursora na stronie 1 (wiersz, kolumna) 0Fh; 2;pozycja kursora na stronie 2 (wiersz, kolumna) 11h; 2; pozycja kursora na stronie 3 (wiersz, kolumna) 13h; 2; pozycja kursora na stronie 4 (wiersz, kolumna) 15h; 2; pozycja kursora na stronie 5 (wiersz, kolumna) 17h; 2; pozycja kursora na stronie 6 (wiersz, kolumna) 19h; 2; pozycja kursora na stronie 7 (wiersz, kolumna) 1Bh; 1; numer górnej linii kursora 1Ch; 1 numer dolnej linii kursora 1Dh; 1; numer wyświetlanej strony obrazu 1Eh; 2; adres rejestru indeksowego układu sterowania wyświetlaczem 20h; 1;numer aktualnego trybu pracy 21h; 1; numer aktualnej palety kolorów w trybach 04 - 05h 22h; 1;liczba wyświetlanych wierszy 23h; 2; wysokość wyświetlanych znaków (w punktach) 25h; 1; rodzaj aktywnego sterownika (patrz podfunkcja OOh funkcji 1 Ah) 26h; 1;rodzaj nieaktywnego sterownika (patrz podfunkcja OOh funkcji 1 Ah) 27h; 2;maksymalna liczba jednocześnie wyświetlanych kolorów 29h; 1;liczba stron pamięci obrazu 2Ah; 1; rozdzielczość pionowa: 0 - 200 linii. 1 -350 linii. 2 - 400 linii, 3 - 480 linii 2Bh; 1;numer zbioru znaków pierwszej polowy 512 znakowego zbioru 2Ch; 1;numer zbioru znaków drugiej polowy 512 znakowego zbioru 2Dh; 1;informacje dodatkowe 2Eh; 3; zarezerwowane 3ih; 1; rozmiar pamięci obrazu: 0 - 64 kB, 1- 128 kB, 2- 192 kB. 3 - 256 kB i więcej 32h; 1; informacja o zawartości tablic wskaźników (głównej i dodatkowej):bit 5 =- zmieniono rodzaj zainstalowanych sterownikówbit 4 =- zmieniono zestaw standardowych kolorów i wzorcówbit 3 =- zdefiniowano znaki dla graficznego trybu pracybit 2 =- zdefiniowano znaki dla tekstowego trybu pracybit 1=- zmieniono zestaw standardowych kolorówbit 0 =- używany jest zbiór 512-znakowy 33h; 13; zarezerwowane Struktura obszaru zawierającego informacje o funkcjach sterownika: Przesunięcie; Ilość bajtów; Opis znaczenia bitów (funkcje są dostępne dla bitów = 1) 00h; 1; 0 dostępny tryb pracy OOh 1 dostępny tryb pracy Olh 2 dostępny tryb pracy 02h 3 dostępny tryb pracy 03h 4 dostępny tryb pracy 04h 5 dostępny tryb pracy 05 h 6 dostępny tryb pracy 06h 7 dostępny tryb pracy 07h 01h; 1; 0 dostępny tryb pracy 08h 1 dostępny tryb pracy 09h 2 dostępny tryb pracy OAh 3 dostępny tryb pracy OBh 4 dostępny tryb pracy OCh 5 dostępny tryb pracy ODh 6 dostępny tryb pracy OEh 7 dostępny tryb pracy OFh 02h; 1; 0 dostępny tryb pracy 1 Oh 1 dostępny tryb pracy 11 h 2 dostępny tryb pracy 1 2h 3 dostępny tryb pracy 13h 03h; 4; zarezerwowane 07h; 1; 0 dostępna rozdzielczość pionowa 200 linii 1 dostępna rozdzielczość pionowa 350 linii 2 dostępna rozdzielczość pionowa 400 linii 08h; 1; liczba dostępnych zbiorów znaków w trybach tekstowych 09h; 1;maksymalna liczba jednocześnie wyświetlanych zbiorów znaków 0Ah; 1;operacje wykonywane przez BIOS karty graficznej: 0 możliwe są wszystkie tryby pracy 1 możliwe jest uzyskanie odcieni szarości 2 możliwe jest zastąpienie zbioru znaków 3 możliwy jest powrót do standardowych kolorów po zmianie trybu 4 możliwa jest emulacja kursora 5 możliwe jest użycie 64-kolorowej palety sterownika EGA 6 możliwa jest zmiana wzorców kolorów 7 możliwe jest określenie liczby bloków wzorców kolorów 0Bh; 1;operacje wykonywane przez BIOS karty graficznej (c. d.): 0 możliwa jest obsługa pióra świetlnego (dla sterownika VGA równe 0) 1 możliwe jest zachowanie/odtworzenie stanu sterownika 2 możliwa jest zmiana interpretacji atrybutu (migotanie/tło) 3 możliwe jest uzyskanie informacji o stanie sterownika 0Ch; 2; zarezerwowane Eh; 1; informacja o głównej i dodatkowej tablicy wskaźników: 0 możliwe jest używanie 512-znakowych zbiorów 1 możliwe jest zdefiniowanie tablicy kolorów 2 możliwa jest zmiana standardowego zbioru znaków w trybach tekstowych 3 możliwa jest zmiana standardowego zbioru znaków w trybach graficznych 4 możliwa jest zmiana standardowych kolorów i wzorców kolorów 5 możliwa jest zmiana dozwolonej kombinacji sterowników graficznych 0Fh; 1;zarezerwowane Funkcja ICh - zachowanie/odtworzenie stanu sterownika (VGA) Podfunkcja OOh - pobranie koniecznego rozmiaru obszaru pamięci do zapisania danych o stanie sterownika (VGA) Parametry wejściowe: AH ICh; AL OOh; CX rodzaj informacji do zachowania: bit 2 = l - informacja o wzorcach kołom, bit l = l - informacja o stanie zapisana w obszarze danych BlOS-u, bit O = l - informacja o stanie karty graficznej. Wyjście: AL 1Ch; BX rozmiar bufora. Uwagi dodatkowe: Zwracany rozmiar obszaru podawany jest w blokach po 64 bajty. Podfunkcja 0lh - zachowanie stanu sterownika (VGA) Podfunkcja służy do zapamiętania stanu sterownika w podanym obszarze pamięci. Parametry wejściowe: AH 1Ch; AL 01h; CX rodzaj informacji do zachowania: bit 2 = 1- informacja o wzorcach koloru, bit 1 = 1 - informacja o stanie zapisana w obszarze danych BIOS-u, bit 0 = 1 - informacja o stanie karty graficznej; ES:BX adres obszaru pamięci przeznaczonego do zapamiętania informacji o stanie. Wyjście: AL 1Ch. Uwagi dodatkowe: Po wywołaniu tej podfunkcji ulegają zmianie niektóre parametry sterownika. Stan przed wywołaniem podfunkcji można odtworzyć wywołując podfunkcję 02h. Podfunkcja 02h - odtworzenie stanu sterownika (VGA) Podfunkcja służy do odtworzenia stanu sterownika zachowanego podfunkcją01h. Parametry wejściowe: AH 1ICh; AL 02h; CX rodzaj informacji o sterowniku: bit 2 = l - informacja o wzorcach koloru, bit l = l - informacja o stanie zapisana w obszarze danych BIOS-u, bit 0 = l - informacja o stanie karty graficznej; ES:BX adres obszaru pamięci zawierającego informację o stanie sterownika. Wyjście: AL 1Ch. Dodatkowe funkcje obsługiwane przez VESA-BIOS Producenci większości kart SVGA wyposażają swoje sterowniki w YESA-BIOS. Dodaje on kilka funkcji przerwania INT lOh do BIOS-u sterownika VGA. Dodatkowe funkcje BIOS-u można podzielić zgodnie ze specyfikacjami VESA, które je wprowadziły: •funkcje wprowadzone przez specyfikację VESA l .0 (4FOOh - 4F06h), •funkcje wprowadzone przez specyfikację VESA l. l (4F07H - 4F08h), •funkcje wprowadzone przez specyfikację VESA l .2 (4F08h). Funkcja 4F00H - informacja o karcie SVGA Parametry wejściowe: ES:DI wskaźnik do bufora danych. Wyjście: AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01 h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany). Uwagi dodatkowe: Zwraca 256-bajtowy blok danych opisujący parametry karty SVGA i środowiska. Przemieszczenie; Rozmiar pola; Opis 00h; 4 bajty; sygnatura - napis ,.VESA" 04h; l słowo; numer wersji standardu VESA 06h; 2 słowa; wskaźnik do napisu firmowego, umieszczonego w pamięci ROM przez producenta 0Ah; 4 bajty; miejsce na dodatkową informację o środowisku, zwykle wypełnione bajtami o wartości 0 0Eh; 2 słowa; wskaźnik do listy trybów pracy zakończonej słowemo wartości FFFFh 12h; 238 bajtów; obszar zarezerwowany __ Funkcja 4F01H - informacja o trybach karty SVGA Parametry wejściowe: CX numer trybu; ES:DI wskaźnik do bufora danych. Wyjście: AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany). Uwagi dodatkowe: Zwraca 256-bajtowy blok danych zawierający informację o sposobie przełączania banków (liczba, rozmiar, adresy, możliwość czytania i zapisu, odstęp pomiędzy bankami) oraz szerokość ekranu wirtualnego (logicznego) dla zadanego trybu. Funkcja ta powinna zwracać informacje zarówno dla trybów VESA, jak i dla trybów charakterystycznych dla danej karty. Przemieszczenie ; Rozmiar pola; Opis 00h; 1 słowo; atrybuty trybu: bit 4 = 1 - tryb graficzny, bit 4 - 0- tryb tekstowy, bit 3 = 1 - tryb monochromatyczny, bit 3 = 0 - tryb kolorowy, bit 2 = 1 - można korzystać z funkcji wyprowadzania znaku, kreślenia piksela i przewijania okna nierozszerzonego BIOS-u, bit l = l - dostępna jest informacja dodatkowa, bit 0 = I - tryb jest dostępny 02h; 1 bajt ; atrybuty okna A bity 7 - 3 - zarezerwowane, bit 2 = l - okno umożliwia zapis do banku, bit l = l - okno umożliwia odczyt z banku, bit 0 = l - okno istnieje 03h; 1 bajt ; atrybuty okna B bity 7-3 - zarezerwowane, bit 2 = l - okno umożliwia zapis do banku, bit l = l - okno umożliwia odczyt z banku, bit O = l - okno istnieje 04h; l słowo; minimalny odstęp między początkami dwu banków pamięci granularity, wyrażony w kB 06h; l słowo; rozmiar okna w kB 08h; l słowo; część segmentowa adresu okna A w przestrzeni adresowej komputera 0Ah; 1 słowo; część segmentowa adresu okna B w przestrzeni adresowej komputera 0Ch; 2 słowa; daleki wskaźnik do funkcji przełączającej banki 10h; 1 słowo; liczba bajtów, z których złożona jest jedna linia logiczna - linia logiczna może być dłuższa lub równa linii fizycznej (wyświetlanej na ekranie) Poniższe dane są opcjonalne dla trybów VESA, lecz niezbędne dla trybów zdefiniowanych przez producenta karty. 12h; 1 słowo; szerokość ekranu w punktach 14h; 1 słowo; wysokość ekranu w punktach . 16h; 1 bajt; szerokość matrycy znaku w punktach 17h; 1 bajt; wysokość matrycy znaku w punktach I8h; 1 bajt; liczba płatów pamięci 19h; 1 bajt; liczba bitów przypadająca na jeden piksel 1Ah; 1 bajt; liczba banków 1IBh; 1 bajt; organizacja pamięci obrazu: 00h - tekstowa. 01h - jak w trybach graficznych CGA. 02h - 16-kolorowa. 4-platowa. 04h - spakowana. 05h - 0Fh - zarezerwowane dla przyszłego wykorzystania w standardzie VESA. 10h - FFh - do użytku producentów kart graficznych 1Ch; 1 bajt; rozmiar banku w kB 1Dh; 1 bajt; liczba stron (pełnych ekranów) 1Eh; 1 bajt; zarezerwowane Funkcja 4F02h - przełączanie trybów VESA Parametry wejściowe: BX bit 15: 0 - przełączenie trybu powoduje wyzerowanie pamięci obrazu. l - przełączenie trybu bez zerowania pamięci obrazu, bity 14-0 - numer trybu VESA. Wyjście: AH wynik wykonania funkcji: 0h - wykonanie poprawne. 0lh - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany). Uwagi dodatkowe: Numer trybu jest 16-bitowy. Funkcja 4F03h - odczyt bieżącego trybu pracy Parametry wejściowe: - brak - Wyjście: BX bity 14-0 - numer trybu VESA (bez bitu zerowania pamięci obrazu); AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01 h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany). Uwagi dodatkowe: Numer trybu jest 16-bitowy. Funkcja 4F04H - zapamiętanie lub odtwarzanie parametrów karty Parametry wejściowe: DL numer podfunkcji: 00h - wyznaczenie rozmiaru pamięci potrzebnej na bufor stanu, 01 h - zapamiętanie stanu sterownika, 02h - odtworzenie stanu sterownika; ES:BX wskaźnik do bufora stanu dla podfunkcji l i 2; CX określa rodzaj zapisywanych lub odtwarzanych parametrów: bit 3 - stan wszystkich parametrów charakterystycznych dla SVGA, bit 2 - stan rejestrów koloru i rejestrów DAĆ, bit l - stan obszarów danych Video-BIOS, bit 0 - stan rejestrów układów odchylania i taktowania. Wyjście: BX wielkość wymaganego bufora stanu w blokach po 64 bajty (dla podfunkcji 1); AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01 h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany). Uwagi dodatkowe: Funkcja zapamiętuje lub odtwarza zawartość rejestrów karty i obszaru komunikacyjnego BIOS-u. Funkcja 4F05h - podłączenie banku pamięci obrazu lub odczyt numeru podłączonego banku Parametry wejściowe: BH wybór podfunkcj i: 00h - podłączenie banku do okna, 01h - odczyt numeru banku podłączonego do okna; BL wybór okna: 00h - okno A, 01h -okno B; DX numer banku (liczba i numeracja banków zależy od odstępu między nimi). Wyjście: DX numer banku; AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany). Funkcja 4F06h - ustawienie lub odczyt szerokości ekranu wirtualnego Parametry wejściowe: BL wybór podfunkcj i: 00h - ustawienie szerokości ekranu wirtualnego, 0lh - odczyt szerokości ekranu wirtualnego; CX szerokość ekranu wirtualnego w punktach. Wyjście: AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany); BX liczba bajtów przypadających na jedną poziomą linię ekranu wirtualnego; CX szerokość ekranu wirtualnego w punktach; DX maksymalna liczba linii ekranu wirtualnego. Funkcja 4F07H - ustawienie/odczyt lewego górnego rogu ekranu rzeczywistego względem ekranu wirtualnego Parametry wejściowe: BH 00h - wartość zarezerwowana; BL wybór podfunkcji: 00h - ustawienie położenia ekranu rzeczywistego względem ekranu wirtualnego, 01h - odczyt położenia ekranu rzeczywistego względem ekranu wirtualnego; CX numer pierwszej wyświetlanej kolumny (współrzędna X lewej krawędzi ekranu dla podfunkcji 0); DX numer pierwszej wyświetlanej linii (współrzędna Y górnej krawędzi ekranu dla podfunkcji 0). Wyjście: AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany); CX numer pierwszej wyświetlanej kolumny (dla podfunkcji 1); DX numer pierwszego wyświetlanego wiersza (dla podfunkcji 1). Funkcja 4F08h - ustawienie/odczyt liczby bitów odpowiadających barwom podstawowym (w układzie RGB) iv tablicy LUT Parametry wejściowe: BH żądana liczba bitów na składową koloru (R, G lub B dla podfunkcji 0); BL wybór podfunkcji: 00Oh - ustawienie szerokości palety, 01lh - odczyt szerokości palety. Wyjście: AH wynik wykonania funkcji: 00h - wykonanie poprawne, 01h - błąd wykonania; AL 4Fh, jeśli funkcja jest dostępna (VESA BIOS zainstalowany); BH odczytana liczba bitów na składową koloru (R, G lub B dla podfunkcji 0) - dla karty VGA wynosi 6. Przykłady zastosowania funkcji BIOS-u kart graficznych Rozpoznanie typu karty graficznej Podprogram rozpoznaje typ karty graficznej. podaj_typ_sterownika proc mov ah,lah ; numer funkcji BIOS-u sterownika mov al,00h ; odczyt kombinacji sterowników int 10h ret ; rejestr BL zawiera kod aktywnego sterownika ; rejestr BH zawiera kod nieaktywnego sterownika podaj_typ_sterownika endp Parametry wejściowe: - brak - Wyjście: AL jeśli AL * l Ah, to funkcja nie jest zaimplementowana, w przeciwnym przypadku (AL - l Ah); BL kod aktywnego sterownika (patrz poniższa tabela); BH kod nieaktywnego sterownika (patrz poniższa tabela). Kod; Sterownik 00h; brak sterownika (dla sterownika nieaktywnego) 01h; MDA 02h; CGA 04h; EGA kolor 05h; EGA mono 06h; PGC 07h; VGA mono 08h; VGA kolor 0Ah; MCGA z cyfrowym monitorem kolorowym 0Bh; MCGA z analogowym monitorem monochromatycznym 0Ch; MCGA z analogowym monitorem kolorowym 0FFh; sterownik nie rozpoznany Sprawdzenie ilości pamięci zainstalowanej na karcie graficznej Podprogram zwraca ilość pamięci zainstalowanej na karcie graficznej. rozmiar_pamięci proc mov ah,12h ; numer funkcji BIOS-u sterownika mov bl,10h ; numer podfunkcji - pobranie rozmiaru pamięci int10h ret ; rejestr BL zawiera kod rozmiaru pamięci rozmiar_pamięci endp Parametry wejściowe: - brak - Wyjście: BL kod rozmiaru pamięci obrazu: 0 - 64 kB, l - 128 kB, 2- 192 kB, 3 - 256 kB i więcej. Zmiana wyglądu znaku Podprogram zmienia wygląd znaku '@' standardowego zestawu znaków 8x8. zmiana_znaku proc push es push bp mov ax,es mov es,ax mov bp,offset dane ;załadowanie adresu opisu znaku do ES:BP mov ah,llh;numer funkcji BIOS-u sterownika mov al,00h ;numer podfunkcji - definiowanie ;zbioru znaków mov bh,08h ;jeden znak mov bl,0 ;zestaw znaków nr O mov ex,l ;podmieniamy l znak mov dx,word ptr '@' ;podmieniamy znak '@' int lOh pop bp pop es ret dane db 60,126,219,255,255,189,165,36 zmiana_znaku endp Parametry wejściowe: - brak - Wyjście: - brak * * * Rozdział 9. Grafika PC w dobie multimediów W epoce bujnego rozkwitu technik multimedialnych komputer PC, który nie jest w stanie pokazać na swoim monitorze płynnie animowanej sekwencji wideo lub wirtualnych obiektów trójwymiarowych wydaje się być niekompletny. Odbiorcy przyzwyczajeni do jakości obrazów telewizyjnych oczekują tego samego na ekranie PC. Wymyślne nazwy handlowe przeróżnych akceleratorów graficznych mają zachęcić potencjalnych klientów do kupna. Co kryje się za tajemniczo brzmiącymi pojęciami oraz kilka wiodących tendencji w tej dziedzinie zostanie przedstawione Czytelnikowi w tym rozdziale. Same parametry techniczne nowych opracowań nie decydują o powodzeniu produktu na rynku. Konieczne jest uwzględnienie również aspektów ekonomicznych co znajduje naturalnie swoje odbicie w cenie. Z tego względu, mimo iż aktualny stan technologii leży często znacznie wyżej, producenci zmuszeni są do wprowadzania różnorodnych ograniczeń i wybierania kompromisów. Część z tych uproszczeń nie ma w istocie dużego wpływu na jakość postrzeganych obrazów bowiem zmysł wzroku człowieka nie jest kamerą cyfrową i reaguje na barwne obrazy w bardzo specyficzny sposób. Istniejące naturalne bariery (szczególnie te dotyczące szybkości obróbki i prezentacji obiektów trójwymiarowych) stanowią nadal gwarancję, iż komputer klasy PC długo jeszcze nie będzie roboczą stacją graficzną. Całość zagadnień związanych z przetwarzaniem i prezentacją obrazów przez komputer PC można podzielić na dwie grupy tematyczne. Do pierwszej z nich zaliczyć można prezentację połączoną z ewentualną obróbką materiałów, które nie zostały stworzone przez dany komputer a pochodzą z innych źródeł. Do materiałów takich należą wszelkie zdigitalizowane sekwencje wideo (kamery i magnetowidy), odtwarzanie filmów z CD i DVD, sygnały z tunerów telewizyjnych itp. Grupa druga obejmuje swym zasięgiem zestaw zagadnień związanych z syntezą wirtualnego obrazu (w chwili obecnej już prawie wyłącznie 3D) czyli głównie gry komputerowe i różne interakcyjne programy dydaktyczne. Przetwarzanie sekwencji wideo Przetwarzanie obrazów wideo należy jeszcze nadal do jednego z ostatnich bastionów, który skutecznie opiera się przed kompletnym zawładnięciem przez komputery PC. Najskuteczniejszą barierę stanowi objętość opracowywanych danych: jedna sekunda pełnowartościowego sygnału wideo poddana digitalizacji zajmuje około 20 MB pamięci. Mimo szybkiego rozwoju technologii dysków twardych i co za tym idzie stałego przyrostu pojemności, taka ilość informacji nie może być przetwarzana w czasie rzeczywistym przez komputer klasy PC. Analizując stronę fizjologiczną zagadnienia można (podobnie jak w profesjonalnych systemach telewizyjnych) zredukować znaczną część informacji. Z szerokiego pasma sygnału wideo usuwa się te składowe, których obecność w sygnale wideo i tak nie jest dostrzegana przez oko ludzkie. W drugim etapie do akcji wkraczają przemyślne metody kompresji (Indeo i Cinepak). Wszystkie te zabiegi pozwalały, zachowując w miarę przyzwoitą jakość obrazu, na ograniczenie strumienia danych do rozmiarów 500 kB/s. Mimo tak wielkiego stopnia kompresji, technika PC dopiero przed kilku lary dorosła do możliwości prezentacji ruchomych obrazów, a i też nie od razu na całym ekranie. Pierwsze kroki stawiane były w małych okienkach o rozmiarach 352 x 288 pikseli przy szybkości odtwarzania 25 fbs (Frame per Second, obrazów/sekundę). Ogromną zaletą stosowanych technik kompresji obrazu są stosunkowo proste algorytmy dekompresji. Wymagana moc obliczeniowa leży w zakresie procesora klasy 486. Z nastaniem płyty kompaktowej i rozpowszechnieniem popularnych odtwarzaczy propagatorzy techniki wideo na platformie PC poczuli nowy wiatr w żaglach. Nareszcie powstał tani nośnik informacji, na którym można upakować dobre kilkadziesiąt minut filmu nie wspominając o towarzyszącym dźwięku i to wysokiej jakości. Zapały studziła skutecznie prędkość pierwszych czytników CD: średnio 150 kB/s. Ale i na to znalazło się lekarstwo. Opracowana została nowa technika kompresji (MPEG), która zadowala się nawet tą mizerną prędkością transmisji. I jakkolwiek rozkodowywanie takiego sygnału jest i tak o niebo łatwiejsze od algorytmów kompresji, to rym razem problem przerósł możliwości PC: Pentium radzi sobie z nim z trudem, a 486 wcale. Do akcji bowiem wkracza element przetwarzania w czasie rzeczywistym. Czas rozkodowania jednej klatki nie może być przecież dłuższy od 1/25 s bowiem dla wywołania wrażenia płynności obrazu trzeba wyświetlać co najmniej tą minimalną ilość. Dla pokonania powyższych barier nie wystarczy zwykłe zwiększenie mocy obliczeniowej CPU. Natura problemu jest złożona i dotyczy różnych wąskich gardeł tkwiących do dziś w architekturze PC. Dane wideo, ze względu na swoją specyfikę, poddają się ponadto niechętnie przetwarzaniu przy pomocy klasycznych rozkazów maszynowych procesorów pochodnych od x86. Do akcji wkroczyć muszą wyspecjalizowane układy koprocesorów (zwanych też akceleratorami), które zwalniają jednostkę centralną PC z wykonywania zadań, do których w zasadzie nie została powołana. Lokalne przetwarzanie danych w obrębie akceleratora wpływa ponadto korzystnie na zmniejszenie ruchu na magistralach systemowych, których przepustowość jaka by nie była i tak zawsze jest za mała. Sprzętowe wspomaganie funkcji wideo Pod pojęciem akceleratorów wideo należy rozumieć karty graficzne SVGA wzbogacone o dodatkowe moduły sprzętowe. Układy takie lokalizuje się (w odróżnieniu od koproce-sora arytmetycznego) nie w rejonie procesora, ale blisko przetwarzanych danych (pamięci obrazu), czyli na karcie graficznej. Biorą one na siebie fragment procesu dekodowania obrazu wideo, przez co zwalniają jednostkę centralną (CPU) z ogromnej ilości operacji. Odzyskana moc obliczeniowa stawiana jest do dyspozycji systemu operacyjnego a odciążone magistrale systemowe umożliwiają szybszy dostęp do zasobów: pamięci RAM, dysków i peryferii. Sama idea przekazywania coraz to większych uprawnień do sterownika graficznego nie jest przecież nowa. Już od dawna proste formy geometryczne (prostokąty, elipsy itp) kreślą i kolorują sterowniki graficzne a jednostka centralna inicjuje jedynie ten proces zadając niezbędne wartości początkowe(Karty SVGA pracujące w tym trybie noszą też miano akceleratorów 2D). Jeszcze przed erą MPEG pojawiły się pierwsze karty, prekursorzy dzisiejszych akceleratorów, które uwalniały PC ze zmory wideo w formacie znaczka pocztowego. Zastosowane w nich rozwiązania sprzętowe rozciągały obraz na całym ekranie (skalowanie w kierunku x i y). Niektóre brały ponadto na siebie obliczenia związane z konwersją RGB/YUV. Podobnie zbudowane są współczesne akceleratory. Podczas odtwarzania sekwencji wideo (np. pliku w formacie avi z dysku lub płyty kompaktowej) dwa ostatnie etapy procesu dekodowania (konwersja modelu kolorów i skalowanie) przenoszone są do kontrolera graficznego albo do układu scalonego zawierającego RAM-DAC. Konwersja RGB/YUY zapożyczona została z techniki telewizyjnej. Dla jednoznacznego zdefiniowania barwy punktu nie trzeba przekazywać wartości trzech składowych R, G i B (układ współrzędnych RGB), gdyż można, wykorzystać inne układy współrzędnych. W układzie YUV składnik Y reprezentuje luminację punktu a informacja o barwie zawarta jest w elementach U i V. Każdy punkt kolorowy można w każdej chwili przenieść z jednej przestrzeni do drugiej, np. z YUV do RGB: R=Y+1,140V G=Y-0,395U- 0,581 V B=Y+2,032U Dla oka ludzkiego większe znaczenie odgrywa szczegółowa infonnacja o luminancji punktów niż o ich barwie. Jeżeli składnik Y został sprytnie wyizolowany z informacji o kolorach, można sobie pozwolić na pewną redukcję reszty. W tzw. modelu 4:1:1(Częstotliwość próbkowania sygnałów U i V stanowi Y* częstotliwości próbkowania sygnału luminancji Y. W modelu oznaczanym 4:2:0 wspomniany stosunek częstotliwości wynosi 1/2, za to przy kwantyzacji informacji o barwie pomijana jest co druga linia.), składniki U oraz V zajmują jedynie połowę miejsca przewidzianego na Y. Tak więc 4 punkty obrazu w modelu RGB zajmują 16 bajtów a po przeniesieniu do YUV jedynie 6. Taki kompaktowy schemat pamięci obrazu redukuje w dużym stopniu ruch na odcinku kontroler graficzny-pamięć obrazu (średnio o 50 %). Uzyskana tą drogą oszczędność mocy obliczeniowej pozwala na podniesienie rozdzielczości ze 160 x 120 do 320 x 240 punktów. Jak już wcześniej wspomniano, skalowanie (zoom) odtwarzanego obrazu wideo do oryginalnych rozmiarów (Native Size) realizowane jest w akceleratorach poprzez układy sprzętowe. W zależności od stopnia komplikacji i nakładów uzyskuje się różne efekty. Trzeba zdawać sobie sprawę, że operacja skalowania z założenia musi prowadzić do pogorszenia jakości, bowiem wprowadza do oryginalnego obrazu informacje, których nigdy tam nie było. W kierunku pionowym powstają nowe linie, które trzeba równomiernie rozmieścić na ekranie i w dodatku wypełnić inteligentnie jakąś treścią. Każda linia oryginału musi ponadto przyjąć szereg dodatkowych pikseli (skalowanie w kierunku x) o nieobojętnej poniekąd barwie. Istnieją mniej lub bardziej szczęśliwe próby opanowania tego zjawiska. Najprostsze kontrolery pierwszej generacji wstawiały po prostu powielone linie oryginału. Rozciągnięta linia ukośna stawała się dzięki takiemu zabiegowi bardzo „zębata". Dużo lepsze efekty przynosiła interpolacja międzyliniowa (wyliczana i wstawiana jest linia średnia dzieląca dwa oryginały) ale wymaga dodatkowego bufora liniowego. W kierunku poziomym interpoluje się zwykle z kilku sąsiadujących punktów. Układy nowszych generacji interpolowały już zarówno w pionie jak i w poziomie: Vision868 i 968 (s3), Alliance Promotion 3210 (Miro), ALG2302/ALG1301 (dawna Spea) i ARK2000 (Hercules). Interfejs programowy Wykorzystanie wszystkich udogodnień oferowanych przez sprzęt nie było by możliwe bez odpowiedniego interfejsu programowego. Dla potrzeb aplikacji pracujących pod kontrolą systemu Windows 3.x stworzone zostało złącze programowe GDI (Graphics Device Interface). Składało się ono z dostępnych dla programisty zestawów funkcji, które rysowały na ekranie okna, paski przewijania, wszelkie elementy kontrolne i sterujące (Buttonś), napisy i najróżniejsze obiekty graficzne. Funkcje te brały na siebie przydzielanie i zwalnianie pamięci, generowanie komunikatów i obsługę użytkownika, jednym słowem troszczyły się o sprawne funkcjonowanie szaty graficznej Windows, bez konieczności głębokiego wnikania w jego wnętrze. System ten nie znał pojęcia „sekwencja wideo". W początkowej fazie rozwoju tej formy wyrazu treści graficznych programiści byli zmuszeni do przetwarzania każdej klatki obrazu filmowego na mapę bitową i przesyłania jej do GDI. Ta z kolei transportowała ją do sterownika programowego karty graficznej. Droga do wspomagania funkcji wideo została otwarta dopiero dzięki porozumieniu firm Intel i Microsoft, które uzgodniły standard DCI (Display Control Interface). Interfejs ten stworzony został wyłącznie dla potrzeb Windows 3.Ix i w zasadzie tylko tam znalazł swe zastosowanie. Na system ten składały się dwa elementy: • Współpracujący bezpośrednio ze sprzętem (kartą z akceleratorem graficznym) programowy sterownik DCI (DCI-Provider). • Niezależny od sprzętu zarządca DCI (DCI-Manager). Opracowanie sterownika DCI należało do obowiązków producenta karty graficznej. Funkcje udostępniane przez ten sterownik wykorzystywała wyższa warstwa modelu: DCI-Client. Dzięki takiej hierarchii aplikacja wideo zyskiwała bezpośredni dostęp do poszczególnych powierzchni (Surfaces) pamięci karty. Powierzchnie takie mogły należeć do tzw. zakresu widzialnego (Primary Surface) lub do obszaru niewyświetlanego (Off-Screen Surface) gdzie odbywa się właściwe budowanie obrazu oraz różne operacje pomocnicze. Gdy budowany w pamięci obraz był gotów, następowało przełączenie powierzchni (Flip). Przełączenie polegało na prostym przestawieniu wskaźnika adresowego układów odczytujących (RAM-DAC) na nowy obszar, od tej chwili deklarowany jako widzialny. Największe przyspieszenie operacji wideo osiągało się w przypadku obróbki sygnału, którego schemat kodowania pokrywa się z organizacją pamięci karty (np. YUV w trybie 4:1:1). Wówczas to zdekodowane ramki wideo przesyłane były bez zbędnych opóźnień bezpośrednio do okna wideo w pamięci. Z systemu DCI mogły czerpać korzyści nawet zwykłe karty graficzne, bez sprzętowego wspomagania funkcji wideo (o ile producent dostarczył odpowiedni sterownik DCI), bowiem strumień wideo przesyłany był do pamięci karty drogą bezpośrednią a nie okrężną poprzez GDI. Konwersja RGB/YUY realizowana była jednak w tym przypadku konwencjonalnie. Wszystkie obliczenia musiała wykonać jednostka centralna komputera. W pewnej fazie rozwoju DCI doszło do sporu pomiędzy firmami Intel i Microsoft na tle praw autorskich i zastrzeżeń patentowych. Wraz z pojawieniem się na rynku systemu Windows 95, Microsoft wprowadził więc nowy model programowego interfejsu wideo oznaczany mianem DirectDraw. Ze względu na niekompatybilność z funkcjami swego poprzednika, wiele wysiłku włożonego w rozwój złącza DCI musiało pójść na marne. Kolejny etap rozwoju stanowi propagowany przez Microsoft interfejs DirectX, który jest już jednolity dla Windows 95 i Windows NT. DirectX jest pojęciem bardziej ogólnym pod którym ukrywa się już nie tylko DirectDraw ale i inne interfejsy programowe (API): • DirectDraw. Przyspiesza grafikę 2D poprzez udostępnienie całej pamięci sterownika graficznego bądź to dla bezpośredniego dostępu do okna wideo, bądź dla zrealizowania funkcji manipulowania powierzchniami. DirectBD. Jest klasycznym zestawem funkcji zwróconych w stronę obecnych już w tym momencie na rynku sprzętowych akceleratorów 3D. Directlnput. Stanowi bibliotekę funkcji obsługujących obce dla klasycznego PC-ta multimedialne urządzenia wejściowe takie jak: cyfrowe i analogowe manipulatory (Joystick\ układy sterowania symulatorów (lotniczych, samochodowych itp.), pedały, wolanty, hełmy i rękawice systemów przestrzeni wirtualnych (Virtual Reality) itd. DirectSound. Dostęp i ewentualne przyspieszanie pracy kart dźwiękowych, mikserów i wszelkich instrumentów muzycznych. DirectPlay. Oferuje aplikacjom dostęp do modemów i środowisk sieciowych. Format MPEG Zapotrzebowanie na systemy umożliwiające szybkie i tanie rozpowszechnianie sekwencji obrazów ruchomych generowanych bądź przez komputer bądź przez klasyczny sprzęt wideo zawsze było spore. Każdy kto choć trochę otarł się o te zagadnienia (sekwencje wideo w Internecie) skonfrontowany został z masą przeróżnych formatów i systemów. W punkcie tym omówimy pokrótce cechy formatu MPEG (Motion Pictures Expert Group), który zdaniem autora ma on największe szansę na przeobrażenie się w dominujący standard w tej dziedzinie. Kodowanie i dekodowanie danych w tym systemie ma (ze względu na duże zapotrzebowanie na moc obliczeniową) bardzo ścisły związek ze sprzętem. Wiele poruszonych przy tym zagadnień ma charakter uniwersalny i odnosić się może również do innych formatów. MPEG opracowany został przez grupę niezależnych ekspertów i nie jest (jak to się często zdarza) związany z żadnym koncernem komputerowym. W krótkim czasie stał się standardem w dziedzinie cyfrowego przesyłania i przechowywania obrazów ruchomych. Wyprzedza on wszystkie poprzednio stosowane formaty (Indeo, Cinepak, QuickTime) zarówno pod względem jakości jak i współczynnika kompresji. Jakość obrazu porównywalna jest z poziomem osiąganym przez powszechnie stosowany magnetowid standardu VHS a towarzyszący dźwięk sprawia wrażenie jakby pochodził z płyty kompaktowej. Istota kompresji polega w tym wypadku na zapamiętywaniu nie tyle samego obrazu ile zachodzących w nim zmian. Algorytm przeszukuje dłuższe sekwencje filmu i dzieli je na partie, w obrębie których zmiany w obrazie są stosunkowo niewielkie. Na ekranie pozostają przecież na ogół te same obiekty, co najwyżej przesunięte lub o lekko zmienionych wymiarach. Zapamiętywane są więc tylko te zmiany a nie stale ta sama powta-rzająca się baza. Ten sposób podejścia do zagadnienia sprawia, iż algorytm kompresji MPEG nosi też często miano „kompresji delta", tzn. iż bazuje na małych różnicach pomiędzy kolejnymi klatkami. Mimo wielu korzyści przynoszonych przez kodowanie jedynie samych zmian, niezbędne jest jednak również zapamiętywanie co pewien czas całej kompletnej sceny, tzw. ramki kluczowej (Key Frame). Ramki takie określa się w technice cyfrowej obróbki często mianem I-Frames. Odtwarzanie sygnału zakodowanego przez MPEG nie musi rozpoczynać się od początku, a często zależy nam na szybkim dostępie do określonego punku wewnątrz sekwencji (na przykład podczas montażu filmu). Obecność ramek kluczowych przyspiesza wówczas znacznie rozkodowanie i obróbkę. Jądro systemu kodowania bazuje (podobnie jak JPEG i wiele innych standardów) na dyskretnej transformacji kosinusowej (DCT). Zgodnie z teorią Fouriera każdy przebieg można przedstawić jako sumę nakładających się na siebie fal sinusoidalnych o różnych częstotliwościach, amplitudach i fazach. Rozkład powierzchniowy punktów świetlnych w obrazie (pikseli) znajduje naturalnie odbicie w takiej analizie Fouriera: duże jednorodne powierzchnie produkują składniki o małej częstotliwości a za drobne skomplikowane detale odpowiedzialne są przebiegi wysokoczęstotliwościowe. Przeważająca większość informacji wizualnej zwykłego równomiernie rozłożonego obrazu rozłożona jest w zakresie składników o małej i średniej częstotliwości. Okazuje się, że pozbawienie obrazu składników Fouriera o najwyższych częstotliwościach (eliminacja najdrobniejszych szczegółów) tylko w niewielkim stopniu wpływa na pogorszenie jego jakości (ocenianej okiem ludzkim). Kolejnym krokiem w redukcji ilości informacji zawartej w obrazie jest pewne okrojenie go z barwy szczegółów. Znów przychodzi z pomocą fizjologiczna strona zagadnienia: zmysł wzroku bardziej jest wrażliwy na bodźce typu kontrast-jaskrawość niż na szczegółową strukturę barwną. Można więc np. uśrednić kolor dwóch sąsiadujących ze sobą punktów i nadać im pewien kolor wypadkowy. Potrzebna do zapamiętania ilość informacji znacznie maleje po takiej operacji, a jakość obrazu niewiele na tym ucierpi. W swej podstawowej formie strumień MPEG ma następujące cechy: • Format klasyczny SIF: 352 x 288 punktów przy 25 fps (w systemie PAL) • Format uproszczony QSIF: 176 x 144 punktów przy 25 fps MPEG jest optymalny dla producentów materiałów edukacyjnych, informacyjnych i prezentacji. Mimo że wnosi on pewne straty do jakości materiału źródłowego, opiera się na nim szereg istniejących już systemów informacyjnych. W swej zwartej formie zawierać może średniej długości Video-Clip wraz z towarzyszącym dźwiękiem o wysokiej jakości. Warto nadmienić, iż algorytm kompresji ma wbudowane mechanizmy gwarantujące synchronizację obrazu i dźwięku. Sprawa ta nie jest bynajmniej oczywista w przypadku wielu innych formatów. Małe rozmiary plików doskonale nadają się do zastosowań w obrębie wszelkich sieci (np. Internet) i skrzynek pocztowych (Mail-Box), gdzie czas przesyłania danych ma wyraźny aspekt ekonomiczny. Warto również nadmienić o częstym wykorzystywaniu MPEG przy archiwizacji danych. Dekodowanie Dekodowanie sygnału MPEG jest z punktu widzenia użytkownika sprawą stosunkowo prostą. Występujące na rynku w chwili obecnej produkty można zaliczyć do jednej z trzech klas: • Rozwiązania czysto programowe. Komputery PC bazujące na procesorach klasy Pentium odtwarzają pliki w tym formacie bez konieczności angażowania dodatkowego sprzętu; na ogół wystarcza MPEG-Player wchodzący w skład zestawu oprogramowania zwykłej karty graficznej. Jakość uzyskiwanego tą drogą obrazu jest ograniczona a brak nadwyżki mocy obliczeniowej może powodować nieregularność projekcji (Franie Jitter). Średnia liczba odtwarzanych ramek jest wówczas wprawdzie stosunkowo wysoka (rzędu 25 fps), ale nierównomiernie rozłożona w czasie. Szczególnie daje się we znaki jednoczesne dekodowanie dźwięku w trybie stereo. Sekwencje z „ciszą na planie" odtwarzane są zwykle z lepszą jakością. Obciążenie procesora ponad miarę stanowi niestety często rozciągnięcie okienka wideo na cały ekran. Sytuacja taka (Zoom) wymusza konieczność wyznaczania dodatkowych, nie istniejących w oryginale pikseli metodą ekstrapolacji. Metody uśredniania są przeróżne: od prostego dublowania pikseli do wyznaczania wartości średnich z rozległego otoczenia punktu. Procedury te mogą działać zarówno w pionie jak i w poziomie. Algorytmy uśredniające nazywane są też często filtrami. Im więcej złożonych funkcji filtrujących ma włączony odtwarzacz, tym bardziej spada częstotliwość projekcji. Strumień danych formatu MPEG-1 jest stosunkowo wąski. Nowe wyzwanie stawiają przed systemami odtwarzania na bazie PC dyski DVD. Chęć przetwarzania w systemach o tak szerokim paśmie nakłada naturalnie jeszcze większe wymagania na sprzęt. Lawina danych płynąca strumieniem MPEG-2 kładzie jak na razie na kolana prawie każdy odtwarzacz programowy działający wyłącznie w oparciu o procesor systemowy, chyba że dysponujemy bardzo mocnym i szybkim procesorem najnowszej generacji (moc obliczeniowa rzędu Pentium II 400). Procesorom Penium, mimo rozszerzeń multimedialnych MMX, nie udaje się uzyskać więcej niż 16 klatek na sekundę. Poprawę tego stanu rzeczy obiecuje nowa technika wspomagania, chociaż trudno ją zaliczyć do rozwiązań czysto programowych. Zakłada ona w większym niż dotychczas stopniu włączenie układu kontrolera grafiki w proces dekodowania. Przyjmuje się, iż kontroler przejmie funkcję odławiania ze strumienia danych MPEG ramek I-Frame, zlokalizowanych średnio co 8 - 16 klatek. W ramkach tych zawarte są pełne kadry sekwencji a pomiędzy nimi zapisuje się jedynie zmiany dynamiczne obrazu (B-Frame, P-Frame). Pentium oblicza i dostarcza kontrolerowi te dane w formie wektorów różnicowych. Wbudowany w układ kontrolera system regeneracji (Motion Com-pensation) sumuje ramki I z wektorami różnicowymi i buduje na tej podstawie kolejne pełne klatki obrazu. Omawiany system wspomagania wbudowany jest w wiele akceleratorów graficznych najnowszej generacji (np. Permedia-3, S3-Savage, układy ATI począwszy od Rage-II), co pozwala na projekcję sekwencji DVD z prędkością 20 fps, przy czym stopień obciążenia procesora jest dużo mniejszy niż w dotychczasowych rozwiązaniach. Koprocesor montowany na karcie S-VGA. Układ akceleratora znajduje się na dodatkowym module, który umieszcza się na specjalnie do tego dostosowanej karcie graficznej (zwykle tego samego producenta, produkty innych firm nie pasują do siebie). Moduły wspomagające dysponują najczęściej gniazdem wyprowadzającym na zewnątrz sygnały Audio/Video. System taki jest szczególnie przydatny dla zwolenników odtwarzania płyt kompaktowych. Wspomniane moduły wspomagające budowane były przeważnie w oparciu o układ Scenic/MX2 (86C445) współpracujący z chipem Trio64V+ (86C769). Drugi z nich integrował w sobie oprócz klasycznych funkcji karty SVGA również akcelerator graficzny i przetwornik RAM-DAC. Często spotykany był również scalony układ dekodera TMYP9550 opracowany przez firmę Trident. Zawierał on sprzętowy zoom (dla odtwarzania sygnału MPEG na całym ekranie) wraz z towarzyszącymi mu filtrami i przetwornikami skalującymi. Wyspecjalizowane karty wspomagające. W rozwiązaniu tym, PC zostaje wyposażony w dodatkową kartę wspomagającą. Zdekodowany sygnał wyjściowy może być wprowadzany do karty SVGA bądź poprzez złącze rozszerzające (Feature Connector) bądź przepuszczany do monitora (Analog Loop Thni). Oprogramowanie dołączone do takiego systemu otwiera na ekranie oddzielne okno, w którym prezentowany jest zdekodowany obraz. Nie jest to najszczęśliwsze rozwiązanie, bowiem ogranicza zwykle tryb pracy monitora. Jeżeli nawet zestaw monitor-VGA mogą współpracować w rozdzielczości 1280 x 1024 przy częstotliwości 80 Hz to dekoder wymusza tryb 800 x 600 przy 72 Hz. Istnieje na szczęście metoda ominięcia tego dylematu - dekoder przesyła wyniki swej pracy do karty SVGA magistralą PCI. Stosowana karta graficzna musi przy tym spełniać (w zależności od rozmiarów okna, ilości kolorów i rozdzielczości) pewne wymagania, między innymi odnośnie szybkości. Im większe okno (w szczególności pełny ekran) i wyższy tryb kolorowy, tym większe obciążenie dla pamięci karty. Może się więc zdarzyć, że system nie jest w stanie nadążyć i pojawiają się charakterystyczne nieciągłości. Rozwiązania sprzętowe zainstalowane na komputerze klasy 486 DX100 gwarantują w zasadzie odtwarzanie obrazu w tempie 25 fps przy zachowaniu maksymalnej jakości dźwięku. Powiększanie oryginalnego okna wideo lub wręcz rozciąganie na cały ekran jest również wspomagane sprzętowo. Metody dorabiania brakujących linii i pikseli są podobnie jak w przypadku rozwiązań sprzętowych różne. W zależności od nakładów oczekiwać można zróżnicowanych efektów. Proste układy typu S3-Tio dublują kolejne linii przez co ukośne krawędzie obiektów wzbogacane są o charakterystyczne uzębienie. Interpolacja budująca linie pośrednie na bazie sąsiadów daje wspaniałe efekty ale podnosi koszty scalonych kontrolerów. Kodowanie Tworzenie pliku MPEG jest procesem dużo bardziej skomplikowanych niż jego rozkodowanie. Najczęściej materiałem wejściowym jest sekwencja wideo z kamery lub innego źródła podobnego typu. Dysponować musimy więc kartą graficzną ze złączem wideo, która zapisze na dysku ten materiał (digitalizacja), na razie w klasycznej (nie skompresowanej) choć już cyfrowej postaci. Plik taki może już teraz być przejęty przez program kodujący do postaci MPEG. W prostych zastosowaniach multimedialnych posługujemy się najczęściej formatem MPEG-1, który przy maksymalnej rozdzielczości 352 x 288 punktów pompuje strumień danych w tempie 170 kB/s (120-140 kB/s dla obrazu i 30 kB/s dla dźwięku). Strumień taki dostarczy podczas odtwarzania bez trudu każdy prosty czytnik płyt CD-ROM. Dla potrzeb bardziej wymagających zastosowań zdefiniowany został format MPEG-2 pracujący na strumieniu od 500 kB/s wzwyż. Jakość obrazu sięga w tym przypadku zakresu leżącego w przedziale między S-VHS a HDTV. Warto zdawać sobie sprawę, iż kodowanie (nawet jeśli jest to wyłącznie MPEG-1) bez wspomagania sprzętowego jest niezmiernie czasochłonne. W przeliczeniu na moc obliczeniową procesora Pentium 166 należy liczyć się ze współczynnikiem 40 - 80, tzn. zakodowanie l sekundy produktu finalnego pochłania około 40 - 80 s czasu komputera. Należy również zwrócić uwagę na duże zapotrzebowanie na wolną przestrzeń na dysku twardym. Programy kodujące oczekują materiału wyjściowego najczęściej w formie pliku M-JPEG lub AVI. Pliki takie generują karty do obróbki sygnału wideo (Video Grabber) oraz wiele programów. Warto w tym miejscu nadmienić o drobnej kolizji wymiarów rastrów punktowych. Większość digitalizerów przetwarza obraz w formacie PAL do rozmiaru 384 x 288 punktów. Standard MPEG przewiduje jednak 352 x 288. Programy kodujące radzą sobie z tą różnicą 32 punktów na przeróżne sposoby: • Przeskalowanie obrazu zmienia naturalny stosunek wysokości do szerokości, okręgi stają się elipsami a postacie przechodzą kurację odchudzającą. • Przeskalowanie obrazu z zachowaniem stosunku wysokości do szerokości powoduje pojawienie się czarnych pasków na górze i dole ekranu. • Skalowanie symetryczne z naruszeniem szerokości i wysokości prowadzi do wytworzenia czarnej ramki wokół obrazu. • Obustronne, symetryczne obcięcie nadmiarowych 16 punktów wydaje się być optymalnym rozwiązaniem; niestety często aktywacja tej funkcji (Cropping) powoduje obcięcie jednostronne o 32 punkty. Kodery akceptują też często pojedyncze obrazy w formie map bitowych (np. PCX lub GIF). Podać je należy wtedy w formie kolejno ponumerowanych plików lub umieścić ich nazwy w specjalnym skrypcie. Rozmiary map bitowych muszą na ogół spełniać pewne wymagania; np. nie mogą przekraczać rozmiarów 768 x 576. Format MPEG integruje obrazy kolorowe w trybie 24 bitów na kolor. Niektóre kodery wyposażone są w funkcje regulacji strumienia wyjściowego. Można więc zażądać by produkt wyjściowy rozpakowywał się do strumienia o określonej szerokości, niekoniecznie 150 kB/s. Typowe oferowane szerokości leżą w przedziale 5 - 500 kB/s (Wybierając wielkość poniżej 150 kB/s, decydujemy się na obniżenie jakości.). Towarzyszący dźwięk, o ile nie jest już wkomponowany w plik źródłowy można podać w formie dodatkowego pliku WAV. MPEG nie gwarantuje jednak w tym wypadku automatycznej synchronizacji obrazu i dźwięku chociaż zwykle jest możliwa ręczna korekta ustanawiająca zbieżność. Większość koderów dopuszcza wszelkie manipulacje na ścieżkach dźwiękowych: mono, stereo, dwa kanały niezależne, zamiana kanałów itp. Dużo szybciej i bardziej komfortowo przebiega proces kompresji z zastosowaniem specjalistycznych układów współpracujących z magistralą PCI. Karty tego typu na ogół nie wymagają jakiegokolwiek połączenia z kartą VGA a transport danych przebiega magistralą PCI w trybie BUS-MASTER (do tego w końcu została opracowana). Oferowane jest również zwykle bezpośrednie wejście dla sygnału dźwiękowego oraz wideo (S-Video, FBAS). Przebieg procesu kompresji może być na bieżąco kontrolowany. System dostarcza wyrywkowo w oddzielnym oknie (Preview Window) próbki obrazu (np. jedną na 10 klatek) a dźwięk może być doprowadzony do zainstalowanej w komputerze karty dźwiękowej. W przeciwieństwie do opisywanych wcześniej koderów programowych (bez wspomagania sprzętowego) zapotrzebowanie na dodatkową pamięć dyskową jest niewielkie. Wejściowy plik AVI przetwarzany jest również znacznie szybciej ale też nie w czasie rzeczywistym. Na jedną sekundę materiału wejściowego trzeba liczyć 2-3 sekund czasu przetwarzania (Pentium 166). Maksymalny strumień osiągać może 1,25 MB/s ale nie należy przesadzać z „podkręcaniem śruby" jeśli wynik kompresji przekazywany jest w formie CD-ROM, bowiem zakodowana sekwencja będzie czytelna wyłącznie przez szybkie odtwarzacze CD-ROM (w tym wypadku co najmniej 20-krotne). Przetwarzanie scenerii 3D Możliwość podziwiania na ekranie monitora obiektów w formie 3D była do niedawna zarezerwowana wyłącznie dla użytkowników programów typu CAD uruchamianych na silnych stacjach graficznych. Potrzeba symulacji płynnego ruchu nie jest w tym przypadku zbyt paląca. Dla potrzeb CAD wystarczyło zwykle jeśli obiekt można było dowolnie obracać i przesuwać. Częstotliwość projekcji leży w takim wypadku zakresie 5 fps. Dużo ważniejsza jest natomiast wysoka dokładność, na potrzeby której przeznacza się znaczna część mocy obliczeniowej. Bryły 3D przedstawiane były w programach tego typu na ogół jako modele siatkowe, co potęgowało wrażenie 3D. Powierzchnia zew-nętrzna bryły była jednorodna a starsze wersje programów nie zawsze uwzględniały nawet oświetlenie( Aktualne wersje oszałamiają użytkownika bogactwem funkcji: cieniowanie, mapowanie, różnemodele oświetlenia). Wśród profesjonalnych użytkowników CAD utrwalił się pogląd, iż próby przeniesienia tych aplikacji na platformę komputerów PC oznaczają w najlepszym razie inwestycje w kartę graficzną droższą od całej reszty zestawu. Ogromny postęp, który dokonał się w ostatnim okresie w dziedzinie akceleratorów graficznych i procesorów oraz stała modernizacja samej architektury PC pozwalają jednak na weryfikację takich poglądów. Wiecznie nienasycony rynek użytkowników gier komputerowych stanowi główny motor postępu w tej dziedzinie. Ostatnio dołączają do nich pierwsze nieśmiałe adaptacje profesjonalnych symulatorów osadzające użytkownika w mniej lub bardziej wiarygodnym sztucznym świecie (Virtual Reality). Zapotrzebowanie na moc obliczeniową przewyższa tu jeszcze nadal możliwości oferowane przez technikę. Wymagana prędkość wyświetlania sięga w profesjonalnych systemach VR zakresu 100 fps. Ponieważ projekcja odbywa się tutaj z dwóch projektorów (na lewe i prawe oko oddzielnie) faktyczna prędkość przetwarzania jest dwukrotnie większa. Dla potrzeb zwykłego użytkownika wystarcza na razie animacja z prędkością powyżej 25 fps, poniżej której zatraca się powoli subiektywne odczucie płynności ruchów. Szybkie gry interakcyjne podnoszą poprzeczkę do wysokości około 60 fps, bowiem odgrywa w nich rolę czas reakcji użytkownika mierzony jak by nie było ułamkach sekund. Rozdzielczość obrazu 3D przekroczyła już barierę 800 x 600 i nadal rośnie. Powyższe parametry projekcji nie stanowią żadnego problemu dla współczesnych akceleratorów pod warunkiem, iż wyświetlana kompozycja obiektów 3D nie jest zbyt szczegółowa a horyzont nie sięga zbyt daleko (głębia scenerii). To co różni produkty dobre od złych to możliwości dodatkowe poprawiające stopień wiarygodności scenerii: uwzględnienie oświetlenia, efektów specjalnych (rozbłysków, odblasków) i atmosferycznych (mgła), praca z cieniem, bogactwo tekstur o wysokiej rozdzielczości oraz skuteczne eliminacje zniekształceń perspektywicznych i innych. Niektóre akceleratory najnowszej generacji pracują w systemach równoległych dublując cały potok przetwarzający (Dud 3D-Pipeline) lub przynajmniej procesor teksturujący (Dual Texture Engine). Dla zrozumienie tych i innych, często tajemniczo brzmiących pojęć, wymagana jest pewna znajomość zasad konstrukcji i przetwarzania obiektów 3D. Tym właśnie zagadnieniom poświęcona jest dalsza część tego rozdziału. Schemat przetwarzania obiektów 3D Obiekty 3D stanowią pewien fragment przestrzeni ograniczonej powierzchniami o różnym stopniu komplikacji. Jakkolwiek każda taka powierzchnia da się, bez względu na stopień komplikacji, jednoznacznie zdefiniować przy pomocy równań matematycznych odpowiedniego rzędu, ich przetwarzanie pochłonęło by całą dostępną moc obliczeniową. Podobnie jak wiele innych problemów i ten daje się uprościć poprzez przybliżenie, którego dokładność można regulować w miarę potrzeb i możliwości. Uproszczenie polega na rozłożeniu każdej z takich powierzchni na odpowiednio dużą (zależną od stopnia dokładności) liczbę wielokątów płaskich. Najprostszym z wielokątów jest oczywiście trójkąt i ten właśnie używany do wspomnianej aproksymacji. Dowolnie skomplikowana bryła da się zawsze rozłożyć na takie trójkąty. W zależności od stopnia komplikacji i wymaganej dokładności trójkątów takich jest mniej lub więcej: sześcian ma ich 12 a bardzo skomplikowany obiekt w grach komputerowych nawet wiele tysięcy. Przedstawienie takie ma ogromną zaletę: każdy z wierzchołków trójkąta jest jednoznacznie zawieszony w przestrzeni przy pomocy trójki współrzędnych (x, y, z). Cały oT)iekt 3D przechowywany jest w spójnym fragmencie pamięci a wszelkie na nim operacje (przemieszczenie, obrót, skalowanie itp.) sprowadzają się do rachunku macierzowego. Algorytm przesunięcia takiego obiektu jest stosunkowo prosty i da się zapisać w kilku linijkach kodu źródłowego. Prostota algorytmu nie oznacza bynajmniej szybkości działania. W przełożeniu na język maszynowy rachunki takie są bardzo pracochłonne bowiem mnożenie macierzy to cały szereg operacji mnożenia i dodawania. Manipulacja obiektami 3D to tylko skromny wycinek pracy jaką trzeba włożyć w to by widziany na ekranie obraz mógł zostać być uznany za zbliżony do rzeczywistości Rozłożona na elementarne trójkąty bryła przechodzi skomplikowany proces przekształceń nazywany potokiem przetwarzania 3D. Rys.9.6. Potok przetwarzania danych. User <-> Aplication ->API -> Geometry Engine -> Rendering Fngine -> Frame Buffer -> RAMDC -> Monitor Ogólna koncepcja scenerii narzucana jest przez aplikację i ewentualnie modelowana zachowaniem użytkownika. Przełożenie tych żądań na język niższego poziomu odbywa się w warstwie API, która stanowi pewien pomost pomiędzy oprogramowaniem użytkowym a sprzętem. W następnym etapie do akcji przystępuje procesor geometryczny (Geometry Engine), który rozmieszcza obiekty na ekranie oraz dba o ich aktualne położenie i rozmiary. Po rozłożeniu na wspomniane wcześniej trójkąty elementarne, oddaje je do dalszego przetwarzania już na poziomie punktów stanowiących wnętrze trójkąta (pikseli) do procesora rasteryżującego (Rendering Engine). Obliczone punkty obrazu umieszczane są w pamięci karty graficznej (Frame Buffer) skąd odczytywane są przez przetwornik (RAM-DAC) i wyświetlane na monitorze. Poszczególne etapy przetwarzania omówione zostaną oddzielnie w dalszych punktach. API Aplikacje przetwarzające obiekty 3D odwołują się do sprzętu najczęściej poprzez zestaw pewnych funkcji ujętych w biblioteki. Funkcje biblioteczne to metody operujące na obiektach 3D. Typowe operacje to formowanie pojedynczych obiektów, łączenie ich w grupy, manipulacje w przestrzeni oraz zagadnienia związane z samą wizualizacją (np. oświetlenie). Powyższy zestaw funkcji wraz z definicjami formatów danych stanowi interfejs API (Application Programming Interface) oszczędzający programistom znaczną część pracy. Odsunięcie spraw sprzętowych od programowych sprzyja swobodzie myślenia. Producent karty graficznej (akceleratora) wyposażają w biblioteki. Są one dostępne dla różnych platform sprzętowych i umożliwiają przez to łatwe przenoszenie oprogramowania. Oto przykłady klasycznych API: • GKS (Grafisches Kernsystem). Wprowadzona do niemieckich norm ISO i DIN w roku 1986, zaprojektowana początkowo dla potrzeb obiektów 2D została poszerzona o funkcje trójwymiarowe (GKS-3D). • PHIGS (Programmers Hierarchical Interactive Graphics System). Stanowi rozwinięcie GKS o interakcyjne funkcje GUI. W dalszym etapie uzupełniona do postaci PHIGS-PLUS (PHIGS-Plus Lumiere und Surfaces) oferuje optymalizację cieniowania. • GL (Graphics Libr ary). Niezależnie od rozwoju na rynku europejskim w USA zostaje opracowana dla potrzeb najpopularniejszych tam silnych stacji graficznych (Silicon Graphics Workstations) biblioteka GL. Zalety tej biblioteki zostały docenione również przez wyznawców innych platform sprzętowych co doprowadziło do uzgodnienia szerszego standardu OpenGL (obecnie już wkomponowany w struktury Windows NT). W ślad za tym rozwinęły się dodatkowe narzędzia wspomagające (Open Inventory) wraz z własnym językiem programowania VRML (Virtual Reality Modeling Language). W chwili obecnej sterowniki bazujące na interfejsie OIL (Open Inventor Library) dołączane są przeważnie do wysokiej klasy akceleratorów 3D. W dobie dominacji Internetu język VRML stał się nieformalnym standardem w dziedzinie przekazu ruchomych obiektów 3 D. SGL biblioteka graficzna PowerVR. Biblioteka dopasowana jest do układów PowerVR. Opiera się na modelu matematycznym określanym mianem „infinite planes", gdzie obiekty modeluje się jako wycinki przestrzeni ograniczone pół-przestrzeniami i płaszczyznami. DirectSD Microsoft Windows 95. Stanowi część ogólnego systemu DirectX. Firma Microsoft sukcesywnie wprowadza na rynek kolejne wersje tego interfejsu. Inne biblioteki. Do grupy tej zaliczyć można opracowania innych firm mocno zaangażowanych w zastosowania 3D. Pod dachem firmy Autodesk powstała biblioteka HOOPS (Hierarchical Object Oriented Pictitre System). Również Spea stworzyła swój własny standard nazwany SP3D. Nowością jest też opracowywany wspólnie przez SGI i Sun biblioteka CosmoGL (głównie dla potrzeb 3D-Web) Geometry Engine Znaczną część potoku przetwarzającego 3D stanowią operacje geometryczne. Elementy wirtualnej scenerii muszą zostać usytuowane na właściwym miejscu w trójwymiarowej przestrzeni a cały obraz musi zostać rzucony na dwuwymiarową płaszczyznę ekranu. Uwzględnia się przy tym naturalnie położenie obserwatora oraz źródeł światła, co pociąga za sobą całą maszynerię obliczeniową związaną z oświetleniem. Z punktu widzenia matematyki, operacje geometryczne sprowadzają się do różnorodnych manipulacji na współrzędnych punktów. Jakkolwiek przyjęło się w tym momencie mówić o przetwarzaniu przez procesor geometryczny (Geometry Engine) nie wolno zapominać, iż obliczeń tych dokonuje nadal jednostka centralna komputera (CPU), bowiem nawet akceleratory najnowszej generacji (Mowa tu oczywiście o układach przeznaczonych na rynek masowy. Istnieją naturalnie akceleratory 3D do zastosować profesjonalnych, które przejmują od jednostki centralnej również obliczenia geometrii. Koprocesory tego typu pracują zwykle w arytmetyce zmiennoprzecinkowej o zwiększonej precyzji a dokładność przeprowadzanych obliczeń przewyższa możliwości oferowane przez CPU.) troszczą się jedynie o rasteryzację pojedynczych trójkątów i umieszczenie ich w pamięci karty graficznej. CPU musi więc przygotować parametry wierzchołków trójkątów i przekazać je do dalszego przetwarzania (już w obrębie akceleratora 3D na karcie graficznej). Do obowiązków procesora geometrycznego należą więc następujące operacje: Tłumaczenie opisu środowiska W pierwszym kroku procesor analizuje opis scenerii 3D. Sceneria to zestaw obiektów 3D takich jak budynki, pojazdy itd. podawany w języku wyższego poziomu. Efektem końcowym jest tej fazy przetwarzania jest rozbicie obiektów na pojedyncze trójkąty elementarne. Oświetlenie i tekstura Aby sceneria sprawiała wrażenie naturalnej trzeba uwzględniać wpływ źródeł światła. Dla każdego z trójkątów określa się więc kierunek i typ oświetlenia oraz przypisuje pewną teksturę. Obliczenia barw obiektów oświetlanych jest skomplikowane bowiem wypadkowa zależy od barwy własnej podłoża i od barwy światła padającego na nią. Zwykle przyjmuje się pewne modele matematyczne (np. model Phong'a) upraszające nieco to zagadnienie. Dokładne określanie barwy wypadkowej dla każdego piksela oddzielnie pochłaniałoby zbyt wiele mocy obliczeniowej. Dla uproszczenia obliczeń dokonuje się dla narożników trójkątów. Przekształcenia geometryczne Przekształcenia geometryczne to wszelkie zmiany w układzie scenerii (przesunięcia i obroty obiektów oraz zmiany ich rozmiarów) obserwowane z punku widzenia domniemanego obserwatora. Zmianie może ulegać zarówno sama scena jak i również położenie obserwatora. Operacje te sprowadzają się do rachunków macierzowych i wektorowych. Każdy narożnik trójkąta trzeba przemnożyć przez macierz [4x4] i to w arytmetyce zmiennoprzecinkowej (FP). Rachunek wektorowy nie jest skomplikowany ale czasochłonny. Składa się na niego szereg następujących po sobie mnożeń i dodawań (w tym wypadku 16). Aby przekonać się jak łatwo przy tym sięgnąć kresu rezerw mocy obliczeniowej wystarczy przeanalizować prosty przykład. Sceneria rozłożona na 2 000 trójkątów to 6 000 wierzchołków. Aby zagwarantować prędkość animacji powyżej 30 fps należy przeprowadzić co najmniej 2 880 000 operacji zmiennoprzecinkowych na sekundę. Dla porównania, wydajność jednostki FP procesora Pentium wynosiła około 4 milionów mnożeń na sekundę. Strefa widoczności W wyniku transformacji scenerii (przesunięcia obiektów) część trójkątów (lub ich fragmentów) znika z pola widzenia. Pole widzenia wyznaczane jest przez ściany boczne tzw. piramidy widoczności, u wierzchołka której umieszczony jest obserwator. Procesor geometryczny nie musi się zajmować trójkątami, które w całości znalazły się poza piramidą. Kłopot sprawiają te, wychodzące na zewnątrz trójkąty, których fragmenty znajdują się w jej wnętrzu. Muszą one zostać obcięte (Clipping) na granicy ścian piramidy. W tym celu procesor geometryczny oblicza najpierw współrzędne punktów przecięcia trójkąta z płaszczyznami ścian. Atrybuty tych nowych punktów (tekstura, kolor) przejmowane są dla uproszczenia od starych wierzchołków leżących już poza piramidą. Mamy teraz do czynienia ze złożonym wielokątem (rozpiętym pomiędzy czterema punktami), który musi zostać rozłożony na trójkąty elementarne. Przekazanie parametrów do jednostki rasteryzującej Gdy wszystkie powyższe kroki zostały przeprowadzone, procesor przechodzi do projekcji trójwymiarowej przestrzeni na płaszczyznę dwuwymiarową. Uwzględniane są przy tym niezbędne skróty perspektywiczne oraz rozmiary obrazu na ekranie. Dalszy etap przetwarzania odbywa się już w procesorze rasteryżującym (Rendering Engine) i odnosi się do poszczególnych punktów we wnętrzu trójkąta. W danym cyklu opracowywany jest tylko jeden trójkąt a procesor rasteryzujący nie dysponuje żadnymi informacjami odnoszącymi się do całej scenerii. Procesor geometryczny przekazuje wyniki swoich obliczeń w formie pakietu zawierającego współrzędne i parametry wierzchołków jednego z trójkątów. Rendering Engine Dalszy ciąg potoku przetwarzania 3D odbywa się pod kontrolą procesora rasteryzują-cego. Rasteryzacja (Polygon Rendering) polega na obliczeniu (zwykle w formie składowych RGB) ostatecznego koloru każdego z punktów wewnętrznych przetwarzanego w danym momencie trójkąta. Zanim zostaną ustalone definitywne wartości tych składowych, punkt przechodzi przez szereg etapów uwzględniających różne czynniki modyfikujące takie jak np. teksturowanie lub efekty atmosferyczne i specjalne. W końcowej fazie, po przejściu całego cyklu przetwarzania przez procesor rasteryzujący, do pamięci obrazu zapisywany jest pojedynczy punkt (piksel) o pewnych wypadkowych składowych kolorów (RGB). W momencie skompletowania wszystkich pikseli, pamięć obrazu wyświetlana jest na ekranie. Procesor rasteryzujący przejmuje od procesora geometrycznego jako dane wstępne zestaw parametrów przypisywany każdemu z wierzchołków trójkąta. Poniższy zestaw parametrów przekazywany jest więc trzykrotnie, dla każdego wierzchołka oddzielnie: • Współrzędne położenia wierzchołka w przestrzeni trójwymiarowej (x, y, z), gdzie z oznacza odległość punktu od płaszczyzny obserwacji, mierzoną w kierunku od obserwatora. • Odniesienie do współrzędnych tekstury (u, v), której wzór pokrywać ma dany trójkąt. • Barwę wierzchołka rozpisaną na elementy składowe R, G, B. • Informacja o stopniu przezroczystości powierzchni (tzw. współczynnik a). Ze względów oszczędnościowych a jest zwykle wspólne dla wszystkich trzech wierzchołków. Stopniowa zmiana tego współczynnika (po każdym obliczonym obrazie) pozwala na delikatne wymiksowanie trójkąta ze scenerii. • Parametr korekcyjny skrótu perspektywicznego (w). Korekcja taka staje się niezbędna dla niektórych trójkątów, które leżą w płaszczyznach znacznie odchylonych od powierzchni ekranu. Współczynnik w jest poza tym często używany w zastępstwie współrzędnej z, bowiem gwarantuje (mimo uwzględnienia nieliniowego skrótu perspektywicznego) liniowy rozkład wartości w buforach przechowujących informację o odległości punku od obserwatora. Zakres zadań spoczywających na procesorze rasteryzującym jest stosunkowo rozległy. Ilość niezbędnych do przeprowadzenia obliczeń jest ogromna i zależy od stopnia komplikacji algorytmów. Niektóre zagadnienia dają się co prawda uprościć poprzez przybliżenia i interpolacje ale i tak obowiązuje generalna zasada, że im bardziej skomplikowane modele matematyczne tym lepsze wyniki końcowe. Bogate efekty świetlne pogłębiające wierne odczucie rzeczywistości wymagają potężnej mocy obliczeniowej, którą nowoczesne akceleratory 3D dostarczają coraz łatwiej. Zaoszczędzić można już na etapie przekazywania danych pomiędzy procesorami geometrycznym i rasteryzującym. Transmitowanie wszystkich trzech wierzchołków każdego trójkąta oddzielnie jest stosunkowo nieekonomiczne. Niektóre trójkąty przylegają przecież do siebie i mają wspólne wierzchołki. Sześć przylegających do siebie trójkątów (TS, Triangle Stripes} ma tylko 6 niezależnych wierzchołków i nie trzeba przekazywać aż 18 punktów. Elastyczne przełączanie trybu pracy na TS i z powrotem możliwe jest dzięki temu, iż nowoczesne akceleratory dysponują uniwersalnym protokołem wymiany danych, który przypomina system pakietów informacyjnych o różnej zawartości. W dalszym etapie przetwarzania następuje zwykle konwersja formatów. Procesor geometryczny wydaje dane w formacie zmiennoprzecinkowym a akcelerator pracuje w arytmetyce stałoprzecinkowej. Sam ten krok zajął by procesorowi Pentium 90 co najmniej 15 cykli zegarowych (dla każdego przekazywanego parametru oddzielnie!). Istota rasteryzacji polega, jak już wcześniej wspomniano na obliczeniu kolorów wszystkich wewnętrznych pikseli trójkąta. Procesor dysponuje na wstępie wartościami składowych kolorowych jedynie dla wierzchołków. Barwy wierzchołków przejmowane są od procesora geometrycznego jako wynik przyjętych założeń odnośnie barwy własnej oraz oświetlenia obiektu. Nie wolno przecież zapominać, że widzimy tylko to co jest oświetlone. Jest to zagadnienie o kapitalnym znaczeniu jeśli chcemy by nasz wirtualny obiekt 3D przypominał coś w miarę rzeczywistego. Dokładne odwzorowanie rzeczywistości jest z matematycznego punktu widzenia stosunkowo skomplikowane. Dla ułatwienia obliczeń przyjęło się posługiwać jednym z modeli uproszczonych (lub kombinacją kilku z nich). Zagadnienia dotyczące modelowania oświetlenia wykraczają zdecydowanie poza zakres tej publikacji. Najbardziej prymitywny (i w dzisiejszych czasach już wcale niestosowany) tryb pracy polega na obliczeniu pewnej wartości średniej z trzech punktów wierzchołkowych i skopiowaniu jej na wszystkie punkty wewnętrzne (Fiat Shading). Modelowana w tym stylu sceneria nabiera wprawdzie pewnego wrażenia „3D" ale powierzchnie obiektów są nienaturalnie kanciaste bowiem bardzo wyraźnie widać pojedyncze trójkąty. Nawet mimo rozbicia na dużą liczbę elementów oko ludzkie dostrzega „szlify" na powierzchni. Bardziej zaawansowaną technikę stanowicieniowanie Gouranda (Gourand Shading). Dla zwiększenia złudzenia, iż mamy do czynienia z równomiernie zakrzywioną powierzchnią modyfikuje się w pewien określony sposób składowe kolorów dla poszczególnych punktów wewnętrznych trójkątów. Algorytm określa najpierw kolor wypadkowy punktów przecięcia P, i P2 linii skanowania z ramionami trójkąta. Wypadkową stanowi średnia ważona barwy wierzchołków: • Dla P#1 wynik uśrednia się na podstawie A i C: #IPI=VX I#A + (1 -v) x I#C*v "należy"{0...1} Barwa P#22 zależna jest od B i C: I#P2 = txI#B + (1 - t) x I#C ; i "należy do"{0...1} Każda ze zmiennych Ix symbolizuje barwę punktu z uwzględnieniem rozbicia na składowe elementarne. Oznacza to, że każde obliczenie przeprowadza się trzykrotnie dla wyodrębnienia składowych R, G i B. Współczynniki v i t stanowią odpowiednio wagi średniej, tj. odzwierciedlają stopień oddalenia punktów P#1 i P#2 od wierzchołków (im większy od P#1 tym mniejszy od P#2). Dla każdego z punktów X aktualnie skanowanej linijki interpoluje się barwę wypadkową w sposób bardzo podobny. Budowana jest średnia ważona rozpinana pomiędzy punktami P#1 i P#2: I#X = txI#PI + (1 - u) x I#P2 ; U "należy do"{0...1} Obliczenia I#X (tzn, R#Xi, B#Xi i G#Xi)wykonuje się oczywiście dla każdego punktu oddzielnie. Ponieważ mnożenie zajmuje nieporównywalnie więcej czasu od nawet kilku operacji dodawania, algorytmy omijają powyższe równanie i zamiast tego dodaje się (określane tylko jeden raz dla danej linii) przyrosty A; : I#(i+1) = I#Xi + DELTA#i gdzie: DELTA#i=I#P2-I#p1 / (n- 1) n"należy do {1...n - 1} Cieniowanie Gouranda mimo swej prostoty daje bardzo dobre efekty. Powierzchnie modelowanych w ten sposób brył sprawiają miłe dla oka wrażenie ciągłości. Metoda ta nadaje się jednak wyłącznie do obrazowania prymitywnych scenerii złożonych ze sztucznych obiektów pozbawionych wszelkich szczegółów powierzchniowych i faktur, bez charakterystycznej dla świata rzeczywistego gry świateł, cieni i odblasków. Dalszy poważny krok w kierunku upodobnienia syntetycznych obiektów 3D do świata naturalnego umożliwiają zaprezentowane w następnym punkcie techniki mapowania. Teksturowanie Technika mapowania przy pomocy tekstur (Texture Mapped) była jeszcze do niedawna wyłączną domeną drogich i profesjonalnych systemów graficznych wykorzystywanych w symulacjach i projektowaniu CAD. Mapowanie w czasie rzeczywistym dokonywane było na stacjach graficznych o specjalnie zaprojektowanej architekturze dostosowanej do przetwarzania grafiki. Moc obliczeniowa zwykłego komputera klasy PC sięgnęła jednak w międzyczasie tak wysoko, iż można się było pokusić o przeniesienie tych technik również na jego platformę. Mapowanie nie służy niczemu innemu jak oszukaniu zmysłu wzroku i ułatwieniu życia ludziom projektującym obiekty trójwymiarowe. Nie ma tu mowy o wzroście dokładności lub wierności przedstawienia modelu. Stanowi natomiast ostateczny i bardzo efektowny szlif nadawany wymodelowanym bryłom. Mapowanie związane jest nierozerwalnie z pojęciem tekstury. Tekstura jest zwykłą mapą bitową (zeskanowaną, sfotografowaną lub wytworzoną sztucznie) naklejaną elektronicznie na wybrane miejsca obiektu 3D. Pojedyncze punkty tekstury nazywane są tekslami (dla odróżnienia od punktów obrazu na które są naklejane czyli pikseli). W ten oto prosty sposób jednorodny prostopadłościan staje się klocem lub drewnianą deską, a statuetka może być w szybkim tempie przerobiona z marmurowej na pokrytą błyszczącym chromem. Proszę zwrócić uwagę na niewspółmiernie mały nakład pracy potrzebnej do wymodelowania prostopadłościanu i pokrycia go teksturą: te sam obiekt składa się w rzeczywistości z nierównomiernie zachodzących na siebie warstw drewna (słojów i poziomic), które należałoby oddzielnie modelować i łączyć. Komputer operuje stosunkowo małą, jak na ten stopień skomplikowania obiektu ilością danych. W pamięci przechowywane są współrzędne dwunastu trójkątów na które rozbite zostaj ą płaszczyzny prostopadłościanu i kilka dodatkowych danych o sposobie „nalepiania" tekstury. Ten sam obiekt traktowany „na poważnie" musiałby zostać zamodelowany milionami trójkątów elementarnych. Tekstury jak już wspomniano są obiektami płaskimi. Obraz taki łatwo jest nakleić na ścianę prostopadłościanu gdyż jest ona tak samo płaska. Nałożenie mapy bitowej na bardziej skomplikowane (a w szczególności nieregularne) obiekty wymaga doboru pewnego przekształcenia przestrzennego. Jednym z nich może być opisanie bryły w dodatkową kulę. Teksturowanie przebiega wtedy w dwóch etapach. W pierwszej fazie pokrywa się teksturą samą kulę co jest o tyle łatwiejsze, że stanowi ona bryłę regularną. Wystarczy tu prosta funkcja transformująca współrzędne kuliste (długość i szerokość geograficzną) na współrzędne (x,y) płaskiej mapy bitowej. Jeżeli mapa bitowa o rozmiarach 180 x 360 umieszczona zostanie w układzie współrzędnych prostokątnych to dla każdego punktu położonego na kuli można podać parę liczb: • x "należy" (0 ... 360), • y "należy" (-90 ... +90) lub po prostej zmianie (0 ... 180). W drugim etapie przetwarzania, zamkniętą w kulę bryłę przecina się siecią promieni wychodzących z jakiegoś umownego punktu środkowego. Każdy z promieni przecina powierzchnię bryły i powierzchnię kuli, sprowadzając poszukiwany teksel. Powyższy prosty model nie bierze jednak pod uwagę, iż zarówno mapowany obiekt jak i sama tekstura składają się z pewnej skończonej liczby pikseli i tekseli (konieczność uwzględniania rozdzielczości czyli rastra). Teksturowanie ma miejsce w punktach świetlnych obiektu (pikselach) rozmieszczonych na rastrze. Pomiędzy nimi nie ma żadnych punktów pośrednich. Algorytm skanujący teksturę musi zwrócić dla każdego piksela jakąś określoną wartość składników RGB i tylko jedną. Jeśli w wyniku obliczeń skanera przeprowadzającego odwzorowanie trafienie ma miejsce w przestrzeń pomiędzy tekselami, konieczne jest pewne przybliżenie wartości (z sąsiednich tekseli). Nie można liczyć na to, iż każdy piksel obrazu trafia dokładnie w jakiś teksel mapy bitowej, tym bardziej iż rozmiary tekstury są inne niż obiektu. Dodatkowym źródłem zniekształceń jest również wynik oddziaływania skrótu perspektywicznego. Mnogość różnych czynników zniekształcających i konieczność ich korekcji sprawia, iż teksturowanie jest jednym z najbardziej skomplikowanych i czasochłonnych fragmentów potoku przetwarzającego 3D. Wprowadzanie tych poprawek oraz różnorodne aproksymacje należą oczywiście do obowiązków procesora rasteryzującego. Najpierw przeprowadzana jest korekcja perspektywy a następnie przystępuje się do nakładania mapy. Akceleratory aktualnych generacji potrafią nakładać mapy wielokrotnie i symulować różnorodne efekty specjalne oraz atmosferyczne. Korekcja perspektywy Konieczność korekcji perspektywy wynika z faktu rzutowania teksturowanego obrazu 3D na płaszczyznę ekranu. Skrót perspektywiczny oddziaływuje nie tylko na geometrię obiektów (a właściwie na pojedynczych trójkątów elementarnych), ale dodatkowo zakłóca samo mapowanie. Prostokątna mapa bitowa musi zostać rozciągnięta od strony obserwatora i ściśnięta w miarę posuwania się w głąb przestrzeni 3D. Istotę omawianego zniekształcenia przedstawia rysunek 9.10, na którego prawej części naniesiony jest prostokąt zawieszony w przestrzeni 3D. Prostokąt ten teksturowany jest mapą bitową przedstawioną symbolicznie w lewej części rysunku. Wyraźnie widać, że trudno jest o proste odwzorowanie tych dwóch obiektów. Transformacja przestrzeni u,v -> x,y jest dosyć skomplikowana i jeśli nie uwzględnia się szeregu poprawek prowadzi do nienaturalnych zniekształceń (Visual Artifacts). Różnorodne procedury korekcyjne występują często pod wspólnym terminem Anti-Aliasing. Zagadnienie skrótów perspektywicznych doczekało się bardzo dokładnego opisu matematycznego. Głębsza analiza problemu wykazuje, że dla zniwelowania skutków zniekształceń tekstur, którymi pokrywane są obiekty 3D nie wystarczy interpolacja liniowa, a w równaniach pojawiają się składniki wyższego rzędu oraz operacje dzielenia. Procesor rasteryżujący musi skanować w dwóch przestrzeniach: obrazu i tekstury. Obraz skanowany jest w naturalny sposób wzdłuż linii poziomych. W układzie współrzędnych tekstury analogiczna linia przechodzi przez punkty (u0, v0) i (u,, V|) jednakże na skutek omawianego zniekształcenia perspektywy jest linią ukośną. Algorytm przemierza przestrzeń (U, V) poruszając się równymi krokami od punktu (u#i,v#i) do punktu (u#(i=1); v#9i+1)): u#(i+1) = u#i + d#u v(i+1) = v#i + d#i Elementarne przyrosty w kierunku u i v wynikają z następującego wzoru: d#u = (u#1 -- u#2) / (x#1 - x#0) d#v = (v#1 - v#0) / (x#1 - x#0) Dzielenie liczb (i to w formacie zmiennoprzecinkowym) należy do najbardziej czasochłonnych operacji. Każda z nich zajmuje do kilkudziesięciu cykli zegarowych. Często newralgiczne czynniki typu l / w aproksymuje się składowymi wyższego rzędu (ddu i ddv). Wielokrotne dodawania są i tak zawsze szybciej wykonywane niż dzielenie. Nakładanie mapy Procesor rasteryzujący oblicza dla każdego piksela obrazu (przestrzeń x,y) współrzędne w przestrzeni mapy bitowej (u,v). W tak określonym punkcie nie koniecznie należy się spodziewać jednego z tekseli. Algorytm musi jednak zwrócić jakąś wartość składowych RGB. Wybór sposobu postępowania w tym właśnie momencie decyduje w znacznym stopniu o końcowym wyglądzie scenerii. Warto może przyjrzeć się drodze jaką odbyły akceleratory 3D: od najprostszego przybliżenia punktu sąsiedniego do skomplikowanych interpolacji tekstur o różnych skalach. Przyporządkowanie najbliższego punktu (Peak Nearest) Ten prosty algorytm pobiera parametry tekstury z punktu leżącego najbliżej wyliczonych współrzędnych. Powierzchnia obiektu pokrywanego tą techniką nie daje zadowalających efektów. Płaszczyzny sprawiają nienaturalne wrażenie struktury gruboziarnistej, szczególnie gdy leżą blisko obserwatora (silne powiększenie). Zniekształcenia dotyczą również linii ukośnych, które kreślone sąjako schodkowe. Mapowanie w tym trybie zostało porzucone (skoro tylko pozwoliła na to nadwyżka mocy obliczeniowej) na korzyść bardziej złożonych algorytmów, które dają zdecydowanie lepsze efekty. Te bardziej rozbudowane metody należą do grupy, której cechą wspólną jest uśredniającej z kilku teksli. Należą do nich: filtracja bilinearna, MIP-Mapping oraz filtracj a tri linearna. Filtracja bilinearna (Bilinear Interpolation) W metodzie tej analizie podlega otoczenie punktu. Parametry RGB uśrednia się w oparciu o czterech sąsiadów przy czym budowana wartość średnia ważona jest stopniem oddalenia od punktu trafienia. Teksie leżące bliżej mają większy wpływ na wynik. Dla pewnego punktu obrazu A(x,y) otrzymujemy parę współrzędnych (U. u, V.v) lokalizującą punkt w przestrzeni tekstury. Punkt ten otoczony jest czterema sąsiadami: Punkt_1 (U, V) Punkt_2 (U+1, V) Punkt_3 (U+1, V+1) Punkt_4 (U, V+1) Składowe ułamkowe 0.u i 0.v współrzędnych punktu (U. u, V:v) reprezentują właśnie położenie we wnętrzu kwadratu ograniczonego punktami l, 2, 3 i 4. Każdy z narożnych punktów ma jasno zdefiniowane parametry R, G, B (R#1, G#1, B#2, R#2, G#2, B#2 ...)• Poszukiwane składniki barwy dla punktu A stanowią wypadkową kolorów punktów l - 4 ale z uwzględnieniem ich odległości od punktu. Im bliżej narożnika usytuowany jest punkt A tym większy jest jego wpływ na kolor wypadkowy. Budowana jest średnia ważona a współczynniki wagowe d#1 - d#4 odpowiadają powierzchni prostokątów zaznaczonych na rysunku: d#1 = (1 - 0.u) x (1 - 0.v) d#2 = 0.u x (l - 0.v) d#3 = 0.u x 0.v d#4 = (l - 0.u) x 0.v Teraz można już wyznaczyć parametry R, G, B punktu A: R = d#1 x R#1 + d#2 x R#2 + d#3 x R#3 + d#4 x R#4 G = d#1 x G#1 + d#2 x G#2+ d#3 x G#3 + d#4 x G#4 B = d#1 x B#2 + d#2 x B#2 + d#3 x B#3 + d#4 x B#4 W praktyce spotkać można było również różne formy pośrednie filtracji bilinearnej, wprowadzane zwykle ze względów oszczędnościowych. I tak np. kontroler graficzny z akceleratorem 3 D typu GD5464 firmy Cirrus Logic uśredniał na podstawie sąsiedztwa dwóch punktów a nie czterech. Algorytm filtracji bilinearnej stanowi rozsądny kompromis pomiędzy osiąganymi wynikami a stopniem komplikacji i w chwili obecnej należy do standardowego wyposażenia każdego szanującego się akceleratora 3D. Warto jednak wiedzieć, iż nie usuwa on wszelkich zniekształceń a tylko niektóre. Nadal pozostaje w mocy szkodliwy wpływ skrótów perspektywicznych (Depth Aliasing). Wynika to z nieuchronnego faktu, iż teksturowany obiekt, który oddala się od obserwatora (poruszający się obiekt lub fragment scenerii typu droga biegnąca w stronę horyzontu) ściska w coraz to mniejszych ramach stale tą samą mapę. Chcąc skorygować ten czynnik powstały algorytmy wyższej generacji, które uwzględniają w odpowiednim momencie zmianę rozdzielczości mapy bitowej. MIP-Mapping Tekstury są jak już wspomniano mapami bitowymi o ustalonej rozdzielczości (np. 256 x 256) a co za tym idzie ich rozmiar jest stały. Poddawane mapowaniu obiekty 3D mogą mieć różne rozmiary. Weźmy za przykład grę wykorzystującą naturalną scenerię powierzchni ziemi. Obszar podzielony jest na kwadraty l x l km, z których każdy przechowywany jest jako mapa bitowa 1000 x 1000 punktów. Obraz taki widziany z kabiny symulatora lotniczego ma rozdzielczość graniczną l m^2. Jeśli akcja przeniesie się na ziemię, gracz nie rozróżnia szczegółów poniżej l m. Optymalne dopasowanie następuje jedynie wtedy, gdy rozmiar mapy bitowej zgodny jest wymiarami pokrywanej powierzchni. W przypadkach obiektów, których rozmiary ulegają zmianie (bo np. oddalają się lub przybliżają do obserwatora) rodzi się problem dopasowania tekstury do mapowanej powierzchni. Jeśli wymiar tekstury osiąga wartość dwukrotnie większą od długości lub szerokości obiektu procesor rasteryzujący powinien przeprowadzić interpolację bilinearną i zredukować powierzchnię mapy o jedną czwartą (z każdych czterech tekseli mapy poziomu wyższego otrzymuje się jeden teksel mapy poziomu niższego). Ponieważ wielokrotne przeprowadzanie takich interpolacji w czasie rzeczywistym jest czystą stratą mocy obliczeniowej (jeśli wyniki za każdym razem są porzucane) przefiltrowane mapy bitowe zapamiętuje się na stałe. Dla każdej tekstury przygotowuje się obszerny zestaw (Stąd nazwa Mip-Mapping (Mip = Multum in parwo, dużo w jednym)) map bitowych o różnych stopniach rozdzielczości. Przechowywane mapy (nazywane też Mipami) mają rozmiary będące kolejnymi potęgami liczby 2. Lista zamykana jest zwykle w okolicach 500, gdyż potrzeba mapowania tak dużych obiektów w standardowych ekranowych trybach rozdzielczości jest znikoma. Do dyspozycji stoją więc zwykle mapy o następujących rozmiarach: l x 1,2 x 2, 4x4, 8 x 8, 16 x 16, ...512 x 512 Procesor rasteryżujący określa, który Mip jest w danym momencie najbardziej optymalny. W tym celu obliczany jest wyznacznik LOD (Level of Detali}. LOD = 0 oznacza mapę o najwyższej rozdzielczości, która odpowiada stosunkowi l teksel na l piksel. Mapa o poziomie LÓD = l prze filtrowana jest już w stosunku 4 tekseli na l piksel, itd. Współczynnik LÓD powinien być w zasadzie obliczany dla każdego piksela trójkąta oddzielnie (Per Pixel MIP-Mapping), bowiem taka procedura daje najlepsze wrażenia optyczne. W formie oszczędnościowej LÓD określa się raz na cały trójkąt (Per Triangle MIP-Mapping) ale postępowanie takie prowadzi często do nieciągłości obrazu w narożnikach trójkąta. MIP-Mapping, mimo iż jest bardzo zaawansowaną i skuteczną techniką nakładania tekstur, rozwiązuje jedne problemy ale w zamian za to wywołuje inne skutki uboczne. W pewnych niekorzystnych warunkach widoczny jest mianowicie moment przełączeń na kolejne stopnie LÓD (zjawisko określane jako MIP-Banding). Obserwator dostrzega wówczas nieistniejące w naturze linie wzdłuż granic dzielących Mipy o różnym poziomie LÓD. Dla zniwelowania tego efektu opracowany został jeszcze bardziej rozbudowany algorytm teksturowania nazywany filtracją trilinearną. Filtracja trilinearną Algorytm ten daje bardzo dobre wyniki ale pochłania wiele mocy obliczeniowej bowiem stanowi kombinację filtracji bilinearnej i średniej ważonej dwóch sąsiednich Mipów. Metoda rozmywa przejścia pomiędzy stopniami LÓD, co odbierane jest przez oko ludzkie zdecydowanie lepiej niż ostro zarysowane punkty przełączeń. Filtracja trilinearną bierze swoją nazwę stąd, iż stosuje w sumie 3 filtry aby wydzielić jeden uśredniony teksel. Procesor wybiera z danej mapy bitowej dwa Mipy o rozdzielczościach leżących najbliżej rozmiarów mapowanego obiektu. Filtr pierwszy dokonuje filtracja bilinearnej mapy Mip jednego poziomu. Filtr drugi opracowuje mapę bitową poziomu drugiego. Filtr trzeci uśrednia wyniki z powyższych dwóch operacji. Jednoznaczny dobór dwóch Mipów (o rozdzielczościach zamykających obiekt od góry i od dołu) nie zawsze jest możliwy. Na skutek działania skrótu perspektywicznego może się zdarzyć, iż różne obszary tego samego obiektu pasują lepiej do różnych Mipów. Proszę wyobrazić sobie trójkąt mocno odchylony w kierunku horyzontu. Długość jego podstawy jest niewielka (optymalny Mip 8x8) natomiast długość ramion wielokrotnie większa (wymagany Mip 128 x 128). Nowoczesne akceleratory 3D przechodzą wówczas do innego trybu pracy określanego jako filtracja anizotropową (Anisotrophic Filtering). Algorytm ten posługuje się mapami bitowymi o odmiennych rodzielczościach w kierunku X i Y. Filtracja anizotropową stanowi zaawansowaną technikę z grupy tzw. Oversampling (inaczej Sub-Pixel Interpolatiori). Termin ten oznacza próbkowanie ze zwiększoną rozdzielczością (większą niż odstęp pomiędzy tekselami i pikselami) i uśrednianie wyników. Algorytmy tego typu dają doskonałe efekty ale pochłaniają ogromną ilość mocy obliczeniowej. 8-krotny oversampling redukuje wartość fps w stosunku 1:8. Techniki te są obecnie przedmiotem intensywnych badań i nie majak na razie rozwiązań praktycznych nadających się do powszechnego zastosowania. Omawiane tu funkcje filtrujące redukują efekt schodkowy powstający na zewnętrznych krawędziach obiektów w stosunku do tła (Edge Anti-Aliasing). Bardziej nowoczesny system (Scenę Anti-Aliasing) może redukować schodki tworzące się na liniach przecięć wielokątów we wnętrzu obiektów. Algorytmy tego rodzaju przetwarzają obraz jako całość i pochłaniają naturalnie ogromną ilość mocy obliczeniowej. Producenci akceleratorów inwestują wiele w prace nad optymalizacją takich algorytmów. Mieszanie kolorów Procesor rasteryzujący może uwzględniać fakt mieszania się kolorów (Blending) podłoża mapowanego obiektu i nakładanej tekstury. Ta część procesu przetwarzania ma miejsce w specjalnej programowanej jednostce mieszającej barwy (Blending Engine). W zależności od zaprogramowanej operacji i użytych kolorów uzyskuje się efekty przyciemnienia, rozjaśnienia lub połysku (Specular Lighting). Jednostka mieszająca może zsyntetyzować dowolne dwa obrazy w jeden posuwając się piksel po pikselu. Najprostsze algorytmy to modulacja i przesłanianie. • Modulacja. W modelu tym zakłada się, iż trójwymiarowa bryła przed oklejeniem jej teksturą była idealnie biała, tzn. odbijałaby całkowicie padające na nią światło. W takim razie każdy z barwnych elementów tekstury stanowi filtr tłumiący światło odbite w tym kolorze. Przykład: Jeden z narożników idealnie białego trójkąta oświetlony zostaje zielonym światłem. Punkt ten ma teraz parametry RGB (0,1 ; 0,9 ; 0,1). Naklejona w tym miejscu tekstura cechuje się zabarwieniem RGB (0,2 ; 0,3 ; 0,4). Jako barwa wynikowa przyjęta zostanie trójka: R=0,l x 0,2=0,02 G=0,9 x 0,3=0,27 B=0,l x 0,4=0,04 Przesłanianie. Zamiast prostego mnożenia składników RGB dla podłoża i tekstury przyjąć można przyjąć bardziej elastyczne rozwiązanie. Dla każdego ze składowych wynikowych z osobna wprowadza się funkcję postaci: C#X = axP#X+(l-a)xT#X gdzie: C#X jest składnikiem wynikowym (C#R , C#G lub C#B), P#X - składnik koloru podłoża, T#X - składnik koloru tekstury, a - (0 ... 1) współczynnik przesłaniania. Model ten pozwala na swobodne określenie stopnia dominacji nakładających się na siebie barw: jeśli a = O tekstura przesłania całkowicie podłoże; dla a = l widzimy tylko podłoże a tekstura jest przeźroczysta. Liczby z przedziału O - l wyobrażają wszelkie stany pośrednie. Z punktu widzenia komputera obliczenia przesłaniania są bardziej pracochłonne od modulacji. Oprócz niezbędnych w pierwszym modelu trzech mnożeń trzeba jeszcze przeprowadzić dodatkowo trzy dodawania. Sprawę można uprościć, jeżeli współczynnik przenikania a jest stały w ramach całej tekstury. Dla wiernego odtworzenia rzeczywistości założenie to nie zawsze jednak może być przyjęte. Efekty specjalne Gry i symulacje komputerowe ostatniej generacji wprowadzają do swojego repertuaru szereg efektów specjalnych, które mają pogłębić u obserwatora wrażenie naturalności scenerii. W ich realizacji bierze intensywny udział jednostka mieszająca (Blending Engine) Większość z nich wymaga kolejnego nałożenia dwóch tekstur. Oto kilka przykładów: • Mgła (Fog). Należy do grupy efektów atmosferycznych (Atmospheric Effects) i polega na sterowaniu współczynnikiem przejrzystości tekstur. • Przejrzystość obiektów (Alpha Blending) .Efekt wywoływany jest przez maszynę mieszającą barwy. Istota tej symulacji polega na manipulacji barwy piksela już obliczonego i spoczywającego w pamięci obrazu. Jego parametry pobiera się i miesza z innym kolorem a zaktualizowany piksel wynikowy jest ponownie zapisywany w pamięci. • Depth Cueing. Stopniowe obniżanie jasności obiektów w miarę oddalania się od obserwatora. • Bump Map. Ta sama mapa nakładana jest dwukrotnie, z tym że za drugim razem wprowadzane jest lekkie przesunięcie. Algorytm daje zadziwiająco wspaniałe wyniki w symulowaniu powierzchni o „tłoczonej" fakturze. Wrażenia takiego nie da się uzyskać przy pomocy pojedynczej tekstury. • Emironment Map. Symulacja błyszczących powierzchni, w których w naturalnych warunkach odbijają się przedmioty otoczenia. Trudność polega na tym, iż algorytm pochłania ogromną ilość mocy obliczeniowej bowiem współrzędne tekstur (u;v) nie są na stałe przypisane do wierzchołków trójkąta a muszą być dynamicznie określane dla każdej rasteryzowanej sceny oddzielnie. • Lighting Map. Symuluje odblaski rzucane na otoczenie przez silne źródła światła (eksplozje, rozbłyski laserów, itp) • Cienie (Shadow). Symulacja cieni rzucanych przez przedmioty wymaga również teksturowania dwukrotnego. Spora część wymienionych tu efektów (Bump Map, Environment Map, Lighting Map, Shadowing) wymaga teksturowania wielokrotnego (Midti Texturing). Obróbka scenerii bogatych w efekty tego rodzaju jest coraz bardziej pracochłonna. W jednym błyszczącym obiekcie odbija się otoczenie ale z kolei sam obiekt rzuca odblaski na otoczenie. Aby przyspieszyć takie obliczenia najnowocześniejsze akceleratory 3D wyposażane są dwa równoległe potoki przetwarzające (Dual 3D Pipe Linę) lub przynajmniej w podwójną jednostkę teksturującą (Dual Texture Unif). Procesory tego typu pobierają w jednym cyklu przetwarzania po dwa teksele i to z dwóch różnych tekstur. Teksturowanie wielokrotne stanowi jeden ze znaków szczególnych DirectX w wersji 6.0 i zwrócone jest wyraźnie w stronę układów najnowszej generacji posiadających dublowane procesory teksturujące (Voodoo-2, RivaTNT czy też Permedia-3). Jeśli kontroler nie należy do wspomnianej klasy, funkcje wewnętrzne DirectX 6.0 mogą symulować programowo brakujące fragmenty sprzętu. Pamięć lokalna akceleratora 3D Lokalna pamięć akceleratora 3D (fizycznie obecna na karcie kontrolera) podzielona jest na kilka obszarów funkcjonalnych. Obszar najbardziej istotny to pamięć obrazowa (Franie Bitffer) przechowująca składowe kolorowe (zwykle w formacie RGB lub YUV) wszystkich X x Y pikseli wyświetlanego obrazu. W obrębie pamięci obrazowej obowiązuje adresowanie współrzędnymi ekranu (x i y, gdzie x = l ... X oraz y = l ... Y), zgodnie z aktualnie ustawionym trybem rozdzielczości (X x Y). Obszar drugi tworzy tzw. bufor Z (lub w nowszych modelach bufor W). Do grupy obszarów adresowanych współrzędnymi (x,y) zaliczyć należy również tzw. Stencil Buffer, który jest implementowany w akceleratorach ostatniej generacji. W czasach przed wprowadzeniem AGP kontroler 3D musiał przeznaczać część swej lokalnej pamięci na bitowe mapy tekstur. Mimo iż mechanizmy oferowane przez magistralę AGP pozwalają na przetwarzanie tekstur wprost w pamięci operacyjnej, część kontrolerów wybiera jednak obróbkę w pamięci lokalnej (jednak większa szybkość), zwłaszcza iż możliwym stała się silna kompresja map bitowych bez szczególnej utraty rozdzielczości. W dalszej części rozdziału omówimy pokrótce wspomniane obszary pamięci. Frame Buffer Pamięć obrazu pracuje w bardzo specyficznych warunkach. Podlega ona jednoczesnemu zapisywaniu (przez kontroler graficzny) i odczytywaniu (przez przetwornik RAM-DAC). Gdyby wszystko miało się odbywać w obrębie tego samego bloku pamięciowego, przetwornik musiałby czekać na ostateczne zakończenie procesu zapisu. Do momentu odczytania ostatniego piksela nie wolno byłoby z kolei nic zapisywać (wówczas oczekuje kontroler). Aby wymienione dwa procesy nie zakłócały się wzajemnie wprowadzono podwójne buforowanie (Dual Buffering). Do dyspozycji kontrolera graficznego stawia się dwa jednakowe bufory pamięciowe. Jeśli jeden z nich wypełniany jest świeżą treścią (Back Buffer), drugi można oddać do dyspozycji RAM-DAC by przekazał kompletną zawartość na ekran (Front Buffer). W ten sposób zawsze jakiś bufor jest pokazywany a jakiś stoi gotów do zapisu i wspomniane dwa procesy nie zakłócają się wzajemnie. Moment przełączenia buforów musi wypadać w chwili, gdy generowany jest kolejny impuls synchronizujący w pionie, w przeciwnym razie obraz podzielony zostanie poziomą linią. Może się jednak zdarzyć, iż mimo nadejścia kolejnego impulsu V#(SYNCNC) akcelerator nie zdążył z kompletnym wypełnieniem bufora. Rozważmy prosty przykład obliczeniowy. Pracujemy w trybie 60 Hz i RAM-DAC generuje co 1/60 sekund impuls synchronizacji pionowej. Jeżeli czas obliczeń jednej sceny wyniesie tylko nieco dłużej niż 1/60 sekundy (na przykład 1/59 sekundy), to kontroler 3D przegapia o ułamek sekundy moment przełączenia i musi czekać na nadejście następnego. W tym czasie procesor graficzny stoi bezczynnie. Do jednego z buforów nie może jeszcze pisać (bo nie został do tej pory wyświetlony) a drugi bufor jest aktualnie pokazywany i też nie można go zamazywać. Rzeczywista częstotliwość odtwarzania obrazu wynosi w tym przypadku już tylko 30 fps. Rozwiązanie tego problemu możliwe jest jedynie poprzez wprowadzenie trzeciego bufora (Triple Buffering). Przy podziale na 3 bufory odpada czas oczekiwania na impuls syn-chronizacyjny bowiem kontroler zawsze dysponuje jakimś obszarem pamięci, do którego może zapisywać wyniki swoich obliczeń. Wadą tego rozwiązania jest zmienna częstotliwość odtwarzania [fps], bowiem nie ma już mechanizmu wyzwalającego w równych odstępach czasowych moment przełączania buforów. Połączenie zalet sztywnej synchronizacji ze stałą możliwością zapisu do jednego z buforów możliwa jest w układach implementujących bufory poczwórne (Quad Buffering). Warto nadmienić, iż zapis do pamięci obrazu odbywać się może zarówno przy załączonej jak i wyłączonej synchronizacji z impulsami V#SYNC- Synchronizację wyłącza się zwykle w celach pomiarowych, np. uruchamiając programy typu Bench-Mark. Kontroler może wtedy pisać do bufora obrazu z narzucaną przez siebie prędkością i nie musi czekać na moment powrotu wiązki elektronów w cyklu odchylania pionowego. Osiągane w tych anormalnych okolicznościach wartości fps sięgają w chwili obecnej powyżej 100 obrazów na sekundę. W warunkach rzeczywistych, gdy odtwarzana jest jakaś aplikacja, a nie program testujący, kontroler graficzny wypełniwszy w całości bufor obrazu musi odczekać nadejścia kolejnego impulsu synchronizacyjnego jeśli chce pokazać kompletny obraz. W takim uzależnionym układzie częstotliwość powtarzania obrazu 3D nie leży nigdy powyżej częstotliwości odchylania pionowego, z którą pracuje monitor. Bufor Z/W Położenie dowolnego punktu w przestrzeni 3D jest jednoznacznie zdefiniowane przez trójkę liczb (x, y, z) będących jego współrzędnymi. Z punktów takich składają się trójkąty elementarne a z nich z kolei modelowane właściwe elementy scenerii. Oś Z przebiega w kierunku od płaszczyzny ekranu w głąb przestrzeni 3D. Wartość współrzędnej z rośnie w miarę oddalania się od obserwatora. Mimo iż rzecz dotyczy przestrzeni 3D, cały proces przetwarzania ma miejsce w płaszczyźnie ekranu, adresowanej parą współrzędnych płaskich (x, y). Mogło by się wydawać, że trzecia współrzędna z reprezentująca odległość punktu od ekranu staje się zbędna. Tak jednak nie jest, bowiem skutkiem projekcji na ekran trójwymiarowe elementy przedstawianej scenerii mogą się wzajemnie przesłaniać. Zjawisko przesłaniania się obiektów 3D sprowadza się do przesłaniania się trójkątów elementarnych a w gruncie rzeczy do przesłaniania się pikseli. Analizę przesłaniania przeprowadza się właśnie na poziomie pojedynczych punktów obrazu. Na ekranie kreślone będą więc tylko te punkty bryły, które są widoczne dla obserwatora. O tym czy punkt jest widoczny czy nie decyduje właśnie jego współrzędna z. W tym celu utworzony zostaje w pamięci karty graficznej tzw. bufor Z. Stanowi on tablicę Z[x,y] o rozmiarach ekranu (X x Y). Elementy tablicy Z są zwykle dwubajtowe. Przed przystąpieniem do formowania nowego obrazu ustawiana jest wartość początkowa, dla każdego z[x,y]=OxFFFFh, co w ramach dokładności oferowanej przez zakres 0-216 odpowiada +00 na osi Z. W miarę budowania trójwymiarowej scenerii rozpisanej na elementarne trójkąty, rozpatruje się współrzędne z dla każdego z aktualnie obliczanych punktów składowych i porównuje je z dotychczasową wartością zapamiętaną w buforze Z (Z-Buffering). Punkt o współrzędnych (x, y, z) zostaje uznany za widoczny jeśli spełnia warunek: z < Z[x,y] Obliczone składowe RGB dla punktu uznanego za widoczny wędrują do bufora obrazowego i umieszczane są pod adresem [x,y]. Współrzędna z takiego nowego punktu zamazuje napotkaną w buforze Z wartość: Z[x,y]=z Tak zmodyfikowany element tablicy Z pozostaje niezmieniony do momentu przetwarzania punktu obiektu leżącego jeszcze bliżej obserwatora. Mechanizm bezbłędnego określania wzajemnego przesłaniania się pikseli funkcjonuje teoretycznie jedynie przy założeniu nieskończenie wielkiej dokładności obliczeń. Odstęp pomiędzy blisko położonymi obiektami 3D (np. obraz wiszący na ścianie) może w pewnych warunkach wymykać się spod kontroli, jeśli dokładność obliczeń (kwantyzacja) nie gwarantuje możliwości odróżnienie obiektów od siebie. Kluczową rolę odgrywa tutaj głębia przedstawianej sceny. Na nią bowiem rozkłada się stojąca do dyspozycji dokładność mechanizmu kontroli głębokości. Im większy jest zakres widoczności obserwatora, tym większe wymagania spoczywają na dokładności pomiaru odległości na osi Z. Organizacja bufora Z stawia do dyspozycji określoną ilość bitów. Bufor Z może pracować na liczbach 16, 24 lub 32-bitowych. Akceleratory powszechnego użytku zadowalają się zwykle organizacją 16-bitową, modele nowszych generacji, szczególnie te które zostały bogato wyposażone w pamięć pracują w trybie 32-bitowym. Stojący do dyspozycji rozmiar bufora Z można różnie wykorzystywać. Zwykle pracuje się w arytmetyce liczb stałoprzecinkowych (skalowane liczby całkowite). Obiekty położone blisko (o małej współrzędnej Z) posiadają przez to większą dokładność oceny głębokości. Przejście na arytmetykę zmiennoprzecinkową gwarantują jednakową dokładność w całym zakresie widzenia, ale spowalnia cały proces obliczeniowy. Nie bez znaczenia jest znowu wpływ skrótu perspektywicznego, skutkiem czego rozkład wartości z w buforze nie jest liniowy. Obiekty znacznie oddalone od obserwatora mają coraz to bardziej zbliżone wartości współrzędnej z, przez co rośnie niebezpieczeństwo przekroczenia wartości minimalnej poniżej granicy dokładności. Jeśli zamiast współrzędnej z używać skorygowanej współrzędnej w (która również wyraża odległość od obserwatora ale w innej skali) rozkład wartości w buforze (nazywanym teraz buforem W) staje się liniowy. Z-Buffering (lub W-Buffering) obciążają bardzo mocno pamięć lokalną akceleratora poprzez szereg odwołań typu Read/Write-Modify. Odwołania tego typu są szczególnie uciążliwe, bowiem wymagają nieustannych przełączeń z zapisu na odczyt i odwrotnie. Nowoczesne pamięci dynamiczne osiągają swoje maksymalne parametry jedynie w trakcie szeregu następujących po sobie cykli dostępu tego samego rodzaju. Warto wspomnieć w tym miejscu o istnieniu ciekawego algorytmu pozwalającego na ominięcie całego procesu porównywania współrzędnych z, a w dodatku nie wymagającego odwołań do pamięci. Mowa tu o sortowaniu trójkątów (Z-Sort). Przed przystąpieniem do przetwarzania wszystkie trójkąty elementarne ustawiane są w szereg (odzwierciedlający wzajemne przesłanianie). Gdy lista jest gotowa procesor przystępuje do przetwarzania w kolejności „od tyłu do przodu". Jeżeli przetwarzany będzie każdy trójkąt, obiekty przesłonięte zostaną w naturalny sposób zamazane przez obiekty leżące bliżej. W ten sposób omija się zagadnienie niedokładności oceny odległości na osi Z. Bez względu na to jak blisko od siebie spoczywają dwa trójkąty, zawsze jeden z nich można uznać za bliższy (poprzez pozycję w kolejce). Pamięć tekstur Jednym z czynników silnie obciążających lokalną magistralę pamięciową akceleratora jest dostęp do tekstur. Są to co prawda wyłącznie cykle odczytu ale za to w dużej liczbie: przy aktywnej filtracji trilinearnej potrzeba wczytywać parametry 8 tekseli na każdy piksel obrazu. Procesory wyposażone w podwójne potoki przetwarzania (kompletne lub jedynie jednostki teksturujące) generują oczywiście dodatkowe obciążenie. Projektanci akceleratorów od dawna łamią sobie głowę nad różnymi sposobami optymalizacji architektury i zwiększenia wydajności pamięci. Spore rezerwy drzemią w samej organizacji pamięci a zwłaszcza wyrafinowanym rozlokowaniu map bitowych. Tekstury układane są często w pozornie nielogicznej formie, która gwarantuje jednak szybszy dostęp do kolejnych tekseli bez konieczności zmiany wiersza. Duże, kwadratowe obszary tekstury składające się z większej liczby logicznych linii, złożone są fizycznie w jednym wierszu pamięci. Cykl dostępu ulega znacznemu skróceniu bowiem pamięć może przejść w tryb pracy Burst, a przygotowanie kolejnego adresu obejmuje jedynie modyfikację kolumny. Profesjonalne akceleratory 3D dysponują często lokalną pamięcią pośrednią typu Cache, w której przechowuje się spory fragment aktualnie przetwarzanej mapy bitowej. Duże oszczędności przynosi sam sposób kodowania danych, np. przejście z przestrzeni RGB na YUV. W zależności od wymagań odnośnie jakości można pozwolić sobie na ograniczenie formatu danych: zamiast przeznaczać po jednym bajcie na każdą składową koloru można przejść do jednego z trybów oszczędnościowych: RGB-565 ( RGB-565 oznacza rozpisanie na składniki 16-bitowej komórki pamięci obrazu: dla składnika zielonego 6 bitów a dla składników czerwonego i niebieskiego po 5 bitów.), RGBA-4444 lubRGBA5551. Procesor teksturujący tłumaczy formaty tego typu na swój wewnętrznyformat RGBA8888 w którym dokonuje wszelkich operacji. Aspekty ekonomiczne zadecydowały, iż akceleratory wcześniejszych generacji powszechnie wyposażane były w 64-bitową szynę komunikacyjną. Połowa jej szerokości przeznaczana była na komunikację z pamięcią obrazu a reszta łączyła kontroler z pamięcią tekstur. Układy wyższej klasy posiadał)' po dwie niezależne magistrale pamięciowe, każda o szerokości 64 bitów. Ostatnio do użytku wchodzi również inne rozwiązanie pozwalające na bardziej efektywne wykorzystanie pamięci. Prezentowany tu system kompresji tekstur (S3TC) zaproponowany został przez firmę S3 i wprowadzony przez Microsoft do biblioteki DirectX 6.0. Żelazna reguła mówiąca, iż pamięci jest zawsze za mało obowiązuje naturalnie i w tym względzie. Osiągane efekty wizualne są tym lepsze im większa jest rozdzielczość map bitowych, którymi posługuje się procesor tekstur. Obiekt teksturowany mapą o rozmiarach 512 x 512 oddziaływuje znacznie bardziej realistycznie na obserwatora pokrywany tym samym wzorem ale o rozdzielczości 64 x 64. Zapotrzebowanie na pamięć rośnie naturalnie dodatkowo w systemach posługujących się mapowaniem MIP. Każda z map bitowych przechowywana musi być w kilku lub kilkunastu wstępnie prze filtrowanych rozmiarach. Właśnie temu stale rosnącemu zapotrzebowaniu na tekstury ma przyjść z pomocą system S3TC. Stosowany tu mechanizm pozwala na osiągnięcie sześciokrotnego współczynnika kompresji (przy założeniu, że produktem wejściowym była mapa bitowa przeznaczająca 24 bity na piksel, czyli w formacie RGB888). Algorytm oferuje 2 modele kompresji. W trybie podstawowym przeznaczane są po 4 bity na każdy kodowany teksel. W modelu drugim generowany jest strumień wyjściowy o podwójnej szerokości. Algorytm kompresji nie koduje całej tekstury na raz, lecz dzieli ją wstępnie na bloki o rozmiarach 4 x 4 i w takich porcjach przetwarza. W obrębie bloku analizowany jest kolor każdego teksla w celu wydzielenia dwóch wiodących kolorów bazowych. Produktem wyjściowym mechanizmu kompresji są dwie struktury danych: kodowana (wyjściowa) mapa bitowa oraz paleta kolorów (Texture Palette Lookup). Przetworzony blok wejściowy stanowi teraz zestaw indeksów do palety kolorów. Paleta jest czterowierszową tablicą zawierającą w sumie cztery kolory: dwa bazowe i dwa pośrednie wyznaczane przez interpolację kolorów bazowych. Kolory pośrednie generowane są automatycznie w fazie dekodowania i nie przechodzą do strumienia wyjściowego (nie są zapisywane). Paleta kodowana jest w formie RGB565, tj. po 16 bitów na kolor. W ten sposób kodowany blok 4x4 zamieniany jest na zestaw dwubitowych indeksów i zajmuje teraz rozmiar 32 bitów (4 x 4 x 2). Możliwe wartości indeksów to oczywiście 00,01, 10 lub 11. W wyniku kompresji bloku 4x4 zapisywane są 64 bity (32 bity zestaw indeksów i 32 bity paleta). Algorytm w tej wersji produkuje więc średnio po 4 bity na teksel. Rozmiar pamięci i organizacja Faktyczne zapotrzebowanie na pamięć graficzną wynika w głównej mierze z aktualnego trybu pracy sterownika graficznego Pełna strona obrazu zajmuje: P = p x l x c gdzie: P - ilość pamięci w bajtach, p - ilość punktów w linii, l - ilość linii na ekranie (p x l opisuje rozdzielczość obrazu w pikselach, np. 800 x 600), c - tryb kolorowy, tj. liczba bajtów odwzorowujących barwę piksla. Jeden bajt daje możliwość rozróżnienia 256 kolorów. Dwa bajty mogą zakodować do 2I6 różnych kolorów (tryb High Color, w zależności od przyjętej umowy oznacza 32 768 lub 65 535 barw). Praca w trybie Tnie Color wymaga poświęcenia trzech bajtów na piksel. Pozwala to na przedstawienie ponad 16 milionów barw. 24-bitowe cykle dostępu do pamięci graficznej nie są najmocniejszą stroną kontrolerów graficznych z architekturą 64-bitową. Niektóre z nich poświęcają więc 4 bajty pamięci w celu przyspieszenia dostępu. Tryb 3-bajtowy można niekiedy wymusić. Możliwość ta ukrywa się w oknach konfiguracyjnych pod nazwą Packed Pixel Mode. Bez tego nie były by możliwe niektóre z trybów np. 1280 x 1024 ( 1280 x 10241280 x 1024 x 4 = 5 MB)i True Color w kartach dysponujących 4 MB pamięci graficznej. Zgodnie z powyższym praca z rozdzielczością 1024 x 768 punktów w trybie High Color (16 bitów na piksel, c = 2) pochłania 1024 x 768 x 2 = 1572864 bajty pamięci. Jeśli uwzględniać wyłącznie zapotrzebowanie wynikające z pracy sterownika graficznego (bez podwójnego buforowania, tekstur i bufora-Z) już nawet niewielka ilość pamięci pozwala na osiągnięcie rozsądnego trybu pracy: Tabela 9.1. Zapotrzebowanie na pamięć karty graficznej Ilość pamięci; RAM-DAC; Maksyma/nie możliwy tryb; 1 MB; 135 MHz; 1280 x 10247 16col./75 Hz, 1024 x 768/256col./75 Hz, 800 x 600 / HiColor / 75 Hz; 2 MB; 135 MHz; 1280 x 1024/256col./75Hz, 1152 x 864 /HiColor/ 80 Hz,1024 x 768 /HiColor/ 80 Hz,800 x 600 / TrueColor / 75 Hz; 4 MB; 175 MHz; 1280 x 1 024 /TrueColor/ 75 Hz, 600 x 1200 /HiColor/ 65 Hz, 220 MHz;1280 x 1024 /HiColor/ 80 Hz; Powyższa kalkulacja traci sens w przypadku akceleratora 3D, który bardzo intensywnie korzysta z pamięci graficznej. Już w trybie 640 x 480 i High Color może powstać deficyt nawet przy obsadzie 4 MB. Na samą pamięć obrazu przypada zgodnie z powyższymi obliczeniami około 600 kB. Drugie tyle trzeba przeznaczyć na dodatkowy bufor (Back Buffer) w którym przygotowywany jest obraz i jeszcze raz tyle samo na potrzeby bufora-Z. Razem już prawie 2 MB. Do tego doliczyć musimy pamięć tekstur. Jeśli włączona jest filtracja trilinearna w pamięci schronienie musi znaleźć cała rodzina map bitowych: oryginał 256 x 256 plus pomniejszenia 128 x 128, 64 x 64, aż do 1x1. Na całość potrzeba zarezerwować prawie 90 kB, a to dopiero jedna tekstura. Widać wyraźnie jak niezmiernie pamięciożerne są funkcje 3D. Typowy dla Windows 16-bitowy (216 barw) obraz kolorowy w formacie 1024x768 zajmuje około 1,6 MB pamięci graficznej. Aby go kompletnie odnowić w stosunkowo krótkim czasie, np. 1/1 Os, procesor musi przesłać strumień danych 16 MB/s. Nie stanowi to jeszcze przeciążenia dla magistrali PCI. Lepsze karty graficzne mogą przejąć z magistrali do 60 MB/s. Ponadto w praktyce prawie nigdy nie odbudowuje się całego obrazu a jedynie pewne jego fragmenty (np. przesłonięte lub przesunięte okna). Problem rodzi się w momencie wyprowadzania danych na monitor. Chcąc zachować ergonomiczną częstotliwość odświeżania należy przesłać w ciągu jednej sekundy 75 bloków danych po 1,6 MB. Wymagana szerokość pasma wynosi więc 120 MB/s. Podobne obliczenie przeprowadzone dla rozdzielczości 1280 x 1024 da wynik 200 MB/s, a w formacie 1600 x 1200 aż 288 MB/s. Sytuację można trochę podratować redukując liczbę kolorów: 1024 x 768 przy 256 kolorach i 70 Hz daje już tylko 55 MB/s. W toku rozwoju kart graficznych projektanci już dawno stanęli przed problemem ograniczeń w paśmie (dla standardowego trybu VGA mamy około 10 MB/s). Pierwszy po-ważny przyrost zapotrzebowania z 10 na 55 MB/s był możliwy do zaspokojenia początkowo jedynie poprzez zastosowanie drogich układów pamięci V-RAM. Brak innych rozwiązań spowodowany był dodatkowo małą szerokością magistral systemowych. Architektura ISA zadowalała się przez długie lata szynami 16-bitowymi, nawet w obrębie sterowników graficznych. Przyrost szerokości tych magistral umożliwił zaspokojenie głodu pasma już przy użyciu tanich układów pamięci. Bardzo szybko dokonał się skok z 16 na 32 bity, 64 bity należy do standardu a coraz częściej pojawiają się już modele wyposażone w szyny 128-bitowe.--Jeszcze raz warto podkreślić, że mowa o wewnętrznych magistralach kart graficznych, łączących ich procesory z blokami pamięci. Komunikacja sterownika ze światem zewnętrznym przebiega nadal poprzez 32-bitową szynę PCI lub AGP. Niestety nie wszystkie produkty przyozdobione naklejkami „128" i „64" mogły w istocie rzeczy poszczycić się adekwatnymi parametrami. W zaciszu kolorowych pudełek czekały na użytkownika często niemiłe niespodzianki. Ich przyczyna leżała w konfiguracji z niepełną obsadą pamięci. Względy ekonomiczne decydowały o tym, iż szerokość portu danych pojedynczych chipów pamięciowych wynosi zwykle 16 bitów. W zależności od szerokości magistrali wewnętrznej sterownika i aktualnej obsady pamięci mogła wystąpić następująca sytuacja: Cztery układy pamięciowe, każdy po 512 kB, tworzą wprawdzie w sumie blok 2 MB ale dostęp do pamięci odbywa się w trybie 64-bitowym. Jeśli nawet kontroler wyprowadza szynę podwójnej szerokości, nie może ona być w pełni wykorzystana. Produkt w tej konfiguracji nie powinien być reklamowany jako 128-bitowy. Dopiero uzupełnienie do 4 MB uprawnia do posługiwania się takim określeniem. Redukcja obciążenia magistrali pamięciowej karty graficznej możliwa jest do osiągnięcia na drodze obniżenia częstotliwości odchylania pionowego. Większość ludzi zadowoli się z pewnością częstotliwością 75 Hz i nie zauważy różnicy między 90 a 120 Hz. Spory fragment populacji odbiera wręcz negatywnie częstotliwości powyżej 100 Hz. Wzrost zapotrzebowania na szybką pamięć graficzną i konieczność racjonalnego zagospodarowania pasma przepustowego wynika z wielu dodatkowych powodów. Techniki multimedialne narzucają nowe wymagania i stanowią dodatkowe obciążenia. Pamięć graficzna służy przecież nie tylko jako prosta matryca pikseli, z których buduje się obraz. Jest również miejscem przechowywania bitowych map tekstur oraz buforem Z. Głębokość buforu Z jest różna i waha się w granicach 16 (Matrox Millennium) do 32 bitów (Spea Fire GL). Filtracja bilinearna tekstur pracuje zwykle w trybie uśredniania z czterech otaczających punktów (cztery cykle odczytu). Jeszcze gorszy bilans prezentuje Mip-Mapping. W generowaną średnią zaangażowane są dwie mapy bitowe o różnej rozdzielczości (8 cykli odczytu). Skalowanie w pionie to często ekstrapolacja z dwóch linii. W trybie pracy z przełączanymi buforami (Double Buffering) zarządza się ponadto dwoma blokami obrazowymi jednocześnie. Realizacja powyższych funkcji mnoży ogromną ilość dodatkowych cykli dostępu a przeznaczana na nie ilość czasu pozostaje bez zmian. Kontrolery graficzne profesjonalnych systemów multimedialnych (np. symulatorów) wyposaża się więc w oddzielne szyny pamięciowe kierowane do niezależnych bloków. Jednej z magistral przydziela się część pamięci dla potrzeb bufora Z i tekstur a druga obsługuje blok pamięci obrazowej. Nawet pozornie duża ilość zainstalowanej na karcie pamięci nie zawsze może sprostać pokładanym w niej zadaniom. Łatwo obliczyć, że w trybie True-Color (32 bity na piksel) i rozdzielczości 1280 x 1024 nawet 8 MB nie wystarcza do realizacji funkcji podwójnego buforowania: na karcie mieści się tylko jedna strona obrazu (5 MB). Kontroler Glint radzi sobie w tym wypadku zrzucając drugi bufor do pamięci operacyjnej PC co skutecznie blokuje magistralę PCI. Kilka przykładów wykorzystania pamięci na kartach z akceleratorami 3D przedstawia tabela 9.2. Tabela 9.2. Typowe wykorzystanie pamięci w akceleratorach 3D Pamięć na karcie; Rozdzielczość; Liczba kolorów; Bufory obrazowe (Front/Back); Bufor Z (16-bitowy); Pamięć dla tekstur; 1 MB; 320 x 200, 2^16; 0,12 MB/0,12 MB; 0,12 MB; 0,63 MB 2 MB; 640 x 480, 2^16; 0,59 MB 70,59 MB; 0,59 MB; 0,24 MB 2 MB; 800 x 600; 2^8; 0,46 MB / 0,46 MB; 0,92 MB; 0,17 MB 4 MB; 640 x 480, 2^16; 0,59 MB 70,59 MB; 0,59 MB; 2,24 MB 4 MB; 800 x 600; 2^16; 0,92 MB 7 0,92 MB; 0,92 MB; 1,25 MB Rodzaje pamięci graficznych Technika podwójnego buforowania (Double Buffering) umożliwia wprawdzie bardziej racjonalne wykorzystanie mocy obliczeniowej akceleratora i wpływa na płynną prezentacje obrazu ale stanowi też dodatkowe obciążenie dla magistrali pamięciowej (przeplatające się cykle zapisu i odczytu), źródłem naprzemiennych cykli R/W jest również konieczność komunikacji z buforem Z. Dostępu tego typu nie lubią w szczególności pamięci SDRAM i SGRAM, które osiągają swoje szczytowe parametry w długich sekwencyjnych cyklach. Każde przełączenie buforów (Back/Front) to szereg operacji zapisu wymuszających zerowanie pamięci obrazu i inicjujących bufor Z wartością +00. Jeśli maksymalna przepustowość magistrali wynika z przyjętej architektury oraz typu pamięci to w danym przypadku nie da jej się przekroczyć. Wartość ta rzutuje w pewnym sensie na ograniczenie stopnia złożoności przedstawianych scen, ilości trójkątów elementarnych, rodzaju efektów świetlnych, sposobu teksturowania, aktywowanych filtrów itp. Podwyższenie dowolnego z tych czynników musi owocować obniżeniem częstotliwości odtwarzania obrazu. Jedyne wyjście z tego impasu oferują (przynajmniej na jakiś czas) nowe i coraz to szybsze typy pamięci, oszczędna nią gospodarka a często nawet pewne sztuczki ograniczające pasmo przenoszenia. Do jednej z nich należy tzw. rasteryzacja. Jądro akceleratora 3D przeprowadza obliczenia kolorów z dokładnością do 32 bitów. Aby zredukować szerokość zajmowanego pasma, zapis obliczonych wartości (do pamięci graficznej) odbywa się jednak w trybie 16-bito-wym. Oszczędności maj ą naturalnie swoje ujemne strony, które są niestety natychmiast wykrywane przez nasz zmysł wzroku. Oko ludzkie wyłapuje przejścia między kolorami i widzi w tym miejscu nieistniejące w gruncie rzeczy linie podziału (Mach-Banding). W takich krytycznym obszarach procesor musi rozmazywać nieco obraz (Dithering) bowiem oko ludzkie jest mniej czułe na barwne szumy, niż na wyraźne granice międzykolorowe. Rozmycie linii uzyskuje się poprzez nieregularne domieszki interpolowanych kolorów pośrednich. Pamięci graficzne przeszły dosyć długą drogę rozwojową a prace nad ich udoskonalaniem trwają nieprzerwanie. Oto krótki przegląd powszechnie stosowanych typów. DRAM Elementarna komórka pamięci realizowana jest za pomocą pary złożonej z jednego tranzystora i kondensatora. Komórki zgrupowane są w pola a dostęp do pojedynczego bitu odbywa się poprzez wybranie adresu wiersza i kolumny. W trybie przyspieszonym (Fast Page Modę) wystarczy podawać adresy kolumn przy niezmiennym adresie wiersza co daje skrócony o połowę czas dostępu w stosunku do pełnego adresowania. DRAM jest typem-prekursorem w grupie pamięci dynamicznych i wywodzi się z czasów pierwszych komputerów PC. Stosowana jest (z małymi modyfikacjami) do dnia dzisiej-szego jako pamięć operacyjna o czym decydują jednak inne kryteria. Ten standardowy typ pamięci nie jest obecnie w stanie sprostać wymaganiom zastosowań multimedialnych. EDO i BEDO DRAM Stanowi odmianę pamięci DRAM i udostępnia pasmo nieco powyżej 200 MB/s. Podczas odczytu dane utrzymywane są na wyjściu aż do momentu gdy pole pamięci gotowe jest do przekazania następnego słowa. W ten sposób kontroler graficzny może przygotowywać się do następnego cyklu odczytu będąc jeszcze w trakcie przejmowania danych z cyklu poprzedniego. Zachodzenie na siebie kolejnych cykli (technika pipeline) jest podstawą pracy w stylu Burst (stąd wywodzi się nazwa Burst EDO, BEDO DRAM). Dopiero ten zysk na czasie pozwolił na taktowanie pamięci bez cykli oczekiwania, tzn. każdy cykl zegara pamięci wyzwala l cykl odczytu. Cztery równolegle połączone układy pamięci (pracujące w konfiguracji 4x16 = 64bity) taktowane zegarem 50 MHz osiągają maksymalny transfer 400 MB/s (8 x 50). Średnia prędkość transmisji jest naturalnie mniejsza, bowiem kontroler musi kiedyś wreszcie zmienić adres wiersza i opuścić tryb Fast-Page. O ile pamięci EDO stosowane były bardzo powszechnie, typ BEDO umarł śmiercią naturalną nie doczekawszy się powszechnej akceptacji. SDRAM Synchroniczna odmiana pamięci DRAM wytwarzana przez wszystkich liczących się producentów. Typowa częstotliwość taktowania sięga 100 MHz. Szybkie odmiany tego typu przystosowane są do zegara 125 MHz co pozwala osiągnąć transfer 640 MB/s (przy szerokości magistrali 64 bity). W przeciwieństwie do klasycznych układów pamięci DRAM, które wymagają precyzyjnie uformowanych sygnałów RAS i CAS (Rów Address Strobe, Coliimn Address Strobe) pamięci synchroniczne mają własny kontroler przetwarzający impulsy zegarowe na niezbędne sygnały sterujące. Metoda taka zmniejsza wymogi nakładane na dokładność wykonania ścieżek na płytkach drukowanych i gwarantuje zwiększenie prędkości taktowania. Bloki pamięci SDRAM i SGRAM organizowane są zwykle w dwa banki obsługiwane naprzemiennie (technika interleave) co pozwala na nakładanie się w czasie kolejnych cykli dostępu. SGRAM Odmiana synchronicznej pamięci SDRAM cechująca się dodatkowym trybem pracy blokowej przy zapisie (Block-Write). Pojedyncze układy pamięci mają szerokość 32 bitów, co stanowi korzystny czynnik przy obsadzie 2-4 MB. Częstotliwość zegara taktującego osiąga również zakres 100 MHz. MDRAM Multibank-DRAM, należy do grupy synchronicznych pamięci DRAM. W odróżnieniu od SDRAM i SGRAM (w trybie burst współpracują ze sobą 2 banki) mamy tu do czynienia z przypadkiem nakładania się na siebie 8 banków. Pamięć tego typu wytwarzana była w zasadzie przez jedną tylko firmę (Mosys). Bazowała na logicznych jednostkach pamięci 256 kB, każda po 8 banków 32 kB. Na rynku powszechne były układy l MB integrujące w sobie cztery jednostki pamięci. Technologia ta umożliwiała (w skali laboratoryjnej) taktowanie zegarem 100 - 125 MHz, ale rozrzut parametrów i niedoskonałość wykonania elementów w produkcji masowej ograniczał częstotliwość do 85 MHz. Z pamięcią MDRAM współpracował kontroler ET-6000 będący dziełem firmy Tseng. Fizyczna szerokość magistrali wewnętrznej kontrolera ET-6000 wynosi w zasadzie 32 bity ale jej organizacja jest dość nietypowa. Sterownik wymienia dane z pamięcią przez jeden z dwóch portów o szerokości 16 bitów. Każdy z nich wyprowadza multiplekso-waną szynę komunikacyjną, którą przesyłane są adresy i dane. Szyny taktowane są sygnałem zegarowym pamięci (ok. 100 MHz), a przesyłanie odbywa się zarówno podczas narastającego jak i opadającego zbocza zegara. Szczytowa przepustowość takiej szyny sięga więc (w przeliczeniu na jeden układ MDRAM) ok. 400 MB/s. Dwa bloki pamięci cechują się więc wydajnością wykraczającą poza parametry typowe dla pamięci V-RAM. Pamięć MDRAM, podobnie jak wiele innych rozwiązań przeszła już do historii. RDRAM Mianem tym określana jest pamięć Rambus. Zapewnia ona stosunkowo duży transfer (po 500 MB/s na każdy układ) zawdzięczany głównie taktowaniu bardzo szybkim zegarem 250 MHz. Dane przenoszone są podczas obydwu zboczy zegara. Tak szybka technika stwarza oczywiście szereg problemów. Rosną wymagania odnośnie stosowanych materiałów i precyzji wykonania. Szerokość magistrali pojedynczego układu ograniczona została do 8 bitów, co bynajmniej nie ułatwia integracji w strukturach aktualnie rozwijanych sterowników. RDRAM wymaga specjalnego sterownika pamięci co naturalnie podnosi koszty produktów. Sterowniki łączące dwa kanały RDRAM (każdy po 667 MB/s) pozwoliły na przełamanie po raz pierwszy bariery l GB/s. V-RAM Specjalny typ pamięci opracowany przez firmę Texas Instruments. Skrót V-RAM (Video-RAM) nie oddaje w pełni istoty sprawy. Z punktu widzenia kontrolera graficznego układy pamięci Y-RAM zachowują się jak normalne pamięci DRAM. Osiągane pasmo przenoszenia przy zapisie magistralą 64-bitową nie przekracza 200 MB/s. Cechą szczególną jest niezależny port84 wyjściowy prowadzący do przetwornika RAM-DAC. Transfer na tym odcinku sięga 360 MB/s, a kontroler nie musi tracić cykli zegarowych na wytworzenie sygnału dla monitora. Nie występuje tu, charakterystyczne dla wszystkich innych typów pamięci zjawisko stopniowego blokowania ograniczonego przecież pasma przepustowego magistrali, w miarę wzrostu rozdzielczości i ilości odtwarzanych kolorów. Można więc zachować wysoką (lub co najmniej ergonomiczną) częstotliwość odświeżania ekranu przy pracy w trybach o wysokiej rozdzielczości rzędu 1600 x 1280. Wbrew powszechnie panującej opinii, pobór danych z portu wyjściowego nie jest całkowicie niezależny od cykli zapisu. Odczyt pamięci V-RAM przebiega według następującego algorytmu: • Cykl inicjowany jest przez kontroler, który adresuje punkt początkowy żądanego obszaru. • Układ V-RAM wyprowadza automatycznie bit po bicie zawartość kolejnych komórek tego obszaru do specjalnego rejestru przesuwnego. • Stojące do dyspozycji w powyższym rejestrze dane mogą być pobierane przez przetwornik RAM-DAC. • Do wyczerpania zawartości rejestru pamięć może być zapisywana. W tym sensie możliwy jest jednoczesny zapis i odczyt. Pamięci V-RAM obciążone są opłatami licencyjnymi na rzecz wynalazcy, firmy Texas Intstruments, przez co zbyt drogie dla rynku powszechnego konsumenta. WRAM WRAM (Window RAM) stanowi wariant V-RAM poszerzony o pewne dodatkowe, realizowane sprzętowo funkcje blokowe (Aligned Move i Fiil). Układy tego typu wytwarzane były wyłącznie przez firmę Samsung i montowane na wczesnych wersjach kart (Millenium-1) firmy Matrox. RAM-DAC Układ RAM-DAC (Random Access Memoiy-Digital/Analog Converter} stanowi stopień wyjściowy karty graficznej i przetwarza zakodowany cyfrowo obraz pobierany z pamięci na analogowe sygnały RGB sterujące tor wizyjny monitora. Stąd też pochodzi bardziej precyzyjna nazwa tego typu pamięci: Dual Ported RAM W zasadzie są to trzy niezależne przetworniki, po jednym dla każdego z kolorów R, G. B. Czasami można spotkać bardziej rozbudowane rozwiązania, jak np. te z wyjściami na dwa monitory. Karta posiada wtedy 2 niezależne zestawy po 3 przetworniki RAM-DAC. Prędkość maksymalna z jaką może przebiegać ta konwersja (Pixel Clock) leży w zakresie od około 130 MHz (tanie produkty powszechnego użytku) do prawie 300 MHz (akceleratory najnowszej generacji). Rozwój technologii ostatnich lat pozwolił również na stopniowe integrowanie przetworników w obrębie struktury scalonej samego akceleratora, co wcześniej było niemożliwe. Szybkie przetworniki (powyżej 200 MHz) wytwarzane były wyłącznie jako niezależne układy scalone. Wymagana częstotliwość taktowania wynika z aktualnie ustawionej rozdzielczości i częstotliwości odświeżania obrazu, a nie zależy od ilości dostępnych w danym trybie barw. Sam fakt obecności na karcie przetwornika klasy 220 MHz nie oznacza bynajmniej, że pracuje on stale z tą częstotliwością. Szerokość pasma magistrali pamięciowej prowadzącej do przetwornika jest wykładnikiem częstotliwości odświeżania. Zależy ona oczywiście od parametrów pamięci a konkretnie szybkości z jaką można ją odczytywać. Na nic przecież nie zda się tryb pracy w wysokiej rozdzielczości z ogromną ilością dostępnych barw, jeżeli obraz na ekranie drga i oczy odmawiają posłuszeństwa. ( Za dolną granicę postrzegania takich drgań przyjmuje się (nie wnikając w obowiązujące w tej dziedzinie przeróżne normy instytucji ochrony pracy) w praktyce 72 - 75 Hz. Ocena jest często mocno subiektywna, zależy od treści obrazu i konkretnego człowieka. Jeszcze większe rozbieżności panują przy określaniu górnej granicy. Twierdzenie, że im więcej tym lepiej jest w ostatnim czasie poddawane ostrej krytyce.} Może się zdarzyć, że ze względu na posiadany monitor nigdy nie wykorzystamy pełnych możliwości oferowanych przez RAM-DAC. Aktualna częstotliwość pracy wynika z następującego obliczenia: f#RAMDAC = kxpxlxf#H gdzie: k współczynnik bezpieczeństwa, zapewnia rezerwę na okresy powrotów linii i ramki, p - ilość punktów w linii, l - ilość linii na ekranie (p x l opisuje rozdzielczość obrazu w pikslach, np. 800 x 600), f#H - częstotliwość odświeżania obrazu. Łatwo teraz obliczyć do czego naprawdę potrzebny jest RAM-DAC klasy 220 MHz. W trybie 1024 x 768 przy 75 Hz wystarczy przecież częstotliwość 79 MHz. Dopiero dla 1600 x 1200 i 85 Hz zegar taktujący musi przełączyć się na najwyższe obroty. Generowane przez RAM-DAC przebiegi powinny być impulsami prostokątnymi o możliwie stromych zboczach. Stopień wyjściowy przetwornika to 3 źródła prądowe (dla każdego z kolorów RGB oddzielnie) tak dobrane, by wytwarzały na rezystancji 37,5 Q (Wartość stanowi wypadkową otrzymaną z równoległego połączenia impedancji obciążenia obydwu końców linii: dwa razy po 75 Q. Niedopasowanie impedancji może być przyczyną szkodliwych zjawisk o charakterze falowym (odbicia i interferencje). Ich obecność objawia się na ekranie w formie uciążliwych efektów (mory, zwielokrotnianie krawędzi) psujących jakość obrazu i meczących oczy.) następujące poziom napięcia: • 0 V dla punktu czarnego, • 0,7 V dla punktu o maksymalnej jaskrawości (biały kolor gdy R=G=B= 0,7 V). W stanie idealnym przetwornik wytwarza przebieg prostokątny o tak wąskich impulsach by można było zapalać i gasić nawet pojedyncze piksele ekranu. Każdy z punktów może wówczas świecić pełnym blaskiem przez cały czas trwania impulsu. Prawa fizyki ograniczają niestety stromość zboczy. Sygnał nie może narastać nieskończenie szybko, mamy wyraźnie zaznaczone fazy narastania i opadania. Faza pełnej jasności trwa nieco krócej niż szerokość impulsu mierzona u podstawy. Na ekranie o wysokiej rozdzielczości pojedynczy biały punkt na czarnym tle w pierwszej połowie swego życia znajduje się w fazie gdzieś między czarnym a białym chociaż taka barwa wcale nie jest pożądana. To samo ma miejsce przy gaszeniu piksela. W trybie l 280 i częstotliwości RAM-DAC 135 MHz czas życia punktu można określić na 7,4 ns (1/135 MHz). Firma S3 wymienia na liście parametrów dla swoich zintegrowanych przetworników czasy narastania i opadania 3 ns mierzone na poziomach 10 i 90 %. Powyższe liczby unaoczniają obecność fizycznych granic ostrości obrazu . Sytuacji nie polepszają również często stosowane filtry wyjściowe typu n instalowane w celu ograniczenia skutków szkodliwego promieniowania. Strome zbocza produkuj ą przebiegi harmoniczne sięgające zakresu GHz. Promieniowanie tego typu trzeba wyeliminować, tak by produkty mogły uzyskać stosowne certyfikaty (w Europie CE, w USA FCC). W tyle nie pozostają również producenci monitorów, którzy w trosce o redukcję zakłóceń emitowanych przez swoje wyroby, zaopatrują wszelkie przewody sygnałowe w opaski z pierścieni ferrytowych. Dopasowanie monitora do karty Kombinacja monitora z kartą graficzną stanowi o jakości z jaką prezentuje się cały komputer wraz ze swoją mocą obliczeniową. Moment zakupu karty graficznej powinien być poprzedzony solidnym przemyśleniem. Decyzja jest tym bardziej trudna im szerszy jest wybór. Specjaliści od marketingu starają się zasypywać potencjalnego klienta ogromem dobrze brzmiących pojęć, które często nie stanowią same w sobie nic szczególnego. Testy porównawcze w gazetach komputerowych i Internecie pozwalają na udowodnienie każdej tezy, bowiem zawsze można dobrać taki program testujący by wykazać to co się zamierza. Dobrze jest wiedzieć, które z głównych parametrów karty i monitora odgrywają decydującą rolę i jakimi kryteriami należy się kierować przy wyborze określonego produktu. Rzadko kto nie musi uwzględniać czynników ekonomicznych, ale nawet ktoś mogący sobie pozwolić na wszystko powinien sobie zdawać sprawę z tego co dany produkt może mu zaoferować i czy jest w ogóle w stanie wykorzystać jego zalety. Parametry karty Przy obecnej sytuacji cenowej stanowczo należy odradzić nabywanie jakichkolwiek kart z pamięcią poniżej 4 MB bowiem są one tylko minimalnie tańsze od obsady 8 MB. Koszt ewentualnego późniejszego rozszerzenia pamięci jest zawsze większy i też pod warun-kiem, że dana karta w ogóle przewiduje taką możliwość a potrzebne „kostki" są jeszcze gdzieś do zdobycia. Wszystkie nowoczesne akceleratory 3D mają co najmniej 16 MB, a niektóre 32 MB. Warto sobie jednak zdawać sprawę, iż tak duża ilość pamięci niczego nie przyspiesza jak długo nie wchodzimy w zakres zastosować 3 D. 2 MB EDO-RAM wystarczy w zupełności do zwykłych zastosowań komputera klasy PC pracującego pod kontrolą systemu operacyjnego z interfejsem graficznym. Karty tej klasy obrazują tekst, tabele i proste rysunki przy rozdzielczości 800 x 600 w trybie True-Color. Zakres High-Color pokrywany jest do rozmiarów 1024 x 768 a jeśli zadowala nas 256 kolorów można sięgnąć po raster 1280 x 1024 jeszcze z ergonomiczną częstotliwością odchylania 75 Hz. Cieszący się dużą popularnością ze względu na lepsze proporcje format 1152 x 1024 nakłada ostrzejsze wymagania na monitor i nie zawsze jest wspomagany przez sterowniki graficzne. Praca w trybach powyżej 800 x 600 może być uciążliwa jeśli przewody połączeniowe nie są dobrej jakości (uwaga na wszelkie przełączniki i przedłużacze). Często zmusza to do wyboru czcionki ekranowej o większych wymiarach. W zastosowaniach DTP i podobnych sięgnąć trzeba wyżej. Praca w trybie True-Color przy rozdzielczości 1280 x 1024 lub ergonomiczne 1600 x 1200 w High-Color wymaga obsady 4 MB (V-RAM lub WRAM) przy współudziale przetwornika RAM-DAC co najmniej 220 MHz. Osiągnięcie częstotliwości odświeżania powyżej 69 Hz w obecności przetwornika klasy 175 MHz nie jest w tych trybach możliwe. Dzisiaj już prawie każda karta VGA ma wbudowane funkcje akceleratora wideo, tzn. jest zdolna do odtwarzania sekwencji wideo z dysku kompaktowego lub twardego i prezentowania ich na ekranie monitora z całkiem przyzwoitą ilością klatek na sekundę (tego typu przyspieszanie funkcji wideo nie ma nic wspólnego z digitalizacją lub obróbką materiału filmowego przejmowanego ze źródeł zewnętrznych). Sekwencje wideo w formacie AVI nie stanowią nadmiernego obciążenia dla komputera klasy PC. Z kolei MPEG-I, szyty na miarę procesora Pentium 100, nawet przy pracy pełnoekranowej nie wymaga żadnej specjalnej karty graficznej. Większość znajdujących się na rynku produktów osiągnęła pewien stosunkowo wysoki poziom rozwoju, a niewielkie między nimi różnice wychwycić można jedynie przy pomocy specjalnych programów testujących. Jeśli zadowala nas projekcja z prędkością 10 fps przy niezbyt wyszukanej jakości dźwięku, wystarczy nawet maszyna 486 i odtwarzacz software^wy Xing. MPEG-I wspomagany sprzętowo gwarantuje pełne 25 fps i stereofoniczny dźwięk nawet na komputerze 486. To co w istotny sposób odróżnia od siebie poszczególne chipy graficzne to podejście do skalowania okna wideo (zoom). Kontroler typu Virge interpoluje w poziomie (wytwarza dodatkowe piksle w obrębie linii), w pionie natomiast dubluje ślepo linie, na czym cierpi jakość obrazu. Karty z wyjściem TV (SCART, S-Video), często wyposażone jeszcze w modulator HF, są przeznaczone raczej do prezentacji obrazów niż do ich opracowywania i tworzenie. Czcionki ekranowe w tym formacie są trudno czytelne. Ograniczenia techniczne wbudowane w standardy telewizyjne (pasmo toru wizji i zależności czasowe toru odchylania) nie pozwalają na wyjście poza rozdzielczość 800 x 600. Tuner telewizyjny realizowany jest najczęściej w formie dodatkowego modułu nasadzanego na przystosowaną do tego celu kartę graficzną. Połączenie odbywa się własną niestandardową magistralą lub ujednoliconym złączem Scenie Highway wprowadzonym przez firmę S3. Można też spotkać rozwiązania kombinowane, np. All-in-Wonder firmy ATI (SVGA, niezły akcelerator 3D, wejście i wyjście wideo i tuner telewizyjny). Komputer PC wyposażony w tuner z dekoderem teletekstu ma szerokie pole do popisu przy automatycznym przetwarzaniu szerokich strumieni informacji, np. notowań giełdowych. Wybrane strony można wiązać w sekwencje i zapisywać do plików w formacie AVI (np. 320 x 240 / 25 fps). Miłośnicy gier komputerowych z pewnością nie potrzebują drogich zestawów opracowanych dla potrzeb CAD. Surowy i co najwyżej cieniowany obraz jest nie do zaakceptowania, tu oczekuje się realizmu w możliwie najwyższej formie a nie precyzji modeli siatkowych. Użytkownik PC, który posługuje się komputerem jako rozbudowaną maszyną do pisania nie zauważy różnicy między drogim produktem markowym z 32 MB pamięci SGRAM, a tanim egzemplarzem no-name z obsadą 2 MB RAM, jeśli tylko częstotliwość odświeżania obrazu przewyższa nieco 70 Hz. Rozsądnym kompromisem na codzień jest kompatybilność SVGA, a w miarę potrzeb akcelerator 2D lub 3D. Najważniejsze parametry karty graficznej skupiają się nadal w obrębie pamięci graficznej: jej rozmiaru, typu i szybkości. Czynniki te decydując rozdzielczości, ilości odtwarzanych barw oraz o częstotliwości odświeżania obrazu. Jakość monitora Ostatnim ogniwem w łańcuchu przetwarzania informacji w formie graficznej jest monitor. Pada on najczęściej ofiarą cięć oszczędnościowych, szczególnie przy zakupie kompletnych systemów przez początkujących niedoświadczonych użytkowników. Publikowane czasem dane statystyczne potwierdzają smutną prawdę, że dużo łatwiej przekonać jest klienta do zakupu doskonałej karty graficznej niż doinwestowania do monitora. Tymczasem dopasowanie parametrów zainstalowanej graficznej do posiadanego monitora pełni kluczową rolę w optymalnym wykorzystaniu całości dostępnych zasobów. Poziom techniczny obrazu na ekranie zależy nie tylko od klasy monitora ale również od czystości sygnału wytwarzanego przez kartę. Podobnie jak większość członów składowych systemu PC ich jakość może być różna. Uważać należy szczególnie przy zakupie zestawów komputerowych. Ostra kalkulacja cenowa stanowi dużą szansę trafienia na oba składniki o stosunkowo słabej jakości. Optymalne dopasowanie parametrów monitora i karty odgrywa kluczową rolę. Słaby monitor nie wykorzysta wysokorozdzielczych trybów oferowanych przez sterownik. Dobry monitor marnuje się współpracując z kartą o marnej jakości. W łańcuchu połączonych ze sobą elementów decyduje najsłabsze ogniwo. Będące w powszechnym użyciu monitory dają się zaliczyć do jednej z grup. Podstawą do takiej klasyfikacji jest dopuszczalna częstotliwość odchylania poziomego. Aby monitor mógł pracować w określonym trybie musi w pierwszym rzędzie sprostać wymogom częstotliwości odchylania poziomego. Ergonomiczna częstotliwość odświeżania leży nieco powyżej 72 Hz i ten warunek spełnia prawie każdy monitor. Program konfigura-cyjny sterownika karty graficznej proponuje często w wysokich trybach pracy częstotliwości odchylania dochodzące do 200 Hz. Zawsze jednak można zażądać redukcji do 75 Hz, z korzyścią dla zmniejszenia obciążenia magistrali pamięciowej karty. Tabela 9.3. Ergonomiczny tryb pracy monitora, w zależności od maksymalnej częstotliwości odchylania pionowego Dobry monitor marnuje się współpracując z kartą o marnej jakości. W łańcuchu połą f#H max [kHz];Ergonomiczne tryby pracy; 38; 640 x 480 / 72 Hz; 48; 800 x 600 / 72 Hz; 64; 1024x768/80Hz, 64; 1152x864/71 Hz; 78; 800x6007 124Hz, 78; 1024x768/97Hz, 78; 1280 x 1024 /73Hz, 78; 1152x864/86Hz; 85; 1024 x 7687 106 Hz, 85; 1152x864/94Hz, 85; 1280 x 1024/80Hz, 85; 1536x 1152/71 Hz; 102; 1280 x 1024/94Hz, 102; 1 536 x 1152/83 Hz, 102; 1600 x 1200/80Hz; Dany tryb pracy nakłada określone wymogi na pasmo toru wizyjnego zainstalowanego monitora. Wartości minimalne zebrane zostały w tabeli 9.4. Tabela 9.4. Minimalne wymagania toru wizyjnego monitora Rozdzielczość; f#v [Hz]; f#H [kHz]; Pasmo wideo [MHz]; 640 x 480; 75; 38; 25-30 800 x 600; 75; 48; 45-50 1024 x 768; 75; 62; 70-80 1280 x 1024; 75; 80; 120- 135 1600 x 1200; 75; 95; 200 - 220 Przekroczenie określonej dla danego monitora maksymalnej częstotliwości odchylania poziomego o więcej niż 5% stanowi w pierwszej mierze niebezpieczeństwo zerwania synchronizacji a teoretycznie nawet i uszkodzenia, chociaż nowe modele bronią się przed takim traktowaniem przy pomocy wbudowanych mechanizmów ograniczających. Wykroczenie poza pasmo toru wizyjnego nie stanowi natomiast żadnego zagrożenia. Po prostu sygnał o wysokiej jakości nie będzie odtwarzany wraz z wszystkimi szczegółami (nieostry obraz). Programy instalacyjne Procedury konfiguracyjne dołączane do karty graficznej próbują wydobyć to co najlepsze z oferowanych im zasobów. Dobre programy instalacyjne potrafią rozpoznać monitor jeśli naturalnie jest to możliwe (DDC). Często typ monitora można wyłowić z bazy danych programu. Jeśli nie można go tam znaleźć, pozostaje przestudiowanie instrukcji obsługi i ręczne wprowadzanie danych. Ilość możliwych do ustawiania opcji jest różna. Mało który z programów prezentuje ich tak wiele jak instalator produktów Elsa: Nieumiejętne posługiwanie się tak potężnymi narzędziami może spowodować uszkodzenie mało odpornych monitorów. Kanał informacyjny VESA DDC DDC (Display Data Channel) jest znormalizowanym przez VESA złączem komunikacyjnym pomiędzy monitorem a kartą graficzną. Wymiana danych na tym odcinku umożliwia wprowadzenie w życie idei Plug&Play w stosunku do monitora, który może przekazać swoje preferencje sterownikowi graficznemu. Twórcom systemu przyświecał na szczęście cel nadrzędny jakim było maksymalne uproszczenie całego przedsięwzięcia, między innymi poprzez wykorzystanie istniejącego okablowania. Typowy przewód łączący analogowy monitor ze sterownikiem VGA nie jest bowiem w pełni wykorzystany (Uwga na tanie przedłużacze i przełączniki (Switch-Box) z niepełną obsadą kontaktów.). Kanał DDC posługuje się liniami 12 i 15. W zależności od ich znaczenia wyróżniamy trzy odmiany systemu: DDC1 DDC1 jest typowym kanałem jednokierunkowym, w którym to jedynie monitor przekazuje informacje do karty sterownika. Transmisja ma charakter synchroniczny odbywa się linią 12. Sygnał zegarowy pobierany jest z końcówki 14 (synchronizacja pozioma). W każdym takcie zegara monitor wysyła 128 bitowy blok informacyjny EDID (Exten-ded Display Identification}. Blok taki zawiera oprócz funkcji identyfikacyjnych (typ urządzenia, producent, wymiar przekątnej ekranu itp.) również istotne dane techniczne takie jak maksymalnie dozwolone częstotliwości odchylania, zalecane parametry czasowe i amplitudowe przebiegów synchronizujących oraz poziomy sygnałów wideo. Monitor może też przekazać współczynnik nieliniowości swojego toru wideo (funkcja Gamma) oraz uznane przez siebie tryby DPMS. Znajomość funkcji Gamma monitora upraszcza czasochłonny proces kalibracji barw. DDC2B DDC2 jest w przeciwieństwie do szeregowego przekazu złączem DDC1 magistralą pracującą w oparciu o protokół I^2 C. Kanał tego typu umożliwia już obustronną wymianę informacji. Potrzebny jest jednak drugi przewód łączący. Linia 15 przejmuje funkcję sygnału SGL a impulsy SDA przesyłane są końcówką 15. DDC2B ma okrojoną listę dostępnych operacji. Sterownik może w zasadzie tylko zażądać od monitora przesłania bloku EDID lub obszerny zestaw danych skupiony w bloku VDIF (VESA Display Inter-face File) DDC2AB Jest rozszerzeniem DDC2B o funkcje znane z systemu Access.Bus. Możliwe jest więc przekazywanie rozkazów sterujących do monitora, np. dla skorygowania położenia obrazu lub regulacji jaskrawości. W chwili obecnej na rynku obecne są niektóre urządzenia zgodne ze standardem DDC1 i ewentualnie DDC2B. Należy jednak nadmienić, że nie brak innych rozwiązań, choćby z zastosowaniem klasycznego złącza szeregowego RS-232, magistrali Access.Bus, a ostatnio ponownie odkrytego USB. Podział mocy obliczeniowej Akceleratory 2D ograniczały się głównie do wyzwalanego jednym rozkazem CPU przesuwania i wypełniania obrazów prostokątnych. Komplikacja zagadnień związanych z przedstawianiem obiektów 3D przewyższa do dnia dzisiejszego stopień rozwoju techniki komputerowej. Nieodzowne stało się więc sprzętowe wspomaganie jednostki centralnej przy wykonywaniu funkcji graficznych. Obraz 3D generowany w czasie rzeczywistym stanowi mimo stosowania rozbudowanych akceleratorów graficznych nadal stosunkowo duże obciążenie dla CPU. Skuteczność działania procesorów wspomagających zależy oczywiście w dużej mierze od obranej strategii działania, tj. określenia grupy zadań przejmowanych od centralnego procesora systemowego. Kluczową rolę pełni jednak dopasowanie mocy obliczeniowej CPU i akceleratora, z uwzględnieniem przepustowości magistrali łączącej te dwa podsystemy. Jakkolwiek akcelerator 3D można pod wieloma względami uznać za wyspecjalizowany i niezależny procesor graficzny, przetwarza on dane podsuwane mu przez CPU. Pełne wykorzystanie potencjału obliczeniowego takiego podsystemu możliwe jest jedynie w warunkach gwarantujących stały dopływ materiału wejściowego. Ten optymalny stan ma rzadko miejsce i ograniczany jest zarówno przez wydajność centralnego procesora systemowego jak i przepustowość magistrali wewnętrznej doprowadzającej dane do akceleratora. Akceleratory starszych generacji zdane były wyłącznie na dominującą powszechnie magistralę PCI. Jej specyfikacja określa szczytową prędkość przesyłania danych na 133 MB/s. Standard AGP (Accelerated Graphics Port) dopuszcza maksymalny transfer do wysokości 532 MB/s. We wcześniejszej części rozdziału przedstawiony został podział zadań pomiędzy procesor systemowy a akcelerator. CPU posługując się swoją jednostką zmiennoprzecinkową przygotowuje parametry trójkątów elementarnych po czym przekazuje je do procesora rasteryzującego Spróbujmy oszacować szerokość pasma które trzeba poświęcić na powyższą komunikację. Jeśli przyjąć, że każdy narożnik definiowany jest przy pomocy 120 bajtów , średnio skomplikowana sceneria rozłożona na 10000 trójkątów stanowi blok danych o rozmiarach 1,2 MB. Przy założeniu, że akcelerator ma nieograniczoną wydajność (i przyjmuje oraz przetwarza dowolną ilość informacji) a wymagana szybkość odtwarzania obrazu 3D ma wynosić 25 klatek na sekundę, generowany jest strumień o szerokości 30 MB/s. Miarą rzeczywistej wydajności akceleratorów 3D (określanych w tym kontekście często jako 3D-Engine) jest naturalnie zdolność do przetwarzania pewnej liczby trójkątów w jednostce czasu. Wielkość tą wyraża się w jednostkach tps (Triangles per Second} lub Pol/s (Polygons per Second) uzupełnianych stosownymi przedrostkami k lub M. Podawane przez producentów liczby towarzyszące oferowanym na rynku produktom należy przyjmować ze stosowną rozwagą. Stanowią one zwykle wymiar szczytowych możliwości samego akceleratora, które trudno osiągnąć w warunkach realnych. Już samo rozciągnięcie okna na cały ekran może położyć kres optymistycznej kalkulacji. Maksymalna częstotliwość odbudowywania obrazu 3 D powiązana jest ścisłą zależnością z zapasem mocy obliczeniowej akceleratora i stopniem komplikacji obiektów (sumaryczną liczbą trójkątów). Karta o wydajności 200 000 tps może budować i wyświetlać obraz 3D z prędkością 10 fps tylko pod warunkiem ograniczonego stopnia komplikacji sceny: tutaj nie więcej niż 20 000 trójkątów. Kres możliwości magistrali PCI leży jak wiadomo w okolicach 133 MB/s. Oddając całą przepustowość szyny na potrzeby grafiki 3D, można przesłać około 1,1 miliona trójkątów ale oczywiście przy założeniu, że ilość taką jest w stanie przygotować centralny procesor. Moc obliczeniowa procesorów rośnie w takim tempie, że warunek ten jest w zasadzie zawsze możliwy do spełnienia, pod warunkiem pominięcia nadmiernie skomplikowanych zagadnień związanych z oświetleniem. Nowoczesny koprocesor graficzny 3D (na przykład Yoodoo) rysuje przy włączonej filtracji bilinearnej około 45 MTex/s (45 milionów teksturowanych pikseli na sekundę). Z ograniczeń magistrali PCI wynika maksymalny rozmiar kreślonego trójkąta: 45 milionów pikseli/1,1 miliona trójkątów = 41 pikseli/trójkąt Scenerie typowych gier zbudowane są z dużo większych trójkątów, tak że czynnikiem hamującym jest często akcelerator 3D a nie CPU. Przedstawiona kalkulacja dowodzi, że wąskie gardło na linii wymiany danych może się przemieszczać w zależności od stopnia komplikacji sceny. Przy dużych trójkątach oczekuje CPU a przy małych akcelerator. Przykłady rozwiązań akceleratorów graficznych Większość produkowanych aktualnie akceleratorów 3D to układy kombinowane, integrujące w sobie funkcje 2D i SVGA. Ich instalacja wymaga wymontowania klasycznego sterownika graficznego i umieszczenia w jego miejscu karty akceleratora. Zajmują więc nadal jedno złącze (Single-Slot) magistrali PCI lub dedykowane gniazdo AGP. W zasadzie jedyny wyjątek w chwili stanowi układ Voodoo współpracują z napotkaną kartą. System taki okupuje więc dwa złącza magistrali PCI przez co określany jest mianem Dual-Slot. Układ Voodoo Akcelerator Voodoo jest produktem firmy 3Dfx. Układ montowany był na kartach przez wielu różnych producentów. Pomijając drobne różnice występujące w dołączanych sterownikach programowych, moc obliczeniowa Voodoo utrzymuje się na stałym poziomie. Sterownik ten jest „czystym" akceleratorem 3D (nie dysponuje klasycznymi funkcjami VGA) przez co musi współpracować z jakąś kartą graficzną, która wyświetla obraz. Obie karty łączą się ze sobą przy pomocy zewnętrznej pętli (Analog Loop Throngh). Sygnał wyjściowy karty graficznej jest albo podawany w niezmienionej formie do monitora albo też zastępowany sygnałem wytwarzanym przez układ Voodoo. Rolę przełącznika analogowego pełnią zwykle klucze elektroniczne, choć spotykane były i rozwiązania z przekaźnikami elektromechanicznymi. Układ scalony Voodoo integruje w sobie dwa procesory graficzne co w szerokim zakresie rozwiązuje problem ograniczonego pasma magistrali pamięciowej. Procesor tekstur posiada własną pamięć i przeprowadza filtracje oraz korekcje perspektywy mogąc wykorzystywać dla swoich potrzeb pełne pasmo 400 MB/s. Drugi z procesorów przejmuje obliczone tekstury, przeprowadza porównanie współrzędnej Z i wypełnia pamięć obrazu oraz przełącza bufory pamięciowe wyzwalając cykle odczytu dla wytworzenia sygnału dla monitora. Układ Voodoo-2 Układ ten przedstawia funkcjonalnie dwa niezależne procesory Voodoo i stąd bierze się jego oznaczenie (Voodoo-2 lub CCoodoo2). Akcelerator ten do niedawna jeszcze stanowił punkt odniesienia ze względu na swą potężną moc obliczeniową. Podobnie jak Riva-TNT może pokryć wielokąt dwiema teksturami w jednym cyklu przetwarzania. * * * Rozdział 10. System odmierzania czasu Możliwość precyzyjnego odmierzania odcinków czasowych ma istotne znaczenie w pracy systemu. Oto przykładowe operacje wymagające dokładnego określenia czasu: • Czas wykonywania pewnych fragmentów programu musi być niezależny od obecnego w danym systemie procesora i szybkości jego taktowania. Wiele programów, w tym gry, wymaga wbudowanych opóźnień lub kontroli upływu czasu rzeczywistego. Czas wykonania klasycznej pętli programowej for w bardzo dużym stopniu zależy od sprzętu. • W oparciu o zegar czasu rzeczywistego system operacyjny prowadzi ewidencję plików dyskowych i katalogów, posługując się między innymi datą i czasem ich założenia lub modyfikacji. Jest to jedyny sposób ustalenia, który z plików zawiera aktualne dane. • Wiele funkcji systemowych, np. odświeżanie pamięci dynamicznej, wymaga okresowego wykonywania z dokładnie określoną częstotliwością. • Mechanizmy napędowe stacji dysków elastycznych wymagają podawania bardzo precyzyjnych impulsów. Układ 8253/8254 Klasyczna architektura komputera PC/XT i PC/AT zawiera jeden programowalny generator typu 8253 lub 8254. Ten drugi różni się minimalnie od pierwszego posiadaniem dodatkowego rozkazu Read-Back. Nowoczesne modele AT, zwłaszcza 386 i 486, dysponują niekiedy dwoma takimi generatorami. Uproszczony schemat blokowy układu 8253 przedstawiony jest na rysunku 10.1. Na układ ten składają się trzy w pełni niezależne generatory oznaczone numerami O, l i 2. Każdy z bloków generacyjnych zawiera niezależne wejścia GATE i CLK oraz wyjście OUT. Dla potrzeb programowania generatory połączone są wewnętrzną 8-bitową magistralą. Zestaw dodatkowych sygnałów sterujących umożliwia procesorowi dwukierunkowy dostęp do rejestrów sterujących każdego z nich. Centralnym elementem każdego z generatorów jest programowany licznik CE (Counting Element), którego ustawiona wstępnie w fazie programowania zawartość może być - zależnie od trybu pracy - na różne sposoby zmniejszana. 16-bitowa liczba przeznaczona do zapisania w rejestrze CE danego generatora dostarczana jest (w porcjach po 8 bitów) magistralą wewnętrzną układu do dwóch stowarzyszonych z danym rejestrem CE rejestrów pośrednich CW#H i CW#L. Tam oczekuje na przepisanie do CE pierwszym impulsem na wejściu CLK, który nadejdzie po zaprogramowaniu danego generatora. W podobny sposób, tj. poprzez jednobajtowe rejestry pośrednie CR#H i CR#L, odbywa się transport zawartości rejestru CE w rozkazach sprawdzających jego stan. Oryginalny generator 8253 umieszczony jest w obudowie 24-końcówkowej, obecnie jednak jego struktura zintegrowana jest zwykle w jednym z układów scalonych wysokiej skali integracji tworzących „obudowę" procesora. Wyprowadzenia układu w wersji DIL 24 przedstawione są na rysunku 10.2. Opis znaczenia końcówek układu 8253 podano poniżej. GATE0 - GATE2=Gate) - wejścia sygnałów aktywujących (bramkujących) generatory 0-2. CLK0 - CLK2=(Clock) - wejścia sygnałów taktujących dla generatorów 0-2. OUT0 - OUT2=Output) - wyjścia generatorów 0-2. D0 - D7=8-bitowa, dwukierunkowa magistrala danych. Kierunek transmisji ustalany jest sygnałami ~WR i ~RD. ~CS=(Chip Select) - niski poziom logiczny na tym wejściu wprowadza układ 8253 w stan programowania. Poziom logiczny na wejściu ~CS nie ma wpływu na pracę generatorów. ~WR=(Write) - procesor wymusza niski poziom logiczny na tym wejściu, chcąc zapisywać dane do wewnętrznych rejestrów generatorów. ~RD=(Read) - procesor wymusza niski poziom logiczny na tym wejściu, chcąc odczytywać dane z wewnętrznych rejestrów generatorów. A0 - A l=Wejścia adresujące w trybie programowania jeden z generatorów 0- 2 lub rejestr stanu układu. Możliwe są następujące kombinacje linii adresowych: A0; A1; Adresowany rejestr 0; 0; licznik CE0 1; 0; licznik CEl 0; 1; licznik CE2 l; l; rejestr stanu V#CC=Wejście napięcia zasilającego (+5V). GND= Masa zasilania. Każdy z trzech generatorów układu 8253 może być niezależnie zaprogramowany do pracy w jednym z sześciu trybów. Tylko dwa z nich znajdują zastosowanie w PC, ale nie zapominajmy, że układ ten nie tylko tam jest stosowany. Cechą wspólną wszystkich trybów jest odliczanie „w dół" od ustawionej wartości początkowej 16-bitowego licznika CE. Generator rozpoczyna pracę w danym trybie natychmiast po załadowaniu rejestru sterującego. Moment ten będziemy nazywać stanem początkowym. Tryb 0. W stanie początkowym wyjście OUT znajduje się w stanie 0. Po załadowaniu do wybranego licznika CE wartości N (oznaczającej liczbę zliczanych impulsów taktujących) następuje odliczanie impulsów podawanych na wejście CLK do chwili wyzerowania licznika CE, co powoduje pojawienie się na wyjściu OUT stanu 1. Stan ten utrzymywać się będzie aż do nadejścia następnego słowa sterującego, programującego generator do pracy w trybie 0. Odliczanie impulsów taktujących ma miejsce tylko wtedy, gdy na wejście GATE podany jest wysoki poziom logiczny. OUT0 - OUT2=Output) - wyjścia generatorów 0-2. DO - D7=8-bitowa, dwukierunkowa magistrala danych. Kierunek transmisji ustalany jest sygnałami ~WR i ~RD. ~CS=(Chip Select) - niski poziom logiczny na tym wejściu wprowadza układ 8253 w stan programowania. Poziom logiczny na wejściu ~CS nie ma wpływu na pracę generatorów. ~WR=(Write) - procesor wymusza niski poziom logiczny na tym wejściu, chcąc zapisywać dane do wewnętrznych rejestrów generatorów. ~RD=(Read) - procesor wymusza niski poziom logiczny na tym wejściu, chcąc odczytywać dane z wewnętrznych rejestrów generatorów. AO - A l=Wejścia adresujące w trybie programowania jeden z generatorów 0- 2 lub rejestr stanu układu. Możliwe są następujące kombinacje linii adresowych: A0; A1; Adresowany rejestr 0; 0; licznik CE0 1; 0; licznik CEl 0; 1; licznik CE2 l; l; rejestr stanu V#CC=Wejście napięcia zasilającego (+5V). GND= Masa zasilania. Każdy z trzech generatorów układu 8253 może być niezależnie zaprogramowany do pracy w jednym z sześciu trybów. Tylko dwa z nich znajdują zastosowanie w PC, ale nie zapominajmy, że układ ten nie tylko tam jest stosowany. Cechą wspólną wszystkich trybów jest odliczanie „w dół" od ustawionej wartości początkowej 16-bitowego licznika CE. Generator rozpoczyna pracę w danym trybie natychmiast po załadowaniu rejestru sterującego. Moment ten będziemy nazywać stanem początkowym. Tryb 0. W stanie początkowym wyjście OUT znajduje się w stanie 0. Po załadowaniu do wybranego licznika CE wartości N (oznaczającej liczbę zliczanych impulsów taktujących) następuje odliczanie impulsów podawanych na wejście CLK do chwili wyzerowania licznika CE, co powoduje pojawienie się na wyjściu OUT stanu 1. Stan ten utrzymywać się będzie aż do nadejścia następnego słowa sterującego, programującego generator do pracy w trybie 0. Odliczanie impulsów taktujących ma miejsce tylko wtedy, gdy na wejście GATE podany jest wysoki poziom logiczny. Tryb 1. W stanie początkowym wyjście OUT jest w stanie 1. Pierwszy impuls podany na wejście CLK powoduje pojawienie się na wyjściu OUT stanu O, który utrzymuje się do końca zliczania impulsów taktujących. Pierwszy impuls pojawiający się na wejściu CLK po przejściu licznika CE przez stan 0000, powoduje ponownie wystawienie na wyjściu OUT logicznej jedynki. Układ wytwarza więc pojedynczy impuls niskiego poziomu logicznego o czasie trwania N x T#CLK, gdzie N jest pierwotną zawartością licznika CE, a T#CLK jest okresem przebiegu taktującego podawanego na wejście CLK. Stan sygnału GATE musi być utrzymany na poziomie logicznej jedynki przez cały cykl zliczania. Jeżeli sygnał GATE zmieni swój poziom na zero, jego powrót do poziomu wysokiego spowoduje ponowne załadowanie licznika CE wartością N. Możliwe jest oczywiście zapisanie nowej wartości N w czasie pracy generatora (cyklu zliczania), ale będzie ona uwzględniona dopiero od następnego impulsu GATE. Tryb 2. Działanie trybu 2. jest analogiczne do opisanego wyżej trybu l. aż do momentu osiągnięcia przez licznik CE wartości 0001, tj. tuż przed końcem odliczania. Stan wyjścia OUT (znajdującego się dotychczas w stanie l) zostaje wówczas na czas jednego okresu przebiegu taktującego sprowadzony do niskiego poziomu logicznego. Licznik CE ładowany jest powtórnie wartością N i cykl powtarza się. Zliczanie ma miejsce tylko dla GATE = l i jest wstrzymywane na czas, gdy GATE=0. W trybie 2. generowany jest --jak widać - okresowo impuls szpilkowy o okresie N x T#CLK i szerokości T#CLK Tryb 3. Działanie układu 8253 w tym trybie jest identyczne z działaniem w trybie l. aż do momentu osiągnięcia przez licznik CE wartości N/2. Następuje wówczas zmiana stanu wyjścia OUT z l na 0. Stan OUT = O utrzymuje się do momentu wyzerowania licznika CE, po czym zmienia się na 1 Opisany proces przebiega tylko wtedy, gdy na wejście GATE podany jest stan 11; w przeciwnym razie na wyjściu OUT utrzymuje się stały wysoki poziom logiczny. „Zewnętrznie" działanie układu 8253 w trybie 3. sprowadza się do generacji przebiegu prostokątnego o okresie N x TCLK. Układy wewnętrzne pracują jednak nieco inaczej, nie odliczają bowiem impulsów taktujących do osiągnięcia przez licznik wartości N/2. Zamiast tego odbywa się dwukrotnie zliczanie impulsów po dwa, co nakłada ograniczenie na dokładność określenia długości generowanych impulsów. Kwantem odmierzanego czasu jest okres przebiegu taktującego TCLK i nie można przy nieparzystych N żądać jego podziału na pół. Przy N parzystych generowany jest przebieg prostokątny o współczynniku wypełnienia (stosunku czasu trwania stanu wysokiego do czasu trwania stanu niskiego w ramach jednego okresu) równym 1 / 2. W przypadku nieparzystej wartości N układy sterowania ładują liczniki CE wartością N - 1. Powoduje to, że faza wysokiego poziomu logicznego trwa (N + 1) x T#CLK / 2, natomiast faza poziomu niskiego (N - 1) x T#CLK / 2. Generowany jest więc przebieg prostokątny o współczynniku wypełnienia nieznacznie większym od 1 / 2. Z oczywistych względów W musi być co najmniej równe 2. Tryb 4. W stanie początkowym wyjście OUT jest w stanie wysokim. Pierwszy impuls podany na wejście CLK wpisuje do licznika CE zadaną wartość N. W stanie GATE = l następne impulsy taktujące powodują zmniejszanie licznika do osiągnięcia wartości 0000. Poziom na wyjściu OUT opada wówczas do zera na czas T#CLK W trybie 4. mówimy o programowym wyzwalaniu licznika, bowiem moment rozpoczęcia odliczania określony jest dokonaniem zapisu do rejestru sterującego. Tryb 5. W przeciwieństwie do pracy w trybie 4., licznik wyzwalany jest sprzętowo poprzez zmianę poziomu na wejściu GATE z O na 1 Powoduje to zapisanie do licznika CE wartości A; i rozpoczęcie odliczania. Sygnał na wyjściu OUT przyjmuje poziom zera logicznego po N+1 cyklach przebiegu taktującego, począwszy od impulsu wyzwalającego GATE. Przedwczesne (przed zakończeniem odliczania), ponowne podanie impulsu GATE powoduje odnowienie wartości N, a więc generowany impuls nigdy nie będzie krótszy od założonej wartości. Wszystkie generatory układu scalonego 8253/8254 zainstalowanego w komputerze PC/XT lub AT taktowane są tą samą częstotliwością zegarową, równą 1,19318 MHz. Sygnał CLK wytwarzany jest w oddzielnym układzie generacyjnym w sposób niezależny od procesora. Przyporządkowanie generatorów układu obrazuje rysunek 10.3. Programowanie generatora 8253/8254 Poszczególne generatory układu dostępne są programowo poprzez poniższe porty. Adres;Rejestr 040h (048h); licznik generatora 0 041h(049h); licznik generatora 1 042h (04Ah); licznik generatora 2 043h (04Bh); rejestr sterujący Rejestry liczników CE można zapisywać i odczytywać. Rejestr sterujący (wspólny dk całego układu scalonego) może być tylko zapisywany. Numery portów podane w nawiasach dotyczą drugiego układu 8254, instalowanego w niektórych komputerach AT-386 i 486; konfiguracja dodatkowego układu opisana jest w punkcie Drugi układ 825^ i jego zastosowanie. Układ 8253 zostaje wprowadzony w tryb programowania po przesłaniu do rejestn sterującego (port 043h) rozkazu o następującej budowie: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0 bity 7-6=Wybór generatora: 00 - generator 0, 01 - generator l, 10 - generator 2, 11 - dla układu 8253 kombinacja zabroniona, dla 8254 rozkaz Read-Back. bity 5-4=Rodzaj operacji: 00 - przepisanie zawartości licznika CE do rejestrów CR#H i CR#L, 01 - zapis lub odczyt tylko mniej znaczącego bajtu licznika CE (LSB), 10 - zapis lub odczyt tylko bardziej znaczącego bajtu licznika CE(MSB), 11 - zapis lub odczyt obydwu bajtów licznika CE. bity 3 - l=Tryb pracy generatora: 000 - tryb 0, 001 - tryb l, 010 - tryb 2, 011 - tryb 3, 100 - tryb 4, 101 - tryb 5. bit 0 Sposób odliczania: 0 - zliczanie w kodzie binarnym (16-bitowym); FFFFh - 0000h Iub 65535#d-0, 1- zliczanie w kodzie BCD; 9999d - 0. W następnej kolejności należy przesłać dane opisujące stan początkowy licznika CE zaadresowanego bitami 7-6. Rozkazy zapisujące tylko jedną połowę licznika CE uzupełniane są przez układy sterujące w taki sposób, że pozostała część CE wypełniana jest zerami. Rozkaz adresowany do określonego generatora jest ważny do czasu wysłania następnego rozkazu. Oznacza to, że stan dostępnych przez porty 040h - 042h liczników 0-2 można zmieniać „na gorąco" podczas pracy generatora. Obowiązuje jednak sprecyzowane w bitach 5-4 znaczenie i ilość akceptowanej przez rejestry informacji. Nie można więc, nie wysyłając nowego rozkazu, modyfikować wyłącznie bardziej znaczącego bajtu licznika, jeżeli pierwszy rozkaz ustawiał jego mniej znaczący bajt. Identyczne ograniczenia obowiązuj przy odczycie stanu licznika. W ramach obowiązywania jednego rozkazu można odczytywać tylko tę część licznika, która została tym rozkazem zapisana; w szczególności może to być zawartość całego licznika. Aktualny stan licznika CE dowolnego z generatorów można uzyskać przez odczyt odpowiedniego portu instrukcją in. Instrukcja ta, skierowana do portu licznika danego generatora, nie sięga bezpośrednio do rejestru CE, lecz do rejestrów zatrzaskowych CR#L i CR#H, które oddzielają CE od wewnętrznej magistrali układu. Aby umieścić w tych rejestrach zawartość CE, należy najpierw wysłać do portu 043h słowo rozkazu z wy-zerowanymi bitami 5-4. Bity 7-6 takiego rozkazu identyfikują oczywiście odpowiedni generator, a bity 3 - 0 są w tej operacji ignorowane. Dopiero teraz można bezpiecznie zastosować rozkaz in (odpowiednio raz lub dwa razy) dla odczytania aktualnego stanu licznika CE. Przykład: inov al,00h ; adresowany generator O out 43h,al ; przepisz zawartość CE do CRL i CRH in al,40h ; odczytaj zawartość CRL do AL mov al,ah ; przepisz AL do AH in al,40h ; odczytaj zawartość CRH do AL xchg al,ah ; zamień połówki rejestru AX -> AX = CE Nieco skomplikowany sposób odczytu rejestrów CRL i CRn wynika z faktu, że operan-dem rozkazu in może być jedynie rejestr AL (lub AX), natomiast przez port 040h dostępny jest najpierw rejestr CR#L, a następnie CR#H. Zwróćmy również uwagę, że dla układu 8253 nie ma możliwości odczytania stanu początkowego licznika CE, ustawionego trybu pracy ani tego, czy generator programowany był jednym, czy dwoma bajtami. Niemożliwe jest również sprawdzenie, czy licznik odlicza w kodzie binarnym, czy BCD. Możliwościami uzyskania tych danych dysponuje natomiast, dzięki wbudowanemu rozkazowi Read-Bcick, układ 8254. W odpowiedzi na ten rozkaz układ zwraca bajt będący źródłem informacji o sposobie zaprogramowania generatora. Rozkaz ten udostępnia również alternatywną metodę odczytania aktualnego stanu licznika CE. Rozkaz Read-Back przekazywany jest przez port rejestru sterującego 043h. 1; 1 ; bit 5; bit 4; bit 3; bit 2 ; bit l; 0 bity 7-6 =11- sygnatura rozkazu. bit 5=0 - rozkaz podania stanu licznika CE. bit 4=0 - rozkaz podania statusu. bit 3=1 - wybór licznika 2. bit 2=1 -wybór licznika 1. bit 1=1 - wybór licznika 0. bit 0=Zawsze 0. Widzimy, że jednym rozkazem Read-Back można odwołać się do kilku generatora jednocześnie. Układ 8254 reaguje na rozkaz podania stanu licznika CE zwracając (w zależności od sposobu zaprogramowania) jeden lub dwa bajty w porcie odpowiadającym danemu g neratorowi. Rozkaz określenia statusu (ustawiony bit 4 bajtu rozkazu Read-Back) wyprowadza do portu wybranego generatora następujący bajt statusowy: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2 ; bit l;bit 0; bit 7=Stan wyjścia OUT: 0 - wyjście w stanie niskim, 1 - wyjście w stanie wysokim. bit 6= 0 - licznik CE został załadowany i może być odczytany, 1 - CE jeszcze nie jest załadowany. bity 5-4=Tryb programowania licznika CE: 00 - kombinacja zabroniona, 01 - zapis lub odczyt tylko mniej znaczącego bajtu CE, 10 - zapis lub odczyt tylko bardziej znaczącego bajtu CE, 11 - zapis lub odczyt obydwu bajtów CE. bity 3-1=Tryb pracy generatora: 000 - tryb 0, 001 - tryb 1, 010 - tryb 2, 011 - tryb 3, 100 - tryb 4, 101 - tryb 5. bit 0=Sposób odliczania: 0 - zliczanie w kodzie binarnym (16-bitowym); FFFFh - 0000h lub 65535#d-0, 1 - zliczanie w kodzie BCD; 9999#d - 0. Zegar systemowy Rysunek 10.4. przedstawia schematycznie zasadę funkcjonowania zegara systemowego. Generator 0 zaprogramowany jest do pracy w trybie 2. i pobiera przebieg taktujący CLK o częstotliwości l,19318 MHz. Licznik CE tego generatora ustawiany jest na wartość FFFFh, co daje współczynnik podziału 65 536. W wyniku tego, krótkimi impulsami o częstotliwości 18,2065 Hz wyzwalane jest przerwanie sprzętowe na linii IRQ0. Prowadzi to do periodycznego wywoływania procedury INT 08h, obsługującej to przerwanie. Procedura ta inkrementuje każdorazowo stan 32-bitowego licznika zlokalizowanego w obszarze danych BIOS począwszy od adresu 0040:006Ch. Adres;Szerokość;Znaczenie 0040h:006Ch; słowo; mniej znaczące słowo licznika 0040h:006Eh; słowo; bardziej znaczące słowo licznika 0040h:0070h;bajt;wskaźnik przepełnienia licznika Następnie sprawdzane jest, czy nowa zawartość licznika nie przekracza 24 godzin (l 573 040 impulsów zegara systemowego), a jeżeli tak, to licznik jest zerowany. Licznik ten jest podstawowym źródłem informacji o upływającym czasie, wykorzystywanym przez system operacyjny. Zlicza on jednak czas od momentu startu systemu, a zatem nie pozwala jednoznacznie określić bieżącej daty i czasu. Dane te musimy wprowadzić podczas startu systemu operacyjnego poleceniami systemu date i time lub za pomocą innego programu, wpisującego odpowiednie wartości do wspomnianego obszaru pamięci. Modele AT wyposażone są standardowo w zegar czasu rzeczywistego (z podtrzymaniem bateryjnym), którego zawartość jest automatycznie przepisywana do pamięci komputera w chwili startu systemu. W przypadku modelu XT podtrzymywany bateryjnie zegar czasu rzeczywistego znajduje się na ogół na wielofunkcyjnej karcie rozszerzenia Multi l/O, zaś aktualizacją czasu i daty zajmuje się dostarczany wraz z kartą dedykowany program (na przykład clock.com), uruchamiany zwykle w pliku poleceń autoexec.bat. Układ odświeżania pamięci dynamicznej Pamięć operacyjna komputera jest pamięcią dynamiczną (ang. DRAM- Dynamie Ran-dom Access Memory). Nośnikiem informacji są w niej ładunki elektryczne uwięzione w krysztale półprzewodnika. Na skutek będących nie do ominięcia właściwości fizycznych materiału ładunki te uchodzą do podłoża układu scalonego, tak więc komórka pamięci dynamicznej pozostawiona sama sobie ma tendencje do stopniowej utraty informacji. Aby temu zapobiec, infonnację zmagazynowaną w komórce należy co pewien czas odświeżać. Charakterystyczną cechą tego rodzaju pamięci jest to, że każda operacja odczytu komórki pamięci powoduje automatycznie jej odświeżenie. Poszczególne komórki pamięci zorganizowane są w wiersze i kolumny. Organizacja taka sprawia, że odczyt dowolnej z komórek powoduje jednoczesne aktywowanie (odświeżenie) całego wiersza lub kolumny, zależnie od organizacji bloku DRAM. Schemat blokowy mechanizmu odświeżania pamięci przedstawiony jest na rysunku 10.5. Projektanci komputera PC zarezerwowali dla potrzeb układu odświeżania pamięci dynamicznej generator numer 1. Licznik CE tego generatora otrzymuje wartość początkową ł 8 (I2h) - programowany jest tylko mniej znaczący bajt. Generator pracuje w trybie 3., a na wejście CLK podawany jest sygnał taktujący o częstotliwości 1,19318 MHz. Generowany jest więc przebieg prostokątny o współczynniku wypełnienia 1/2 (N=18 jest parzyste) i częstotliwości 1,19318 MHz/18 = 66,288 kHz. Sygnał ten kierowany jest do kanału 0 układu DMA, a jego narastające zbocze wywołuje regularnie co 15 ms żądanie obsługi. Kanał O DMA jest zaprogramowany do normalnej transmisji typu pa-mięć-urządzenie wejścia-wyjścia. Układy sterowania pamięcią, tj. dekodery adresu i wzmacniacze odczytu, zostają pobudzone do pracy, co powoduje odświeżenie wszystkich komórek wiersza lub kolumny pamięci. Adresowane przez układ DMA słowo zostaje oczywiście wystawione na magistralę danych, jednak żadne z urządzeń wejścia-wyjścia nie czuje się zobligowane do jego odebrania, toteż znika ono z magistrali w trakcie jej następnego cyklu. Kolejna transmisja kanałem O DMA sięga do następnej komórki i tak po pewnym czasie odświeżeniem objęty zostaje cały obszar pamięci. Współczynnik podziału równy 18 dostosowany był do układów pamięci znajdujących się na rynku w czasach powstawania modelu PC. W ostatnich latach nastąpił ogromny postęp w technologii produkcji układów scalonych. Nowoczesne układy pamięci nie wymagają już tak częstego odświeżania. Zbyt częste, zbędne dostępy do pamięci powodują naturalnie spowolnienie pracy całego systemu. Dla każdego modelu komputera można indywidualnie poeksperymentować, zmniejszając częstotliwość pracy układu odświeżania. Zbyt duże przerwy czasowe objawiają się błędami pamięci, które sygnalizowane są przez układy kontroli parzystości. Generowane jest wówczas przerwanie NMI, co powoduje wyświetlenie komunikatu i zatrzymanie systemu. Wprowadzane przez nas zmiany w częstotliwości pracy układu odświeżania nie mają oczywiście charakteru trwałego; ponowne załadowanie systemu przywraca wartości początkowe. Przykładowy program w języku Turbo C pozwoli na kilka doświadczeń na tym polu: #include #include /* program REFR reguluje częstotliwość odświeżania pamięci */ int main (int argc , char *argv[]} { int refr ; if(argc < 2) /* nie podano częstotliwości odświeżania! */ { printf("\n Brak parametru!\n Wywołanie: refr \n "); return(l); } refr = atoi(argv[1]); if(refr < 2 || refr > 255) /* podano złą częstotliwość */ { printf("\n Zły parametr! licznik = O...255\n"); return(2); } outp(0x43,0x56); /* wyślij słowo sterujące 01010110 */ outp(0x41,refr); /* zaprogramuj kanał l generatora*/ /* wartością refr */ printf("Nowy licznik = %d\n",refr); return (0); } Wartość parametru programu REFR jest współczynnikiem podziału W licznika CE. Im większe /V, tym większe będą przerwy pomiędzy kolejnymi cyklami odświeżania pamięci. W testowanym przez autora komputerze AT-386 taktowanym zegarem 40 MHz, program si.exe (System Info) z pakietu Norton Utilities 6.0 podał w punkcie CPU Speed współczynnik 29 dla N = 2 i 41 dla N = 255, można więc istotnie zaobserwować wzrost mocy obliczeniowej. Jeżeli N będzie zbyt duże, należy liczyć się z możliwością zawieszenia się systemu w najmniej oczekiwanym momencie wraz ze wszystkimi tego koń- sekwencjami (np. niezapisaniem plików dyskowych). Zachowanie się systemu z podniesionym współczynnikiem W należy gruntownie przetestować. Od jakości użytych modułów pamięci RAM zależy, jak wysokie /V zniesie nasz komputer zanim wystąpi błąd parzystości. Należy wreszcie pamiętać, że nie wszystkie nowoczesne płyty główne „poddają się" operacji zmiany częstotliwości odświeżania pamięci, dlatego też może się zdarzyć, że wykonanie programu REFR nie przyniesie żadnych efektów. Obsługa głośnika Schemat blokowy zespołu współpracującego z głośnikiem przedstawiony jest na rysunku 10.6. Do obsługi wbudowanego w komputer PC głośnika przeznaczony został generator 2. Dla wytwarzania przebiegu okresowego do sterowania głośnika przydatny jest tylko tryb 3., jako jedyny pozwalający na generację przebiegu okresowego o współczynniku wypełnienia zbliżonym do 1/2. Również tryb 2. wytwarza przebieg okresowy, ale o współczynniku wypełnienia bliskim jedności (szerokość impulsu wynosi 0,838 ms). Bezpośrednie sterowanie głośnika takim przebiegiem wytwarzałoby ton praktycznie niesłyszalny, ze względu na bezwładność membrany i dużą zawartość harmonicznych Prostokątny sygnał z wyjścia OUT2 napotyka na swej drodze klucz sterowany stanem bitu l rejestru 61 h (port B układu 8255). Stanem wejścia GATE2 steruje bit 0 tego rejestru. Wspomniany rejestr należy fizycznie do programowanego układu wejścia-wyjścia 8255. Układ ten występuje tylko w modelu PC/XT, gdzie ma za zadanie między innymi obsługę klawiatury, odczytywanie nastaw przełączników konfiguracyjnych i sterowanie rejestrem maskowania NMI. Modele AT posługują się przy obsłudze klawiatury i pamięci konfiguracji innymi rozwiązaniami, toteż układ 8255 został z nich usunięty. Z oczywistych względów znaczenie i adres portu B zostały w architekturze AT odwzorowane sztucznie. Po przejściu przez klucz sygnał prostokątny jest wzmacniany i przepuszczany przez filtr dolnoprzepustowy, który ma ograniczyć wyższe harmoniczne przebiegu prostokątnego i przybliżyć przebieg do sinusoidy. Jakości wytwarzanych w ten sposób tonów nie należy przeceniać, gdyż wzmacniacz, o którym mowa, zawiera zwykle dwie bramki NAND i tranzystor, a wspomniany filtr to najczęściej dołączony równolegle do głośnika kondensator o pojemności 100 nF. Głośnik w komputerze PC służy przede wszystkim do prostej sygnalizacji, zaś zwolennicy muzyki o wysokiej jakości muszą zaopatrzyć się w specjalną kartę dźwiękową, np. Soimd Blaster lub AdLib. Istnieją też proste rozwiązania bazujące na łączu równoległym komputera (Covox). Jak wynika ze schematu blokowego przedstawionego na rysunku 10.6, aby pobudzić do drgań membranę głośnika, należy spełnić następujące warunki: • Generator 2 musi zostać zaprogramowany do pracy w trybie 3. • Podzielnik N należy ustawić zgodnie z żądaną częstotliwością, uwzględniając możliwości akustyczne głośnika. • Należy ustawić bit O portu B układu 8255 (port 061 h), podając stan l na wejście GATE2 i uruchamiając generator. • Ustawieniem bitu l portu 061 h należy włączyć klucz. Przykład: Niech żądana częstotliwość drgań równa się l 000 Hz. Współczynnik podziału wyniesie 1193180 Hz:1000 Hz = 1193=4x256 + 169 MSB = 4 (00000100#b) (bardziej znaczący bajt) LSB = 169 (10101001#b) (mniej znaczący bajt) mov al,10110110b ;generator 2, ustawienie obu bajtów ;licznika, tryb "3",licznik binarny out 43h,al ;wyślij rozkaz do rejestru ; sterującego 8253/8254 mov al,169 ;LSB out 42h,al ;ustaw mniej znaczącą część CE mov al,4 ;MSB out 42h,al ;ustaw bardziej znaczącą część CE in al,61h ;wczytaj zawartość portu B 8255 or al,00000011b ;ustaw bity O i l, reszta bez zmian out 61h,al ;odeślij zawartość z powrotem do portu B Powyższa sekwencja powoduje włączenie głośnika. Przebieg akustyczny o częstotliwości l kHz będzie od tej chwili aż do jego wyłączenia, bez udziału procesora. Wyłączenie głośnika można osiągnąć podając na wejście GATE2 zero logiczne lub otwierając klucz łączący wzmacniacz i generator: in al,61h and al,11111101b ; GATE2 = O out 61h,al lub in al,61h and al,11111110b ; otwórz klucz out 61h,al Częstotliwość drgań generatora można dowolnie zmieniać w czasie pracy układu. Załadowanie licznika CE nową wartością nie wymaga każdorazowego włączania i wyłączania generatora lub klucza. Wystarczy wprowadzić do portu 042h nowy podzielnik N (w formie LSB i/lub MSB, zależnie od wcześniejszego zaprogramowania generatora), a najpóźniej w 0,838 ms potem zostanie on przeniesiony do rejestru CE i układ zmieni swą częstotliwość pracy. Cała ta operacja jest absolutnie niewyczuwalna dla ucha ludzkiego. Opisana w tym rozdziale metoda umożliwia sterowanie głośnikiem w sposób całkowicie niezależny od procesora. Ten ostatni musi ingerować wyłącznie (nie licząc jednorazowego zaprogramowania rejestru sterującego 043h) w momentach zmiany częstotliwości tonu, włączenia i wyłączenia głośnika. Należy też wspomnieć tutaj o alternatywnej metodzie wytwarzania dźwięku. Korzysta się w niej z faktu, że wyjście OUT2 niezaprogramowanego generatora 2 znajduje się niewątpliwie w jednym ze stanów logicznych 0 lub 1. Wywołując okresowe zamykanie i otwieranie klucza łączącego wyjście generatora ze wzmacniaczem uzyskamy taki sam efekt, jak w przypadku obecności przebiegu prostokątnego na wyjściu OUT2 i zamkniętego na stałe klucza. Metoda ta wymaga jednak dwukrotnej ingerencji procesora w każdym cyklu generowanych drgań i tym samym nie nadaje się do generacji dźwięku „w tle". Niewątpliwą wadą tego rozwiązania jest też oczywista zależność częstotliwości wytwarzanych tonów od typu procesora i szybkości jego taktowania. Drugi układ 8254 i jego zastosowanie Niektóre modele AT, szczególnie przeznaczone do pracy pod kontrolą wielozadaniowych systemów operacyjnych, wyposażone są w drugi układ 8254. Wykorzystywany jest tylko jeden generator tego układu, pełniący rolę swego rodzaju systemowego zaworu bezpieczeństwa. Teoretycznie może się zdarzyć, że wadliwie działająca aplikacja lub wręcz sam system operacyjny zablokuje wszystkie przerwania sprzętowe - bądź to rozkazem CLI, bądź przez rejestr maskujący kontrolera przerwań 8259. Procesor znajduje się wtedy najczęściej w nieskończonej pętli programowej i nie reaguje na polecenia z klawiatury. Jedynym sposobem wyjścia z tej pętli jest naciśnięcie przycisku Reset komputera, co powoduje oczywiście daleko idące konsekwencje, przyjmujące najczęściej postać utraty przetwarzanych danych. Z pomocą przychodzi w tej sytuacji właśnie dodatkowy generator nazywany fail-safe timer. Na rysunku 10.7. przedstawiono schematycznie wszystkie możliwe źródła przerwania niemaskowalnego NMI. Wspomniany generator wyzwala okresowo przerwanie NMI. Procedura obsługi tego przerwania musi być na tyle inteligentna, by zidentyfikować jego faktyczną przyczynę. Zgodnie z rysunkiem mogą być cztery takie przyczyny: przerwanie NMI może pochodzić od kart rozszerzających, układów kontroli parzystości RAM, koprocesora arytmetycznego i właśnie od drugiego generatora 8254. Pierwsze trzy przyczyny powodują przejście do standardowej obsługi przerwania, tj. wypisania komunikatu na ekranie monitora i zatrzymania systemu. Ostatnia przywraca reakcję procesora na przerwania sprzętowe, a użytkownik odzyskuje kontrolę nad systemem. * * * 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. * * * Rozdział 12. Łącze równoległe Złącze równoległe jest jednym z najstarszych elementów architektury PC, który (nie licząc pewnych kosmetycznych zabiegów) utrzymuje się w niezmienionej formie przez cały szereg lat. Wiele innych elementów architektury przeszło w tym samym okresie czasu wiele burzliwych etapów rozwoju zakończonych powstaniem kolejnych generacji elementów lub wręcz zatwierdzeniem całkowicie nowych standardów. Modele prostych złącz równoległych były w użyciu na wiele wcześniej zanim pojawiły się mikrokomputery. Złącza takie służyły głównie do przekazywania danych pomiarowych. W momencie opracowywania przez firmę IBM pierwotnych zarysów PC zaistniała potrzeba implementacji prostego złącza równoległego obsługującego drukarkę. W tym celu sięgnięto po uproszczony wariant standardu Centronics posługującego się w pełnej wersji 29 liniami połączeniowymi i poziomami logicznymi TTL. W oryginale obydwa końce przewodu połączeniowego wyposażone były w specjalny 36-końcówkowy wtyk, którego duże rozmiary nie znalazły uznania wśród twórców architektury PC. Zmieniono więc * * * format gniazda po stronie komputera na bardziej kompaktowy typ SUB-D (DB-25) dysponujący 25 końcówkami. Aby zachować wszystkie oryginalne linie sygnałowe protokołu Centronics zredukowana została do ośmiu liczba przewodów masy (w oryginale 12). Posłużenie się gniazdem DB-25 pozwoliło na umieszczenie na tej samej blaszce maskującej znormalizowaną szczelinę obudowy (Slot) dodatkowego gniazda DB-9 stanowiącego wyprowadzenie złącza szeregowego PC. Magistral danych jest 8-bitowa i składa się z linii DO - D7. Ponieważ jedynym zadaniem łącza równoległego, wynikającym z przyjętej architektury systemu, była obsługa drukarki nie ma się co dziwić, iż specyfikacja obejmowała wyłącznie transfer jednokierunkowy (od komputera do drukarki). Oprócz 8-bitowej magistrali danych złącze równoległe wyposażone jest w cztery linie sterujące (~STR, -ALF, -INI, ~DSL). Drukarka mogła co prawda zgłaszać pewne sytuacje nienormalne (jak np. brak papieru) ale o transmisji danych w odwrotnym kierunku nie było mowy. Sprytni programiści szybko jednak odkryli możliwość takiej transmisji (tryb półbaj-towy). Oryginalna specyfikacja portu równoległego definiuje 5 linii statusowych (~ERR, SEL, PAP, ~ACK, BSY), z których część służy realizacji protokołu Centronics a część pozwala na sygnalizację pewnych stanów wyjątkowych. W omawianym trybie cztery spośród tych linii wykorzystuje się do transmisji w kierunku odwrotnym. Dwa następu-jące po sobie półbajtowe cykle pozwalają na organizację wymiany danych w tempie około 100 kB/s. Zachęciło to szereg firm do wypuszczenia na rynek kart sieciowych i kontrolerów SCSI opierających swe działanie na tak przerobionym złączu równoległym. W złącze równoległe wyposażano przez długi czas wszystkie, przeznaczone do współpracy z PC drukarki. Nie jest to oczywiście jedyna możliwość bowiem drukarka może również współpracować ze złączem szeregowym. Na rynku obecne są modele wyposażone bądź to w oba rodzaje wspomnianych złącz, bądź posiadające możliwość wymiany modułu obsługującego łącze (interfejsu). Port szeregowy, jakkolwiek wolniejszy od równoległego, pozwala na pokonanie dużo większych dystansów dzielących komputer od drukarki, co w niektórych zastosowaniach ma kluczowe znaczenie. Specyfikacja łącza szeregowego dopuszcza transmisję danych na odległość do 200 m natomiast łącze równoległe jedynie do około 5 m. Współczesne drukarki wykraczają poza rolę biernego odbiorcy poleceń i danych, dysponują bowiem zdolnością dwustronnej komunikacji z obsługującym je komputerem. Możliwości takie wymagają jednak korzystania z portów równoległych, które zostały rozbudowane o dodatkowe funkcje, nie ujęte w standardzie oryginalnego IBM-PC. W dalszej części tego rozdziału zaznajomimy Czytelnika również z tymi rozszerzeniami. Współczesny komputer PC może wyprowadzać na zewnątrz kilka złącz równoległych. Maksymalna liczba takich łącz, a tym samym akceptowanych przez BIOS i DOS drukarek, wynosi cztery. System operacyjny identyfikuje je poprzez oznaczenia LPT1, LPT2, LPT3 i LPT4. Każde z tych łącz musi być zatwierdzone przez BIOS w trakcie ładowania systemu. Informacja o liczbie łącz równoległych w systemie przechowywana jest w obszarze danych BIOS-u, w bitach 7. i 6. bajtu o adresie 0040:0011h. Niektóre starsze odmiany BIOS-u ignorują łącza LPT3 i LPT4. Poruszając się na poziomie systemu operacyjnego DOS możemy odwoływać się do drukarek przez symbole LPT1 - LPT4. Synonimem LPT1 jest PRN - domyślna drukarka systemu. Symbole te stanowią oznaczenia urządzeń i nie jest powiedziane, że z danym łączem LPTn musi współpracować drukarka. Jedynie programy obsługujące przerwania sprzętowe pochodzące od tych łącz (zwykle 1RQ5 i 1RQ7) ukierunkowane są na specyfikę obsługi drukarki z łączem równoległym. Specyfikacja portu równoległego PC ujęta została w standardzie IEEE-1284 wydanym po raz pierwszy w roku 1994. Standard ten definiuje 5 trybów pracy: • Tryb kompatybilny (Compatibility Modę). Podstawowy tryb nazywany też trybem Centronics od swego pierwowzoru. Transmisja jednokierunkowa, prędkość maksymalna może sięgać 200 kB/s, chociaż praktycznie rzadko kiedy przewyższa wartość 150 kB/s. • Tryb półbajtowy (Nibble Modę}. Pozwala nie tylko na wysyłanie ale i na odbiór danych poprzez 4 linie wejściowe. Oferuje kanał zwrotny o szerokości maksymalnej około 100 kB/s. • Tryb bajtowy PS/2 (By t e Mode). Tryb te korzysta ze zmodyfikowanego (nie należącego do standardu) dwukierunkowego portu danych. Modyfikacja taka musi być zaimplementowana przez producenta sprzętu i nie pomogą tu żadne sztuczki programowe. Utworzony w ten sposób kanał zwrotny oferuje pasmo maksymalne do 200 kB/s. Szerokość kanału podstawowego nie ulega zmianie (ok. 200 kB/s). Aktywacja kanału zwrotnego odbywa się za pośrednictwem bitu 5 rejestru sterującego, szczegóły w dalszej części rozdziału. • Tryb EPP (Enhanced Parallel Port). Kanał dwukierunkowy o szerokości maksymalnej 2,3 MB/s. Mimo tego w praktyce transfer rzadko przewyższa wartość l MB/s. Tryb nie jest na ogół stosowany do obsługi drukarek a raczej dla potrzeb skanerów, interfejsów pamięci masowej i kart sieciowych. • Tryb ECP (Extended Capabilities Port). Tryb udostępnia kanał dwukierunkowy o parametrach podobnych do EPP. W systemie tym korzysta się z dodatkowych buforów oraz kanału DMA. Wykorzystywany jest głównie do obsługi profesjonalnych drukarek i urządzeń kompleksowych takich jak Fax-Skaner-Drukarka. Pierwsze trzy tryby opierają się w swej przeważającej części na pierwotnej maszynie określanej jako SPP (Standard Parallel Port). Dwa pozostałe wymagają kompletnej modyfikacji sprzętu. Całkowicie odmienne są protokoły uzgadniające (Handshake) a i uzyskiwane prędkości transmisji leżą w całkiem innym zakresie. Wszystkie kolejne standardy są zgodne w dół. Należy jednak pamiętać, iż tryby bajtowy i półbajtowy nie były implementowane na wszystkich kartach i kontrolerach. Terminologia BIOS-SETUP Wybór trybu pracy złącza równoległego odbywa się za pośrednictwem programu konfiguracyjnego BIOS-SETUP w punktach noszących nazwę Onboard Parallel Mode lub Parallel Port Mode. W praktyce, w zależności od typu komputera, rodzaju zestawu układów płyty głównej (Chip-Set) i wersji BIOS, spotkać można różne kombinacje trybów podstawowych. Poniższe zestawienie zawiera większość możliwych opcji stanowiących kombinacje omówionych w dalszej części trybów podstawowych. • Printer Mode (Defaitlt Mode Standard Mode Normal Mode, SPP). Podstawowy tryb bazowy określony często również mianem Centronics. Transmisja ma charakter jednokierunkowy a próby manipulacji bitem 5 rejestru sterującego nie powodują żadnej dodatkowej reakcji. Kanał zwrotny egzystuje jedynie w formie półbajtowej. • Standard & Bi-Directional. Pozwala nie tylko na wysyłanie ale i na odbiór danych poprzez 8 linii magistrali danych. Ustawienie bitu 5 rejestru sterującego powoduje odwrócenie kierunku transmisji. • EPP 1.7 & SPP. Tryb EPP (Enhanced Parallel Port) w wersji 1.7 (różnice pomiędzy wersjami 1.7 i 1.9 protokołu EPP omówione są w punkcie poświęconym trybowi EPP). Dostępne są zarówno rejestry standardowe SPP jak i dodatkowe, określone dla trybu EPP. Bit 5 rejestru sterującego SPP odwraca kierunek transmisji. Wersja 1.7 specyfikacji EPP może być pozbawiona implementacji bitu O rejestru stanu (Time-Out). • EPP 1.9 & SPP. Tryb EPP w wersji l .9 (implementacja bitu Time-Out). • ECP. Tryb ECP (Extended Capabilities Port). W tym przypadku system gwarantuje dostęp do portu ECR, nie ma natomiast możliwości wykorzystania trybu EPP. • ECP & EPP 1.7 lub ECP & EPP 1.9. Kombinacja trybów ECP i EPP w stosownej odmianie. Dostępne zarówno funkcje ECP (rejestr ECR) jak i protokół EPP. Wybór trybu należy dokonywać za pośrednictwem opcji konfiguracyjnych w stosownym punkcie CMOS-SETUP. Istnieją naturalnie rejestry kontrolne, które sterują tymi funkcjami (Ox2A, OxFO, Ox3Fl) i właśnie za ich pośrednictwem BIOS konfiguruje kontrolery portów równoległych. Nie zaleca się bezpośredniego dostępu do tych rejestrów, a wszelkie manipulacja należy pozostawić w gestii BIOS. Tryby podstawowe W dalszej części rozdziału przedstawimy bardziej szczegółowo wspomniane wcześniej tryby podstawowe. W kolejności omówione zostaną następujące tryby: standardowy, półbajtowy, bajtowy (PS/2), EPP i ECP. Tryb standardowy Tryb standardowy korzysta z szeregu sygnałów ujętych w pierwotnej specyfikacji Centronics. Linie te (wraz z towarzyszącymi im numerami końcówek wtyczek) zebrane zostały w tabeli 12.1. Oto krótki opis wymienionych w tabeli sygnałów: DO - D7= Magistrala danych, w systemie standardowym wyłącznie j ednokierunko wa. ~STR=Strobe. Niski poziom logiczny tej linii nakazuje drukarce odebranie bajtu z linii danych DO - D7. Minimalna szerokość impulsu wynosi 0,5 us. ~ACK=Acknowledge. Niskim poziomem logicznym na tej linii drukarka potwierdza odebranie bajtu i gotowość do przyjęcia następnego. Szerokość impulsu potwierdzającego wynosi około 5 u.s. BSY=Busy. Wysoki poziom logiczny tego sygnału może oznaczać jeden z następujących stanów: • drukarka jest w stanie off-line (jest logicznie odłączona od komputera), Tabela 12.1. Oznaczenia linii przewodu połączeniowego według standardu Centronics Końcówka wtyku DB-25;Końcówka wtyku Centronics-36;Sygnał;Kierunek transmsji (względem komputera} 1; 1; ~STR; wyjście 2; 2; DO; wyjście 3; 3; Dl; wyjście 4; 4; D2; wyjście 5; 5; D3; wyjście 6; 6; D4; wyjście 7; 7; D5; wyjście 8; 8; D6; wyjście 9; 9; D7; wyjście 10; 10; ~ACK; wejście 11; 11; BSY wejście 12; 12; PAP wejście 13; 13; SEL wejście 14; 14; -ALF wyjście 15; 32; ~ERR wejście 16; 31; -INI wyjście 17; 36; ~DS wyjście 18-25 19-30,33; GND; 16; OV; 17; obudowa; 18; +5 V; 34 35; wolne; • wewnętrzny bufor drukarki jest pełny, • drukarka odbiera właśnie znak, • trwa inicjalizacja drukarki, • wystąpił błąd w pracy drukarki. PAP=Paper Out. Wysoki poziom logiczny na tej linii sygnalizuje wyczerpanie się zapasu papieru. Sygnał ten bywa też oznaczany jako PERR (Paper Error). Paper Out. Wysoki poziom logiczny na tej linii sygnalizuje wyczerpanie się zapasu papieru. Sygnał ten bywa też oznaczany jako PERR (Paper Error). SEL=Select. Wysoki poziom logiczny oznacza, że drukarka jest w stanie on-line, tj. jest logicznie połączona z komputerem. Sygnał ten bywa też oznaczany jako ONOFF (On-line/Off-line). -ALF=Auto Linę Feed. Niski poziom logiczny na tej linii poleca drukarce automatyczne dołączanie znaków wysuwu wiersza (LF) po odebraniu znaku powrotu karetki (CR). ~ERR=Error lub Fault. Przyczyną niskiego poziomu logicznego na tej linii może być: •brak papieru, • przejście drukarki w stan off-tine, • inny błąd (np. wyłączenie drukarki). -INI=nitialization. Niski poziom logiczny na tej linii uruchamia w pewnych typach drukarek procedurę inicjalizujacą. Zgodnie ze specyfikacją wymagany jest impuls o długości co najmniej 50us. ~DSL=Device Select. Niski poziom logiczny powoduje wybranie drukarki. Zwykle linia ta jest na stałe połączona z masą, tzn. drukarka jest stale wybrana. Inne oznaczenie tego sygnału to •SELECT IN. W trybie standardowym realizowany jest klasyczny protokół Centronics (rysunek 12.1). Zgodnie z jego założeniami dla wysłania pojedynczego bajtu do drukarki muszą być podjęte następujące kroki: • Komputer wystawia bajt danych na magistralę DO - D7 (zapis do portu danych). • Komputer sprawdza sygnał BSY (Busy) w celu ustalenia, czy drukarka jest zdolna do przyjęcia danych. Wysyłanie danych do urządzenia, które nie jest gotowe (inaczej zajęte przetwarzaniem) powoduje ich utratę. Drukarka zajęta przetwarzaniem utrzymuje linię BSY na poziomie logicznej jedynki. • Komputer aktywuje linię ~STR obniżając jej poziom do wysokości logicznego zera. Stanowi to sygnał dla drukarki, że na liniach DO - D7 odłożony jest bajt danych, który należy wczytać do własnych buforów wejściowych. Minimalna długość impulsu na linii ~STR wynosi w myśl specyfikacji co najmniej l us. Realizowana wartość typowa to około 5 us. • Drukarka potwierdza fakt przyjęcia danych impulsem o szerokości 5 us na linii ~ACK. W wielu konkretnych rozwiązaniach kontrolery portu równoległego ignorują impuls potwierdzający. Opisane wyżej kroki realizowane są przez procesor, który zmuszony jest do wykonywania szeregu operacji na rejestrach w przestrzeni wejśćia-wyjścia. Fakt ten stanowi naturalne ograniczenie prędkości, którą może osiągnąć złącze pracujące w trybie Centronics. Bardziej rozbudowane protokoły (EPP i ECP) realizują wspomniane operacje automatycznie powierzając je wyspecjalizowanym układom sprzętowym -jedynym zadaniem CPU jest wykonanie pojedynczej instrukcji zapisu bajtu do portu danych. Zanim przejdziemy do zaprezentowania tych bardziej zaawansowanych rozwiązań przedstawimy elementarne mechanizmy, które umożliwiają procesorowi przejęcie kontroli nad poszczególnymi liniami złącza równoległego. Z każdym portem równoległym stowarzyszone są trzy specjalne rejestry: rejestr danych, rejestr stanu i rejestr sterujący. Trójki rejestrów ulokowane są w spójnych obszarach przestrzeni adresowej wejśćia-wyjśćia, których początki wyznaczają tzw. adresy bazowe. Dla każdego z obecnych w systemie portów LPTx stowarzyszony z nim rejestr danych leży pod adresem bazowym, o krok dalej mamy rejestr stanu (adres bazowy + 1), a na końcu rejestr sterujący (adres bazowy + 2). Adresy bazowe wyznaczane są przez BIOS dla wszystkich łącz równoległych zaakceptowanych w fazie przebiegu procedur POST. Przydzielone adresy przechowywane są w obszarze danych BIOS (0040:0008h - 0040:OOOEh) - tabela 12.2 Tabela 12.2. Adresy bazowe portów równoległych Adres; Szerokość; Znaczenie; Wartość standardowa 0040:0008h; słowo; adresu bazowy łącza LPT1; 378h 0040:000Ah; słowo; adresu bazowy łącza LPT2; 278h 0040:000Ch; słowo; adresu bazowy łącza LPT3; 3BCh 0040:000Eh; słowo; adresu bazowy łącza LPT4; 2BCh Aby poznać faktyczną lokalizację adresów bazowych w przypadku konkretnego komputera, można posłużyć się jednym z wielu programów diagnostycznych, które podają cały szereg informacji dotyczących konfiguracji danego systemu (np. msd.exe). W charakterze środka doraźnego odwołać się można do programu debug.exe wchodzącego w skład zestawu dostarczanego wraz z MS-DOS: C: V>debug -d 0040:0008 80040:0000 .. .. .. .. .. .. .. .. 78 03 78 02 00 00 00 00 ....xx... W tym konkretnym przypadku adres bazowy LPT1 leży pod adresem 0x378h, a dla LPT2 pod adresem 0x278h. Porty LPT3 i LPT4 nie zostały uznane przez BIOS. Znając adres bazowy łatwo wyznaczamy poszczególne adresy wspomnianej już trójki portów określanych mianem rejestrów SPP (Standard Paral/e/ Port Registers). Tabela 12.3. Zestaw rejestrów SPP Lokalizacja rejestru; Nazwa; Typ Adres bazowy + 0; Rejestr danych (Data Register); zapis / odczyt Adres bazowy + 1; Rejestr stanu (Status Register); odczyt Adres bazowy + 2; Rejestr sterujący (Control Register); zapis Rejestr danych (Data Register) - adres bazowy + 0 Rejestr danych umożliwia dostęp do magistrali danych DO - D7. Zlokalizowany jest pod adresem bazowym przyjętym dla danego złącza. Umieszczenie bajtu danych w tym rejestrze powoduje odwzorowanie sygnatury bitowej na stosowych liniach magistrali danych, zatem ustawienie dowolnego bitu tego rejestru powoduje pojawienie się napięcia +5 V na stowarzyszonej z nim końcówce. Oznacza to, że żadna z pozycji nie ulega zanegowaniu, co ma miejsce w przypadku niektórych bitów kolejnych rejestrów SPP. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0 bit 7=Poziom sygnału na końcówce D7: 0 - niski, 1 - wysoki. bit 6=Poziom sygnału na końcówce D6: 0 - niski, 1 - wysoki. bit 5=Poziom sygnału na końcówce D5: 0 - niski, 1 - wysoki. bit 4=Poziom sygnału na końcówce D4: 0 - niski, 1 - wysoki. i bit 3=Poziom sygnału na końcówce D3: 0 - niski, 1 - wysoki. bit 2=Poziom sygnału na końcówce D2: 0 - niski, 1 - wysoki. bit 1=Poziom sygnału na końcówce Dl: 0 - niski, 1 - wysoki. bit 0=Poziom sygnału na końcówce DO: 0 - niski, 1 - wysoki. Rejestr stanu (Status Register) - adres bazowy + 1 Rejestr ten dostarcza informacji o poziomie sygnałów BSY, ~ACK, PAP, SEL i ~ERR. Rejestr stanu przeznaczony jest wyłącznie do odczytu, a wszelkie zapisywane do niego dane będą ignorowane. Bit 2 informuje o wystąpieniu przerwania sprzętowego. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; x; bit 0 bit 7=Poziom napięcia na linii BSY: 0 - wysoki, 1 - niski. bit 6=Poziom napięcia na linii ~ACK: 0 - niski, 1 - wysoki. bit 5=Poziom napięcia na linii PAP: 0 - niski, 1 - wysoki. bit 4=Poziom napięcia na linii SEL: 0- niski, 1 - wysoki. bit 3= Poziom napięcia na linii ~ERR: 0 - niski, 1 - wysoki. bit 2=~IRQ: 0 - przerwanie wystąpiło, 1 - nie było przerwania. bity 1 - 0=Zarezerwowane. Bit 0 implementuje tzw. Time-Out przy pracy w trybie EPP. Proszę zwrócić uwagę na wbudowaną sprzętową negację sygnału na linii BSY. Zero na pozycji bitowej 7 informuje o wysokim poziomie logicznym na stowarzyszonej z nią końcówce, tzn.: bit 7 = 0-» BSY =+5 V bit 7= l ->BSY = 0V Rejestr sterujący (Control Register), adres bazowy + 2 Rejestr sterujący w specyfikacji SPP przeznaczony jest wyłącznie do zapisu. Pozwala on na wymuszanie określonych poziomów napięcia na liniach ~DSL, INI, -ALF i ~STR. Łącze równoległe może być źródłem przerwania sprzętowego (zwykle IRQ5 lub IRQ7), jeżeli sygnał na linii ~ACK zmieni stan z wysokiego na niski. Bit 4 stanowi przełącznik umożliwiający blokadę mechanizmu wyzwalania przerwania. Bit 5 aktywuje mechanizm pracy dwukierunkowej dla rejestru danych. W normalnych warunkach port ten jest jedynie kanałem wyjściowym. Ustawienie bitu 5 przynosi pożądany skutek jedynie w układach, których sprzętowa realizacja istotnie dopuszcza możliwość pracy dwukierunkowej (wymagana jest obecność dodatkowego szeregu rejestrów zatrzaskowych). Standardowa definicja złącza równoległego nie zawierała tego jako element konieczny. x; x; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-6 Zarezerwowane. bit 5 Aktywacja dwukierunkowej pracy portu danych (Enable Bi-Directional Data Port}. bit 4 Generacja sygnałów IRQ, (Enable IRQ via ~~ACK): 0 - zabroniona, 1 - dozwolona. bit 3 Ustanawia poziom napięcia na końcówce ~DSL (zanegowany): 0 - wysoki, 1 - niski. bit 2 Ustanawia poziom napięcia na końcówce INI: 0 - niski, 1 - wysoki. bit 1 Ustanawia poziom napięcia na końcówce -ALF (zanegowany): 0 - wysoki, 1 - niski. bit 0 Ustanawia poziom napięcia na końcówce -STR (zanegowany): 0 - wysoki, 1 - niski. Uwaga na bity 3, 1 i 0, które wyposażone są w sprzętowe układy negacji poziomów logicznych, na przykład: bit 1 = 0 -> -ALF = +5 V bit 1 = 1 -> -ALF = 0 V Tryb półbajtowy Tryb półbajtowy (Nibble Modę) stanowi alternatywę przy odczycie 8 bitów bez konieczności korzystania z funkcji dwukierunkowego portu danych. W trybie tym trzeba stosować zewnętrzny multiplekser 1x8/2x4 (np. 74LS157) łamiący zewnętrzną 8 bitową szynę danych na dwie porcje podawane kolejno na wejścia szyny 4-bitowej utworzonej z końcówek BSY(ll), ~ACK(10), PAP(12)i SEL(13). Montowanie kompletnego bajtu z dwóch składników leży w gestii oprogramowania. Tryb ten jest stosunkowo powolny bowiem wymaga szeregu dodatkowych instrukcji dostępu do portów. Przy założeniu, że linia ~STR połączona jest z końcówką przełącznika multipleksera (~A/B) wymagana jest następująca sekwencja programowa: #fdefine CONTROL 0x37a /* Rejestr sterujący LPT1: */ #define STATUS 0x379 /* Rejestr stanu LPTl: */ ... unsigned char a, b ; ... outportb(CONTROL , inportb(CONTROL) | 0x01) ; /* multiplekser na */ /* db0-db3 */ a = (inportb(STATUS) & 0xf0) ; /* zapamiętanie stanu db0-db3 */ a = a>>4 ;/* przesunięcie */ outportb(CONTROL , inportb(CONTROL) | Oxfe) ; /* multiplekser na */ /* db4-db7 */ a = a | (inport (STATUS) & 0xf0) ; /* zapamiętanie stanu db4-db7 */ b = b ^ 0x88 ; /* linia BSY dostarcza zanegowanej informacji */ Utworzona 4-bitowa magistrala doprowadzona jest do górnej połówki rejestru stanu i dlatego niezbędna jest instrukcja przesunięcia. W praktyce może się okazać konieczne wprowadzenia pewnych opóźnień pomiędzy kolejnymi instrukcjami dostępu do portów. l Tryb bajtowy (PS/2) W trybie bajtowym PS/2 (Byte Modę) korzystamy z dwukierunkowego portu danych o ile funkcja taka została wbudowana w sprzęt. Aktywacja systemu odbywa się przy pomocy bitu 5 rejestru sterującego. Tryb EPP Standard EPP (Enhanced Parallel Port) przedstawiony został jako efekt wspólnych uzgodnień firm Intel, Xircom i Zenith Data Systems. Prędkość magistrali równoległej pracującej w trybie EPP przewyższa zdecydowanie wartości oferowane przez Centronics i sięga zakresu 2 MB/s. Protokół EPP stosuje dokładnie to samo okablowanie ale prze-definiowuje dla swoich potrzeb znaczenie niektórych linii połączeniowych. Jak długo system znajduje się w trybie EPP, połączenia biegnące od końcówek 12, 13 i 15 mogą być wykorzystywane w sposób dowolny. abela 12.4. Zmiana znaczenia sygnałów zfącza równoległego pracującego w trybie EPP Końcówka wtyku DB-25; Sygnał SPP; Sygnał EPP; Znaczenie 1; -STR; -WRITE; Kierunek transmisji, wysoki poziom logiczny oznacza zapis 2-9; D0-D7; D0-D7; Dwukierunkowa magistrala danych 10; -ACK; 1NTERRUPT; Narastające zbocze wyzwala przerwanie IRQ 11; BSY; WAIT; Sygnał zamknięcia cyklu EPP. Cykl EPP zaczyna się gdy WAIT jest na poziomie niskim a kończy się gdy WAIT jest na poziomie wysokim. 12; PAP; -; Nie wykorzystywany w trybie EPP 13; SEL; -; Nie wykorzystywany w trybie EPP 14; -ALF; -DATA STROBE; W stanie niskim wskazuje na transfer danych 15; -ERR; -;Nie wykorzystywany w trybie EPP 16; -INI; -RESET; Sygnał Reset w stanie niskim 17; -DSL; -ADDR STROBE; W stanie niskim wskazuje na transfer adresu 18 - 25; GND; GND; Masa Wysyłanie danych złączem równoległym w trybie EPP jest z punktu widzenia procesora stosunkowo proste, wymaga bowiem wyłącznie pojedynczej instrukcji zapisu przesyłanego bajtu do odpowiedniego portu. Jeżeli wysyłane są dane zapis następuje do rejestru danych EPP (adres bazowy + 4). Dla adresów przewidziany jest oddzielny port adresowy EPP (adres bazowy + 3). W ten sam sposób przebiega odczyt danych i adresów wysyłanych przez urządzenie ponieważ obydwa wspomniane porty są dwukierunkowe. Cykl zapisu przebiega według następującego algorytmu (rysunek 12.3): • Zapis bajtu do odpowiedniego portu. • Aktywowana jest linia -WRITE. • Bajt wystawiany jest na szynę danych. • Jeżeli urządzenie utrzymuje -WAIT na poziomie niskim, wyzwalany jest sygnał zegarowy (DATA STROBE lub ADDR STROBE). • Urządzenie potwierdza odbiór bajtu podnosząc poziom na linii -WAIT. • Formowane jest tylne zbocze sygnału zegarowego (-DATA STROBE lub -ADDR STROBE). . Cykl zakańcza formowanie tylnego zbocza sygnału -WAIT. W podobny sposób przebiega proces odwrotny, w którym urządzenie wysyła do komputera dane lub adres (rysunek 12.4). • Procesor wykonuje rozkaz odczytu portu (danych lub adresowego). • Jeżeli -WAIT jest na poziomie niskim aktywowany zostaje sygnał zegarowy -STROBE. • Kontroler portu EPP oczekuje potwierdzenia w postaci podniesienia poziomu na linii -WAIT. . Wystawiane przez urządzenie dane lub adres pobierane są z magistrali DO - Dl. Wszystkie punkty przedstawionych algorytmów (za wyjątkiem pierwszego kroku) realizowane są przez układy sprzętowe kontrolera i nie wymagają żadnej ingerencji programowej. Omawiany we wcześniejszym punkcie protokół Centronics jest pozornie prostszy i składa się z mniejszej liczby etapów. Trzeba w tym miejscu jednak wyraźnie podkreślić, iż uformowanie każdego z impulsów wymagało bezpośredniej ingerencji procesora poprzez właściwą modyfikację określonych pozycji bitowych stosownych rejestrów. W praktyce oznacza to całą sekwencję instrukcji, bowiem modyfikacja pojedynczej pozycji bitowej pociąga za sobą konieczność odczytu zawartości pierwotnej, zamaskowania bitów nienaruszalnych wraz ze zmianą wybranego bitu i ostatecznie ponowny zapis. Wszystko to odbija się na obniżeniu maksymalnej szybkości pracy całego złącza. Tryb EPP może być zaimplementowany w jednej z dwóch wersji oznaczanych symbolicznie jako EPP 1.7 i EPP 1.9. Opisany tu protokół odwzorowuje zasady określone w drugiej z tych wersji. Odmiana l .7 charakteryzuje się zmianą w ocenie gotowości do wyzwolenia przedniego zbocza sygnału zegarowego -DATA STROBE lub -ADDR STROBE. W tym przypadku nie ma obowiązku oczekiwania na niski poziom sygnału -WAIT. Obydwie odmiany protokołu muszą natomiast odczekać do obniżenia poziomu -WAIT jako znak zakończenia danego cyklu. Dostęp do złącza równoległego pracującego w systemie EPP odbywa się (podobnie jak w przypadku trybu Centronics) za pośrednictwem grupy rejestrów (tabela 12.5). Pierwsze trzy rejestry grupy EPP pokrywają się z zestawem SPP (Standard Parallel Port}. W ten sposób zagwarantowana jest zgodność w dół - posługując się złączem równoległym pracującym w trybie EPP można przesyłać dane w klasyczny sposób wykorzystując port adresu bazowego wraz z opisanym w poprzednim punkcie protokołem Centronics. Tabela 12.5. Zestaw rejestrów EPP Lokalizacja rejestru; Nazwa; Typ Adres bazowy + 0; Rejestr danych - SPP (Data Register); zapis Adres bazowy + 1; Rejestr stanu - SPP (Status Register); odczyt Adres bazowy + 2; Rejestr sterujący - SPP (Control Register); zapis Adres bazowy + 3; Rejestr adresowy - EPP (Address Register); zapis / odczyt Adres bazowy + 4; Rejestr danych - EPP (Data Register);zapis / odczyt Adres bazowy + 5; Transfer 16/32 bity; Adres bazowy + 6; Transfer 32 bity; Adres bazowy + 7; Transfer 32 bity; Przejście do trybu EPP możliwe jest pod warunkiem, że przyłączone do złącza urządzenie obsługuje ten tryb. Jak już wcześniej wspomniano, transmisja bajtu sprowadza się do umieszczenia lub pobrania go z odpowiedniego rejestru. Towarzysząca transmisji sekwencja sygnałów sterujących wytwarzana jest automatycznie przez kontroler złącza równoległego i nie wymaga dodatkowych kroków programowych. Transfer danych przebiega poprzez rejestr danych (adres bazowy + 4) a proces przesyłania adresu za pośrednictwem rejestru adresowego (adres bazowy + 3). Zarówno rejestr adresowy EPP jak i rejestr danych EPP są dwukierunkowe, co ułatwia komunikację wzajemną (te same adresy portów). Jeśli złącze pracuje w trybie EPP modyfikacji ulega znaczenie bitu O rejestru stanu SPP (w trybie Centronics jest on zarezerwowany). Bit ten będzie ustawiany w wypadku wystąpienia przekroczenia limitu czasowego (Time-Out). Stan taki ma miejsce, jeżeli linia -WAIT nie ulegnie zwolnieniu po upływie pewnego określonego czasu (zwykle około 10 u.s) liczonego od momentu aktywowania sygnału TOR lub IOW (na magistrali ISA). Tryb EPP jest mocno powiązany z uzależnieniami czasowymi panującymi na magistrali ISA. Cykl zapisu pojedynczego bajtu do urządzenia umieszczonego na drugim końcu przewodu łączącego z portem równoległym traktowany jest tak jak każdy inny cykl zapisu (do urządzenia wejść i a-wyjść i a) realizowany za pośrednictwem magistrali ISA. Ponieważ cykl taki trwa zwykle wielokrotnie dłużej niż pojedynczy takt zegara magistrali, kontroler portu równoległego zmuszony jest do wprowadzania dodatkowych cykli oczekiwania poprzez aktywację linii IOCHRDY (I/O Channel Ready). Sygnał ten blokuje de facto cały ruch na szynie ISA. Bit O rejestru stanu SPP pełni w tym przypadku rolę zaworu bezpieczeństwa przywracającego ruch na magistrali w przypadku gdy urządzenie zewnętrzne z jakichś względów nie przysyła sygnału potwierdzenia -WAIT (bo jest na przykład wyłączone). Należy się liczyć z faktem, iż bit Time-Out może nie być zaimplementowany w wersji 1.7 specyfikacji EPP. Dodatkowe porty położone pod kolejnymi adresami (adres bazowy +5, +6 i +7) mogą ułatwić transport słów 16 i 32-bitowych. Ich znaczenie i funkcje nie są na tyle znormalizowane by można było się nimi powszechnie posługiwać. Jeżeli dany kontroler implementuje taką możliwość, do omawianych portów można zapisać na raz 2 lub 4 bajty, które zostaną kolejno automatycznie przesłane 8-bitową szyną złącza równoległego. Tryb ECP Tryb ECP (Extended Capabilities Modę) opracowany został przez firmy Microsoft i Hewlett Packard. System ten (podobnie jak EPP) korzysta z silnego wsparcia ze strony sprzętu, który generuje określone przez protokół sekwencje sygnałów sterujących. Jakkolwiek sama szybkość transmisji porównywalna jest z oferowaną przez EPP, omawiany w tym punkcie tryb przekazu ma inne cenne zalety: • Możliwość korzystania z DMA. Skojarzenie portu równoległego z kanałem DMA zdecydowanie poprawia parametry systemu pracującego pod kontrolą Windows. • Dodatkowy bufor. Kontroler portu równoległego ma możliwość korzystania z dodatkowego rejestru buforowego typu FIFO (First In First Out}. Fakt ten pozwala na zmniejszenie uzależnienia systemu od chwilowej dyspozycji obsługiwanego urządzenia zewnętrznego. Na ogół implementowany jest 16 stopniowy bufor FIFO. • Kompresja danych. Tryb ECP korzysta z prostego systemu kompresji oznaczanego w skrócie jako RLE (Run Length Encoding). Zarówno drukarki jak i skanery przetwarzają obrazy, w których przynajmniej pewne fragmenty stanowią jednolite płaszczyzny. Strumień danych płynących złączem równoległym zawiera więc na ogół dłuższe sekwencje powtarzających się znaków. W systemie RLE łańcuch taki redukowany jest do wymiaru dwóch bajtów: pierwszy z nich jest licznikiem RLC (Run Length Count) określającym liczbę znaków łańcucha a drugi stanowi wzorzec znaku. Kodowanie RLE pozwala teoretycznie na osiągnięcie współczynnika kompresji 1:64. • Adresowanie kanałów. ECP umożliwia definicję kanałów logicznych poprzez przydzielenie określonym urządzeniom adresów wewnętrznych (Channel Addressing). System ten utworzony został nie tyle w celu odróżniania szeregu urządzeń podłączonych do jednego portu równoległego co raczej dla wyszczególnienia pewnych bloków funkcjonalnych zawartych w ramach jednego zespołu. Przykładem takiego urządzenia może być kombajn typu skaner-faks-drukarka. Transfer danych kanałami logicznymi pozwala w tym wypadku na lepsze wykorzystanie złącza równoległego bowiem komunikacja może być podejmowana nawet wtedy, gdy bufory lokalne pewnych urządzeń składowych uległy już przepełnieniu. W systemie ECP można przydzielić do 128 adresów logicznych. Protokół ECP (podobnie jak EPP) przedefiniowuje dla swoich potrzeb znaczenie linii połączeniowych złącza równoległego. Przedeflniowanie to ma miejsce jednak jedynie w przypadku przejścia do trybu ECP. Obowiązuje pełna zgodność ,.w dół" - port równoległy może być przełączony w tryb SPP lub EPP. W takich warunkach następuje przywrócenie znaczenia linii połączeniowych stosowne dla aktualnego trybu. Tabela 12.6. Zmiana znaczenia sygnałów złącza równoległego pracującego w trybie ECP Końcówka wtyku DB-25; Sygnał SPP; Sygnał ECP; Znaczenie 1; ~STR; ~HostCLK; Zegar kluczujący transmisji w kierunku od komputera do urządzenia 2-9; DO-D7; DO-D7; Dwukierunkowa magistrala danych 10; ~ACK; ~PeriphCLK; Zegar kluczujący transmisji w kierunku od urządzenia do komputera 11; BSY; PeriphACK; W stanie wysokim wysyłane są dane a w stanie niskim rozkazy (dotyczy transmisji od urządzenia do komputera) 12; PAP; ~AckREV; Urządzenie potwierdza gotowość do wysyłania danych poprzez obniżenie poziomu tego sygnału 13; SEL; X-Flag; Extensibility Flag 14; ~ALF; HostACK; W stanie wysokim wysyłane są dane a w stanie niskim rozkazy (dotyczy transmisji od komputera do urządzenia) 15; ~ERR; ~PeriphREQ; Sygnał ten obniżany jest do zera przez urządzenie pragnące wysłać dane 16; ~INI; ~RevREQ; Stan niski oznacza, iż dane napływają do komputera 17; ~DSL; 1284ACTWE; Jak długo sygnał utrzymuje się na poziomie wysokim komputer wysyła dane.Obniżenie poziomu do zera kończy transfer 18-25; GND; GND; Masa Tryb ECP pracuje w oparciu o własny protokół. Określa on sposób transmisji danych poddawanych kompresji RLE z uwzględnieniem adresowania kanałów logicznych. Transfer może być dwukierunkowy przy czym system odróżnia dwa rodzaje cykli: rozkazowy lub danych. Cykl danych (Data Write/Data Read) ma miejsce w przypadku gdy obydwa sygnały HostACK i PeriphACK znajdują się w stanie pasywnym (wysoki poziom logiczny). Uczestnicy transmisji wiedzą, iż w tym wypadku na magistrali DO - D7 odłożony jest bajt danych. W cyklu rozkazowym przysyłany może być adres kanału lub licznik RLC (Run Length Counf). Odpowiedni kierunek transmisji definiowany jest poprzez aktywowanie jednego z sygnałów HostACK lub PeriphACK. Jeżeli stroną nadającą jest komputer (Command Write} musi on sprowadzić linię HostACK do niskiego poziomu logicznego. Jeśli transfer adresu lub licznika RLC odbywa się od urządzenia (Command Read), musi ono aktywować linię PeriphACK. Mechanizm odróżniania adresu kanału logicznego od licznika RLC pracuje w oparciu o stan bitu 7 magistrali danych (linia D7, końcówka 9). Jeśli jest on równy zero, na liniach DO - D6 odkładany jest licznik RLC. W wypadku gdy D7 równe jest jeden, pozostałe linie magistrali danych transmitują adres logiczny. Na rysunku 12.5 przedstawione zostały schematycznie cykle transmisyjne portu równoległego ECP biegnące w kierunku od komputera do urządzenia. Jak już wcześniej wspomniano, przesyłane mogą być dane (Data Write} lub rozkazy (Command Write}. Proces przebiega według następującego algorytmu: • Przesyłany bajt umieszczany jest na magistrali danych DO - D7. • W cyklu rozkazowym linia HostACK sprowadzana jest do niskiego poziomu logicznego. W cyklu danych linia ta pozostaje na poziomie wysokim. • Kontroler portu równoległego aktywuje linię -HostCLK poprzez obniżenie jej poziomu do zera. • Urządzenie potwierdza gotowość do przyjęcia bajtu poprzez aktywowanie linii PeriphACK. • Formowane jest tylne zbocze impulsu -HostCLK. W tym momencie urządzenie przejmuje bajt z magistrali danych. . Urządzenie potwierdza przejęcie bajtu poprzez zwolnienie linii PeriphACK. Transfer w kierunku od urządzenia do komputera przebiega w sposób podobny. Jedyną różnicę stanowi dodatkowa faza negocjacji kierunku odwrotnego. Uzgodnienie to odbywa się przy współudziale linii ~RevREQ i ~AckREV. Złącze równoległe pracujące w trybie ECP sterowane jest, podobnie jak ma to miejsce w przypadku poprzednich trybów, poprzez zestaw rejestrów. Tabela 12.7. Zestaw rejestrów ECP Lokalizacja rejestru; Nazwa; Typ Adres bazowy + 0; Rejestr Danych - SPP (Data Register), zapis Adres bazowy + 0; Rejestr Adr. FIFO (ECP Address FIFO); zapis / odczyt Adres bazowy + 1; Rejestr Stanu - SPP (Status Register), odczyt Adres bazowy + 2; Rejestr Sterujący - SPP (Control Register); zapis Adres bazowy + ox400h; Data FIFO, zapis / odczyt Adres bazowy + ox400h; Test FIFO, zapis / odczy Adres bazowy + ox400h; Configuration Register A; Adres bazowy + 0x401 h; Configuration Register B; zapis / odczyt Adres bazowy + ox402h; Rejestr ECR (Extended Control Register);zapisu / odczyt Przejście w tryb ECP odsłania zestaw dodatkowych rejestrów rezydujących w obszarze leżącym w odległości Ox400h od adresu bazowego. Należą do nich rejestr ECR oraz rejestry konfiguracyjne i testowe. Rejestr ECR (Extended Control Register), adres bazowy + 0x402h Rejestr ten stanowi główny element sterujący portu równoległego pracującego w trybie ECP. Umożliwia on konfigurację złącza, podaje informacje statusowe oraz zarządza buforem FIFO. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-5=Bity selektora trybu (Select Current Modę of Operation): 000 - tryb standardowy (Standard Modę), 001 - tryb bajtowy (Byte Modę), 010 - tryb standardowy z FIFO (Parali'el Port FIFO Modę), 011 - tryb ECP z FIFO (ECP FIFO Modę), 100 - tryb EPP (EPP Modę), 101 - zarezerwowane, 110 - tryb testowy dla FIFO (FIFO Test Modę), 111 - tryb konfiguracyjny (Configuration Modę). bit 4=ECP Interrupt Bit. bit 3=DMA Enable Bit. bit 2=ECP Service Bit. bit 1=FIFO Fuli. bit 0=FIFO Empty. Trzy najstarsze bity rejestru ECR definiują tryb pracy. Złącze ECP może być dzięki temu przełączone do jednego z siedmiu trybów: • Tryb standardowy (SPP). Klasyczny jednokierunkowy port równoległy • Tryb bajtowy. Klasyczny port równoległy wzbogacony o funkcję dwukierunkową • Tryb standardowy z FIFO. W trybie tym każdy zapisany do rejestru FIFO bajt będzie wysłany do urządzenia z uwzględnieniem zasad klasycznego protokołu SPP. W przeciwieństwie jednak do oryginalnego trybu SPP, niezbędne do tego sygnały sterujące wygenerowane zostaną przez układy sprzętowe i nie wymagają szeregu rozkazów absorbujących CPU. • Tryb ECP z FIFO. Właściwy tryb ECP z wykorzystaniem buforów FIFO i wraz z omówionym wcześniej protokołem. • Tryb EPP. Możliwość przejścia do trybu EPP z wykorzystaniem możliwości sprzętowych oferowanych przez ECP. Funkcja ta często nie jest udostępniana. • Tryb testowy dla FIFO. Specjalny tryb kontrolny udostępniający do celów diagnostycznych dodatkowy zestaw rejestrów FIFO (Test FIFO, adres bazowy + Ox400h). W ramach tego trybu, korzystając z sygnałów FIFO Fuli i FIFO Empty można na przykład określić faktyczny rozmiar buforów. Zwykle implementowany jest bufor 16 stopniowy. Tryb konfiguracyjny. W trybie tym uzyskuje się dostęp do rejestrów konfigura-cyjnych A i B. Szczegółowy opis funkcji rejestrów konfiguracyjnych wybiega znacznie poza zakres tej publikacji i z tego względu zostanie pominięty. Realizacja portu równoległego w ramach architektury PC Ewolucja złącza równoległego dotyczyła w sporym stopniu jego fizycznej lokalizacji w ramach architektury PC. Przez długi czas wchodziło ono w skład karty grafiki monochromatycznej jako element układu scalonego LSI zawierającego cały sterownik. Adres bazowy złącza wynosił w takim wypadku Ox3BCh. W momencie upowszechnienia grafiki kolorowej port równoległy dokonał pierwszej przeprowadzki na samodzielną kartę rozszerzającą. Karty takie były zawsze 8-bitowe, nawet w standardzie EISA. Dekodowały one linie adresowe AO-A9 oraz sygnały ~IOR i -IOW magistrali zewnętrznej, rozpoznając w ten sposób odwołania procesora do swych rejestrów. Drugim z możliwych wariantów było wykonanie portu równoległego jako elementu składowego uniwersalnych kart I/O (Multi I/O) zawierających również inne komponenty, takie jak kontrolery dysków oraz porty szeregowe. Konfiguracja numeru portu LPT1 - 4 (odpowiada określeniu adresu bazowego) odbywała się do niedawna za pomocą mikroprzełączników i zwór konfiguracyjnych. W ten sam sposób przebiegał przydział linii przerwań (standardowo IRQ7, alternatywnie IRQ5). W miarę wzrostu stopnia integracji układów scalonych płyty głównej (Chip-Set) nastąpiło wchłonięcie portu równoległego przy zachowaniu całkowitej zgodności programowej z oryginałem. Nie jest już również konieczne poszukiwanie zwór konfiguracyjnych, bowiem stosowne opcje zawarte są w programie CMOS-SETUP. Jeden z elementów pierwotnie zdefiniowanego złącza równoległego przetrwał wszystkie te zmiany w nienaruszonej formie. Kompletny zestaw sygnałów wyjściowych i wejściowych portu skupiony jest nadal w 25-końcówkowym gnieździe typu DB-25 ujętym w normie IEEE-1284-A. Sposób rozmieszczenia linii złącza przedstawia rysunek 12.7. Połączenie pomiędzy komputerem a drukarką realizowane jest przewodem, który od strony komputera wyposażony jest we wtyk DB-25 a od strony drukarki w 36-końców-kowe złącze typu Centronics (w/g specyfikacji IEEE-1284-B). Od pewnego czasu na rynku egzystuje również nowa, kompaktowa forma wtyku ujęta w normie IEEE-1284-C. Wszystkie trzy typy wtyków przedstawione zostały na rysunku 12.8, a sposób przyporządkowania linii portu poszczególnym końcówkom (wraz z przypisanymi do nich liniami masy) zebrany został w tabeli 12.8. Dostęp do łącza równoległego poprzez funkcje BIOS BIOS udostępnia trzy funkcje przerwania 17h obsługujące łącze równoległe. Funkcja OOh wysyła jeden znak do złącza, funkcja Olh inicjalizuje złącze i drukarkę, natomiast funkcja 02h określa aktualny stan złącza. Tabela 12.8. Przyporządkowanie końcówek wtyków standardów IEEE 1284 Linia; IEEE 1284-A (Sub-D):sygnal, masa; IEEE 12 84- B (Centronics):sygnal, masa; IEEE I284-C:sygnal, masa; D0; 1, 19; 2, 20; 6, 24 D1; 3, 19; 3, 21; 1, 25 D2; 4, 20; 4, 22; 8, 26 D3; 5, 20; 5, 23; 9, 27 D4; 6, 21; 6, 24; 10, 28 D5; 7, 21; 7, 25; 11, 29 D6; 8, 22; 8, 26; 12, 30 D7; 9, 22; 9, 27; 13, 31 ~ERR; 15, 23; 32, 29; 4, 22 SEL; 13, 24; 13, 28; 2, 20 PAP; 12, 24; 12, 28; 5, 23 -ACK; 10, 24; 10, 28; 3, 21 BSY; 11, 23; 11, 29; 1, 19 -STR; 1, 18; 1, 19; 15, 33 -ALF; 14, 25; 14, 30; 17, 35 -INI; 16, 25; 31, 30; 14, 32 -DSL; 17, 25; 36, 30; 16, 34 Funkcja OOh Działanie: Funkcja ta wysyła jeden znak do dowolnego z zainstalowanych w systemie łącz równoległych. Parametry wejściowe: AH 00h; AL kod ASCII znaku; DX numer łącza: 0 = LPT1, 1 = LPT2, 2 = LPT3, 4 = LPT4. Wartości zwracane: AH bajt statusowy. Przykład: mov ah,00h ; numer funkcji mov al,'D ; znak "D" mov dx,03h ; port LPT4 int 17h ; wyprowadź znak "D" na drukarkę LPT4 Funkcja 01h Działanie: Funkcja 0lh przeprowadza tzw. sprzętową inicjalizację drukarki i łącza (ang. hardware resei). Linia -INI jest aktywowana poprzez wystawienie na niej zera logicznego. Podobny efekt uzyskać można wysyłając tzw. sekwencję inicjalizującą (ang. software resef), na ogół '@', przy czym korzystamy wówczas ze wszystkich 8 linii danych i linii sterujących. Należy jednak pamiętać, że nie każda drukarka reaguje na sygnał -INI. Parametry wejściowe: AH 01h; DX numer łącza: 0 = LPT1, 1 = LPT2, 2 = LPT3, 4 = LPT4. Wartości zwracane: AH bajt statusowy. Przykład: mov ah,01h ; numer funkcji mov dx,00h ; LPT1 int 17h ; inicjalizuj drukarkę dołączona do portu LPT1 Funkcja 02h Działanie: Funkcja ta zwraca w rejestrze AH bajt statusowy, odwzorowujący stan łącza i drukarki. Nie są wykonywane żadne inne operacje. Parametry wejściowe: AH 02h; DX numer łącza: 0 = LPT1, 1 = LPT2, 2 = LPT3, 4 - LPT4. Wartości zwracane: AH bajt statusowy. Przykład: mov ah,02h ; numer funkcji mov dx,Olh ; LPT2 int 17h ; bajt statusowy znajdzie się w AH Wymieniany w opisie funkcji OOh, Olh i 02h bajt statusowy zawiera następujące dane: bit 7; bit6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=Stan linii BSY: 0 - drukarka wolna, 1 - drukarka zajęta. bit 6=Stan linii ~ACK: 0 - łącze oczekuje na sygnał potwierdzenia, 1 - nadszedł sygnał potwierdzenia. bit 5=Stan linii PAP: 1 - w drukarce brak papieru. bit 4=Stan linii SEL: 0 - drukarka w stanie off-line, 1 - drukarka w stanie on-line. bit 3=Stan linii ERR: 1 - drukarka zajęta, off-line lub inny błąd, na przykład drukarka wyłączona bity 2 - 1 Zarezerwowane (zwykle równe 1). bit 0=Przekroczenie limitu czasu (ang. time-ouf) w oczekiwaniu na reakcję drukarki. Maksymalne czasy oczekiwania systemu na reakcję drukarki definiowane są przez BIOS i przechowywane w jego obszarze danych. Adres; Znaczenie; 0040:0078h; limit czasu dla łącza LPT1 (w sekundach) 0040:0079h; limit czasu dla łącza LPT2 (w sekundach) 0040:007Ah; limit czasu dla łącza LPT3 (w sekundach) 0040:007Bh; limit czasu dla łącza LPT4 (w sekundach) Wartością domyślną przyjmowaną przez BIOS jest 20 sekund. Czas ten można zmienić na nieskończenie długi (ma to znaczenie przy obsłudze drukarek laserowych) poleceniem DOS-u mode Iptn, , p. Po upływie zdefiniowanego wcześniej czasu oczekiwania dane będą wysyłane ponownie. Dostęp do łącza równoległego z poziomu systemu MS-DOS Jak wiadomo, MS-DOS traktuje wszystkie urządzenia na równi z plikami dyskowymi. Polecenie copy plik. a plik.b nie różni się od polecenia copy plik. a lpt2. System operacyjny przegląda listę nazw urządzeń (LPT1, LPT2, LPT3, LPT4, COM1, COM2, COM3, COM4, AUX, CON, PRN, NUL) i odróżnia plik dyskowy od urządzenia, tak więc zawartość pliku plik.a zostaje wysłana do programu sterownika (Device Driver) obsługującego łącze LPT2. Wspomnieć należy również o poleceniu type plik. a > Ipt2 oraz programie rezydentnym print (print plik. a /d: LPT2), które prowadzą do tego samego celu. Dla potrzeb obsługi drukarki programiści mogą odwoływać się do dwóch funkcji przerwania 21h: 05h i 40h. Funkcja 05h Działanie: Funkcja ta jest reliktem z czasów systemu operacyjnego CP/M i obsługuje transmisję pojedynczego znaku wyłącznie do łącza LPT1 (PRN). Parametry wejściowe: AH 05h; DL kod ASCII znaku. Wartości zwracane: - brak - Przykład: mov ah,05h ; numer funkcji mov dl,0ch; znak wysuwu strony (FF - Form Feed) int 21h ; wysuw strony w drukarce Funkcja 40h Działanie: Funkcja ta w ogólnej postaci obsługuje zapis większej liczby znaków do pliku lub urządzenia. Korzysta ona z koncepcji tzw. uchwytów (Handles) definiujących jednorazowo i jednoznacznie plik lub urządzenie. Drukarce PRN (LPT1) przyporządkowany jest standardowo numer uchwytu 4. Urządzenia LPTn wymagają wcześniejszego otwarcia do zapisu funkcją 3Dh przerwania 21 h. Funkcja otwarcia do odczytu (3Fh) nie ma w przypadku drukarki sensu fizycznego. Parametry wejściowe: AH 40h; BX numer uchwytu urządzenia LPTn; CX liczba przesyłanych znaków; DS:DX adres bufora zawierającego znaki. Wartości zwracane: AX liczba faktycznie przesłanych znaków lub kod błędu w przypadku CF= 1; CF 1 w przypadku wystąpienia błędu. Przykład: bufor DB 8 DUP('*') ; osiem znaków "*" mov ah,40h ; numer funkcji mov bx,04h ; uchwyt urządzenia PRN mov cx,08h ; przesyłamy 8 znaków mov dx,0FFSET bufor ; adres (przemieszczenie) bufora ;zakładamy, że DS zawiera ;adres segmentowy bufora int 21h ; przerwanie DOS Funkcja 40h zwraca wprawdzie w rejestrze AX kod błędu, nie mówi natomiast nic o stanie poszczególnych linii łącza. Informacji tych dostarczaj ą funkcje BIOS-u. Ogólne zastosowanie łącza równoległego Zastosowanie łącza równoległego jako portu drukarki wykorzystuje w niewielkim stopniu jego możliwości. Każda z linii ma swój odpowiednik na stosownej pozycji bitowej pewnego rejestru. Ta przejrzysta i łatwa do oprogramowanie struktura stwarza, iż jest on najchętniej wykorzystywany jako interfejs do prostych układów automatycznych. Traktując port równoległy jako programowalny sterownik należy zapomnieć o drukarce a skupić się na wejściach i wyjściach kontrolera. Klasyczny port równoległy w pierwotnej postaci (SPP) wyposażony był w 12 wyjść i 5 wejść dostępnych przez odpowiednie bity rejestrów: •8 wyjść poprzez rejestr danych, • 4 wyjścia (z czego 3 zanegowane) dostępne poprzez rejestr sterujący, •5 wejść (z czego jedno zanegowane) dostępne poprzez rejestr stanu. W oryginale IBM-PC port danych jest jednokierunkowy. Zawartość rejestru wystawiana jest na odpowiednie końcówki złącza DB-25 w niezmienionej formie (brak charakterystycznych negacji występujących w przypadku innych rejestrów). W późniejszych wykonaniach kontrolerów pojawiła się możliwość pracy dwukierunkowej (Bi-Directional) uruchamiana poprzez bit 5 rejestru sterującego. Aktywacja tej funkcji komplikuje obsługę portu bowiem zapisane do niego dane (np. rozkazem out DATA, al) są w nim „zatrzaskiwane". Odczyt rejestru (np. rozkazem in al, DATA) powoduje w efekcie przeczytanie tych samych danych, które zostały uprzednio zapisane. Mechanizm sprzężenia zwrotnego nie został wprowadzony w celu utrudnienia życia programistom ale raczej dla umożliwienia wykrywania przekłamań spowodowanych np. zwarciami na magistrali danych portu równoległego. Aby pobrać dane z portu należy najpierw zapisać do niego same jedynki (0xFFh) po czym pozwolić zewnętrznym układom logicznym na ewentualne obniżenie poziomu na wybranych liniach. Dopiero wtedy odczyt bajtu przynosi pożądany skutek. Rejestr sterujący przeznaczony jest w zasadzie również wyłącznie do zapisu ale dzięki istnieniu wbudowanych funkcji sprzężenia zwrotnego (o ile zostały zaimplementowane) może być użyty jako dwukierunkowy w swej mniej znaczącej połowie (bity 3 - 0). Fakt ten umożliwia dostęp do końcówek l, 14, 16, 17 jako wejść lub wyjść. Aby odczytać coś z tego rejestru trzeba wstępnie zapisać wartość xxxx0100b co powoduje ustawienie poziomów +5 V na wszystkich końcówkach. W tym momencie urządzenie zewnętrzne może sprowadzić daną końcówkę do masy. W przypadku bitu 4 (Enable IRQ via ~~ACK) obowiązuje tylko jeden kierunek tzn. zapis. Odczyt tej pozycji bitowej dostarcza zawsze ostatnio ustawionej wartości i nie ma sensu fizycznego jako wartość zwracana. W tabeli 12.9 prezentowane jest zestawienie numerów końcówek poszczególnych wtyków i z uwzględnieniem przypisanych im bity rejestrów. Tabela 12.9. Sterowanie liniami złącz standardu IEEE1284 Kierunek; Końcówka svgnalonwa:IEEE 1284-A (D-Siib), IEEE 1284-B (Centronics), IEEE 1284-C; Bil rejestru; Unia zapis / odczyt; 2, 2, 6; Rejestr danych bit 0; D0 zapis / odczyt; 3, 3, 7; Rejestr danych bit 1; D1 zapis / odczyt; 4, 4, 8; Rejestr danych bit 2; D2 zapis / odczyt; 5, 5, 9; Rejestr danych bit 3; D3 zapis / odczyt; 6, 6, 10; Rejestr danych bit 4; D4 zapis / odczyt;7, 7, 11; Rejestr danych bit 5;D5 zapis odczyt;8, 8, 12; Rejestr danych bit 6;D6 zapis / odczyt;9, 9, 13; Rejestr danych bit 7;D7 odczyt;15, 32, 4; Rejestr stanu bit 3;-BRR odczyt; 13, 13, 2; Rejestr stanu bit 4; S EL odczyt; 12, 12, 5; Rejestr stanu bit 5; PAP odczyt; 10, 10, 3; Rejestr stanu bit 6; -ACK odczyt; 11, 11, 1; Rejestr stanu bit 7; BSY zapis / odczyt; 1, 1, 15; Rejestr sterujący bit 0; -STR zapis / odczyt;14, 14,17; Rejestr sterujący bit l"**;-ALF zapis / odczyt;16, 31,14; Rejestr sterujący bit 2; INI zapis / odczyt;17, 36,16; Rejestr sterujący bit 3; -DSL *Aktywowany system dwukierunkowego portu danych. **Wykorzystanie mechanizmu sprzężenia zwrotnego. ***Sprzętowy system negacji poziomów logiczych. Z tabeli 12.9 wynika, iż port równoległy aktualnie produkowanych komputerów może być uważany jako programowalny sterownik o 17 wejściach i 12 wyjściach. Stwarza to spore możliwości sterowania różnorodnych prostych układów automatyki. Mowa tu naturalnie o sterowaniu typu „włącz-wyłącz" bowiem informacja dostarczana od zewnętrznych czujników nie może mieć charakteru analogowego. Taki sam charakter ma sygnał wytwarzany przez kontroler. Aby móc interpretować i generować przebiegi analogowe trzeba posługiwać się przetwornikami A/D i D/A dołączonymi do kilku linii wejściowych lub wyjściowych jednocześnie. W ten sposób zyskujemy możliwość regulacji wielostopniowej. Języki Turbo C lub Borland C/C++ umożliwiają dostęp do portów wejścia-wyjścia komputera z procesorem 80x86 za pośrednictwem predefiniowanych funkcji outport, outportb, inport, inportb. void outport (int ADR, int VAR) ; /* umieszcza słowo VAR */ / * w porcie ulokowanym pod adresem ADR */ void outportb (int ADR, unsigned char VAR) ; /* umieszcza bajt */ /* w porcie ulokowanym pod adresem ADR*/ int inport (int ADR) ; /* zwraca słowo odczytane z portu */ /* ulokowanego pod adresem ADR */ unsigned char inportb (int ADR) ; /* zwraca bajt odczytany */ /* z portu ulokowanego pod adresem ADR */ Przy założeniu iż opieramy się na złączu LPT1 ulokowany pod adresem standardowym schemat wywołań omawianych funkcji przebiegać powinien według następującego planu: #include #incllude #define DATA 0x378 #define STATUS 0x379 ttdefine CONTROL Ox37A ... unsigned char BITY ; BITY = inportb (CONTROL) ; /* odczyt portu sterującego */ ... BITY= 0xF0 ; outportb (DATA , BITY); /* ustawienie bitów portu danych: D7-D4=1, D3-DO=0 */ ... Ostatnia z instrukcji dokonuje ustawień na wszystkich pozycjach bitowych bez względu na to jaka była ich dotychczasowa wartość. Dużo częściej wynika potrzeba manipulacji wyłącznie określonych pozycji bitowych bez naruszania pozostałych. W takim przypadku należy posługiwać się instrukcjami maskującymi: #define CONTROL Ox37A ... unsigned char MASKA ; MASKA = 0x08 ; /* 00001000 */ outportb (CONTROL , inportb (CONTROL) | MASKA); /* ustawienie bitu */ /* -C3 w rejestrze sterującym */ MASKA = 0xF7 ; /* 11110111 */ ... outportb (CONTROL , inport (CONTROL) & MASKA); /* wyzerowanie bitu */ /* ~C3 w rejestrze sterującym */ ... Warto jeszcze raz wspomnieć, iż w powyższym przykładzie manipulacji podlega akurat jedna z pozycji bitowych, która jest zanegowana. W konsekwencji, pierwsza instrukcja outportb powoduje wymuszenie poziomu O na końcówce 17 a druga podniesienie poziomu napięcia do wysokości logicznej l. Na zakończenie przedstawimy przykład najprostszego interfejsu wykorzystującego standardowy port równoległy. Schemat takiego układu składającego się z przycisku P l i System reaguje mruganiem diody LED na naciśnięcie przycisku Pl. Jako linia wejściowa wykorzystywany jest sygnał ~ERR (końcówka 15) stowarzyszony z bitem 3 rejestru stanu. Wyjście stanowi bit 2 rejestru danych (końcówka 4). Proszę zwrócić uwagę, iż interfejs tego typu wymaga zewnętrznego napięcia zasilania +5 V. W powyższym przykładzie wyprowadzenie masy pobierane jest z końcówki 25. Oto prosty program w języku C obsługujący nasz układ. #include #incllude #define DATA 0x378 #define STATUS 0x379 void main (void) { int var; while (1) { var = inportb (STATUS) ; if ((var & 0x08) == 0) /* jeżeli S3 jest wyzerowany */ {/* to Pl załączony) */ outportb (DATA , 0x00) ; /* bit D2=0, LED świeci */ delay (200) ; outportb (DATA , 0x04) ; /* bit D2=l, LED gaśnie */ delay (200) ; } else { outportb (DATA , 0x04) ; /* jeżeli Pl zwolniony, */ }/* bit D2=li LED wyłączony) */ } } W powyższym przykładzie widać wyraźnie, iż cała moc obliczeniowa komputera zaangażowana jest w realizację prymitywnej pętli. Nieustające pobieranie i analiza zawartości portu (Pooling) nie stanowi jedynej możliwości oprogramowania przykładowego interfejsu. Kontroler portu równoległego wyposażony został bowiem w prosty system generacji przerwań. Cecha ta umożliwia implementację układów automatyki reagujących na wystąpienie pewnych zjawisk (np. przekroczenie temperatury). Warto nadmienić, iż przerwania nie są niezbędne do samego procesu drukowania. Nie były one wykorzystywane ani przez MS-DOS ani przez MS Windows. Korzystały z nich jedynie wczesne wersje OS/2. Obsługa drukarki przebiega bez zakłóceń nawet w przypadku wyłączenia generacji przerwań. Deaktywację taką można podjąć zerując bit 4 w rejestrze sterującym. Ustawienie tego bitu powoduje, iż kontroler pobudza linię IRQ5 lub IRQ7 (zależnie od konfiguracji) w momencie wykrycia narastającego zbocza na linii ~ACK. Zewnętrzne układy logiczne muszą zadbać o skierowanie ocenianego sygnału na tą właśnie linię. Program sterowania interfejsu należy w tym wypadku umieścić w procedurze obsługi przerwania podmieniając stosowne adresy punktów wejściowych w tabelach wektorów BIOS. Należy pamiętać, że układy wejścia-wyjścia złącza równoległego wykonane są w technice TTL i źle znoszą przeciążenia. Prąd pobierany z wyjścia nie powinien przekraczać wartości kilku mA. Dla wszystkich linii, z których korzystają zewnętrzne układy interfejsu zaleca się stosowanie separujących bramek buforowych. * * * Rozdział 12. Łącze równoległe Złącze równoległe jest jednym z najstarszych elementów architektury PC, który (nie licząc pewnych kosmetycznych zabiegów) utrzymuje się w niezmienionej formie przez cały szereg lat. Wiele innych elementów architektury przeszło w tym samym okresie czasu wiele burzliwych etapów rozwoju zakończonych powstaniem kolejnych generacji elementów lub wręcz zatwierdzeniem całkowicie nowych standardów. Modele prostych złącz równoległych były w użyciu na wiele wcześniej zanim pojawiły się mikrokomputery. Złącza takie służyły głównie do przekazywania danych pomiarowych. W momencie opracowywania przez firmę IBM pierwotnych zarysów PC zaistniała potrzeba implementacji prostego złącza równoległego obsługującego drukarkę. W tym celu sięgnięto po uproszczony wariant standardu Centronics posługującego się w pełnej wersji 29 liniami połączeniowymi i poziomami logicznymi TTL. W oryginale obydwa końce przewodu połączeniowego wyposażone były w specjalny 36-końcówkowy wtyk, którego duże rozmiary nie znalazły uznania wśród twórców architektury PC. Zmieniono więc format gniazda po stronie komputera na bardziej kompaktowy typ SUB-D (DB-25) dysponujący 25 końcówkami. Aby zachować wszystkie oryginalne linie sygnałowe protokołu Centronics zredukowana została do ośmiu liczba przewodów masy (w oryginale 12). Posłużenie się gniazdem DB-25 pozwoliło na umieszczenie na tej samej blaszce maskującej znormalizowaną szczelinę obudowy (Slot) dodatkowego gniazda DB-9 stanowiącego wyprowadzenie złącza szeregowego PC. Magistral danych jest 8-bitowa i składa się z linii DO - D7. Ponieważ jedynym zadaniem łącza równoległego, wynikającym z przyjętej architektury systemu, była obsługa drukarki nie ma się co dziwić, iż specyfikacja obejmowała wyłącznie transfer jednokierunkowy (od komputera do drukarki). Oprócz 8-bitowej magistrali danych złącze równoległe wyposażone jest w cztery linie sterujące (~STR, -ALF, -INI, ~DSL). Drukarka mogła co prawda zgłaszać pewne sytuacje nienormalne (jak np. brak papieru) ale o transmisji danych w odwrotnym kierunku nie było mowy. Sprytni programiści szybko jednak odkryli możliwość takiej transmisji (tryb półbaj-towy). Oryginalna specyfikacja portu równoległego definiuje 5 linii statusowych (~ERR, SEL, PAP, ~ACK, BSY), z których część służy realizacji protokołu Centronics a część pozwala na sygnalizację pewnych stanów wyjątkowych. W omawianym trybie cztery spośród tych linii wykorzystuje się do transmisji w kierunku odwrotnym. Dwa następu-jące po sobie półbajtowe cykle pozwalają na organizację wymiany danych w tempie około 100 kB/s. Zachęciło to szereg firm do wypuszczenia na rynek kart sieciowych i kontrolerów SCSI opierających swe działanie na tak przerobionym złączu równoległym. W złącze równoległe wyposażano przez długi czas wszystkie, przeznaczone do współpracy z PC drukarki. Nie jest to oczywiście jedyna możliwość bowiem drukarka może również współpracować ze złączem szeregowym. Na rynku obecne są modele wyposażone bądź to w oba rodzaje wspomnianych złącz, bądź posiadające możliwość wymiany modułu obsługującego łącze (interfejsu). Port szeregowy, jakkolwiek wolniejszy od równoległego, pozwala na pokonanie dużo większych dystansów dzielących komputer od drukarki, co w niektórych zastosowaniach ma kluczowe znaczenie. Specyfikacja łącza szeregowego dopuszcza transmisję danych na odległość do 200 m natomiast łącze równoległe jedynie do około 5 m. Współczesne drukarki wykraczają poza rolę biernego odbiorcy poleceń i danych, dysponują bowiem zdolnością dwustronnej komunikacji z obsługującym je komputerem. Możliwości takie wymagają jednak korzystania z portów równoległych, które zostały rozbudowane o dodatkowe funkcje, nie ujęte w standardzie oryginalnego IBM-PC. W dalszej części tego rozdziału zaznajomimy Czytelnika również z tymi rozszerzeniami. Współczesny komputer PC może wyprowadzać na zewnątrz kilka złącz równoległych. Maksymalna liczba takich łącz, a tym samym akceptowanych przez BIOS i DOS drukarek, wynosi cztery. System operacyjny identyfikuje je poprzez oznaczenia LPT1, LPT2, LPT3 i LPT4. Każde z tych łącz musi być zatwierdzone przez BIOS w trakcie ładowania systemu. Informacja o liczbie łącz równoległych w systemie przechowywana jest w obszarze danych BIOS-u, w bitach 7. i 6. bajtu o adresie 0040:0011h. Niektóre starsze odmiany BIOS-u ignorują łącza LPT3 i LPT4. Poruszając się na poziomie systemu operacyjnego DOS możemy odwoływać się do drukarek przez symbole LPT1 - LPT4. Synonimem LPT1 jest PRN - domyślna drukarka systemu. Symbole te stanowią oznaczenia urządzeń i nie jest powiedziane, że z danym łączem LPTn musi współpracować drukarka. Jedynie programy obsługujące przerwania sprzętowe pochodzące od tych łącz (zwykle 1RQ5 i 1RQ7) ukierunkowane są na specyfikę obsługi drukarki z łączem równoległym. Specyfikacja portu równoległego PC ujęta została w standardzie IEEE-1284 wydanym po raz pierwszy w roku 1994. Standard ten definiuje 5 trybów pracy: • Tryb kompatybilny (Compatibility Modę). Podstawowy tryb nazywany też trybem Centronics od swego pierwowzoru. Transmisja jednokierunkowa, prędkość maksymalna może sięgać 200 kB/s, chociaż praktycznie rzadko kiedy przewyższa wartość 150 kB/s. • Tryb półbajtowy (Nibble Modę}. Pozwala nie tylko na wysyłanie ale i na odbiór danych poprzez 4 linie wejściowe. Oferuje kanał zwrotny o szerokości maksymalnej około 100 kB/s. • Tryb bajtowy PS/2 (By t e Mode). Tryb te korzysta ze zmodyfikowanego (nie należącego do standardu) dwukierunkowego portu danych. Modyfikacja taka musi być zaimplementowana przez producenta sprzętu i nie pomogą tu żadne sztuczki programowe. Utworzony w ten sposób kanał zwrotny oferuje pasmo maksymalne do 200 kB/s. Szerokość kanału podstawowego nie ulega zmianie (ok. 200 kB/s). Aktywacja kanału zwrotnego odbywa się za pośrednictwem bitu 5 rejestru sterującego, szczegóły w dalszej części rozdziału. • Tryb EPP (Enhanced Parallel Port). Kanał dwukierunkowy o szerokości maksymalnej 2,3 MB/s. Mimo tego w praktyce transfer rzadko przewyższa wartość l MB/s. Tryb nie jest na ogół stosowany do obsługi drukarek a raczej dla potrzeb skanerów, interfejsów pamięci masowej i kart sieciowych. • Tryb ECP (Extended Capabilities Port). Tryb udostępnia kanał dwukierunkowy o parametrach podobnych do EPP. W systemie tym korzysta się z dodatkowych buforów oraz kanału DMA. Wykorzystywany jest głównie do obsługi profesjonalnych drukarek i urządzeń kompleksowych takich jak Fax-Skaner-Drukarka. Pierwsze trzy tryby opierają się w swej przeważającej części na pierwotnej maszynie określanej jako SPP (Standard Parallel Port). Dwa pozostałe wymagają kompletnej modyfikacji sprzętu. Całkowicie odmienne są protokoły uzgadniające (Handshake) a i uzyskiwane prędkości transmisji leżą w całkiem innym zakresie. Wszystkie kolejne standardy są zgodne w dół. Należy jednak pamiętać, iż tryby bajtowy i półbajtowy nie były implementowane na wszystkich kartach i kontrolerach. Terminologia BIOS-SETUP Wybór trybu pracy złącza równoległego odbywa się za pośrednictwem programu konfiguracyjnego BIOS-SETUP w punktach noszących nazwę Onboard Parallel Mode lub Parallel Port Mode. W praktyce, w zależności od typu komputera, rodzaju zestawu układów płyty głównej (Chip-Set) i wersji BIOS, spotkać można różne kombinacje trybów podstawowych. Poniższe zestawienie zawiera większość możliwych opcji stanowiących kombinacje omówionych w dalszej części trybów podstawowych. • Printer Mode (Defaitlt Mode Standard Mode Normal Mode, SPP). Podstawowy tryb bazowy określony często również mianem Centronics. Transmisja ma charakter jednokierunkowy a próby manipulacji bitem 5 rejestru sterującego nie powodują żadnej dodatkowej reakcji. Kanał zwrotny egzystuje jedynie w formie półbajtowej. • Standard & Bi-Directional. Pozwala nie tylko na wysyłanie ale i na odbiór danych poprzez 8 linii magistrali danych. Ustawienie bitu 5 rejestru sterującego powoduje odwrócenie kierunku transmisji. • EPP 1.7 & SPP. Tryb EPP (Enhanced Parallel Port) w wersji 1.7 (różnice pomiędzy wersjami 1.7 i 1.9 protokołu EPP omówione są w punkcie poświęconym trybowi EPP). Dostępne są zarówno rejestry standardowe SPP jak i dodatkowe, określone dla trybu EPP. Bit 5 rejestru sterującego SPP odwraca kierunek transmisji. Wersja 1.7 specyfikacji EPP może być pozbawiona implementacji bitu O rejestru stanu (Time-Out). • EPP 1.9 & SPP. Tryb EPP w wersji l .9 (implementacja bitu Time-Out). • ECP. Tryb ECP (Extended Capabilities Port). W tym przypadku system gwarantuje dostęp do portu ECR, nie ma natomiast możliwości wykorzystania trybu EPP. • ECP & EPP 1.7 lub ECP & EPP 1.9. Kombinacja trybów ECP i EPP w stosownej odmianie. Dostępne zarówno funkcje ECP (rejestr ECR) jak i protokół EPP. Wybór trybu należy dokonywać za pośrednictwem opcji konfiguracyjnych w stosownym punkcie CMOS-SETUP. Istnieją naturalnie rejestry kontrolne, które sterują tymi funkcjami (Ox2A, OxFO, Ox3Fl) i właśnie za ich pośrednictwem BIOS konfiguruje kontrolery portów równoległych. Nie zaleca się bezpośredniego dostępu do tych rejestrów, a wszelkie manipulacja należy pozostawić w gestii BIOS. Tryby podstawowe W dalszej części rozdziału przedstawimy bardziej szczegółowo wspomniane wcześniej tryby podstawowe. W kolejności omówione zostaną następujące tryby: standardowy, półbajtowy, bajtowy (PS/2), EPP i ECP. Tryb standardowy Tryb standardowy korzysta z szeregu sygnałów ujętych w pierwotnej specyfikacji Centronics. Linie te (wraz z towarzyszącymi im numerami końcówek wtyczek) zebrane zostały w tabeli 12.1. Oto krótki opis wymienionych w tabeli sygnałów: DO - D7= Magistrala danych, w systemie standardowym wyłącznie j ednokierunko wa. ~STR=Strobe. Niski poziom logiczny tej linii nakazuje drukarce odebranie bajtu z linii danych DO - D7. Minimalna szerokość impulsu wynosi 0,5 us. ~ACK=Acknowledge. Niskim poziomem logicznym na tej linii drukarka potwierdza odebranie bajtu i gotowość do przyjęcia następnego. Szerokość impulsu potwierdzającego wynosi około 5 u.s. BSY=Busy. Wysoki poziom logiczny tego sygnału może oznaczać jeden z następujących stanów: • drukarka jest w stanie off-line (jest logicznie odłączona od komputera), Tabela 12.1. Oznaczenia linii przewodu połączeniowego według standardu Centronics Końcówka wtyku DB-25;Końcówka wtyku Centronics-36;Sygnał;Kierunek transmsji (względem komputera} 1; 1; ~STR; wyjście 2; 2; DO; wyjście 3; 3; Dl; wyjście 4; 4; D2; wyjście 5; 5; D3; wyjście 6; 6; D4; wyjście 7; 7; D5; wyjście 8; 8; D6; wyjście 9; 9; D7; wyjście 10; 10; ~ACK; wejście 11; 11; BSY wejście 12; 12; PAP wejście 13; 13; SEL wejście 14; 14; -ALF wyjście 15; 32; ~ERR wejście 16; 31; -INI wyjście 17; 36; ~DS wyjście 18-25 19-30,33; GND; 16; OV; 17; obudowa; 18; +5 V; 34 35; wolne; • wewnętrzny bufor drukarki jest pełny, • drukarka odbiera właśnie znak, • trwa inicjalizacja drukarki, • wystąpił błąd w pracy drukarki. PAP=Paper Out. Wysoki poziom logiczny na tej linii sygnalizuje wyczerpanie się zapasu papieru. Sygnał ten bywa też oznaczany jako PERR (Paper Error). Paper Out. Wysoki poziom logiczny na tej linii sygnalizuje wyczerpanie się zapasu papieru. Sygnał ten bywa też oznaczany jako PERR (Paper Error). SEL=Select. Wysoki poziom logiczny oznacza, że drukarka jest w stanie on-line, tj. jest logicznie połączona z komputerem. Sygnał ten bywa też oznaczany jako ONOFF (On-line/Off-line). -ALF=Auto Linę Feed. Niski poziom logiczny na tej linii poleca drukarce automatyczne dołączanie znaków wysuwu wiersza (LF) po odebraniu znaku powrotu karetki (CR). ~ERR=Error lub Fault. Przyczyną niskiego poziomu logicznego na tej linii może być: •brak papieru, • przejście drukarki w stan off-tine, • inny błąd (np. wyłączenie drukarki). -INI=nitialization. Niski poziom logiczny na tej linii uruchamia w pewnych typach drukarek procedurę inicjalizujacą. Zgodnie ze specyfikacją wymagany jest impuls o długości co najmniej 50us. ~DSL=Device Select. Niski poziom logiczny powoduje wybranie drukarki. Zwykle linia ta jest na stałe połączona z masą, tzn. drukarka jest stale wybrana. Inne oznaczenie tego sygnału to •SELECT IN. W trybie standardowym realizowany jest klasyczny protokół Centronics (rysunek 12.1). Zgodnie z jego założeniami dla wysłania pojedynczego bajtu do drukarki muszą być podjęte następujące kroki: • Komputer wystawia bajt danych na magistralę DO - D7 (zapis do portu danych). • Komputer sprawdza sygnał BSY (Busy) w celu ustalenia, czy drukarka jest zdolna do przyjęcia danych. Wysyłanie danych do urządzenia, które nie jest gotowe (inaczej zajęte przetwarzaniem) powoduje ich utratę. Drukarka zajęta przetwarzaniem utrzymuje linię BSY na poziomie logicznej jedynki. • Komputer aktywuje linię ~STR obniżając jej poziom do wysokości logicznego zera. Stanowi to sygnał dla drukarki, że na liniach DO - D7 odłożony jest bajt danych, który należy wczytać do własnych buforów wejściowych. Minimalna długość impulsu na linii ~STR wynosi w myśl specyfikacji co najmniej l us. Realizowana wartość typowa to około 5 us. • Drukarka potwierdza fakt przyjęcia danych impulsem o szerokości 5 us na linii ~ACK. W wielu konkretnych rozwiązaniach kontrolery portu równoległego ignorują impuls potwierdzający. Opisane wyżej kroki realizowane są przez procesor, który zmuszony jest do wykonywania szeregu operacji na rejestrach w przestrzeni wejśćia-wyjścia. Fakt ten stanowi naturalne ograniczenie prędkości, którą może osiągnąć złącze pracujące w trybie Centronics. Bardziej rozbudowane protokoły (EPP i ECP) realizują wspomniane operacje automatycznie powierzając je wyspecjalizowanym układom sprzętowym -jedynym zadaniem CPU jest wykonanie pojedynczej instrukcji zapisu bajtu do portu danych. Zanim przejdziemy do zaprezentowania tych bardziej zaawansowanych rozwiązań przedstawimy elementarne mechanizmy, które umożliwiają procesorowi przejęcie kontroli nad poszczególnymi liniami złącza równoległego. Z każdym portem równoległym stowarzyszone są trzy specjalne rejestry: rejestr danych, rejestr stanu i rejestr sterujący. Trójki rejestrów ulokowane są w spójnych obszarach przestrzeni adresowej wejśćia-wyjśćia, których początki wyznaczają tzw. adresy bazowe. Dla każdego z obecnych w systemie portów LPTx stowarzyszony z nim rejestr danych leży pod adresem bazowym, o krok dalej mamy rejestr stanu (adres bazowy + 1), a na końcu rejestr sterujący (adres bazowy + 2). Adresy bazowe wyznaczane są przez BIOS dla wszystkich łącz równoległych zaakceptowanych w fazie przebiegu procedur POST. Przydzielone adresy przechowywane są w obszarze danych BIOS (0040:0008h - 0040:OOOEh) - tabela 12.2 Tabela 12.2. Adresy bazowe portów równoległych Adres; Szerokość; Znaczenie; Wartość standardowa 0040:0008h; słowo; adresu bazowy łącza LPT1; 378h 0040:000Ah; słowo; adresu bazowy łącza LPT2; 278h 0040:000Ch; słowo; adresu bazowy łącza LPT3; 3BCh 0040:000Eh; słowo; adresu bazowy łącza LPT4; 2BCh Aby poznać faktyczną lokalizację adresów bazowych w przypadku konkretnego komputera, można posłużyć się jednym z wielu programów diagnostycznych, które podają cały szereg informacji dotyczących konfiguracji danego systemu (np. msd.exe). W charakterze środka doraźnego odwołać się można do programu debug.exe wchodzącego w skład zestawu dostarczanego wraz z MS-DOS: C: V>debug -d 0040:0008 80040:0000 .. .. .. .. .. .. .. .. 78 03 78 02 00 00 00 00 ....xx... W tym konkretnym przypadku adres bazowy LPT1 leży pod adresem 0x378h, a dla LPT2 pod adresem 0x278h. Porty LPT3 i LPT4 nie zostały uznane przez BIOS. Znając adres bazowy łatwo wyznaczamy poszczególne adresy wspomnianej już trójki portów określanych mianem rejestrów SPP (Standard Paral/e/ Port Registers). Tabela 12.3. Zestaw rejestrów SPP Lokalizacja rejestru; Nazwa; Typ Adres bazowy + 0; Rejestr danych (Data Register); zapis / odczyt Adres bazowy + 1; Rejestr stanu (Status Register); odczyt Adres bazowy + 2; Rejestr sterujący (Control Register); zapis Rejestr danych (Data Register) - adres bazowy + 0 Rejestr danych umożliwia dostęp do magistrali danych DO - D7. Zlokalizowany jest pod adresem bazowym przyjętym dla danego złącza. Umieszczenie bajtu danych w tym rejestrze powoduje odwzorowanie sygnatury bitowej na stosowych liniach magistrali danych, zatem ustawienie dowolnego bitu tego rejestru powoduje pojawienie się napięcia +5 V na stowarzyszonej z nim końcówce. Oznacza to, że żadna z pozycji nie ulega zanegowaniu, co ma miejsce w przypadku niektórych bitów kolejnych rejestrów SPP. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0 bit 7=Poziom sygnału na końcówce D7: 0 - niski, 1 - wysoki. bit 6=Poziom sygnału na końcówce D6: 0 - niski, 1 - wysoki. bit 5=Poziom sygnału na końcówce D5: 0 - niski, 1 - wysoki. bit 4=Poziom sygnału na końcówce D4: 0 - niski, 1 - wysoki. i bit 3=Poziom sygnału na końcówce D3: 0 - niski, 1 - wysoki. bit 2=Poziom sygnału na końcówce D2: 0 - niski, 1 - wysoki. bit 1=Poziom sygnału na końcówce Dl: 0 - niski, 1 - wysoki. bit 0=Poziom sygnału na końcówce DO: 0 - niski, 1 - wysoki. Rejestr stanu (Status Register) - adres bazowy + 1 Rejestr ten dostarcza informacji o poziomie sygnałów BSY, ~ACK, PAP, SEL i ~ERR. Rejestr stanu przeznaczony jest wyłącznie do odczytu, a wszelkie zapisywane do niego dane będą ignorowane. Bit 2 informuje o wystąpieniu przerwania sprzętowego. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; x; bit 0 bit 7=Poziom napięcia na linii BSY: 0 - wysoki, 1 - niski. bit 6=Poziom napięcia na linii ~ACK: 0 - niski, 1 - wysoki. bit 5=Poziom napięcia na linii PAP: 0 - niski, 1 - wysoki. bit 4=Poziom napięcia na linii SEL: 0- niski, 1 - wysoki. bit 3= Poziom napięcia na linii ~ERR: 0 - niski, 1 - wysoki. bit 2=~IRQ: 0 - przerwanie wystąpiło, 1 - nie było przerwania. bity 1 - 0=Zarezerwowane. Bit 0 implementuje tzw. Time-Out przy pracy w trybie EPP. Proszę zwrócić uwagę na wbudowaną sprzętową negację sygnału na linii BSY. Zero na pozycji bitowej 7 informuje o wysokim poziomie logicznym na stowarzyszonej z nią końcówce, tzn.: bit 7 = 0-» BSY =+5 V bit 7= l ->BSY = 0V Rejestr sterujący (Control Register), adres bazowy + 2 Rejestr sterujący w specyfikacji SPP przeznaczony jest wyłącznie do zapisu. Pozwala on na wymuszanie określonych poziomów napięcia na liniach ~DSL, INI, -ALF i ~STR. Łącze równoległe może być źródłem przerwania sprzętowego (zwykle IRQ5 lub IRQ7), jeżeli sygnał na linii ~ACK zmieni stan z wysokiego na niski. Bit 4 stanowi przełącznik umożliwiający blokadę mechanizmu wyzwalania przerwania. Bit 5 aktywuje mechanizm pracy dwukierunkowej dla rejestru danych. W normalnych warunkach port ten jest jedynie kanałem wyjściowym. Ustawienie bitu 5 przynosi pożądany skutek jedynie w układach, których sprzętowa realizacja istotnie dopuszcza możliwość pracy dwukierunkowej (wymagana jest obecność dodatkowego szeregu rejestrów zatrzaskowych). Standardowa definicja złącza równoległego nie zawierała tego jako element konieczny. x; x; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-6 Zarezerwowane. bit 5 Aktywacja dwukierunkowej pracy portu danych (Enable Bi-Directional Data Port}. bit 4 Generacja sygnałów IRQ, (Enable IRQ via ~~ACK): 0 - zabroniona, 1 - dozwolona. bit 3 Ustanawia poziom napięcia na końcówce ~DSL (zanegowany): 0 - wysoki, 1 - niski. bit 2 Ustanawia poziom napięcia na końcówce INI: 0 - niski, 1 - wysoki. bit 1 Ustanawia poziom napięcia na końcówce -ALF (zanegowany): 0 - wysoki, 1 - niski. bit 0 Ustanawia poziom napięcia na końcówce -STR (zanegowany): 0 - wysoki, 1 - niski. Uwaga na bity 3, 1 i 0, które wyposażone są w sprzętowe układy negacji poziomów logicznych, na przykład: bit 1 = 0 -> -ALF = +5 V bit 1 = 1 -> -ALF = 0 V Tryb półbajtowy Tryb półbajtowy (Nibble Modę) stanowi alternatywę przy odczycie 8 bitów bez konieczności korzystania z funkcji dwukierunkowego portu danych. W trybie tym trzeba stosować zewnętrzny multiplekser 1x8/2x4 (np. 74LS157) łamiący zewnętrzną 8 bitową szynę danych na dwie porcje podawane kolejno na wejścia szyny 4-bitowej utworzonej z końcówek BSY(ll), ~ACK(10), PAP(12)i SEL(13). Montowanie kompletnego bajtu z dwóch składników leży w gestii oprogramowania. Tryb ten jest stosunkowo powolny bowiem wymaga szeregu dodatkowych instrukcji dostępu do portów. Przy założeniu, że linia ~STR połączona jest z końcówką przełącznika multipleksera (~A/B) wymagana jest następująca sekwencja programowa: #fdefine CONTROL 0x37a /* Rejestr sterujący LPT1: */ #define STATUS 0x379 /* Rejestr stanu LPTl: */ ... unsigned char a, b ; ... outportb(CONTROL , inportb(CONTROL) | 0x01) ; /* multiplekser na */ /* db0-db3 */ a = (inportb(STATUS) & 0xf0) ; /* zapamiętanie stanu db0-db3 */ a = a>>4 ;/* przesunięcie */ outportb(CONTROL , inportb(CONTROL) | Oxfe) ; /* multiplekser na */ /* db4-db7 */ a = a | (inport (STATUS) & 0xf0) ; /* zapamiętanie stanu db4-db7 */ b = b ^ 0x88 ; /* linia BSY dostarcza zanegowanej informacji */ Utworzona 4-bitowa magistrala doprowadzona jest do górnej połówki rejestru stanu i dlatego niezbędna jest instrukcja przesunięcia. W praktyce może się okazać konieczne wprowadzenia pewnych opóźnień pomiędzy kolejnymi instrukcjami dostępu do portów. l Tryb bajtowy (PS/2) W trybie bajtowym PS/2 (Byte Modę) korzystamy z dwukierunkowego portu danych o ile funkcja taka została wbudowana w sprzęt. Aktywacja systemu odbywa się przy pomocy bitu 5 rejestru sterującego. Tryb EPP Standard EPP (Enhanced Parallel Port) przedstawiony został jako efekt wspólnych uzgodnień firm Intel, Xircom i Zenith Data Systems. Prędkość magistrali równoległej pracującej w trybie EPP przewyższa zdecydowanie wartości oferowane przez Centronics i sięga zakresu 2 MB/s. Protokół EPP stosuje dokładnie to samo okablowanie ale prze-definiowuje dla swoich potrzeb znaczenie niektórych linii połączeniowych. Jak długo system znajduje się w trybie EPP, połączenia biegnące od końcówek 12, 13 i 15 mogą być wykorzystywane w sposób dowolny. abela 12.4. Zmiana znaczenia sygnałów zfącza równoległego pracującego w trybie EPP Końcówka wtyku DB-25; Sygnał SPP; Sygnał EPP; Znaczenie 1; -STR; -WRITE; Kierunek transmisji, wysoki poziom logiczny oznacza zapis 2-9; D0-D7; D0-D7; Dwukierunkowa magistrala danych 10; -ACK; 1NTERRUPT; Narastające zbocze wyzwala przerwanie IRQ 11; BSY; WAIT; Sygnał zamknięcia cyklu EPP. Cykl EPP zaczyna się gdy WAIT jest na poziomie niskim a kończy się gdy WAIT jest na poziomie wysokim. 12; PAP; -; Nie wykorzystywany w trybie EPP 13; SEL; -; Nie wykorzystywany w trybie EPP 14; -ALF; -DATA STROBE; W stanie niskim wskazuje na transfer danych 15; -ERR; -;Nie wykorzystywany w trybie EPP 16; -INI; -RESET; Sygnał Reset w stanie niskim 17; -DSL; -ADDR STROBE; W stanie niskim wskazuje na transfer adresu 18 - 25; GND; GND; Masa Wysyłanie danych złączem równoległym w trybie EPP jest z punktu widzenia procesora stosunkowo proste, wymaga bowiem wyłącznie pojedynczej instrukcji zapisu przesyłanego bajtu do odpowiedniego portu. Jeżeli wysyłane są dane zapis następuje do rejestru danych EPP (adres bazowy + 4). Dla adresów przewidziany jest oddzielny port adresowy EPP (adres bazowy + 3). W ten sam sposób przebiega odczyt danych i adresów wysyłanych przez urządzenie ponieważ obydwa wspomniane porty są dwukierunkowe. Cykl zapisu przebiega według następującego algorytmu (rysunek 12.3): • Zapis bajtu do odpowiedniego portu. • Aktywowana jest linia -WRITE. • Bajt wystawiany jest na szynę danych. • Jeżeli urządzenie utrzymuje -WAIT na poziomie niskim, wyzwalany jest sygnał zegarowy (DATA STROBE lub ADDR STROBE). • Urządzenie potwierdza odbiór bajtu podnosząc poziom na linii -WAIT. • Formowane jest tylne zbocze sygnału zegarowego (-DATA STROBE lub -ADDR STROBE). . Cykl zakańcza formowanie tylnego zbocza sygnału -WAIT. W podobny sposób przebiega proces odwrotny, w którym urządzenie wysyła do komputera dane lub adres (rysunek 12.4). • Procesor wykonuje rozkaz odczytu portu (danych lub adresowego). • Jeżeli -WAIT jest na poziomie niskim aktywowany zostaje sygnał zegarowy -STROBE. • Kontroler portu EPP oczekuje potwierdzenia w postaci podniesienia poziomu na linii -WAIT. . Wystawiane przez urządzenie dane lub adres pobierane są z magistrali DO - Dl. Wszystkie punkty przedstawionych algorytmów (za wyjątkiem pierwszego kroku) realizowane są przez układy sprzętowe kontrolera i nie wymagają żadnej ingerencji programowej. Omawiany we wcześniejszym punkcie protokół Centronics jest pozornie prostszy i składa się z mniejszej liczby etapów. Trzeba w tym miejscu jednak wyraźnie podkreślić, iż uformowanie każdego z impulsów wymagało bezpośredniej ingerencji procesora poprzez właściwą modyfikację określonych pozycji bitowych stosownych rejestrów. W praktyce oznacza to całą sekwencję instrukcji, bowiem modyfikacja pojedynczej pozycji bitowej pociąga za sobą konieczność odczytu zawartości pierwotnej, zamaskowania bitów nienaruszalnych wraz ze zmianą wybranego bitu i ostatecznie ponowny zapis. Wszystko to odbija się na obniżeniu maksymalnej szybkości pracy całego złącza. Tryb EPP może być zaimplementowany w jednej z dwóch wersji oznaczanych symbolicznie jako EPP 1.7 i EPP 1.9. Opisany tu protokół odwzorowuje zasady określone w drugiej z tych wersji. Odmiana l .7 charakteryzuje się zmianą w ocenie gotowości do wyzwolenia przedniego zbocza sygnału zegarowego -DATA STROBE lub -ADDR STROBE. W tym przypadku nie ma obowiązku oczekiwania na niski poziom sygnału -WAIT. Obydwie odmiany protokołu muszą natomiast odczekać do obniżenia poziomu -WAIT jako znak zakończenia danego cyklu. Dostęp do złącza równoległego pracującego w systemie EPP odbywa się (podobnie jak w przypadku trybu Centronics) za pośrednictwem grupy rejestrów (tabela 12.5). Pierwsze trzy rejestry grupy EPP pokrywają się z zestawem SPP (Standard Parallel Port}. W ten sposób zagwarantowana jest zgodność w dół - posługując się złączem równoległym pracującym w trybie EPP można przesyłać dane w klasyczny sposób wykorzystując port adresu bazowego wraz z opisanym w poprzednim punkcie protokołem Centronics. Tabela 12.5. Zestaw rejestrów EPP Lokalizacja rejestru; Nazwa; Typ Adres bazowy + 0; Rejestr danych - SPP (Data Register); zapis Adres bazowy + 1; Rejestr stanu - SPP (Status Register); odczyt Adres bazowy + 2; Rejestr sterujący - SPP (Control Register); zapis Adres bazowy + 3; Rejestr adresowy - EPP (Address Register); zapis / odczyt Adres bazowy + 4; Rejestr danych - EPP (Data Register);zapis / odczyt Adres bazowy + 5; Transfer 16/32 bity; Adres bazowy + 6; Transfer 32 bity; Adres bazowy + 7; Transfer 32 bity; Przejście do trybu EPP możliwe jest pod warunkiem, że przyłączone do złącza urządzenie obsługuje ten tryb. Jak już wcześniej wspomniano, transmisja bajtu sprowadza się do umieszczenia lub pobrania go z odpowiedniego rejestru. Towarzysząca transmisji sekwencja sygnałów sterujących wytwarzana jest automatycznie przez kontroler złącza równoległego i nie wymaga dodatkowych kroków programowych. Transfer danych przebiega poprzez rejestr danych (adres bazowy + 4) a proces przesyłania adresu za pośrednictwem rejestru adresowego (adres bazowy + 3). Zarówno rejestr adresowy EPP jak i rejestr danych EPP są dwukierunkowe, co ułatwia komunikację wzajemną (te same adresy portów). Jeśli złącze pracuje w trybie EPP modyfikacji ulega znaczenie bitu O rejestru stanu SPP (w trybie Centronics jest on zarezerwowany). Bit ten będzie ustawiany w wypadku wystąpienia przekroczenia limitu czasowego (Time-Out). Stan taki ma miejsce, jeżeli linia -WAIT nie ulegnie zwolnieniu po upływie pewnego określonego czasu (zwykle około 10 u.s) liczonego od momentu aktywowania sygnału TOR lub IOW (na magistrali ISA). Tryb EPP jest mocno powiązany z uzależnieniami czasowymi panującymi na magistrali ISA. Cykl zapisu pojedynczego bajtu do urządzenia umieszczonego na drugim końcu przewodu łączącego z portem równoległym traktowany jest tak jak każdy inny cykl zapisu (do urządzenia wejść i a-wyjść i a) realizowany za pośrednictwem magistrali ISA. Ponieważ cykl taki trwa zwykle wielokrotnie dłużej niż pojedynczy takt zegara magistrali, kontroler portu równoległego zmuszony jest do wprowadzania dodatkowych cykli oczekiwania poprzez aktywację linii IOCHRDY (I/O Channel Ready). Sygnał ten blokuje de facto cały ruch na szynie ISA. Bit O rejestru stanu SPP pełni w tym przypadku rolę zaworu bezpieczeństwa przywracającego ruch na magistrali w przypadku gdy urządzenie zewnętrzne z jakichś względów nie przysyła sygnału potwierdzenia -WAIT (bo jest na przykład wyłączone). Należy się liczyć z faktem, iż bit Time-Out może nie być zaimplementowany w wersji 1.7 specyfikacji EPP. Dodatkowe porty położone pod kolejnymi adresami (adres bazowy +5, +6 i +7) mogą ułatwić transport słów 16 i 32-bitowych. Ich znaczenie i funkcje nie są na tyle znormalizowane by można było się nimi powszechnie posługiwać. Jeżeli dany kontroler implementuje taką możliwość, do omawianych portów można zapisać na raz 2 lub 4 bajty, które zostaną kolejno automatycznie przesłane 8-bitową szyną złącza równoległego. Tryb ECP Tryb ECP (Extended Capabilities Modę) opracowany został przez firmy Microsoft i Hewlett Packard. System ten (podobnie jak EPP) korzysta z silnego wsparcia ze strony sprzętu, który generuje określone przez protokół sekwencje sygnałów sterujących. Jakkolwiek sama szybkość transmisji porównywalna jest z oferowaną przez EPP, omawiany w tym punkcie tryb przekazu ma inne cenne zalety: • Możliwość korzystania z DMA. Skojarzenie portu równoległego z kanałem DMA zdecydowanie poprawia parametry systemu pracującego pod kontrolą Windows. • Dodatkowy bufor. Kontroler portu równoległego ma możliwość korzystania z dodatkowego rejestru buforowego typu FIFO (First In First Out}. Fakt ten pozwala na zmniejszenie uzależnienia systemu od chwilowej dyspozycji obsługiwanego urządzenia zewnętrznego. Na ogół implementowany jest 16 stopniowy bufor FIFO. • Kompresja danych. Tryb ECP korzysta z prostego systemu kompresji oznaczanego w skrócie jako RLE (Run Length Encoding). Zarówno drukarki jak i skanery przetwarzają obrazy, w których przynajmniej pewne fragmenty stanowią jednolite płaszczyzny. Strumień danych płynących złączem równoległym zawiera więc na ogół dłuższe sekwencje powtarzających się znaków. W systemie RLE łańcuch taki redukowany jest do wymiaru dwóch bajtów: pierwszy z nich jest licznikiem RLC (Run Length Count) określającym liczbę znaków łańcucha a drugi stanowi wzorzec znaku. Kodowanie RLE pozwala teoretycznie na osiągnięcie współczynnika kompresji 1:64. • Adresowanie kanałów. ECP umożliwia definicję kanałów logicznych poprzez przydzielenie określonym urządzeniom adresów wewnętrznych (Channel Addressing). System ten utworzony został nie tyle w celu odróżniania szeregu urządzeń podłączonych do jednego portu równoległego co raczej dla wyszczególnienia pewnych bloków funkcjonalnych zawartych w ramach jednego zespołu. Przykładem takiego urządzenia może być kombajn typu skaner-faks-drukarka. Transfer danych kanałami logicznymi pozwala w tym wypadku na lepsze wykorzystanie złącza równoległego bowiem komunikacja może być podejmowana nawet wtedy, gdy bufory lokalne pewnych urządzeń składowych uległy już przepełnieniu. W systemie ECP można przydzielić do 128 adresów logicznych. Protokół ECP (podobnie jak EPP) przedefiniowuje dla swoich potrzeb znaczenie linii połączeniowych złącza równoległego. Przedeflniowanie to ma miejsce jednak jedynie w przypadku przejścia do trybu ECP. Obowiązuje pełna zgodność ,.w dół" - port równoległy może być przełączony w tryb SPP lub EPP. W takich warunkach następuje przywrócenie znaczenia linii połączeniowych stosowne dla aktualnego trybu. Tabela 12.6. Zmiana znaczenia sygnałów złącza równoległego pracującego w trybie ECP Końcówka wtyku DB-25; Sygnał SPP; Sygnał ECP; Znaczenie 1; ~STR; ~HostCLK; Zegar kluczujący transmisji w kierunku od komputera do urządzenia 2-9; DO-D7; DO-D7; Dwukierunkowa magistrala danych 10; ~ACK; ~PeriphCLK; Zegar kluczujący transmisji w kierunku od urządzenia do komputera 11; BSY; PeriphACK; W stanie wysokim wysyłane są dane a w stanie niskim rozkazy (dotyczy transmisji od urządzenia do komputera) 12; PAP; ~AckREV; Urządzenie potwierdza gotowość do wysyłania danych poprzez obniżenie poziomu tego sygnału 13; SEL; X-Flag; Extensibility Flag 14; ~ALF; HostACK; W stanie wysokim wysyłane są dane a w stanie niskim rozkazy (dotyczy transmisji od komputera do urządzenia) 15; ~ERR; ~PeriphREQ; Sygnał ten obniżany jest do zera przez urządzenie pragnące wysłać dane 16; ~INI; ~RevREQ; Stan niski oznacza, iż dane napływają do komputera 17; ~DSL; 1284ACTWE; Jak długo sygnał utrzymuje się na poziomie wysokim komputer wysyła dane.Obniżenie poziomu do zera kończy transfer 18-25; GND; GND; Masa Tryb ECP pracuje w oparciu o własny protokół. Określa on sposób transmisji danych poddawanych kompresji RLE z uwzględnieniem adresowania kanałów logicznych. Transfer może być dwukierunkowy przy czym system odróżnia dwa rodzaje cykli: rozkazowy lub danych. Cykl danych (Data Write/Data Read) ma miejsce w przypadku gdy obydwa sygnały HostACK i PeriphACK znajdują się w stanie pasywnym (wysoki poziom logiczny). Uczestnicy transmisji wiedzą, iż w tym wypadku na magistrali DO - D7 odłożony jest bajt danych. W cyklu rozkazowym przysyłany może być adres kanału lub licznik RLC (Run Length Counf). Odpowiedni kierunek transmisji definiowany jest poprzez aktywowanie jednego z sygnałów HostACK lub PeriphACK. Jeżeli stroną nadającą jest komputer (Command Write} musi on sprowadzić linię HostACK do niskiego poziomu logicznego. Jeśli transfer adresu lub licznika RLC odbywa się od urządzenia (Command Read), musi ono aktywować linię PeriphACK. Mechanizm odróżniania adresu kanału logicznego od licznika RLC pracuje w oparciu o stan bitu 7 magistrali danych (linia D7, końcówka 9). Jeśli jest on równy zero, na liniach DO - D6 odkładany jest licznik RLC. W wypadku gdy D7 równe jest jeden, pozostałe linie magistrali danych transmitują adres logiczny. Na rysunku 12.5 przedstawione zostały schematycznie cykle transmisyjne portu równoległego ECP biegnące w kierunku od komputera do urządzenia. Jak już wcześniej wspomniano, przesyłane mogą być dane (Data Write} lub rozkazy (Command Write}. Proces przebiega według następującego algorytmu: • Przesyłany bajt umieszczany jest na magistrali danych DO - D7. • W cyklu rozkazowym linia HostACK sprowadzana jest do niskiego poziomu logicznego. W cyklu danych linia ta pozostaje na poziomie wysokim. • Kontroler portu równoległego aktywuje linię -HostCLK poprzez obniżenie jej poziomu do zera. • Urządzenie potwierdza gotowość do przyjęcia bajtu poprzez aktywowanie linii PeriphACK. • Formowane jest tylne zbocze impulsu -HostCLK. W tym momencie urządzenie przejmuje bajt z magistrali danych. . Urządzenie potwierdza przejęcie bajtu poprzez zwolnienie linii PeriphACK. Transfer w kierunku od urządzenia do komputera przebiega w sposób podobny. Jedyną różnicę stanowi dodatkowa faza negocjacji kierunku odwrotnego. Uzgodnienie to odbywa się przy współudziale linii ~RevREQ i ~AckREV. Złącze równoległe pracujące w trybie ECP sterowane jest, podobnie jak ma to miejsce w przypadku poprzednich trybów, poprzez zestaw rejestrów. Tabela 12.7. Zestaw rejestrów ECP Lokalizacja rejestru; Nazwa; Typ Adres bazowy + 0; Rejestr Danych - SPP (Data Register), zapis Adres bazowy + 0; Rejestr Adr. FIFO (ECP Address FIFO); zapis / odczyt Adres bazowy + 1; Rejestr Stanu - SPP (Status Register), odczyt Adres bazowy + 2; Rejestr Sterujący - SPP (Control Register); zapis Adres bazowy + ox400h; Data FIFO, zapis / odczyt Adres bazowy + ox400h; Test FIFO, zapis / odczy Adres bazowy + ox400h; Configuration Register A; Adres bazowy + 0x401 h; Configuration Register B; zapis / odczyt Adres bazowy + ox402h; Rejestr ECR (Extended Control Register);zapisu / odczyt Przejście w tryb ECP odsłania zestaw dodatkowych rejestrów rezydujących w obszarze leżącym w odległości Ox400h od adresu bazowego. Należą do nich rejestr ECR oraz rejestry konfiguracyjne i testowe. Rejestr ECR (Extended Control Register), adres bazowy + 0x402h Rejestr ten stanowi główny element sterujący portu równoległego pracującego w trybie ECP. Umożliwia on konfigurację złącza, podaje informacje statusowe oraz zarządza buforem FIFO. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-5=Bity selektora trybu (Select Current Modę of Operation): 000 - tryb standardowy (Standard Modę), 001 - tryb bajtowy (Byte Modę), 010 - tryb standardowy z FIFO (Parali'el Port FIFO Modę), 011 - tryb ECP z FIFO (ECP FIFO Modę), 100 - tryb EPP (EPP Modę), 101 - zarezerwowane, 110 - tryb testowy dla FIFO (FIFO Test Modę), 111 - tryb konfiguracyjny (Configuration Modę). bit 4=ECP Interrupt Bit. bit 3=DMA Enable Bit. bit 2=ECP Service Bit. bit 1=FIFO Fuli. bit 0=FIFO Empty. Trzy najstarsze bity rejestru ECR definiują tryb pracy. Złącze ECP może być dzięki temu przełączone do jednego z siedmiu trybów: • Tryb standardowy (SPP). Klasyczny jednokierunkowy port równoległy • Tryb bajtowy. Klasyczny port równoległy wzbogacony o funkcję dwukierunkową • Tryb standardowy z FIFO. W trybie tym każdy zapisany do rejestru FIFO bajt będzie wysłany do urządzenia z uwzględnieniem zasad klasycznego protokołu SPP. W przeciwieństwie jednak do oryginalnego trybu SPP, niezbędne do tego sygnały sterujące wygenerowane zostaną przez układy sprzętowe i nie wymagają szeregu rozkazów absorbujących CPU. • Tryb ECP z FIFO. Właściwy tryb ECP z wykorzystaniem buforów FIFO i wraz z omówionym wcześniej protokołem. • Tryb EPP. Możliwość przejścia do trybu EPP z wykorzystaniem możliwości sprzętowych oferowanych przez ECP. Funkcja ta często nie jest udostępniana. • Tryb testowy dla FIFO. Specjalny tryb kontrolny udostępniający do celów diagnostycznych dodatkowy zestaw rejestrów FIFO (Test FIFO, adres bazowy + Ox400h). W ramach tego trybu, korzystając z sygnałów FIFO Fuli i FIFO Empty można na przykład określić faktyczny rozmiar buforów. Zwykle implementowany jest bufor 16 stopniowy. Tryb konfiguracyjny. W trybie tym uzyskuje się dostęp do rejestrów konfigura-cyjnych A i B. Szczegółowy opis funkcji rejestrów konfiguracyjnych wybiega znacznie poza zakres tej publikacji i z tego względu zostanie pominięty. Realizacja portu równoległego w ramach architektury PC Ewolucja złącza równoległego dotyczyła w sporym stopniu jego fizycznej lokalizacji w ramach architektury PC. Przez długi czas wchodziło ono w skład karty grafiki monochromatycznej jako element układu scalonego LSI zawierającego cały sterownik. Adres bazowy złącza wynosił w takim wypadku Ox3BCh. W momencie upowszechnienia grafiki kolorowej port równoległy dokonał pierwszej przeprowadzki na samodzielną kartę rozszerzającą. Karty takie były zawsze 8-bitowe, nawet w standardzie EISA. Dekodowały one linie adresowe AO-A9 oraz sygnały ~IOR i -IOW magistrali zewnętrznej, rozpoznając w ten sposób odwołania procesora do swych rejestrów. Drugim z możliwych wariantów było wykonanie portu równoległego jako elementu składowego uniwersalnych kart I/O (Multi I/O) zawierających również inne komponenty, takie jak kontrolery dysków oraz porty szeregowe. Konfiguracja numeru portu LPT1 - 4 (odpowiada określeniu adresu bazowego) odbywała się do niedawna za pomocą mikroprzełączników i zwór konfiguracyjnych. W ten sam sposób przebiegał przydział linii przerwań (standardowo IRQ7, alternatywnie IRQ5). W miarę wzrostu stopnia integracji układów scalonych płyty głównej (Chip-Set) nastąpiło wchłonięcie portu równoległego przy zachowaniu całkowitej zgodności programowej z oryginałem. Nie jest już również konieczne poszukiwanie zwór konfiguracyjnych, bowiem stosowne opcje zawarte są w programie CMOS-SETUP. Jeden z elementów pierwotnie zdefiniowanego złącza równoległego przetrwał wszystkie te zmiany w nienaruszonej formie. Kompletny zestaw sygnałów wyjściowych i wejściowych portu skupiony jest nadal w 25-końcówkowym gnieździe typu DB-25 ujętym w normie IEEE-1284-A. Sposób rozmieszczenia linii złącza przedstawia rysunek 12.7. Połączenie pomiędzy komputerem a drukarką realizowane jest przewodem, który od strony komputera wyposażony jest we wtyk DB-25 a od strony drukarki w 36-końców-kowe złącze typu Centronics (w/g specyfikacji IEEE-1284-B). Od pewnego czasu na rynku egzystuje również nowa, kompaktowa forma wtyku ujęta w normie IEEE-1284-C. Wszystkie trzy typy wtyków przedstawione zostały na rysunku 12.8, a sposób przyporządkowania linii portu poszczególnym końcówkom (wraz z przypisanymi do nich liniami masy) zebrany został w tabeli 12.8. Dostęp do łącza równoległego poprzez funkcje BIOS BIOS udostępnia trzy funkcje przerwania 17h obsługujące łącze równoległe. Funkcja OOh wysyła jeden znak do złącza, funkcja Olh inicjalizuje złącze i drukarkę, natomiast funkcja 02h określa aktualny stan złącza. Tabela 12.8. Przyporządkowanie końcówek wtyków standardów IEEE 1284 Linia; IEEE 1284-A (Sub-D):sygnal, masa; IEEE 12 84- B (Centronics):sygnal, masa; IEEE I284-C:sygnal, masa; D0; 1, 19; 2, 20; 6, 24 D1; 3, 19; 3, 21; 1, 25 D2; 4, 20; 4, 22; 8, 26 D3; 5, 20; 5, 23; 9, 27 D4; 6, 21; 6, 24; 10, 28 D5; 7, 21; 7, 25; 11, 29 D6; 8, 22; 8, 26; 12, 30 D7; 9, 22; 9, 27; 13, 31 ~ERR; 15, 23; 32, 29; 4, 22 SEL; 13, 24; 13, 28; 2, 20 PAP; 12, 24; 12, 28; 5, 23 -ACK; 10, 24; 10, 28; 3, 21 BSY; 11, 23; 11, 29; 1, 19 -STR; 1, 18; 1, 19; 15, 33 -ALF; 14, 25; 14, 30; 17, 35 -INI; 16, 25; 31, 30; 14, 32 -DSL; 17, 25; 36, 30; 16, 34 Funkcja OOh Działanie: Funkcja ta wysyła jeden znak do dowolnego z zainstalowanych w systemie łącz równoległych. Parametry wejściowe: AH 00h; AL kod ASCII znaku; DX numer łącza: 0 = LPT1, 1 = LPT2, 2 = LPT3, 4 = LPT4. Wartości zwracane: AH bajt statusowy. Przykład: mov ah,00h ; numer funkcji mov al,'D ; znak "D" mov dx,03h ; port LPT4 int 17h ; wyprowadź znak "D" na drukarkę LPT4 Funkcja 01h Działanie: Funkcja 0lh przeprowadza tzw. sprzętową inicjalizację drukarki i łącza (ang. hardware resei). Linia -INI jest aktywowana poprzez wystawienie na niej zera logicznego. Podobny efekt uzyskać można wysyłając tzw. sekwencję inicjalizującą (ang. software resef), na ogół '@', przy czym korzystamy wówczas ze wszystkich 8 linii danych i linii sterujących. Należy jednak pamiętać, że nie każda drukarka reaguje na sygnał -INI. Parametry wejściowe: AH 01h; DX numer łącza: 0 = LPT1, 1 = LPT2, 2 = LPT3, 4 = LPT4. Wartości zwracane: AH bajt statusowy. Przykład: mov ah,01h ; numer funkcji mov dx,00h ; LPT1 int 17h ; inicjalizuj drukarkę dołączona do portu LPT1 Funkcja 02h Działanie: Funkcja ta zwraca w rejestrze AH bajt statusowy, odwzorowujący stan łącza i drukarki. Nie są wykonywane żadne inne operacje. Parametry wejściowe: AH 02h; DX numer łącza: 0 = LPT1, 1 = LPT2, 2 = LPT3, 4 - LPT4. Wartości zwracane: AH bajt statusowy. Przykład: mov ah,02h ; numer funkcji mov dx,Olh ; LPT2 int 17h ; bajt statusowy znajdzie się w AH Wymieniany w opisie funkcji OOh, Olh i 02h bajt statusowy zawiera następujące dane: bit 7; bit6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=Stan linii BSY: 0 - drukarka wolna, 1 - drukarka zajęta. bit 6=Stan linii ~ACK: 0 - łącze oczekuje na sygnał potwierdzenia, 1 - nadszedł sygnał potwierdzenia. bit 5=Stan linii PAP: 1 - w drukarce brak papieru. bit 4=Stan linii SEL: 0 - drukarka w stanie off-line, 1 - drukarka w stanie on-line. bit 3=Stan linii ERR: 1 - drukarka zajęta, off-line lub inny błąd, na przykład drukarka wyłączona bity 2 - 1 Zarezerwowane (zwykle równe 1). bit 0=Przekroczenie limitu czasu (ang. time-ouf) w oczekiwaniu na reakcję drukarki. Maksymalne czasy oczekiwania systemu na reakcję drukarki definiowane są przez BIOS i przechowywane w jego obszarze danych. Adres; Znaczenie; 0040:0078h; limit czasu dla łącza LPT1 (w sekundach) 0040:0079h; limit czasu dla łącza LPT2 (w sekundach) 0040:007Ah; limit czasu dla łącza LPT3 (w sekundach) 0040:007Bh; limit czasu dla łącza LPT4 (w sekundach) Wartością domyślną przyjmowaną przez BIOS jest 20 sekund. Czas ten można zmienić na nieskończenie długi (ma to znaczenie przy obsłudze drukarek laserowych) poleceniem DOS-u mode Iptn, , p. Po upływie zdefiniowanego wcześniej czasu oczekiwania dane będą wysyłane ponownie. Dostęp do łącza równoległego z poziomu systemu MS-DOS Jak wiadomo, MS-DOS traktuje wszystkie urządzenia na równi z plikami dyskowymi. Polecenie copy plik. a plik.b nie różni się od polecenia copy plik. a lpt2. System operacyjny przegląda listę nazw urządzeń (LPT1, LPT2, LPT3, LPT4, COM1, COM2, COM3, COM4, AUX, CON, PRN, NUL) i odróżnia plik dyskowy od urządzenia, tak więc zawartość pliku plik.a zostaje wysłana do programu sterownika (Device Driver) obsługującego łącze LPT2. Wspomnieć należy również o poleceniu type plik. a > Ipt2 oraz programie rezydentnym print (print plik. a /d: LPT2), które prowadzą do tego samego celu. Dla potrzeb obsługi drukarki programiści mogą odwoływać się do dwóch funkcji przerwania 21h: 05h i 40h. Funkcja 05h Działanie: Funkcja ta jest reliktem z czasów systemu operacyjnego CP/M i obsługuje transmisję pojedynczego znaku wyłącznie do łącza LPT1 (PRN). Parametry wejściowe: AH 05h; DL kod ASCII znaku. Wartości zwracane: - brak - Przykład: mov ah,05h ; numer funkcji mov dl,0ch; znak wysuwu strony (FF - Form Feed) int 21h ; wysuw strony w drukarce Funkcja 40h Działanie: Funkcja ta w ogólnej postaci obsługuje zapis większej liczby znaków do pliku lub urządzenia. Korzysta ona z koncepcji tzw. uchwytów (Handles) definiujących jednorazowo i jednoznacznie plik lub urządzenie. Drukarce PRN (LPT1) przyporządkowany jest standardowo numer uchwytu 4. Urządzenia LPTn wymagają wcześniejszego otwarcia do zapisu funkcją 3Dh przerwania 21 h. Funkcja otwarcia do odczytu (3Fh) nie ma w przypadku drukarki sensu fizycznego. Parametry wejściowe: AH 40h; BX numer uchwytu urządzenia LPTn; CX liczba przesyłanych znaków; DS:DX adres bufora zawierającego znaki. Wartości zwracane: AX liczba faktycznie przesłanych znaków lub kod błędu w przypadku CF= 1; CF 1 w przypadku wystąpienia błędu. Przykład: bufor DB 8 DUP('*') ; osiem znaków "*" mov ah,40h ; numer funkcji mov bx,04h ; uchwyt urządzenia PRN mov cx,08h ; przesyłamy 8 znaków mov dx,0FFSET bufor ; adres (przemieszczenie) bufora ;zakładamy, że DS zawiera ;adres segmentowy bufora int 21h ; przerwanie DOS Funkcja 40h zwraca wprawdzie w rejestrze AX kod błędu, nie mówi natomiast nic o stanie poszczególnych linii łącza. Informacji tych dostarczaj ą funkcje BIOS-u. Ogólne zastosowanie łącza równoległego Zastosowanie łącza równoległego jako portu drukarki wykorzystuje w niewielkim stopniu jego możliwości. Każda z linii ma swój odpowiednik na stosownej pozycji bitowej pewnego rejestru. Ta przejrzysta i łatwa do oprogramowanie struktura stwarza, iż jest on najchętniej wykorzystywany jako interfejs do prostych układów automatycznych. Traktując port równoległy jako programowalny sterownik należy zapomnieć o drukarce a skupić się na wejściach i wyjściach kontrolera. Klasyczny port równoległy w pierwotnej postaci (SPP) wyposażony był w 12 wyjść i 5 wejść dostępnych przez odpowiednie bity rejestrów: •8 wyjść poprzez rejestr danych, • 4 wyjścia (z czego 3 zanegowane) dostępne poprzez rejestr sterujący, •5 wejść (z czego jedno zanegowane) dostępne poprzez rejestr stanu. W oryginale IBM-PC port danych jest jednokierunkowy. Zawartość rejestru wystawiana jest na odpowiednie końcówki złącza DB-25 w niezmienionej formie (brak charakterystycznych negacji występujących w przypadku innych rejestrów). W późniejszych wykonaniach kontrolerów pojawiła się możliwość pracy dwukierunkowej (Bi-Directional) uruchamiana poprzez bit 5 rejestru sterującego. Aktywacja tej funkcji komplikuje obsługę portu bowiem zapisane do niego dane (np. rozkazem out DATA, al) są w nim „zatrzaskiwane". Odczyt rejestru (np. rozkazem in al, DATA) powoduje w efekcie przeczytanie tych samych danych, które zostały uprzednio zapisane. Mechanizm sprzężenia zwrotnego nie został wprowadzony w celu utrudnienia życia programistom ale raczej dla umożliwienia wykrywania przekłamań spowodowanych np. zwarciami na magistrali danych portu równoległego. Aby pobrać dane z portu należy najpierw zapisać do niego same jedynki (0xFFh) po czym pozwolić zewnętrznym układom logicznym na ewentualne obniżenie poziomu na wybranych liniach. Dopiero wtedy odczyt bajtu przynosi pożądany skutek. Rejestr sterujący przeznaczony jest w zasadzie również wyłącznie do zapisu ale dzięki istnieniu wbudowanych funkcji sprzężenia zwrotnego (o ile zostały zaimplementowane) może być użyty jako dwukierunkowy w swej mniej znaczącej połowie (bity 3 - 0). Fakt ten umożliwia dostęp do końcówek l, 14, 16, 17 jako wejść lub wyjść. Aby odczytać coś z tego rejestru trzeba wstępnie zapisać wartość xxxx0100b co powoduje ustawienie poziomów +5 V na wszystkich końcówkach. W tym momencie urządzenie zewnętrzne może sprowadzić daną końcówkę do masy. W przypadku bitu 4 (Enable IRQ via ~~ACK) obowiązuje tylko jeden kierunek tzn. zapis. Odczyt tej pozycji bitowej dostarcza zawsze ostatnio ustawionej wartości i nie ma sensu fizycznego jako wartość zwracana. W tabeli 12.9 prezentowane jest zestawienie numerów końcówek poszczególnych wtyków i z uwzględnieniem przypisanych im bity rejestrów. Tabela 12.9. Sterowanie liniami złącz standardu IEEE1284 Kierunek; Końcówka svgnalonwa:IEEE 1284-A (D-Siib), IEEE 1284-B (Centronics), IEEE 1284-C; Bil rejestru; Unia zapis / odczyt; 2, 2, 6; Rejestr danych bit 0; D0 zapis / odczyt; 3, 3, 7; Rejestr danych bit 1; D1 zapis / odczyt; 4, 4, 8; Rejestr danych bit 2; D2 zapis / odczyt; 5, 5, 9; Rejestr danych bit 3; D3 zapis / odczyt; 6, 6, 10; Rejestr danych bit 4; D4 zapis / odczyt;7, 7, 11; Rejestr danych bit 5;D5 zapis odczyt;8, 8, 12; Rejestr danych bit 6;D6 zapis / odczyt;9, 9, 13; Rejestr danych bit 7;D7 odczyt;15, 32, 4; Rejestr stanu bit 3;-BRR odczyt; 13, 13, 2; Rejestr stanu bit 4; S EL odczyt; 12, 12, 5; Rejestr stanu bit 5; PAP odczyt; 10, 10, 3; Rejestr stanu bit 6; -ACK odczyt; 11, 11, 1; Rejestr stanu bit 7; BSY zapis / odczyt; 1, 1, 15; Rejestr sterujący bit 0; -STR zapis / odczyt;14, 14,17; Rejestr sterujący bit l"**;-ALF zapis / odczyt;16, 31,14; Rejestr sterujący bit 2; INI zapis / odczyt;17, 36,16; Rejestr sterujący bit 3; -DSL *Aktywowany system dwukierunkowego portu danych. **Wykorzystanie mechanizmu sprzężenia zwrotnego. ***Sprzętowy system negacji poziomów logiczych. Z tabeli 12.9 wynika, iż port równoległy aktualnie produkowanych komputerów może być uważany jako programowalny sterownik o 17 wejściach i 12 wyjściach. Stwarza to spore możliwości sterowania różnorodnych prostych układów automatyki. Mowa tu naturalnie o sterowaniu typu „włącz-wyłącz" bowiem informacja dostarczana od zewnętrznych czujników nie może mieć charakteru analogowego. Taki sam charakter ma sygnał wytwarzany przez kontroler. Aby móc interpretować i generować przebiegi analogowe trzeba posługiwać się przetwornikami A/D i D/A dołączonymi do kilku linii wejściowych lub wyjściowych jednocześnie. W ten sposób zyskujemy możliwość regulacji wielostopniowej. Języki Turbo C lub Borland C/C++ umożliwiają dostęp do portów wejścia-wyjścia komputera z procesorem 80x86 za pośrednictwem predefiniowanych funkcji outport, outportb, inport, inportb. void outport (int ADR, int VAR) ; /* umieszcza słowo VAR */ / * w porcie ulokowanym pod adresem ADR */ void outportb (int ADR, unsigned char VAR) ; /* umieszcza bajt */ /* w porcie ulokowanym pod adresem ADR*/ int inport (int ADR) ; /* zwraca słowo odczytane z portu */ /* ulokowanego pod adresem ADR */ unsigned char inportb (int ADR) ; /* zwraca bajt odczytany */ /* z portu ulokowanego pod adresem ADR */ Przy założeniu iż opieramy się na złączu LPT1 ulokowany pod adresem standardowym schemat wywołań omawianych funkcji przebiegać powinien według następującego planu: #include #incllude #define DATA 0x378 #define STATUS 0x379 ttdefine CONTROL Ox37A ... unsigned char BITY ; BITY = inportb (CONTROL) ; /* odczyt portu sterującego */ ... BITY= 0xF0 ; outportb (DATA , BITY); /* ustawienie bitów portu danych: D7-D4=1, D3-DO=0 */ ... Ostatnia z instrukcji dokonuje ustawień na wszystkich pozycjach bitowych bez względu na to jaka była ich dotychczasowa wartość. Dużo częściej wynika potrzeba manipulacji wyłącznie określonych pozycji bitowych bez naruszania pozostałych. W takim przypadku należy posługiwać się instrukcjami maskującymi: #define CONTROL Ox37A ... unsigned char MASKA ; MASKA = 0x08 ; /* 00001000 */ outportb (CONTROL , inportb (CONTROL) | MASKA); /* ustawienie bitu */ /* -C3 w rejestrze sterującym */ MASKA = 0xF7 ; /* 11110111 */ ... outportb (CONTROL , inport (CONTROL) & MASKA); /* wyzerowanie bitu */ /* ~C3 w rejestrze sterującym */ ... Warto jeszcze raz wspomnieć, iż w powyższym przykładzie manipulacji podlega akurat jedna z pozycji bitowych, która jest zanegowana. W konsekwencji, pierwsza instrukcja outportb powoduje wymuszenie poziomu O na końcówce 17 a druga podniesienie poziomu napięcia do wysokości logicznej l. Na zakończenie przedstawimy przykład najprostszego interfejsu wykorzystującego standardowy port równoległy. Schemat takiego układu składającego się z przycisku P l i System reaguje mruganiem diody LED na naciśnięcie przycisku Pl. Jako linia wejściowa wykorzystywany jest sygnał ~ERR (końcówka 15) stowarzyszony z bitem 3 rejestru stanu. Wyjście stanowi bit 2 rejestru danych (końcówka 4). Proszę zwrócić uwagę, iż interfejs tego typu wymaga zewnętrznego napięcia zasilania +5 V. W powyższym przykładzie wyprowadzenie masy pobierane jest z końcówki 25. Oto prosty program w języku C obsługujący nasz układ. #include #incllude #define DATA 0x378 #define STATUS 0x379 void main (void) { int var; while (1) { var = inportb (STATUS) ; if ((var & 0x08) == 0) /* jeżeli S3 jest wyzerowany */ {/* to Pl załączony) */ outportb (DATA , 0x00) ; /* bit D2=0, LED świeci */ delay (200) ; outportb (DATA , 0x04) ; /* bit D2=l, LED gaśnie */ delay (200) ; } else { outportb (DATA , 0x04) ; /* jeżeli Pl zwolniony, */ }/* bit D2=li LED wyłączony) */ } } W powyższym przykładzie widać wyraźnie, iż cała moc obliczeniowa komputera zaangażowana jest w realizację prymitywnej pętli. Nieustające pobieranie i analiza zawartości portu (Pooling) nie stanowi jedynej możliwości oprogramowania przykładowego interfejsu. Kontroler portu równoległego wyposażony został bowiem w prosty system generacji przerwań. Cecha ta umożliwia implementację układów automatyki reagujących na wystąpienie pewnych zjawisk (np. przekroczenie temperatury). Warto nadmienić, iż przerwania nie są niezbędne do samego procesu drukowania. Nie były one wykorzystywane ani przez MS-DOS ani przez MS Windows. Korzystały z nich jedynie wczesne wersje OS/2. Obsługa drukarki przebiega bez zakłóceń nawet w przypadku wyłączenia generacji przerwań. Deaktywację taką można podjąć zerując bit 4 w rejestrze sterującym. Ustawienie tego bitu powoduje, iż kontroler pobudza linię IRQ5 lub IRQ7 (zależnie od konfiguracji) w momencie wykrycia narastającego zbocza na linii ~ACK. Zewnętrzne układy logiczne muszą zadbać o skierowanie ocenianego sygnału na tą właśnie linię. Program sterowania interfejsu należy w tym wypadku umieścić w procedurze obsługi przerwania podmieniając stosowne adresy punktów wejściowych w tabelach wektorów BIOS. Należy pamiętać, że układy wejścia-wyjścia złącza równoległego wykonane są w technice TTL i źle znoszą przeciążenia. Prąd pobierany z wyjścia nie powinien przekraczać wartości kilku mA. Dla wszystkich linii, z których korzystają zewnętrzne układy interfejsu zaleca się stosowanie separujących bramek buforowych. * * * Rozdział 13. Łącze szeregowe Wymiana informacji między urządzeniami może mieć w ogólności charakter transmisji równoległej lub szeregowej. W rozdziale tym zajmiemy się szeregową fonną wymiany danych. Może ona być synchroniczna lub asynchroniczna. Transmisja synchroniczna Oprócz linii przekazujących dane, łącze musi dysponować dodatkowymi połączeniami przesyłającymi przebieg synchronizujący. Zaletą tego systemu jest umożliwienie dowolnych zmian prędkości transmisji. Odbiornik dostosowuje się natychmiast do częstotliwości nadajnika, o ile oczywiście nie zostanie przekroczona pewna prędkość graniczna. Transmisja asynchroniczna Strumień danych musi nieść w sobie informację o częstotliwości synchronizującej. Naturalnie nadajnik i odbiornik muszą pracować stale z tą samą, uzgodnioną wcześniej prędkością. Ceną, którą płacimy za zredukowaną w tym trybie pracy liczbę linii łączących korespondentów, jest komplikacja protokołu komunikacyjnego. Asynchroniczna transmisja szeregowa i ramka danych Łącza szeregowe, w które wyposażane są komputery klasy PC/XT i AT, przystosowane są do transmisji asynchronicznej. Przeznaczone do przesłania dane w formie szeregowej otrzymują pewien rodzaj „opakowania" - tzw. ramki (ang. frame), zwanej też SDU (ang. Serial Data LJnif). Ramka właśnie, a nie pojedynczy bit danych, jest najmniejszą porcją przekazywanej jednorazowo przez łącze informacji. Jak widać na rysunku 13.1, na ramkę składają się, oprócz właściwych bitów danych, znacznik początku ramki (bit startu), bit kontroli parzystości i znacznik końca ramki (bit stopu}. Czas trwania jednego bitu ramki, tj. okres wyimaginowanego przebiegu synchronizującego wynika ściśle z uzgodnionej prędkości transmisji. W ogólności ramka może zawierać 5, 6, 7 lub 8 bitów danych. Bit startu jest obowiązkowy, a liczba bitów stopu może wynosić l lub 2. Bit kontroli parzystości jest elementarnym i bardzo mało efektywnym sposobem zabezpieczenia danych przed przekłamaniami w trakcie przekazu. Może on oznaczać parzystą lub nieparzystą liczbę ustawionych bitów w polu danych, może być ustawiony na stałe lub na stałe wyzerowany, wreszcie może być w ogóle pominięty. Wszystkie te charakterystyczne cechy ramki, tj. czas trwania (odpowiadający prędkości transmisji), liczba bitów danych, liczba bitów stopu i tryb kontroli parzystości są uzgadniane między nadajnikiem i odbiornikiem jako format przekazywanych danych jeszcze przed nawiązaniem połączenia (ponieważ parametry transmisji nie są wówczas ustalone, uzgodnienia należy na ogół dokonać „ręcznie", za pomocą programów konfigurują-cych). Tylko w ten sposób możliwe jest prawidłowe odczytanie napływających do odbiornika informacji. Generator odbiornika pracuje więc z założenia z taką samą częstotliwością, z jaką pracował generator nadawczy, formujący dane do postaci szeregowej. Pozostaje jedynie synchronizacja fazy, tzn. uruchomienie układu dekodującego odbiornika precyzyjnie na początku ramki. Bit startu przyjmuje zawsze wartość zero. Linia danych łącza w stanie spoczynku utrzymywana jest w stanie logicznym 1. Bit startu jest więc wyraźnie zaznaczonym początkiem transmisji. Bit stopu zamyka ramkę i łącze wraca do stanu początkowego lub realizuje transmisję następnej porcji danych. W warunkach rzeczywistych nie występują oczywiście tak wyidealizowane przebiegi prostokątne jak przedstawione na rysunku 13.1. Przy dużych prędkościach transmisji zaczynają odgrywać rolę pojemności przewodów łączących. Odległość dzieląca nadajnik i odbiornik może dochodzić do 200 metrów, i to w warunkach przemysłowych. Wszystko to powoduje zniekształcenia zboczy sygnałów oraz nakładanie się na nie dodatkowych przebiegów zakłócających. Przetwarzanie szeregowego strumienia danych napływających do odbiornika musi więc odbywać się w sposób bardziej skomplikowany. Odbiornik pracuje z częstotliwością 16-krotnie większą, niż wynikałoby to z ustalonej szybkości pracy łącza, a każdy bit ramki jest badany (próbkowany) 16 razy. Wynik pobrania tych 16 próbek jest uśredniany, a na podstawie tej operacji zapada decyzja, czy badanemu wycinkowi czasowemu przyporządkować niski czy wysoki poziom logiczny. Metoda ta podnosi znacznie odporność łącza na zakłócenia impulsowe i eliminuje niekorzystny wpływ zniekształconych zboczy. Układ scalony 8250 Szeregowy strumień informacji jest w swej nie przekształconej formie nie do przyjęcia przez równoległe magistrale danych komputera. Przetwarzanie danych z postaci szeregowej na równoległą i odwrotnie dokonywane jest w układzie scalonym określanym ogólną nazwą UART (ang. Universal Asynchronons Receiver-Transmitter). Skomplikowana struktura tego układu ma szerokie możliwości programowej adaptacji do różnych prędkości transmisji, konfiguracji łącza i formatów danych. Modele PC/XT wyposażone były głównie w układy UART typu 8250. Począwszy od modelu AT funkcję tę pełnią zmodernizowane wersje UART typu 16450 lub 82450. Maksymalna prędkość transmisji danych w układzie 8250 wynosi 56000 bodów, zaś dla 16450 - 115200 bodów (bitów na sekundę), tym niemniej funkcje obsługi łącza szeregowego dostępne przez BIOS dopuszczają prędkości transmisji wyłącznie do górnej granicy 9600 bodów (19200 bodów w komputerach PS/2). Przyczyn tego zjawiska należy upatrywać w obszernych procedurach inicjalizujących łącze szeregowe każdorazowo dla odebrania i wysłania jednego znaku. Pełne możliwości układu 8250 (16450) można wykorzystać jedynie sięgając bezpośrednio do jego rejestrów. Schemat wyprowadzeń układu scalonego 8250 zamieszczony jest na rysunku 13.2. Taki sam rozkład końcówek posiada powszechnie stosowany obecnie układ UART 16450. Oto znaczenie poszczególnych wyprowadzeń UART: ~CTS=Clear To Send- wejście odpowiadające stanowi linii sterującej CTS interfejsu RS-232 (opis standardu RS-232 zawarto w podrozdziale Interfejs RS-232C), stanem aktywnym jest poziom niski. ~DSR=Data Set Ready - wejście odpowiadające stanowi linii sterującej DSR, stanem aktywnym jest poziom niski. ~RLSD=Received Linę Signal Detect - wejście odpowiadające stanowi linii sterującej DCD, stanem aktywnym jest poziom niski. ~R1=Ring Indicator - wejście odpowiadające stanowi linii sterującej R1, stanem aktywnym jest poziom niski. ~RTS=Reguest To Send- wyjście sterujące stanem linii sterującej RTS, stanem aktywnym jest poziom niski. Wyjście to jest dostępne bezpośrednio przez bit l rejestru wyjściowych sygnałów sterujących UART (rejestr układu o adresie 04h). ~DTR=Data Terminal Ready - wyjście sterujące stanem linii sterującej DTR, stanem aktywnym jest poziom niski. Wyjście to jest dostępne bezpośrednio przez bit O rejestru wyjściowych sygnałów sterujących UART (rejestr 04h). ~MR=Master Reset - podanie na to wejście logicznej jedynki powoduje inicjalizację wszystkich rejestrów wewnętrznych UART, z wyjątkiem buforów odbiornika i nadajnika oraz rejestru podzielnika. ~OUT1,-OUT2=Wyjścia, które mogą być swobodnie programowane.Wyjście steruje w komputerach PC kluczem blokującym przerwania pochodzące od UART. INTRPT=Interrupt - wysokim poziomem napięcia na tym wyjściu UART sygnalizuje spełnienie warunków wywołania przerwania, określonych maską rejestru przerwań (rejestr O l h). A2 - A0= Linie adresujące wewnętrzne rejestry UART, umożliwiające dostęp do nich procesorowi. Trzema liniami można zaadresować 8 rejestrów. Ponieważ ich faktyczna liczba jest większa, rolę czwartej, sztucznej linii adresowej pełni bit 7 rejestru formatu danych (rejestr 03h). ~ADS=Address Strobe - sygnał ten w stanie aktywnym (niski poziom logiczny) oznacza, że adres na liniach A2 - AO jest ustawiony i może być dekodowany przez UART. CSOUT=Chip Select Out - wyjście to jest aktywowane przez UART, jeżeli został on wybrany przez CPU liniami CSO, CS1 i ~CS2. DDIS=Driver Disable - sygnał ten przyjmuje wartość zera logicznego w trakcie operacji odczytu wewnętrznych rejestrów UART przez procesor. DISTR=Data In Strube - wejściowy sygnał sterujący, umożliwiający ~DISTR= w stanie aktywnym (DISTR - l lub -DISTR = 0) odczyt wewnętrznych rejestrów UART. DOSTR,~DOSTR=ata Out Strobe - wejściowy sygnał sterujący, umożliwiający wstanie aktywnym (DOSTR-1 lub ~DOSTR=0) zapis wewnętrznych rejestrów UART. SOUT=Serial Output - wyjście toru nadawczego UART. SIN=Serial Input - wejście toru odbiorczego UART. CSO, CS 1,~CS2=Chip Select - stan CSO = 1, CS l = l i -CS2 = 0 oznacza wybranie układu UART przez procesor w celu dokonania zapisu lub odczytu jednego z jego rejestrów. RCLK=Receiver Clock - wejście sygnału synchronizującego tor odbiorczy, o częstotliwości 16 razy większej od zadanej prędkością transmisji. ~BAUDOUT=Wyjście sygnału synchronizującego tor nadawczy, o częstotliwości 16 razy większej od zadanej prędkością transmisji. Jeżeli końcówki ~BAUDOUT i RCLK zostaną połączone (co w PC rzeczywiście ma miejsce), to nadajnik i odbiornik pracują z tą samą prędkością. XTAL 1,XTAL2 = Końcówki dla przyłączenia zewnętrznego rezonatorakwarcowego; układ akceptuje też w tym miejscu zewnętrznie wytwarzany sygnał synchronizujący; D0 - D7= Dwukierunkowa, 8-bitowa magistrala danych, służąca przekazywaniu danych, rozkazów i bajtów statusowych pomiędzy procesorem i UART. V#CC=Wejście napięcia zasilającego(+5V). GND= Masa zasilania. Budowa wewnętrzna układu UART - zważywszy na różnorodność spełnianych przez niego funkcji -jest dosyć skomplikowana. Układ posiada niezależny tor nadawczy i odbiorczy. Teoretycznie nadajnik i odbiornik nie muszą pracować z tą samą prędkością. Pomijając bardzo specjalistyczne zastosowania układu, wejście częstotliwości synchro-nizującej odbiornik RCLK praktycznie zawsze połączone jest z wyjściem częstotliwości synchronizującej nadajnik BAUDOUT, tak więc zgodność prędkości ma faktycznie miejsce. Źródłem częstotliwości odniesienia dla całego układu jest wewnętrzny generator syn-chronizowany rezonatorem kwarcowym o częstotliwości 1,8432 Mhz - dołączonym do końcówek XTAL1 i XTAL2. Układ UART akceptuje też w miejsce rezonatora kwarco-wego sygnał z zewnętrznego źródła o tej samej częstotliwości. Sygnał o częstotliwości odniesienia kierowany jest do programowalnego 16-bitowego dzielnika częstotliwości, którego współczynnik podziału pobierany jest ze specjalnego rejestru dzielnika. Podział częstotliwości dla nadajnika odbywa się w dwóch etapach. W pierwszym bierze udział wspomniany licznik programowalny, który wydziela częstotliwość nadajnika, będącą 16-krotną wielokrotnością zadanej prędkości transmisji. Sygnał ten po zanegowaniu wyprowadzany jest na zewnątrz wyjściem -BAUDOUT i może (lecz nie musi) być sygnałem odniesienia dla toru odbiornika. W drugim etapie dokonywany jest podział przez stały współczynnik 16, co daje właściwy sygnał synchronizujący tor nadawczy. Jest to ten sam sygnał, który zgodnie z ustaloną prędkością transmisji przetwarza równoległą postać danych na ramki (porównaj rysunek 13.1). Każdy impuls tego przebiegu przetwarza jeden bit danych równoległych na jeden elementarny segment ramki. Tor odbiorczy układu odbiera z wejścia RCLK sygnał taktujący o częstotliwości 16 razy większej od przyjętej prędkości transmisji. Tak więc połączenie wejścia RCLK z wyjściem -BAUDOUT powoduje, że oba tory pracują z tą samą prędkością. Ewentualne wprowadzenie w to miejsce zewnętrznego dzielnika częstotliwości spowodowałoby obniżenie prędkości pracy toru odbiornika o współczynnik równy stopniowi podziału. Szeregowy strumień danych na wejściu SIN podlega rozłożeniu na bity danych, startu, stopu i parzystości. Czynności te realizuje specjalny rejestr przesuwny. W szczególności dla użytkownika istotne jest wydzielenie z tego strumienia bajtu danych i złożenie go w rejestrze buforowym odbiornika, skąd może być odebrany przez CPU. Sprawy komplikują się nieco przy nietypowych formatach przekazywanych danych, gdy pomiędzy bitami startu i stopu przesyłanych jest mniej niż 8 bitów danych. Brakujące bardziej znaczące bity rejestru buforowego odbiornika zawierają wtedy wartości przypadkowe i należy je zamaskować. Po stronie nadawczej pracuje podobny rejestr przesuwny, pobierający dane równoległe z rejestru buforowego nadajnika. Dane do tego bufora dostarcza procesor. Układy logiczne dodają, stosownie do formatu, bity startu, stopu i parzystości, po czym całość ekspediowana jest zgodnie z ustaloną prędkością transmisji do wyjścia SOUT. Chwilowy brak danych w buforze nadajnika powoduje, po ostatnim opróżnieniu rejestru przesuwnego, wstrzymanie dalszego przetwarzania i wyjście SOUT przyjmuje stan wysoki. Niezależnie od procedury przetwarzania szeregowo-równoległego obsługiwane są sygnały sterujące interfejsu RS-232C. Poziom tych sygnałów na wyjściu układu scalonego zmienia się w granicach O do +5 V, gdyż takie jest napięcie zasilające. Specyfikacja łącza RS-232C definiuje poziomy sygnałów na -12 V do +12 V. Dostosowanie poziomu sygnałów odbywa się za pośrednictwem specjalnych bramek-wzmacniaczy (układy MC 1488 i MC 1489), zwanych odpowiednio nadajnikami i odbiornikami linii. Odwracają one fazę sygnału, ale ponieważ wewnętrzne układy logiczne również odwracają fazę sygnałów sterujących, w efekcie ustawienie bitu rejestru sterującego odpowiada poziomowi napięcia +12 V na odpowiednim wyjściu sterującym. Wyzerowany bit wymusza napięcie -12 V. Ponieważ UART nie zmienia fazy sygnałów SIN i SOUT, wartość O transmitowanego bitu reprezentowany jest napięciem +12 V, a wartość l jako -12 V. Odwrócenie fazy wynika tu z obecności wzmacniaczy linii. Rozbudowany jest mechanizm wyzwalania przerwań sprzętowych. Układy logiczne UART kontrolują zmiany poziomów na liniach sterujących RS-232C, stan rejestrów buforowych nadajnika i odbiornika, stan linii danych i jakość połączenia z korespondentem (uwzględniając błędy transmisji). Zależnie od zaprogramowania maski rejestru przerwań, zaistnienie określonej sytuacji wywołuje przerwanie sprzętowe, tj. dodatni impuls na wyjściu INTRPT. Dokładną przyczynę przerwania można odczytać z rejestru identyfikacji przerwań (rejestr 02h). W komputerach PC/XT/AT programowalne wyjście OUT2 układu UART pełni rolę klucza blokującego globalnie (bez konieczności modyfikacji pojedynczych pozycji rejestru przerwań) przepływ sygnału IRQ od UART do kontrolera przerwań. Stanem wyjścia OUT2 zarządza bit 3 rejestru wyjściowych sygnałów sterujących. Interfejs RS-232C RS-232C jest określeniem powstałego w USA standardu przesyłania informacji między urządzeniami za pośrednictwem łącza szeregowego. Standard ten definiuje parametry mechaniczne, elektryczne i logiczne łącza. Standard RS-232C dotyczy wymiany danych pomiędzy tzw. terminalem (ang. DTE, Data Terminal Eguipment) a modemem (ang. DCE, Data Communication Eguipment). Powstał on dla potrzeb ujednolicenia komunikacji między końcówką komputerową a dużym komputerem (hosf) przy użyciu łącz telefonicznych i modemów. Pod pojęciem DTE rozumiemy dziś jednak głównie komputery PC, w przypadku których ma miejsce implementacja zaleceń standardu CCITT (Comite Consultatif International Telegraphi-que et Telephonique - Międzynarodowy Komitet Konsultacyjny Do Spraw Telefonii i Telegrafii) o nazwie V.24. Nie jest to jednak kompletne złącze V.24, a jedynie jego część, w której wykorzystywane są tylko niektóre sygnały. Zalecenie CCITT definiuje na jednym łączu dwa porty szeregowe (dwa wejścia i dwa wyjścia), natomiast w PC używany jest tylko jeden. Wykorzystana jest tu jedynie ogólna specyfikacja złącza V.24. Połączenie interfejsów RS-232C od strony mechanicznej stanowi 25-żyłowy przewód zakończony zdefiniowanymi przez standard wtykami. Większość z 25 linii przeznaczona została dla potrzeb szeregowej transmisji synchronicznej. W standardzie IBM PC wykorzystywane jest tylko 9 z tych sygnałów, dlatego też często zamiast wtyku 25-koń-cówkowego (DB-25) stosuje się wtyk 9-końcówkowy DB-9. Ta liczba linii w zupełności wystarcza do obsłużenia transmisji asynchronicznej w standardzie RS-232C. W tabeli 13.1 podano zestawienie sygnałów interfejsu RS-232C używanych w komputerach PC. Linie TxD (Transmitted Data) i RxD (Received Data} są właściwymi przewodami służącymi wymianie danych. Pozostałe są liniami sterującymi, posiadającymi następujące znaczenie: Tabela 13.1. Sygnały interfejsu RS-232C używane w komputerach PC Wtyk DB-25; Wtyk DB-9; Sygnał; Kierunek transmisji 1; -; -; - 2; 3; TxD; DTE -> DCE 3; 2; RxD; DCE -> DTE 4; 7; RTS; DTE -> DCE 5; 8; CTS; DCE -> DTE 6; 6; DSR; DCE -> DTE 7; 5; -; masa 8; 1; DCD; DCE -> DTE 20; 4; DTR; DTE -> DCE 22; 9; RI; DCE -> DTE 23; -; DSRD; DCE <-> DTE RTS=Reguest To Send- urządzenie DTE (terminal, PC) sygnalizuje tą linią zamiar przekazywania danych do DCE (modemu). Modem przygotowuje się do odbioru danych. CTS=Clear To Send- linią tą przesyłane jest potwierdzenie przyjęcia sygnału RTS przez DCE (modem) i stwierdzenie gotowości do odbioru danych od DTE. Komputer może rozpocząć przekazywanie danych. Para sygnałów sterujących RTS/CTS może przy półdupleksowym trybie pracy łącza (takim, w którym dopuszczalna jest niejednoczesna transmisja w obu kierunkach) sterować kierunkiem transmisji, przydzielając połączonym korespondentom na przemian rolę nadawcy i odbiorcy. DSR=Data Set Ready - specyfikacja RS-232C określa ten sygnał jako meldunek urządzenia DCE (zwykle modemu), że zostało nawiązane połączenie i układ jest gotów do przyjęcia danych od DTE (zwykle komputera). W praktyce większość modemów nie wykorzystuje tej linii i jest ona sztucznie utrzymywana w stanie aktywnym, nie mówiąc nic o istnieniu połączenia z korespondentem. Po poziomie tego sygnału można co najwyżej wnioskować, czy modem jest w ogóle włączony. DTR=Data Terminal Ready - sygnał ten wskazuje w ogólności na gotowość urządzenia DTE (komputera). Musi on pozostawać aktywny przez cały czas trwania połączenia.Para sygnałów DTR i DSR odpowiada za utrzymanie połączenia, podczas gdy sygnały RTS i CTS są odpowiedzialne za przekazywanie danych i ewentualne sterowanie kierunkiem ich przepływu (w trybie półdupleksowym), czyli tzw. handshaking. DCD=Data Carrier Detect - modem (DCE) sygnalizuje tą linią odbiór fali nośnej, co oznacza, że druga strona jest w trakcie nawiązywania połączenia. Sygnał DCD pozostaje aktywny przez cały czas trwania transmisji. RI=Ring Indicator - w przypadku połączenia modemów przez sieć telefoniczną urządzenie DTE (komputer) informowane jest o odebraniu sygnału odpowiadającego wywołaniu abonenta (dzwonieniu). DSRD=Data Signal Ratę Detector - linia ta występuje tylko w 25 końcówkowej wersji łącza. Umożliwia dostosowanie się korespondentów do jednej z dwóch możliwych prędkości transmisji. Z sygnału tego mogą korzystać obie strony połączenia. Rysunek 13.3. przedstawia zachowanie się sygnałów sterujących interfejsu w trakcie uruchamiania urządzeń DTE i DCE, nawiązywania połączenia, w czasie jego trwania oraz rozłączenia. Łącze szeregowe może teoretycznie pracować w jednym z trzech trybów: simplekso-wym, półdupleksowym i dupleksowym. Tryb simpleksowy Łącze skonfigurowane jest na stałe na jeden z możliwych kierunków transmisji: DTE -> DCE lub DCE -» DTE. Rozpatrzmy dla przykładu pierwszą z tych możliwości. DTE wykorzystuje wówczas wyłącznie linię TxD, zaś linia RxD nie jest podłączona. Modem (DCE) nie bierze pod uwagę stanu sygnału RTS, bądź też sygnał ten jest utrzymywany przez DTE stale w stanie aktywnym. Podobnie, komputer (DTE) nie uwzględnia sygnału CTS od modemu (DCE) lub też modem utrzymuje ten sygnał na poziomie aktywnym przez cały czas trwania połączenia. Sygnał DCD modemu z założenia nigdy nie może być aktywny. Sygnał DSR jest albo stale aktywny, albo aktywowany w momencie nawiązania kontaktu z korespondentem (drugim modemem). DTE (komputer) może przez sygnał DTR zgłaszać swoją gotowość modemowi (DCE); w rozwiązaniach praktycznych sygnał ten włącza i wyłącza modem. Linia RI z oczywistych względów nie ma tutaj znaczenia. Tryb półdupleksowy W trybie tym zarówno DTE, jak i DCE mogą być stroną nadającą oraz odbierającą jednak do dyspozycji jest tylko jeden logiczny kanał danych, który można naprzemiennie wykorzystywać w obydwu kierunkach. Wyjścia TxD każdego z urządzeń połączone są z wejściami RxD partnera. Wybór aktualnego kierunku transmisji dokonywany jest za pomocą sygnałów RTS-CTS, a prawo tego wyboru przysługuje w jednakowym stopniu obydwu stronom. Przykładowo, DCE (modem) chcąc przesłać dane do DTE (PC) aktywuje swój sygnał RTS i czeka na potwierdzenie na linii CTS. Uzgodnienie to upoważnia w tym przypadku modem do wysyłania danych, a komputer do ich odbioru. Pozostałe sygnały zachowują swoje naturalne znaczenie, tzn. modem może aktywować linię DCD chcąc przekazywać dane do komputera, DSR oznacza trwały kontakt z korespondentem (drugim modemem), zaś DTR może służyć do włączania i wyłączania modemu. Urządzenie DCE może też robić użytek z linii RI, sygnalizując nią chęć ' nawiązania kontaktu przez partnera modemu znajdującego się po drugiej stronie łącza (zwykle telefonicznego). Tryb dupleksowy Dane mogą być przekazywane pomiędzy DTE i DCE jednocześnie w obydwu kierunkach. Większość nowoczesnych modemów może pracować w tym trybie. Nie jest wymagane uzyskiwanie przez żadną ze stron zezwolenia na nadawanie. Kanał logiczny połączenia otwarty jest stale w obie strony, a sygnały RTS/CTS nie mają znaczenia; są one albo nie podłączone, albo stale aktywne. Stale aktywna jest też na ogół linia DSR, chyba że sygnalizuje ona nawiązywanie połączenia z drugim modemem. Sygnał DCD aktywowany jest w naturalny sposób jako odpowiedź na wykrycie fali nośnej, a linią DTR można sterować włączaniem i wyłączaniem modemu. Rysunek 13.4. przedstawia klasyczny układ połączeń łącza szeregowego RS-232 pomiędzy urządzeniem DTE i DCE. Standard RS-232C powstał dla potrzeb ujednolicenia połączeń typu końcówka kompu-terowa-modem. W czasach jego opracowywania pod pojęciem końcówki komputerowej (terminala) rozumiano niewiele więcej niż klawiaturę i ekran, a często wręcz elektromechaniczny dalekopis. Standard ten przetrwał jednak do czasów dzisiejszych, a ponieważ miał ugruntowaną pozycję, został adaptowany do łączenia różnych innych urządzeń. Klasycznym przykładem jest wykorzystanie łącza szeregowego do realizacji połączenia z drukarką i ploterem. Sprawy komplikują się tutaj, gdyż chodzi tu o połączenie dwóch urządzeń klasy DTE, co na pierwszy rzut oka niewiele ma wspólnego ze standardem RS-232C. Schemat takiego połączenia przedstawia rysunek 13.5. Jest to klasyczny przykład simpleksowego trybu pracy, bowiem dane przekazywane są tylko w jednym kierunku. Jest rzeczą oczywistą, że drukarka szeregowa znacznie różni się zachowaniem od modemu, niemniej jednak znaczenie pewnych sygnałów sterujących można zmienić i połączyć linie ze sobą tak, że patrząc na łącze od strony komputera będziemy widzieć „coś", co zachowuje się jak DCE. Sygnał RTS pochodzący od komputera połączony jest z jego własnym wejściem CTS, co imituje natychmiastową zgodę drugiej strony na nadawanie. Drukarka „czuje się" również urządzeniem klasy DTE i oczekuje, zgodnie ze specyfikacją RS-232C, określonego zachowania swego partnera (DCE). Osiąga się to łącząc ze sobą jej linie RTS i CTS oraz wprowadzając własny sygnał DTR drukarki z powrotem na jej wejścia DCD i DSR. Aktywowanie sygnału DTR powoduje więc natychmiastową (fikcyjną) „odpowiedź drugiej strony" na liniach DSR i DCD. Nawet najszybsza drukarka nie może drukować z prędkością taką, jaką gwarantuje przepustowość łącza szeregowego. Drukarka dysponuje na ogół pewnym buforem wejściowym, ale i ten zostanie wreszcie zapełniony. Dalsze wysyłane przez komputer znaki zostałyby w takiej sytuacji zignorowane. Aby temu zapobiec, należy przesłać do komputera sygnał nakazujący wstrzymanie transmisji. Do tego celu właśnie stworzona została linia DSR. Od strony drukarki korzysta się z jednej z linii obsługujących transmisję synchroniczną (a więc w tym przypadku zbędnych). Końcówka 19 przekazuje więc sygnał zapełnienia bufora, utrzymując go w stanie aktywnym tak długo, jak długo drukarka jest w stanie odbierać dane. Przepełnienie bufora prowadzi natomiast w prostej linii do podania zera logicznego na wejście DSR komputera, a to oznacza wstrzymanie nadawania. Dostęp do łącza szeregowego z poziomu systemu MS-DOS Użytkownik systemu operacyjnego może modyfikować parametry łącza szeregowego posługując się poleceniem zewnętrznym modę, które odwołuje się do przerwania 14h BIOS-u. Bezpośredni dostęp do łącza z poziomu systemu operacyjnego jest bardzo ograniczony. Przerwanie 21h DOS-u nie umożliwia nawet zainicjalizowania łącza przez określenie prędkości transmisji i formatu danych. Programiści mogą korzystać z następujących czterech funkcji przerwania 21h DOS: • 03h - odbiór jednego znaku ze łącza AUX (COMl), • 04h - wysłanie jednego znaku do łącza AUX (COM l), • 3Fh - odczyt znaków z pliku lub urządzenia, • 40h - zapis znaków do pliku lub urządzenia. Funkcje 03h i 04h obsługują wyłącznie urządzenie AUX (synonim portu COM1) i nie dają dostępu do łącz COM2, COM3 i COM4. Funkcje te są reliktami systemu operacyjnego CP/M. Podczas transmisji większych grup znaków przez łącze szeregowe system MS-DOS korzysta z koncepcji uchwytów (handle), tj. jednorazowo nadawanych numerów identyfikacyjnych plików dyskowych i urządzeń. Nazwy COM1 - COM4 znajdują się, podobnie jak LPT1 - LPT4, CON, PRN, AUX i NUL, na liście nazw zastrzeżonych, co oznacza, że nie wolno nadawać ich żadnemu plikowi dyskowemu. Symbol AUX jest synonimem COM1, podobnie jak PRN odpowiada LPT1. Po wydaniu polecenia copy plik. a com2 zawartość pliku o nazwie plik.a przekazywana jest programowi obsługi (sterownikowi) portu szeregowego COM2. Ogromną zaletą funkcji 3Fh i 40h jest niewątpliwie możliwość jednoczesnego przesyłania całego łańcucha znaków. Funkcja 03h Działanie: Funkcja 03h odbiera z łącza COM1 (AUX) jeden znak i umieszcza go w rejestrze AL. Parametry wejściowe: AH 03h. Wartości zwracane: AL odebrany z portu AUX znak. Funkcja 04h Działanie: Funkcja 04h wysyła do łącza COM1 (AUX) jeden znak, przekazywany w rejestrze DL. Parametry wejściowe: AH 04h; DL kod ASCII znaku. Wartości zwracane: - brak - Uwaga: W przypadku błędu DOS przekazuje sterowanie do procedury obsługi przerwania 24h, obsługującej błędy sprzętowe (Critical Error Handler}. Funkcja 3Fh Działanie: Funkcja ta odbiera znaki z dowolnego łącza COMn i umieszcza je w zadanym buforze. Numer uchwytu dla łącza COM1 jest definiowany przez system automatycznie i wynosi 3. Innym łączom należy taki uchwyt najpierw przydzielić używając funkcji otwarcia pliku lub urządzenia 3Dh. Parametry wejściowe: AH 3Fh; BX numer uchwytu; CX liczba bajtów do odczytania; DS:DX adres bufora przeznaczonego na pobrane z łącza znaki. Wartości zwracane: AX liczba faktycznie odczytanych bajtów lub kod błędu w przypadku CF= 1; CF 1 w przypadku wystąpienia błędu. Funkcja 40h Działanie: Funkcja ta przesyła do dowolnego łącza COMn znaki przygotowane w określonym buforze. Numer uchwytu dla łącza COM1 jest definiowany przez system automatycznie i wynosi 3. Innym łączom należy taki uchwyt najpierw przydzielić używając funkcji otwarcia pliku lub urządzenia 3Dh. Parametry wejściowe: AH 40h; BX numer uchwytu; CX liczba bajtów do wysłania; DS:DX adres bufora przeznaczonego na wysyłane łączem znaki. Wartości zwracane: AX liczba faktycznie przesłanych bajtów lub kod błędu w przypadku CF= 1; CF 1 w przypadku wystąpienia błędu. Przykład: bufor DB 8 DUP('*') ;zestaw znaków do wysłania mov ah,40h ;numer funkcji mov bx,3 ;uchwyt urządzenia AUX mov cx,08h ;wyślij 8 znaków mov dx,OFFSET bufor ;DX = adres (przemieszczenie) bufora ;zakładamy, że DS zawiera ;adres segmentowy bufora int 21h ;wywołaj funkcję DOS - wyślij 8 gwiazdek Funkcje BIOS obsługujące łącze szeregowe Funkcje DOS-u ograniczają się praktycznie do przesyłania znaków między pamięcią operacyjną i łączem. Dużo więcej możliwości dają funkcje przerwania 14h BIOS-u. Mamy tu następujące możliwości: • 00h - inicjalizacja łącza, tj. określenie formatu danych i prędkości transmisji, 01h - wysyłanie znaków, • 02h - odbiór znaków, 03h - określenie statusu łącza. Każda z tych funkcji zwraca w rejestrze AH bajt informujący o aktualnym stanie transmisji. Postać tego bajtu przedstawiono poniżej. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=1 - nastąpiło przekroczenie czasu oczekiwania (Time Ouf). bit 6=1 - rejestr przesuwny nadajnika jest pusty. bit 5=1 - rejestr buforowy nadajnika jest pusty. bit 4=1 - połączenie zostało przerwane (Break). bit 3=1 - wystąpił błąd protokołu (Frame Error}. bit 2=1 - stwierdzono błąd parzystości (Parity Error}. bit 1=1 - nastąpił błąd przepełnienia bufora odbiornika (Overrun Error}. bit 0=1 - bufor odbiornika zawiera nie odczytany przez CPU znak. Przekroczenie czasu (Time Out) Standardowy czas oczekiwania BIOS-u na reakcję korespondenta przy próbie nawiązania połączenia, wysłania lub odbioru znaku łączem szeregowym wynosi 20 sekund. Po przekroczeniu tego czasu ustawiany jest bit 7 statusu (Time Out}. Wartości czasów oczekiwania dla każdego z łącz przechowywane są w obszarze danych BIOS-u. Adres; Znaczenie; 0040:007Ch; limit czasu dla łącza COM ł (w sekundach) 0040:007Dh; limit czasu dla łącza COM2 (w sekundach) 0040:007Eh; limit czasu dla łącza COM3 (w sekundach) 0040:007Fh; limit czasu dla łącza COM4 (w sekundach) Czas oczekiwania dla dowolnego łącza COM/7 można ustawić na nieskończenie długi poleceniem DOS-u mode comn, , p. Przerwanie połączenia (Break) Stan ten sygnalizowany jest w momencie, gdy końcówka wejściowa RxD odbiornika znajduje się w niskim stanie logicznym przez czas dłuższy od czasu trwania jednej ramki. Oznacza to przerwanie linii danych, ewentualnie uszkodzenie nadajnika. Linia danych łącza w stanie spoczynku (nie przekazującego danych) utrzymywana jest przez nadajnik w wysokim stanie logicznym. Błąd protokołu (Frame Error) Ma on miejsce, gdy oczekiwany przez odbiornik bit stopu nadejdzie za wcześnie lub zbyt późno. Oznacza to, że długość ramki jest inna od uzgodnionej, co może wskazywać na niewłaściwą liczbę bitów stopu, parzystości, danych lub odmienną od deklarowanej prędkość transmisji. Błąd parzystości (Parity Error) Może on oznaczać przekłamanie bitu (bitów) w bajcie danych na drodze między odbiornikiem a nadajnikiem, ewentualnie niezgodność sposobu kontroli parzystości po obu stronach łącza. Błąd przepełnienia (Overrun Error) Błąd ten wystąpi, jeżeli dane napływają do łącza szybciej, niż mogą być pobierane z bufora wejściowego odbiornika przez program obsługi łącza. Skompletowany w buforze odbiornika bajt zostanie w takiej sytuacji zamazany przez następną porcję danych. Bajt statusu modemu Funkcje 00h i 03h przerwania 14h zwracają dodatkowo w rejestrze AL tzw. bajt statusu modemu, obrazujący stan linii sterujących łącza RS-232C. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=1 - aktywny sygnał DCD (Data Carrier Detecf). bit 6=1 - aktywny sygnał RI (Ring Indicator). bit 5=1 - aktywny sygnał DTR (Data Terminal Ready). bit 4=1 - aktywny sygnał CTS (Clear to Send). bit 3=1 - stwierdzono zmianę sygnału DCD. bit 2=1 - stwierdzono zmianę sygnału RI. bit 1=1 - stwierdzono zmianę sygnału DTR. bit 0=1 - stwierdzono zmianę sygnału CTS. Bity 7-4 odzwierciedlają bezpośrednio stan odpowiednich wejść sterujących łącza szeregowego. Mniej znacząca połowa bajtu dostarcza informacji o ewentualnych zmianach poziomu danego sygnału od czasu ostatniego wywołania funkcji 03h. Poniżej opisano funkcje przerwania 14h BIOS-u, realizujące obsługę portu szeregowego. Funkcja 00h Działanie: Funkcja 00h inicjalizuje wybrane łącze, ustalając parametry transmisji. Parametry wejściowe: AH 00h: AL bajt określający parametry transmisji; DX numer łącza: 0=COM1 (AUX), 1=COM2, 2=COM3, 3=COM4. Wartości zwracane: AH bajt statusu łącza; AL bajt statusu linii modemu. Format danych przekazywanych w rejestrze AL (bajt parametrów transmisji) ma następującą budo we: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bity 7-5=Prędkość transmisji: 000- 110 bodów, 001- 150 bodów, 010- 300 bodów, 011- 600 bodów, 100- 1 200 bodów, 101- 2 400 bodów, 110- 4 800 bodów, 111- 9 600 bodów. bity 4-3=Rodzaj kontroli parzystości: 00 - brak kontroli, 01 - parzysta, 10 - brak kontroli, 11 - nieparzysta. bit 2=Liczba bitów stopu: 0 - jeden bit stopu, 1 - dwa bity stopu. bity 1-0=Liczba bitów danych: 10-7 bitów danych, 11-8 bitów danych. Przykład: ;inicjalizacja portu COM3 na 2400 bodów, ;1 bit stopu, 8 bitów danych, ;bez kontroli parzystości 2400-8-N-l mov ah,00h ;numer funkcji mov al,10100011b ;bajt parametrów mov dx,02h ;COM3 int l4h ;inicjalizuj łącze Uwagi: Funkcja 00h przerwania 14h umożliwia, jak widać, skonfigurowanie łącza do maksymalnej prędkości transmisji 9 600 bodów. BIOS modeli PS/2 dysponuje funkcją 04h (Extended Initialize), która dopuszcza prędkość 19 200 bodów jak również ramkę zawierającą 5 i 6 bitów danych. Pełne możliwości układu UART, tj. prędkość transmisji 115 200 bodów można wykorzystać tylko programując bezpośrednio rejestry układu. Funkcja 0lh Działanie: Funkcja ta wysyła jeden znak do wybranego łącza szeregowego. Parametry wejściowe: AH 01h; AL kod ASCII wysyłanego znaku; DX numer łącza: 0 = COM1 (AUX), 1 = COM2, 2 = COM3, 3 = COM4. Wartości zwracane: AH bajt statusu łącza. Funkcja 02h Działanie Funkcja ta odbiera jeden znak z wybranego łącza szeregowego. Parametry wejściowe: AH 02h; DX numer łącza: 0 = COM1 (AUX), 1 = COM2, 2 - COM3, 3 = COM4. Wartości zwracane: AH bajt statusu łącza; AL odebrany znak. Funkcja 03h Działanie Funkcja 03h określa status wybranego łącza szeregowego. Parametry wejściowe: AH 03h; DX numer łącza: 0=COM1(AUX), 0=COM2, 2 = COM3, 3=COM4. Wartości zwracane: AH bajt statusu łącza; AL bajt statusu modemu. Bezpośrednie programowanie rejestrów UART Każdemu z zaakceptowanych przez BIOS łącz szeregowych przydzielany jest fragment przestrzeni adresowej wejścia-wyjścia. W przydzielonym danemu łączu obszarze widziane są jego rejestry; początek obszaru stanowi adres bazowy. Informacja o przyporządkowaniu adresów bazowych łączom szeregowym przechowywana jest w obszarze danych BIOS-u. Tabela 13.2. Adresy bazowe portów równoległych Adres; Wielkość; Zawartość; Wartość standardowa 0040:0000h; słowo; adres bazowy łącza COM1; 3F8h 0040:0002h; słowo; adres bazowy łącza COM2; 2F8h 0040:0004h; słowo; adres bazowy łącza COM3; 3E8h 0040:0006h; słowo; adres bazowy łącza COM4; 2E8h Liczbę zainstalowanych w systemie łącz określają trzy najmniej znaczące bity bajtu zlokalizowanego pod adresem 0040:0011 h. W bajtach tych kodowana jest binarnie liczba łącz. Starsze wersje BIOS-u często nie obsługują łącz COM3 i COM4, które nie są wręcz rozpoznawane przez procedury POST, a ich adresy nie są umieszczane w obszarze danych BIOS-u. Standardową linią przerwań sprzętowych stowarzyszoną z łączami COM l i COM3 jest IRQ4. Łącza COM2 i COM4 dołączane są zwykle do linii IRQ3. Przerwania nie są jedyną możliwością obsługi łącza szeregowego - drugą z nich jest polling. Szczegóły znajdzie czytelnik w dalszej części tego rozdziału. Adresy rejestrów danego łącza podaje się zwykle w stosunku do jego adresu bazowego (jako przemieszczenie - offset}. Przemieszczenie równe zero oznacza adres bazowy. Trzy linie adresowe A2 - AO układu 8250 dają możliwość zaadresowania ośmiu portów (przemieszczenie O - 7). Ponieważ sumaryczna liczba wszystkich rejestrów układu przekracza 8, wprowadzona zastała sztuczna, czwarta linia adresowa. Jej funkcję pełni bit 7 (B7) rejestru formatu danych (przemieszczenie 03h), określany często mianem DLAB (ang. Divisor Latch Access Bit). Bit ten musi być ustawiony, jeżeli adresujemy jedną ze składowych rejestru podzielnika częstotliwości i wyzerowany przy dostępie do rejestrów buforowych nadajnika i odbiornika oraz rejestru konfiguracji przerwań (przemieszczenie O l h). W obydwu stanach bitu 7 adresy na liniach A2 - AO pokrywają się. Przy dostępie do pozostałych rejestrów układu UART stan bitu B7 nie odgrywa roli. Tabela 13.3. Zestaw rejestrów uktadii UART Rejestr UART; Przemieszczenie; DLAB; A2; A1; A0; Bufor odbiornika (RBR - Receiver Buffer Register); 00h; 0; 0; 0; 0; Bufor nadajnika (THR - Transmitter Holding Register); 00h; 0; 0; 0; 0; Rejestr konfiguracji przerwań (IMR - Interrupt Mask Register); 01h; 0; 0; 0; 1; Mniej znacząca (LSB) część podzielnika;00h; 1; 0; 0; 0; Bardziej znacząca (MSB) część podzielnika; 01h; 1; 0; 0; 1; Rejestr identyfikacji przerwania (IIR - Interrupt Identification Register); 02h; puste; 0; 1; 0; Rejestr formatu danych (LCR - Line Control Register); 03h; puste; 0; 1; 1; Rejestr wyjściowych sygnałów sterujących RS-232C (MCR- Modem Control Register);04h; puste;1; 0; 0; Rejestr stanu transmisji (LSR - Line Status Register); 05h; puste; 1; 0; 1; Rejestr wejściowych sygnałów sterujących RS-232C (MSR-Modem Status Register); 06h; puste; 1; 1;0; Rejestr dodatkowy (tylko w układzie 16450); 07h;puste; 1; 1; 1 Napływający do łącza szeregowy strumień danych przetwarzany jest na postać równoległą i składany w rejestrze buforowym odbiornika (przemieszczenie 0). Bit danych, który nadejdzie jako pierwszy, zajmuje w bajcie pozycję najmniej znaczącą. Należy pamiętać, że formaty ramki o 5, 6 i 7 bitach danych wymagają zamaskowania brakujących, bardziej znaczących pozycji bitowych, które są nieokreślone. Rozkaz in odczytuje zawsze pełny bajt. Odczytanie zawartości rejestru buforowego odbiornika, np.: mov dx,2f8h ; adres portu COM2 in al,dx ; pobierz znak powoduje automatycznie opróżnienie tego rejestru, który może przyjąć następny odebrany znak. Analogicznie, zapisanie znaku do rejestru buforowego nadajnika: mov al,'X' ; znak 'X' mov dx,3f8h ; adres portu COM1 out dx,al ; wyślij znak spowoduje załadowanie rejestru przesuwnego nadajnika i wysłanie linią SOUT bajtu przetworzonego do postaci szeregowej (zgodnie z obowiązującym aktualnie formatem danych). Najmniej znaczący bit będzie wysłany jako pierwszy. Przerwania generowane przez łącze szeregowe Układ UART może być źródłem przerwań sprzętowych, sygnalizując tym samym konieczność obsługi przez procesor. Metodą alternatywną do stosowania przerwań jest polling. Procesor testuje w wybranych przez siebie momentach stan łącza i w przypadku stwierdzenia obecności znaku w buforze odbiornika zostaje on odczytany. Łatwo tu zauważyć niebezpieczeństwo „połykania" już odebranych przez łącze znaków, które nie zostały na czas odczytane z bufora i uległy zamazaniu nowymi wartościami. Zaistnienie takiego faktu można co prawda stwierdzić badając bit l bajtu statusu łącza (por. funkcje przerwania 14h), ale straconego znaku nie da się już odzyskać. Rejestr konfiguracji przerwań Warunki, w których UART będzie generował przerwanie sprzętowe (tj. dodatni impuls na wyjściu INTRPT) można określić programując rejestr konfiguracji przerwań IMR (przemieszczenie O l h). x; x; x; x; bit 3; bit 2; bit 1; bit 0; bity 7-4=Bez znaczenia; bit 3=1 - Przerwanie generowane jest w wyniku zmiany stanu jednego z wejściowych sygnałów sterujących łącza RS-232C (CTS, DSR, DCD, RI). bit 2=1 - przerwanie generowane jest w wyniku błędu parzystości, protokołu, przepełnienia lub zerwania połączenia. bit 1=1 - przerwanie generowane jest na skutek opróżnienia rejestru przesuwnego nadajnika (ang. THRE - Transmitter Holding Register Empty}. bit 0=1 - przerwanie generowane jest, gdy w rejestrze buforowym odbiornika znajduje się odebrany bajt danych. Rejestr identyfikacji przerwań Dokładną przyczynę przerwania można określić analizując rejestr identyfikacji przerwań 1IR (przemieszczenie 02h), którego budowę pokazano poniżej. 0; 0; 0; 0; 0; bit 2; bit 1; bit 0; bity 7-3=00000. bity 2-1 =Kod identyfikacyjny przerwania. bit 0=Stan przerwania: 0 - przerwanie oczekuje na obsługę, 1 - brak przerwań. Przyczynę przerwania określa kod identyfikacyjny: Bit 2; Bit 1; Przyczyna przerwania; Priorytet 0; 0; zmiana stanu jednego z sygnałów sterujących łącza RS-232C (CTS, DSR, RI, DCD); najniższy(3) 0; 1; bufor nadajnika jest pusty; 2 1; 0; w buforze odbiornika znajduje się nie odebrany bajt; 1 1; 1; stwierdzono błąd parzystości, protokołu, przepełnienie bufora odbiornika lub zerwanie łączności; najwyższy (0) Naturalnie można zidentyfikować tylko te przerwania, które zostały wcześniej dopuszczone maską rejestru przerwań IMR (przesunięcie 0 l h). Jeżeli jednak wyjście INTRPT układu UART jest połączone z odpowiednią linią IRQ, a procedura obsługi tego przerwania składa się z samej instrukcji iret (co oznacza natychmiastowy powrót bez podejmowania żadnych czynności), to mimo istnienia fizycznego połączenia INTR-IRQ>? mamy tu do czynienia z pollingiem. Bit 0 rejestru identyfikacji umożliwia szybką diagnozę, czy procedura obsługi przerwania ma wkraczać do akcji. Wszystkie przerwania o niższym priorytecie są zablokowane tak długo, jak długo nie zostanie obsłużone przerwanie o priorytecie wyższym. Procedura obsługująca łącze musi więc podjąć stosowne kroki. Dla układu UART obsługa przerwania oznacza: Źródło przerwania = Obsługa przerwania Zmiana stanu jednego z wejść sterujących łącza RS-232C - Odczytanie rejestru wejściowych sygnałów sterujących MSR (przemieszczenie 06h) Opróżnienie bufora nadajnika - Wpisanie bajtu danych do bufora nadajnika lub odczytanie rejestru identyfikacji przerwań IIR (przemieszczenie 02h) W buforze odbiornika znajduje się nie odebrany bajt - Odczytanie rejestru buforowego odbiornika RBR (przemieszczenie 04h) Błąd transmisji lub przerwanie połączenia - Odczytanie rejestru stanu transmisji LSR (przemieszczenie 05h) Wykonanie stosownych czynności w stosunku do przerwania o wyższym priorytecie (tj. niższym numerze!) otwiera drogę ewentualnym zgłoszeniom o priorytecie niższym, które również muszą być obsłużone, aby układ UART mógł być źródłem kolejnych przerwań. Rejestr formatu danych Pod przemieszczeniem 03h zlokalizowany jest rejestr formatu danych LCR. Określa on format ramki oraz steruje dostępem do rejestru podzielnika generatora synchronizują-cego. Jego postać jest następująca: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=Czwarta linia adresowa (DLAB): 0 - udostępnienie buforów nadajnika, odbiornika i rejestru konfiguracji 1RQ, 1 - udostępnienie rejestru podzielnika. bit 6=1 - przerwanie połączenia (Break) przez wymuszenie stanu O na wyjściu SOUT. bity 5-3=Tryb kontroli parzystości: 000- brak kontroli, 001 - nieparzysta (sumaryczna liczba jedynek pola danych i bitu parzystości jest nieparzysta), 011 - parzysta (sumaryczna liczba jedynek pola danych i bitu parzystości jest parzysta), 100 - tzw. kontrola typu „mark" (bit parzystości stale równy 1, 111 - tzw. kontrola typu „space" (bit parzystości zawsze równyO, niezależnie od danych). bit 2=Liczba bitów stopu: 0 - 1 bit stopu, 1 - 2 bity stopu. bity 1-0=Liczba bitów danych: 00 - 5 bitów danych, 01 - 6 bitów danych, 10 - 7 bitów danych, 11 - 8 bitów danych. Ustawienie bitu 6 tego rejestru symuluje przerwanie połączenia. Wyjście SOUT przechodzi do niskiego poziomu logicznego, a zatem na linii TxD pojawia się napięcie +12 V na skutek odwracającego działania wzmacniaczy linii. Stan ten należy odróżnić od braku danych w rejestrze przesuwnym nadajnika, kiedy to wyjście SOUT znajduje się w wysokim stanie logicznym (co odpowiada +5 V) i, stosownie do tego, zanegowane wyjście TxD ma poziom -12 V. Ramka w formacie 5 bitów danych posiada automatycznie wydłużony o 50 % bit stopu. Prędkość transmisji Sygnał odniesienia pochodzący z rezonatora kwarcowego lub generatora dołączonego do wejść XTAL1 i XTAL2 ma częstotliwość 1,8432 MHz. Przebieg ten podlega dwukrotnemu podziałowi: raz przez programowany dzielnik częstotliwości i drugi raz przez stały współczynnik 16. Można też powiedzieć, że dzielnik programowany dokonuje podziału częstotliwości 115 200 Hz, gdyż tyle uzyskujemy z podziału 1,8432 MHz przez 16. Efektywna prędkość transmisji może być więc zawsze określona jako 115200 : podzielnik. 16-bitowy rejestr podzielnika (przemieszczenie 001 dla LSB i 01 dla MSB) dostępny jest wyłącznie przy ustawionym bicie 7 rejestru formatu danych LCR. Ponieważ najmniejszą akceptowaną przez ten rejestr wartością jest 1, wynika stąd maksymalna prędkość transmisji UART równa 115 200 bodów. Przykład: ;dla 4800 bodów mamy podzielnik 24 mov dx,2fbh adres portu LCR in al,dx;pobierz zawartość rejestru LCR portu COM2 or al,10000000b ;ustaw bit 7 out dx,al ;zapisz rejestr LCR mov al,24 ;LSB = 24 mov dx,2f8h ;adres portu podzielnika (LSB) out dx,al ;wpisz LSB podzielnika mov al,O ;MSB = 0 inc dx DX <- ;adres portu podzielnika (MSB) out dx,al ;wpisz MSB podzielnika mov dx,2fbh ;adres portu LCR in al,dx pobierz zawartość rejestru LCR portu COM2 and al,01111111b ;wyzeruj bit 7 out dx,al ;zapisz rejestr LCR Sygnały sterujące Rejestr wyjściowych sygnałów sterujących łącza RS-232C Na stan linii RTS i DTR łącza mamy wpływ poprzez rejestr wyjściowych sygnałów sterujących RS-232C (MCR - przemieszczenie 04h). Rejestr ten daje też możliwość swobodnej manipulacji stanem końcówek OUT1 i OUT2. Jak wspomniano wcześniej, wyjście OUT2 służy sprzętowemu blokowaniu wszelkich sygnałów przerwań pochodzących od UART. Postać rejestru MCR jest następująca. x; x; x; bit 4; bit 3; bit 2; bit 1; bit 0' bity 7-5=Bez znaczenia. bit 4=1 - połączenie wyjścia SOUT układu UART z wejściem SIN. bit 3=1 - aktywowanie sygnału OUT2. bit 2=1 - aktywowanie sygnału OUT1. bit 1=1 - aktywowanie sygnału ~RTS. bit 0=1 - aktywowanie sygnału -DTR. Układ 8250/16450 posiada wbudowany mechanizm diagnostyczny, uruchamiany przez ustawienie bitu 4 powyższego rejestru. Sygnały sterujące łącza RS-232C łączone są wówczas wewnątrz układu w następujący sposób: RTS <-> CTS, DTR <-> DSR, OUT1 <-> RI, OUT2 <-> DCD, SOUT = 1 (wysoki stan logiczny), SIN odłączone. Ponadto wyjście rejestru przesuwnego nadajnika, które normalnie dołączone jest do wyjścia SOUT, kierowane jest na wejście rejestru przesuwnego odbiornika. Ponieważ wejście SIN nie doprowadza w rym stanie żadnego sygnału zewnętrznego, tryb ten umożliwia gruntowne przetestowanie układów logicznych UART. Należy pamiętać , że przeprowadzona w ten sposób diagnostyka dotyczy samego układu UART i nie obejmuje wzmacniaczy linii, które znacznie częściej narażone są na uszkodzenia z zewnątrzl. • technika ta jest określana w języku angielskim mianem interna! loopback testing. W celach diagnostycznych można również połączyć odpowiednie końcówki gniazda interfejsu szeregowego (external loopback testing), co pozwala na testowanie wzmacniaczy linii. Warto jeszcze raz zwrócić uwagę, że poziom logiczny wyjściowych sygnałów sterujących, tj. -OUT1, -OUT2, -R.TS i ~DTR jest odwracany, tzn. ustawiony bit rejestru wymusza zero logiczne na danym wyjściu układu scalonego. Sygnały ~RTS i ~DTR przechodzą jednak przez odwracające fazę wzmacniacze linii (dla dopasowania poziomów napięcia 5 V na 12 V) i zgodność poziomów logicznych w gnieździe łącza jest przywrócona. Rejestr wejściowych sygnałów sterujących łącza RS-232C Zawartość rejestru wejściowych sygnałów sterujących MSR (przemieszczenie 06h) odzwierciedla stan wejściowych linii sterujących łącza. Postać tego rejestru przedstawiono poniżej. bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Sygnał DCD jest: 0 - nieaktywny, 1 - aktywny. bito Sygnał RI jest: 0 - nieaktywny, 1 - aktywny. bit 5=Sygnał DSR jest: 0 - nieaktywny, 1 - aktywny. bit 4=Sygnał CTS jest: 0 - nieaktywny, 1 - aktywny. bit 3=1 - stwierdzono zmianę poziomu sygnału DCD. bit 2=1 - stwierdzono zmianę poziomu sygnału RI. bit 1=1 - stwierdzono zmianę poziomu sygnału DSR. bit 0=1 - stwierdzono zmianę poziomu sygnału CTS. Mniej znacząca połowa tego rejestru (bity 3-0) zawiera informację o ewentualnej zmianie stanu danej linii od czasu ostatniego odczytu rejestru. Wykonanie rozkazu in zawsze zeruje te bity. Wejściowe sygnały sterujące DCD, RI, DSR i CTS podlegają inwersji na drodze od rejestru sterującego do końcówek układu UART.'W połączeniu z inwersyjnym działaniem wzmacniaczy linii wysoki poziom logiczny wejścia ustawia stosowny bit rejestru. Bit wyzerowany oznacza obecność na danej linii napięcia -12 V. Rejestr stanu transmisji Stan, w jakim znajdują się w danym momencie część odbiorcza i nadawcza układu UART można odczytać z rejestru stanu transmisji LSR (przemieszczenie 05h). Jego postać przedstawiono poniżej. 0; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=Zawsze 0. bit 6=0 - w buforze odbiornika albo w rejestrze przesuwnym nadajnika znajdują się dane, 1 - bufor odbiornika i rejestr przesuwny nadajnika są puste. bit 5=1 - rejestr przesuwny nadajnika jest pusty, bit 4=1 - połączenie zostało przerwane (Break). bit 3=1 - błąd protokołu (Franie Error - niezgodny format danych lub prędkość transmisji). bit 2=1 - błąd parzystości (Parity Error}. bit 1=1 - błąd przepełnienia bufora odbiornika (Overrun Error}. bit 0=0 - bufor odbiornika pusty, 1 - odebrany bajt spoczywa w rejestrze buforowym odbiornika. Opisany rejestr można wykorzystać podczas obsługi łącza szeregowego przez polling. ;obsługa łącza nie generującego przerwań mov dx,2fdh ; rejestr LSR portu COM2 in al,dx ;odczytaj rejestr test al,01h ;czy bit O ustawiony? jz dalej ;nie - nic do odebrania mov dx,2f8h ;adres bufor odbiornika in al,dx ;pobierz bajt danych do AL ;.....obróbka bajtu dalej: nic do zrobienia Specyfika układu UART 16450 Układ 16450 dysponuje dodatkowym rejestrem zlokalizowanym pod przemieszczeniem 07h. Może on być wykorzystywany jako dodatkowy bufor nadajnika lub odbiornika, jeżeli z jakichkolwiek względów nie chcemy do tego celu używać pamięci operacyjnej. Stan tego rejestru nie wpływa w żaden sposób na pracę układu. Jego obecność jest jednocześnie gwarancją, że układ nie jest typu 8250 i może być programowany do prędkości 1 15 200 bodów. * * * Rozdział 14. Klawiatura W ostatnim okresie nastąpił gwałtowny zalew rynku nowoczesnymi urządzeniami przeznaczonymi do wprowadzania danych i ułatwiającymi kontakt użytkownika z komputerem. Mowa tu o różnych wymyślnych modelach myszek, skanerach czy wręcz systemach rozpoznawania mowy. Mimo tego wszystkiego trudno sobie w dalszym ciągu wyobrazić obsługę komputera bez użycia klawiatury. To poczciwe urządzenie również podlega z biegiem czasu pewnym mniej lub bardziej widocznym przekształceniom. Stosowane obecnie mikroprzełączniki są coraz lepszej jakości, a i producenci zaczynają przywiązywać coraz większą wagę do ergonomicznego kształtu klawiatury. Należy się spodziewać, że jeszcze przez dłuższy czas zmuszeni będziemy do korzystania z klawiatury, warto więc zaznajomić się z jej działaniem i budową. Klawiatury XT, AT i PS/2 Klawiatura komputera, a zwłaszcza nowoczesne modele PS/2 (oznaczenie PS/2 odnosi się do modelu klawiatury 101- lub 102-klawiszowej, wprowadzonego na rynek przez firmę IBM w modelach IBM PC/RT i PS/2 - klawiatura ta znana jest też pod nazwą Enhanced AT lub MF-11, a żargonowo nazywana jest „klawiaturą 101"), stanowi układ dużo bardziej skomplikowany, niż mogłoby się to wydawać na pierwszy rzut oka. Wbrew powszechnie panującej opinii, model XT, będący pierwowzorem dla późniejszych udoskonaleń, również wyposażony był we własny kontroler klawiatury. Idea działania klawiatury typu XT przedstawiona jest na rysunku 14.1. Mikrokomputer jednoukładowy (mikrokontroler) 8048 nadzoruje siatkę połączeń X i Y, w której węzłach umieszczone są poszczególne klawisze. Układ kontroluje odpowiednio często stan tej siatki, wysyłając impulsy kolejno wszystkimi liniami X i badając, czy nie pojawiły się one na którejś z linii Y. W ten sposób można w dowolnym momencie określić, które z klawiszy zostały wciśnięte i ewentualnie zwolnione. Informacja ta przekazywana jest w formie szeregowego strumienia danych przewodem połączeniowym do komputera. Dane przesyłane są w sposób synchroniczny (dodatkową linią transmitowany jest przebieg zegarowy), a ramka danych ma stałą budowę i zawiera jeden bit startu, osiem bitów danych, jeden bit kontroli parzystości (typu nieparzystego) i jeden bit stopu. Bit startu jest zawsze równy zero, zaś bit stopu -jeden. Przewód połączeniowy klawiatura - komputer jest pięciożyłowy i oprócz linii danych, synchronizacji i masy dostarcza napięcia zasilającego +5 V dla układów sterujących klawiatury oraz posiada nie zawsze wykorzystywaną linię Reset. Napływające z klawiatury dane opracowywane są w komputerze PC/XT przez układ 8255, a odebranie kompletnego znaku sygnalizowane jest przerwaniem IRQ1. Znak ten stoi do dyspozycji w porcie B układu 8255 (rejestr o adresie 60h). Trochę inaczej przedstawia się sytuacja w przypadku klawiatur AT i PS/2. Jak widać z rysunku 14.2, między klawiaturą a komputerem PC/AT możliwa jest dwukierunkowa wymiana informacji (w synchronicznym trybie półdupleksowym). Za komunikację odpowiedzialny jest od strony komputera scalony kontroler 8741, 8742 lub 8042, a od strony klawiatury - mikrokontroler 8049, posiadający odpowiednio rozbudowany w stosunku do swego poprzednika mikrokod. Procesor jest w stanie programować zarówno klawiaturę, jak i jej kontroler (ten od strony komputera). Wprowadzona została cała lista rozkazów, które mogą być przesyłane do klawiatury. Modele AT i PS/2 wzbogacone zostały również o dodatkowy rejestr sterujący o adresie 64h. Podstawowa funkcja portu 60h jako rejestru danych została oczywiście zachowana ze względu na konieczność utrzymania zgodności sprzętowej. Mapa klawiatury Każdemu przyciskowi klawiatury przyporządkowana jest na stałe liczba zwana kodem klawisza (ang. scan code). Nie ma tu absolutnie znaczenia, jakim znakiem lub funkcją opisany jest klawisz, ważne jest jedynie jego położenie na klawiaturze. Różnych kodów może być oczywiście nie więcej niż klawiszy, czyli maksymalnie 102, tak więc do ich opisania wystarczy l bajt. W przypadku pokazanej na rysunku 14.3. klawiatury XT klawisze zostały po prostu kolejno ponumerowane. Naciśnięcie dowolnego klawisza powoduje przesłanie do komputera tzw. kodu naciśnięcia (ang. make code), który równy jest kodowi naciśniętego klawisza. Kod ten mieści się w całości w 11-bitowej ramce, za pomocą której transportowany jest do komputera. Nadejście dowolnego bajtu danych z klawiatury wyzwala przerwanie sprzętowe na linii IRQ1. Obsługująca to przerwanie procedura (wskazywana przez wektor 09h) przejmuje odebrany znak. Dalszy sposób postępowania procedury INT 09h zależy od tego, czy naciśnięto klawisz funkcyjny (np. F2), specjalny (np. Alt, Shift), czy klawisz ze zwykłym znakiem (np. B). Pojedynczy kod naciśnięcia nie określa niestety w jednoznaczny sposób intencji użytkownika. Wiele klawiszy opisanych jest bowiem kilkoma symbolami, nawet zwykłe litery mogą występować w wersji dużej lub małej. Wybór znaczenia klawisza dokonywany jest za pomocą klawiszy specjalnych. Procedura obsługi przerwania 09h (zwana też sterownikiem klawiatury, ang. keyboard handler) musi więc brać pod uwagę stan całego pola zestyków i odpowiednio go interpretować. Przykład interpretacji kodów naciśnięcia (klawiatura AT): Naciśnięte klawisze; Przekazywane kody naciśnięcia; Interpretacja Q; 16; znak „q" Shift-Q; 24 16; znak „Q" Ctrl-[; 2926; znak „Esc" Każda klawiatura posiada wbudowaną funkcję autorepetycji, czyli samoczynnego powtarzania wysyłania znaku odpowiadającego przytrzymywanemu dłużej klawiszowi, co zwalnia użytkownika z wielokrotnego naciskania tego samego klawisza. Modele AT i PS/2 pozwalają na regulację (w pewnych granicach) szybkości tego powtarzania oraz opóźnienia załączenia funkcji autorepetycji. Model XT ma ustaloną stałą prędkość auto-repetycji równą 10 znaków/s. Zwolnienie klawisza również prowadzi do wywołania przerwania IRQ1, ale programowi obsługi klawiatury przekazywany jest tym razem tzw. kod zwolnienia (break cocle), który równy jest dla danego klawisza jego kodowi z ustawionym bitem 7. Innymi słowy kod zwolnienia = kod wciśnięcia + 128. Analiza sekwencji kodów wciśnięcia i zwolnienia pozwala na jednoznaczne określenie, które z klawiszy są w danym momencie wciśnięte. Przykład: Sekwencja kodów 42 16 144 170 zostanie zinterpretowana następująco: • Wciśnięto klawisz Shift. Klawiatura 729 • Wciśnięto klawisz Q (klawisz Shift pozostaje wciśnięty). •Zwolniono klawisz Q (144= 128 + 16). • Zwolniono klawisz Shift (170 = 128 + 42). Pokazana na rysunku 14.4 klawiatura AT różni się od opisanego modelu XT jedynie przesunięciem bloku numerycznego i wprowadzeniem dodatkowego klawisza SysReą o kodzie naciśnięcia równym 84. Wyodrębniono w niej również elementy sygnalizacyjne w postaci diod świecących (LI - L3). Określają one stan funkcji Num Lock, Scroll Lock i Caps Lock (w niektórych klawiaturach XT diody takie były zabudowane w odpowiednich klawiszach). Sprawy komplikują się jednak w przypadku powszechnie stosowanej obecnie klawiatury PS/2, przedstawionej na rysunku 14.5. Klawiatura ta posiada nie tylko zmieniony układ znanych już klawiszy (klawisze funkcyjne umieszczone są na górze, a nie z boku, zmieniono położenie klawiszy Alt, Ctrl, Caps Lock), ale również została poszerzona o nowe (na przykład oddzielny blok klawiszy sterowania kursorem). Dodane zostały także dwa nowe klawisze funkcyjne F1 l i F12, zdublowano klawisze Alt i Ctrl oraz wydzielono klawisze PrtScr i Pause. Niezależny blok sterowania kursorem podnosi komfort obsługi, likwidując konieczność ciągłego przełączania trybu Num Lock przy pracy na bloku numerycznym. Część klawiatur PS/2 wyposażono dodatkowo w czwartą diodę świecącą (L4), oznaczoną zwykle On Linę i pełniącą rolę kontrolki zasilania. Warto wspomnieć, że w przypadku klawiatur PS/2 wśród producentów panuje znaczna dowolność w kwestii rozłożenia klawiszy, abstrahując od różnic w wersjach narodowościowych. Przykładowo, firma BTC wyposaża swoje klawiatury w obsługiwany przez specjalne programy klawisz o nazwie Macro, zaś firma Northgate oferuje klawiatury o nazwie OmniKey, dysponujące podwójnym zestawem klawiszy funkcyjnych i programowalnymi klawiszami Ctrl, Alt i Caps Lock. Z jednej strony nowo wprowadzone klawisze muszą się dać odróżnić od już obecnych, np. prawy klawisz Alt (na klawiaturach innych niż anglosaskie oznaczany jest on często Alt Gr) ma w połączeniu z klawiszem Ctrl inną funkcję niż lewy. Z drugiej jednak strony obowiązuje zasada kompatybilności w dół, tzn. stare programy, nie znające specyfiki klawiatury PS/2, muszą prawidłowo rozpoznawać cały zestaw klawiszy, np. blok sterowania kursorem. Dylemat ten rozwiązano w następujący sposób: • kody nowych klawiszy są takie same jak już obecnych, np. prawy i lewy Alt mają te same kody (a więc i te same kody naciśnięcia i zwolnienia), • kody nowo wprowadzonych klawiszy poprzedza przedrostek E0h lub E1h. Przedrostek E1h ma zastosowanie wyłącznie do poprzedzenia kodów naciśnięcia i zwolnienia klawisza Pause. Kody wszystkich innych nowych klawiszy uzupełniane są przedrostkiem E0h. Klawiatura PS/2 symuluje ponadto zachowanie modeli AT. Oznacza to, że klawisze bloku sterowania kursorem, których odpowiedniki znajdują się również na bloku numerycznym, generują inne kody naciśnięcia i zwolnienia, jeżeli aktywna jest funkcja Num Lock. Użytkownicy klawiatur AT pamiętają zapewne, że przy wyłączonej funkcji Num Lock klawisze bloku numerycznego sterowały ruchem kursora. Przykład: Na klawiaturze AT przy wyłączonej funkcji Num Lock naciśnięcie klawisza -> powoduje wygenerowanie kodów 77 i 205. Jeżeli jednak funkcja Num Lock jest aktywna, to aby uniknąć wprowadzenia cyfry należy najpierw nacisnąć klawisz Shift, a następnie odpowiedni klawisz kursora. W przypadku aktywnej funkcji Num Lock naciśnięcie klawisza -> spowoduje kolejne wygenerowanie przez klawiaturę AT kodów 42, 77, 205 i 170. Takie samo zachowanie symuluje właśnie klawiatura PS/2. Oddzielny blok sterowania kursorem posiada również klawisz ->. W tym jednak przypadku klawiatura doda do generowanych kodów wspomniane wcześniej przedrostki EOh (224), identyfikujące nowe klawisze. Sekwencja wysłanych kodów będzie więc miała postać (224, 77, 224, 205) w przypadku wyłączonej funkcji Num Lock oraz (224, 42, 224, 77, 224, 205, 224, 170) dla funkcji Num Lock włączonej. Osobnego omówienia wymaga klawisz Pause. Na klawiaturze AT jego funkcję pełnił zlokalizowany nad blokiem numerycznym klawisz Num Lock (o kodzie 69) w połączeniu z klawiszem Ctrl. Naciśnięcie kombinacji Ctrl-Num Lock powodowało wstrzymanie wykonywania programu do czasu wciśnięcia dowolnego innego klawisza (tę samą funkcję, obsługiwaną jednak przez system operacyjny, pełni także kombinacja klawiszy Ctrl-S, funkcja ta dostępna jest też w innych systemach, np. CP/M, VMS). Dla zachowania zgodności klawiatura PS/2 generuje następującą sekwencję kodów: 225 (Elh) 29 (Ctrl - naciśnięcie) 69 (Pause - naciśnięcie) 225 (Elh) 157 (Pause - zwolnienie) 197 (Ctrl - zwolnienie) Zadanie przyporządkowania określonych znaków różnorodnym sekwencjom kodów bierze na siebie procedura obsługi przerwania IRQ1. W celu umożliwienia niestandardowej obsługi klawiatury jest ona najczęściej modyfikowana przez zamianę wektora; klasycznym tego przykładem jest powszechnie znany sterownik keyb.com. Program ten, posługując się wewnętrznymi tabelami, jest w stanie dopasować topografię dowolnej klawiatury (np. polskiej, niemieckiej czy francuskiej) do kodów ASCII generowanych przez nią znaków. Należy bowiem pamiętać, że dany klawisz generuje zawsze ten sam zestaw kodów naciśnięcia i zwolnienia, bez względu na to, jakim symbolem jest opisany, a dopiero program sterownika przetwarza jego kod na odpowiedni znak. Ponieważ polskie wersje Windows 3. 1x i Windows 95 podczas domyślnej instalacji zmieniają obsługę przerwania IRQ1, zakładając, że do komputera dołączona jest polska klawiatura w układzie maszynistki (QWERTZ zamiast angielskiej QWERTY), warto przypomnieć rozkład klawiszy na polskiej klawiaturze w układzie maszynistki (rysunek 14.6). Przyciskom typu „Lock" (np. Caps Lock) odpowiadają w klawiaturze PS/2 rzeczywiste przerzutniki bistabilne. W modelach XT i AT funkcja ta realizowana była programowo przez sterownik klawiatury. Wysłanie do klawiatury rozkazu Reset ustawia wszystkie przerzutniki w określonym stanie, co pozwala na ich zsynchronizowanie z programowymi odpowiednikami w sterowniku. Położenie przerzutników sygnalizowane jest zapaleniem diod świecących LI - L3 (rysunek 14.5). Ich zapalanie może się odbywać niezależnie od stanu przerzutników, realizowane jest bowiem oddzielnym rozkazem. Organizacja obsługi klawiatury przez BIOS Każde naciśnięcie dowolnego klawisza wywołuje przerwanie sprzętowe na linii 1RQ1. Do obsługi tego przerwania wywoływana jest procedura INT 09h, która w oparciu o swoje wewnętrzne tabele kodów przyporządkowuje odebranemu kodowi klawisza kod znaku ASCII. Obydwa kody odkładane są przez BIOS w specjalnym buforze. Każdy odebrany znak reprezentowany jest więc przez dwa bajty: kod ASCII i kod klawisza. Położenie bufora klawiatury zdefiniowane jest w obszarze danych BIOS: słowo zapisane pod adresem 0040:0080h definiuje jego początek, a słowo pod adresem 0040:0082h - koniec. Rozmiar bufora wynosi 32 bajty. Daje to wprawdzie miejsce na 16 znaków, ale ze względów „organizacyjnych1' może się ich tam zmieścić tylko 15. Adres początków) bufora wynosi zwykle 0040:001 Eh, zaś adres pierwszego bajtu poza buforem - 0040h:003Eh. Można też założyć tzw. bufor alternatywny, o innej długości i położeniu, ale musi się on zawierać w całości w segmencie 0040h. Bufor zorganizowany jest logicznie jako struktura pierścieniowa. Pomagają w tym dwa dodatkowe wskaźniki zlokalizowane pod adresami 0040:001Ch i 0040h:001 Ah. Pierwszy z nich jest wskaźnikiem zapisu (ang. keyboard buffer taił) i wskazuje zawsze na wolne miejsce, w którym może być umieszczony kolejny nadchodzący znak. Drugi jest wskaźnikiem odczytu (ang. keyboard buffer head) i wskazuje znak. który należy w pierwszej kolejności przekazać żądającemu go programowi. Rysunek 14.7 przedstawia stan wyjściowy, w którym w buforze klawiatury nie znajduje się żaden znak. Stan ten ma miejsce również w momencie pobrania wszystkich zalegających bufor znaków. Bufor jest pusty, jeżeli wskaźniki zapisu i odczytu mają jednakowe wartości, tj. wskazują tę samą (obojętnie którą) komórkę. Kolejne nadchodzące znaki umieszczane są sukcesywnie w buforze; za każdym razem wskaźnik zapisu przesuwa się (o słowo) w stronę wyższych adresów. Jednocześnie przebiega proces pobierania znaków z komórek, które pokazuje wskaźnik odczytu. Należy przy tym pamiętać, że umieszczanie znaków w buforze klawiatury inicjowane jest sprzętowo, natomiast zadanie ich odbierania spoczywa w całości na wykonującym się w danej chwili programie aplikacyjnym (w szczególności może nim być system operacyjny). Jeżeli oba procesy (napływu i odbioru znaków) przebiegają z przybliżoną prędkością, stabilizuje się stan zbliżony do pokazanego na rysunku 14.8. Ponieważ, jak już wspomniano, bufor klawiatury jest strukturą pierścieniową, możliwa jest również sytuacja przedstawiona na rysunku 14.9. Kolejne napływające z klawiatury znaki umieszczane są pod coraz to wyższymi adresami, ale tylko do wartości 0040:003Ch. Następny znak może być zapisany wyłącznie na początku bufora, tj. pod adresem 0040:001Eh. Podczas gdy wskaźnik odczytu „oczyszcza" kolejne komórki posuwając się ku szczytowi rejestru, nowo napływające znaki umieszczane są w buforze począwszy od jego podstawy. Duża prędkość napływu znaków lub nieodbieranie ich przez program musi oczywiście spowodować przepełnienie bufora (praktycznie „wina" leży zawsze po stronie programu, gdyż prędkość odbierania znaków jest wielokrotnie większa niż ograniczona mechanicznie prędkość ich generowania). Rozlega się wówczas krótki sygnał dźwiękowy (beep), za który odpowiedzialna jest właśnie procedura obsługi przerwania 09h. Bufor klawiatury, aczkolwiek posiadający pojemność 32 bajtów (16 zestawów kodów) pozwala na pomieszczenie maksymalnie 15 znaków. Przyjrzyjmy się rysunkowi 14.10, który pokazuje bufor w stanie przepełnienia. Przyjęcie w wolne miejsce kolejnej pary kodów doprowadziłoby do zrównania wskaźników zapisu i odczytu. Stan taki identyfikuje jednak przecież bufor pusty (porównaj rysunek 14.7)! Dla uniknięcia dwuznaczności należy więc zadowolić się ograniczoną pojemnością bufora. System rozpoznaje przepełnienie bufora, jeżeli wskaźnik zapisu odnosi się do znaku bezpośrednio poprzedzającego wskaźnik odczytu. Funkcja odczytania znaku z bufora pierścieniowego nie powoduje oczywiście niczego prócz przekazania wywołującemu ją programowi pary kodów wskazywanej przez wskaźnik odczytu i zwiększenia tego ostatniego o jedną pozycję (dwa bajty). Po tej operacji przekazana para kodów w dalszym ciągu istnieje w buforze, chociaż miejsce przez nią zajmowane uznane jest za wolne. Programy operujące bezpośrednio na zawartości bufora klawiatury mogą sobie pozwolić na wstawianie w miejsce poprzedzające wskaźnik odczytu dowolnej pary kodów, co po przesunięciu wskaźnika o jeden wstecz spowoduje symulację naciśnięcia określonego klawisza. Konieczne jest jednak przestrzeganie ograniczeń wartości wskaźników zapisu i odczytu. Nie każdy naciśnięty klawisz da się zinterpretować jako znak i umieścić przyporządkowaną mu parę kodów w buforze klawiatury. Dla pełnej oceny sytuacji panującej na klawiaturze potrzeba jeszcze informacji o stanie klawiszy specjalnych (Shift, Alt, Ctrl itp). Dane te umieszcza BIOS w swoim obszarze danych w bajtach o adresach 0040: 0017h i 0040:0018h. Struktura tych bajtów omówiona jest poniżej. Bajt 0040:0017h bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7=Aktywny jest tryb Insert. bit 6=Aktywny jest tryb Caps Lock. bit 5 Aktywny jest tryb Num Lock. bit 4 Aktywny jest tryb Scroll Lock. bit 3 Naciśnięto klawisz Alt (lewy lub prawy). bit 2 Naciśnięto klawisz Ctrl (lewy lub prawy). bit 1 Naciśnięto lewy klawisz Shift. bit 0 Naciśnięto prawy klawisz Shift. Bajt 0040:0018h bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Naciśnięto klawisz Ins. bit 6 Naciśnięto klawisz Caps Lock. bit 5 Naciśnięto klawisz Num Lock. bit 4 Naciśnięto klawisz Scroll Lock. bit 3 Aktywny jest tryb Pause. bit 2 Naciśnięto klawisz SysReq. bit 1 Naciśnięto lewy klawisz Alt. bit 0 Naciśnięto lewy klawisz Ctrl. Powyższe dwa bajty opisują stan klawiatur XT i AT. Jednoznaczne opisanie stanu rozszerzonej klawiatury PS/2 wymagało wprowadzenia dwóch dodatkowych bajtów informacyjnych. Znajdują one swoje miejsce pod adresami 0040h:0096h i 0040h:0097h. Bajt 0040:009611 bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Trwa odczyt kodu identyfikacyjnego. bit 6 Ostatnim odebranym znakiem był kod identyfikacyjny. bit 5 Przy odczycie kodu identyfikacyjnego i kodu rozszerzonego należy włączyć tryb Num Lock. bit 4 W systemie obecna jest klawiatura PS/2. bit 3 Naciśnięto prawy klawisz Alt. bit 2 Naciśnięto prawy klawisz Ctrl. bit 1 Ostatnio odebranym znakiem był przedrostek E0h. bit O Ostatnio odebranym znakiem był przedrostek E1h. Bajt 0040:0097h bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; hit 7 Błąd danych. hit 6 Trwa aktualizacja stanu diod świecących. hit 5 Wysłano znak potwierdzenia (ang. ACK - acknowledge) do klawiatury. hit 4 Odehrano znak potwierdzenia ACK z klawiatury, bit 3 Zarezerwowany. hit 2 Stan sygnalizatora LED trybu Caps Lock: 0 - wyłączony, 1 - załączony. bit 1 Stan sygnalizatora LED trybu Num Lock: 0 - wyłączony, 1 - załączony. bit 0 Stan sygnalizatora LED trybu Scroll Lock: 0 - wyłączony, 1 - załączony. Funkcje przerwania 16h BIOS Nic nie stoi na przeszkodzie, aby operować bezpośrednio na buforze klawiatury lub danych z obszaru danych BIOS. Opisane w tym rozdziale funkcje przerwania 16h BIOS-u nie są być może tak szybkie i uniwersalne, gwarantują za to bezpieczeństwo obsługi. W przypadku odebrania kodu klawisza funkcyjnego (np. F2), klawisza sterowania kur-sorem lub innego klawisza specjalnego, funkcje BIOS w polu przeznaczonym na kod ASCII zwracają wartość 0. Funkcje lOh, l l h i 12h, ukierunkowane specjalnie na obsługę klawiatur PS/2, zostały wprowadzone dopiero pod koniec roku 1985 i we wcześniejszych odmianach BIOS-u nie występują. Funkcja 00h Działanie: Funkcja 00h odczytuje kolejny znak z bufora i aktualizuje wskaźnik odczytu. Parametry wejściowe: AH 00h. Wartości zwracane: AH kod klawisza; AL kod ASCII. Przykład: ;naciśnięto klawisz C mov ah,00h ; ;numer funkcji int 16h ; ;wywołaj BIOS ; ;wynik: AH=47 (kod klawisza), ; ;AL=99 (kod ASCII znaku "c") Proszę zauważyć, że zwracany kod ASCII odpowiada małej literze „c'\ chociaż naciśnięto klawisz opisany dużym „C". Dopiero sterownik klawiatury (program obsługi przerwania 09h) uwzględnia stan klawisza Shift i stosownie do tego modyfikuje przekazywane dalej kody ASCII. Przykład: ;naciśnięto klawisz w bloku numerycznym mov ah,00h ; ;numer funkcji int 16h ; ;wywołaj BIOS ;wynik: AH=28 (kod klawisza), AL=0 Do tego samego wyniku prowadziłoby naciśnięcie ,,starego'1 klawisza Return w części alfanumerycznej klawiatury. Funkcja OOh, jak widać, nie pozwala wyróżnić nowych klawiszy klawiatury PS/2. Możliwości takie oferuje dopiero funkcja lOh. Funkcja 01h Działanie: Funkcja ta bada stan bufora klawiatury w celu stwierdzenia, czy jest tam znak do odczytu. Wskaźnik odczytu nie jest przy tym aktualizowany. Obecność znaku w buforze klawiatury sygnalizowana jest wyzerowaniem bitu ZF (Zero) rejestru stanu procesora. Parametry wejściowe: AH 01h. Wartości zwracane: AH kod klawisza; AL kod ASCII; ZF 0 = w buforze klawiatury znajduje się znak; 1 = w buforze brak znaku. Funkcja 02h Działanie: Funkcja ta podaje stan klawiszy specjalnych w oparciu o informacje zawarte w bajcie o adresie 0040:0017h. Parametry wejściowe: AH 02h. Wartości zwracane: AL bajt informacyjny o następującej strukturze: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 aktywny jest tryb Insert, bit 6 aktywny jest tryb Caps Lock, bit 5 aktywny jest tryb Num Lock, bit 4 aktywny jest tryb Scroll Lock, bit 3 naciśnięto klawisz Alt (lewy lub prawy), bit 2 naciśnięto klawisz Ctrl (lewy lub prawy), bit 1 naciśnięto lewy klawisz Shift, bit 0 naciśnięto prawy klawisz Shift. Funkcja 03h Działanie: Funkcja ta programuje opóźnienie i częstotliwość powtarzania znaków. Obsługuje ona klawiatury PS/2 i niektóre AT. Parametry wejściowe: AH 03h; BL prędkość autorepetycji klawiatury, w znakach na sekundę: 00h=30 01h=26,7 02h=24 03h=21,8 04h=20 05h=18,5 06h=17,1 07h=16 08h=15 09h=13,3 0Ah=12 0Bh=10,9 0Ch=10 0Dh=9,2 0Eh=8,5 0Fh-8 10h=7,5 1lh=6,7 12h=6 13h=5,5 14h=5 15h=4,6 16h=4,3 17h=4 18h=3,7 19h=3,3 1Ah=3 1Bh=2,7 1Ch=2,5 1Dh=2,3 1Eh-2,1 1Fh = 2 BH opóźnienie zadziałania autorepetycji, w milisekundach: 00 = 250; 01 -500; 10 = 750; 11 = 1000. Funkcja 05h Działanie: Funkcja ta symuluje naciśnięcie klawisza, wpisując określone wartości kodów do bufora klawiatury. Parametry wejściowe: AH 05h. Wartości zwracane: AL 00h = funkcja wykonana prawidłowo; 01h = wykonanie funkcji niemożliwe ze względu na zapełnienie bufora; CH kod klawisza; CL kod ASCII. Uwaga: Funkcje 03h i 05h nie są zaimplementowane w starszych wersjach BIOS-u. Funkcja 10h Działanie: Funkcja 10h odczytuje znak odebrany z klawiatury PS/2. Dla klawiatury XT i AT funkcja ta działa tak samo jak funkcja 01h. Klawisze dodatkowe klawiatury PS/2 zwracają w rejestrze AL zamiast 00h przedrostek E0h. Parametry wejściowe: AH 10h. Wartości zwracane: AH kod klawisza; AL kod ASCII. Funkcja 11h Działanie: Funkcja ta bada stan bufora klawiatury PS/2 w celu stwierdzenia, czy znajduje się w nim tam znak do odczytania. Wskaźnik odczytu nie jest przy tym aktualizowany. Dla klawiatury XT i AT funkcja działa tak samo jak funkcja 00h. Klawisze dodatkowe klawiatury PS/2 zwracają w rejestrze AL zamiast OOh przedrostek EOh, zaś znacznik ZF rejestru stanu procesora zawiera informację o dostępności znaku. Parametry wejściowe: AH 11h. Wartości zwracane: AH kod klawisza; AL kod ASCII; ZF 0 = w buforze klawiatury znajduje się znak; 1 = w buforze brak znaku. Funkcja 12h Działanie: Funkcja ta określa stan klawiszy dodatkowych klawiatury PS/2 w oparciu o stan bajtów zlokalizowanych pod adresami 0040h:0017h i 0040h:0018h obszaru danych BIOS. Odpowiada ona funkcji 02h poszerzonej o informacje dodatkowe. Parametry wejściowe: AH 12h. Wartości zwracane: AH bajt statusu klawiszy specjalnych o następującej strukturze: bit 7 naciśnięto klawisz SysReq, bit 6 naciśnięto klawisz Caps Lock, bit 5 naciśnięto lewy klawisz N urn Lock, bit 4 naciśnięto prawy klawisz Scroll Lock, bit 3 naciśnięto prawy klawisz Alt, bit 2 naciśnięto prawy klawisz Ctrl, bit 1 naciśnięto lewy klawisz Alt, bit 0 naciśnięto lewy klawisz Ctrl. Oto struktura rejestru stanu (port 64h): bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Błąd parzystości ramki (tylko w modelach PS/2): 0 - ostatni kod przesłano bez błędu, 1 - ostatni kod przesłano z błędem. bit 6 Czas oczekiwania na nadesłanie danych: 0- OK., 1 - przekroczony. bit 5 Stan bufora wyjściowego klawiatury: 0 - bufor zawiera dane od klawiatury, 1 - bufor zawiera dane od jednostki dodatkowej (tylko w PS/2). bit 4 Stan blokady klawiatury: 0 - zamknięta (klawiatura zablokowana), 1 - otwarta. bit 3 Zawartość przesyłanego bajtu: 0 - bajt danych wysłany przez port 60h, 1 - bajt rozkazowy wysłany przez port 64h. bit 2 Wynik autotestu klawiatury: 0 - błąd, 1 - test bezbłędny. bit l Stan bufora wejściowego: 0 - bufor jest pusty, 1 - dane przesłane przez procesor znaj dują się jeszcze w buforze. bit 0 Stan bufora wyjściowego: 0 - bufor jest pusty, 1 - dane przesłane przez kontroler klawiatury znajdują się jeszcze w buforze. Jednostką dodatkową w systemie PS/2 jest najczęściej myszka, która w odróżnieniu od modeli XT i AT obsługiwana jest przez kontroler klawiatury. Pobranie bajtu danych z bufora wyjściowego (60h) zeruje automatycznie bit 5 lub 0 rejestru stanu (zależnie od tego, skąd bajt ten pochodził). Zanim odczytamy bufor wyjściowy rozkazem in al,60h, najpierw należy się upewnić (badając stan bitów 0 i 5 rejestru stanu), czy oczekiwany bajt znajduje się już w buforze. Czas oczekiwania na odpowiedź w przypadku niektórych rozkazów (np. autotestu klawiatury) może być dosyć długi. Klawiatura nie może rozpocząć przesyłania następnego bajtu zanim poprzedni bajt nie zostanie odebrany przez procesor z bufora wyjściowego. Transmisja w odwrotnym kierunku, tj. od CPU do kontrolera, polega na wpisaniu rozkazem out bajtu do portu bufora wejściowego (60h). Zanim to nastąpi, należy sprawdzić stan bitu l rejestru stanu kontrolera. Bit wyzerowany oznacza gotowość rejestru do przyjęcia danych, natomiast ustawiony - sygnalizuje konieczność oczekiwania na zwolnienie rejestru. Bit 3 określa, czy ostatnio wysłany przez CPU bajt zawierał rozkaz (wysyłany przez port 64h), czy dane (wysyłane przez port 60h). Pod adresem 64h znajduje się nie tylko przeznaczony wyłącznie do odczytywania rejestr stanu, lecz również rejestr sterujący, który przyjmuje rozkazy dla kontrolera klawiatury. W tabeli 14.1 zebrano listę ważniejszych rozkazów. Podane zestawienie nie obejmuje „egzotycznych" rozkazów kontrolera 8042 (np. grupy rozkazów A4h - A6h, związanych z instalacją hasła). Programowanie układu 8042 jest obszernym i dość złożonym zagadnieniem, wykraczającym poza ramy tego rozdziału. Nie będzie ono tu szerzej omawiane. Przykład: et_1: in al,64h test al,02h ; testuj bit 1 rejestru stanu kontrolera jnz et_1 ; bufor wejściowy zajęty mov al 0adh ; rozkaz blokady klawiatury out 64h,al ; ...w tym fragmencie programu klawiatura jest zablokowana et_2: in al,64h test al,02h ; testuj bit 1 rejestru stanu kontrolera jnz et_2 ; bufor wejściowy zajęty mov al,0aeh ; rozkaz odblokowania klawiatury out 64h,al Rozkazy przekazywane są przez rejestr sterujący 64h. Niektóre z nich anonsują następujący po sobie bajt danych. Bajt ten transmitowany jest jednak poprzez bufor wejściowy o adresie 60h, przy czym przed zapisaniem bufora należy sprawdzić jego gotowość do przyjęcia danych (testując bit l rejestru stanu). Przykład: mov al,0d1h out 64h,al ; rozkaz zapisu do portu wyjściowego Tabela 14.1. Rozkazy kontrolera klawiatury Kod rozkazu; Znaczenie A7h; Odłącza jednostkę dodatkową (tylko PS/2). A8h; Uaktywnia jednostkę dodatkową (tylko PS/2). A9h; Kontroluje łącze jednostki dodatkowej (tylko PS/2) i zwraca w buforze wyjściowym (poit 60h) następujące wyniki: 00h - wynik kontroli pozytywny, 01h - sygnał zegarowy stale na niskim poziomie logicznym, 02h - sygnał zegarowy stale na wysokim poziomie logicznym, 03h - linia danych stale na niskim poziomie logicznym, 04h - linia danych stale na wysokim poziomie logicznym, FFh - brak jednostki dodatkowej. AAh; Klawiatura przeprowadza obszerny test swoich układów i zwraca w buforze wyjściowym (port 60h) bajt o wartości 55h w przypadku pomyślnego zakończenia. ABh; Kontroler przeprowadza test łącza klawiatury i zwraca w buforze wyjściowym (port 60h) bajt o znaczeniu takim samym jak dla rozkazu A9h, z wyjątkiem wartości FFh, odpowiadającej błędnemu działaniu łącza. ADh; Blokuje klawiaturę. AEh; Odblokowuje klawiaturę. C0h; Umieszcza zawartość portu wejściowego w buforze wyjściowym (port 60h). C1h; Czyta bity 3-0 portu wejściowego i przenosi je na pozycje 7-4 rejestru stanu (port 64h). Operacja ta powtarzana jest tak długo, aż bit 1 rejestru stanu zostanie ustawiony. C2h; Czyta bity 7-4 portu wejściowego i przenosi je na pozycje 7-4 rejestru stanu (port 64h). Operacja ta powtarzana jest tak długo, aż bit 1 rejestru stanu zostanie ustawiony. D0h; Umieszcza zawartość portu wyjściowego w buforze wyjściowym (port 60h). D1h; Zapisuje następujący po sobie bajt danych do portu wyjściowego. D2h; Zapisuje następujący po sobie bajt danych do bufora wyjściowego i zeruje bit 5 (bajt przeznaczony dla klawiatury) rejestru stanu (port 64h). D3h; Zapisuje następujący po sobie bajt danych do bufora wyjściowego i ustawia bit 5 (bajt przeznaczony dla jednostki dodatkowej) rejestru stanu (port 64h). czekaj : in al, 64h test al,02h ; czy bufor wejściowy wolny? j nz czekaj mov al , Olh out 60h,al ; wyślij bajt Olh do portu wyjściowego Bufor wejściowy (port 60h) przyjmuje również bezpośrednie rozkazy dla klawiatury. Po każdym z nich (z wyjątkiem rozkazów Echo i Resef) klawiatura wysyła bajt potwierdzenia (ACK) równy FAh. Jest on jednak ignorowany przez procedurę obsługi przerwania 09h, która zajmuje się wyłącznie kodami z przedziału O - 127. Niektóre z rozkazów mają sens wyłącznie w odniesieniu do modeli PS/2. Oto lista dostępnych rozkazów. Rozkaz EDh - sterowanie diodami świecącymi Klawiatura reaguje na ten rozkaz wysłaniem sygnału potwierdzenia ACK. Proces analizy matrycy X-Y zostaje wstrzymany i klawiatura przechodzi w stan oczekiwania na bajt definiujący stan diod LED, podawany również przez bufor wejściowy (60h). Bajt ten opisany jest poniżej: 0; 0; 0; 0; 0; bit 2; bit 1; bit 0 bity 7-3 Zawsze 0. bit 2 Stan diody Caps Lock: 0 - zgaszona, 1 - zapalona. bit 1 Stan diody Num Lock: 0 - zgaszona, 1 - zapalona. bit 0 Stan diody Scroll Lock: 0 - zgaszona, 1 - zapalona. Przykład: mov al0edh out 60h,al ; kod rozkazu zapalenia diod LED czekaj: in al,64h ; rejestr stanu test al,02h ; czy bufor wejściowy wolny? jnz czekaj mov al,07h out 60h,al ; zapal wszystkie diody Rozkaz EEh - Echo Klawiatura odpowiada na ten rozkaz odesłaniem z powrotem tego samego bajtu EEh. Daje to możliwość prostego sprawdzenia połączeń klawiatura-kontroler. Rozkaz F0h - wybór zestawu kodów klawiszy Klawiatura PS/2 dysponuje trzema zestawami kodów klawiszy, oznaczonych numerami 01, 02 i 03. Standardowo używanym zestawem jest 02. Po odebraniu rozkazu FOli klawiatura wysyła sygnał ACK i oczekuje na bajt danych. Jeżeli jest nim numer zestawu (01 h, 02h lub 03h), to nastąpi przełączenie, a jeżeli OOh - klawiatura odpowiada numerem aktualnego zestawu. Rozkaz F2h - identyfikacja klawiatury (ID) Rozkaz ten służy rozpoznawaniu typu podłączonej klawiatury. Model AT odpowiada samym sygnałem ACK, natomiast typ PS/2 wysyła sekwencję ACK, ABh, 41 h. Klawiatura XT nie jest w stanie przyjąć tego (ani żadnego innego) rozkazu, toteż wystąpi jedynie błąd przekroczenia limitu czasu przeznaczonego na odpowiedź (time-out). Rozkaz F3h - opóźnienie i prędkość autorepetycji Rozkaz ten umożliwia programowanie czasu opóźnienia i prędkości powtarzania znaków. Klawiatura potwierdza przyjęcie rozkazu wysłaniem sygnału ACK i oczekuje na bajt definiujący wyżej wspomniane parametry. Postać tego bajtu opisano poniżej. 0; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Zawsze 0. bity 6-5 Opóźnienie zadziałania autorepetycji, w milisekundach: 00- 250, 01 - 500, 10- 750, 11-1 000. bity 4-0 Częstotliwość autorepetycji klawiatury, w znakach na sekundę: 00h=30 01h=26,7 02h=24 03h=21,8 04h=20 05h=18,5 06h=17,1 07h=16 08h=15 09h=13,3 0Ah=12 0Bh=10,9 0Ch=10 0Dh=9,2 0Eh=8,5 0Fh-8 10h=7,5 1lh=6,7 12h=6 13h=5,5 14h=5 15h=4,6 16h=4,3 17h=4 18h=3,7 19h=3,3 1Ah=3 1Bh=2,7 1Ch=2,5 1Dh=2,3 1Eh-2,1 1Fh = 2 Rozkaz F4h - odblokowanie klawiatury Rozkaz F4h odblokowuje klawiaturę zablokowaną rozkazem F5h. Rozkaz F5h Przywrócenie standardowych parametrów klawiatury i zablokowanie czytania matrycy klawiszy. Rozkaz F6h Przywrócenie standardowych parametrów klawiatury i odblokowanie czytania matrycy klawiszy. Rozkaz FEh - żądanie powtórzenia transmisji W przypadku wystąpienia błędu transmisji rozkazem tym można zażądać powtórzenia ostatnio wysłanego przez klawiaturę kodu. Rozkaz FFh - diagnostyka klawiatury Rozkaz ten powoduje uruchomienie procedury BAT (ang. Basic Assiirance Test), diagnozującej wewnętrzne układy klawiatury. Potwierdzeniem otrzymania rozkazu jest sygnał ACK, a wynikiem testu może być AAh (wynik poprawny) albo FCh (błąd). Klawiatura, do której nie wysłano żadnego rozkazu, zwraca w normalnych warunkach wyłącznie sekwencje kodów naciśnięcia i zwolnienia, stosownie do naciskanych i zwalnianych przez użytkownika klawiszy. Kody te mieszczą się w przedziale 01h - 58h. W klawiaturze zainstalowana jest zwykle mała pamięć buforowa, mogąca pomieścić około 20 bajtów. W zależności od tego, jaki klawisz został naciśnięty, bufor ten może zmieścić mniej lub więcej naciśnięć. „Zwykły" znak generuje bowiem dwa bajty kodu (kod naciśnięcia i zwolnienia), ale są i klawisze wysyłające wielobajtowe sekwencje. Przepełnienie wewnętrznego bufora klawiatury sygnalizowane jest przesłaniem do kontrolera bajtu o wartości 00h. Każdy inny błąd stwierdzony przez wewnętrzne układy sterujące powoduje wysłanie wartości FFh. Reasumując, klawiatura może więc zwracać kody zebrane w tabeli 14.2. Przedstawiony poniżej krótki program w języku Turbo C pozwala obserwować pełne sekwencje kodów wytwarzane przez klawiaturę. Zamaskowanie przerwania IRQ1 uniemożliwia przekazanie sterowania do procedury obsługi przerwania 09h. Aby zakończyć wykonywanie programu, należy nacisnąć klawisz Esc. #include #include #define IRQ1_OFF outp(0x21,0x02) #define IRQ1_ON outp(0x21,0x00) Tabela 14.2. Kody generowane prze: klawiaturę Kod; Znaczenie 00h; przepełnienie wewnętrznego bufora klawiatury AAh; pozytywny wynik BAT (po rozkazie FFh) FCh; negatywny wynik BAT EEh; Echo (po rozkazie Echo) FAh; potwierdzenie (ACK) 41h+ABh; kod identyfikacji (ID) klawiatury PS/2 (po rozkazie F2h) 01h-58h; kody naciśnięcia i zwolnienia klawiszy FFh; błąd void buf_wyj(void); void main(void) { unsigned char scan_code; IRQ1_OFF; /* zablokuj przerwania */ do { buf_wyj(); /* czekaj */ scan_code=inp(0x60); /* pobierz kod */ printf(„\t%d",scan_code); /* wypisz go */ } while(scan_code!=0x01); /* naciśnięto Esc */ IRQ1_ON; /* odblokuj przerwania */ } void buf_wyj(void) { unsigned char rej_stanu; do rej_stanu=inp(0x64); /* czekaj aż bufor pusty */ while((rej_stanu & 0x01)1=0x01); } Port wejściowy i port wyjściowy Widoczne na rysunku 14.10. dwa porty, chociaż należą do kontrolera klawiatury, sterują również pracą innych elementów PC. Dostęp do wspomnianych portów możliwy jest jednak wyłącznie przez rejestry kontrolera klawiatury. Port wejściowy Odczyt portu wejściowego umożliwia rozkaz COh wysłany poprzez rejestr sterujący 64h. Zawartość tego portu zostaje wówczas przeniesiona przez kontroler do bufora wyjściowego (port 60h), skąd może być pobrana przez procesor rozkazem in. Znaczenie bitów portu wejściowego podano poniżej: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Blokada klawiatury: 0 - klawiatura zablokowana, 1- klawiatura odblokowana. bit 6 Zainstalowana w systemie karta sterownika monitora: 0 - kolorowa, 1 - monochromatyczna (MDA). bit 5 Obecność przełącznika konfigurującego: 0 - zainstalowany: 1- nie zainstalowany. bit 4 Dostęp do drugiego banku 256 kB RAM płyty głównej: 0 - zabroniony, - dozwolony. bity 3-2 Zarezerwowane. bit 1 Stan linii danych wejściowych od jednostki dodatkowej (tylko PS/2). bit 0 Stan linii danych wejściowych od klawiatury. Bit 6 odzwierciedla położenie przełącznika konfiguracyjnego rodzaju karty graficznej, umieszczonego na płycie głównej. Nowsze modele są tego przełącznika pozbawione, a konfiguracja odbywa się wyłącznie poprzez program Setup. Stan bitu 6 odpowiada wówczas stosownemu zapisowi w pamięci CMOS-RAM. Port wyjściowy Port wyjściowy umożliwia dostęp dwukierunkowy. Odczytu portu dokonuje się przesyłając rozkaz DOh, a zapisu - rozkazem D l h. Oba rozkazy podawane są poprzez rejestr sterujący (port 64h) kontrolera. Oto znaczenie bitów portu wyjściowego: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Dane wyjściowe dla klawiatury. bit 6 Stan linii synchronizacji (zegara) łącza szeregowego klawiatury. bit 5 Opróżnienie bufora wejściowego jednostki dodatkowej (tylko PS/2). bit 4 Przepełnienie bufora wyjściowego klawiatury. bit 3 Stan linii synchronizacji (zegara) łącza szeregowego jednostki dodatkowej (tylko PS/2). bit 2 Dane wyjściowe do jednostki dodatkowej. bit 1 Stan sygnału GATE A20: 0 - bramka zamknięta (adresy A0 - A19), 1- bramka otwarta (linia A20 aktywna). bit 0 Połączony z linią RESET CPU. Stan wysoki wymusza restart procesora. Oprócz funkcji sterowania liniami danych i zegarowymi łącz klawiatury i myszki (w PS/2), port wyjściowy odpowiedzialny jest za stan tzw. bramki A20 (GATE A20). Jak wiadomo, procesory 8088/86 obejmują swymi liniami adresowymi AO - A19 przestrzeń adresową l MB. Programy używają adresów logicznych, na które składają się adres segmentu - segment - i położenie (przemieszczenie) w segmencie - offset. Obie te składowe przechowywane są w rejestrach 16-bitowych. Procesor, sięgając do komórki pamięci, przetwarza adresy logiczne na fizyczne adresy 20-bitowe, dodając do siebie wartość przemieszczenia w segmencie do pomnożonego przez 16 numeru segmentu. Na magistralę adresową musi być bowiem zawsze wystawiony pełny adres 20-bitowy. Adres fizyczny generowany jest więc według wzoru. adres fizyczny = 16 x adres segmentu + offset Ponieważ poruszamy się w dziedzinie liczb binarnych, mnożenie przez 16 równoważne jest przesunięciu w lewo o cztery pozycje bitowe. Rozważmy sytuację, gdy oba adresy składowe (segment i przemieszczenie) przyjmują wartości maksymalne, tj. FFFFh. 0FFFF0h (segment x 16) +00FFFFh (przemieszczenie) ---------------------------- 10FFEFh = 1 MB + 64 kB Zauważmy, że najbardziej znaczący bit wyniku znajduje się na pozycji odpowiadającej 21 linii adresowej (A20). Procesor 8088/86 ignoruje ten bit, ponieważ nie posiada takiej końcówki. Adresowany obszar znajduje się więc fizycznie w najniższym segmencie pamięci (w pierwszych 64 kB). Inaczej postępuje w tej sytuacji procesor 80286, posiadający 24 linie adresowe. Może on bez trudu położyć na szynie adresowej otrzymany w powyższym przykładzie wynik. Widać więc, że nawet w trybie rzeczywistym można w tym przypadku nieznacznie przekroczyć barierę 1 MB. Obszar pamięci, o którym mowa, nazywany jest też często HMA (ang. High Memory Ared). Procesory 80286 pracujące w trybie chronionym (pro-tected modę) używają oczywiście wszystkich swoich linii adresowych, co pozwala im objąć 16 MB pamięci. Nie można pogodzić tych trzech różnych sytuacji w ramach tego samego układu. Aby obejść ten problem nie pozbawiając się możliwości wykorzystania problematycznych 64 kB pamięci w trybie rzeczywistym, wprowadzono sprzętowy mechanizm odcinający linię A20, nazywany właśnie GATE A20. Bit 0 rejestru wyjściowego kontrolera 8042 służy realizacji funkcji powrotu procesora 80286 do trybu rzeczywistego. Ten typ procesora nie posiada programowej możliwości takiego przejścia; operacja odbywa się na drodze ściśle sprzętowej poprzez restart (reset) procesora. Ustawienie bitu O wymusza ten właśnie proces. Sterowanie zostaje przekazane do tego samego punktu BIOS-u, skąd rozpoczyna się zwykłe uruchamianie systemu. Procedury inicjalizujące sprawdzają jednak na wstępie, badając stan rejestru F pamięci CMOS-RAM, czy chodzi o ponowne uruchomienie systemu, czy też zwykły powrót procesora do trybu rzeczywistego. W tym drugim przypadku następuje podjęcie wykonywania programu, który wywołał restart procesora. Do najbardziej znanych programów korzystających z tej funkcji należą himem.sys i ramdrive.sys, robiące użytek z pamięci powyżej 1 MB. Przykład: mov al,0d0h out 64h,al ;rozkaz odczytu portu wyjściowego czekaj: in al,64h ;rejestr stanu test al,01h ;czy bufor wyjściowy wolny? jz czekaj in al,60h ;pobierz stan portu wyjściowego or al,02h ;otwarcie bramki A20 mov ah,al ;przechowaj AH mov al,0d1h out 64h,al ;rozkaz zapisu do portu wyjściowego mov al,ah ;odtwórz AL out 60h,al ;bajt danych anonsowany w rozkazie Dlh * * * Rozdział 15. Pozostałe urządzenia wejścia Na zakończenie omówione zostaną jeszcze dwa urządzenia wejściowe, które Ś chociaż niezdolne zastąpić klawiaturę Ś są wykorzystywane przez użytkowników. Mowa tu o myszce i manipulatorze, zwanym popularnie joystickiem. Urządzenia te dołączane są na ogół do gniazd wielofunkcyjnej karty Multi I/O, zawierającej porty szeregowe (wykorzystywane przez myszkę) i gamę port, będący w istocie prostym przetwornikiem analogowo-cyfrowym. Myszka i jej obsługa Chociaż klawiatura w dalszym ciągu jest podstawowym narzędziem do wprowadzania danych tekstowych i liczbowych, pojawienie się na rynku nowej klasy oprogramowania Ś programów sterowanych z poziomu menu (ang. memi-driven software) Ś dało szansę innemu urządzeniu wejścia Ś myszce. Pozwala ona na sterowanie komputerem praktycznie bez użycia klawiatury, a w wielu środowiskach programowych (np. Windows) jest wręcz warunkiem koniecznym. Myszka przekazuje ruch ręki do komputera, służąc zwykle do sterowania widocznym na ekranie kursorem i uruchamiania wskazywanych przezeń funkcji. Filozofia ta wykorzystywana jest obecnie w każdym „szanującym się" programie i radykalnie upraszcza obsługę komputera. Myszka komunikuje się z komputerem za pomocą portu szeregowego. Znane są co prawda myszki współpracujące z kartą dedykowaną do ich obsługi (jest to rozwiązanie archaiczne), ewentualnie z kartami sterowników graficznych (rozwiązanie firmy ATI), jednak przeważająca większość „zwierzątek" używa portu szeregowego. Starsze wersje korzystały dodatkowo z przewodu klawiatury, ale wyłącznie dla zasilania swoich układów elektronicznych. Obecnie technologia CMOS pozwala na zastosowanie układów pobierających tak małą moc, że możliwe jest zasilanie myszki z wyjść portu szeregowego (napięciami ±12 V). Konstrukcja znakomitej większości myszek oparta jest o kulkę wprawianą w ruch poprzez przesuwanie całej myszki po stole (a właściwie po specjalnym „wybiegu" Ś równej, lekko chropowatej podkładce, tzw. mcntse pad). Kulka z kolei wprawia w ruch dwie tarcze z otworami, które wraz z układami diod świe-cących i fotoelementów tworzą optomechaniczny przetwornik ruchu na impulsy elektryczne. Każda z tarcz odpowiada za jeden z kierunków: lewo-prawo i góra-dół. Dzięki zastosowaniu dwóch zespołów: dioda świecąca-fotoelement dla każdej tarczy, poza wykryciem ruchu tarczy można również określić kierunek jej obrotów. Tarcza, jak już wyżej wspomniano, ma szereg otworów na obwodzie, które podczas obrotu zasłaniają i odsłaniają światło z diody świecącej padające na fotoelement. Powoduje to generowanie ciągu impulsów elektrycznych o długości zależnej od przesunięcia myszki. Za dekodowanie impulsów z czterech fotoelementów odpowiedzialny jest mikrokontro-ler, którym zwykle jest układ Intel 80C48. Przetwarza on uprzednio wzmocnione sygnały z fotoelementów na postać cyfrową, którą następnie przesyła do komputera poprzez port szeregowy. Wykorzystywana jest wyłącznie linia danych tego portu, a pozostałe połączenia służąjedynie do zasilania układów myszki. Poza układem przeniesienia ruchu ręki myszka posiada jeszcze dwa lub trzy przyciski, którym zwykle przyporządkowana jest funkcja „klawiaturowa" (lewy przycisk odpowiada najczęściej klawiszowi Enter, zaś prawy Ś klawiszowi Esc). Obsługa programowa większości myszek jest podobna. Możliwe jest wykorzystanie standardowego sterownika myszki (ang. driver}, dostarczanego wraz z systemem operacyjnym. Rozróżnia się zasadniczo dwa podstawowe standardy myszek: pierwszy nosi nazwę Mouse Systems Mouse (myszka trójklawiszowa), zaś drugi Microsoft Mouse (myszka dwuklawiszowa); jest on zgodny, jak sama nazwa wskazuje, z założeniami firmy Microsoft. Istniejąjeszcze rozwiązania niezgodne z powyższymi standardami, ale są one coraz rzadziej stosowane. Należy tu jeszcze oddać honor szwajcarskiej firmie Logitech, która jest jednym z większych producentów myszy. Są one w zasadzie zgodne ze standardem Microsoft Mouse, aczkolwiek zgodność ta nie jest pełna. Do obsługi myszki należy raczej stosować programy dostarczane razem z nią, ewentualnie zgodne z jej standardem. Niemniej jednak, niezależnie od samego sprzętu i sposobu porozumiewania się myszki z „pracującym dla niej" sterownikiem, sposób jej obsługi programowej jest identyczny (sterownik myszki pełni rolę taką jak BIOS Ś pośredniczy pomiędzy różnymi rozwiązaniami sprzętowymi a programami). Ponieważ większość myszek komunikuje się ze sterownikiem w taki sam sposób, może być obsługiwana przez taki sam sterownik. Większość z nich może również pracować w obu standardach. Przykładowo, MS Windows 3.1x podczas instalacji pyta o typ zainstalowanej myszki, umożliwiając wybór rodzaju myszki: rzadko spotykanych Hewlett Packard i Olivetti oraz Microsoft, Logitech, Mouse Systems i Genius Mouse. Ten ostatni typ jest zasadniczo zgodny z Mouse Systems Mouse, ale płynność i dynamika ruchu jest lepiej dopasowana dla myszy danego producenta. Możliwe jest oczywiście zainstalowanie innego (dostarczanego wraz z myszką) sterownika, a także, co jednak nie jest zalecane, pominięcie instalacji myszki. Programowa obsługa myszki odbywa się poprzez przerwanie 33h (Mouse Suppoii). Warunkiem działania tego przerwania jest oczywiście załadowanie sterownika myszki. W tabeli 15.1 zebrano listę funkcji przerwania 33h. Tabela 15.1. Spis funkcji przerwania 33h (obsługi myszki) Funkcja; Opis 00h; inicjalizacja myszki i sprawdzenie obecności jej sterownika 01h; wyświetlenie kursora myszki 02h; ukrycie kursora myszki 03h; określenie pozycji i stanu przycisków myszki 04h; przesunięcie kursora 05h; określenie liczby naciśnięć przycisków 06h; określenie liczby zwolnień przycisków 07h; ustawienie zasięgu poziomego 08h; ustawienie zasięgu pionowego 09h; zdefiniowanie kształtu kursora graficznego myszki 0Ah; zdefiniowanie maski kursora tekstowego myszki 0Bh; określenie odległości ostatniego przesunięcia 0Ch; instalacja filtru zdarzeń (ang. event handler) generowanych przez myszkę 0Dh; włączenie emulacji pióra świetlnego 0Eh; wyłączenie emulacji pióra świetlnego OFh; ustawienie prędkości ruchu kursora 10h; ustawienie granic obszaru ukrycia myszki I3h; ustawienie maksymalnej prędkości ruchu kursora 14h; zamiana filtru zdarzeń 15h; określenie rozmiaru bufora statusu myszki 16h; zapamiętanie statusu myszki 17h; odtworzenie statusu myszki 18h; instalacja dodatkowego filtru zdarzeń (zob. funkcja OCh) 19h; określenie adresu dodatkowego filtru zdarzeń 1Ah; ustawienie czułości myszki 1Bh; pobranie czułości myszki 1ICh; ustawienie częstotliwości przerwań pochodzących od myszki (funkcja ta stosuje się jedynie do myszek standardu Inport) 1Dh; ustawienie wyświetlanej strony pamięci obrazu (zawierającej kursor myszki) 1Eh; pobranie numeru strony pamięci obrazu zawierającej kursor myszki 1Fh; zablokowanie sterownika myszki 20h; włączenie sterownika myszki 21h; inicjalizacja sterownika myszki 22h; określenie numeru wersji sterownika myszki i numeru przerwania (IRQ) Na kolejnych stronach zostaną omówione ważniejsze funkcje przerwania 33h, umożliwiające realizację elementarnej obsługi myszki. Funkcja 00h Działanie: Funkcja ta zwraca informację o zainstalowaniu sterownika myszki i jej typie. Parametry wejściowe: AX 0000h. Wartości zwracane: AX obecność sterownika myszki: 0000h = nieobecny, FFFFh = zainstalowany; BX rodzaj myszki: FFFFh = dwuprzyciskowa, 0003h = trójprzyciskowa, 0000h - inna. Funkcja 01h Działanie: Funkcja wyświetla kursor myszki. Parametry wejściowe: AX 0001h. Wartości zwracane: Ś brak Ś Funkcja 02h Działanie: Funkcja ukrywa kursor myszki. Parametry wejściowe: AX 0002h. Wartości zwracane: Ś brak Ś Funkcja 03h Działanie: Funkcja ta zwraca informację o współrzędnych kursora myszki i stanie jej przycisków Parametry wejściowe: AX 0003h. Wartości zwracane: BL stan przycisków myszki: x; x; x; x; x; bit 2; bit 1; bit 0; bity 7-3 nie wykorzystane, bit 2 1 Ś naciśnięty środkowy przycisk, bit 1 naciśnięty prawy przycisk, bit O 1 Ś naciśnięty lewy przycisk; CX współrzędna X kursora myszki (0..639); DX współrzędna Y kursora myszki (0.. 199). Funkcja 04h Działanie: Funkcja ustala położenie kursora myszki. Parametry wejściowe: AX 0004h; CX współrzędna X kursora myszki (0 - 639); DX współrzędna Y kursora myszki (0 - 199). Wartości zwracane: Ś brak Ś Uwaga: Wartości współrzędnych zaokrąglane są do rozdzielczości znakowej. Funkcja 05h Działanie: Funkcja ta zwraca informację o naciśnięciu przycisków myszki. Parametry wejściowe: AX 0005H; BX kod przycisku: 0000h Ś lewy, 0001 h Śprawy, 0002h Ś środkowy. Wartości zwracane: AL bieżący stan przycisków: x; x; x; x; x; bit 2; bit 2; bil 2; bity 7-3 nie wykorzystane, bit 2 1 Ś naciśnięty środkowy przycisk, bit l 1 Ś naciśnięty prawy przycisk, bit 0 1 Ś naciśnięty lewy przycisk; BX liczba naciśnięć danego przycisku od ostatniego wywołania funkcji 05h; CX współrzędna X kursora myszki w chwili naciśnięcia danego przycisku; DX współrzędna Y kursora myszki w chwili naciśnięcia danego przycisku. Funkcja 06h Działanie: Funkcja ta zwraca informację o zwolnieniu przycisków myszki. Parametry wejściowe: AX 000óh; BX kod przycisku: 0000h Ś lewy, 0001h Ś prawy, 0002h Ś środkówy. Wartości zwracane: AL bieżący stan przycisków: x; x; x; x; x; bit 2; bit 1; bit 0; bity 7-3 nie wykorzystane, bit 2 1 Ś naciśnięty środkowy przycisk, bit 1 1 Ś naciśnięty prawy przycisk, bit 0 1 Ś naciśnięty lewy przycisk; BX liczba zwolnień danego przycisku od ostatniego wywołania funkcji 05h; CX współrzędna X kursora myszki w chwili zwolnienia danego przycisku; DX współrzędna Y kursora myszki w chwili zwolnienia danego przycisku. Funkcja 0Bh Działanie: Funkcja ta zwraca stan liczników położenia myszki. Parametry wejściowe: AX 000Bh; Wartości zwracane: CX liczba jednostek, o które przesunięto myszkę w poziomie od ostatniego wywołania funkcji 0Bh; DX liczba jednostek, o które przesunięto myszkę w pionie od ostatniego wywołania funkcji 0Bh. Uwaga: Jednostką (ang. mickey) jest najmniejsza odległość, na określenie której pozwala czułość myszki (zwykle 1/200 do 1/400 cala). Wartości zwracane w rejestrach CX i DX należy traktować jako liczby całkowite ze znakiem. Wartości dodatnie odpowiadają przesunięciu myszki w dół i w prawo. Jest to zaledwie skrótowy opis dostępnych funkcji obsługujących myszkę. Większość języków programowania dysponuje bibliotekami zawierającymi gotowe procedury obsługi myszki na znacznie wyższym poziomie. Gamę port Manipulator (joyslick}, podobnie jak myszka, przekazuje ruch dłoni (drążka) do komputera. Wykorzystywany jest przede wszystkim w grach i na tym w zasadzie kończy się jego zastosowanie praktyczne. Połączenie manipulatora z komputerem odbywa się poprzez tzw. gamę port. Zwykle jest on umieszczony na jednej karcie z portami szeregowymi i portem równoległym (karta Multi I/O). Gamę port obsługuje dwa niezależne manipulatory analogowe (A i B), dołączane doń przez tzw. „żeńskie" 15-stykowe gniazdo DB-15. Rozkład końcówek gniazda gamę portu przedstawia rysunek 15.1. Końcówki 2-7 złącza odpowiadają za pierwszy manipulator (A), zaś końcówki 10-14 Ś za drugi (B). Linie A1, A2, B1, B2 przekazują stan przycisków l i 2 manipulatora A i B, natomiast liniami AX, AY, BX i BY przekazywane są sygnały określające położenie drążka. Mechaniczne rozwiązania poszczególnych typów manipulatorów są różne, natomiast elektrycznie składają się one z czterech potencjometrów (dwa główne i dwa kalibrujące) oraz dwóch niezależnych przycisków. Każda para potencjometrów odpowiada za przekazanie położenia drążka w kierunku lewo-prawo (X) i góra-dół (Y). Potencjometry kalibracyjne służą do usytuowania kursora (ewentualnie ustawienia innej funkcji programu sterowanego przez manipulator) w położeniu neutralnym dla środkowego położenia drążka. Oczywiście konstrukcja mechaniczna manipulatora jest taka, by ruch drążka powodował zmianę rezystancji odpowiedniego potencjometru. Zespół potencjometr główny-potencjometr kałibracyjny jest włączony w obwód umieszczonego na karcie generatora monostabilnego (uniwibratora), zbudowanego w oparciu o popularny układ czasowy NE555. Dokładnie rzecz biorąc, karta zawiera zwykle jeden układ scalony NE556 (lub jego odpowiednik), zawierający cztery identyczne uniwibra-tory odpowiadające układowi 555. Do obsługi manipulatora przewidziano pott o adresie 201h. Znaczenie bitów tego portu jest następujące: bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0; bit 7 Stan drugiego wyłącznika manipulatora B (B2). bit 6 Stan pierwszego wyłącznika manipulatora B (B1). bit 5 Stan drugiego wyłącznika manipulatora A (A2). bit 4 Stan pierwszego wyłącznika manipulatora A (A1). bit 3 Stan wyjścia Y (BY) manipulatora B (góra-dół); bit 2 Stan wyjścia X (BX) manipulatora B (lewo-prawo); bit 1 Stan wyjścia Y (AY) manipulatora A (góra-dół); bit O Stan wyjścia X (AX) manipulatora A (lewo-prawo). Wartość 1 na jednym z bitów 7-4 oznacza rozwarcie (zwolnienie) przycisku. Jedynka na bicie 3-0 sygnalizuje pracę uniwibratora (tj. fazę trwania impulsu). Port 201 h służy zarówno do zapisu, jak i odczytu. Określenie położenia drążka odbywa się poprzez programowy pomiar czasu trwania impulsu generatora monostabilnego. Zapis do portu 0201 h dowolnej wartości powoduje wyzwolenie generatorów. Następnie mierzony jest czas utrzymywania się jedynki logicznej na wyjściach generatorów. Pomiar taki można wykonać przykładową pętlą programową: mov dx,0201h ; adres portu joysticka out dx,al ; uruchom uniwibratory xor ex,ex ; inicjalizuj licznik pętla: in al,dx ; odczytaj stan portu joysticka test al,01h ; sprawdź czy uniwibrator AX w fazie spoczynku loopnz pętla; nie - zliczaj dalej Stan rejestru CX po wyjściu z programu jest oczywiście zależny od szybkości procesora, trybu jego pracy, obsługiwanych w międzyczasie przerwań, odświeżania pamięci itp. Aby uniezależnić się od typu komputera i wyżej wymienionych „ zakłóceń", należałoby do odmierzania czasu użyć sprzętowego zegara czasu rzeczywistego. Określenie stanu wyłączników odbywa się poprzez odczytanie czterech bardziej znaczących bitów portu 0201 h. W BlOS-ie komputera AT pojawiła się funkcja przeznaczona specjalnie do obsługi manipulatora, upraszczająca znacznie odczyt jego stanu. Jest to funkcja 84h przerwania programowego 15h (tzw. A T Extended Services}. Funkcja ta pozwala na określenie położenia drążków i stanu wyłączników. Funkcja 84h posiada dwie podfunkcje, przekazywane przez rejestr DX. Funkcja 84h Działanie: Funkcja ta odczytuje stan manipulatora. Parametry wejściowe: DX kod podfunkcji: 0 = odczyt stanu wyłączników, 1 - odczyt położeń X i Y drążka. Wartości zwracane: dla podfunkcji 0: AL stan przycisków joysticków, jeśli DX = 0: bit 7; bit 6; bit 5; bit 4; x; x; x; x; bit 7 stan drugiego przycisku manipulatora B (B2), bit 6 stan pierwszego przycisku manipulatora B (B1), bit 5 stan drugiego przycisku manipulatora A (A2), bit 4 stan pierwszego przycisku manipulatora A (A1), bity 3-0 nie wykorzystane; dla podfunkcji 1: AX współrzędna X drążka manipulatora A, BX współrzędna Y drążka manipulatora A, CX współrzędna X drążka manipulatora B, DX współrzędna Y drążka manipulatora B. Opisywany układ wejścia może znaleźć zastosowanie nie tylko jako port manipulatora, ale również jako prosty, 8-bitowy przetwornik wartości analogowej (rezystancja) na wartość cyfrową. Może to być np. rezystancja termometru oporowego itp. * * * Rozdział 16. Złącze USB Współczesny komputer PC otacza się coraz gęstszą siecią układów peryferyjnych. Kilkanaście lat burzliwego rozwoju tej gałęzi techniki doprowadziło do wypracowania wspaniałego chaosu. Lista urządzeń, które można podłączyć do komputera stale rośnie a początkujący użytkownicy poruszają się z coraz to większym trudem w gąszczu najróżniejszych wtyczek i gniazdek. "Nawet najbardziej doświadczeni narażeni są na omyłkowe zamiany kabli. Próby doprowadzenia do jednolitego standardu prowadzone są od dłuższego czasu w zespole powołanym do życia przez grupę firm założycielskich: Compaq, DEC, IBM, Intel, Microsoft, NEC i Northern Telecom. Wspólnie rozwijany projekt nosi nazwę USB (Universal Serial Bus*) i obiecuje możliwość podłączenia szerokiego zakresu peryferiów PC do jednolitej, prostej i taniej magistrali. Specyfikacja Koncepcja złącza USB jest pod wieloma względami niezmiernie elastyczna. Tkwiąca w samym założeniu uniwersalność wymaga dostosowania do szerokiej gamy urządzeń: od powolnych klawiatur do szybkich modemów i kamer wideo. Uczynienie zadość temu podstawowemu wymaganiu doprowadziło do implementowania kanałów informacyjnych o różnej przepustowości. W pierwszej fazie realizacji projektu oferowane są kanały o małej (Low Speed, do 1,5 MB/s) i średniej (Medium Speed, do 12 MB/s) prędkości przesyłania. W drugim etapie rozwoju powstać ma wersja High Speed USB transmitująca dane z prędkością 500 Mb/s. Nic nie stoi na przeszkodzie by korzystać wyłącznie z kanału Medium Speed. Wyodrębnienie kanału 1,5 MB ma aspekt wyłącznie ekonomiczny Ś liczna grupa powolnych urządzeń (mysz, klawiatura itp) musiałaby być wyposażana w szybki interfejs USB. Nowej magistrali i tak nie jest łatwo wyprzeć dotychczasowe rozwiązania, każdy wzrost kosztów zmniejsza dodatkowo szansę na powodzenie całego projektu. Topologia USB ma strukturę drzewiastą rozrastającą się z punktu początkowego, który stanowi umieszczony na płycie PC kontroler USB. Płyty główne z procesorem Pentium bazujące na układach scalonych firmy Intel mają już taki kontroler wkomponowany w strukturę mostu PCI2ISA (PIIX3 lub nowszego PIIX4). Oferuje on dwa gniazda USB. W miarę rozbudowy sieci od poziomu „O" w dół, do każdego z gniazd podłączać można dowolne urządzenie końcowe (NODE) lub kolejny rozdzielacz (HUB) Ś rysunek 16.1. Dopuszczalna liczba wszystkich urządzeń nie może przekraczać 127. Rozdzielacze stanowią układy aktywne wzmacniające sygnały magistrali. Dysponują jednym wyjściem w kierunku wyższego poziomu (Up-stream Port) i kilkoma wejściami w stronę poziomów niższych (Down-stream Ports). Kolejne rozdzielacze zarysowują wyraźnie poziomy piramidy, na szczycie której pracuje Host-Kontroler. Na poziomie ostatnim obecne są już tylko urządzenia końcowe. Funkcja rozdzielaczy nie ogranicza się jedynie do pomnażania gniazd USB. Zaopatrują one również w napięcie zasilania urządzenia nie dysponujące własnym źródłem. Klasyczny przykład stanowi wbudowany w klawiaturę rozdzielacz aktywny dostarczający energii dla podłączonej do niego myszy. Okablowanie Urządzenia pracujące w kanale 12 MB/s posługują się ekranowaną skrętką. Dopuszczalna długość takiego przewodu wynosi 5 metrów. Dla urządzeń klasy 1,5 MB/s przewidziano prosty czterożyłowy nieekranowany kabel o długości do 3 m. Dla zminimalizowania szkodliwego promieniowania ograniczono czasy narastania przebiegów impulsowych do wartości 75 - 300 ns. Maksymalna liczba odcinków łączących poziomy piramidy wynosi 7. Tak więc najbardziej odległy rozdzielacz nie może znajdować się dalej niż 35 m od punktu szczytowego. Ograniczenie to nałożone jest ze względu na czas przebiegu pakietów i wyznaczony przez specyfikację minimalny czas reakcji systemu. Niezależnie od tego do jakiej klasy prędkości kwalifikuje się dane urządzenie, połączenie odbywa się zawsze przy użyciu tego samego wtyku (rysunek 16.2). Zróżnicowanie długości końcówek (styki zasilające wystają nieco ponad linię ograniczenia styków przewodów sygnałowych) stanowi fragment realizacji idei Hot Plugging Ś łączenia na gorąco. Dowolne urządzenie USB może być bez szkody dla sieci i siebie samego podłączane i odłączane bez konieczności przestrzegania żadnej specjalnej procedury (odłączenie zasilania, reset lub tym podobne). Patrząc na złącze USB od strony sygnałów elektrycznych należy je zaliczać do grupy magistral szeregowych prowadzonych od punktu do punktu. Dane przesyłane są w ruchu dwukierunkowym przy pomocy pary przewodów sygnałowych D+ i D-. Pozostałe dwie linie doprowadzają napięcie zasilające (+5 V i masa). Modulowanie końcówek D+ i D-sygnałem różnicowym zwiększa odporność linii na zakłócenia zewnętrzne. Wzmacniacze wejściowe urządzeń USB nastawione są na wydzielenie różnicy sygnałów. Przebiegi szkodliwe nakładają się w jednakowym stopniu na obie linie D+ i D- i dlatego łatwo je wyeliminować. Poziom dla nadawanych sygnałów wyznaczony został na około l V (napięcie różnicowe 2 V). Odbiornik musi jednak w sposób pewny odławiać różnicę 0,2 V (margines bezpieczeństwa). W stanie spoczynku linie utrzymywane są na poziomie D+ = +3 V i D- = O V. Magistrala nie dysponuje linią podającą sygnał taktujący. Sygnał zawarty jest w strumieniu danych i z niego odzyskiwany. Każde logiczne O wyzwala zmianę polaryzacji. Specjalny algorytm kodowania zapewnia obecność impulsów synchronizujących w dowolnej sekwencji danych, nawet składającej się z samych 1. Najpóźniej po sześciu l wprowadzany jest impuls O (Bit Stuffing). Tak więc każde z urządzeń USB ma możliwość zsynchronizowania swojego wewnętrznego zegara co najmniej raz na siedem taktów. Protokół Każdy z podłączonych w danej chwili do magistrali układów musi być jednoznacznie identyfikowany. Do tego celu służy numer identyfikacyjny ID nadawany przez kontroler USB (Host Adapter). Tuż po uruchomieniu systemu (załączeniu napięć zasilających) każdy z układów ustawia swój ID = 0. Kontroler przegląda najpierw całą magistralę od-cinek po odcinku aż do ostatniego poziomu i przydziela każdemu napotkanemu urządzeniu kolejny numer ID. Na numer ten składa się jeden bajt adresu urządzenia (ADDR) i trzy dodatkowe bity na określenie położenia wewnętrznego w ramach urządzenia (ENDP, Endpoint). Oprócz konfigurowalnego programowo ID układy peryferyjne USB wyposażane są w zaszyty na stałe w swej pamięci 5-bajtowy numer sprzętowy: dwa bajty stanowią oznaczenie producenta, dwa nazwę układu i jeden numer wersji. Dodatkowe informacje zawarte są w 3-bajtowym identyfikatorze klasy: po jednym bajcie na klasę, podklasę i typ protokołu. W trakcie wstępnego przeglądania sieci napotkane urządzenia informują kontroler o typie przetwarzanych przez siebie danych i o pożądanej szerokości pasma przesyłowego, które potrzebują do dyspozycji. Kontroler gromadzi te informacje, by je później wykorzystać do rozdziału pasma pomiędzy wszystkich chętnych. Wszelkie akcje w sieci USB inicjowane są przez kontroler. Poszczególne urządzenia nie mają możliwości ani zwrócenia na siebie uwagi (tak jak to się dzieje z udziałem mechanizmu przerwań) ani wysyłania danych „w ciemno". Każdy z uczestników musi czekać, aż kontroler zwróci się do niego z zapytaniem o potrzebę obsługi. Tak zdefiniowana procedura likwiduje co prawda konieczność eliminacji kolizji, do których dochodzi w przypadku jednoczesnego nadawania przez wielu uczestników, pochłania jednak stosunkowo dużo mocy obliczeniowej na organizację biegu jałowego. Samo wysyłanie zapytań do wszystkich możliwych 127 uczestników mocno obciąża średnich rozmiarów procesor i nie może być pozostawione w gestii CPU. Działalność tą bierze na siebie Host-Adapter USB. On sam musi więc być urządzeniem porozumiewającym się z PC przy pomocy przerwań. W zależności od producenta płyty głównej, zajmowana jest linia IRQ10 lub IRQ11. Ponadto Host-Adapter obejmuje w posiadanie część przestrzeni adresowej I/O. W tej sprawie prawie każda płyta ma swoje zdanie, często powtarza się jednak zakres Ox6000h - 0x601 Fh lub 0xE400h - 0xE41 Fh. Kontroler rozsyła w regularnych odstępach czasu specjalne pakiety (Token) z zapytaniami do kolejnych urządzeń (rysunek 16.3). Pakiety zabezpieczane są sumami kontrolnymi CRC. Stosowane kody umożliwiają nie tylko wykrywanie błędów ale również ich korekcję (do dwóch uszkodzonych bitów w chronionym obszarze). Urządzenie żądające dostępu do magistrali odsyła odpowiedź pozytywną. W oparciu o zapamiętane w fazie inicjalizacji parametry kontroler sprawdza najpierw czy dysponuje wolnym pasmem o niezbędnym wymiarze a jeśli tak, rezerwuje je (pod uwagę brane są przy tym planowane transmisje izochroniczne). Po przyjęciu niezbędnych uzgodnień dochodzi do utworzenia kanału wirtualnego (Pipę) i wymiany danych w pakietach o ustalonej wcześniej strukturze (rysunek 16.4). Rysunek 16.4. Poszczególne fazy komunikacyjne kwitowane są przy pomocy specjalnych pakietów potwierdzających (rysunek 16.5). Odmienne struktury nagłówków PID pozwalają na jednoznaczną identyfikację typu pakietu. Gdy wszystkie zaplanowane pakiety zostaną przesłane, kanał jest likwidowany a jego pasmo oddawane do dyspozycji kontrolera. Sumaryczna przepustowość magistrali rozdzielana jest w miarę potrzeb i możliwości. Kontroler tworzy przy tym wirtualne kanały przesyłowe (Pipes) o różnej szerokości i różnym kierunku przepływu informacji, które stawia do dyspozycji wyznaczonym przez siebie urządzeniom. Uwzględnienie istniejących priorytetów może się odbywać wyłącznie na drodze zaburzenia równomierności rozsyłania pakietów Token. Prośba o dostęp do magistrali może zostać przez kontroler zignorowana jeśli rezerwy pasma nie są wystarczające. Żadna z trwających właśnie transmisji nie jest przerywana na korzyść innej. Asynchroniczny charakter przesyłania danych nie wymaga natomiast od uczestników trzymania się jakiejkolwiek określonej prędkości, w szczególności maksymalnie wyznaczonej dla danego strumienia. Dużą rolę w sprawnym funkcjonowaniu sieci USB odgrywa buforowanie danych i to zarówno przez urządzenia oczekujące na dostęp jak i przez kontroler. Czas oczekiwania na obsługę może być różny a urządzenie nie jest w stanie go przewidzieć. Rozmiary buforów lokalnych muszą być dobrane z dużym zapasem, tym większym im większy strumień danych produkuje układ. Specyfikacja USB przewiduje oprócz zwykłej transmisji asynchronicznej również przekaz izochroniczny. Ten typ przesyłania stworzony został dla potrzeb zastosowań multimedialnych. Istnieją bowiem urządzenia, dla których zaopatrzenie na czas w dane (lub ich odbiór) jest sprawą życia i śmierci. Klasyczne przykłady to mikrofon, głośniki lub kamera. Przepełnienie (lub wyczerpanie) buforów wewnętrznych narusza ciągłość przekazu. System przydziału oparty na zapytaniach kontrolera nie zawsze gwarantuje dojście do głosu na czas. Dla tego typu układów kontroler rezerwuje fragment pasma w regularnych wycinkach czasowych. Przekaz izochroniczny ma priorytet nad transmisją asynchroniczną. Dla potrzeb innych chętnych stoi w tym czasie do dyspozycji jedynie reszta pasma. USB w praktyce USB oferuje, w porównaniu do stosowanych dotychczas złączy, szereg zalet, które zestawione w poniższych punktach dają obraz jego potencjalnych możliwości. Czy zostaną w pełni wykorzystane, trudno jest ocenić już teraz. Reakcja rynku na wprowadzane nowości nie była nigdy łatwa do przewidzenia. • W obrębie całego systemu jest tylko jeden rodzaj gniazda i pasującego do niego wtyku. Pomylić się nie sposób, bowiem każdy wtyk można podłączyć do pierwszego napotkanego w okolicy gniazda. Nie należy się natomiast spodziewać szerokiej obecności rozdzielaczy (NODE) jako samodzielnych układów. Ich funkcje zostaną zintegrowane w dostosowanych do tego celu urządzeniach USB. Rozmnażanie gniazd będzie odbywało się tam, gdzie pozwoli na to miejsce: na ścianach bocznych klawiatur, w podstawach i ścianach tylnych monitorów itp. Integracja rozdzielaczy w urządzeniach niskiej prędkości nakłada wyższe wymogi (ekranowana skrętka) na przewód połączeniowy z kolejną warstwą: dołączone do rozdzielacza urządzenie USB może być klasy 12 MB/s. • Sieć USB jest samokonfigurująca i nie wymaga od użytkownika dodatkowych działań. Nie trzeba się troszczyć o terminatory końców magistrali (jak w przypadku SCSI), deklaracje Master/Slave, adresy portów I/O, kanałów DMA i numery IRQ ani określać parametrów transmisji (złącze szeregowe). Host-Adapter bierze na siebie zarówno identyfikację jak i właściwą konfigurację każdego elementu sieci. Samokonfiguracja obejmuje również system „Hot Plugging'', tzn. dołączane i odłączane w trakcie pracy systemu kolejne urządzenia są automatycznie rozpoznawane i adresowane, a niezbędne do ich obsługi sterowniki uruchamiane bez udziału użytkownika. • Nadrzędną cechą całego systemu jest jego elastyczność i niskie koszty realizacji. Obsługiwane mogą być jednocześnie urządzenia pracujące z prędkością kilku kB/s oraz te produkujące strumień do 12 MB/s. Pokrywany jest więc zakres obejmujący przesyłanie danych w formacie MPEG-II (8-10 MB/s) rzecz bardzo ważna dla multimedialnej przyszłości całego przedsięwzięcia. Długość kursujących w sieci pakietów może być regulowana co podnosi możliwość niezmiernie racjonalnego wykorzystania jej zasobów. USB integruje w sobie ponadto funkcje lokalnej sieci telefonicznej. W skład specyfikacji wchodzi specjalny protokół TAPI (Telephony Application Programming Interface). Oferowane są następujące usługi: fax, modem oraz mała centrala telefoniczna. Gniazdo USB może być też używane do podłączenia innego komputera, na przykład laptopa w celu szybkiej wymiany danych z maszyną macierzystą. • Na zakończenie kilka uwag o wadach USB. Stopień integracji mechanizmów USB w stosowanych obecnie systemach operacyjnych jest delikatnie mówiąc niewielki. Obecność blaszki slotu z gniazdami USB na tylnej ściance komputera PC to jeszcze nie wszystko. Samo rozpoznanie i obsługa wchodzącego w skład PIIX3 kontrolera USB wymaga zdobycia sterownika programowego. Dla Windows 95 odpowiedni plik znaleźć można na płytce CD oznaczonej symbolem Service Pack 3 (w katalogu \OSR2\USB_SUPP) zawierającej poprawki i uzupełnienia do systemu operacyjnego. Poprawna instalacja tego sterownika to jeszcze za mało by cieszyć się USB. System operacyjny wie już co prawda o obecności kontrolera ale nie wie nic o podłączonych do sieci urządzeniach. Samo ich zdobycie nie będzie sprawą łatwą. Oprócz kilku pokazywanych jedynie na targach i dostępnych w prospektach monitorów , klawiatur i myszy trudno jest o szeroki materiał porównawczy. Każde z tych urządzeń wymaga własnego sterownika programowego a te są w chwili obecnej nieosiągalne. Pełna integracja USB w strukturach systemów operacyjnych ma nastąpić wraz z wejściem na rynek systemów Windows 98 i Windows 2000 Sam pomysł USB i stowarzyszone z nim rozwiązania są niezwykle nowoczesne i przyjazne dla użytkownika. Nowa magistrala, jak każda nowa idea, która zamierza przynajmniej częściowo zrewolucjonizować świat, rodzi się z trudem a i dzieciństwo też ma niełatwe. Krążące tu i ówdzie złośliwe tłumaczenie skrótu USB jako „Useless Serial Bus" (Nieużyteczna Magistrala Szeregowa) nie jest niestety całkowicie pozbawione sensu. * * * Rozdział 17. Zasilacz Zasilacz wytwarza cztery poziomy napięć: +5 V, +12 V, -5 V i -12 V, niezbędne do pracy komputera. Jak łatwo zauważyć, nie jest wytwarzane napięcie +3,3 V, konieczne do zasilania procesorów serii SL, 486DX4, Pentium i lepszych. Komputery wyposażone w tego typu procesory powinny mieć na płycie głównej układ przetwarzający napięcie +5 V na +3,3 V. Montowanie tego typu procesorów na płytach bez takiego konwertera spowoduje ich uszkodzenie. Większość zasilaczy komputerowych jest zasilaczami impulsowymi. Oznacza to, że pracują tylko wtedy, gdy podłączone jest jakieś obciążenie Ś wystarczającym obciążeniem do prawidłowej pracy zasilacza komputerowego powinna być płyta główna. Przykładowy schemat zasilacza przedstawiono na rysunku 17.1. Jak widać na schemacie, zasilacz, zasilany z sieci -220 V, wytwarza napięcia +5 V, +12 V, -5 V i -12 V. Dodatkowy sygnał PG (Power Goocf) powoduje resetait płyty głównej po ustabilizowaniu się napięć zasilających. Uwaga: Wiele starych zasilaczy nie restartowało płyty głównej po ustaleniu napięć zasilających. Dlatego też, jeżeli po wmontowaniu nowej płyty do starej obudowy komputer nie chce się uruchomić, warto nacisnąć przycisk Reset, aby sprawdzić, czy przyczyną nie jest czasem stary zasilacz. Uwaga: W Polsce napięcie w sieci wynosi -220 V, a zasilacze przeznaczone na rynek amerykański zasilane są napięciem -110 V. Przed podłączeniem zasilacza do sieci warto sprawdzić, do jakiego napięcia jest on przystosowany Ś informacja taka powinna być umieszczona na obudowie. Wiele zasilaczy posiada przełącznik 110/220. W Polsce powinien on być ustawiony na zasilanie napięciem 220 V (większość producentów sprzedających w Polsce komputery blokuje działanie tego przełącznika). Na rynku dostępne są zasilacze o różnych mocach, począwszy od 100 W, przez 135 W. 150 W, 200 W do 250 W, a czasem 300 W. Od mocy zasilacza zależy liczba urządzeń, które można podłączyć do komputera. Problem doboru mocy zasilacza do konkretnej konfiguracji komputera został rozwiązany przez producentów obudów do komputerów Ś do określonego typu obudowy montowany jest taki zasilacz, który zapewni prawidłowe działanie komputera po zamontowaniu maksymalnej liczby urządzeń, która może zmieścić się w obudowie. Z zasilacza wyprowadzone są złącza przeznaczone do zasilania płyty głównej i urządzeń zamontowanych w komputerze oraz kabel przeznaczony do podłączenia wyłącznika. Na rysunku 17.2. pokazano złącza zasilające płytę główną. Przy podłączaniu płyty głównej należy zachować szczególną ostrożność, by nie zamienić złącz miejscami Ś odwrotne podłączenie napięć zasilających może spowodować uszkodzenie komputera. Na rysunku 17.3. pokazano dwa typy złącz przeznaczonych do zasilania stacji dysków, streamerów, CD-ROM-ów i innych urządzeń. Konstrukcja złącza uniemożliwia niewłaściwe podłączenie. * * * Dodatek A Programy konfiguracyjne W dodatku tym znajduje się krótki przegląd podstawowych opcji programów konfigura-cyjnych określanych mianem BIOS-SETUP lub CMOS-SETUP. Omawiane tu programy umieszczone są wraz z procedurami BIOS-u w pamięci stałej komputera i służą do ustanawiania różnych parametrów, głównie przez bezpośredni dostęp do rejestrów kon-figuracyjnych układów scalonych płyty głównej (Chip-Set). Starsze modele PC-AT, nie dysponujące programem CMOS-Setup zapisanym w pamięci stałej, wymagały uruchomienia z systemu operacyjnego specjalnego programu narzędziowego (setup.com lub setup.exe), dostarczanego wraz z komputerem. Obecnie fakt ten ma znaczenie wyłącznie historyczne. Współczesny Setup może być wywołany jedynie w momencie uruchamiania PCo czym przypomina zwykle stosowny komunikat. Na rynku Shareware istnieją jednak programy pozwalające na zmianę opcji konfiguracyjnych również w trakcie pracy komputera bez potrzeby przeładowywania systemu. Rynek producentów programów BIOS zdominowany jest w chwili obecnej przez dwóch wytwórców: American Megatrends, Inc. (AMI) oraz Award Software. Pomimo mnogości różnorodnych modeli komputerów, ukształtowały się w miarę jednorodne linie omawianych programów. Zestawy opcji wybrane przez autora prezentują w miarę typowe konfiguracje. Wiele wersji programów Setup posiada tylko pewien wycinek z całego grona opisanych poniżej punktów. Nie można też wykluczyć, iż czytelnik może napotkać szereg nie omówionych punktów i opcji. Warto wreszcie wspomnieć o punktach, które co prawda są widoczne na ekranie ale ich opcje blokowane są przez BIOS w wyniku wzajemnych oddziaływać elementów architektury. Rysunek A.1 przedstawia w schematycznym zarysie konstrukcję obydwu omawianych wersji programów konfiguracyjnych: AMI i AWARD. Odmiana AMI charakteryzuje się okienkowym układem opcji. W przypadku AWARD opcje grupowane są w formie tabel. Do niedawna zestawy punktów w ramach danego bloku mieściły się na jednym ekranie. W chwili obecnej mnogość punktów zmusza do dodatkowej nawigacji. W ostatnim okresie pojawiły się programy autorstwa AMI, które nie przypominają dobrze znanych okienek i skomponowane są w formie długich przewijanych list. Jakkolwiek wiele opcji w równoważnych sobie punktach ma takie samo brzmienie i znaczenie, są i takie, które występują tylko w określonym typie CMOS-SETUP, oraz takie których znaczenie lub brzmienie jest odmienne. Z tego właśnie powodu przegląd opcji programów konfiguracyjnych przedstawiony zostanie z uwzględnieniem podziału na AMI i AWARD. Zarówno system AMI jak i AWARD mają pewne cechy wspólne. Organizacja systemu bezpieczeństwa Hasło użytkownika; AMI - SECURITY -> USER; AWARD - USER PASSWORD; Hasło administratora; AMI - SECURITY -> SUPERYISOR; AWARD = SUPERYISOR PASSWORD; System zabezpieczeń jest dwupoziomowy i składa się z hasła użytkownika (User Password) oraz hasła administratora (Supervisor Password). Pierwsze z nich broni ogólnego dostępu do systemu. Pod tym pojęciem rozumie się samo uruchomienie komputera. Hasło administratora rozszerza obszar ochronny również na program konfiguracyjny CMOS-SETUP. Przyjęta dwupoziomowość umożliwia ochronę komputera przed próbami manipulacji w programie konfiguracyjnym a jednocześnie zaimplementowanie prostego mechanizmu ochrony ogólnego dostępu. Użytkownik dysponujący hasłem do przydzielonego mu komputera ma mieć możliwość uruchomienia i pracy zgodnie z profilem wytyczonymi przez administratora. Użytkownik taki niekoniecznie musi mieć dostęp do opcji która na przykład blokuje możliwość kopiowania na dyskietki. Hasło administratora otwiera wejście zarówno do CMOS-SETUP jak i do samego komputera. Hasło użytkownika wprowadza go wprawdzie również do programu konfiguracyjnego ale tylko pozornie. Jedyne aktywne opcje to w tym przypadku USER SETUP (w celu zmiany własnego hasła) i powrót do systemu (z zapamiętaniem zmian lub bez). Hasło nie może być dłuższe od 8 znaków alfanumerycznych (we wcześniejszych odmianach programów konfiguracyjnych do 6 znaków). Szczególną uwagę należy zwrócić na fakt, iż system rozróżnia w tym małe i duże litery. System wymaga od użytkownika dwukrotnego podania tego samego hasła zanim je zaakceptuje. Jeżeli chcemy zmienić hasło na nowe, należy najpierw podać na żądanie Enter CURRENT Password hasło dotychczasowe, a następnie dwukrotnie (na polecenia Enter NEW Password i Re-Enter NEW Password) nowe hasło. Samo wprowadzenie hasła jeszcze niczego nie zmienia w zachowaniu się komputera. Aktywacja systemu następuje w dalszych punktach menu: • AWARD SETUP: BIOS FEATURES SETUP -> Security Options • AM1 SETUP: ADVANCED SETUP -> Password Check W zależności od ustawienia tych opcji (AWARD: System/Setup, AMI: Always/Setup) system będzie żądał podania hasła przy próbach wejścia do programu konfiguracyjnego i/lub przy starcie systemu. Można zdefiniować jedno z haseł (użytkownika lub administratora) bez konieczności budowania systemu dwupoziomowego. Jeżeli w takim układzie przełączymy na tryb System komputer będzie żądał hasła zarówno przy próbie uruchomienia jak i przy próbie wejścia do programu konfiguracyjnego. W trybie Setup chroniony będzie dostęp jedynie do samego programu konfiguracyjnego. Kasowanie haseł odbywa się w następujący sposób: • Wejść do systemu z użyciem hasła. • Wybrać opcję ustanawiającą dane hasło. • W odpowiedzi na komunikat Enter Password nacisnąć klawisz Enter. • System potwierdza deaktywację hasła stosownym komunikatem (Password Dis-abled). System ochrony przed wirusami atakującymi Boot-Sektor Ochrona boot-sektora; AMI - UTILITY -> ANTIYIRUS; AWARD - FEATURES SETUP -> Boot Virus Warning; System ochrony opiera się na kontroli odwołań do dysku mających miejsce za pośrednictwem przerwania INT13H. Kanał ten stosowany jest w praktyce wyłącznie przez MS-DOS a większość systemów operacyjnych wyższej generacji przechwytuje obsługę przerwania INT13H instalując w to miejsce własne sterowniki. Jeżeli system ochrony został aktywowany to reaguje on komunikatem na każdą próbę zapisu do boot-sektora dysku lub tablicy partycji. Użytkownik może w tym przypadku zatrzymać dalszą pracę systemu (i przeanalizować sytuację przy pomocy programu skanującego uruchamianego z niezainfekowanej dyskietki) lub dopuścić do zapowiadanego zapisu. Nowoczesne systemy operacyjne często umieszczają różne informacje w tych obszarach i ostatecznie nie zawsze wiadomo czy żądanie jest uzasadnione czy też może być wynikiem działania wirusa. Bardziej niecierpliwi będą zmuszeni do wyłączenia systemu ochrony, szczególnie w przypadku nowej instalacji systemu (Windows 95) by nie być przysypywanyin kolejnymi komunikatami ostrzegawczymi. System ładowania wartości predefiniowanych Wartości bezpieczne; AMI - DEFAULTS -> FAIL SAFE; AWARD - LOAD BIOS DEFAULTS; Wartości optymalne; AMI - DEFAULTS -> OPTIMAL; AWARD - LOAD PERFORMANCE DEFAULTS (LOAD SETUP DEFAULTS); Prawie każda z opcji w programach konfiguracyjnych ma dwie wartości szczególne, zapisane w tabelach w pamięci stałej. Jedna z nich przyjęta jest jako wartość bezpieczna a druga stanowi wartość mającą maksymalnie zoptymalizować (przyspieszyć) działanie systemu. Lądowanie pierwszego zestawu wartości dokonywane jest zwykle w celach diagnostycznych by wykluczyć ewentualne źródła błędnego zachowania się systemu wynikające ze złych nastaw w obrębie programu konfiguracyjnego. Jeżeli po takiej operacji działanie systemu powraca do normy wiadomo jest iż winne są zmiany wprowadzone przez użytkownika. Mechanizm opuszczania programu konfiguracyjnego Utrwalenie zmian; AMI -; AWARD - SAVE & EXIT SETUP Zaniechanie zmian; AMI -; AWARD - EXIT WITHOUT SAYING Utrwaleniu (zapisaniu w pamięci konfiguracyjnej CMOS) ulegają wszelkie zmiany wprowadzone w trakcie aktualnej sesji. Ogólna konstrukcja blokowa Opcje podstawowe; AMI - STANDARD SETUP; AWARD - STANDARD CMOS SETUP Opcje zaawansowane; AMI - ADYANCED SETUP; AWARD - BIOS FEATURES SETUP Opcje Chip-Set; AMI - CHIPSET SETUP; AWARD - CHIPSET FEATURES SETUP System oszczędzania energii; AMI - POWER MANAGEMENT; AWARD - POWER MANAGAMENT SETUP Systemy PCI i Pług & Play; AMI - PCI/PNP SETUP; AWARD - PNP/PCI CONFIGURATION Urządzenia peryferyjne; AMI - PERIPHERAL SETUP; AWARD - 1NTEGRATED PERIPHERALS Występująca do niedawna w programach AMI-SETUP pozycja menu głównego HDD LOW LEVEL FORMAT została pominięta w najnowszych wersjach. Wynika to z faktu, że przynosiła ona więcej problemów niż korzyści. W pierwszych modelach dysków IDE mogła powodować ich całkowite zniszczenie. W zasadzie każdy z producentów dysponował mniej lub bardziej utajnionymi zestawami programów formatujących, które nie nadawały się do produktów konkurencji. Późniejsze wykonania dysków EIDE nie reagowały już tak alergicznie na polecenia formatowania niskiego poziomu, chociaż rzeczywiste operacje przeprowadzane w tym wypadku we wnętrzu dysku przez zintegrowane kontrolery pozostaną chyba do końca tajemnicą. Dyski EIDE najnowszej generacji w ogóle lekceważą polecenia tego rodzaju, bowiem wewnętrzne systemy kontroli i diagnostyki same czuwają nad eliminacją uszkodzonych sektorów i natychmiastowym przydziałem bloków zastępczych. Tabele 4.1. AWARD BIOS, STANDARD C MOS SETUP Opcje Wyjaśnienie \ ! \ite mm:dd:yy W punkcie tym ustawia się zegar i kalendarz systemowy. Uwaga na sposób wprowadzania daty bowiem jest ona H'w hh:mm:ss określana zazwyczaj w formacie amerykańskim tj. miesiąc, dzień i rok. Niektóre wersje BIOS-SETUP pozwalają na przejście na standard międzynarodowy (dd:mm:yy). Stosowny dzień tygodnia wyznaczany jest automatycznie przez system. Drive ANone W polach tych nanosi się rodzaje napędów dyskietek. Najczęstsza konfiguracja spotykana w praktyce to jeden Drive B 360KB 5.25 in napęd typu 1,44 MB, 3V2". I.2MB5.25 in 720KB 3.5 in 1.44MB 3.5 in __________________ 2.88MB 3.5 in ____________________________________________________________________ Floppy 3 Modę SupportDrive A Ewentualna aktywacja obsługi standardu Japońskiego" zapisującego 1.2MB na dyskietce 3/2". Drive B Both __________________ Disabled________________________________________________________________________ Halt On Ali Errors1Uzależnienie dalszego przebiegu uruchamiania systemu w momencie wykrycia mało istotnych nieprawidłowości No Errors2np. braku jednego z urządzeń dodatkowych nie stanowiących trzonu architektury PC. Wystąpienie takiego błędu nie Ali But Keyboard'oznacza jeszcze konieczności zatrzymania (Non-Fatal Errors). Rozruch systemu: Ali But Diskette' Ulegnie zatrzymaniu w odpowiedzi na każdy z błędów. Ali But Disk/Key12 BętJ7Je pr/ebiegat da|ej njezależme od błędu. Ulegnie zatrzymaniu w odpowiedzi na każdy z błędów za wyjątkiem błędu klawiatury (tym samym możliwy jest start komputera bez klawiatury) 4 Będzie przebiegał nadal prz> stwierdzeniu braku napędu dyskietek a ulegnie zatrzymaniu przy napotkaniu każdego innego błędu. Będzie przebiegał nadal zarówno przy stwierdzeniu braku napędu dyskietek jak i klawiatury. Zatrzymanie nastąpi w razie stwierdzenia innych błędów. Hard Disks:Type: W systemie zawierającym urządzenia SCSI należy wybrać opcję None. To samo tyczy się sytuacji. gd> do danego Primary Master None kanału E1DE podłączony jest CD-ROM (zarówno czytnik jak i nagrywarka). Wybranie opcji Auto powoduje, iż Primary Slave Auto system będzie (podczas uruchamiania komputera) rozpoznawał urządzenie aktualnie podłączone do danego kanału. .Secondary Master tJser Jeżeli jest to dysk. to jego parametry zostaną zidentyfikowane i wprowadzone we właściwe pola. Taki sam skutek Secondary Slave l - 45 przyniesie uruchomienie punktu IDE HDD AUTO DETECTION (jedna z dalszych pozycji w menu głównym) z tą tylko różnica, iż naniesione w ten sposób parametry nie ulegną dopasowaniu w momencie zmiany dysku na inny (dyski w wymiennych ramkach). Wcześniejsze wersje programów konfiguracyjnych oferowały ponad 40 (zazwyczaj 45 lub 46) x.csta\vó\v wartości predcfiniowanych. których /nac/cnic \v dzisiejszych c/asach jest raczej pomijnlne. bowiem przedstawiają one dyski dawno już nie produkowane (naj\\ ieksz\ / nich miał pojemność l 5 l MB) .leżeli wybrano opcję l'ser należy wprowadzić ręcznie następujące \\artosci: • CYLS - liczba cylindrów. Wielkość ta podana jest zwykle na nalepce umieszczonej na dysku. W razie jej braku należ) posłużyć się jedna z tabel podających parametry dysków na podstawie ich typu. • HHAD - liczba głowic. Tak jak w przypadku CYI.S • PRHCOMP - początek strefy prekompensacji (Write Precompensation). Wartość ta wyznaczała w dyskach starszych generacji cylinder powyżej którego układy wzmacniacz) zapisu modyfikowały nieco prąd podkładu. Było to konieczne, bowiem wtedy jeszcze nie stosowano zapisu strefowego (Żonę Bit Recordmg) i na każdej ścieżce zapisywana była ta sama ilość sektorów. W konsekwencji gęstość zapisu na ścieżkach wewnętrznych była o wiele większa niż na obrzeżu. Wielkość w polu PRIiCOMP jest całkowicie ignorowana przez współczesne kontrolery zintegrowane na dyskach HIDH Pole to można pozostawić puste, a jeżeli Setup żąda jakiejś konkretnej wartości należ)' wprowadzić -l lub 65535. • LANDZ - początek strefy parkowania (Landing Żonę). Również, i ta wartość jest ignorowana przez współczesne kontrolery, bowiem zagadnienie parkowania głowic leży w\łącznic w gestii samego dysku. Mimo iż wartość wprowadzana do tego pola nie odgrywa żadnej roli. niektóre interfejsy BIOS me akceptują liczb) innej niż wprowadzanej do pola CYLS (lub ewentualnie 0). • SHCTOR - liczba sektorów na ścieżce. Tak jak w przypadku CYI.S i HHAD. • MÓDL: - tryb. Możliwe opcje to Normal. Large. ŁBA i Auto. Pierwsza z nich ma zastosowanie do dysków 1DH o pojemności nie przekraczającej 528 MB. W pozostałych przypadkach najlepszym wyjściem jest wybranie trybu ŁBA (I.ogical Błock Addressing). Opcja Large znajduje zastosowanie w tych rzadkich prz\padkach. gdy pojemność dysku wykracza poza barierę 528MB a mimo tego tryb ŁBA nie został w nich zaimplementowany. Zapis w polu MODH nie jest istotny w przypadku dysków MFM i HSDI (jeżeli gdziekolwiek jeszcze można się na takie natknąć). Opcję Auto należ) wybrać, jeżeli przewiduje się częste wymiany dysków (dyski w ramkach) i korzystam) z systemu automatycznego rozpoznawania. • SIZH - rozmiar. W polu tym system wyświetla pojemność dysku obliczoną na podstawie parametrów ______________________________ wprowadzonych do pól CYLS. III-AD i SHCTOR.____________________________________ Memory:Pola o charakterze informacyjnym bez możliwości mod)likacji. BIOS wprowadza w to miejsce wielkości pamięci Base Memory = ... określone przez procedur)' testujące POST. l:\tendcd Memory = ... Olher Memory = ... Total Memory = ... VideoHUA/VCiA W tym punkcie nie powinno być raczej wątpliwości (HGA/V(iA). chyba ze ktoś dysponuje jeszcze karta graficzną CGA 40 innego typu (i naturalnie stosownie dobranym do niej monitorem). CGA 80 MONO _________________________________ Tabela A.1. AWARD BIOS, STANDART CMOS SETUP. 1) Punkt; 2) Opcje; 3) Wyjaśnienie 1) Date, Time; 2) mm:dd:yy; hh:mm:ss; 3) W punkcie tym ustawia się zegar i kalendarz systemowy. Uwaga na sposób wprowadzania daty bowiem jest ona określana zazwyczaj w formacie amerykańskim tj. miesiąc, dzień i rok. Niektóre wersje BIOS-SETUP pozwalają na przejście na standard międzynarodowy (dd:mm:yy). Stosowny dzień tygodnia wyznaczany jest automatycznie przez system. 1) Drive A, Drive B; 2) None:360KB 5.25 in, 1.2MB5.25 in, 720KB 3.5 in, 1.44MB3.5 in, 2.88MB 3.5 in; 3) W polach tychnanosi się rodzaje napędów dyskietek. Najczęstsza konfiguracja spotykana w praktyce to jeden napęd typu 1,44 MB. 3 i 1/2 cala. 1) Floppy 3 Mode Support; 2) Drive A, Drive B, Both, Disabled; 3) Ewentualna aktywacja obsługi standardu Japońskiego zapisującego 1.2MB na dyskietce 3 i 1/2 cala. 1) Malt On; 2) Ali Errors#1, No Errors#2, Ali But Keyboard#3, Ali But Diskette#4, Ali But Disk/Key#5; 3) Uzależnienie dalszego przebiegu uruchamiania systemu w momencie wykrycia mało istotnych nieprawidłowości np braku jednego z urządzeń dodatkowych nie stanowiących trzonu architektury PC. Wystąpienie takiego błędu nie oznacza jeszcze konieczności zatrzymania (Non-Fatal Errors). Rozruch systemu:#1 Ulegnie zatrzymaniu w odpowiedzi na każdy z błędów.#2 Będzie przebiegał dalej niezależnie od błędu.#3 Ulegnie zatrzymaniu w odpowiedzi na każdy z błędów za wyjątkiem błędu klawiatury (tym samym możliwy jest start komputera bez klawiatury) #4 Będzie przebiegał nadal przy stwierdzeniu braku napędu dyskietek a ulegnie zatrzymaniu przy napotkaniu każdego innego błędu.#5 Będzie przebiegał nadal zarówno przy stwierdzeniu braku napędu dyskietek jak i klawiatury. Zatrzymanienastąpi w razie stwierdzenia innych błędów. 1) HardDisks: Primary Master, Primary Slave, Secondary Master, Seeondary Slave; 2) Type: None, Auto, User l -45; 3).. W systemie zawierającym urządzenia SCSI należy wybrać opcję None. To samo tyczy się sytuacji, gdy do danego kanałuEIDE podłączony jest CD-ROM (zarówno czytnik jak i nagrywarka). Wybranie opcji Auto powoduje, iż system będzie (podczas uruchamiania komputera) rozpoznawał urządzenie aktualnie podłączone do danego kanału. Jeżeli jest to dysk, to jego parametry zostaną zidentyfikowane i wprowadzone we właściwe pola. Taki sam skutek przyniesie uruchomienie punktu IDE HDD AUTO DETECT1ON ( jedna z dalszych pozycji w menu głównym) z tą tylko różnicą, iż naniesione w ten sposób parametry nie ulegną dopasowaniu w momencie zmiany dysku na inny (dyski w wymiennych ramkach). Wcześniejsze wersje programów konfiguracyjnych oferowały ponad 40 (zazwyczaj 45 lub 46) zestawówwartości predcllniowanych, których znaczenie w dzisiejszych czasach jest raczej pomijalne. bowiem przedstawiają one dyski dawno już nie produkowane (najwiekszsz nich miał pojemność 151 MB). Jeżeli wybrano opcje User należy wprowadzić ręcznie następujące wartosci:- CYLS - liczba cylindrów. Wielkość ta podana jest zwykle na nalepce umieszczonej na dysku. W razie jej braku należ.) posłużyć się jedna z, tabel podających parametry dysków na podstawie ich typu.-HEAD - liczba głowic. Tak jak w przypadku CYLS-PRECOMP - początek strefy prekompcnsacji (Write Precompensation) Wartość ta wyznaczała w dyskach starszych generacji cylinder powyżej którego układy wzmacniacz) zapisu modyfikowały nieco prąd podkładu. Było to konieczne, bowiem wtedy jeszcze nie stosowano zapisu strefowego (Zonę Bit Recordmg) i na każdej ścieżce zapisywana była ta sama ilość sektorów. W konsekwencji gęstość zapisu na ścieżkach wewnętrznych była o wiele większa niż na obrzeżu. Wielkość w polu PRECOMP jest całkowicie ignorowana przez współczesne kontrolery zintegrowane na dyskach EIDE. Pole to można pozostawić puste, a jeżeli Setup żąda jakiejś konkretnej wartości należ)' wprowadzić -1 lub 65535. LANDZ - początek streiy parkowania (Landing Zone). Również, i ta wartość jest ignorowana przezwspółczesne kontrolery, bowiem zagadnienie parkowania głowic leż) wYłącznie w gestii samego dysku. Mimo iż wartość wprowadzana do tego pola nie odgrywa żadnej roli. niektóre interfejsy BIOS nie akceptują liczb) innej niż. wprowadzanej do pola CYLS (lub ewentualnie 0). SHCTOR - liczba sektorów na ścieżce. Tak jak w przypadku CYLS i HEAD.-MODE: - tryb. Możliwe opcje to Normal, Large, ŁBA i Auto. Pierwsza z nich ma zastosowanie do dysków 1DH o pojemności nie przekraczającej 528 MB. W pozostałych przypadkach najlepszym wyjściem jest wybranie trybu I.BA (I.ogical Błock Addressing). Opcja Large znajduje zastosowanie w tych rzadkich przepadkach, gdy pojemność dysku wykracza poza barierę 528MB a mimo tego tryb ŁBA me został w nich zaimplcmenUnvan). Zapis w polu MODH nie jest istotny w przypadku dysków MFM i HSDI (jeżeli gdziekolwiek jeszcze można się na takie natknąć). Opcję Auto należ) wybrać, jeżeli przewiduje się częste wymiany dysków (dyski w ramkach) i korzystam) z systemu automatycznego rozpoznawania.-SIZE - rozmiar. W polu tym system wyświetla pojemność dysku obliczoną na podstawie parametrów wprowadzonych do pól CYLS, HEAD i SECTOR. 1) Memory:Base Memory=..., Exstend Memory=..., Othcr Memor=..., Othcr Memor=...; 2) -; 3) Pola o charakterze informacyjnym bez możliwości modyfikacji. BIOS wprowadza w to miejsce wielkości pamięci określone przez procedury testujące POST. 1) Video; 2) EGA/VGA, CGA 40, CGA, 80 MONO; 3) W tym punkcie nie powinno być raczej wątpliwości (EGA/VGA). chyba że ktoś dysponuje jeszcze karta graficzną innego Typu (i naturalnie stosownie dohrainm do niej monitorem). Tabela A.2. AWARD BIOS, BIOS FEATURES SETUP. 1) Punkt; 2) Opcje; 3) Wyjaśnienie; 1) Assign IRQ For VGA; 2) Enabled, Disabled; 3) Niektóre kart}1 graficzne żądają przydziału linii przerwań sprzętowychIRQ. Żądanie takie można spełnić (Enablcd) lub nie (Disabled). Przydział przerwania konieczny jest w przypadku większości akceleratorów 3D. 1) BIOS Update (CPU Update Data); 2) Enabled, Disabled; 3) W aktualnych wersjach procesorów BIOS może ładować pewne fragmenty mikrokodu do pamięci własnej procesora. Położenie standardowe Enabled. 1) Boot From LAN First; 2) Enabled, Disabled; - Punkt ten stworzony został w zasadzie dla potrzeb stacji roboczych pozbawionych własnych dysków twardych. Komputer taki wyposażany był w karty sieciowe z dodatkową pamięcią stalą (BOOT-EPROM). Zawarty w niej program organizował proces lądowania systemu operacyjnego z serwera sieciowego. W pozycji linabled sterowanie przekazywane było natychmiast do karty sieciowej i BIOS nie tracił czasu na poszukiwania innych urządzeń. 1) Bool Sequcnce; 2) A, C, SCSI-C, A, SCSI-SCSI, A, C-SCSI, C, A-A, SCSI, C-D, A, SCSI-E, A, SCSI-F, A, SCSI=C, CDROM, A-CDROM, C, A-CDROM, A, C-I,S-120/ZIP, C-C onlv; 3) Możliwość uszeregowania urządzeń w kolejności według której BIOS poszukuje na nich systemu operacyjnego. Najnowsze wersje AWARD-Setup mieszają w tym punkcie urządzenia SCSI i IDE. Wcześniej do dyspozycji stalą dodatkowa pozycja menu HDD Sequence SCSI/IDE First z opcjami IDE lub SCSI a w punkcie Boot Sequence widoczne były wyłącznie urządzenia IDE oraz napęd dyskietek. Pozycje odnoszące się do napędów LS-120 i ZIP dostępne są nie we wszystkich starszych wersjach BlOS-Setup. 1) Boot Up Floppy Seek; 2) Enabled, Disabled; 3) Wyłączenie tej opcji (Disabled) przyspiesza nieco rozruch komputera bowiem BIOS nie kontroluje fi/.ycznej obecności napędu dyskietek ani nie sprawdza jego zawartości. 1) Boot Up Numl.ock Status; 2) On, Off; 3) Ustawienie On powoduje, iż system włącza automatycznie klawisz Num (NumLock) konfigurując blok dziesiętny klawiatur) • zgodnie z jego logicznym przeznaczeniem. W położeniu standardowym OIT klawisze tego bloku mają przypisane funkcje sterowania kursorem. 1) Boot Up System Speed; 2) Low, High; 3) W pozycji Low system startuje ze zmniejszoną prędkością. Opcja Iligh oznacza, iż podczas rozruchu systemu procesor taktowany jest zegarem o częstotliwości nominalnej. Redukcja częstotliwości zegara odpowiada przełączeniu przy pomocy funkcji TURBO SW1TCH. Punkt ten został usunięty i aktualnych wersji BIOS-SETUP. 1) C8000-CBFFF Shadow, CC000-CFFFF Shadow, D0000-D3FFF Shadow, D4000-D7FFF Shadow, D8000-DBFFF Shadow, DC000-DFFFF Shadow; 2) Enabled, Disahlcd; 3) Karty rozszerzające mogą mieć własne programy BIOS zawarte w lokalnych pamięciach stałych ROM. Ponieważ czas dostępu do pamięci tego typu jest dłuższy niż do pamięci dynamicznej, wskazane jest kopiowanie ich zawartości do RAM komputera. Jeżeli znany jest adres takiego bloku stosowne oknoadresowe należy aktywować poprzez, ustawienie w nim Enabled. Położenie standardowe to Disabled dla wszystkich zakresów adresowych. 1) CPU Internal Corę Speed; 2) =; 3) W punkcie tym BIOS wyświetla aktualną częstotliwość taktującą iądro procesora. 1) CPU E2 Cache ECC Checking; 2) Enabled Disahled; 3) Nowoczesne procesory (począwszy od Pentium II 266 Ml Iz) stosują mechanizmy kontrolne ECC w obrębie swej pamięci podręcznej L2. Aktywowanie tej opcji (Enabled) przynosi pewien mały spadek wydajności na rzecz zwiększonego bezpieczeństwa danych. 1) CPU Level 1 Cache, CPU Level 2 Cache, (CPU Internal Cache) (X86 CPU Cache); 2) Enabled, Disablcd, (WB / WT);3) W punktach tych określana jest strategia dostępu do pamięci podręcznej. Opcje powinny być zawsze aktywowane czyli Enabled. Wyłączenie El powoduje spadek wydajności procesora o kilkadziesiąt procent a działania takie podejmuje się wyłącznie w celach diagnostycznych i pomiarowych dla określenia wpływu pamięci podręcznej. Jeżeli system oferuje w tym punkcie opcje WB (Write Back) lub WT (Write Through) należy wybrać WB bowiem jest ona bardziej korzystnaz punktu widzenia szybkości działania Niektóre procesory (AMD-K.5 i Cyrix 6x86) mogą pracować jedynie w trybie WT.Wpływ pamięci podręcznej poziomu drugiego me jest już tak krytyczny a jej wymiar prawie całkowicie nieistotny (już 64KB przechwytuje ponad 90% żądań dostępu). 1) External Cache; 2) Enabled Disabled; 3) Opcja Enabled aktywuje pamięć podręczną leżącą poza CPU (o ile pamięć taka została w ogóle zainstalowana) Na płytach głównych procesorów rodziny 386 i 486 i Pentium jest to E2. a w przypadkuPentium II określana jako E3. 1) External Cache Write Mode; 2) WB, WT; 3) Opcja stosunkowo rzadko spotykana, dotyczyła płyt z procesorami 386 i 486 z zainstalowaną pamięcią podręczną E2. W punkcie tym określana jest Strategia dostępu do pamięci podręcznej (1,2 lub ewentualnie L3). O ile nie powoduje to niestabilności systemu należy wybierać zawsze WB (Write Back) a w przeciwmm razie WT (Write Through). 1) Floppy Disk Access Control; 2) R/W, Read Only; 3) Typowe zabezpieczenie przed kopiowaniem danych z komputera na dyskietkę (pozycja Read Only. tylko odczyt). W pozycji R/W nie ma ograniczeń w dostępie do napędu. 1) Gate A20 Option, 2) Fast Normal; 3) W punkcie tym określić można formę sterowania tzw. bramką A20. która decyduje o sposobie adresowania pamięci powyżej granicy 1MB. W klasycznej architekturze PC przełącznik ten zlokalizowany był fizycznie w kontrolerze klawiatury (opcja Normal). Czas przełączenia jest w tym przypadku stosunkowo długi. Funkcję sterowania przełącznikiem można przenieść do układów sterujących płyty głównej (Chip-Set) co znacznie przyspiesza działanie całego mechanizmu (opcja Fast). 1) Hard Disk Type 47 RAM Area (HDD Setup Area); 2) BIOS, DOS (Reduce DOS Memory Size); 3) W punkcie tym wyznacza się miejsce, w którym przechowywana będzie tabela parametrów konfiguracyjnych dysku typu 47 (User Type). Opcja BIOS wyznacza ten obszar od adresu 0:300h, w przypadku DOS zabierany jest mały fragment z górnego zakresu pamięci 640 KB. 1) HDD Access Control; 2) R/W, Read Only; 3) Mechanizm zabezpieczający pr/ed zapisem na twardy dysk Opcja Read Only ma sens w przypadku MS-DOS i co najwyżej Windows 3. xx. Bez przełączenia w pozycję R/W nie jest niestety możliwy nawet start współczesnych systemów operacyjnych bowiem zapisują one różne informacje do swoich plików konfiguracyjnych i wewnętrznych baz danych o zainstalowanym sprzęcie. 1) HDD Sequence; 2) SCSI/IDE, First ; 3) Patrz punkt Boot Scquence w tej samej sekcji. 1) IDE HDD Błock Modę Sectors (IDE Błock Modę); 2) Disabled HDD MAX 2, 4, 8, 16, 32; 3) Funkcja poprawia parametry dostępu do dysków twardych EIDE bowiem aktywuje tryb multisektorcmy. Proste funkcje zapisu i odczytu operują na pojedynczych sektorach. BIOS analizując sektor informacyjny dysku w odpowiedzi na specjalny rozkaz samoidentyfikacji ocenia możliwości urządzenia w tym zakresie i dopuszcza lub nie możliwości użycia funkcji multisektorowych. Zalecane położenie standardowe to HDD MAX czyli maksymalnie dopuszczalna przez dany dysk liczba jednocześnie przesyłanych sektorów. 1) Memory Fanty Error Check; 2) Enabled Disabled; 3) Punkt ten służy aktywowaniu funkcji kontroli parzystości oile zainstalowane moduły SIMM są odpowiedniego typu. 1) OS Select for DRAM>64MB#1, (OS/2 Onhoard Memory>64M)#2; 2) OS2#1, Non-OS2#1, Enahled#2, Disabled#2; 3) Konieczność aktywacji jedynie w przypadku systemu operacyjnego OS/2 przy rozmiarze pamięci przekraczającym 64MB. W przeciwnym razie obowiązuje położenie standardowe Disabled lub Non-OS2. 1) PCI/VGA Palette Snoop; 2) Enabled, Disabled; 3) Punkt ten odnosi się w zasadzie wyłącznie do systemów wyposażonych w kilka przetworników graficznych (np. ISA i PCI) lub kart symulujących taki zestaw (dekoderyMPEG. urządzenia kombinowane Video-TV-Tuner). Opcja w stanie aktywnym (Hnabled) gwarantuje zgodność barw obrazów wytwarzanych przez każdy z przetworników bowiem tz\v. rejestry palety przekazywane są w niezmiennej formie do obu urządzeń. W pozostałych przypadkach zaleca się położenie standardowe Disabled. 1) Power On Memory Test; 2) Enabled, Disabled; 3) W pozycji Hnabled przeprowadzana jest dokładna a w pozycji Disabled jedynie pobieżna kontrola pamięci. 1) PS/2 Mouse Function Control; 2) Auto Disabled Hnabled; 3) Jeżeli w trybie Auto rozpoznana zostanie obecność myszy PS/2 system przydzieli do jej obsługi przerwanie IRQI2 przez co zostanie ono wyłączone z użycia. W przeciwnym razie przerwanie to stoi do dyspozycji kart rozszerzając) eh ISA i PCI. 1) Oiuck Power On SelfTest (Ouick Boot); 2) Hnabled Disabled; 3) W pozycji Disabled procedury POST kontrolująwszystkie kluczowe punkt) systemu czterokrotnie. Skrócenie tego czasu (Enabled) osiąga się dzięki poprzestaniu na pojedynczym cyklu kontrolnym 1) Security Option; 2) System, Setup; 3) Ustawienie opcji System powoduje, iż żądane |est (zdefiniowane wcześniej w obrębie menu głównego) hasło użytkownika (User Password) piz.v każdorazowej próbie uruchomienia komputera. Uruchomić komputer można naturalnie również przez podanie hasła administratora, o ile takie zostało zdefiniowane. Przełączenie na tryb Setup oznacza ochronę wejścia do programu konfiguracyjncgo przy pomocy hasła administratora (Supervisor Setup). Podanie u tym momencie hasła użytkownika uruchamia okrojoną wersję BIOS-SETUP składającą się z pozycji USER PASSWORD (w celu zmiany własnego hasła) oraz. wyjść z programu (SAVE & EX1T SETUP, EX1T WITHOUT SAVING). W trybie Setup komputer może być uruchomiony bez hasła. 1) Sliadow Memory Cacheable; 2) Enabled, Disabled; 3) Bloki pamięci stałej ROM/EPROM których zawartość została skopiowana do pamięci operacyjnej, mogą być objęte dodatkowo działaniem pamięci podręcznej (Enabled). Proszę porównać punkty System BIOS Cacheable oraz Video BIOS Cacheable w sekcji CHIPSET FEATURES SETUP. 1) Swap Floppy Drive; 2) Enabled, Disabled; 3) Odpowiada opcji Onboard FDC Swap A&B w sekcii 1NTEGRATED PERIP1 IERAES lub CHIPSET FEATURES SETUP. 1) System BIOS Shadow; 2) Enabled, Disabled; 3) Opcja określa, czy dostęp do BIOSu komputera będzie odbywał sięza pośrednictwem bezpośrednich odwołań do pamięci stałej EPROM (ROM), czy też poprzez odwołania do jego kopii w operacyjnej pamięci dynamicznej komputera (RAM). Opcja Enabled jest bardziej korzystna, bowiem czas dostępu do pamięci stałej jest dużo dłuższy niż do RAM. 1) System Warmup Delay; 2) 10s, 20s, 30s, 40s; 3) Dodatkowy czas oczekiwania na rozruch pewnych urządzeń peryferyjnych. Niektóre drukarki laserowe potrzebują sporo czasu na rozgrzanie zanim mogą zameldować gotowość. O tyle wydłuża się okres rozruchu systemu. 1) Try Other Boot Devices; 2) Enabled, Disabled; 3) W pozycji Enabled system przeszukuje wszelkie możliwe dyski i napędy pod kątem obecności sektora lądującego (BOOT-SECTOR) jakiś system operacyjny. 1) Typematic Delay (Msec); 2) 250, 500, 750, 1000; 3) Czas repetycji ( w milisekundach), czyli opóźnienia w oczekiwaniu na kolejny emitowany przez klawiaturę znak w przypadku nie zwolnienia naciśniętego klawisza. 1) Typematic Ratę (Chars / Sec); 2) 6, 8, 10, 12, 15, 20, 24, 30; 3) Szybkość (w znakach na sekundę) z którą klawiatura rejestruje następujące po sobie uderzenia w klawisze. Z tą też częstotliwością klawiatura będzie emitowała znaki w przypadku trwałego naciśnięcia klawisza. 1) Typematic Ratę Selting; 2) Enabled, Disabled; 3) Opcja w położeniu Enabled aktywuje dwa kolejne punkty: Typematic Ratę i Typematic Delay. Obydwa służą programowaniu czasów reakcji klawiatury. 1) VGA Hoot From; 2) PCI, AGP; 3) W systemach wyposażonych w dwie karty graficzne (jedna AGP a druga PCI) system korzysta w trakcie rozruchu tylko z jednej z nich. 1) Video BIOS Shadow (Video ROM BIOS Shadow); 2) Enabled, Disabled; 3) W punkcie tym określamy, czy dostęp do BIOSu karty graficznej będzie odbywał się za pośrednictwem bezpośrednich odwołań do pamięci stałej EPROM (ROM), czy też poprzez odwołania do jego kopii w operacyjnej pamięci dynamicznej komputera (RAM). Czynnikiem decydującym jest tutaj czas dostępu, bowiem okres odpowiedzi pamięci stałej jest dużo dłuższy. Opcja Enabled jest przez to bardziej korzystna. 1) Virus Warning (Boot Virus Warning); 2) Enabled Disabled; 3) Aktywacja systemu nadzoru wywołań przerwania INT13h., Tabela A.3. AWARD BIOS, CHIPSET FEATURES SETUP. 1) Punkt; 2) Opcje; 3) Wyjaśnienie; 1) AGP Aperture Size (Graphics Aperture Size); 2) 4MB, 8MB, 16MB, 32MB, 64MB, 128MB, 256MB; 3) Maksymalny wymiar pamięci operacyjnej, która może być oddana do dyspozycji AGP. Wartości ustanowionej przez BIOS nie należy zmieniać (zależy ona od ilości pamięci zainstalowanej w systemie). 1) Alarm w hen CPU Ovcrheat; 2) Enabled, Disabled; 3) Aktywacja opcji (Enabled) uruchamia dodatkowe okno opisane jako CPU Temperatur Selcct. Zalecana jest wartość z przedziału 50 - 60°C. 1) Auto Configuration; 2) Enabled, Disabled; 3) Aktywacja konfiguracji automatycznej (Enabled) blokuje część z dalszych punktów wpisując w nie pewne wartości określone przez BIOS. Jeżeli chcemy przeprowadzać eksperymenty poprzez manipulowanie parametrami w sekcji CHIPSET FEATURES SETUP musimy przejść na system ręczny wyłączajac system automatyczny (Disabled). 1) Burst Write Combining; 2) Enabled, Disabled; 3) Jeżeli wybrano opcje Enabled układy sterujące pl\ty głównej starają się grupować następujące po sobie cykle PCI i zamieniać je w |edcn. 1) CPU Fan Control; 2) Enabled Disabled; 3) Jeżeli wybrana zostanie opcja Enabled pojawia się dodatkowa linijka CPUFan Fail Alarm, którą można również aktywować lub wyłączyć (Enabled / Disabled) 1) CPU to PCI Write Posting; 2) Enabled, Disabled; 3) Opcja Enabled uruchamia specjalny bufor przechowujący żądania CPU kierowane w stronę magistrali PCI. Bufor taki przyspiesza znacznie działanie syslemu. bowiem procesornie musi czekać na zwolnienie magistrali PCI. 1) Current CPU Temperaturę, Current CPU Fan Speed, Current CPUVCore A, Current CPUVCore B, Current +3.3V,CUrrent +5V, Current + 12V, Current -12 V, Current -5 V, Current Battery Lite; 2) -; 3) Okienko informacyjne wielokanałowego systemu nadzorowania (Hardware Monitor). Użytkownik nie ma możliwości dokonywania żadnych zmian w tym obszarze. 1) Data Integrity Modę (DRAM Data Integrity Modę); 2) Non-ECC, EC-Only; ECC; 3) Informacja w tym polu jest jedynie wyświetlana i nie może być modyfikowana Non-ECC oznacza całkowity brak funkcji kontrolnych ECC (klasyczne moduły pamięci). Zapis EC-Only informuje, iż system jest zdolny jedynie do rozpoznawania błędów ale nie jest w stanie ich korygować. Przy sianie ECC oczekuje się. iż błędy na pojedynczych polach bitowych będą nie tylko rozpoznawane ale i automatycznie korygowane. Błędy wielobitowc będą sygnalizowane. 1) DRAM arę xx bits wide; 2) xx=64, xx=72; 3) BIOS wyświetla w tym polu wynik rozpoznania szerokości magistrali danych modułów pamięciowych. Standardowa szerokość wynosi 64 natomiast 72 dla modułów ECC. 1) DRAM ECC/Parity Select; 2) ECC, Parity; 3) Dodatkowy bity pamięciowe modułów można wykorzystać do kontroli parzystości lub do kontroli ECC 1) DRAM Idle Timer (DRAM Page Idle Timer); 2) Detault 1T, 2T; 3) Liczby cykli jałowych poprzedzających zamknięcie strony pamięci dynamicznej. Zaleca się pozostawienie opcji Default. 1) DRAM Read Leadoff Tiining, DRAM Write Leadoff Timing; 2) 4, 5, 6 ,7; 3) Opcje określają długość cyklu wprowadzającego przy dostępie grupowym (Burst). oddzielnie dla zapisu i odczytu. Najbardziej pożądana wartość to oczywiście 1. ale takiej nie oferował żaden z zestawów sterujących Chip-Set (FX co najmniej 7 a MX w najlepszym razie 4 i to przy najwyższej jakości pamięciach EDO 50 ns i zredukowanej częstotliwości magistrali do 50 lub 60 MHz). BIOS nie daje na ogól zbyt szerokiego pola manewru w tym punkcie, często do dyspozycji stoją jedynie dwie wartości. 1) DRAM Read Around Write; 2) Enabled, Disabled; 3) Magistrala pamięciowa buforuje we własnym zakresie cykle dostępu do pamięci. Jeśli opcja jest aktywowana (Enabled). procesor może sięgać do danych spoczywających w tych buforach. W przeciwnym razie trzeba oczekiwać aż informacja zostanie utrwalona w pamięci i dopiero stamtąd ją pobierać. 1) DRAM Read Burst Timing; 2) x-2-2-2, x-3-3-3, x-4-4-4; 3) Opcja odnosi się do pamięci EDO oraz FPM i definiuje formatgrupowych (Burst) cykli dostępu do odczytu: po fazie wprowadzającej x (trwającej określoną ilość taktów) następują trzy kolejne cykle dostępu zajmujące 2. 3 lub 4 takty zegarowe. Należy wybierać jak najkrótszy zestaw (Burst idealny to 1-1-1-1 ) ale taki, który akceptuje moduł pamięci - system pracuje stabilnie i nie zawiesza się. Zakres wartości dla FPM leży w zakresie x-3-3-3 do x-4-4-4. Pozycja x-2-2-2 zarezerwowana jest wyłącznie dla pamięci EDO i to tych najwyższej jakości. 1) DRAM Turbo Readl Leadoff; 2) Enabled, Disabled; 3) W położeniu Enabled ulega skróceniu o jeden impuls zegarowy cykl wprowadzający (Eeadoff). Opcja dostępna jest w systemach z magistralą 50 - 60 MHz i tylko w takich, które nie mają pamięci podręcznej E2. 1) DRAM Refresh Ratę; 2) Defauff, Fast; 3) W położeniu Fast spowolniona zostaje częstotliwość odświeżania (i rośnie teoretyczne ryzyko utraty danych) w stosunku do gwarantowanej i bezpiecznej wartości przy wybraniu opcji Defauff. 1) DRAM Speculative Leadoff; 2) Enabled, Disabled; 3) Opcja występuje na płytach z zestawem FIX i magistralą 66 MHz. Jej aktywacja (Enabled) powoduje nieznaczne przyspieszenie pracy systemu, bowiem kontroler pamięci może przystąpić do przygotowania adresu lokalizacji (zakładając dostęp sekwencyjny) przed zakończeniem przygotowań do przetworzenia samego rozkazu odczytu. 1) DRAM Speed (DRAM Timings) (Memory Typc); 2) 50ns, 60ns, 70ns; 3) Opcja mająca odniesienie wyłącznie do pamięci dynamicznych EDO i FPM przez co w chwili obecnej raczej bez znaczenia. Mimo iż jest jeszcze sporo płyt z gniazdami SIMM, nie są one stosowane chociażby ze względu na wysoką cenę. Moduły tego typu budowane były z kostek o różnym czasie dostępu. Na początku królowały wykonania 70ns, po nich dołączyły również nieco lepsze 60ns a w końcowej fazie również 50 ns. 1) DRAM Write Burst Timing; 2) x-2-2-2, x-3-3-3, x-4-4-4; 3) W punkcie tym definiuje się format Burst przy zapisie. Dla modułów 70 ns należy przyjąć wartość x-4-4-4. a dla wersji 60 ns format x-3-3-3 . W pozycji x-2-2-2 system ma szansę na stabilną pracę jedynie z wysokiej jakości modułami 50 ns. 1) EDO CASx# Wait State, EDO RASx# Wait State; 2) 1, 2, 3, 4; 3) Stabilna praca systemu opartego na modułach pamięciowych EDO wymaga wybrania wartości z zakresu 3 - 4. 1) ISA Clock (ISA BUS Clock); 2) 2/4, 2/5, 2/6, 1/2, 1/3, 1/4, PC1CLK/3, PC1CLK/4; 3) Częstotliwość taktowania magistrali ISA określona jest standardowo na 8.33 MHz a stojące do dyspozycji opcje pozwalają zwykle na manipulacje w zakresie od kilku do kilkunastu Ml Iz. Podnoszenie tej częstotliwości nie przyspiesza bynajmniej pracy klasycznego kontrolera IDE ani urządzeń typu modem czy karta dźwiękowa. Pozytywny wpływ odnotowuje się natomiast w przypadku kart graficznych z lvm tylko zastrzeżeniem, że istnieje spore niebezpieczeństwo przetaktowania pamięci i w najlepszym razie wywołanie niestabilnej pracy całego systemu (a w najgorszym uszkodzenia karty VUA na skutek przegrzania). Ryzyko uszkodzenia grozi naturalnie również innvm kartom ISA. Wartość przelicznika odnosi się do magistrali procesora.W przypadku 50 MHz i opcji 1/4 częstotliwość zegara szyny ISA wynosi 12.5 MHz. Jeżeli takt ISA uzyskiwany jest z magistrali PCI do dyspozycji stoją opcje PCICLK/3 (10 MHz) i PCICLK/4 (8.25 MHz) 1) L2 Cache Cacheable Size; 2) 64 M B 512MB; 3) Duża ilość zainstalowanej pamięci operacyjnej nie gwarantowała bynajmniej dobrych parametrów wielu komputerów z procesorami Pentium. Rozbudowa pamięci powyżej 64 MB przynosiła w tym przypadku skutek odwrotny od zamierzonego czyli spowolnienie całego systemu. Tylko nielicznezestawy układów płyty głównej mogły pokrywać zasięgiem pamięci podręcznej obszar przekraczający 64 MB (z produktów Intela jedynie 11X). Aby wykorzystać tę funkcję trzeba było ponadto umieścić na płycie dodatkowy układ scalony (TAG-RAM). Wtedy można było dopiero aktywować opcję 512 MB. 1) McmoiA Hole at 15/16MB (Hole At 15M-16M); 2) Enabled,Disabled; 3) Karty rozszerzające ISA są w stanic adresować pamięć w zakrcsic od O do 16 MB. Dla potrzeb kart. które potrzebują pamięci można zarezerwować wycinek l MB / górnego /akresu pr/estr/eni adresowej (tj. 15- 16 MB)ale należy pamiętać, iż staje się on przez to niedostępny dla rcszty systemu. 1) Passive Release; 2) Enabled,Disabled; 3) Jeżeli wybrana została opcja Enabled procesor może zwracać się do magistrali PCI również wtedy, gdy jest ona aktualnie zajęta transmisją danych Właściwość ta wbudowana została do standardu PCI dopiero od wersji 2.1. 1) PCI Streaming, (Snoop Ahead); 2) Enabled,Disabled; 3) W pozycji Enabled dopuszcza się do grupowania następujących po sobie żądań dostępu (PC-Streaming) nawet gdy są wystosowywane przez, różne urządzenia. 1) Peer Concurrency; 2) Enabled,Disabled; 3) W położeniu linabled możliwy jest jednoczesny dostęp do pamięcizarówno pr/.e/ CPU jak i urządzenia PCI. 1) Pipeline Cache Timing; 2) Faster, Fastest; 3) Punkt dotyczy zależności czasowych w obrębie pamięci podręcznej. Należy wybrać opcję Fastest. 1) SDRAM CAS Latency, (SDRAM CAS Latency Time); 2) 2T, 3T, Auto; 3) Czas opóźnienia TCF (CAS Fatency). Jest to odstęp pomiędzy przekazaniem adresu kolumny (czyli zakończeniem rozkazu odczytu) a momentem pojawienia się danych na końcówkach wyjściowych. mierzony w cyklach zegara taktującego pamięci SDRAM. 1) SDRAM ConFiguration; 2) By SPD; 3) Opcja By SPD (Serial Prcsencc Detect) oznacza, iż parametry dostępu dopamięci SDRAM pobrane zostaną z pamięci konfiguracyjnej umieszczonej na module pamięciowym. 1) SDRAM RAS Precharge Time; 2) 3T, 2T; 3) Czas opóźnienia TRP (RAS Precharge Time) niezbędnego do przygotowania banku (upływający od ostatniej deaktywacji do momentu podania adresu nowego wiersza), wyrażany w cyklach zegara. 1) SDRAM RAS to CAS Delay; 2) 2T, 3T; 3) Czas opóźnienia TRCD (RAS to CAS Delay) czyli wartość przerwy czasowejkoniecznej pomiędzy podaniem adresu wiersza a podaniem adresu kolumny, wyrażana w cyklach zegara. 1) Shutdown Temperaturę; 2) 60°C, 65°C, 70°C, 75°C; 3) Temperatura, przy której następuje ograniczenie częstotliwości taktowania procesora (o współczynnik określony w punkcie Słów Dow n CPU Duly Cycle) w celu obniżenia ilości wydzielanego ciepła. 1) Słów Down CPU Duty Cycle; 2) Normal, 12.5%, ... , 75%; 3) W momencie osiągnięcia temperatury określonej w punkcie Shutdown Temperaturę następuje procentowa redukcja częstotliwości taktowania (w krokach po 12.5%). 1) System BIOS Cacheable, Video BIOS Cachcable; 2) Enabled,Disabled; 3) Skopiowane do pamięci dynamicznej programy BIOS mogą podlegać dodatkowo działaniu pamięci podręcznej. 1) Turn Around Insertion; 2) Enabled,Disabled; 3) W pozycje Enabled wprowadzany jest dodatkowy cykl oczekiwania (l WS) separujący następujące po sobie cykle dostępu do pamięci. Opcję należy wyłączyć (Disabled lub OWS) jeżeli tylko nie pogarsza to stabilności systemu.(1WS/OWS) 1) Video Memory Cache Modę (Video RAM Cache Mcthod); 2) UC, USWC; 3) USWC (Uncachable Speculative Writc Combining) stanowi specjalny tryb dostępu, którym posługiwać się mogą nowoczesne procesory. Pojedyncze cykle zapisu do pamięci obrazu (Franie Buffer) grupowane są w tym wypadku w jeden większy pakiet, co obniża natężenie ruchu na magistrali. Właściwość ta poprawia wprawdzie nieco ogólne parametry systemu ale wymaga wsparcia ze strony karty graficznej i nie jest jeszcze powszechnie implementowana. Jakkolwiek sterowniki graficzne systemów operacyjnych ignorują na ogól ustalenia BIOS w tej dziedzinie, przed jej uruchomieniem należy dokładnie zaznajomić się z danymi technicznymi posiadanej karty graficznej, bowiem pochopna aktywacja spowoduje zawieszenie się komputera. Położenie standardowe to UC (Uncachable). 1) Video RAM Cacheablc; 2) Enabled, Disabled; 3) Pamięć obrazu (Frame Buffer) może również podlegać działaniu pamięci podręcznej. Aktywacja tej opcji w przypadku nowoczesnych kart graficznych nic przynosi szczególnychefektów. 1) PCI 2.1 Compliancc (PC 12.1 Suppor1); 2) Enabled, Disabled; 3) Aktywacja rozszerzeń standardu PCI (Delayed Transaction i Passive Releasc) zaimplementowanych w wersji 2.1 specyfikacji. Przed aktywacją tych funkcji należy się upewnić, czy wszystkie zainstalowane w systemie karty PCI zgodne są z wersją 2. 1 . Niektóre programy konfiguracyjne pomijają ten punkt menu i w zamian za to oferują możliwość bezpośredniego dostępu do mechanizmów aktywujących wspomniane funkcje. 1) 8/16 Bit 1/0 Recovery Time (16 Bit 1/0 Recovery Time); 2) NA 1 BUSCLK, 2 BUSCLK, 3 BUSCLK, 4 BUSCLK; 3) Kolejne następujące po sobie odwołania do portów I/O muszą być rozdzielone pewną przerwą czasową. Im jest ona krótsza tym sprawność systemu jest wyższa. Nastawy dotyczą wyłącznie kart ISA (zarówno krótkich 8-bitowvch jak i długich 16-bitowych). Tabela A.4. A WARD BIOS, POWER MANAGEMENT SETUP. 1) Punki; 2) Opcje; 2) Wyjaśnienie; 1) **PM Timers**, HDD Power Down, (IDL Spmdown), (Hard Disk Time Out); 2) Disabled: 1, 2, ,,, , 15min; 3) Czas po którvm silnik dysku (lub dysków) ulegnie zatrzymaniu o ile system nie zarejestruje żadnego z wydarzeń zadeklarowanychjako PM-Lvents. Funkcja oddziah wuje wyłącznie na dyski IDL (w przypadku urządzeń SCSI należy posługiwać się innymi metodami). 1) **PM Timers**, Suspend Modę; 2) Disabled: 30sce, 1 min, 2 min, 4 min, 8 min, 20 mm, 30 min, 40 min, 1 Hour; 3) Czas przejścia systemu do stanu Suspend. jeśli nie zostały zarejestrowane żadne z w>darzeń zadeklarowanych |ako PM-Lvcnts. W trybie tym wyłączeniu ulegają w miarę możliwości wszystkie składniki s\stemu pióez procesora. który pracuje na minimalnych obrotach. 1) **PM 'I'imers** ,Dozę Modę; 2) Disabled: 30sec, 1 min, 2 min, 4 min, 8 min, 20 min, 30 min, 40 min, 1 Hour; 3) Wiele systemów implementuje trójstopniowy system redukcji mocy. Dozę Modę to pierwszy /. tych stopni. w którym redukowana jest jedynie częstotliwość taktowania procesora. W drugim kroku przechodzi się do trybu Standby a dalej do Suspend. 1) AC PWR Loss Restart; 2) Enabled, Disabled; 3) W punkcie tym można określić zachowanie się komputera po zaniku napięcia zasilającego. Komputer może startować automatycznie skoro tylko rozpoznane zostanie ponownie napięcie zasilające (opcja Enabled) lub pozostawać wyłączony (opcja Disabled) mimo pojawienia się zasilania. 1) Automatic Power Up; 2) Disabled, Evcryday#1, By Datę#2; 3) Umożliwia zaprogramowanie automatycznego startukomputera: #1 Codziennie o tej samej godzinie,#2 Jednorazowo określonego dnia o określonej godzinie 1) CPU FanOff m Suspend; 2) Enabled, Disabled; 3) Opcja powoduje wyłączenie wentylatora CPU po przejściu systemu w tryb oszczędnościowy Suspend. Zalecane położenie Disabled bowiem procesor powinien być zawsze chłodzony. 1) Dozę Modę Speed (Słów Clock Ratio ); 2) -; 3) W punkcie tym można wybrać jedną z obniżonych częstotliwości, którą będzie taklowan\ procesor w trybie Dozę. 1) IRQ8 Clock Event (IRQ8 Break Suspend); 2) Enabled, Disabled; 3) Jeżeli opcja jest aktywna, komputer może być wyprowadzany z fazv Suspend poprzez, system alarmowy zegara czasu rzeczywistego RTC (Real Time Clock) 1) Modem Ring On / Wake On Lan; 2) Enabled, Disabled; 2) Opcje dotyczące uruchamiania komputera na sygnał z modemu i karty sieciowej grupowane są często w jednym punkcie. 1) Modem Ring Power On (PWR Up On Modem Act); 2) Disabled, Enabled; 3) Modem może (Enabled) lub nie może(Disabled) uruchomić zasilacz komputera w przypadku stwierdzenia aktywności na linii telefonicznej. 1) Modem Use; 2) IRQ, IRQ3 1RQ4; 3) Obudzenie komputera ze stanu uśpienia w momencie stwierdzenia aktywności modemu wymaga podania linii przerwania portu COM do którego jest on podłączony. 1) PM Control by APM; 2) Yes, No; 3) Funkcje oszczędnościowe warto jest powierzyć kontroli APM (Advanced Power Management) aktualnie pracującego systemu operacyjnego (opcja Yes). Dzięki temu wykorzystuje się przykładowo rozkaz. MALT powodujący nie tylko spadek zużycia energii ale i również (pośrednio) obniżenie temperatury procesora i wydłużenie czasu jego życia. 1)Power - Supply Type; 2) Auto, ATX, P8&P9; 3) Niektóre programy BlOS-Setup żądają podania typu zasilacza: ATX lub AT (P8&P9). W trybie Auto zasilacz rozpoznany zostanie samoczynnie. 1) Power Down & Resume Lvents:Primary IDE 0, Primary IDE 1, Sccondary IDE 0, Sccondary IDH 1, Floppy Disk, Serial Port, Parał lei Port; 2) Enabled, Disablcd; 3) Lista urządzeń (w formie bezpośredniej lub w formie linii przerwań), których aktywność wyprowadza komputer ze stanu Suspcnd. 1) Power Management; 2) Enabled/Disablcd#1, Disabled#2, User Dcfined#2, Min Saving#2, Max Saving#2; 3) Główny sterownik systemu oszczędnościowego i zarządzania poborem mocy. Punkt ten występuje w jednej z dwóch form: uproszczonej (1) lub rozbudowanej(2). Wybranie opcji Disabled blokuje zwykle kilka dalszych punktów, np. SuspcndModę oraz HDD Power Down. Opcje Min Saving i Max Saving stanowią zbiór specjalnie dobranych parametrów, które niekoniecznie muszą być optymalne w konkretnym przypadku. Max Saving powoduje przejście do najwyższego stopniaredukcji wyłączając pra\\ie wszystko co da się wyłączyć już po jednej minucie braku aktywności ze strony użytkownikalub samego komputera. Częste wyłączenie silników dysków przynosi więcej szkody niż pożytku. Min Saying wyłącza po 15 minutach dyski a po godzinie resztę. Te dwie opcje iekoniecznie muszą występować we wszystkich wersjach BIOS. Zawsze jest natomiast obecny punkt UserDefined (lub Knabled w wersji uproszczonej) co pozwala wyznaczyć parametry systemu oszczędnościowegowedług własnego uznania. 1) Resume by Alarm; 2) Enabled, Disablcd; 3) Jeżeli opcja jest aktywna (Hnabled) pojawia się dodatkowa linijka umożliwiająca wprowadzenie daty (ale tylko jako kolejnego dnia aktualnego miesiąca) ora/ dokładnego czasu (hh:mm:ss). W lak określonym momencie nastąpi automatyczne uruchomienie komputera. 1) Resume by Ring; 2) Enabled, Disablcd; 3) Rejestracja aktywności na linii Ring modemu (dzwoni telefon) powoduje star zasilacza i uruchomienie komputera. 1) Soft off by PWR-BTTN#1 (PWR Button < 4Sec)#2; 2) Instant-Off#1, Del 4 sec#1, oft-Off#1, Suspcnd#2, No function#2; 3) W punkcie tym określa się działanie kontaktu sterującego zasilacza ATX. Służy on zarówno do włączania jak i włączania komputera. Opcja ta dotyczy jednak wyłącznie zachowania się przy wyłączaniu. Zwarcie kontaktów sterujących na czas dłuższy niż 4 sekundy powoduje zawsze wyłączenie. Soft-OIT (ewentualnie Instant-Off) wywołuje reakcję natychmiastową bez czasu oczekiwania. Opcja Suspend nie przenosi komputera w stan Stand-By a jedynie w tryb oszczędnościowy Suspend. W trybie No Function pozostaje jedynie standardowe znaczenie (konieczność naciskania przez czas co najmniej 4 sekund). 1) Standby Modę; 2) -; 3) Czas. po którym system przechodzi do stanu Standby. 1) Standby Modę Speed; 2) -; 3) Niektóre programy konllguracyjne pozwalają na niezależną regulację zredukowanej częstotliwości taktowania procesora w trybie Standby. 1) Suspend Switch (Green Switch); 2) Enabled, Disabled; 3) W punkcie tym dokonuje się programowej aktywacji kontaktu doprowadzającego do płyty głównej sygnał z przełącznika wymuszającego przejście komputera w stan Suspend. Jako przełącznik te wykorzystuje się zwykle obecny w wielu obudowach przycisk TURBO, którego pierwotne znaczenie (obniżenie prędkości zegara CPU) przestało odgrywać jakąkolwiek sensowną rolę. Wymuszenie stanu Suspend można również osiągnąć konfigurując odpowiednio wyłącznik zasilania (w punkcie Soft off by PWR-BTTN). Krótkotrwałe naciśnięcie interpretowane jest jako żądanie przejścia w tryb Suspend. w celu wyłączenia komputera przycisk należy przytrzymać przez 4 sekundy. 1) VGA Active Monitor; 2) Enabled, Disabled; 3) Punkt ten umożliwia powstrzymanie przejścia komputera w stan uśpienia (mimo braku aktywności klawiatury i myszy) jak długo system rejestruje aktywność na wyjściu karty graficznej. Aktywacja tej opcji pozwoli na odtworzenie długiej sekwencji wideo niezakłócanej przerwami na wyrywanie komputera z fazy uśpienia. 1) Video OffMethod; 2) DPMS OFF, DPMS Reduce ON, Blank Screen, V/H Sync+Blank, DPMS Standby, DPMS Suspend; 3) Opcja wybiera sposób sygnalizacji wyłączenia monitora. Karta graficzna nie może po prostu odciąć zasilania od samego monitora. Istnieje kilka sposobów sygnalizacji. Te najbardziej skuteczne to sterowanie liniami synchronizacji. Większość monitorów wyłącza tor wizyjny jeśli pozbawić je sygnałów synchronizacji. Wszystkie nowoczesne kartyspełniają ponadto wymogi określane przez specyfikację DPMS (Display Power Management Signaling) co umożliwia wybór jednej z opcji z grupy DPMS ... . len uniwersalny system pozwala programowi BIOS przesłać pewne informacje do monitora. Blank Screen wywołuje jedynie modulację sygnału wizyjnego 100% sygnałem czerni i może być stosowany jako "ostatnia deska ratunku" w przypadku urządzeń nie spełniających żadnych nowoczesnych norm. 1) Video OITOption; 2) Suspend->Off, Standby->Off, Al Modes->Off, Always On; 3) Opcja decyduje o tym. w którym z trybów oszczędnościowych ma zostać wyłączony monitor. Wybranie Always On pozostawia monitor w stanie aktywnym niezależnie od poziomu. 1) Wake On LAN; 2) Enabled, Disabled; 3) Niektóre karty sieciowe mają możliwość generowania impulsu startowego dla zasilacza komputera w odpowiedzi na rozpoznanie pakietu adresowanego do siebie. W punkcie tym opcja taka zostaje dopuszczona (Enabled) lub wykluczona (Disabled). 1) Wake Up Events in, Doze&Standby: (**Reload Global Timer Events**): IRQ[3-7,9-15], NMI Primary IDE 0, Primary IDE 1, Secondary IDE 0, Secondary IDE 1, Floppy Disk, Serial Port, Parał lei Port;2) Enabled Disabled; 3)Eista urządzeń (w formie bezpośredniej lub w formie linii przerwań), których aktywność wyprowadza komputer ze stanu Dozę lub Standby. Tabela A.5. AWARD BIOS, PNP/PCI CONFIGURATION 1) Punki; 2) Opcje; 3)Wyjaśnienie; 1) Assign IRQ to PCI VGA Card; 2) -; 3) Równoważna opcji Assign IRQ For V(iA w punkcie BIOS EEATLIRES SETUP 1) DMAx\Usedby ISA1 (DMA-.\x assigned to: ): 2) No/ICU#1, Yes#1, PCI/ISA PnP#2, Eegacy ISA#2; 3) W punkcie tym wykluczeniu ulegają te kanały DMA. które przydzielone zostały klasycznym kartom ISA (Eegacy ISA). Jeżeli w systemie nie ma takich kart i tym samym wszystkie urządzenia są PnP wybieramy opcje No/ICU (lub PCI/ISA PnP) xx=0, 1, 3, 5, 6, 7 1) IRQxx Usedby ISA#1 (IRQ-xx assigned to: )#2: 2) No/ICU#1, Yes#1, PCI/ISA PnP#2, Eegacy ISA#2 3) Klasyczne karty ISA (Eegacy ISA) nie umieją dzielić linii przerwań i każda zabiera przynajmniej jedno z nich. Przerwanie takie należyzablokować przy pomocy opcji Used by ISA / Yes lub assign to Eegacy ISA i od tej pory nie stoi już ono do dyspozycji systemu PCI. mimo iż system len gospodaruje przerwaniami dużo bardziej racjonalnie pozwalając na to. b\ co najmniej kilka urządzeń dzieliło miedzy siebie jedną i tą samą linie. xx=3, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15 1) ISA MEM Błock BASE 2) N/A, C 800, CC00, DOOO, D400, D800, DC00, D111; 3) Umożliwia pr/ydzial klasycznym kartom ISA pewnego bloku pamięci o określonym adresie początkowym i rozmiarze. Jeżeli karty spełniają w\maźania specyfikacji PnP można wybrać opcję N/A. bowiem system przydzieli samoczynnie stosowne bloki pamięci. 1) ISA MEM Błock SIZE; 2) 8K, 16 K, 32K, 64K; 3) Opcja staje się dostępna w\ momencie wyboru jednego z adresów bazowych w punkcie ISA MHM Błock BASH i określa rozmiar bloku pamięci przydzielonego do karty Legac ISA. 1) Offboard PCI IDE Card; 2) Auto, Slot-1, Slot -2, Slot-...; 3) W przypadku rezygnacji z usług zintegrowanego kontrolera IDE i instalacji innego w formie karty PCI należy podać numer gniazda (Slot-x) w którym został on zamontowany. Jeżeli numeracja gniazd nie jest znana wybrać należy opcję Auto. 1) PCI Bus Parking; 2)-; 3) Aktywacja tej funkcji pozwala na możliwości przyznania pewnym określonym urządzeniom szczególnych uprawnień polegających na długotrwałej rezerwacji szyny PCI wyłącznie dla własnych potrzeb. 1) PCI IDE Bus Master; 2) Enabled; Disabled; 3) W punkcie tym aktywujemy tryb Bus-Master dla kontrolera ID1E. Z punktu widzenia ogólnej sprawności systemu opcja powinna się znajdować w pozycji Enabled. chociaż niektóre systcmY operacyjne (Windows 95) żądają wprowadzenia swoich własnych sterowników programowych. W takim wypadku należy wybrać opcję Disabled. 1) PCI IDF IRQ Map to; 2) Auto, ISA; 3) W punkcie tym decydujemy o przydziale linii przerwań IROJ4 i IRQ15 Jeżeli posługujemy się kontrolerem PCI-IDK (kontroler zintegrowany na płycie to też urządzenie PCI) należy wybrać opcję Auto. Kontroler na karcie ISA wymaga ustawienia opcji ISA. 1) PCI Latency Timer; 2) 32 PCI CLOCK, 64 PCI CLOCK, 248 PCI CLOCK; 3) Wymiar fizyczny tego parametru to dopuszczalny wymiar czasu przez jaki dowolne urządzenie może zajmować magistralę PCI. Przyjęło się uznawać, iż im mniejsza wartość w tym polu tym większa jest wydajność magistrali PCI (standardowa wartość opcji w AWARD BIOS wynosi 32 a dla AMIBIOS 64). Krótka wartość parametru ułatwia z. pewnością obsługę urządzeń którym spieszno jest przekazać dane. Z drugiej jednak strony cierpią na tym urządzenia transmitujące długie bloki informacji. 1) PCI Slot-x 1RQ Priority; 2) Default; 3) Priorytet gniazd PCI określony jest standardowo (Detault) w ten sposób, iż najwyższy priorytet ma gniazdo oznaczone numerem 1 (Slot-1). Systemu tego nic należy zmieniać bez wyraźnegopowodu. 1) PCI-IRQ activated by; 2) Edge, Level; 3) Możliwość dzielenie jednej i tej samej linii przerwań sprzętowych pomiędzy kilka kart PCI (IRQ-Sharing) wynika między innymi z faktu, iż aktywują one linie IRQ przez zmianę poziomu napięcia (Level). Alternatywna metoda, którą dzisiaj już nikt się nie posługuje to wyzwalanie zboczem (Edge). 1) Primary IDE INT#, Secondary IDE INT#; 2) INTA, INTB, INTC, INTD; 3) W punkcie tym można określić, które z przerwań PCI przydzielone zostaną poszczególnym kanałom kontrolera PCI-IDE. W typowej konfiguracji przydziela się INTA kanałowi pierwotnemu i INTB kanałowi wtórnemu. 1) Reset Configuration Data (Clear NVRAM on every Boot); 2) Enabled; Disabled; 3) Baza danych I:SCD (EnabledSystem Configuration Data) o aktualnie zainstalowanych urządzeniach będzie skasowana przed kolejnym startem systemu (Enabled). Opcję należy aktywować przed instalacją nowych składników. Po pierwszym starcie powraca ona automatycznie do pozycji Disabled. 1) Resources Controlled By#1, PnP OS Installed#2, Pług & Play Aware O/S#2; 2) Manuał#1, Auto#1, Yes#2, No#2; 3) Punkt ten sianowi główny wyłącznik systemu automatycznej konfiguracji PnP. Wybranie opcji Auto powoduje zamaskowanie szeregu dalszych pól kontrolnych: IRQ-xx assigned to, DMA-xx assigned to oraz Used MEM base addr. System poddaje się manipulacjom i uznaje ręczny przydział zasobów jedynie w pozycji Manuał. Konfiguracja gniazd PCI (przydział zasobów) przeprowadzana jest wice albo poprzez BlOS-Setup (No) albo przez, system operacyjny (Yes). Możliwości PnP systemów operacyjnych są nadal mocno ograniczone i bezpieczniej jest wykonać to samodzielnie pod warunkiem iż wie się co się robi. Przy przełączeniu na Yes lub Auto należy liczyć się z tym, iż to co widać na ekranie BlOS-Setup może ulec zmianie w momencie uruchomieniasystemu operacyjnego. 1) Slot 1 IRQ, Slot 2 IRQ, Slot 3 IRO, Slot 4/5 IRO; 2) NA Auto 5, 7, 9, 10, 11, 12, 14, 15; 3) Sposób przydziału linii przerwań poszczególnym gniazdom PCI. W pozycji Auto ma miejsce przydziałautomatyczny. 1) USB IRQ (Assign IRO For USB); 2) Enabled, Disabled; 3) Funkcjonowanie złącza USB wymaga przydziału jednej z linii przerwań IRQ. która staje się naturalnie niedostępna dla innych urządzeń. Opcję lepiej jest więc deaktywować. chyba że rzeczywiście posługujemy się magistralą USB. Patrz też punkt USB Function w sekcji INTHGRATHn PHRIPIHIRALS. Tabela A.6. AWARD BIOS, INTEGRATED PERIPHERALS W nowych wersjach A WARD BIOS opcje zawarte punkcie Integratecl Peripherals zostały wchłonięte przez Chipset Features Setup 1) Punki; 2) Opcje; 3)Wyjaśnienie; 1) HCP DMA Sclcct; 2) Disablcd, DMA1, DMA3; 3) Opcja staje się aktywna wylącznie wtedy gdy wybrany został jeden z wariantów zawicrajneych HIT (HCP lubHCP+HPP) w punkcie Onhoard Parallel Modę. 1) IDE Pnmary Master PIO, IDE Secondary Master PIO, IDE Primary Slavc PIO, IDE Secondary Slave PIO IDE0 Master/Slave PIO/DMA, Mode, IDe1 Master/Slave PIO/DMA Mode; 2) Auto, PIO 0, PIO 1, PIO 2, PIO, 3, PIO 4 DMA0, DMA1, DMA2; 3)Zależnie od wcrsji programu BIOS-SETUP możliwe jest niezależne uslawianie trybu pracy dla każdego Z urzadZeń EIDE (Master i Slavc) w każdym z dwóch kanalów (oznaczanych jako 0 i 1 lub Priniary i Seeondary). 1) IDE Ultra DMA Modę#1, IDE Primary Master UDMA#2, IDE Secondary Master UDMA#2, IDE Primary Slave UDMA#2, IDE Secondary Slave UDMA#2; 2) Auto#(1,2), Enabled#1 Disabled#(1,2); 3) #1 Punkt ten umożliwia przełączenie magistrali HIDH w tryb UDMA. Przy opcji Auto BIOS bada typ urządzeń oraz rodzaj przewodu połączeniowego i aktywuje UDMA w zależności od wyników rozpoznania.#2 Niektóre wersji BIOS-SHTUP pozwalają na niezależną konfiguracje dla każdego z czterech urządzeń. 1) Keyboard Power On; 2) Disabled, Multikey; 3) Wybranie opcji Multikey powoduje pojawienie się pozycji KB Power ON Multikey: Enter. W odpowiedzi na jej aktywację system żąda podania (dwukrotnie) hasła. Przyięte hasło jest od tej pory kluczem powodującym włączenie komputera (wymagany zasilacz ATX!). 1) Offboard PCI IDE Pnmary IRQ, Offboard PCI IDE Secondary IRQ; 2) INTA, INTB, INTC ,INTD; 3) Możliwość przydziału określonej linii przerwań dla dodatkowego kontrolera PCI-IDE. Dla kanału pierwotnego należy przyjąć INTA a dla wtórnego INTB. Kontroler zintegrowany należy naturalnie w tym przypadku deaktywować. Odpowiada punktowi Primary/Secondary IDEINT# w sekcji PNP/PCI CONFIGURATION. 1) Onboard FDC Controllcr (Onboard FDD Controllcr); 2) Enabled, Disabled; 3) Pozycję Disabled wybierani) w wypadku, gdy z jakichś szczególnych względów deaktywujemy kontroler dyskietek na płycie głównej. Przyczyną może być chęć instalacji dodatkowego kontrolera FDD. Deaktywaeja kontrolera powoduje zwrot przerwania IRQ6 przez co może być ono wykorzystywane przez inne urządzenia. 1) Onboard FDC Swap A&B; 2) No Swap, Swap AB; 3) Wybranie opcji Swap AB powoduje zamianę oznaczeń literowych napędów dyskowych: A: -> B: i B: -> A: bez konieczności przekładania wtyczek. Przydatność tej opcji przestała odgrywać rolę w momencie zaniku nośników 5,25 cale. Dawne procedury instalacyjne przyzwyczajone były na ogól do podawania dyskietek z napędu A: natomiast programy rozprowadzane były przez długi czas na nośnikach obydwu rodzajów. 1) Onboard Parallel Modę (Parallel Port Mode); 2) Normal, (SPP), ECP+(/)EPP, EPP ,(EPP 1.7/EPP 1.9), ECP; 3) W punkcie tym wybieramy tryb pracy złącza równoległego. W układzie Normal (SPP) złącze transmituje dane w jednym kierunku i ze stosunkowo małą prędkością ale za to gwarantuje kompatybilność. Pozostałe opcje oznaczają transmisję ze zWiekszoną prędkością i w obydwu kierunkach. Trvb pracy należy dostosować do przyłączonego do portu urządzenia zgodnie z danymi technicznymi zawartymi w instrukcji obsługi. Dokładny opis wszystkich rodzajów trybów znajdzie Czytelnik w specjalnym rozdziale poświęconym portowi równoległemu komputera PC. 1) Onboard Parallcl Port; 2) Auto, Disabled, 378H / IRQ7, 278H / IRQ5 3BCH/IRQ7; 3) Zbiór kombinacji adresów I/O i linii IRQ dla kontrolera portu równoległego., 1) Onboard PCI IDE#1, (Onboard Primary PCI IDE#2 /, nboard Secondary PCI IDE2 ), (On-Chip Primary PCI IDE#3 /, On-Chip Secondary PCI IDE#3 ); 2) Primary#1, Secondary#1, Both#1, Enabled#(2,3) ,Disabled#(1,2,3); 3) Punkt ten ma wpływ na pracę kanałów zintegrowanego kontrolera IDE. Kontroler ten zrealizowany jest na współczesnych płytach PCI w formie t/w. pomostu PCI-IDE (PCI-to-IDF Bridge) i stanowi de facto urządzenie PCI. Opcja pozwala na selektywne eliminowanie zarówno kanału podstawowego (Primary, odpowiada obsłudze gniazda IDEI lub IDE-A na płycie głównej) jak i dodatkowego (Secondary, IDE2 lub IDE-B). Eliminacja kanału pierwotnego oddaje do dyspozycji systemu przerwanie IRQ14 a wyłączenie kanału wtórnego owocuje zwrotem przerwania IRQ15. 1) Onboard Serial Port1, Onboard Serial Port2; 2) Disabled, Auto, 3F8H / IRQ4, 2F8H / 1RQ3, 3E8H / IRO4, 2E8H / IRQ10, 2E8H / IRQ3; 3) Szeroki zestaw możliwych kombinacji adresów I/O i linii IRQ dla kontrolera portu szeregowego ma służyćO unikaniu konfliktów z innymi urządzeniami. 1) PS/2 Mouse Power On; 2) Disabled, Right Double, Left Double; 3) Pobudzenie do pracy zasilacza ATX może odbywać się przy pomocy podwójnego kliknięeia lewym (Eeft Double)lub prawym (Right Double) klawiszem myszki PS/2. 1) S.M.A.R.T for Hard Disks; 2) Enabled, Disabled; 3) Technika SMART (Self Monitoring Analysis and ReportingTeclinology) pozwala na lepszą kontrolę sianu wewnętrznego dysku. System ten jest przykładowo w stanie wyprowadzać komunikaty ostrzegawcze poprzedzające możliwość wystąpienia utraty danych (brak dodatkowych sektorów zapasowych, problemy ze stabilizacją prędkości obrotowej itp.). 1) UART2 Use Infrared; 2) Enabled, Disabled; 3) W pozycje Disabled nie pracuje moduł sterujący złącza komunikacji bezprzewodowej na falach podczerwieni (IrDA). są za to dostępne obydwa porty szeregowe tj. zarówno COM l jak i COM2. Aktywacja opcji (Enabled) uruchamia moduł IrDA ale przydziela do jego obsługi jeden z kontrolerów UART, przez co przestaje funkcjonować gniazdo złącza COM2. 1) USB Eunction; 2) Enabled, Disabled; 3) Aktywowany kontroler USB wymaga przydziału przerwania IRQ11 przez co staje się ono niedostępne dla reszty (USB Controller) systemu. Jeżeli nie korzystamy z urządzeń USB opcję należy deaktywowae (Disabled). Odpowiada punktowi USB IRQ lub Assign IRQ For USB w sekcji PNP/PC1 CONF1C.URAT1ON. 1) USB Kcsboard Support; 2) Enabled, Disabled; 3) Opcja aktywuje obsługę klawiatury USB. Dla jej włączenia trzebajednak posłużyć się normalną klawiaturą, którą przy kolejnym starcie systemu należy odłączyć. Tabela A=7. AMI BIOS, STANDARD SETUP 1) Punki; 2) Opcje; 3)Wyjaśnienie; 1) Dale / Time; 2) DY, mm:dd:yy, hh:mm:ss; 3) W punkcie tym ustawiany jest zegar i kalendarz systemowy. Data określana jest zwykle w formacie amerykańskim tj. miesiąc, d/ień i rok prz6 czym nazwy miesiąca pojawiają się słownie. Wynikający z wprowadzonej daty dzień tygodnia (DY) wyznaczany jest automatycznie przez system. 1) Floppy A, Floppy B; 2) Not Installed: 360KB 5 i 1/4 inch, 1.2MB 5 i 1/4 inch, 720KB3 i 1/2 inch, 1.44MB 3 i 1/2 inch, 2,88MB 3 i 1/2 inch; 3) W punkcie tym określamy typ napędu dyskietek. Najczęściej spotykane są systemy dysponujące pojedynczą Floppy B jednostką l .44MB/31/: ale osoby kopiujące dużo dyskietek mogą zainstalować dwa jednakowe napędy. 1) Pri Master, Pri Slave, Sec Master, Scc slavc; 2) - ; 3) Proces konfiguracji przebiega w taki sam sposób dla każdego z czterech urządzeń, których ikony wyświetlone są w oknie STANDARD SLTUP (Pri Master. Pri Slave. Sec Master i Sec Slave). Wybranie dowolnej z nich powoduje otwarcie kolejnego okna zawierającego następujące punkty: • Type - rodzaj i geometria urządzenia. Opcje: Not Installed. 1. 2, ... 46, User. Auto. ATAPI CDROM, ARMD. • LBA/Large Modę - tryb adresowania sektorów. Opcje: 0ff lub On. • Błock Modę - tryb multisektorowy. Opcje Offlub On. • 32Bit Modę - transfer 32 bitowy. Opcje: Off lub On. • F10 Modę -- tryb PIO. Opcje: 0. 1. 2. 3. 4. Auto. Wybranie opcji Auto w punkcie Type powoduje, iż system dokona rozpoznania urządzenia aktualnie podłączone do danego kanału. W przeciwnym razie wyboru należy dokonać ręcznie. W przypadku dysków twardych przechodzimy do opcji User i wprowadzamy następujące parametry: • Cyl - Liczba cylindrów. Wielkość ta podana jest zwykle na nalepce umieszczonej na dysku. W razie jej braku należy posłużyć się |edną z tabel podających parametry dysków na podstawie ich typu. • Md - Liczba głowic. Tak jak w przypadku Cyl • WP - Początek strefy prekompensacji (Write Precompensation). Wartość ta wyznaczała w dyskach starszych generacji cylinder powyżej którego układy wzmacniaczy zapisu modyfikował) nieco prąd podkładu. Było to konieczne, bowiem wtedy jeszcze nie stosowano zapisu strefowego (/one Bit Recordmg) i na każdej ścieżce zapisywana była ta sama ilość sektorów. W konsekwencji gęstość zapisu na ścieżkach wewnętrznych była o wiele większa niż na obrzeżu. Wielkość w polu WP jest całkowicie ignorowana przez współczesne kontrolery zintegrowane na dyskach I-IDL. Pole to można pozostawić puste a jeżeli Setup żąda jakiejś konkretnej wartości należy wprowadzić -1 lub 65535. • Sec - Liczba sektorów na ścieżce. Tak jak w przypadku Cyl i Hd. • Size - Rozmiar. W polu tym system wyświetla pojemność dysku obliczoną na podstawie parametrów wprowadzonych do pól Cyl, Hd, Sec. Jeżeil system nie zawiera żadnych dysków EIDE a jedynie SCSI wybieramy opcję Non Installed dla wszystkich czterech ur/.ądz,eń. .leżeli do danego kanału podłączony jest czytnik CDROM lub wypalarka ze złączem ATAPI należy wybrać opcję ATAPI CDROM Typy predefiniowane 1-46 nie mają raczej praktycznego zastosowania bowiem przedstawiają dyski, które już dawno wyszły z obiegu. Tabela A.8. AMI BIOS, ADYANCED SETUP 1) Punki; 2) Opcje; 3)Wyjaśnienie; 1)Ist Boot Device, 2nd Boot Dcvice, 3rd Boot Devicc; 2) Disabled, IstIDE-HDD, 2nd IDE-HDD, 3rd IDE-HDD, 4th IDE-HDD, Floppy, ARMD-FDD, ARMD-HDD, ATAPI CDROM, SCSI, Nctwork, 12O; 3) Uszeregowanie urządzeń w kolejności według której BIOS poszukuje na nich systemu operacyjnego odbywa się w trzech oddzielnych punktach: dla pierwszego, drugiego i trzeciego urządzenia. 1)Boot to OS/2; 2) Yes, No; 3) Konieczność aktywacji (Yes) obowiązuje jedynie w przypadku systemu operacyjnego OS/2 przy rozmiarze pamięci przekraczającym 64 MU W przeciwnym ra/ie obowiązuje położenie standardowe No. 1)Boot Up Num-Lock; 2) On, Off; 3) Ustawienie On powoduje, iż system włącza automatycznie klawisz Num (NumLock) konfigurując blok dziesiętny klawiatury zgodnie z jego logicznym przeznaczeniem. W położeniu standardowym OfT klawisze tego bloku mają przypisane funkcje sterowania kursorem. 1)C 000, 16K Sliadou C400, C 000, 16k Shadow; 2) Disabled, Enabled, Cached; 3) W punkcie tym określa się sposób dostępu do pamięci stałej zawierające BIOS karty graficznej (zakres 0xC0000h - (0xC7ffFh). W trybie Disabled ma miejsce dostęp bezpośredni. W trybie Enabled dostęp odbywa się za pośrednictwem pamięci operacyjnej, do której uprzednio BIOS został skopiowany. Przy wybraniu opcji Cached BIOS karty graficznej zostaje skopiowany do pamięci operacyjnej i podlega ponadto działaniu pamięci podręcznej. 1)C800, 16K Shadow ,CC00, 16K Shadow, D000,16K Shadow, D400, 16K Shadow, D800, 16K Shadow, DC00, 16K Shadow; 2) Disabled, Hnabled, Cachcd; 3) Znaczenie opcji jest takie jak w poprzednim punkcie, z tą tylko różnicą, iż odnosi się do bloków pamięci mogących zawicrać inne programy BIOS (na kartach rozszerzających). 1) CPU ECC; 2) Enabled, Disabled; 3) Nowoczesne procesory (począwszy od P-II/266) stosują mechanizmy kontrolne HCC w obrębie swej pamięci podręcznej 1.2. Aktywowanie tej opcji (Hnablcd) przynosi pewien mały spadek wydajności na rzecz zwiększonego bezpieczeństwa danych. 1) CPU Microcode Updation; 2) Hnabled, Disabied; 3) W aktualnych wersjach procesorów BIOS może ładować pewne fragmenty mikrokodu do pamięci własnej procesora. Położenie standardowe Enabled. 1) Display Modę at Add-on ROM Init; 2) Force BIOS, Keep Current; 3) W punkcie tym określa się tryb graficzny w momencie inicjalizacji kart wyposażonych w pamięć ROM (nie dotyczy ROM na karcie video). Jeżeli wybrana została opcja Force BIOS, na karcie graficznej wymuszony zostanie tryb BIOS przed przekazaniem sterowania do jakiegokolwiek ROM-B1OS. W przypadku Keep Current tryb karty graficznej pozostanie nienaruszony. 1) Hoppv Access Control; 2) Read-Wnte, Rcad-Only; 3) W punkcie tym aktywuje się zabezpieczenie przed kopiowaniem danych z komputera na dyskietkę (pozycja Read-Only. tylko odczyt). W pozycji Read-Write me ma ograniczeń w dostępie do napędu. 1) Hard Disk Access Control; 2) Rcad-Write, Read-Only; 3) Mechanizm zabezpieczający przed zapisem na twardy dysk. Opcja Read-Only ma sens w przypadku MS-DOS i co najwyżej Windows-3.xx bowiem w tym stanie nie jest możliwy start współczesnych systemów operacyjnych, które zapisują różne informacje do swoich plików konfiguracyjnych i wewnętrznych baz danych o zainstalowanym sprzęcie. 1) Internal Cache; 2) Disabled, WriteBack; 3) Dopuszczenie trybu WB (Write Back) w odniesieniu do pamięci podręcznej. Nie należy zmieniać standardowego położenia WriteBack. 1) Password C'heck; 2) Always, Setup; 3) Jeżeli zdefiniowane zostało hasło, można określić w którym momencie system żąda jego podania. W przypadku opcji Always hasło wymagane jest przy każdym włączeniu komputera. Opcja Setup powoduje, iż hasło należy podać jedynie przy próbie wejścia do programu konfiguracyjnego BlOS-Sctup. 1) Pri Master ARMD Fmulated as, Pri Slave ARMD Hmulated as, Sec Master ARMD Fiinulated as, Sec Slave ARMD Hmulated as; 2) Auto, Floppy, Harddisk; 3) W punkcie tym określa się (dla każdego z czterech kanałów HIDFi oddzielnie) tzw. sposób emulacji dla urządzeń o mediach wymiennych. Dla napędów typu I. S- 120 należy przyjąć opcję Floppy a dla ATAPI-ZIP oraz magnetooptycznych (MO) opcję Hard Disk. 1) Primary Display; 2) Absent, VGA/EGA, CGA 40x25,CGA 80x25, Mono; 3) Typ zainstalowanego sterownika graficznego. Położenie standardowe VGA/HGA. zarówno w przypadku PCI. ISA. jak i AGP. 1) PS/2 Mouse Support; 2) Enable, Disable; 3) Opcja Enable aktywuje obsługę myszy podłączonej do złącza PS/2. 1) Quick Boot, (Above 1MB Memory lest); 2) Disablcd, Enabled; 3) W pozycji Disabled przeprowadzana jest kontrola całej zainstalowanej w systemie pamięci. W następnejkolejności AMI-BIOS oczekuje do 40 s na sygnał gotowości dysku twardego po czym inicjalizuje go przy pomocy rozkazu RESET i znów oczekuje na sygnał gotowości. Skrócenie czasu rozruchu (opcja Enabled) osiąga się dzięki poprzestaniu na kontroli pamięci jedynie do granicy 1 MB (Above I MB Memory Test: Disabled) oraz pominięciu fazy oczekiwania na sygnał gotowości HDD. 1) S.M.A.R.TforHardDisks; 2) Disable; Enable; 3) Technika SMART (Self Monitoring Analysis and Reporting Technology) pozwala na lepszą kontrolę stanu wewnętrznego dysku. System ten jest przykładowo w stanie wyprowadzać komunikaty ostrzegawcze poprzedzające możliwość wystąpienia utraty danych (brak dodatkowych sektorów zapasowych, problemy ze stabilizacją prędkości obrotowej itp.). 1) System BIOS Cacheable; 2) Enabled, Disabled; 3) Dla zwiększenia szybkości działania. AMI-BIOS przepisuje zawartość pamięci stałej od adresu OxFOOOOh do pamięci dynamicznej (ROM-BIOS systemowy). Tak skopiowany blok może podlegać dodatkowo działaniu pamięci podręcznej (Enabled). 1) Try Other Boot Device; 2) Ycs, No; 3) W pozycji No system nie przeszukuje żadnych innych napędów poza tymi, które wymienione zostały w punktach lst/2nd/3rd Boot Device. Przy wybraniu opcji Yes i nie napotkaniu sektora ładującego (BOOT-SECTOR) na żadnym z wymienionych urządzeń, przeglądnięte zostaną również wszystkie inne napędy. Tabela A.9. AMI BIOS, CIPSET SETUP 1) Punkt; 2) Opcje; 3) Wyjaśnienie 1) 8hit I/O Rccovery Time, I/O Recovery Time; 2) Disabled, 1SYSCLK, 2SYSCLK,..., 8SYSCLK; 3) Kolejne następujące po sobie odwołania do portów I/O musza być roZdZielonc pewną przerwą czasową. Im jest ona krótsza tym sprawność systemu jest wyższa. Nastawy dotyczą wyłącznie kart ISA, oddzielny punkt dla krótkich S-bitowYch i oddzielny dla długich 16-bitowych. 1) ACPI Control Register; 2) Enabled Disabled; 3) Funkcja umożliwia dostęp do centralnego rejestru sterującego mechanizmem ACPI (Advanced Configuration and Power Inlerface). 1) AGP Fanty Brror Response; 2) Enabled Disabled; 3) Położenie standardowe Disabled. Aktywacja funkcji powoduje uruchomienie mechanizmów reakcji magistrali AGP na bledv par/ystośei. 1) AGP SERR (AGP System Error); 2) Enabled; Disablecl; 3) W punkcie tYm można zezwolić na wytwarzanie sygnału błędu SERR (System Error) magistrali AGP. Położenie standardowe Disabled. 1) BX/GX Master Eatency Timer; 2) Disabled: 32, 64, 96, 128, 160, 192, 224; 3) Parametr ten podawany jest w jednostkach zegara magistrali PCI. Jego wymiar fizyczny to dopuszczalny wymiar czasu przez który urządzenie typu Master może przejąć panowanie nad magistralą (czas liczony od momentu zwolnienia sygnału GRANT). Wartość standardowa to 64 cykle zegara. 1) DMAx Type; 2) PC/PCI, Distributed, Normal ISA; 3) Dla każdego z kanałów DMA określić można, która z magistral ma prawo do posługiwania się nim. x=0. 1, 2, 3, 5, 6, 7 1) DRAM Integrity Modę; 2) None, EC, ECC Hardware; 3) Punkt określa zachowanie się systemu wyposażonego w moduły pamięciowe ECC. Możliwe są następujące opcje: • None - brak kontroli. System nie jest wykorzystywany. Kontrola nie jest przeprowadzana i nie są zgłaszane żadne błędy. . EC - pierwszy stopień kontroli. Błędy pojedyncze są korygowane ale tylko wtedy, gdy zostały wykryte w trakcie odczytu z pamięci. Skorygowana informacja nie jest zapisywana do pamięci. Błędy wielokrotne (których nie da się skorygować) zgłaszane są jako błąd parzystości. • ECC - drugi stopień kontroli. Błędy pojedyncze podlegają korekcji, a zregeneroyyana informacja zostaje utrwalona w pamięci. Błędy wielokrotne wyzwalają sygnał błędu parzystości. System odróżnia błędy sporadyczne (Soft Errors) od trwałych uszkodzeń obwodów elektronicznych (Hard Errors). Jeżeli pojedynczy błąd wystąpi powtórnie w tym samym miejscu uznany zostanie za uszkodzenie trwałe. W takim wypadku zgłaszany jest błąd parzystości. 1) DRAM Refresh Ratę; 2) 15,6 us, 31,2 us, 62.4 us, 124,8us 249.6 us; 3) Okres generacji impulsów dla układów odświeżania pamięci DRAM. Położenie standardowe to 15,6 us.(us - czytaj mikrosecundy) 1) Gated Clock; 2) Enabled; Disabled; 3) Jakkolwiek standardowe położenie tej opcji to Enabled, należy ją deaktywować w imię wzrostu prędkości systemu. Funkcja ta powoduje, iż częstotliwość taktowania magistrali nie jest stalą i podlega ciągłym fluktuacjom. Rozwiązanie takie obniża poziom promieniowania elektromagnetycznego co z kolei jest niezmiernie ważne dla uzyskania certyfikatu Ce. 1) Graphics Aperture Size; 2) 4MB, 8MB, 16MB, 32MB, 64MB, 128MB, 256MB; 3) Maksymalny wymiar pamięci operacyjnej, która może być oddana do dyspozycji AGP. Wartości ustanowionej przez BIOS nie należy zmieniać (zależy ona od ilości pamięci zainstalowanej w systemie). 1) Memory Autosizing Support; 2) Auto, Enabled; 3) Moduły pamięci pozbawione pamięci konfiguracyjnej (SPD) muszą być rozpoznawane i konfigurowane przez BIOS. W pozycje Enabled informacja dostarczana przez SPD nie jest brana pod uwagę nawet w przypadku modułów, które ją posiadają. Opcja Auto dopuszcza informację pobraną z SPD a w razie jej braku uruchamia procedury rozpoznawania BIOS. 1) Memory Buffer Strength; 2) Strong, Auto, Low, Middle, High; 3) Punkt pozwala na pewną regulację poziomu sygnałów sterujących scalone układy pamięciowe. W zależności od ilości takich układów (różne moduły mogą zawierać od kilku do nawet kilkudziesięciu chipów) zmienia się poziom obciążenia magistrali. Przy dużym obciążeniu korzystniej jest podnieść poziom sterowania a przy mniejszej ilości chipów należy go zredukować by nie dopuścić do przesterowania. 1) Memory Hole; 2) Disabled, 15MB-16MB, 512KB-640KB; 3) Obszar wyjęty z zakresu adresowania i przeznaczony dla kart ISA. W pozycji Disabled cała przestrzeń adresowa staje się ogólnodostępna. 1) PC11 to PC10 Access; 2) Enabled, Disabled; 3) W terminologii układów BX i LX magistrala PO oznaczona jest jako PC Q a szyna AGP jako PCI. W pozycji F.nabled dopuszcza się dostęp urządzenia 1) Master-AGP do Target-PCI.; 3) Konfiguracja taka jest w normalnych warunkach zabroniona i dlatego standardowa opcja w tym punkcie to Disabled. 1) PERR#; 2) Enabled, Disabled; 3) Opcja Enabled dopuszcza generację impulsu na linii PERR (System Error). Sygnał ten powstaje w razie stwierdzenia błędów parzystości na s/ynie danych magistrali PCI. 1) P11X4 Passive Release, P11X4 Delayed Transaction; 2) Hnabled, Disabled; 3) Aktywacja rozszerzeń standardu PCI w odniesieniu do układu PIIX4. Położenie standardowe Enabled. 1) PIIX4 SERR#; 2) Enablcd, Disabled; 3) Punkt pozwala na dopuszczenie do wytwarzanie sygnału błędu pochodzącego od układu P11X4. Położenie standardowe Disabled. 1) Power Down SDRAM; 2) Enabled, Disabled; 3) W pozycji Enabled aktywowany zostaje trvb oszczędnościowy zasilania pamięci SDRAM. Wewnętrzne układy czasowe odłączają część zasilania, jeżeli układ pamięciowy nie jest przez pewien czas wykorzystywany. Funkcję tę posiadają tylko niektóre Chip-Set. np. Intel-BX. 1) SDRAM CAS# Latency; 2) AUTO, 2 SCLKs, 3 SCLKs; 3) Czas opóźnienia TCL (CAS Latency) Jest to odstęp pomiędzy przekazaniem adresu kolumny (czyli zakończeniem rozkazu odczytu) a momentem pojawienia się danych na końcówkach wyjściowych, mierzony w cyklach zegara taktującego pamięci SDRAM. 1) SDRAM RAS# Prechargc; 2) AUTO 2 SCLKs, 3 SCLKs; 3) Czas opóźnienia TRP (RAS Prechargc Time) niezbędnego do przygotowań ia ba,nku (upływający od ostatniej deaktywacji do momentu podania adresu nowego wiersza), wyrażam w cyklach zegara. 1) SDKAM RASt# to CAS# Delay; 2) AUTO, 2 SCLKs, 3 SCLKs; 3) Czas opóźnienia TRCD (RAS to CAS Delay) czyli wartość przerwy czasowej koniecznej pomiędzy podaniem adresu wiersza a podaniem adresu kolumny, wyrażana w cyklach zegara. Wartość bezpieczna to 3 cykle. 1) SERR#; 2) Lnabled, Disabled; 3) Opcja Enabled dopuszcza generację impulsu na linii SLRR (System Rrror). Sygnał ten wytwarzany jest przez magistrale PCI/AGP w przypadku stwierdzenia pewnych szczególnych błędów, np. parzystości, ECC lub wykroczenia poza adres okna komunikacyjnego AGP. 1) TypeF DMA Buffer Control1 TypeF DMA BuFFer Control2; 2) Disabled Channel-0, Channel-1, ... ,Channel-7; 3) Jeżeli w jakimkolwiek z kanałów 0 - 7 DMA zaimplementowany został bufor F należy aktywować odpowiedni punkt. Bufor F obsługuje transmisję z dyskiem twardym w razie aktywacji jednego z trybów DMA. Położenie standardowe Disabled. 1) USB Function; 2) Enabled, Disabled; 3) Aktywowany kontroler USB wymaga przydziału przerwania IRQ1 1 przez co staje się ono niedostępne dla reszty systemu. Jeżeli nie korzystamy z urządzeń USB opcję należy deaktywować (Disabled). 1) USB KB/Mouse Legacy, Support; 2) Keyboard, Auto, Keyb.+Mouse, Disabled; 3) W punkcie tym należy dokonać wyboru odpowiedniej opcji w zależności od faktycznie obecnych urządzeń USB. 1) USB Passive Release; 2) Hnabled Disabled; 3) Chip-Sct BX może zwalniać magistralę USB skoro tylko przejdzie ona w stan jałowy (pozycja Enabled). 1) USWC Write Post; 2) Lnabled Disabled; 3) USWC (Uncachable Speculative Writc Combining) stanowi specjalny trYb dostępu, którym posługiwać się mogą nowoczesne procesory. Pojedyncze cykle zapisu do pamięci obrazu (Franie BulTer) grupowane są w tym wypadku w jeden większy pakiet, co obniża natężenie ruchu na magistrali. Właściwość ta poprawia wprawdzie nieco ogólne parametry systemu ale wymaga wsparcia ze strony karty graficznej i nie jest jeszcze powszechnie implementowana. Jakkolwiek sterowniki graficzne systemów operacyjnych ignorują na ogól ustalenia BIOS w tej dziedzinie, przed jej uruchomieniem należy dokładnie zaznajomić się z danymi technicznymi posiadanej karty graficznej, bowiem pochopna aktywacja spowoduje zawieszenie się komputera Położenie standardowe to Disabled Tabela A.10. AMI BIOS, POWER MANAGEMENT. 1) Punkt; 2) Opcje; 3) Wyjaśnienie 1) Device 0 (Primary Master IDE), Device 1 (Primary Slavc 1DE), Devicc 2 (Sec. Master IDE), Device3 (Sec. Slavc IDE), Device 5 (Floppy Disk), Device 6 (Serial port 1 ), Device 7 (Serial port 2), Device 8 (Parał lei Port); 2) Monitor, Ignore; 3) Dla każdego z wymienionych na liście urządzeń można wybrać opcje Monitor lub Ignore. W przypadku pierwszej z nich system nadzoruje stosowną linie przerwań. Jeżeli komputer wszedł już w którąś z faz oszczędnościowych aktywność na liniach zadeklarowanych jako Monitor wyprowadza go z tego stanu. Komputer przechodzi do trybu pełnego zasilania (Fuli On State) a liczniki Standby i Suspend ulegają wyzerowaniu. Opcja Ignore wyłącza daną linię IRQ (i stowarzyszone z nią urządzenie) spod systemu nadzoru. 1) Display Activity; 2) Monitor, Ignore; 3) Jeżeli wybrana została opcja Monitor, system nadzoruje aktywność na wyjściu video. W razie stwierdzenia jej braku przez czas dłuższy niż ustanowiony w punkcie Standby Timeout komputer przechodzi w stan oszczędnościowy. 1) Grccn PCMonitor Power State; 2) Standhy, Suspend, Off; 3) Po upływie pewnego określonego czasu system oszczędnościowy wprowadza monitor w stan Standby. Suspend lub wyłącza go (Off). 1) Hard Disk Power Duwn Modę; 2) Disabled, Standby, Suspend; 3) Jeżeli nie wYbrano opcji Disabled. dysk twardy do którego nie było odwołań w przeciągu czasu określonego w punkcie Hard Disk Timeout przechodzi w stan Standby lub Suspend. 1) Hard Disk Timeout; 2) Disabled, 1Min, 2Min, ... , 15Min; 3) Okres czasu po którym dysk przechodzi w stan określony w punkcie hard Disk Power Down Modę. 1) Power Bulion Function; 2) Suspend, On/Off; 3) Dostępny z zewnątrz przycisk wyłącznika może mieć swoje standardowe znaczenie (On/Off) i służvć prócz włączania również do wyłączania komputera lub tez wprowadzać komputer w stan Suspend. 1) Power Management; 2) APM ,ACPI, Disabled; 3) System zarządzania poborem mocy może bazować na specyfikacji APM (Adyanced Power Manascment) lub na specyfikacji ACPI (Adyanced Configuration and Power Interface). System APM nadzorowany jest z poziomu BIOS (przerwanie INT15h) podczas gdy ACPI współpracuje ściśle z. systemem operacyjnym. Warto jednak wiedzieć, iż mc wszystkie systemy operacyjne przygotowane są należycie do tej współpracy. 1) Power Saying Type; 2) Slcep, Stop Clock, Deep Sleep; 3) W punkcie tym określany jest sposób. w jaki system realizuje swoją politykę oszczędnościową. 1) RFC Wake-Up; 2) Disabled, Enabled; 3) Aktywacja tego punktu powoduje wyświetlenie dodatkowych pól umożliwiających wprowadzenie godziny i minuty. O tak ustawionym czasie zadziała budzik systemowy (zegar c/.asu rzeczywistego) i wyprowadzi komputer ze stanu uśpienia. 1) Słów Clock Ratio; 2) Disabled: 0-12,5%, 12,5-25%, ... , 75-87.5%; 3) Procesor, którego temperatura podniosła się powyżej pewnej określonej wartości podlega chłodzeniu poprzez okresowe blokowanie impulsów zegarowych (linia -STPCLK). i-Tekt jest taki. jak gdyby częstotliwość zegara uległa zredukowaniu o określony współczynnik procentowy. 1) Standby Timeout; 2) Disabled: 4Min, 8Min, ... , 8Min; 3) Czas, po którym system przechodzi w pierwszy stopień redukcji poboru energii (Standby). 1) Standby Tuner Unit, Suspend Tuner Unit; 2) 32sec, 4msec, 4 min, 4sec; 3) Odstęp czasowy rozdzielający opcje pojawiające się w polach Standby Timeout i Suspend Timeoul. Położenie standardowe to 4 minuty. 1) Suspend Timeout; 2) Disabled: 4Min, 8Min, ... , 508Min; 3) Czas. po którym system znajdujący się już na pierwszym poziomic redukcji (Standby) przechodzi w stan drugi (Suspend). 1) Video Power Down Mode; 2) Disabled, Standby, Suspend; 3) Jeżeli nie wybrano opcji Disabled. system nadzoruje wyjście video. Po upływie określonego czasu, w którym nie stwierdzono aktywności na tym wyjściu, system graficzny przechodzi w stan Standby lub Suspend Tabela A.11. AMl BIOS, PCI/PnP SETUP. 1) Punkt; 2) Opcje; 3) Wyjaśnienie 1) Default Primary Video; 2) AGP, PCI; 3) Funkcja ma znaczenie w systemach wyposażonych w dwie karty graficzne (PCI i AGP). W punkcie tym określa się, która z nich będzie urządzeniem podstawowym. 1) DMA Channel x; 2) PnP, ISA/EISA; 3) Poszczególne kanały DMA mogą być oddane do systemu lub przypisane do przydziału automatycznego PnP obsługi kart ISA (ISA/EISA). x- 0, 1, 3, 5, 6, 7 1) IRQ x; 2) PCI/PnP, ISA/EISA; 3) Poszczególne linie przerwali sprzętowych (IRQ) mogą być oddane do systemu przydziału automatycznego PnP lub przypisane do obsługi kart ISA (ISA/EISA). Jeżeli korzystamy z usług zintegrowanego kontrolera PCI-IDE na liście nie ma przeryyań IRQ 1 4 i IRQ 1 5. System nie dopuści do zarezerwowania wszystkich przerwań, bowiem do obsługi magistrali PCI musi pozostać co najmniej jedna linia. Linią tą będzie IRQ9. x= 3, 4, 5, 7, 9, 10, 11, 12, 14, 15 1) Offboard PCI IDE Card; 2) Auto ,Slot 1, Slot 2; 3) W przypadku rezygnacji z usług zintegrowanego kontrolera IDE i instalacji innego w formie karty PCI należy podać numer gniazda (Slot x) w którym został on zamontowany Jeżeli numeracja gniazd nie jest znana wybrać należy opcję Auto. 1) Offboard PCI IDE Primary IRQ, Offboard PCI IDE Second. 1RQ; 2) Disabled, Hardwired, INTA, INTB, INTC, INTD; 3) Możliwość przydziału określonej linii przerwań dla dodatkowego kontrolera PCI-IDE. Dla kanału pierwotnego należy przyjąć INTA a dla wtórnego INTB. Kontroler zintegrowany należy naturalnie w tym przypadku deaktvwować. 1) PCI IDE Busmaster; 2) Enabled, Disabled; 3) W punkcie tym aktywujemy tryb Bus-Master dla kontrolera IDE. Z punktu widzenia ogólnej sprawności systemu opcja powinna się znajdować w pozycji Enabled. chociaż niektóre systemy operacyjne (Windows 95) żądają wprowadzenia swoich własnych sterowników programowych. W takim wypadku należy wybrać opcję Disabled. 1) PCI Latcncy Timer; 2) 32, 64 , 128, 160, 192, 224, 248; 3) Wymiar fizyczny tego parametru to dopuszczalny wymiar czasu przez jaki dowolne urządzenie może zajmować magistralę PCI. Przyjęło się uznawać, iż im mniejsza wartość w tym polu tym większa jest wydajność magistrali PCI (standardowa wartość opcji w AMI BIOS wynosi 64). Krótka wartość parametru ułatwia z pewnością obsługę urządzeń którym spieszno jest przekazać dane. Z drugiej jednak strony cierpią na tym urządzenia transmitujące długie bloki informacji. 1) PCI Słot x IRO Priority; 2) Auto, 3, 4, 7, 9, 10, 11, in priority order; 3) Priorytet gniazd PCI określony jest standardowo (Defaull) w ten sposób, iż najwyższy priorytet ma gniazdo oznaczone numerem 1 (Slot-1). Systemu tego nie należy zmieniać bez wyraźnego powodu. x=1, 2, ...6 1) PCI VGA Palette Snoop; 2) Enabled, Disabled; 3) Punkt ten odnosi się w zasadzie wyłącznie do systemów wyposażonych w kilka przetworników graficznych (np. ISA i PCI) lub kart symulujących taki zestaw (dekodery MPBG. urządzenia kombinowane Video-TV-Tuner). Opcja w stanie aktywnym (Enablcd) gwarantuje zgodność barw obrazów wytwarzanych przez każdy z przetworników bowiem tzw. rejestry palety przekazywane są w niezmiennej formie do obu urządzeń. W pozostałych przypadkach zaleca się położenie standardowe Disabled 1) Pług and Play-Aware OS; 2) No, Yes; 3) Punkt ten stanowi główny wyłącznik systemu automatycznej konfiguracji PnP. Jeżeli system operacyjny jest zdolny do przejęcia funkcji PnP (aktualnie jedynie Windows-95) wybieramy opcję Yes. 1) Reserved Memory Address; 2) C0000, C4000, C8000, CC000, D0000, D4000, D8000, DC000; 3) Adres początkowy zarezerwowanego obszaru o rozmiarze podanym w punkcie Reserved Memory Size 1) Reserved Memory Size; 2) Disabled: 16K, 32K, 64K; 3) Dla potrzeb kart ISA posiadających własny BIOS trzeba zarezerwować stosowny fragment przestrzeni adresowej. Tabela A.12. AMI BIOS, PERIPHERAL SETUP. 1) Punkt; 2) Opcje; 3) Wyjaśnienie 1) CPU Current Temperaturę; 2) -; 3) W polu tym wyświetlana jest aktualna temperatura obudowy procesora 1) CPU Overheat Warning; 3) Enabled, Disabled; 3) Aktywacja opcji (Enabled) otwiera dodatkowe okno opisane jako CPU Overheat Warning Temperaturę. Zalecana jest wartość z przedziału 50-60°C. 1) CPU Overheat Warning Temperaturę 25°C - 75°C Wartość temperatury (regulowana w odstępach 1°C), przy której uruchomiony zostanie system alarmowy. 1) EPP Version; 2) 1.7, 1.8; 3) Specyfikacja EPP (Enhanced Parallel Port) rozszerzająca możliwości klasycznego portu równoległego egzystuje w dwóch wariantach (niestety na tyle różnych by urządzenia EPP/ 1.7 i EPP/1.8 nie mogły się ze sobą porozumieć). Typ specyfikacji EPP powinien być wyszczególniony w instrukcji technicznej urządzenia (najczęściej drukarki). 1) H/W Monitor In0 (CPU 1), H/W Monitor In 1 (CPU2)#1, H/W Monitor In2(+3.3V), H/W Monitor In3 (+5V), H/W Monitor In4(+l 2 V), H/W Monitor In5(-1 2 V), H/W Monitor In6 (-5V), CPU1 Fan, CPU2 Fan#1, Thermal Control Fan; 2) -; 3) W polach tych system wyświetla stosowne wartości. Opcje te dostępne na płytach wyposażonych w system monitorowania (Hardware Monitor). Układy takie są wielokanałowe i mogą nadzorować jednocześnie kilka parametrów. #1 Na płytach w wersji Dual-CPU 1) Keyboard Wake-Up Function; 2) Disabled, CTRL-F1, Space; 3) Aktywowanie opcji budzenia komputera ze stanu uśpienia przy pomocy klawiatury, kombinacją klawiszy CTRL-Fl lub klawiszem spacji. 1) On-Board FDC; 2) Enabled, Disabled, Auto; 3) Punkt ten decyduje o tym, czy zintegrowany na płycie kontroler dyskietek jest aktywny. 1) On-Board IDE; 2) Disabled, Both ,Primary, Secondary; 3) Zintegrowany na płycie głównej kontroler PCI-1DE może być wyłączony w całości (Disabled) lub obsługiwać tylko jeden ze swoich kanałów (Primary lub Secondary). W normalnych warunkach pracują obydwa kanały (Both). 1) On-Board Parallei Port; 2) Auto, Disabled, 378h, 278h, 3BCh; 3) Zbiór adresów ba/owych I/O dla kontrolera portu równoległego. 1) On-Board Serial Port 1, On-Board Serial Port 2; 2) Auto, Disabled, 3F8H/COM1, 2F8H/COM2, 3E8h/COM3, 2E8h/COM4; 3) Zestaw dopuszczalnych adresów l/O dla kontrolerów portu szeregowego. 1) On-board-SCSI; 2) Enabled ,Disabled; 3) Funkcja sterująca zintegrowanym kontrolerem SCSI (wyłącznie na płytach, które takowy posiadają). 1) Parallel Port DMA Cliannel; 2) 0, 1, 2, 5, 6, 7; 3) leżeli w punkcie Parallel Port Modę wyhranj został punkt HCP kontrolerowi portu równoległego należy przydzielić jeden z wolnych kanałów DMA. 1) Parał lei Port IRQ; 2) Auto, 5, 7; 3) W punkcie tym dokonujemy wyboru linii przerwań sprzętowych IRQ przydzielonej do obsługi kontrolera portu równoległego lub powierzamy to zadanie programowi BIOS (opcja Auto). 1) Parallel Port Modę; 2) Normal, Bi-Dir, EPP, ECP; 3) W punkcie tym wybieramy tryb pracy złącza równoległego. W układzie Normal (SPP) złącze transmituje dane w jednym kierunku i ze stosunkowo małą prędkością ale za to gwarantuje kompatybilność. Pozostałe opcje oznaczają transmisje ze zwiększoną prędkością i w obydwu kierunkach, niektóre przy współudziale kanału DMA. Tryb pracy należ) dostosować do przyłączonego do portu urządzenia zgodnie z danymi technicznymi zawartymi w instrukcji obsługi. Dokładny opis wszystkich rodzajów trybów znajdzie Czytelnik w specjalnym rozdziale poświęconym portowi równoległemu komputera PC. 1) Power Loss Control; 2) Always Off, Always On, Previous; 3) W punkcie tym określa się zachowanie komputera w przypadku ponownego powrotu zasilania po jego zaniku. Opcja Always Off powoduje jego wyłączenie, Always On ponowny start a Previous powrót do stanu, którym nastąpił zanik zasilania. 1) Serial Port 2 Modę; 2) Normal, IrDA, ASK 1R; 3) W pozycji Normal nie pracuje moduł sterujący złącza komunikacji bezprzewodowej na falach podczerwieni (IrDA) a UART-2 skonfigurowany jest tak jak klasyczne złącze szeregowe. Dzięki temu dostępne są obydwa porty szeregowe tj. zarówno COM1 jak i COM2 (ew, COM3 i COM4). Aktywacja opcji IrDa powoduje wyświetlenie punktu IR Duplex Mode, który pozwala na wybór trybu pracy: Half(-Duplex) lub Fuli (-Duplex). Otwarcie punktu ASK IR uruchamia z kolei kolejny podpunkt, w którym można dokonać wyboru pomiędzy standardem 1,6 mikrosec. i 3/16. * * * Dodatek B Współpraca z magistralą zewnętrzną Elementarne zasady współpracy układów dodatkowych z magistralą zewnętrzną zobrazowane zostaną na przykładzie prostej karty rozszerzającej. Schemat układu przedstawiony jest na rysunku B.l. Jest to podstawowy zestaw elementów niezbędnych do realizacji 8-bitowego portu jednokierunkowego. Opis działania Aby zapisać bajt do portu umieszczonego w przestrzeni adresowej wejśćia-wyjśćia (realizacja instrukcji out port, AL) system wykonuje następujące czynności: •wystawia adres portu na magistrali adresowej, • wystawia zawartość akumulatora na magistrali danych, •aktywuje sygnał -IOW, • aktywuje sygnał ALE. Dekodery adresowe współpracujące z portami muszą więc podczas każdego aktywowania sygnału AEE porównywać własny adres z aktualnym stanem szyny adresowej. W naszym przykładzie dekodowane są linie AO - A9, co ogranicza przestrzeń adresową do obszaru OOOh - 3FFh. Osiem bardziej znaczących linii tego zestawu (A2 - A9) obsługiwanych jest przez 8-bitowy komparator 74688, a 4-bitowy komparator 7485 porównuje stan pozostałych dwóch linii (AO - Al). Ponieważ nasz przykładowy port jest jednokierunkowy (realizowana jest wyłącznie instrukcja out port, AL), musi reagować jedynie na aktywny (równy zero) sygnał -IOW. Dla uproszczenia układu porównanie to realizowane jest na jednym z dwóch pozostałych wolnych wejść komparatora 7485. Widoczny na rysunku B1. zestaw przełączników S1 - S10 umożliwia nastawienie dowolnego adresu z obszaru OOOh - 3FFh i obrazuje ideę wyboru adresu portu. W praktycznych zastosowaniach połączenia takie dokonywane są na stałe lub co najwyżej modyfikowane są najmniej znaczące bity Ś daje to pewne niewielkie pole manewru. Proszę zwrócić uwagę, że jakkolwiek w systemie może być wiele portów o tym samym adresie, to fakt ten ma praktyczne znaczenie jedynie w celach diagnostycznych. W szczególności, karta eksperymentalna może mieć adres zgodny z obecnym już w systemie innym urządzeniem wejścia-wyjścia. W ten sposób można niezależnie od jakiegokolwiek oprogramowania nadzorować np. stan portu szeregowego o adresie 3F8h. Ze względów bezpieczeństwa magistrala adresowa odseparowana jest od układów dodatkowych za pomocą bramek 74245. Sygnały wyjściowe z komparatorów adresu (oraz -IOW) składane są za pomocą dwóch bramek NAND i tworzą sygnał wyzwalający zespół przerzutników zatrzaskowych 74574. Aktualny stan szyny danych zostaje zapamiętany (zatrzaśnięty) w przerzutni-kach. Ponieważ do każdego z bitów rejestru istnieje niezależny dostęp, można tu mówić o prostym układzie sterowania 8-kanałowego. Sygnał wyjściowy z bramek 7406 może wysterować małe odbiorniki, np. diody świecące lub czułe przekaźniki. Powyższy układ daje się łatwo obsługiwać np. z poziomu systemu MS-DOS za pomocą programu debug.com. Jeżeli przyjmiemy, że adres karty ustawiony jest na 300h, to przykładowa sekwencja: debug -o 300 ff -q spowoduje zapalenie wszystkich ośmiu diod świecących i powrót do systemu operacyjnego. Wykorzystywane sygnały magistrali D0 - D7 (Data) 8-bitowa magistrala danych. W analogiczny sposób można konstruować układy portów 16-bitowych wyprowadzając linie D8 - Dl5 i odpowiednio poszerzając ilość przerzutników portu. AO - A9 (Address) 10 najmniej znaczących linii szyny adresowej pozwala na objęcie przestrzeni OOOh -3FFh. Wyższe adresy urządzeń wejścia-wyjścia nie są wystawiane na magistrali zewnętrznej PC, tym niemniej można uzyskać do nich dostęp adresując układy karty jako pamięć. Wymaga to jednak zachowania znacznej ostrożności. ALE (Address Latch Enable) Wysoki poziom logiczny tego sygnału informuje, że stan szyny adresowej jest ustabilizowany (zawiera ważny adres). Jest to dla wszystkich podłączonych do magistrali urządzeń hasłem do rozpoczęcia dekodowania adresu i próby dopasowania go do adresów swoich rejestrów. -IOW (Input/Output Write) Sygnał ten informuje o dostępie procesora do przestrzeni wejścia-wyjścia w celu zapisu. Stanowi aktywnemu odpowiada niski poziom logiczny. +5V/GND Napięcie zasilające (V#CC) i masa systemowa. Zastosowane układy scalone Opis zastosowanych układów scalonych odnosi się do serii 74xxx. W praktycznych zastosowaniach należy się posługiwać nowocześniejszymi układami grupy 74LSxxx lub 74ALS.xxx, które zachowują pełną zgodność na poziomie logicznym i wyprowadzeń, ale pobierają znacznie mniej prądu i Ś co ważniejsze Ś w mniejszym stopniu obciążają magistralę swoimi wejściami. Układy ALS są ponadto szybsze. 74688 (komparator 8-bitowy) Układ ten porównuje dwie liczby ośmiobitowe L1 i L2. Liczba L1 doprowadzana jest do wejść PO - P7 a liczba L2 do wejść Q0 - Q7. Jeżeli wszystkie odpowiadające sobie pozycje bitowe L1 i L2 są sobie równe, tzn. PO = Q0, P1 = Q1, ..., P7 = Q7 oraz wejście sterujące ~COMP = O, to wyjście ~P = ~Q znajduje się na niskim poziomie logicznym. 74245 (ośmiokrotny nadajnik-odbiornik linii Ś transceiver) Układ ten jest zestawem ośmiu trójstanowych buforów dwukierunkowych (nadajników-odbiorników linii). Bufory A1B1 - A8B8 mogą pracować w kierunku A->B, B->A lub też ich końcówki mogą znajdować się w stanie wysokiej impedancji (tzw. trzecim stanie logicznym, Z), co praktycznie równoważne jest przerwie na liniach AjBj (i = 1..8). Wejście DIR (Direction) steruje kierunkiem pracy buforów, a wejście ~CS (Chip Select) wprowadza układ w stan wysokiej impedancji (Z). CS; DIR; Funkcja 1; X; A = Z, B = Z O; O; bufor B -> A O; 1; bufor A -> B X Ś oznacza dowolny stan logiczny. Współpraca z magistralą zewnętrzną 817 74574 (ośmiokrotny przerzutnik D) Układ stanowi zestaw 8 przerzutników typu D ze wspólnym wejściem zegarowym. Podanie na końcówkę sterującą ~CS logicznej jedynki wprowadza cały zespół w stan wysokiej impedancji (Z). Jeżeli ~CS = 0, narastające zbocze impulsu zegarowego C przepisuje stan wejść D, do odpowiednich wyjść Q; (/ = 0 ... 7). Do czasu nadejścia następnego impulsu zegarowego poziom wyjść Qj nie będzie się zmieniał, niezależnie od stanu wejść D,. Można też powiedzieć, że dane zostały zatrzaśnięte (ang. latch) w rejestrze. 7485 (komparator 4-bitowy) Układ porównuje dwie liczby czterobitowe L1 i L2 doprowadzone do wejść P0 - P3 i Q0 - Q3. Możliwa jest jedna z trzech sytuacji: • L1=L2, • L1>L2, • L1Q. Układy 7485 często łączone są kaskadowo dla uzyskania możliwości porównywania liczb o długości większej od 4 bitów. W tym celu komparator 7485 wyposażony jest w wejścia sygnałów przeniesienia P Q od układu wyższego poziomu. W naszym prostym przykładzie wykorzystywane jest jedynie porównywanie typu P=Q. Równie dobrze można tu zastosować część 8-bitowego komparatora 74688 lub inne rozwiązanie. 7400 (4 bramki NAND) Układ zawiera cztery dwuwejściowe bramki typu NAND. Wyjście bramki NAND znajduje się na niskim poziomie logicznym wtedy i tylko wtedy, gdy wszystkie wejścia posiadają wysoki poziom logiczny. X; Y; Wyjście 0; 0; 1 0; 1; 1 1; 0; 1 1; 1; 0 7406 (sześciokrotny inwerter O/C) Zestaw odwracających fazę bramek z tzw. otwartym kolektorem (ang. Open Collector, O/C]. Bramka taka nadaje się do sterowania diod LED lub małych przekaźników; wymaga ona dodatkowego rezystora „podciągającego". * * * Spis treści Rozdział 1. Komunikacja procesora z innymi elementami architektury komputera - 13 Procesor - 13 Przetwarzanie rozkazów - 15 RISC i CISC - 15 Pipeline - 16 Techniki przyspieszania - 19 Dostęp do pamięci - 26 Adresowanie - 28 Stronicowanie - 30 g - 31 pologie - 32 Organizacja pamięci podręcznej - 35 Pamięć podręczna procesora 80386 - 37 Zakres pokrywany przez pamięć podręczną - 41 Obsługa przestrzeni adresowej I/O - 43 Procesor 8086 - 44 Procesory 80386 i 80486 - 44 Pentium - 45 Funkcje kontrolne i sterujące - 45 BIST - 46 Kontrola TLB - 46 Kontrola pamięci podręcznej - 46 Przejście w stan wysokiej impedancji - 46 JTAG - 47 Częstotliwość taktowania - 49 Zasilanie - 51 Przegląd architektury procesorów - 54 Procesory AMD - 55 Rodzina K5 - 55 Rodzina K6 - 58 Rodzina K6-2 - 60 Rodzina K6 III - 63 Model K7 - 64 Procesory Cyrix - 69 Rodzina 6x86 (Ml) - 69 Rodzina M2 - 72 Procesory Intel - 75 Rodzina Pentium - 75 Pentium MMX - 77 Pentium Pro - 78 Pentium II - 82 Celeron - 87 Celeron A (Mendocino) - 89 Pentium II Xenon - 91 Pentium III - 92 Pentium III Xenon - 98 Itanium - 100 Procesory IDT - 100 WinChipCó - 100 WinChip2 - 102 RisemPó - 104 Jak rozpoznać typ procesora - 106 Czy procesor jest zgodny z układem 80286 lub lepszym - 106 Procesor 8086/88 czy 80186/88 - 107 Procesor 80286 - 107 Procesor 80386 - 108 Procesor 486 czy Pentium - 108 Koprocesory - 108 Koprocesor 8087 - 109 Koprocesor 80287 - 110 Koprocesor 80387 - 110 Koprocesori487SX - 111 Jak rozpoznać typ koprocesora - 111 Czy w systemie jest koprocesor - 112 Koprocesor 8087 - 113 Koprocesor 80287 czy 80387 - 113 Architektura komputera PC/XT - 113 Dostęp do przestrzeni wejścia-wyjścia - 114 Procesory 8086 i 8088 - 115 Procesor 8086 - 115 Procesor 8088 - 119 Kontroler 8288 - 119 Elementy składowe architektury komputera XT - 121 Ośmiobitowa magistrala zewnętrzna - 125 Architektura komputera AT - 127 Procesor 80286 - 130 Magistrala zewnętrzna (16-bitowa) - 132 Architektura komputerów 386, 486 i Pentium - 135 EISA (Extended Industry Standard Architecture) - 137 Wieloprocesorowość - 137 Magistrala zewnętrzna - 137 Kontroler DMA - 138 Kontroler przerwań sprzętowych - 138 Kontroler magistral - 138 Pamięć konfiguracji - 139 MCA (Micro Channel Architecture) - 139 VESALocal Bus - 141 Magistrala PCI (Penpherial Component Interconnect) - 143 Magistrala zewnętrzna - 155 Kontroler przerwań sprzętowych - 155 Pamięć konfiguracyjna urządzeń PCI - 157 Mechanizmy dostępu do pamięci konfiguracyjnej - 171 Autokonfiguracja urządzeń PCI - 174 Magistrala AGP (Accelerated Graphics Port) - 174 Sygnały magistrali AGP - 180 AGP w teorii - 184 AGP w praktyce - 190 Systemy wieloprocesorowe - 194 Architektura MPP - 195 Architektura UMA - 196 Komunikacja z pamięcią - 197 Buforowa pamięć podręczna (Cache) - 198 Obsługa układów peryferyjnych - 202 Architektura komputerów przenośnych - 209 Złącze PCMCIA - 210 Rozdział 2. Procesor z rozszerzeniem MMX - 211 Zmiany w architekturze - 211 Rozpoznanie procesora P55C - 213 Nowe rejestry - 214 Nowe typy danych - 217 Nowe rozkazy - 217 Przykład działania: rozkaz PACKUSWB - 220 Przykład działania: rozkaz PADDSW - 221 Przykłady zastosowań - 222 'B\uQ-Box - 223 Przetwarzanie pl iku W A V - 224 Rozdział 3. Układy pamięci PC - 225 Pamięci dynamiczne - 226 Tryb konwencjonalny - 227 Odczyt - 227 Zapis - 228 FPM (Fast Page Mode) - 228 Odczyt - 229 Zapis - 229 EDO (Extended Data Out) - 230 Odczyt - 230 Zapis' - 230 Porównanie - 232 SDRAM - 232 Linie zewnętrzne - 235 Rozkazy SDRAM - 237 Organizacje logiczne kostek SDRAM - 242 Moduły pamięci - 244 Moduły SIMM-30(SIP) - 244 Moduły SIMM PS/2 - 246 SIMM PS/2 bez parzystości (FPM i EDO) - 246 SIMM PS/2 36-bitowy - 249 System rozpoznawania modułów SIMM - 250 Moduły DIMM - 251 Buforowane DIMM DRAM - 251 Niebuforowane DIMM DRAM - 253 Niebuforowane DIMM SDRAM - 255 Rozpoznawanie modułu DIMM - 260 Systemy oznaczeń układów - 263 Układy DRAM - 263 Układy SDRAM - 266 Odświeżanie - 271 RAS Only - 273 CBR (CAS before RAS) - 273 Hidden - 275 Wykrywanie błędów i ich korekcja - 276 Błędy powtarzalne (He) - 277 Błędy sporadyczne (SE) - 277 Kontrola parzystości - 278 Kontrola ECC - 279 Układy pamięci magistrali 100 MHz - 280 Moduł - 281 Układy pamięci SDRAM PC-100 - 282 Pamięć konfiguracyjna (SPD) - 288 Moduły buforowane PC-100 - 288 Rozdział 4. System obsługi przerwań sprzętowych - 293 Układ scalony 8259A - 295 Cykl przyjęcia zgłoszenia - 296 Kaskadowe łączenie kontrolerów przerwań - 297 Fazy obsługi przerwań od układu Slave - 299 Programowanie kontrolera przerwań - 300 Inicjowanie pracy układu - 300 Polling - 305 Przerwanie niemaskowalne (NMI) - 305 Rozdział 5. Kontroler DMA - 307 Układ scalony 8237A - 308 Tryby pracy kontrolera DMA - 311 Kaskadowe łączenie układów 8237A - 312 Programowanie kontrolerów DMA - 313 Adresy portów kontrolerów DMA w komputerze IBM PC/XT - 314 Adresy portów kontrolerów DMA w komputerze IBM PC/AT - 315 Budowa rejestrów wewnętrznych - 317 Przebieg transmisji - 321 Komputer IBM PC - 321 Komputer IBM PC/XT - 322 Komputer IBM PC/AT - 322 Kanały 16-bitowe - 323 Układ odświeżania pamięci - 324 Rozdział 6. Kontroler napędu dysków elastycznych - 327 Zapis informacji na dyskietce - 327 Fizyczna organizacja danych na dyskietce - 329 Programowanie operacji dyskowych z poziomu systemu MS-DOS - 332 Obsługa dysków za pomocą funkcji BIOS - 336 Bezpośredni dostęp do kontrolera napędu dysków elastycznych - 345 Rejestry kontrolera napędu dysków elastycznych - 346 Cykl rozkazowy kontrolera - 348 Faza przygotowawcza - 348 Faza przekazywania rozkazu - 349 Budowa przykładowego rozkazu Ś rozkaz RS (Read Sector) - 349 Alternatywne metody transmisji danych - 355 Uwzględnianie mechanicznych własności napędu - 356 Zastosowanie kodów CRC - 358 Rozdział 7. Obsługa dysku twardego - 361 Budowa kontrolera - 361 Systemy kodowania MFM i RLL - 362 Fizyczna organizacja danych i formatowanie - 365 Formatowanie wysokiego poziomu - 366 Formatowanie niskiego poziomu - 366 Błędy i ich korekcja - 367 Standard AT-BUS - 372 Logiczny opis złącza - 373 Złącze fizyczne - 374 Dostęp CPU do dysku AT-BUS - 378 Cykl programowania kontrolera - 385 Faza przekazywania rozkazu - 385 Faza przekazywania danych - 385 Faza końcowa - 387 Przykład realizacji rozkazu CZYTAJ SEKTOR - 388 Przykład realizacji rozkazu samoidentyfikacji dysku (Device Identify) - 390 Funkcje oszczędnościowe - 394 System automatyczny - 394 Rozkazy specjalne - 395 Standard ElDE - 399 Zwiększenie zakresu pojemności dysków - 401 Bariera 504 MB - 402 Metody omijania bariery 504 MB - 404 Bariera 2 GB - 407 System FAT (bariera 2 047 MB) - 407 Bariera 4 GB - 408 Windows NT Śbariera 4 GB - 408 Bariera 8 GB - 408 Straty pojemności - 410 Przekraczanie bariery 8 GB - 410 Prędkości transmisji danych - 412 Tryby PIO - 413 Tryby DMA - 413 Tryb Ultra DMA/33 - 417 Tryb Ultra DMA/66 - 420 Zwiększenie liczby urządzeń - 422 Poszerzenie oferty urządzeń IDE - 422 Nowe rozkazy - 423 Blok informacyjny po komendzie 1DENTIFY - 423 Standard SCSI - 424 Ogólny opis systemu - 424 Realizacja magistrali - 427 SCSI w komputerach PC - 431 Organizacja pracy magistrali SCSI - 443 Fazy pracy magistrali - 444 Transfer danych w fazach informacyjnych - 459 Sytuacje wyjątkowe - 468 Rozkazy systemowe - 470 Informacja statusowa - 475 Komunikaty - 476 System wskaźników - 482 Przykładowa wymiana danych - 484 Rozdział 8. Karty graficzne - 489 Przegląd kart graficznych - 489 Omówienie kart graficznych EGA, VGA i SVGA - 491 Tryby tekstowe - 496 Tryby graficzne - 497 Tryby zapisu i odczytu pamięci obrazu - 498 Standard VESA - 499 Rejestry sterowników EGA/VGA - 501 Rejestry zewnętrzne (external/general registers) - 502 Układ sekwencyjny (sequencer) - 504 Układ graficzny (graphics controller) - 507 Układ sterowania atrybutem (attribute controller) - 512 Przetwornik cyfrowo-analogowy (digital to analog converter) - 517 Układ sterowania wyświetlaczem (CRT controller) - 520 Funkcje BIOS obsługujące karty graficzne - 530 Funkcje określające tryb pracy i ogólne parametry sterownika - 531 Funkcje dostępu do ekranu - 535 Funkcje służące do definiowania kolorów - 539 Funkcje generatora znaków - 547 Funkcje konfigurujące sterownik - 555 Funkcje uzupełniające - 559 Dodatkowe funkcje obsługiwane przez YESA-BIOS - 568 Przykłady zastosowania funkcji BiOS-u kart graficznych - 574 Rozpoznanie typu karty graficznej - 574 Sprawdzenie ilości pamięci zainstalowanej na karcie graficznej - 575 Zmiana wyglądu znaku - 575 Rozdział 9. Grafika PC w dobie multimediów - 577 Przetwarzanie sekwencji wideo - 578 Sprzętowe wspomaganie funkcji wideo - 579 Interfejs programowy - 581 Format MPEG - 583 Dekodowanie - 585 Kodowanie - 587 Przetwarzanie scenerii 3D - 589 Schemat przetwarzania obiektów 3D - 590 API - 592 Geometry Engine - 593 Tłumaczenie opisu środowiska - 594 Oświetlenie i tekstura - 594 Przekształcenia geometryczne - 594 Strefa widoczności - 595 Przekazanie parametrów do jednostki rasteryzującej - 595 Rendering Engine - 596 Teksturowanie - 599 Mieszanie kolorów - 605 Efekty specjalne - 606 Pamięć lokalna akceleratora 3D - 607 Franie BufFer - 608 Bufor Z/W - 609 Pamięć tekstur - 611 Rozmiar pamięci i organizacja - 613 Rodzaje pamięci graficznych - 617 RAM-DAC - 620 Dopasowanie monitora do karty - 623 Parametry karty - 623 Jakość monitora - 625 Programy instalacyjne - 627 Kanał informacyjny VESA DDC - 628 Podział mocy obliczeniowej - 629 Przykłady rozwiązań akceleratorów graficznych - 631 Układ Voodoo - 631 Układ Voodoo-2 - 632 Rozdział 10. System odmierzania czasu - 633 Układ 8253/8254 - 633 Programowanie generatora 8253/8254 - 637 Zegar systemowy - 641 Układ odświeżania pamięci dynamicznej - 642 Obsługa głośnika - 644 Drugi układ 8254 i jego zastosowanie - 646 Rozdział 11. Pamięć CMOS-RAM - 649 Układ scalony MC 146818 - 650 Funkcje BIOS obsługujące pamięć konfiguracji - 660 Bezpośredni dostęp do pamięci CMOS - 663 Rozdział 12. Łącze równoległe - 665 Terminologia BIOS-SETUP - 667 Tryby podstawowe - 668 Tryb standardowy - 668 Tryb pólbajtowy - 675 Tryb bajtowy (PS/2) - 676 Tryb EPP - 676 Tryb ECP - 680 Realizacja portu równoległego w ramach architektury PC - 685 Dostęp do łącza równoległego poprzez funkcje BIOS - 686 Dostęp do łącza równoległego z poziomu systemu MS-DOS - 690 Ogólne zastosowanie łącza równoległego - 692 Rozdział 13. Łącze szeregowe - 697 Transmisja synchroniczna - 697 Transmisja asynchroniczna - 697 Asynchroniczna transmisja szeregowa i ramka danych - 697 Układ scalony 8250 - 699 Interfejs RS-232C - 703 Tryb simpleksowy - 706 Tryb półdupleksowy - 706 Tryb dupleksowy - 706 Dostęp do łącza szeregowego z poziomu systemu MS-DOS - 708 Funkcje BIOS obsługujące łącze szeregowe - 711 Bezpośrednie programowanie rejestrów LJART - 716 Przerwania generowane przez łącze szeregowe - 718 Prędkość transmisji - 721 Sygnały sterujące - 722 Specyfika układu UART 16450 - 724 Rozdział 14. Klawiatura - 725 Klawiatury XT, AT i PS/2 - 725 Mapa klawiatury - 727 Organizacja obsługi klawiatury przez BIOS - 732 Funkcje przerwania 16h BIOS - 737 Bezpośrednie programowanie klawiatury - 742 Port wejściowy i port wyjściowy - 749 Rozdział 15. Pozostałe urządzenia wejścia - 753 Myszka i jej obsługa - 753 Game port - 760 Rozdział 16. Złącze USB - 763 Specyfikacja - 763 Topologia - 764 Okablowanie - 764 Protokół - 765 USB w praktyce - 768 Rozdział 17. Zasilacz - 771 Dodatek A Programy konfiguracyjne - 775 Organizacja systemu bezpieczeństwa - 776 System ochrony przed wirusami atakującymi Boot-Sektor - 778 System ładowania wartości predefmiowanych - 778 Mechanizm opuszczania programu konfiguracyjnego - 779 Ogólna konstrukcja blokowa - 779 Dodatek B Współpraca z magistralą zewnętrzną - 813 Opis działania - 813 Wykorzystywane sygnały magistrali - 815 Zastosowane układy scalone - 816 Dodatek C CD-ROM dołączony do książki 819