Format AtariDOS 4
From Atariki
Wersja z dnia 21:19, 20 lut 2006 KMK (Dyskusja | wkład) (→Mapa alokacji plików) ← Previous diff |
Wersja z dnia 21:28, 20 lut 2006 KMK (Dyskusja | wkład) Next diff → |
||
Linia 51: | Linia 51: | ||
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) 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. | ||
- | Jeśli bajt 3 wpisu pliku w katalogu ma wartość 8, to znaczy, że wskazuje on tym samym, iż informaci o początku pliku trzeba szukać w ósmym bajcie mapy alokacji plików. Jak objaśnino 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 ósmym bajcie mapy alokacji plików. Jak objaśnino powyżej, bajt ten oznacza jednostkę alokacji nr 1, 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). | + | 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. |
Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $06. Liczba ta oznacza, ile sektorów danej jednostki alokacji jest wypełnione 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ługoci pliku. | Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $06. Liczba ta oznacza, ile sektorów danej jednostki alokacji jest wypełnione 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ługoci pliku. | ||
- | Przykład: | + | WOlny obszar dyskietki jest w mapie reprezentowny tak samo jak pliki: wskaźnikiem do niego są bajty 1 i 2 mapy alokacji plików, a tam kazdy kolejny wpis w mapie wskazuje na następny wpis mapy oznaczający wolną jednostkę alokacji. |
- | * wpis katalogowy pliku QDOS.SYS ma jest natępujący: | + | === Przykład === |
+ | |||
+ | * wpis katalogowy pliku QDOS.SYS jest natępujący: | ||
$40 $06 $7A $08 $00 QDOS____SYS | $40 $06 $7A $08 $00 QDOS____SYS | ||
Linia 65: | Linia 67: | ||
Status $40 oznacza, że plik istnieje; zajmuje 6 jednostek alokacji, czyli 36 sektorów (i taką własnie długośc ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 122 ($7A) bajty danych, 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śc ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 122 ($7A) bajty danych, a dane o rozmieszczeniu pliku zaczynają się w bajcie ósmym ($08) mapy alokacji plików. | ||
+ | * mapa od bajtu nr 8 zawiera co następuje: | ||
+ | |||
+ | Bajty: $08 $09 $0A $0B $0C $0D | ||
+ | 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. | ||
+ | Struktura mapy alokacji plików w DOS 4.0, jak widać, przypomina nieco pecetowy FAT. | ||
[[Kategoria:Atari 8-bit]] | [[Kategoria:Atari 8-bit]] |
Wersja z dnia 21:28, 20 lut 2006
Format dyskietki zastosowany w AtariDOS 4, przygotowywany dla stacji dysków komputera Atari 1450XLD.
Spis treści |
Uwagi początkowe
Wszystkie poniższe informacje dotyczą gęstości SD; jak jest w innych gęstościach, trudno stwierdzić, bo dostępne kopie DOS 4.0 nie mają zaimplementowanego formatowania (!!!), jedyne eksperymenty można więc było przeprowadzić na dyskietce systemowej, a ta jest w pojedynczej gęstości.
Jednostka alokacji
Jednostkę alokacji w tym formacie stanowi sześć sektorów, czyli 768 bajtów (w DD jednostka alokacji albo ma trzy sektory, albo jest dwa razy większa). Dyskietka ma więc całkowitą pojemność 120 jednostek alokacji, z czego początkowo dostępne jest 118, gdyż dwie zajmuje VTOC.
VTOC
VTOC znajduje się w 58 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.
Katalog
Pojedyńczy wpis katalogowy zajmuje 16 bajtów. Ponieważ katalog zajmuje 10 sektorów, na dyskietce można umieścić do 80 plików.
Nazwa pliku
11 ostatnich bajtów wpisu katalogowego zajmuje nazwa pliku. Nazwa pliku zapisana jest tak samo, jak we wszystkich DOS-ach na małe Atari, to znaczy pierwsze 8 bajtów przeznaczone jest na nazwę pliku, a trzy ostatnie na rozszerzenie. Jeśli nazwa bądź rozszerzenie nie wypełniają całości przeznaczonego na nie miejsca, jest ono dopełnione spacjami.
Informacje o pliku
Pierwsze 5 bajtów zajmują informacje o statusie pliku, jego długości oraz rozmieszczeniu na dyskietce:
- bajt 0 to status pliku.
- bajt 1 zawiera liczbę jednostek alokacji, jaką zajmuje plik
- bajt 2 zawiera liczbę bajtów danych znajdującą się w ostatnim sektorze (nie jednostce alokacji!) pliku
- bajt 3 to numer bajtu w mapie alokacji plików, od którego zaczyna się informacja o rozmieszczeniu pliku na dyskietce
- bajt 4 ma nieznaną funkcję, być może stanowi jedno 16-bitowe słowo z bajtem poprzednim
Bajt statusu
Udało się zaobserwować następujące funkcje bitów bajtu statusu:
- bit 7 = 1 - plik skasowany; pozostałe bity mają wtedy wartość 0
- bit 6 = 1 - plik istnieje; stany bitów 6 i 7 sa zawsze przeciwne
- bit 5 = 1 - plik jest zabezpieczony przed zapisem lub skasowaniem
Mapa alokacji plików
Mapa alokacji plików zajmuje, jako się rzekło, ostatni sektor 58 jednostki alokacji, o znajomym skądinąd numerze 360, czyli $0168. Pierwsze osiem bajtów tego sektora zajęte jest przez system:
- bajt 0 ma wartość $52 ("R"), jego funkcja jest nieustalona, być może to tylko znacznik formatu
- bajty 1 i 2 to 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.
- bajt 3 (a może i 4 też) to liczba wolnych jednostek alokacji.
Reszta bajtów z pierwszych ośmiu ma znaczenie nieznane, być może jest to rezerwa.
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.
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śnino powyżej, bajt ten oznacza jednostkę alokacji nr 1, 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.
Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $06. Liczba ta oznacza, ile sektorów danej jednostki alokacji jest wypełnione 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ługoci pliku.
WOlny obszar dyskietki jest w mapie reprezentowny tak samo jak pliki: wskaźnikiem do niego są bajty 1 i 2 mapy alokacji plików, a tam kazdy kolejny wpis w mapie wskazuje na następny wpis mapy oznaczający wolną jednostkę alokacji.
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śc ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 122 ($7A) bajty danych, a dane o rozmieszczeniu pliku zaczynają się w bajcie ósmym ($08) mapy alokacji plików.
- mapa od bajtu nr 8 zawiera co następuje:
Bajty: $08 $09 $0A $0B $0C $0D 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.
Struktura mapy alokacji plików w DOS 4.0, jak widać, przypomina nieco pecetowy FAT.