home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Intermedia 1998 January
/
inter1_98.iso
/
www
/
rozi
/
PROG.TXT
< prev
next >
Wrap
Text File
|
1997-12-15
|
16KB
|
507 lines
Programowanie operacji dyskowych.
++++++++++
+ MS-DOS +
++++++++++
===============================================================================
przerwanie INT 25h DOS - czytaj sektor logiczny
rejestr parametr wartosc zwracana
AL numer dysku -
AX - kod bledu
CX liczba sektorow -
DX pierwszy sektor -
BX:DS adres bufora odczytu -
Carry - ustawiany gdy blad
===============================================================================
przerwanie INT 26h DOS - pisz sektor logiczny
rejestr parametr wartosc zwracana
AL numer dysku -
AX - kod bledu
CX liczba sektorow -
DX pierwszy sektor -
BX:DS adres bufora odczytu -
Carry - ustawiany gdy blad
W rejestrze AL przekazywany jest numer dysku:
A: numer "0"
B: numer "1"
C: numer "2"
D: numer "3" itd.
Jezeli ustawiona jest flaga Carry, obie funkcje zwracaja w rejestrze AL
nastepujace kody:
kod bledu znaczenie
01h nieprawidlowy rozkaz
02h niewlasciwa metryka ID
04h nie znaleziono sektora
08h przepelnienie DMA
10h blad CRC lub ECC
20h blad kontrolera
40h blad pozycjonowania
80h brak reakcji dysku (napedu)
===============================================================================
przerwanie INT 25h DOS - czytaj sektor logiczny, tryb poszerzony
rejestr parametr wartosc zwracana
AL numer dysku -
AX - kod bledu
CX ffffh -
BX:DS adres tablicy dodatkowej -
Carry - ustawiany gdy blad
===============================================================================
przerwanie INT 25h DOS - czytaj sektor logiczny, tryb poszerzony
rejestr parametr wartosc zwracana
AL numer dysku -
AX - kod bledu
CX ffffh -
BX:DS adres tablicy dodatkowej -
Carry - ustawiany gdy blad
Tablica dodatkowych parametrow przekazywanych trybie poszerzonym funkcjom
25h i 26h sklada sie z 10 bajtow.
bajty tablicy znaczenie
0-3 numer pierwszego sektora (4 bajty)
4-5 ilosc sektorow objetych dzialaniem funkcji
6-9 adres bufora (zapisu 26h ew. odczytu 25h)
===============================================================================
przerwanie INT 21h
niektore funkcje:
funkcja dzialanie
3ch utworzyc plik
3dh otworzyc plik
3eh zamknac plik
41h usunac plik
39h utworzyc katalog
3ah usunac katalog
3bh przejsc do innego katalogu
57h odczytac/zmienic informacje data/czas pliku
===============================================================================
===============================================================================
++++++++++++++++
+ Funkcje BIOS + Przerwanie 13h
++++++++++++++++
===============================================================================
Numeracja cylindrow:
CL: bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
CH: bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
bity 7-6 rejestru CL tworza wraz z rejestrem CH 10-bitowy numer cylindra.
Pozostale pozycje bitowe rejestru CL adresuja zwykle sektor na sciezce.
Numeracja dyskow:
BIOS identyfikuje dyski poprzez kolejne numery zaczynajac od 80h.
Tak wiec 80h - C:, 81h - D:, itd. (DOS oznacza napedy poczawszy od 0)
Kody bledow:
wszystkie podane funkcje zwracaja w rejestrze AH kod bledu, kotry jest
umieszczany jednoczesnie w obszarze danych BIOS pod adresem 040h:074h.
kod bledu znaczenie
00h bezblednie
01h zly numer funkcji
02h nie znaleziono znacznika adresu
04h nie znaleziono sektora
05h nieudany Reset
07h bledna inicjalizacja
09h przepelnienie strony DMA
10h blad odczytu
11h dane mimo bledu odczytywane z pomoca kodu ECC
20h blad kontrolera
40h nie znaleziono sciezki
80h brak reakcji napedu
bbh blad BIOS'u
ffh inny nieznany blad
--- funkcja 00h ---------------------------------------------------------------
Funkcja sprowadza wewnetrzne rejestry kontrolera do scisle okreslonego
stanu poczatkowego. Aktualnie wykonywana operacja zostanie przerwana.
rejestr parametr wartosc zwracana
AH 00h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
mov ah,00h ;funkcja 0
mov dl,81h ;dysk D:
int 13h ;inicjalizacja kontrolera
--- funkcja 01h ---------------------------------------------------------------
Funkcja odczytuje status ostatniej operacji. Odtwarza w rejsetrze AH bajt
statusu taki sam jak po ostatnio przeprowadzonej operacji bez wzgledu na to
jak dawno sie zakonczyla.
rejestr parametr wartosc zwracana
AH 01h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 02h ---------------------------------------------------------------
Funkcja czyta jeden lub kilka sektorow z dysku do bufora w pamieci
operacyjnej. Wszystkie przeczytane sektory lokowane sa w pamieci poczawszy
od adresu podanego w ES:BX, zamazuje ewentualnie ine dane. Do obowiazkow
programisty nalezy zarezerwowanie odpowiedniej ilosci wolnego obszaru.
rejestr parametr wartosc zwracana
AH 02h kod bledu
AL liczba sektorow do przeczytania
CH numer sciezki
CL numer sektora
DH numer glowicy
DL numer dysku
ES:BX adres w pamieci, gdzie maja byc
umieszczone przeczytane sektory
Carry - ustawiany gdy blad
--- funkcja 03h ---------------------------------------------------------------
Funkcja jest komplementarnym odpowiednikiem funkcji 02h. Nalezy tylko zwrocic
uwage, ze jako sektor zapisywane sa zawsze pelne 512-bajtowe bloki pamieci
(poczawszy od adresu ES:BX) nawet wtedy gdynie zawieraja one wylacznie danych
umieszczonych tam przez programiste.
rejestr parametr wartosc zwracana
AH 03h kod bledu
AL liczba sektorow do przeczytania
CH numer sciezki
CL numer sektora
DH numer glowicy
DL numer dysku
ES:BX adres w pamieci, gdzie maja byc
umieszczone przeczytane sektory
Carry - ustawiany gdy blad
--- funkcja 04h ---------------------------------------------------------------
Funkcja sprawdza poprawnosc kodow ECC sektora przeprowadzajac czytanie probne.
rejestr parametr wartosc zwracana
AH 04h kod bledu
AL liczba sektorow do przeczytania
CH numer sciezki
CL numer sektora
DH numer glowicy
DL numer dysku
Carry - ustawiany gdy blad
--- funkcja 05h ---------------------------------------------------------------
Funkcja formatuje sektor sciezki lub cylindra. W pamieci nalezy przygotowac
odpowiednie bloki danych, dla kazdego sektora oddzielnie. Blok taki sklada sie
z czterech bajtow, ktore oznaczaja kolejno:
bajt 0 numer sciezki
bajt 1 numer glowicy
bajt 2 numer sektora
bajt 3 liczba bajtow w sektorze
0 = 128
1 = 256
2 = 512
3 = 1024
UWAGA: Nie wolno stosowac tej funkcji w odniesieniu do dyskow poslugujacych sie
tlumaczeniem (translating) lub posiadajacych wlasny zintegrowany kontroler
(np. IDE).
rejestr parametr wartosc zwracana
AH 05h kod bledu
AL liczba sektorow do przeczytania
CH numer sciezki
CL numer sektora
DH numer glowicy
DL numer dysku
ES:BX adres w pamieci, gdzie maja byc
umieszczone przeczytane sektory
Carry - ustawiany gdy blad
--- funkcja 06h ---------------------------------------------------------------
Sciezka zawierajaca wiecej niz jeden uszkodzony sektor jest znakowana jako zla,
co uniemozliwia zapis na niej danych. Funkcja obsluguje poprawnie wylacznie
kontroler dysku twardego modelu XT.
UWAGA: Nie wolno stosowac tej funkcji w odniesieniu do dyskow poslugujacych sie
tlumaczeniem (translating) lub posiadajacych wlasny zintegrowany kontroler
(np. IDE).
rejestr parametr wartosc zwracana
AH 06h kod bledu
AL liczba sektorow do przeczytania -
CH numer sciezki -
CL numer sektora -
DH numer glowicy -
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 07h ---------------------------------------------------------------
Funkcja formatuje caly dysk poczawszy od podanego cylindra. Poprawnie
obslugiwany jest wylacznie kontroler dysku twardego modelu XT.
UWAGA: Nie wolno stosowac tej funkcji w odniesieniu do dyskow poslugujacych sie
tlumaczeniem (translating) lub posiadajacych wlasny zintegrowany kontroler
(np. IDE).
rejestr parametr wartosc zwracana
AH 07h kod bledu
AL liczba sektorow do przeczytania -
CH numer sciezki -
CL numer sektora -
DH numer glowicy -
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 08h ---------------------------------------------------------------
Funkcja dostarcza informacji o parametrach geometrycznych napedu.
rejestr parametr wartosc zwracana
AH 08h kod bledu
AL - -
CH - liczba cylindrow -1
CL - liczba sektorow/sciezke -1
DH - liczba glowic -1
DL numer dysku -
DH numer glowicy -
ES:SI - adres tablicy parametrow
Carry - ustawiany gdy blad
Budowa tablicy parametrow (system XT):
adres tablicy znaczenie rozmiar parametru
00h-01h liczba cylindrow slowo
02h liczba glowic bajt
03h-04h cylinder poczatkowy slowo
zmniejszonego pradu zapisu
05h-06h cylinder poczatkowy slowo
prekompensacji
07h maksymalna liczba bledow bajt
korygowanych przez ECC
(zwykle 11)
08h bajt sterujacy (*) bajt
09h wartosc standardowa czasu bajt
oczekiwania (**)
0ah czas oczekiwania przy bajt
formatowaniu (**)
0bh czas oczekiwania na wynik bajt
samokontroli (**)
0ch-0fh zarezerwowane 2 slowa
(*) bajt sterujacy
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
bit 7 deaktywacja powtornych prob dostepu
bit 6 deaktywacja systemu powtornych prob ECC
bity 5-3 zarezerwowane
bity 2-0 opcje napedu
(**) czas mierzony w jednostkach Timer'a
Budowa tablicy parametrow (system AT):
adres tablicy znaczenie rozmiar parametru
00h-01h liczba cylindrow slowo
02h liczba glowic bajt
03h-04h zarezerwowane slowo
05h-06h cylinder poczatkowy slowo
prekompensacji
07h zarezerwowany bajt
08h bajt sterujacy (*) bajt
09h-0bh zarezerwowane 3 bajty
0ch-0dh strefa parkowania slowo
0eh liczba sektorow na sciezke bajt
0fh zarezerwowane bajt
(*) bajt sterujacy
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
bit 7 deaktywacja powtornych prob dostepu
bit 6 deaktywacja systemu powtornych prob ECC
bit 5 1 = lista defektow zapisana na cylindrze o numerze
[liczba_cylindrow -1]
bit 4 zarezerwowany
bit 3 1 = dysk posiada wiecej niz 8 glowic
bity 2-0 zarezerwowane
--- funkcja 09h ---------------------------------------------------------------
Funkcja dopasowuje parametry geometryczne napedu.
rejestr parametr zwaracana wartosc
AH 09h kod bledu
DL numer dysku ilosc dyskow
Carry - ustawiany gdy blad
--- funkcja 0ah ---------------------------------------------------------------
Funkcja czyta od 1 do 127 sektorow (wraz z towarzyszacymi bajtami ECC) i
umieszcza je w okreslonym buforze w pamieci oeracyjnej. Nie jest przeprowadza-
na zadna korekcjaprzez system ECC kontrolera, tzn. wszystkie dane z kazdego
sektora transmitowane sa w niezmienionym stanie.
rejestr parametr wartosc zwracana
AH 0ah kod bledu
AL liczba sektorow do odczytania -
CH numer cylindra -
CL sektor poczatkowy -
DL numer dysku -
DH numer glowicy -
ES:BX adres bufora odczytu w pamieci -
operacyjnej
Carry - ustawiany gdy blad
--- funkcja 0bh ---------------------------------------------------------------
Funkcja zapisuje od 1 do 127 sektorow (wraz z towarzyszacymi bajtami ECC) i
umieszcza je w okreslonym buforze w pamieci oeracyjnej. Nie jest przeprowadza-
na zadna korekcjaprzez system ECC kontrolera, tzn. wszystkie dane z kazdego
sektora transmitowane sa w niezmienionym stanie.
rejestr parametr wartosc zwracana
AH 0bh kod bledu
AL liczba sektorow do zapisania -
CH numer cylindra -
CL sektor poczatkowy -
DL numer dysku -
DH numer glowicy -
ES:BX adres bufora odczytu w pamieci -
operacyjnej
Carry - ustawiany gdy blad
UWAGA: W buforze zapisu nalezy przygotowac 516 bajtow/sektor (512 bajtow
danych + 4 bajty ECC)
--- funkcja 0ch ---------------------------------------------------------------
Funkcja aktywuje okreslana glowice i ustawia ja nad zadanym cylindrem.
rejestr parametr wartosc zwracana
AH 0ch kod bledu
CX cylinder -
DH glowica -
DL numer dusku -
Carry - ustawiany gdy blad
--- funkcja 0dh ---------------------------------------------------------------
Reset napedu.
rejestr parametr wartosc zwracana
AH 0dh kod bledu
DL numer dusku -
Carry - ustawiany gdy blad
--- funkcja 0eh ---------------------------------------------------------------
Funkcja transmituje aktualna zawartosc 512-bajtowego bufora kontrolera
(bufor sektora) do wskazanego obszaru w pamieci operacyjnej. Z dysku nie sa
czytane zadne dane, a funkcja sluzy w pierwszej linii kontroli przeplywu
informacji miedzy kontrolerem a pamiecia.
rejestr parametr wartosc zwracana
AH 0eh kod bledu
DL numer dysku -
ES:BX adres obszaru pamieci -
Carry - ustawiany gdy blad
--- funkcja 0fh ---------------------------------------------------------------
Funkcja transmituje 512 bajtow ze wskazanego obszarupamieci do bufora
kontrolera (bufora sektora). Na dysk nie sa zapisywane zadne dane, a funkcja
sluzy w pierwszej linii kontroli przeplywu informacji miedzy kontrolerem a
pamiecia.
rejestr parametr wartosc zwracana
AH 0fh kod bledu
DL numer dysku -
ES:BX adres obszaru pamieci -
Carry - ustawiany gdy blad
--- funkcja 10h ---------------------------------------------------------------
Funkcja sprzwdza gotowosc dysku do wykonania polecen.
rejestr parametr wartosc zwracana
AH 10h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 11h ---------------------------------------------------------------
Funkcja ustawia glowice nad sciezka 0 (kalibracja).
rejestr parametr wartosc zwracana
AH 11h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 12h ---------------------------------------------------------------
Funkcja sprawdza pamiec RAM kontrolera dysku twardego.
UWAGA: Nie kazdy wariant biosu ma zaimplementowana te funkcje
rejestr parametr wartosc zwracana
AH 12h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 13h ---------------------------------------------------------------
Kontroler przeprowadza obszerny test napedu i zwraca kod ewentualnego bledu.
Ustawiona flaga Carry i kod bledu 00h oznacza rowniez pomuslne zakonczenie.
UWAGA: Nie kazdy wariant biosu ma zaimplementowana te funkcje
rejestr parametr wartosc zwracana
AH 13h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
--- funkcja 19h ---------------------------------------------------------------
Funkcja przesuwa lowice dysku twardego nad cylinder okreslony jako pozycja
bezpieczna, co ma zarowno glowice jak i powierzchnie magnetyczna przed
uszkodzeniami spowodowanymi wstrzasami. Funkcja jest szczegolnie uzyteczna
w razie koniecznosci transportu napedu, ktory nie jest wyposarzony w mechnizm
samoczynnego parkowania glowic po wylaczeniu napiecia zasilajacego.
rejestr parametr wartosc zwracana
AH 13h kod bledu
DL numer dysku -
Carry - ustawiany gdy blad
===============================================================================