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 cimei PERBAS EQU 10h ; periferia baziscime PERCMD EQU 11h ; periferia vezerlesi cime (A0=1) ; a feldadat egyeb parameterei BUFF EQU E0000h ; ide kell az adatokat tenni COUNT EQU 500 ; ennyi adatot kell atvinni ;8259A ITC ICW1D40 EQU 11011b ; ICW1 D4-0 (élvezérelt, 8 byte, egyedül van, ICW4 ) ITC EQU 30H ; 8259A baziscime: A7-4=0011 (A7-4 van a dekoderre kotve) EOI EQU 20H ; OCW2 - Nem specifikus EOI parancs TBL_OFFS EQU 40H ; 64 byte az IT ugrási tábla elhelyezéséhez ;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 : 8259A inicializálása LXI H,IT_TABL ; az IT ugrási tábla címe MOV A,L ; alsó 8 bit ORI ICW1D40 ; ICW1 OUT ITC MOV A,H ; felso 8 bit OUT ITC+1 ; ICW2 MVI A,FEh ; maszkol az IR0-n kivul mindnet OUT ITC+1 ; OCW1-> M7-1=1 EI ; most már jöhet IT ;3.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 ; jelen esetben egy végtelen ciklusban csak a megszakításra vár a foprogram JMP $ ; az IT ugrási tábla elhelyezése a következo 40H-val osztható címre ORG ($+TBL_OFFS -1) AND NOT (TBL_OFFS -1) IT_TABL: JMP VEGE ; a tobbi bejegyzesre nem kerulhet a vezerles, mert IR1-7 le van tiltva! VEGE: ;ha ide jutottunk, akkor megtortent az atvitel... ; IT törlése MVI A,EOI OUT ITC EI ; az EI egy utasítást "késik" (a RET végrehajtódik) END