Format AtariDOS 4
From Atariki
Wersja z dnia 01:33, 21 lut 2006 KMK (Dyskusja | wkład) (→VTOC) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) (→VTOC) |
||
Linia 1: | Linia 1: | ||
- | Format dyskietki zastosowany w [[DOS 4.0|AtariDOS 4]], przygotowywany dla stacji dysków komputera [[1450XLD|Atari 1450XLD]]. | + | [[Formaty systemów plików|Format dyskietki]] zastosowany w [[DOS 4.0]], przygotowywany dla stacji dysków komputera [[1450XLD|Atari 1450XLD]]. |
+ | |||
+ | == Cechy ogólne == | ||
+ | |||
+ | * Dopuszczalne wielkości sektorów: 128 i 256 bajtów | ||
+ | * Maksymalna pojemność filesystemu: 248 klastrów (372 KB) | ||
+ | * Maksymalna wielkość pliku: 382,5 KB | ||
+ | * Maksymalna liczba plików na dysku: 176 | ||
+ | * Struktura katalogowa: jednopoziomowa | ||
+ | * Maksymalna liczba plików w katalogu: 176 | ||
+ | * Wielkość wpisu w katalogu: 16 bajtów | ||
+ | * Nazwa pliku: 8+3 | ||
+ | * Metoda linkowania plików: globalna mapa alokacji plików | ||
+ | * Metoda alokacji sektorów: globalna mapa alokacji plików | ||
== Jednostka alokacji == | == Jednostka alokacji == | ||
- | Jednostkę alokacji w tym formacie stanowi sześć sektorów, czyli 768 bajtów w [[SD]] i [[ED]] lub 1536 bajtów w [[DD]]. W gęstości pojedynczej i średniej DOS zostawia dla siebie 2, a w podwójnej trzy jednostki alokacji resztę pozostawiając na pliki. | + | Jednostkę alokacji w tym formacie stanowi sześć sektorów po 128 bajtów, czyli 768 bajtów w [[SD]] i [[ED]], trzy sektory po 256 bajtów (768 bajtów) w [[DD]] lub sześć sektorów po 256 bajtów (1536 bajtów) w [[DSDD]]. W gęstości pojedynczej i średniej DOS zostawia dla siebie 2, a w podwójnej trzy jednostki alokacji resztę pozostawiając na pliki. Numery jednostek alokacji liczone są od zera. |
- | Dyskietka zapisana jednostronnie w SD ma więc całkowitą pojemność 120 jednostek alokacji (720 sektorów = 92160 bajtów = 90k), z czego początkowo dostępne jest 118 (708 sektorów = 90624 bajty = 88,5k), gdyż dwie zajmuje VTOC. | + | Dyskietka zapisana jednostronnie w SD ma więc całkowitą pojemność 120 jednostek alokacji po 768 bajtów (720 sektorów = 92160 bajtów = 90k), z czego początkowo dostępne jest 118 (708 sektorów = 90624 bajty = 88,5k), gdyż dwie zajmuje VTOC. Pierwsza jednostka alokacji (nr 0) przeznaczona na dane zaczyna się od sektora nr 1. |
- | W DD jest podobnie, z tym że pierwsza jednostka alokacji (sektory 1-6) oznaczona jest jako zawsze zajęta, obszar plików zaczyna się od następnej. Całkowita pojemność dyskietki to 119 jednostek (714 sektorów = 182724 bajty = 178,5k), z czego na pliki zostaje 117 (702 sektory = 179712 bajtów = 175,5k). | + | Dyskietka zapisana jednostronnie w DD ma całkowitą teoretyczną pojemność 240 jednostek alokacji po 768 bajtów, z tym że pierwsza jednostka alokacji (nr 0) obejmuje sektory 1-3 i jest traktowana jako zajęta; tych sektorów używa tylko loader DOS-u. Obszar danych (jednostka alokacji nr 1) zaczyna się od sektora nr 4. Dwie jednostki zajmuje VTOC, zatem całkowita pojemność pustej dyskietki to 237 jednostek (711 sektorów = 182016 bajtów = 177,75k). |
- | Dla [[QD]] całkowita pojemność dyskietki to 238 jednostek (1428 sektorów = 365568 bajtów = 357k), z czego na pliki przeznaczone jest 236 (1416 sektorów = 362496 bajtów = 354k). Jedna jednostka, ostatnia, mimo że mogłaby być wykorzystana, jest tracona. | + | Dla [[DSDD]] całkowita, teoretyczna pojemność dyskietki to 240 jednostek po 1536 bajtów, z czego na pliki przeznaczone jest 236 (1416 sektorów = 362496 bajtów = 354k). Jedna jednostka, ostatnia, mimo że mogłaby być wykorzystana, jest tracona. |
W [[ED]] całkowita pojemność dyskietki to 173 jednostki (1038 sektorów = 132864 bajty = 129,75k), z czego na pliki przeznaczone jest 171 (1026 sektorów = 131328 bajtów = 128,25k). Dodatkowo format średniej gęstości nieznacznie się różni, o czym niżej. | W [[ED]] całkowita pojemność dyskietki to 173 jednostki (1038 sektorów = 132864 bajty = 129,75k), z czego na pliki przeznaczone jest 171 (1026 sektorów = 131328 bajtów = 128,25k). Dodatkowo format średniej gęstości nieznacznie się różni, o czym niżej. | ||
Linia 16: | Linia 29: | ||
== VTOC == | == VTOC == | ||
- | W [[SD]] i [[DD]] VTOC znajduje się w 58 i 59 jednostce alokacji, czyli zajmuje sektory o numerach od 349 do 360 ($015D-$168). Z tego jedenaście pierwszych sektorów (349-359) zajmuje katalog dyskietki, ostatni zaś sektor przeznaczony jest na mapę alokacji plików. | + | W [[SD]] i [[DD]] [[VTOC]] zajmuje sektory o numerach od 349 do 360 ($015D-$0168). Odpowiada to jednostkom alokacji 58-59 w SD i DSDD oraz 118-119 w DD. Z tego jedenaście pierwszych sektorów (349-359) zajmuje katalog dyskietki, ostatni zaś sektor przeznaczony jest na mapę alokacji plików. |
- | W [[ED]] VTOC także zajmuje 2 jednostki alokacji, ale jest zorganizowany nieco inaczej oraz, przede wszystkim, umieszczony jest gdzie indziej, mianowicie w jednostkach alokacji 84 i 85 (sektory 504-515); z tego katalog zajmuje '''dziesięć''' pierwszych sektorów, natomiast mapa plików zajmuje dwa ostatnie. | + | W [[ED]] VTOC także zajmuje 2 jednostki alokacji, ale jest zorganizowany nieco inaczej oraz, przede wszystkim, umieszczony jest gdzie indziej, mianowicie w sektorach 505-516 (odpowiada to jednostkom alokacji 84-85); z tego katalog zajmuje '''dziesięć''' pierwszych sektorów, natomiast mapa plików - dwa ostatnie. |
+ | |||
+ | Ogólnie struktura VTOC w DOS 4.0 jest bardzo podobna do tej, którą mamy (w postaci katalogu i VTOC) w [[Format AtariDOS 3|formacie DOS 3.0]], podobna jest też zasada działania filesystemu, tylko realizacja jest inna. | ||
=== Katalog === | === Katalog === | ||
- | Pojedyńczy wpis katalogowy zajmuje 16 bajtów. Ponieważ katalog zajmuje 10 lub 11 sektorów, na dyskietce można umieścić do 88 plików w [[SD]], 80 w [[ED]] lub 176 w [[DD]]. Strukturę wpisu katalogowego przedstawia tabelka: | + | Pojedynczy wpis katalogowy zajmuje 16 bajtów. Ponieważ katalog zajmuje 10 lub 11 sektorów, na dyskietce można umieścić do 88 plików w [[SD]], 80 w [[ED]] lub 176 w [[DD]]. Strukturę wpisu katalogowego przedstawia tabelka: |
<table border = 1 cellpadding = 5> | <table border = 1 cellpadding = 5> | ||
Linia 31: | Linia 46: | ||
* bit 6 = 1 - plik istnieje; stany bitów 6 i 7 sa zawsze przeciwne | * bit 6 = 1 - plik istnieje; stany bitów 6 i 7 sa zawsze przeciwne | ||
* bit 5 = 1 - plik jest zabezpieczony przed zapisem lub skasowaniem | * bit 5 = 1 - plik jest zabezpieczony przed zapisem lub skasowaniem | ||
- | * bit 4 - funkcja nieznana | + | * bit 4 - niewykorzystany |
- | * bit 3 - funkcja nieznana | + | * bit 3 - niewykorzystany |
- | * bit 2 - funkcja nieznana | + | * bit 2 - niewykorzystany |
- | * bit 1 - funkcja nieznana | + | * bit 1 - niewykorzystany |
* bit 0 = 1 - plik jest otwarty do zapisu | * bit 0 = 1 - plik jest otwarty do zapisu | ||
</td></tr> | </td></tr> | ||
<tr><td>$01</td><td> | <tr><td>$01</td><td> | ||
- | <p>Liczba jednostek alokacji, jaką zajmuje plik.</p> | + | <p>Liczba jednostek alokacji, jaką zajmuje plik (max. 255, czyli 382,5k).</p> |
</td></tr> | </td></tr> | ||
<tr><td>$02</td><td><p>Offset ostatniego bajtu danych znajdujących się w ostatnim sektorze ('''nie''' jednostce alokacji!) pliku.</p></td></tr> | <tr><td>$02</td><td><p>Offset ostatniego bajtu danych znajdujących się w ostatnim sektorze ('''nie''' jednostce alokacji!) pliku.</p></td></tr> | ||
<tr><td>$03</td><td> | <tr><td>$03</td><td> | ||
- | <p>Numer bajtu w mapie alokacji plików, od którego zaczyna się informacja o rozmieszczeniu pliku na dyskietce. Inaczej mówiąc, jest to numer pierwszej jednostki alokacji zajętej przez plik, zwiększony o siedem.</p> | + | <p>Numer bajtu w mapie alokacji plików, od którego zaczyna się informacja o rozmieszczeniu pliku na dyskietce. Inaczej mówiąc, jest to numer pierwszej jednostki alokacji zajętej przez plik, zwiększony o osiem.</p> |
</td></tr> | </td></tr> | ||
<tr><td>$04</td><td><p>Funkcja nieznana, być może bajt zarezerwowany na przyszłość.</p></td></tr> | <tr><td>$04</td><td><p>Funkcja nieznana, być może bajt zarezerwowany na przyszłość.</p></td></tr> | ||
Linia 53: | Linia 68: | ||
=== Mapa alokacji plików === | === Mapa alokacji plików === | ||
- | Mapa alokacji plików zajmuje, jako się rzekło, ostatni sektor 59 jednostki alokacji, o znajomym skądinąd numerze 360, czyli $0168. Pierwsze osiem bajtów tego sektora zajęte jest przez system: | + | Mapa alokacji plików w SD i DD zajmuje, jako się rzekło, ostatni sektor 60 jednostki alokacji, o znajomym skądinąd numerze 360, czyli $0168. Natomiast w ED ostatnie dwa sektory jednostki alokacji nr 86, czyli sektory nr 515 i 516. Pierwszych osiem bajtów tego obszaru zajętych jest przez system: |
<table border = 1 cellpadding = 5> | <table border = 1 cellpadding = 5> | ||
Linia 61: | Linia 76: | ||
* $43 ("C") dla dyskietek dwustronnych | * $43 ("C") dla dyskietek dwustronnych | ||
</td></tr> | </td></tr> | ||
- | <tr><td>$01</td><td>Offset wewnątrz mapy alokacji plików wskazujący pierwszą pozycję, gdzie zaczyna się wolny obszar. Jeśli na dyskietce nie ma wolnych jednostek alokacji, oba te bajty są wyzerowane.</td></tr> | + | <tr><td>$01</td><td>Offset wewnątrz mapy alokacji plików wskazujący pierwszą pozycję, gdzie zaczyna się wolny obszar. Jeśli na dyskietce nie ma wolnych jednostek alokacji, ten bajt jest wyzerowany.</td></tr> |
<tr><td>$02</td><td>Znaczenie nieustalone, być może rezerwa na przyszłość.</td></tr> | <tr><td>$02</td><td>Znaczenie nieustalone, być może rezerwa na przyszłość.</td></tr> | ||
<tr><td>$03</td><td>Liczba wolnych jednostek alokacji na dyskietce.</td></tr> | <tr><td>$03</td><td>Liczba wolnych jednostek alokacji na dyskietce.</td></tr> | ||
Linia 67: | Linia 82: | ||
</table> | </table> | ||
- | Pozostałą część mapy alokacji plików zajmuje właściwa mapa dyskietki. Pierwszy jej wpis to bajt nr 8 (licząc od zera) sektora 360, oznacza on jednostkę alokacji nr 1, czyli sektory 1-6. Następny bajt symbolizuje jednostkę alokacji nr 2 (sektory 7-12), kolejny jednostkę alokacji nr 3 (sektory 13-18) itd. aż do bajtu 127, do którego przypisana jest jednostka alokacji nr 120, czyli sektory 714-720. | + | Pozostałą część mapy alokacji plików zajmuje właściwa mapa dyskietki. Pierwszy jej wpis to bajt nr 8 (licząc od zera), oznacza on jednostkę alokacji nr 0, czyli sektory 1-6. Następny bajt symbolizuje jednostkę alokacji nr 1 (sektory 7-12), kolejny jednostkę alokacji nr 2 (sektory 13-18) itd. aż do bajtu 127, do którego przypisana jest jednostka alokacji nr 119, czyli sektory 715-720. Jest to ostatnia jednostka w DD. W SD, ED i DSDD te parametry mogą się nieco różnić, co patrz wyżej. |
Wartości poszczególnych bajtów mogą być następujące: | Wartości poszczególnych bajtów mogą być następujące: | ||
* $00-$05: koniec pliku | * $00-$05: koniec pliku | ||
- | * każdy inny: numer następnej jednostki alokacji zwiększony o 7 | + | * $06-$07: nie występują (rezerwa na przyszłość?) |
+ | * każdy inny: numer następnej jednostki alokacji zwiększony o 8 | ||
- | Jeśli bajt 3 wpisu pliku w katalogu ma wartość 8, to znaczy, że wskazuje on tym samym, iż informacji o początku pliku trzeba szukać w ósmym bajcie mapy alokacji plików. Jak objaśniono powyżej, bajt ten oznacza jednostkę alokacji nr 1, a więc jest to pierwsza jednostka alokacji wypełniona danymi tego pliku. | + | Jeśli bajt 3 wpisu pliku w katalogu ma wartość 8, to znaczy, że wskazuje on tym samym, iż informacji o początku pliku trzeba szukać w dziewiątym (offset 8) bajcie mapy alokacji plików. Jak objaśniono powyżej, bajt ten oznacza jednostkę alokacji nr 0, a więc jest to pierwsza jednostka alokacji wypełniona danymi tego pliku. |
- | Jeśli plik zajmuje ponad jedną jednostkę alokacji, to odpowiedni bajt mapy zawiera numer bajtu w tejże mapie, który symbolizuje następną jednostkę alokacji zajętą przez plik. Inaczej mówiąc, jeśli plik zajmuje jednostki alokacji 1, 2, 3 (i dalsze), to wartości bajtów 8 i 9 mapy alokacji plików będą wynosić odpowiednio 9 i 10, a jeśli czwartą zajętą jednostką alokacji jest jednostka nr 50, to bajt 10 mapy będzie zawierał wartość 57 (numer następnej jednostki alokacji plus 7). Krótko mówiąc, każdy wpis mapy dotyczący danego pliku wskazuje na kolejny wpis mapy dotyczący tego samego pliku. | + | Jeśli plik zajmuje ponad jedną jednostkę alokacji, odpowiedni bajt mapy zawiera numer bajtu w tejże mapie, który symbolizuje następną jednostkę alokacji zajętą przez plik. Inaczej mówiąc, jeśli plik zajmuje jednostki alokacji 0, 1, 2 (i dalsze), wartości bajtów 8 i 9 mapy alokacji plików będą wynosić odpowiednio 9 i 10, a jeśli czwartą zajętą jednostką alokacji jest jednostka nr 49, wtedy bajt 10 mapy będzie zawierał wartość 57 (numer następnej jednostki alokacji plus 8). Krótko mówiąc, każdy wpis mapy dotyczący danego pliku wskazuje na kolejny wpis mapy dotyczący tego samego pliku. |
Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $05. Liczba ta oznacza, który sektor danej jednostki alokacji jest jako ostatni wypełniony danymi. W połączeniu z informacją z katalogu, która mówi, ile bajtów zawiera ostatni sektor pliku, pozwala to na dokładne określenie długości pliku. | Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $05. Liczba ta oznacza, który sektor danej jednostki alokacji jest jako ostatni wypełniony danymi. W połączeniu z informacją z katalogu, która mówi, ile bajtów zawiera ostatni sektor pliku, pozwala to na dokładne określenie długości pliku. | ||
- | Wolny obszar dyskietki jest w mapie reprezentowany tak samo jak pliki: wskaźnikiem do niego są bajty 1 i 2 mapy alokacji plików, a tam każdy kolejny wpis w mapie wskazuje na następny wpis mapy oznaczający wolną jednostkę alokacji. Dzięki temu DOS nie musi przeznaczać specjalnego kodu do wpisania do mapy, jeśli któraś jednostka alokacji jest zarezerwowana i nie powinna być zajęta przez pliki (np. VTOC), wystarczy, że takowa jest pominięta na liście wolnych jednostek. | + | Wolny obszar dyskietki jest w mapie reprezentowany tak samo jak pliki: wskaźnikiem do niego są bajty 1 i 2 mapy alokacji plików, a tam każdy kolejny wpis w mapie wskazuje na następny wpis mapy oznaczający wolną jednostkę alokacji. Dzięki temu DOS nie musi przeznaczać specjalnego kodu do wpisania do mapy, jeśli któraś jednostka alokacji jest zarezerwowana i nie powinna być zajęta przez pliki (np. VTOC), wystarczy, że takowa jest zaznaczona zerem ($00) i pominięta na liście wolnych jednostek. |
- | === Przykład === | + | == Przykład == |
* wpis katalogowy pliku QDOS.SYS jest natępujący: | * wpis katalogowy pliku QDOS.SYS jest natępujący: | ||
Linia 88: | Linia 104: | ||
$40 $06 $7A $08 $00 QDOS____SYS | $40 $06 $7A $08 $00 QDOS____SYS | ||
- | Status $40 oznacza, że plik istnieje; zajmuje 6 jednostek alokacji, czyli 36 sektorów (i taką własnie długość ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 123 bajty danych (offset ostatniego bajtu $7A, czyli 122), a dane o rozmieszczeniu pliku zaczynają się w bajcie ósmym ($08) mapy alokacji plików. | + | Status $40 oznacza, że plik istnieje; zajmuje 6 jednostek alokacji, czyli 36 sektorów (i taką własnie długość ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 123 bajty danych (offset ostatniego bajtu $7A, czyli 122), a dane o rozmieszczeniu pliku zaczynają się w bajcie dziewiątym (offset $08) mapy alokacji plików. |
* mapa od bajtu nr 8 zawiera co następuje: | * mapa od bajtu nr 8 zawiera co następuje: | ||
- | Bajty: $08 $09 $0A $0B $0C $0D | + | Offsety: $08 $09 $0A $0B $0C $0D |
Wartości: $09 $0A $0B $0C $0D $03 | Wartości: $09 $0A $0B $0C $0D $03 | ||
- | Numer bajtu to numer jednostki alokacji zwiększony o 7, a więc plik zajmuje jednostki alokacji od 1 do 6, czyli sektory od 1 do 36. Jednostka alokacji nr 6 jest niepełna, zajęte są w niej tylko 3 sektory, a w ostatnim z nich, co wiemy z katalogu, są 122 bajty danych. | + | Offset bajtu to numer jednostki alokacji zwiększony o 8, a więc plik zajmuje jednostki alokacji od 0 do 5, czyli sektory od 1 do 36. Jednostka alokacji nr 6 nie jest w pełni wykorzystana, danymi są w niej wypełnione tylko 4 sektory, a w ostatnim z nich, co wiemy z katalogu, znajdują się 123 bajty danych. |
Struktura mapy alokacji plików w DOS 4.0, jak widać, przypomina nieco pecetowy FAT. | Struktura mapy alokacji plików w DOS 4.0, jak widać, przypomina nieco pecetowy FAT. | ||
+ | |||
+ | == Zobacz też == | ||
+ | * [[Formaty systemów plików]] | ||
[[Kategoria:Atari 8-bit]] | [[Kategoria:Atari 8-bit]] |
Aktualna wersja
Format dyskietki zastosowany w DOS 4.0, przygotowywany dla stacji dysków komputera Atari 1450XLD.
Spis treści |
Cechy ogólne
- Dopuszczalne wielkości sektorów: 128 i 256 bajtów
- Maksymalna pojemność filesystemu: 248 klastrów (372 KB)
- Maksymalna wielkość pliku: 382,5 KB
- Maksymalna liczba plików na dysku: 176
- Struktura katalogowa: jednopoziomowa
- Maksymalna liczba plików w katalogu: 176
- Wielkość wpisu w katalogu: 16 bajtów
- Nazwa pliku: 8+3
- Metoda linkowania plików: globalna mapa alokacji plików
- Metoda alokacji sektorów: globalna mapa alokacji plików
Jednostka alokacji
Jednostkę alokacji w tym formacie stanowi sześć sektorów po 128 bajtów, czyli 768 bajtów w SD i ED, trzy sektory po 256 bajtów (768 bajtów) w DD lub sześć sektorów po 256 bajtów (1536 bajtów) w DSDD. W gęstości pojedynczej i średniej DOS zostawia dla siebie 2, a w podwójnej trzy jednostki alokacji resztę pozostawiając na pliki. Numery jednostek alokacji liczone są od zera.
Dyskietka zapisana jednostronnie w SD ma więc całkowitą pojemność 120 jednostek alokacji po 768 bajtów (720 sektorów = 92160 bajtów = 90k), z czego początkowo dostępne jest 118 (708 sektorów = 90624 bajty = 88,5k), gdyż dwie zajmuje VTOC. Pierwsza jednostka alokacji (nr 0) przeznaczona na dane zaczyna się od sektora nr 1.
Dyskietka zapisana jednostronnie w DD ma całkowitą teoretyczną pojemność 240 jednostek alokacji po 768 bajtów, z tym że pierwsza jednostka alokacji (nr 0) obejmuje sektory 1-3 i jest traktowana jako zajęta; tych sektorów używa tylko loader DOS-u. Obszar danych (jednostka alokacji nr 1) zaczyna się od sektora nr 4. Dwie jednostki zajmuje VTOC, zatem całkowita pojemność pustej dyskietki to 237 jednostek (711 sektorów = 182016 bajtów = 177,75k).
Dla DSDD całkowita, teoretyczna pojemność dyskietki to 240 jednostek po 1536 bajtów, z czego na pliki przeznaczone jest 236 (1416 sektorów = 362496 bajtów = 354k). Jedna jednostka, ostatnia, mimo że mogłaby być wykorzystana, jest tracona.
W ED całkowita pojemność dyskietki to 173 jednostki (1038 sektorów = 132864 bajty = 129,75k), z czego na pliki przeznaczone jest 171 (1026 sektorów = 131328 bajtów = 128,25k). Dodatkowo format średniej gęstości nieznacznie się różni, o czym niżej.
Ze struktury mapy alokacji plików (zobacz niżej) można wywnioskować, że maksymalna pojemność systemu plików wynosi 248 jednostek alokacji, co w DD daje 380928 bajtów, czyli 372k.
VTOC
W SD i DD VTOC zajmuje sektory o numerach od 349 do 360 ($015D-$0168). Odpowiada to jednostkom alokacji 58-59 w SD i DSDD oraz 118-119 w DD. Z tego jedenaście pierwszych sektorów (349-359) zajmuje katalog dyskietki, ostatni zaś sektor przeznaczony jest na mapę alokacji plików.
W ED VTOC także zajmuje 2 jednostki alokacji, ale jest zorganizowany nieco inaczej oraz, przede wszystkim, umieszczony jest gdzie indziej, mianowicie w sektorach 505-516 (odpowiada to jednostkom alokacji 84-85); z tego katalog zajmuje dziesięć pierwszych sektorów, natomiast mapa plików - dwa ostatnie.
Ogólnie struktura VTOC w DOS 4.0 jest bardzo podobna do tej, którą mamy (w postaci katalogu i VTOC) w formacie DOS 3.0, podobna jest też zasada działania filesystemu, tylko realizacja jest inna.
Katalog
Pojedynczy wpis katalogowy zajmuje 16 bajtów. Ponieważ katalog zajmuje 10 lub 11 sektorów, na dyskietce można umieścić do 88 plików w SD, 80 w ED lub 176 w DD. Strukturę wpisu katalogowego przedstawia tabelka:
Offset | Opis |
$00 |
Bajt statusu:
|
$01 |
Liczba jednostek alokacji, jaką zajmuje plik (max. 255, czyli 382,5k). |
$02 | Offset ostatniego bajtu danych znajdujących się w ostatnim sektorze (nie jednostce alokacji!) pliku. |
$03 |
Numer bajtu w mapie alokacji plików, od którego zaczyna się informacja o rozmieszczeniu pliku na dyskietce. Inaczej mówiąc, jest to numer pierwszej jednostki alokacji zajętej przez plik, zwiększony o osiem. |
$04 | Funkcja nieznana, być może bajt zarezerwowany na przyszłość. |
$05-$0C | Nazwa pliku dopełniona spacjami. |
$0D-$0F | Rozszerzenie nazwy pliku dopełnione spacjami. |
DOS 4.0 nie pozwala założyć na dyskietce pliku o zerowej długości. Każdy nowo założony plik dostaje status $81. Po zamknięciu pliku DOS kasuje bit 0, jednak jeśli do pliku nie wpisano żadnych danych, status będzie miał wartość $80, co oznacza plik skasowany. Dopiero wpisanie co najmniej jednego bajtu powoduje, że funkcja CLOSE zmienia status zbioru na $40 (plik istnieje).
Mapa alokacji plików
Mapa alokacji plików w SD i DD zajmuje, jako się rzekło, ostatni sektor 60 jednostki alokacji, o znajomym skądinąd numerze 360, czyli $0168. Natomiast w ED ostatnie dwa sektory jednostki alokacji nr 86, czyli sektory nr 515 i 516. Pierwszych osiem bajtów tego obszaru zajętych jest przez system:
Offset | Znaczenie |
$00 | Znacznik formatu:
|
$01 | Offset wewnątrz mapy alokacji plików wskazujący pierwszą pozycję, gdzie zaczyna się wolny obszar. Jeśli na dyskietce nie ma wolnych jednostek alokacji, ten bajt jest wyzerowany. |
$02 | Znaczenie nieustalone, być może rezerwa na przyszłość. |
$03 | Liczba wolnych jednostek alokacji na dyskietce. |
$04-$07 | Znaczenie nieustalone, być może rezerwa na przyszłość. |
Pozostałą część mapy alokacji plików zajmuje właściwa mapa dyskietki. Pierwszy jej wpis to bajt nr 8 (licząc od zera), oznacza on jednostkę alokacji nr 0, czyli sektory 1-6. Następny bajt symbolizuje jednostkę alokacji nr 1 (sektory 7-12), kolejny jednostkę alokacji nr 2 (sektory 13-18) itd. aż do bajtu 127, do którego przypisana jest jednostka alokacji nr 119, czyli sektory 715-720. Jest to ostatnia jednostka w DD. W SD, ED i DSDD te parametry mogą się nieco różnić, co patrz wyżej.
Wartości poszczególnych bajtów mogą być następujące:
- $00-$05: koniec pliku
- $06-$07: nie występują (rezerwa na przyszłość?)
- każdy inny: numer następnej jednostki alokacji zwiększony o 8
Jeśli bajt 3 wpisu pliku w katalogu ma wartość 8, to znaczy, że wskazuje on tym samym, iż informacji o początku pliku trzeba szukać w dziewiątym (offset 8) bajcie mapy alokacji plików. Jak objaśniono powyżej, bajt ten oznacza jednostkę alokacji nr 0, a więc jest to pierwsza jednostka alokacji wypełniona danymi tego pliku.
Jeśli plik zajmuje ponad jedną jednostkę alokacji, odpowiedni bajt mapy zawiera numer bajtu w tejże mapie, który symbolizuje następną jednostkę alokacji zajętą przez plik. Inaczej mówiąc, jeśli plik zajmuje jednostki alokacji 0, 1, 2 (i dalsze), wartości bajtów 8 i 9 mapy alokacji plików będą wynosić odpowiednio 9 i 10, a jeśli czwartą zajętą jednostką alokacji jest jednostka nr 49, wtedy bajt 10 mapy będzie zawierał wartość 57 (numer następnej jednostki alokacji plus 8). Krótko mówiąc, każdy wpis mapy dotyczący danego pliku wskazuje na kolejny wpis mapy dotyczący tego samego pliku.
Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $05. Liczba ta oznacza, który sektor danej jednostki alokacji jest jako ostatni wypełniony danymi. W połączeniu z informacją z katalogu, która mówi, ile bajtów zawiera ostatni sektor pliku, pozwala to na dokładne określenie długości pliku.
Wolny obszar dyskietki jest w mapie reprezentowany tak samo jak pliki: wskaźnikiem do niego są bajty 1 i 2 mapy alokacji plików, a tam każdy kolejny wpis w mapie wskazuje na następny wpis mapy oznaczający wolną jednostkę alokacji. Dzięki temu DOS nie musi przeznaczać specjalnego kodu do wpisania do mapy, jeśli któraś jednostka alokacji jest zarezerwowana i nie powinna być zajęta przez pliki (np. VTOC), wystarczy, że takowa jest zaznaczona zerem ($00) i pominięta na liście wolnych jednostek.
Przykład
- wpis katalogowy pliku QDOS.SYS jest natępujący:
$40 $06 $7A $08 $00 QDOS____SYS
Status $40 oznacza, że plik istnieje; zajmuje 6 jednostek alokacji, czyli 36 sektorów (i taką własnie długość ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 123 bajty danych (offset ostatniego bajtu $7A, czyli 122), a dane o rozmieszczeniu pliku zaczynają się w bajcie dziewiątym (offset $08) mapy alokacji plików.
- mapa od bajtu nr 8 zawiera co następuje:
Offsety: $08 $09 $0A $0B $0C $0D Wartości: $09 $0A $0B $0C $0D $03
Offset bajtu to numer jednostki alokacji zwiększony o 8, a więc plik zajmuje jednostki alokacji od 0 do 5, czyli sektory od 1 do 36. Jednostka alokacji nr 6 nie jest w pełni wykorzystana, danymi są w niej wypełnione tylko 4 sektory, a w ostatnim z nich, co wiemy z katalogu, znajdują się 123 bajty danych.
Struktura mapy alokacji plików w DOS 4.0, jak widać, przypomina nieco pecetowy FAT.