DMA
From Atariki
Direct Memory Access oznacza bezpośredni (bez użycia CPU) dostęp układów komputera do pamięci.
W małym Atari za kontrolę DMA odpowiada układ ANTIC i właśnie on jako jedyny realizuje wszystkie takie dostępy. Dodatkowo ma wyższy priorytet niż CPU przez co wstrzymuje na ten czas jego działanie za pomocą linii HALT.
Za pomocą DMA pobierane są:
- Display List,
- pamięć ekranu (treść w trybach graficznych i kody znaków w trybach tekstowych),
- generator znaków (kształt znaków w trybach tekstowych),
- kształt sprajtów - osobno graczy i osobno pocisków
oraz realizowane jest odświeżanie pamięci DRAM.
DMA konfiguruje się za pomocą rejestru DMACTL ($D400) (cień DMACTLS ($22F)):
- bit 7: niewykorzystany
- bit 6: niewykorzystany
- bit 5: DMA dla Display List (1 = włączone)
- bit 4: rozdzielczość graczy i pocisków (0 = dwuliniowa, 1 = jednoliniowa)
- bit 3: DMA dla graczy (1 = włączone)
- bit 2: DMA dla pocisków (1 = włączone)
- bity 0 i 1: DMA dla pamięci ekranu:
Bit 1 | Bit 0 | Znaczenie |
0 | 0 | Brak obrazu - DMA wyłączone. |
0 | 1 | Wąski obraz - DMA włączone. |
1 | 0 | Normalny obraz - DMA włączone. |
1 | 1 | Szeroki obraz - DMA włączone. |
Zależnie więc od tego czy włączone jest:
- pobieranie rozkazów Display List,
- pobieranie danych pamięci ekranu
- czy pobieranie kształtu sprajtów,
- no i czy pobieramy pierwszą linię skanningową wiersza trybu czy kolejną,
tyle danych w linii skanningowej trzeba będzie pobrać.
W przypadku programu Display List jest to:
- rozkazy skoków JMP - zawsze 3 bajty,
- rozkazy tworzenia trybów z załadowaniem licznika LMS - zawsze 3 bajty,
- pozostałe rozkazy tworzenia trybów - zawsze 1 bajt,
- rozkazy tworzenia pustych linii - zawsze 1 bajt.
Ilość bajtów przeznaczonych do pobrania dodatkowo określana jest przez:
- tryb (ilość bitów na piksel),
- rodzaj trybu (graficzny / tekstowy),
- szerokość ekranu (wąski / normalny / szeroki),
- bit 4 (HSCRL) w bajcie rozkazu Display List,
- bit 5 (VSCRL) w bajcie rozkazu Display List,
- wartość przesunięcia pionowego zapisana w rejestrze VSCROL ($D405).
Odświeżanie pamięci DRAM zabiera zawsze 9 cykli w każdej linii ekranowej ramki obrazu.
Uwagi
- Niezależnie od rozdzielczości sprajtów ich dane są pobierane z pamięci w każdej linii skanningowej.
- Włączenie DMA graczy automatycznie wymusza też włączenie DMA pocisków.
- Wyłączenie DMA Display List w trakcie tworzenia obrazu powoduje renderowanie aktualnego wiersza trybu aż do chwili ponownego włączenia (zmienia się jednakże licznik pamięci ekranu, ale nie zmienia się licznik programu Display List).
- Wyłączenie DMA sprajtów w trakcie tworzenia obrazu powoduje renderowanie aktualnego kształtu sprajta w kolejnych liniach (zmienia się jednakże adres bajtu kształtu sprajta).
- Nie można wyłączyć pobierania kształtu znaków z generatora znaków.
Zobacz też
- Ramka
- ANTIC
- Rejestry ANTIC-a
- Tryby Display List
- Altirra Hardware Reference Manual ze szczegółowym opisem możliwości sprzętowych układu ANTIC