Format MyDOS

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 14:26, 18 sie 2012
Epi (Dyskusja | wkład)
(Prawda o VTOC.)
← Previous diff
Aktualna wersja
Epi (Dyskusja | wkład)
(Mapowanie plików - prawda o linkach.)
Linia 23: Linia 23:
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. 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|#Mapowanie plików]]", 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.+Bajt 0 sektora nr 360 definiuje zarówno sposób organizacji VTOC, jak i format trzybajtowego [[#Mapowanie plików|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. 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.
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.
Linia 67: Linia 69:
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. 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 [[Format AtariDOS 2#Mapowanie plików|DOS-ie 2.0]]. Dla formatów specyficznych dla MyDOS-a (360k i więcej) link wygląda następująco:+Format linku zależy od wartości pierwszego bajtu [[#VTOC|VTOC]]. Gdy jest on równy $02, struktura link jest identyczna jak w [[Format AtariDOS 2#Mapowanie plików|DOS-ie 2.0]]. Dla wartości większych od $02, format linku wygląda następująco:
+---------------+---------------+---------------+ +---------------+---------------+---------------+

Aktualna wersja

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.

Format linku zależy od wartości pierwszego bajtu VTOC. Gdy jest on równy $02, struktura link jest identyczna jak w DOS-ie 2.0. Dla wartości większych od $02, format linku 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