Format MyDOS

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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:

OffsetOpis
$00

Bajt statusu:

  • bit 7 = 1 - plik lub katalog skasowany (pozostałe bity mają wtedy wartość 0),
  • bit 6 = 1 - plik istniejący (bit 4 ma wtedy wartość 0),
  • bit 5 = 1 - plik lub katalog zabezpieczony przed zapisem lub skasowaniem,
  • bit 4 = 1 - katalog istniejący (bity 6, 2 i 1 mają wtedy wartość 0),
  • bit 3 - niewykorzystany, MyDOS wpisuje tu 0,
  • 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 0 = 1 - plik jest otwarty do zapisu

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.

Zobacz też

Personal tools