141
Kontroler 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 4*4) 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 0 i 1 fizycznie w jednym rejestrze, choć prowadzą do niego dwa porty (R3h 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 lego 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 adies 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-bitowc, można nimi adresować obszar o wymiarach do 64 kB (tzw. stronę DMA). 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 nic 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 wiciu innych kontrolerów' w komputerze PC, odbywa się poprzez zapisywanie przez, procesor rejestrów sterujących odpowiednią wartością Informacja o stanie kontroleia 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.