ORG 0000h ; 8237 DMAC cimek CH0_A EQU 00h ; channel 0 start address CH0_C EQU 01h ; channel 0 word count ALLMASK EQU 0Fh ; ALL Mask Register SNGMASK EQU 0Ah ; Single Mask Register MODE EQU 0Bh ; Mode Register MCLEAR EQU 0Dh ; Master Clear COMMAND EQU 08h ; Command Register ; input periferia PERBAS EQU 10h ; periferia baziscime PERCMD EQU 11h ; periferia vezerlesi cime (A0=1) ; a feldadat egyeb parameterei BUFF EQU E000h ; ide kell az adatokat tenni COUNT EQU 500 ; ennyi adatot kell atvinni ;1.lepes: DMAC init OUT MCLEAR ; master clear -- MINDEGY, mit küldök ki!!! MVI A,0Fh ; mind a negy csatorna maszkolasa OUT ALLMASK ; ALL mask register irasa MVI A,00h ; DMAC vezerlesenek beallitasa OUT COMMAND ; parancs regiszter irasa ; CH0 felprogramozasa MVI A,10000100b ; atvitel modjanak beallitasa (lasd: oravazlat) OUT MODE ; mode regiszter irasa LXI H,BUFF ; milyen cimre irunk a RAM-ba MOV A,L ; kezdeti cim also bajtja OUT CH0_A ; CH0 cimregiszter irasa MOV A,H ; kezdeti cim felso bajtja OUT CH0_A ; CH0 cimregiszter irasa LXI H,COUNT-1 ; ennyi bajtot kell beolvasni, TC: FFFFh-nal MOV A,L ; kezdeti szamlalo also bajtja OUT CH0_C ; CH0 szoszam regiszter irasa MOV A,H ; kezdeti szamlalo felso bajtja OUT CH0_C ; CH0 szoszam regiszter irasa ;most mar minden be van allitva, de minden csatorna tiltva van MVI A,00h ; engedelyezem a CH0 csatornat OUT SNGMASK ; single mask regiszter irasa ;2.lepes: periferia elinditasa LXI H,COUNT ; ennyi bajtot kell beolvasni MOV A,L ; kert szoszam also bajtja OUT PERCMD ; periferiaba kikuldom MOV A,H ; kert szoszam felso bajtja OUT PERCMD ; periferiaba kikuldom ; ezutan a periferia keri a DMA-t, az pedig lezajlik... ;ellenorzom hogy megtortent-e a teljes adatatvitel teszt: IN COMMAND ; DMAC status regiszter olvasasa ANI 01h ; CH0 lejart? JZ teszt ; ha nem: allapotolvasast folytatni! END