Re: FAT na dyskietce. Jak i gdzie?

Autor: Steve (steve.f_at_nospam.remove.gip.com.pl)
Data: Thu 10 Oct 2002 - 08:57:59 MET DST


<peri12345_at_poczta.onet.pl> wrote in message
news:3355.00002d9c.3da1d1a7_at_newsgate.onet.pl...
> Musze napisc program , ktory bedzie wyswietlal na ekranie mape zajetosci
> dyskietki.
> Domyslam sie, ze musze przejrzec cala tablice FAT w poszukiwaniu wartosci
00h.
> Bo tak jest oznaczana pusta komorka (jak ona sie nazywa? - ta komorka).
Chyba
> nie musze przelatywac calego dysku prawda? I chcialbym sie dowiedziec od
> ktorego miejsca zaczyna sie FAT na dyskietce. 0 sciezka, 0 glowica, sektor
1
> czy jakos tak. To wiem. Ale na poczatku jest tez skok do programu
ladujacego i
> i gdzies ten program. Wczytam tablice do bufora funkcja 02h przerwania
13h. ale
> nie wiem ile sektorow musze wczytac i od ktorego i do ktorego bajta w tej
> tablicy bedzie znajdowala sie tablica FAT. Jak duzy bufor na ta tablice
jest
> potrzebny?
> Przy okazji czy ktos moglby z grubsza napisac jak sie odzyskuje pliki? To
drugi
> program do odszukania. Wiem, ze pliki nie sa rzeczywiscie usuwane w
momencie
> kasowania tylko jest odpowiednio to jakos zaznaczane w FAT. Ale wlasnie
jak i
> jak odzyskac plik?
> A juz zupelnie przy okazji. Jak sie robie skanowanie powierzchnie dysku,
> dyskietki?

Struktura dyskietki może być dość ciekawa - opisuje to bootrecord znajdujący
się w 0 sektorze logicznym dyskietki.
Tam masz opisaną całą strukturę czyli:
- liczbę sektorów ukrytych
- liczbę sektorów FAT
- liczbę tablic FAT
- rodzaj tablic FAT (FAT12/FAT16/itd)
- liczbę głowic (stron dyskietki)
- liczbę sektorów na ścieżkę
- liczbę sektorów na cluster
itp, itd
bardzo ładnie wyświetla to DiskEdit'or z pakietu NU (nawet ver.8 - tam nie
ma FAT32)

czyli musisz sobie zbudować w pamięci obraz odwołań dyskietki.

|Sektor z BR| hidden sectors | FAT copy 1 [|FAT copy ...] | RDE | Data
Clusters

RDE - root directory entries - czyli sektory na stałe zaalokowane na wpisy
katalogu głównego.
Clusters po polsku JAP (jednostka alokacji pliku) w tablicy FAT numerowane
są od 2.
Rodzaj FAT12/FAT16 mówi ile bitów zajmuje każda komórka w tablicy FAT. Z tym
będziesz miał trochę zabawy.
Są specjalne wartości komórek tablicy określające <EOF> czyli ostatni
cluster zajęty przez plik,
<BAD> - czyli cluster zawierający uszkodzone sektory (liczba Sectors Per
Cluster jest BR).

A więc żeby zobaczyć ile masz wolnego na dyskietce nie wystarczy sprawdzić
pustych miejsc w FAT, ponieważ usunięcie pliku jest związane tylko ze zmianą
nazwy w katalogu!!! Cały ciąg odwołań pozostał w FAT. Dlatego możemy
'odkasować' taki plik. Jeśli by tych danych nie było operacja w wersji
prostej (bez znajomości zawartości) byłaby niemożliwa.

Ja robiłem coś takiego aby robić dyskietkę systemową z innej dyskietki
(ms-dos) bez względu na wersję. Co ciekawe ten program działa poprawnie z
Win98 którego to wtedy jeszcze nie było (od DOS w wersji 5 był testowany).
Program ten robi optymalizację zajętości przesuwając pliki systemowe na
początek dysku.
Taka zabawka a cieszy.

Skanowanie powierzchni polega na sprawdzeniu (często wielokrotnym z
porównywaniem kolejnych odczytów) sektorów systemowych i wszystkich JAP
danych na dyskietce poprzez odczyt. Jeśli to się nie powiedzie powinna być
wielokrotna próba odczytu z porównywaniem kolejnych zawartości a następnie
jeśli ten cluster był zajmowany przez plik zapisanie go w innym miejscu,
zmianę wpisów w FAT (dla łańcuszka pliku/katalogu) oraz zaznaczeniem <BAD> w
FAT.

Powiedzmy że tym małym tekstem dotkneliśmy wierzchołka góry.
A z pełną świadomością polecam "DOS 5.0 od środka" - po prostu fanatastyczna
książka, choć od ok 6 lat nie miałem jej w rękach.

Pozdrawiam i życzę dobrej zabawy,
Steve



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 01:41:25 MET DST