Toto je starší verze dokumentu!
Z80-DMA
DMA je čip, který navrhla stejná firma jako procesor Z80, firma Zilog. Navrhla ho jako pomocníka k procesoru Z80. Jeho hlavní funkce je blokový přenos dat bez asistence procesoru. Má ještě speciální funkce jako například vyhledávání ve velkém bloku dat. Jeho výhoda je především v rychlosti, přenáší bloky několikrát rychleji, než samotný procesor Z80 a jeho bloková instrukce LDIR. Jak rychle, o tom rozhoduje vlastní konstrukce počítače, ve kterém je použit.
Z80-DMA a ZX Spectrum
DMA čip standardně v ZX Spectru použitý nebyl. Objevil se jen jako přídavný interface, například v MB02+, nebo v DataGear. Pokud se aktivuje přenos pomocí DMA, procesor Z80 mu přenechá všechen strojový čas, a sám stojí, dokud DMA přenos nedokončí. DMA se ovládá pomocí jediného portu, u MB02+ je to port 11, u DataGearu je to port 107. LnxSpectrum ho emuluje na portu 11.
Nejvýhodnější by samozřejmě bylo DMA použít pro scrollování obrazovky. Jenže v tomto případě není konstrukce ZX Spectra k využívání DMA příliš nakloněna. Díky svému rozložení VideoRam lze DMA použít jen pro horizontální scroll, a to ještě jen v případě scrollování vždy celých třetin obrazovky. Vertikální scroll není pro jistotu možný vůbec, nebo by spotřeboval větší množství strojového času, než jaký by potřeboval ke stejnému přenosu samotný procesor Z80. V čem je problém? Vždyť přenos jednoho bajtu trvá DMA 6 taktů, a nejrychlejší přenos Z80 (LDI) sežere 16 taktů na 1 bajt. Problém je v inicializaci DMA čipu, která se pro přesun malých bloků prostě nevyplatí. U vertikálního scrollingu potřebujeme přenášet bloky o velikosti 32 bajtů:
Přenos 32 bajtů | taktů |
DMA | 575 |
LDIR | 697 |
LDI | 532 |
POP/PUSH | 408 |
Při tomto přenosu jen inicializace DMA čipu trvá 400 taktů. Vlastní přenos pak trvá jen 192 taktů.
Pro přenos větších bloků však DMA nemá v ZX Spectru konkurenta. DMA přenese kopii obrazovky za 41472 taktů, procesor Z80 to zvládne za 110592 taktů, tedy skoro 3x pomaleji.