DMA

From Atariki

Jump to: navigation, search

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 1Bit 0Znaczenie
00Brak obrazu - DMA wyłączone.
01Wąski obraz - DMA włączone.
10Normalny obraz - DMA włączone.
11Szeroki 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ż

Personal tools