Format AtariDOS XE

From Atariki

Revision as of 18:43, 16 lut 2009; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Format dyskietki zastosowany w DOS XE, przeznaczony głównie dla stacji dysków XF551, ale też 810 i 1050.

Spis treści

Cechy ogólne

  • Dopuszczalne wielkości sektorów: 128 i 256 bajtów
  • Maksymalna pojemność filesystemu: 65535 klastrów (15,62 MB)
  • Maksymalna wielkość pliku: 366,21 kB (albo 7,81 MB?)
  • Maksymalna liczba plików na dysku: 65536
  • Struktura katalogowa: hierarchiczna
  • Maksymalna liczba plików w katalogu: 1280
  • Nazwa pliku: 8+3
  • Metoda linkowania plików: indywidualne mapy plików
  • Metoda alokacji sektorów: mapa bitowa

Jednostka alokacji

Jednostkę alokacji stanowi "klaster" o wielkości 256 bajtów, czyli dwa sektory fizyczne w SD i ED, a jeden w DD. Przełożenie sektorów fizycznych na klastry jest dość osobliwe, liczy się bowiem w nim nieistniejący sektor nr 0. I tak, w DD sektor nr 0 stanowi klaster nr 0, sektor nr 1 - klaster nr 1 itd. W SD i ED klaster nr 0 stanowią sektory 0 i 1, klaster nr 1 - sektory 2 i 3, klaster nr 2 - sektory 4 i 5, i tak dalej.

Boot

Pierwsze trzy sektory (fizyczne) dysku zajmuje program ładujący DOS. Oprócz tego w bajtach $09-$0F sektora (nie klastra) nr 1 zapisana jest konfiguracja DOS-u, a w bajtach $10-$2F - informacje o dysku.

Konfiguracja DOS

OffsetOpis
$09

Liczba określająca, ile plików można otworzyć jednocześnie. Standardowo 3, maksymalnie 7.

$0A

Mapa bitowa aktywnych napędów:

 Nr bitu: 7 6 5 4 3 2 1 0
Nr dysku: 8 7 6 5 4 3 2 1

Bit ustawiony oznacza napęd aktywny.

Informacja o dysku

OffsetOpis
$10-$15

Kod zastosowanej gęstości (czy też typu dysku) w postaci ciągu ASCII. Ciąg ten ma do sześciu znaków, jeśli jest ich mniej, dopełniony jest zerami. Kody te są następujące:

  • AT810 - gęstość pojedyńcza (SD)
  • AT1050 - gęstość średnia (ED)
  • XF551 - gęstość podwójna dwustronna (DSDD)
  • 130RAM - ramdysk
  • SSDD - gęstość podwójna (DD)
$18-$19

Całkowita liczba klastrów na dyskietce.

$1A-$1B

Maksymalna (początkowa) liczba wolnych klastrów na dyskietce.

$1D

Numer pierwszego klastra katalogu głównego.

$22

Komenda SIO odczytu sektora, $52 ("R") dla standardu, lub $D2 ("R" w inwersji) dla trybu przyspieszonej transmisji XF551.

$23

Komenda SIO zapisu sektora, $57 ("W") dla standardu, lub $D7 ("W" w inwersji) dla trybu przyspieszonej transmisji XF551.

$24

Wartość rejestru AUDF3/4 układu Pokey wybierająca szybkość przesyłania komend. Dla transmisji standardowej jest tu zero, dla przyspieszonej $28 (= 19200 bps).

$25

Wartość rejestru AUDF3/4 układu Pokey wybierająca szybkość przesyłania danych. Dla transmisji standardowej jest tu zero, dla przyspieszonej $10 (= 38400 bps).

$26

Komenda SIO formatowania w gęstości, w jakiej aktualnie jest dyskietka: $21 ("!") dla przeplotu standardowego, $A1 ("!" w inwersji) dla przeplotu turbo XF551. Jeśli dysk nie wymaga fizycznego formatowania (bo jest np. ramdyskiem), jest tu $00.

$28-$2F

Blok PERCOM dla tej gęstości, pierwsze 8 bajtów.

Pozostałe wartości tej części bootsektora DOS XE czekają na swego odkrywcę. Ważne jest, że - inaczej niż np. w formacie SpartaDOS-u - zawartość bootsektora nie jest zmieniana przy normalnej pracy z filesystemem, wszystkie tego typu zmienne przechowuje VTOC.

VTOC

VTOC znajduje się w klastrze nr 4 (sektor fizyczny nr 4 w DD, albo sektory 8-9 w SD i ED). Pierwsze 10 bajtów zajmuje informacja o dysku zorganizowana następująco:

OffsetOpis
$00-$01Wartość $0101. Prawdopodobnie znacznik formatu.
$02-$03Całkowita liczba klastrów na dysku, zwiększona o 1.
$04-$05Aktualna liczba wolnych klastrów na dysku.
$06-$07Liczba plików i podkatalogów na dysku (czyli numer sekwencyjny dysku, zwiększany o 1 za kazdym razem, gdy tworzony jest plik lub katalog). Początkowo $00.
$08-$09Numer losowy dysku.

Numer sekwencyjny i losowy w połączeniu z innymi danymi pozwala DOS-owi stwierdzić, kiedy dyskietka w stacji została wymieniona.

Mapa bitowa

Dalszą część VTOC zajmuje mapa bitowa całego dysku, w której bit ustawiony oznacza klaster wolny, a bit skasowany - zajęty. Bit 7 każdego bajtu mapy oznacza klaster o niższym numerze, kolejne bity przyporządkowane sa do klastrów o kolejno rosnących numerach. Zerowy klaster jest w mapie pominięty, a zatem bit 7 pierwszego bajtu mapy bitowej (bajtu nr $0A VTOC) ma przyporządkowany klaster nr 1, bit 6 - nr 2, bit 5 nr 3 itd.

Początkowo pierwszym wolnym klastrem dysku jest klaster nr 6 - pierwszy bajt mapy bitowej ma wartość %00000111 (jednostki 1-5 zajęte, 6-8 wolne).

Katalogi

Katalog główny zaczyna się bezpośrednio za VTOC i początkowo zajmuje tylko jeden klaster, którego numer jest w bajcie $1D bootsektora.

Pojedyńczy wpis katalogowy ma długość 49 bajtów (!) i jest zorganizowany jak następuje:

OffsetOpis
$00

Bajt statusu:

  • bit 7 = 1 - plik skasowany;
  • bit 6 = 1 - plik istnieje; w plikach zamkniętych bity 6 i 7 mają zawsze przeciwne stany
  • bit 5 - niewykorzystany
  • bit 4 - niewykorzystany
  • bit 3 - niewykorzystany
  • bit 2 = 1 - plik jest otwarty do zapisu; jednocześnie ustawiane są na 1 bity 7 i 6
  • bit 1 = 1 - plik jest zabezpieczony
  • bit 0 = 1 - plik jest podkatalogiem
$01-$08

Nazwa pliku dopełniona spacjami.

$09-$0B

Rozszerzenie nazwy pliku dopełnione spacjami.

$0C-$0D

Liczba klastrów danych zajmowanych przez plik. Dla katalogu zawsze $0000.

$0E

Liczba bajtów danych w ostatnim klastrze pliku. Dla katalogu zawsze $00.

$0F-$10

Numer pliku lub katalogu. Jest to numer kolejny pliku (lub katalogu) zakładanego w ogóle na dysku, a nie tylko w konkretnym katalogu.

$11-$12

Numer losowy dysku (ten sam, co we VTOC).

$13-$14
  • Katalog: numer pierwszego klastra danych katalogu;
  • Plik: numer pierwszego klastra mapy pliku.
$15-$2A
  • Katalog: 22 zera.
  • Plik: numery kolejnych jedenastu klastrów mapy pliku, po dwa bajty na numer.
$2B-$2C

Data utworzenia pliku. Zapisane są kolejno dzień, miesiąc i rok niezgodnie z granicami bajtów:

  • bity 0-4 - dzień miesiąca
  • bity 5-8 - miesiąc ($01 - styczeń itd.)
  • bity 9-15 - rok odjąć 1900.
+---------------+---------------+
|   Bajt $2B    |   Bajt $2C    | 
+---------------+---------------+
|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
+-------------+-+-----+---------+
| rok - 1900  |miesiąc|  dzień  |
+-------------+-------+---------+

Np. $C13D = 1100-0001-0011-1101 = 1100000|1001|11101 = $60|$09|$1D = 96-09-29 (29 września 1996)

$2D-$2E

Data modyfikacji pliku, w takim samym formacie jak powyżej.

$2F-$30

Dwa bajty o nieznanym znaczeniu (oba wyzerowane).

Każdy nowo założony plik dostaje status $C4. Po zamknięciu pliku DOS kasuje bity 7 i 2.

Klastry katalogu

W jednym klastrze znajduje się zawsze całkowita liczba wpisów katalogu, czyli maximum pięć. Jeśli katalog ma więcej wpisów, szósty wpis w całości jest w następnym klastrze tego katalogu itd.

Bajty $F5-$F7 klastra katalogu są nieużywane, a ostatnie 8 bajtów ($F6-$FF) zawiera informacje o katalogu:

OffsetOpis
$F8-$F9

Numer następnego klastra zajętego przez ten katalog ($0000 w ostatnim).

$FA-$FB

Numer pliku - $0000 dla katalogu głównego.

$FC-$FD

Numer losowy dysku (ten sam co we VTOC).

$FE

Numer kolejny klastra katalogu (począwszy od $00).

$FF

Typ klastra ($FF - katalog).

Pliki

Mapa pliku

Mapa pliku składa się z klastrów, których lista znajduje się w bajtach $13-$2A wpisu w katalogu. Pierwszych 250 bajtów przeznaczonych jest na 125 numerów klastrów, w których znajdują się dane pliku. Ostatnie sześć bajtów zawiera dodatkowe informacje:

OffsetOpis
$FA-$FB

Numer pliku.

$FC-$FD

Numer losowy dysku (ten sam co we VTOC).

$FE

Numer kolejny klastra mapy (począwszy od $00).

$FF

Typ klastra ($80 - mapa pliku).

Na listę sektorów mapy przeznaczono w katalogu 24 bajty miejsca. Ponieważ numer klastra ma 16 bitów, zatem mapa pliku może zająć maksymalnie 12 sektorów. 12 sektorów po 125 wpisów klastrów danych po 250 bajtów daje nam w efekcie ograniczenie maksymalnej wielkości pliku na dysku do 1500 klastrów, czyli 375000 bajtów (366,2k). Jeśli DOS nie zmienia jakoś adresowania klastrów powyżej tej długości, to jest ostateczny limit wielkości pliku w tym filesystemie.

Klastry danych

W każdym klastrze danych najwyżej 250 bajtów jest wypełnione danymi. Końcówka, podobnie jak w przypadku katalogów i map, zawiera informacje:

OffsetOpis
$FA-$FB

Numer pliku.

$FC-$FD

Numer losowy dysku (ten sam co we VTOC).

$FE-$FF

Numer kolejny klastra pliku (począwszy od $0000).

Maksymalny numer kolejny klastra pliku to 32767 ($7FFF), a więc starszy bajt tej liczby jest zawsze dodatni, przez co jednocześnie stanowi znacznik typu klastra (<= $7F - klaster danych).

Uwagi

Osobliwością filesystemu są dwie różne metody zapewnienia ciągłości danych w zależności od tego, czy zbiór jest plikiem, czy podkatalogiem: w przypadku pliku używa się map klastrów, natomiast klastry katalogu wskazują na siebie bezpośrednio, bez użycia map. Ta dwoistość jest być może reliktem filesystemu OS/A+ v.4.1 i wskazywać na to, że OS/A+ v.4.1 może być dalekim praszczurem DOS XE.

Zobacz też

Personal tools