Witam
Mam problem z zaprogramowaniem DMA do odbioru bajtow nadsylanych z dyskietki. Chodzi o to ze niezaleznie jakimi wartosciami zainicjuje rejestry adresowy (port 4), oraz strony (port 81h) kanalu 2 DMA transmisja zawsze zaczyna sie od strony 0Bh i przesuniecia na stronie 0. Po wczytaniu jednego sektora z dyskietki o wielkosci 200h=512 bajtow z wykorzystaniem DMA wartosci STRONA:PRZESUNIECIE wygladaja 0bh:200h.
To moj kodzik, ktorym usiluje zmusic 2 kanal dma do wspolpracy:
cli
mov al, 6
out 0ah, al ;maskowanie kanalu 2 DMA na czas programowania
xor eax, eax
out 0ch, al
;tryb pracy single, inkrementacja adresu, zapis do pamieci, bez samoprogramowania, kanal 2
mov al, 01000110b
out 0bh, al ;wyslanie bajtu programujacego tryb pracy
mov ax, 512-1 ;wartosc licznika transmisji
out 5, al ;najpierw mlodszy
mov al, ah
out 5, al ;potem starszy
mov ax, 0h ;przesuniecie na stronie
out 4, al ;mlodszy bajt przesuniecia
mov al, ah
out 4, al ;starszy bajt przesuniecia
mov al, 8h ;strona DMA
out 81h, al
mov al, 2
out 0ah, al ;usuwanie maski kanalu 2 DMA
sti
To jedyny kod robiacy coklwiek z kontrolerem DMA - np. nie przeprowadzam resetu zadnego z kontrolerow, ani nie programuje innych kanalow, ktore sa mi nie potrzebne, polegam na inicjacji BIOSU.
A to jedyny kanal ktory przeprogramowalem na wlasne potrzeby.
Pozdrawiam