ORG 0000h ; 8237 DMAC cimek CH0_A EQU 00h ; channel 0 start address CH0_C EQU 01h ; channel 0 word count CH1_A EQU 02h ; channel 1 start address CH1_C EQU 03h ; channel 1 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 STATUS EQU 08h ; Status Register REQUEST EQU 09h ; Request Register ; a feldadat egyeb parameterei ROM EQU 0000h ; ROM cime, innen kell az adatok atmasolni RAM EQU E000h ; RAM cime, ide kell az adatokat tenni COUNT EQU 2000h ; atviendo adatok szama: 8k ;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,01h ; DMAC vezerlesenek beallitasa (C0=1: m->m; C1=0 CH0 cim valt., stb.) OUT COMMAND ; parancs regiszter irasa ; CH0 felprogramozasa MVI A,10001000b ; C10=00: CH0, C32=10 MEM olv., C4=0: no Auto, C5: cimnov. C76=10 blokkos atv. OUT MODE ; mode regiszter irasa LXI H,ROM ; 0000h ROM cimrol masol RAM-ba MOV A,L ; kezdeti forrascim also bajtja OUT CH0_A ; CH0 cimregiszter irasa MOV A,H ; kezdeti forrascim felso bajtja OUT CH0_A ; CH0 cimregiszter irasa ; a szoszamot majd a CH1-ben allitjuk be! ; CH1 felprogamozasa MVI A,10000101b ; C10=01: CH1, C32=01 MEM olv., C4=0: no Auto, C5: cimnov. C76=10 blokkos atv. OUT MODE ; mode regiszter irasa LXI H,RAM ; E000h RAM cimre irja a ROM tartalmat MOV A,L ; kezdeti celcim also bajtja OUT CH1_A ; CH1 cimregiszter irasa MOV A,H ; kezdeti celcim felso bajtja OUT CH1_A ; CH1 cimregiszter irasa LXI H,COUNT-1 ; terminal count: FFFF (1-gyel kisebet kell megadni) MOV A,L ; kezdeti szoszamlalo also bajtja OUT CH1_c ; CH1 szoszam regiszter irasa MOV A,H ; kezdeti szoszamlalo felso bajtja OUT CH1_c ; CH1 szoszam regiszter irasa ; minden csatorna maszkolva van, CH0-t engedelyezzuk az inditashoz! MVI A,00h ; engedelyezem a CH0 csatornat -- ezen adom majd ki a kerest! OUT SNGMASK ; single mask regiszter irasa ; MEM->MEM DMA elinditasa: MVI A,04h ;szoftveres DMA kerest kuldok a CH 0 csatornara OUT REQUEST ;keres regiszter irasa ; ellenorzom hogy megtortent-e a teljes adatatvitel teszt: IN STATUS ;DMAC status register olvasasa ANI 01h ;CH0 lejart? (meg volt a ROM->RAM masolas?) JZ teszt ;ha nem: allapotolvasast folytatni! END