DMA - jak to zaprogramowac

0

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

0

I po sprawie - powyzszy kod jest poprawny, a ja szukalem bledu tam gdzie go byc niemoglo.
w jednej z funkcji zabraklo instrukcji powrotu, to bylo przyczyna wykonywania sie innych funkcji znajdujacych sie pod nia i wten sposob dma magicznie sie przeprogramowywalo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1