Format MyDOS

From Atariki

Revision as of 12:12, 15 lip 2011; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

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. 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. Jeśli VTOC nie mieści się w pierwszym sektorze, to jako następny zostanie wykorzystany sektor nr 359 w DD, a w SD - sektory nr 359 i 358 (gdyż alokacja VTOC odbywa się w "stronach", czyli porcjach po 256 bajtów, a więc w pojedynczej gęstości po dwa sektory).

Wielkość VTOC zapisana jest w pierwszym bajcie sektora nr 360. Dla "standardowych" gęstości SD i DD (90 i 180k) liczba ta wynosi $02, co oznacza jeden sektor VTOC. Każda inna wartość (w praktyce jest to przedział $03-$23) oznacza liczbę "stron" VTOC, dodać 2.

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 skasowany; pozostałe bity mają wtedy wartość 0
  • bit 6 = 1 - plik istnieje; stany bitów 6 i 7 są zawsze przeciwne
  • bit 5 = 1 - plik/katalog jest zabezpieczony przed zapisem lub skasowaniem
  • bit 4 = 1 - plik jest podkatalogiem (stany bitów 4 i 6 są zawsze przeciwne)
  • bit 3 - niewykorzystany
  • bit 2 = 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

Ogólnie status $46 oznacza plik istniejący, $66 plik zabezpieczony przed zapisem, $80 plik skasowany, $10 katalog itp.

$01-$02

Wielkość pliku w sektorach.

$03-$04

Numer pierwszego sektora zajętego przez plik.

$05-$0C

Nazwa pliku dopełniona spacjami.

$0D-$0F

Rozszerzenie nazwy pliku dopełnione spacjami.

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