home *** CD-ROM | disk | FTP | other *** search
/ Intermedia 1998 January / inter1_98.iso / www / rozi / PROG.TXT < prev    next >
Text File  |  1997-12-15  |  16KB  |  507 lines

  1. Programowanie operacji dyskowych.
  2.  
  3. ++++++++++
  4. + MS-DOS +
  5. ++++++++++
  6. ===============================================================================
  7.  
  8. przerwanie INT 25h DOS - czytaj sektor logiczny
  9.  
  10. rejestr    parametr        wartosc zwracana
  11. AL    numer dysku        -
  12. AX    -            kod bledu
  13. CX    liczba sektorow        -
  14. DX    pierwszy sektor        -
  15. BX:DS    adres bufora odczytu    -
  16. Carry    -            ustawiany gdy blad
  17.  
  18. ===============================================================================
  19.  
  20. przerwanie INT 26h DOS - pisz sektor logiczny
  21.  
  22. rejestr    parametr        wartosc zwracana
  23. AL    numer dysku        -
  24. AX    -            kod bledu
  25. CX    liczba sektorow        -
  26. DX    pierwszy sektor        -
  27. BX:DS    adres bufora odczytu    -
  28. Carry    -            ustawiany gdy blad
  29.  
  30. W rejestrze AL przekazywany jest numer dysku:
  31.     A:    numer "0"
  32.     B:    numer "1"
  33.     C:    numer "2"
  34.     D:    numer "3" itd.
  35.  
  36. Jezeli ustawiona jest flaga Carry, obie funkcje zwracaja w rejestrze AL
  37. nastepujace kody:
  38.  
  39.     kod bledu    znaczenie
  40.     01h        nieprawidlowy rozkaz
  41.     02h        niewlasciwa metryka ID
  42.     04h        nie znaleziono sektora
  43.     08h        przepelnienie DMA
  44.     10h        blad CRC lub ECC
  45.     20h        blad kontrolera
  46.     40h        blad pozycjonowania
  47.     80h        brak reakcji dysku (napedu)
  48.  
  49. ===============================================================================
  50.  
  51. przerwanie INT 25h DOS - czytaj sektor logiczny, tryb poszerzony
  52.  
  53. rejestr    parametr            wartosc zwracana
  54. AL    numer dysku            -
  55. AX    -                kod bledu
  56. CX    ffffh                -
  57. BX:DS    adres tablicy dodatkowej    -
  58. Carry    -                ustawiany gdy blad
  59.  
  60. ===============================================================================
  61.  
  62. przerwanie INT 25h DOS - czytaj sektor logiczny, tryb poszerzony
  63.  
  64. rejestr    parametr            wartosc zwracana
  65. AL    numer dysku            -
  66. AX    -                kod bledu
  67. CX    ffffh                -
  68. BX:DS    adres tablicy dodatkowej    -
  69. Carry    -                ustawiany gdy blad
  70.  
  71. Tablica dodatkowych parametrow przekazywanych trybie poszerzonym funkcjom
  72. 25h i 26h sklada sie z 10 bajtow.
  73.  
  74.     bajty tablicy    znaczenie
  75.     0-3        numer pierwszego sektora (4 bajty)
  76.     4-5        ilosc sektorow objetych dzialaniem funkcji
  77.     6-9        adres bufora (zapisu 26h ew. odczytu 25h)
  78.  
  79. ===============================================================================
  80.  
  81. przerwanie INT 21h
  82.  
  83. niektore funkcje:
  84.  
  85. funkcja    dzialanie
  86. 3ch    utworzyc plik
  87. 3dh    otworzyc plik
  88. 3eh    zamknac plik
  89. 41h    usunac plik
  90. 39h    utworzyc katalog
  91. 3ah    usunac katalog
  92. 3bh    przejsc do innego katalogu
  93. 57h    odczytac/zmienic informacje data/czas pliku
  94.  
  95. ===============================================================================
  96. ===============================================================================
  97. ++++++++++++++++
  98. + Funkcje BIOS + Przerwanie 13h
  99. ++++++++++++++++
  100. ===============================================================================
  101.  
  102. Numeracja cylindrow:
  103.  
  104.     CL: bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
  105.     CH: bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
  106.  
  107. bity 7-6 rejestru CL tworza wraz z rejestrem CH 10-bitowy numer cylindra.
  108. Pozostale pozycje bitowe rejestru CL adresuja zwykle sektor na sciezce.
  109.  
  110.  
  111. Numeracja dyskow:
  112.  
  113. BIOS identyfikuje dyski poprzez kolejne numery zaczynajac od 80h.
  114. Tak wiec 80h - C:, 81h - D:, itd. (DOS oznacza napedy poczawszy od 0)
  115.  
  116.  
  117. Kody bledow:
  118.  
  119. wszystkie podane funkcje zwracaja w rejestrze AH kod bledu, kotry jest
  120. umieszczany jednoczesnie w obszarze danych BIOS pod adresem 040h:074h.
  121.  
  122.             kod bledu    znaczenie
  123.             00h          bezblednie
  124.             01h          zly numer funkcji
  125.             02h          nie znaleziono znacznika adresu
  126.             04h          nie znaleziono sektora
  127.             05h          nieudany Reset
  128.             07h          bledna inicjalizacja
  129.             09h          przepelnienie strony DMA
  130.             10h          blad odczytu
  131.             11h          dane mimo bledu odczytywane z pomoca kodu ECC
  132.             20h          blad kontrolera
  133.             40h          nie znaleziono sciezki
  134.             80h          brak reakcji napedu
  135.             bbh          blad BIOS'u
  136.             ffh          inny nieznany blad
  137.  
  138.  
  139. --- funkcja 00h ---------------------------------------------------------------
  140.  
  141. Funkcja sprowadza wewnetrzne rejestry kontrolera do scisle okreslonego
  142. stanu poczatkowego. Aktualnie wykonywana operacja zostanie przerwana.
  143.  
  144. rejestr    parametr    wartosc zwracana
  145. AH      00h             kod bledu
  146. DL      numer dysku     -
  147. Carry   -               ustawiany gdy blad
  148.  
  149.         mov ah,00h      ;funkcja 0
  150.         mov dl,81h      ;dysk D:
  151.         int 13h         ;inicjalizacja kontrolera
  152.  
  153. --- funkcja 01h ---------------------------------------------------------------
  154.  
  155. Funkcja odczytuje status ostatniej operacji. Odtwarza w rejsetrze AH bajt
  156. statusu taki sam jak po ostatnio przeprowadzonej operacji bez wzgledu na to
  157. jak dawno sie zakonczyla.
  158.  
  159. rejestr    parametr    wartosc zwracana
  160. AH      01h             kod bledu
  161. DL      numer dysku     -
  162. Carry   -               ustawiany gdy blad
  163.  
  164. --- funkcja 02h ---------------------------------------------------------------
  165.  
  166. Funkcja czyta jeden lub kilka sektorow z dysku do bufora w pamieci
  167. operacyjnej. Wszystkie przeczytane sektory lokowane sa w pamieci poczawszy
  168. od adresu podanego w ES:BX, zamazuje ewentualnie ine dane. Do obowiazkow
  169. programisty nalezy zarezerwowanie odpowiedniej ilosci wolnego obszaru.
  170.  
  171. rejestr    parametr                           wartosc zwracana
  172. AH      02h                                    kod bledu
  173. AL      liczba sektorow do przeczytania
  174. CH      numer sciezki
  175. CL      numer sektora
  176. DH      numer glowicy
  177. DL      numer dysku
  178. ES:BX   adres w pamieci, gdzie maja byc
  179.         umieszczone przeczytane sektory
  180. Carry   -                                      ustawiany gdy blad
  181.  
  182. --- funkcja 03h ---------------------------------------------------------------
  183.  
  184. Funkcja jest komplementarnym odpowiednikiem funkcji 02h. Nalezy tylko zwrocic
  185. uwage, ze jako sektor zapisywane sa zawsze pelne 512-bajtowe bloki pamieci
  186. (poczawszy od adresu ES:BX) nawet wtedy gdynie zawieraja one wylacznie danych
  187. umieszczonych tam przez programiste.
  188.  
  189. rejestr    parametr                           wartosc zwracana
  190. AH      03h                                    kod bledu
  191. AL      liczba sektorow do przeczytania
  192. CH      numer sciezki
  193. CL      numer sektora
  194. DH      numer glowicy
  195. DL      numer dysku
  196. ES:BX   adres w pamieci, gdzie maja byc
  197.         umieszczone przeczytane sektory
  198. Carry   -                                      ustawiany gdy blad
  199.  
  200. --- funkcja 04h ---------------------------------------------------------------
  201.  
  202. Funkcja sprawdza poprawnosc kodow ECC sektora przeprowadzajac czytanie probne.
  203.  
  204. rejestr    parametr                           wartosc zwracana
  205. AH      04h                                    kod bledu
  206. AL      liczba sektorow do przeczytania
  207. CH      numer sciezki
  208. CL      numer sektora
  209. DH      numer glowicy
  210. DL      numer dysku
  211. Carry   -                                      ustawiany gdy blad
  212.  
  213. --- funkcja 05h ---------------------------------------------------------------
  214.  
  215. Funkcja formatuje sektor sciezki lub cylindra. W pamieci nalezy przygotowac
  216. odpowiednie bloki danych, dla kazdego sektora oddzielnie. Blok taki sklada sie
  217. z czterech bajtow, ktore oznaczaja kolejno:
  218.  
  219. bajt 0    numer sciezki
  220. bajt 1    numer glowicy
  221. bajt 2    numer sektora
  222. bajt 3    liczba bajtow w sektorze
  223.     0 = 128
  224.     1 = 256
  225.     2 = 512
  226.     3 = 1024
  227.  
  228. UWAGA: Nie wolno stosowac tej funkcji w odniesieniu do dyskow poslugujacych sie
  229. tlumaczeniem (translating) lub posiadajacych wlasny zintegrowany kontroler 
  230. (np. IDE).
  231.  
  232. rejestr    parametr                           wartosc zwracana
  233. AH      05h                                    kod bledu
  234. AL      liczba sektorow do przeczytania
  235. CH      numer sciezki
  236. CL      numer sektora
  237. DH      numer glowicy
  238. DL      numer dysku
  239. ES:BX   adres w pamieci, gdzie maja byc
  240.         umieszczone przeczytane sektory
  241. Carry   -                                      ustawiany gdy blad
  242.  
  243. --- funkcja 06h ---------------------------------------------------------------
  244.  
  245. Sciezka zawierajaca wiecej niz jeden uszkodzony sektor jest znakowana jako zla,
  246. co uniemozliwia zapis na niej danych. Funkcja obsluguje poprawnie wylacznie
  247. kontroler dysku twardego modelu XT.
  248.  
  249. UWAGA: Nie wolno stosowac tej funkcji w odniesieniu do dyskow poslugujacych sie
  250. tlumaczeniem (translating) lub posiadajacych wlasny zintegrowany kontroler 
  251. (np. IDE).
  252.  
  253. rejestr    parametr                           wartosc zwracana
  254. AH      06h                                    kod bledu
  255. AL      liczba sektorow do przeczytania        -
  256. CH      numer sciezki                -
  257. CL      numer sektora                -
  258. DH      numer glowicy                -
  259. DL      numer dysku                -
  260. Carry   -                                      ustawiany gdy blad
  261.  
  262. --- funkcja 07h ---------------------------------------------------------------
  263.  
  264. Funkcja formatuje caly dysk poczawszy od podanego cylindra. Poprawnie
  265. obslugiwany jest wylacznie kontroler dysku twardego modelu XT.
  266.  
  267. UWAGA: Nie wolno stosowac tej funkcji w odniesieniu do dyskow poslugujacych sie
  268. tlumaczeniem (translating) lub posiadajacych wlasny zintegrowany kontroler 
  269. (np. IDE).
  270.  
  271. rejestr    parametr                           wartosc zwracana
  272. AH      07h                                    kod bledu
  273. AL      liczba sektorow do przeczytania        -
  274. CH      numer sciezki                -
  275. CL      numer sektora                -
  276. DH      numer glowicy                -
  277. DL      numer dysku                -
  278. Carry   -                                      ustawiany gdy blad
  279.  
  280. --- funkcja 08h ---------------------------------------------------------------
  281.  
  282. Funkcja dostarcza informacji o parametrach geometrycznych napedu.
  283.  
  284. rejestr    parametr        wartosc zwracana
  285. AH      08h                     kod bledu
  286. AL      -            -
  287. CH      -            liczba cylindrow -1
  288. CL      -            liczba sektorow/sciezke -1
  289. DH      -            liczba glowic -1
  290. DL        numer dysku        -
  291. DH    numer glowicy        -
  292. ES:SI    -            adres tablicy parametrow
  293. Carry   -                       ustawiany gdy blad
  294.  
  295. Budowa tablicy parametrow (system XT):
  296.  
  297. adres tablicy    znaczenie            rozmiar parametru
  298. 00h-01h        liczba cylindrow        slowo
  299. 02h        liczba glowic            bajt
  300. 03h-04h        cylinder poczatkowy        slowo
  301.         zmniejszonego pradu zapisu    
  302. 05h-06h        cylinder poczatkowy        slowo
  303.         prekompensacji            
  304. 07h        maksymalna liczba bledow    bajt
  305.         korygowanych przez ECC         
  306.         (zwykle 11)            
  307. 08h        bajt sterujacy (*)        bajt
  308. 09h        wartosc standardowa czasu    bajt
  309.         oczekiwania (**)        
  310. 0ah        czas oczekiwania przy        bajt
  311.         formatowaniu (**)        
  312. 0bh        czas oczekiwania na wynik    bajt
  313.         samokontroli (**)        
  314. 0ch-0fh        zarezerwowane            2 slowa
  315.  
  316.  
  317. (*) bajt sterujacy
  318.  
  319.     bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
  320.  
  321.     bit 7        deaktywacja powtornych prob dostepu
  322.     bit 6        deaktywacja systemu powtornych prob ECC
  323.     bity 5-3    zarezerwowane
  324.     bity 2-0    opcje napedu
  325.  
  326.  
  327. (**) czas mierzony w jednostkach Timer'a
  328.  
  329.  
  330.  
  331. Budowa tablicy parametrow (system AT):
  332.  
  333. adres tablicy    znaczenie            rozmiar parametru
  334. 00h-01h        liczba cylindrow        slowo
  335. 02h        liczba glowic            bajt
  336. 03h-04h        zarezerwowane            slowo
  337. 05h-06h        cylinder poczatkowy        slowo
  338.         prekompensacji
  339. 07h        zarezerwowany            bajt
  340. 08h        bajt sterujacy (*)        bajt
  341. 09h-0bh        zarezerwowane            3 bajty
  342. 0ch-0dh        strefa parkowania        slowo
  343. 0eh        liczba sektorow na sciezke    bajt
  344. 0fh        zarezerwowane            bajt
  345.  
  346.  
  347. (*) bajt sterujacy
  348.  
  349.     bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
  350.  
  351.     bit 7        deaktywacja powtornych prob dostepu
  352.     bit 6        deaktywacja systemu powtornych prob ECC
  353.     bit 5        1 = lista defektow zapisana na cylindrze o numerze
  354.             [liczba_cylindrow -1]
  355.     bit 4        zarezerwowany
  356.     bit 3        1 = dysk posiada wiecej niz 8 glowic
  357.     bity 2-0    zarezerwowane
  358.  
  359. --- funkcja 09h ---------------------------------------------------------------
  360.  
  361. Funkcja dopasowuje parametry geometryczne napedu.
  362.  
  363. rejestr    parametr    zwaracana wartosc
  364. AH    09h        kod bledu
  365. DL    numer dysku    ilosc dyskow
  366. Carry    -        ustawiany gdy blad
  367.  
  368. --- funkcja 0ah ---------------------------------------------------------------
  369.  
  370. Funkcja czyta od 1 do 127 sektorow (wraz z towarzyszacymi bajtami ECC) i
  371. umieszcza je w okreslonym buforze w pamieci oeracyjnej. Nie jest przeprowadza-
  372. na zadna korekcjaprzez system ECC kontrolera, tzn. wszystkie dane z kazdego
  373. sektora transmitowane sa w niezmienionym stanie.
  374.  
  375. rejestr    parametr            wartosc zwracana
  376. AH    0ah                kod bledu
  377. AL    liczba sektorow do odczytania    -
  378. CH    numer cylindra            -
  379. CL    sektor poczatkowy        -
  380. DL    numer dysku            -
  381. DH    numer glowicy            -
  382. ES:BX    adres bufora odczytu w pamieci    -
  383.     operacyjnej
  384. Carry    -                ustawiany gdy blad
  385.  
  386. --- funkcja 0bh ---------------------------------------------------------------
  387.  
  388. Funkcja zapisuje od 1 do 127 sektorow (wraz z towarzyszacymi bajtami ECC) i
  389. umieszcza je w okreslonym buforze w pamieci oeracyjnej. Nie jest przeprowadza-
  390. na zadna korekcjaprzez system ECC kontrolera, tzn. wszystkie dane z kazdego
  391. sektora transmitowane sa w niezmienionym stanie.
  392.  
  393. rejestr    parametr            wartosc zwracana
  394. AH    0bh                kod bledu
  395. AL    liczba sektorow do zapisania    -
  396. CH    numer cylindra            -
  397. CL    sektor poczatkowy        -
  398. DL    numer dysku            -
  399. DH    numer glowicy            -
  400. ES:BX    adres bufora odczytu w pamieci    -
  401.     operacyjnej
  402. Carry    -                ustawiany gdy blad
  403.  
  404. UWAGA: W buforze zapisu nalezy przygotowac 516 bajtow/sektor (512 bajtow
  405. danych + 4 bajty ECC)
  406.  
  407. --- funkcja 0ch ---------------------------------------------------------------
  408.  
  409. Funkcja aktywuje okreslana glowice i ustawia ja nad zadanym cylindrem.
  410.  
  411. rejestr    parametr    wartosc zwracana
  412. AH    0ch        kod bledu
  413. CX    cylinder    -
  414. DH    glowica        -
  415. DL    numer dusku    -
  416. Carry    -        ustawiany gdy blad
  417.  
  418. --- funkcja 0dh ---------------------------------------------------------------
  419.  
  420. Reset napedu.
  421.  
  422. rejestr    parametr    wartosc zwracana
  423. AH    0dh        kod bledu
  424. DL    numer dusku    -
  425. Carry    -        ustawiany gdy blad
  426.  
  427. --- funkcja 0eh ---------------------------------------------------------------
  428.  
  429. Funkcja transmituje aktualna zawartosc 512-bajtowego bufora kontrolera
  430. (bufor sektora) do wskazanego obszaru w pamieci operacyjnej. Z dysku nie sa
  431. czytane zadne dane, a funkcja sluzy w pierwszej linii kontroli przeplywu
  432. informacji miedzy kontrolerem a pamiecia.
  433.  
  434. rejestr    parametr        wartosc zwracana
  435. AH    0eh            kod bledu
  436. DL    numer dysku        -
  437. ES:BX    adres obszaru pamieci    -
  438. Carry    -            ustawiany gdy blad
  439.  
  440. --- funkcja 0fh ---------------------------------------------------------------
  441.  
  442. Funkcja transmituje 512 bajtow ze wskazanego obszarupamieci do bufora
  443. kontrolera (bufora sektora). Na dysk nie sa zapisywane zadne dane, a funkcja
  444. sluzy w pierwszej linii kontroli przeplywu informacji miedzy kontrolerem a
  445. pamiecia.
  446.  
  447. rejestr    parametr        wartosc zwracana
  448. AH    0fh            kod bledu
  449. DL    numer dysku        -
  450. ES:BX    adres obszaru pamieci    -
  451. Carry    -            ustawiany gdy blad
  452.  
  453. --- funkcja 10h ---------------------------------------------------------------
  454.  
  455. Funkcja sprzwdza gotowosc dysku do wykonania polecen.
  456.  
  457. rejestr    parametr    wartosc zwracana
  458. AH    10h        kod bledu
  459. DL    numer dysku    -
  460. Carry    -        ustawiany gdy blad
  461.  
  462. --- funkcja 11h ---------------------------------------------------------------
  463.  
  464. Funkcja ustawia glowice nad sciezka 0 (kalibracja).
  465.  
  466. rejestr    parametr    wartosc zwracana
  467. AH    11h        kod bledu
  468. DL    numer dysku    -
  469. Carry    -        ustawiany gdy blad
  470.  
  471. --- funkcja 12h ---------------------------------------------------------------
  472.  
  473. Funkcja sprawdza pamiec RAM kontrolera dysku twardego.
  474.  
  475. UWAGA: Nie kazdy wariant biosu ma zaimplementowana te funkcje
  476.  
  477. rejestr    parametr    wartosc zwracana
  478. AH    12h        kod bledu
  479. DL    numer dysku    -
  480. Carry    -        ustawiany gdy blad
  481.  
  482. --- funkcja 13h ---------------------------------------------------------------
  483.  
  484. Kontroler przeprowadza obszerny test napedu i zwraca kod ewentualnego bledu.
  485. Ustawiona flaga Carry i kod bledu 00h oznacza rowniez pomuslne zakonczenie.
  486.  
  487. UWAGA: Nie kazdy wariant biosu ma zaimplementowana te funkcje
  488.  
  489. rejestr    parametr    wartosc zwracana
  490. AH    13h        kod bledu
  491. DL    numer dysku    -
  492. Carry    -        ustawiany gdy blad
  493.  
  494. --- funkcja 19h ---------------------------------------------------------------
  495.  
  496. Funkcja przesuwa lowice dysku twardego nad cylinder okreslony jako pozycja
  497. bezpieczna, co ma zarowno glowice jak i powierzchnie magnetyczna przed
  498. uszkodzeniami spowodowanymi wstrzasami. Funkcja jest szczegolnie uzyteczna
  499. w razie koniecznosci transportu napedu, ktory nie jest wyposarzony w mechnizm
  500. samoczynnego parkowania glowic po wylaczeniu napiecia zasilajacego.
  501.  
  502. rejestr    parametr    wartosc zwracana
  503. AH    13h        kod bledu
  504. DL    numer dysku    -
  505. Carry    -        ustawiany gdy blad
  506.  
  507. ===============================================================================