DMA

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 18:47, 14 sie 2023
Mono (Dyskusja | wkład)
(opis dma w atari 400/800/xl/xe)
← Previous diff
Wersja z dnia 19:17, 14 sie 2023
Mono (Dyskusja | wkład)
(nie zalezy od HSCROL)
Next diff →
Linia 43: Linia 43:
* szerokość ekranu (wąski / normalny / szeroki), * szerokość ekranu (wąski / normalny / szeroki),
* bit 4 (HSCRL) w bajcie rozkazu [[ANTIC Display List#Przesuw obrazu|Display List]], * bit 4 (HSCRL) w bajcie rozkazu [[ANTIC Display List#Przesuw obrazu|Display List]],
-* wartość przesunięcia poziomego zapisana w [[Rejestry ANTIC-a#HSCROL|rejestrze HSCROL ($D404)]]. 
* bit 5 (VSCRL) w bajcie rozkazu [[ANTIC Display List#Przesuw obrazu|Display List]], * bit 5 (VSCRL) w bajcie rozkazu [[ANTIC Display List#Przesuw obrazu|Display List]],
* wartość przesunięcia pionowego zapisana w [[Rejestry ANTIC-a#VSCROL|rejestrze VSCROL ($D405)]]. * wartość przesunięcia pionowego zapisana w [[Rejestry ANTIC-a#VSCROL|rejestrze VSCROL ($D405)]].

Wersja z dnia 19:17, 14 sie 2023

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).
  • Wyłączenie DMA sprajtów w trakcie tworzenia obrazu powoduje renderowanie aktualnego kształtu sprajta w kolejnych liniach (zmienia się jednakże licznik pamięci kształtu sprajta).
  • Nie można wyłączyć pobierania kształtu znaków z generatora znaków.

Zobacz też

Personal tools