Format MyDOS
From Atariki
Wersja z dnia 14:28, 18 sie 2012 Epi (Dyskusja | wkład) (link) ← Previous diff |
Wersja z dnia 14:41, 18 sie 2012 Epi (Dyskusja | wkład) (→Katalog - prawda o bitach w katalogu, dozwolone znaki w nazwach plików.) Next diff → |
||
Linia 39: | Linia 39: | ||
<tr><td>$00</td><td> | <tr><td>$00</td><td> | ||
<p>Bajt statusu:</p> | <p>Bajt statusu:</p> | ||
- | * bit 7 = 1 - plik skasowany; pozostałe bity mają wtedy wartość 0 | + | * bit 7 = 1 - plik lub katalog skasowany (pozostałe bity mają wtedy wartość 0), |
- | * bit 6 = 1 - plik istnieje; stany bitów 6 i 7 są zawsze przeciwne | + | * bit 6 = 1 - plik istniejący (bit 4 ma wtedy wartość 0), |
- | * bit 5 = 1 - plik/katalog jest zabezpieczony przed zapisem lub skasowaniem | + | * bit 5 = 1 - plik lub katalog zabezpieczony przed zapisem lub skasowaniem, |
- | * bit 4 = 1 - plik jest podkatalogiem (stany bitów 4 i 6 są zawsze przeciwne) | + | * bit 4 = 1 - katalog istniejący (bity 6, 2 i 1 mają wtedy wartość 0), |
- | * bit 3 - niewykorzystany | + | * bit 3 - niewykorzystany, MyDOS wpisuje tu 0, |
- | * bit 2 = 1 - znaczenie nieustalone, dla plików ustawiany na 1 | + | * bit 2 = 1 - sektory danych pliku zawierają 16-bitowe dowiązania do następnego sektora, |
* bit 1 = 1 - znaczenie nieustalone, dla plików ustawiany na 1 | * bit 1 = 1 - znaczenie nieustalone, dla plików ustawiany na 1 | ||
* bit 0 = 1 - plik jest otwarty do zapisu | * bit 0 = 1 - plik jest otwarty do zapisu | ||
- | <p>Ogólnie status $46 oznacza plik istniejący, $66 plik zabezpieczony przed zapisem, $80 plik skasowany, $10 katalog itp.</p> | + | <p>Ogólnie status $42 lub $46 oznacza plik istniejący, $62 lub $66 - plik tylko do odczytu, $10 - katalog, $80 - plik lub katalog skasowany itd.</p> |
</td></tr> | </td></tr> | ||
<tr><td>$01-$02</td><td> | <tr><td>$01-$02</td><td> | ||
- | <p>Wielkość pliku w sektorach.</p> | + | <p>Liczba sektorów danych zajętych przez plik.</p> |
</td></tr> | </td></tr> | ||
- | <tr><td>$03-$04</td><td><p>Numer pierwszego sektora zajętego przez plik.</p></td></tr> | + | <tr><td>$03-$04</td><td><p>Numer pierwszego sektora danych zajętego przez plik.</p></td></tr> |
<tr><td>$05-$0C</td><td><p>Nazwa pliku dopełniona spacjami.</p></td></tr> | <tr><td>$05-$0C</td><td><p>Nazwa pliku dopełniona spacjami.</p></td></tr> | ||
<tr><td>$0D-$0F</td><td><p>Rozszerzenie nazwy pliku dopełnione spacjami.</p></td></tr> | <tr><td>$0D-$0F</td><td><p>Rozszerzenie nazwy pliku dopełnione spacjami.</p></td></tr> | ||
</table> | </table> | ||
+ | |||
+ | Nazwa i rozszerzenie nazwy pliku mogą zawierać wielkie litery, cyfry, oraz znaki "@" i "_", przy czym pierwszy znak nazwy nie może być cyfrą. | ||
Struktura katalogu jest bardzo podobna do tej, którą mamy w [[Format AtariDOS 2|DOS 2.0]]. Jedyną liczącą się różnicą jest to, że MyDOS ustawia zakładanym przez siebie plikom bit 2 statusu. | Struktura katalogu jest bardzo podobna do tej, którą mamy w [[Format AtariDOS 2|DOS 2.0]]. Jedyną liczącą się różnicą jest to, że MyDOS ustawia zakładanym przez siebie plikom bit 2 statusu. |
Wersja z dnia 14:41, 18 sie 2012
Format dyskietki używany przez MyDOS jest rozwinięciem wcześniejszego formatu DOS-u 2.0. Modyfikacje mają na celu zwiększenie maksymalnej pojemności dysku oraz wprowadzenie podkatalogów.
Spis treści |
Cechy ogólne
- Dopuszczalne wielkości sektorów: 128 i 256 bajtów
- Maksymalna pojemność filesystemu: 65535 sektorów (16 MB)
- Maksymalna wielkość pliku: 15,81 MB
- Maksymalna liczba plików na dysku: nieograniczona
- Struktura katalogowa: hierarchiczna
- Maksymalna liczba plików w katalogu: 64
- Wielkość wpisu w katalogu: 16 bajtów
- Nazwa pliku: 8+3
- Metoda linkowania plików: 3-bajtowy link w sektorze danych
- Metoda alokacji sektorów: mapa bitowa
Struktura ogólna
Obsługiwana jest gęstość pojedyncza, rozszerzona i podwójna (SD, ED i DD). Jednostką alokacji jest pojedynczy sektor fizyczny o wielkości 128 lub 256 bajtów. W sektorze nr 360 ($168) zaczyna się VTOC, w sektorach 361-368 ($0169-$0170) znajduje się katalog główny dyskietki. W sektorach 1-3 jest program ładujący DOS. Dyski zainicjalizowane przez MyDOS mają w bajcie 0 sektora nr 1 kod ASCII litery M. Początkowa pojemność dyskietki DD to 708 wolnych sektorów z ogólnej liczby 720.
VTOC
W przeciwieństwie do sytuacji, jaką mamy w DOS 2.0, VTOC może zajmować ponad jeden sektor. Dodatkowe sektory VTOC zajmowane są licząc wstecz od sektora 360, przy czym na dyskach w SD, gdy liczba sektorów VTOC jest większa od 1, jest ona zawsze parzysta. Zatem, jeśli VTOC nie mieści się w pierwszym sektorze, to jako następny zostanie wykorzystany sektor nr 359. Dla jeszcze większych dysków w DD kolejnym zajętym sektorem będzie sektor nr 358, natomiast w SD będą to sektory nr 358 i 357.
Bajt 0 sektora nr 360 definiuje zarówno sposób organizacji VTOC, jak i format trzybajtowego odnośnika, znajdującego się na końcu każdego sektora danych. Wartość 2 oznacza, że cały VTOC mieści się w jednym sektorze i format odnośnika jest zgodny z DOS 2.0. Wartość większa od 2 oznacza liczbę 256-bajtowych bloków zajętych przez VTOC, dodać 2. Oznacza ona również, że odnośniki pozbawione są 6-bitowego pola z numerem pliku, a pole zawierające numer kolejnego sektora zostało rozszerzone do 16-bitów.
Dwa dalsze bajty VTOC to zapisana w konwencji młodszy/starszy początkowa liczba wolnych sektorów dyskietki, czyli maksymalna liczba sektorów możliwych do wykorzystania na pliki (np. $02C4 = 708). Dwa kolejne bajty to bieżąca liczba wolnych sektorów.
Bajty 5-9 VTOC są nieużywane. Od bajtu 10 rozciąga się mapa bitowa dyskietki. Każdy bajt opisuje stan ośmiu kolejnych sektorów, przy czym bit ustawiony oznacza sektor wolny, a bit skasowany - sektor zajęty. Bity przypisywane są od lewej do prawej sektorom o rosnących numerach, a więc jeśli bit 7 bajtu opisuje stan sektora numer 'n', to bit 6 odpowiada za sektor 'n+1', bit 5 za 'n+2' itd.
Pierwszy bajt mapy opisuje stan sektorów o numerach od 0 do 7 (pomimo że sektor 0 nie istnieje). Na pustej dyskietce jego wartość to $0F, co oznacza, że z grupy sektorów 0-7 cztery pierwsze (0-3) są zajęte, a reszta (4-7) wolna. Ostatni sektor dyskietki DD ma przypisany bit 7 bajtu nr 100 VTOC i jest oznaczony jako wolny.
Katalog
Katalog główny zajmuje osiem sektorów o numerach od 361 do 368 ($0169-$0170). Pojedynczy wpis ma 16 bajtów długości, jego strukturę przedstawia tabelka:
Offset | Opis |
$00 |
Bajt statusu:
Ogólnie status $42 lub $46 oznacza plik istniejący, $62 lub $66 - plik tylko do odczytu, $10 - katalog, $80 - plik lub katalog skasowany itd. |
$01-$02 |
Liczba sektorów danych zajętych przez plik. |
$03-$04 | Numer pierwszego sektora danych zajętego przez plik. |
$05-$0C | Nazwa pliku dopełniona spacjami. |
$0D-$0F | Rozszerzenie nazwy pliku dopełnione spacjami. |
Nazwa i rozszerzenie nazwy pliku mogą zawierać wielkie litery, cyfry, oraz znaki "@" i "_", przy czym pierwszy znak nazwy nie może być cyfrą.
Struktura katalogu jest bardzo podobna do tej, którą mamy w DOS 2.0. Jedyną liczącą się różnicą jest to, że MyDOS ustawia zakładanym przez siebie plikom bit 2 statusu.
W podwójnej gęstości wpisy katalogowe zajmują tylko pierwszą połówkę każdego sektora katalogu, reszta natomiast pozostaje pusta.
Struktura podkatalogu jest identyczna jak struktura katalogu głównego.
Mapowanie plików
Ciągłość plików oraz dokładne dane o ich długości (katalog zawiera tylko wielkość pliku w sektorach) zapewnia "link" umieszczony w trzech ostatnich bajtach każdego sektora danych. Wynika z tego, że w każdym sektorze dostępne jest tylko 125 (w SD) lub 253 (w DD) bajty na dane pliku, trzy pozostałe natomiast zajmuje DOS.
W przypadku formatów zgodnych z DOS 2.0 (90 i 180k, pierwszy bajt VTOC = $02) struktura link jest identyczna jak w DOS-ie 2.0. Dla formatów specyficznych dla MyDOS-a (360k i więcej) link wygląda następująco:
+---------------+---------------+---------------+ | 0 | 1 | 2 | +---------------+---------------+---------------+ |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| +---------------+---------------+---------------+ | następny sektor | wypełnienie | +-------------------------------+---------------+
- 16 pierwszych bitów to numer następnego sektora pliku; w ostatnim sektorze pliku jest on równy zero. Kolejność bajtów jest odwrotna od ogólnie przyjętej (tj. bajt nr 0 jest "starszy").
Ponieważ jedyna informacja na temat rozmieszczenia pliku znajduje się w przypisanych doń sektorach, rozmieszczenie sektorów pliku na dyskietce nigdy nie jest znane bez odczytania całości pliku aż do końca - co jest konieczne nawet przy jego kasowaniu. Z kolei fakt, że wskaźnik jest skierowany tylko w jedną stronę, tj. na następny sektor, powoduje, iż znalezienie sektora poprzedniego również wymaga odczytania pliku od początku; o funkcji seek() i swobodnym dostępie do danych pliku można więc przy takim filesystemie od razu zapomnieć
- Wypełnienie: ilość bajtów danych w sektorze. Pełny sektor danych ma tu wartość $7D (125) w SD i $FD (253) w DD. Liczba ta ma znaczenie tylko w ostatnim sektorze pliku, gdzie pozwala znaleźć koniec danych.