Zilog Z80 DMA (Direct Memory Access) omogoča hitro prenašanje blokov podatkov med pomnilniškimi naslovi ali med pomnilnikom in V/I napravami brez neposrednega posredovanja procesorja. Na računalniku Partner je DMA krmilnik preslikan na en sam priključek 0xC0.
DMA se programira s pisanjem zaporedja bajtov na priključek 0xC0. Vsak bajt se interpretira glede na predhodno poslan nadzorni bajt; z njim se nastavijo registri WR0–WR6, ki določajo izvorno in ciljno naslov, dolžino bloka, smer prenosa ter prekinitve.
| Priključek | Dec | Opis | Smer | Opomba |
|---|---|---|---|---|
0xC0 | 192 | DMA register | V/I | Pisanje zaporedja registrov WR0–WR6 |
| Register | Opis |
|---|---|
| WR0 | Naslov izvora, dolžina bloka, smer (pomnilnik↔pomnilnik ali pomnilnik↔V/I) |
| WR1 | Lastnosti vrat A (korak naslova, tip: pomnilnik ali V/I) |
| WR2 | Lastnosti vrat B (korak naslova, tip: pomnilnik ali V/I) |
| WR3 | Maske, iskanje, prekinitve |
| WR4 | Naslov cilja, način prenosa (enojni, paketni, neprekinjen) |
| WR5 | Avtomatski ponovni zagon, signal READY |
| WR6 | Ukaz: Reset, Omogoči DMA, Onemogoči DMA, Stanje |
dma_kopiraj:
; --- WR6: Ponastavi DMA ---
ld a, #0xC3 ; Ukaz: ponastavi DMA
out (#0xC0), a
; --- WR0: Naslov izvora = 0x8000, dolžina = 256, pomnilnik → pomnilnik ---
ld a, #0x7D ; WR0: naslov A, dolžina, bit 2=prenos
out (#0xC0), a
ld a, #0x00 ; Naslov A nizki bajt (0x8000)
out (#0xC0), a
ld a, #0x80 ; Naslov A visoki bajt
out (#0xC0), a
ld a, #0x00 ; Dolžina nizki bajt (256)
out (#0xC0), a
ld a, #0x01 ; Dolžina visoki bajt
out (#0xC0), a
; --- WR1: Vrata A – pomnilnik, korak +1 ---
ld a, #0x14 ; WR1
out (#0xC0), a
; --- WR2: Vrata B – pomnilnik, korak +1 ---
ld a, #0x28 ; WR2
out (#0xC0), a
; --- WR4: Naslov cilja = 0x9000, neprekinjen način ---
ld a, #0x85 ; WR4: naslov B, neprekinjen način
out (#0xC0), a
ld a, #0x00 ; Naslov B nizki bajt (0x9000)
out (#0xC0), a
ld a, #0x90 ; Naslov B visoki bajt
out (#0xC0), a
; --- WR6: Zaženi DMA ---
ld a, #0x87 ; Ukaz: omogoči DMA
out (#0xC0), a
; Počakaj na konec prenosa
.cakaj:
in a, (#0xC0) ; Preberi stanje DMA
bit 1, a ; Bit 1: prenos v teku
jr nz, .cakaj ; Čakaj, dokler ni zaključen
ret