Format AtariDOS XE

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 12:44, 29 wrz 2006
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 13:20, 29 wrz 2006
KMK (Dyskusja | wkład)

Next diff →
Linia 3: Linia 3:
== Jednostka alokacji == == Jednostka alokacji ==
-Jednostkę alokacji stanowi 256 bajtów, czyli dwa sektory fizyczne w [[SD]] i [[ED]], a jeden w [[DD]]. Przełożenie sektorów fizycznych na jednostki alokacji jest dość osobliwe, liczy się bowiem w nim nieistniejący sektor nr 0. I tak, w [[DD]] sektor nr 0 stanowi jednostkę alokacji nr 0, sektor nr 1 - jednostkę alokacji nr 1 itd. W [[SD]] i [[DD]] jednostkę alokacji nr 0 stanowią sektory 0 i 1, jednostkę alokacji nr 2 - sektory 2 i 3, jednostkę alokacji nr 3 - sektory 4 i 5, i tak dalej.+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 2 - sektory 2 i 3, klaster nr 3 - sektory 4 i 5, i tak dalej.
== Boot == == Boot ==
-Pierwsze trzy sektory (fizyczne) dysku zajmuje program ładujący DOS. Oprócz tego w bajtach $09-$2F sektora nr 1 zapisane są informacje o dyskietce i konfiguracja DOS-u.+Pierwsze trzy sektory (fizyczne) dysku zajmuje program ładujący DOS. Oprócz tego w bajtach $09-$2F sektora ('''nie''' klastra) nr 1 zapisane są informacje o dyskietce i konfiguracja DOS-u.
== VTOC == == VTOC ==
-VTOC znajduje się w jednostce alokacji 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:+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:
<table border = 1 cellpadding = 5> <table border = 1 cellpadding = 5>
<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr> <tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
<tr><td>$00-$01</td><td>Wartość $0101. Prawdopodobnie znacznik formatu.</td></tr> <tr><td>$00-$01</td><td>Wartość $0101. Prawdopodobnie znacznik formatu.</td></tr>
-<tr><td>$02-$03</td><td>Całkowita liczba jednostek alokacji na dysku, zwiększona o 1.</td></tr>+<tr><td>$02-$03</td><td>Całkowita liczba klastrów na dysku, zwiększona o 1.</td></tr>
-<tr><td>$04-$05</td><td>Aktualna liczba wolnych jednostek alokacji na dysku.</td></tr>+<tr><td>$04-$05</td><td>Aktualna liczba wolnych klastrów na dysku.</td></tr>
-<tr><td>$06-$07</td><td>Liczba plików i podkatalogów na dysku (czyli numer sekwencyjny dysku, zwiększany o 1 za kazdym razem, gdy tworzony jest plik lub katalog).</td></tr>+<tr><td>$06-$07</td><td>Liczba 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.</td></tr>
<tr><td>$0A-$0B</td><td>Numer losowy dysku.</td></tr> <tr><td>$0A-$0B</td><td>Numer losowy dysku.</td></tr>
</table> </table>
Linia 24: Linia 24:
Numer sekwencyjny i losowy w połączeniu z innymi danymi pozwala DOS-owi stwierdzić, kiedy dyskietka w stacji została wymieniona. Numer sekwencyjny i losowy w połączeniu z innymi danymi pozwala DOS-owi stwierdzić, kiedy dyskietka w stacji została wymieniona.
-Dalszą część VTOC zajmuje mapa bitowa całego dysku, w której bit ustawiony oznacza jednostkę alokacji wolną, a bit skasowany - zajętą. Bit 7 każdego bajtu mapy oznacza jednostkę o niższym numerze, kolejne bity przyporządkowane sa do jednostek alokacji o kolejno rosnących numerach. Zerowa jednostka alokacji jest w mapie pominięta, a zatem bit 7 pierwszego bajtu mapy bitowej (bajtu nr $0A VTOC) ma przyporządkowaną jednostkę alokacji nr 1, bit 6 - nr 2, bit 5 nr 3 itd.+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 pierwszą wolną jednostką alokacji dysku jest jednostka nr 6 - pierwszy bajt mapy bitowej ma wartość %00000111 (jednostki 1-5 zajęte, 6-8 wolne).+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).
-=== Katalog ===+== Katalogi ==
-Katalog główny zaczyna się bezpośrednio za VTOC i początkowo zajmuje tylko jedną jednostkę alokacji (nr 5).+Katalog główny zaczyna się bezpośrednio za VTOC i początkowo zajmuje tylko jeden klaster (nr 5).
Pojedyńczy wpis katalogowy ma długość 49 bajtów (!) i jest zorganizowany jak następuje: Pojedyńczy wpis katalogowy ma długość 49 bajtów (!) i jest zorganizowany jak następuje:
Linia 39: Linia 39:
<p>Bajt statusu:</p> <p>Bajt statusu:</p>
* bit 7 = 1 - plik skasowany; * bit 7 = 1 - plik skasowany;
-* bit 6 = 1 - plik istnieje; stany bitów 6 i 7 sa zawsze przeciwne+* bit 6 = 1 - plik istnieje; w plikach zamkniętych bity 6 i 7 mają zawsze przeciwne stany
* bit 5 - niewykorzystany * bit 5 - niewykorzystany
* bit 4 - niewykorzystany * bit 4 - niewykorzystany
* bit 3 - niewykorzystany * bit 3 - niewykorzystany
-* bit 2 = 1 - plik jest otwarty do zapisu+* 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 1 = 1 - plik jest zabezpieczony
* bit 0 = 1 - plik jest podkatalogiem * bit 0 = 1 - plik jest podkatalogiem
Linia 54: Linia 54:
<tr><td>$0F-$10</td><td><p>Numer piku.</p></td></tr> <tr><td>$0F-$10</td><td><p>Numer piku.</p></td></tr>
<tr><td>$11-$12</td><td><p>Numer losowy dysku (ten sam, co we VTOC).</p></td></tr> <tr><td>$11-$12</td><td><p>Numer losowy dysku (ten sam, co we VTOC).</p></td></tr>
-<tr><td>$13-$14</td><td><p>Numer jednostki alokacji, od której zaczyna się mapa pliku.</p></td></tr>+<tr><td>$13-$14</td><td><p>W przypadku katalogu wskazuje to na pierwszy klaster katalogu. W przypadku pliku - pierwszy klaster zajęty przez mapę pliku.</p></td></tr>
<tr><td>$15-$2A</td><td><p>22 bajty o nieustalonym znaczeniu (same zera), być może rezerwa na przyszłość.</p></td></tr> <tr><td>$15-$2A</td><td><p>22 bajty o nieustalonym znaczeniu (same zera), być może rezerwa na przyszłość.</p></td></tr>
<tr><td>$2B-$2C</td><td><p>Data utworzenia pliku. Zapisane są kolejno rok, miesiąc i dzień niezgodnie z granicami bajtów:</p> <tr><td>$2B-$2C</td><td><p>Data utworzenia pliku. Zapisane są kolejno rok, miesiąc i dzień niezgodnie z granicami bajtów:</p>
Linia 65: Linia 65:
</table> </table>
-W jednej jednostce alokacji znajduje się zawsze ich całkowita liczba, czyli maximum pięć. +Każdy nowo założony plik dostaje status $C4. Po zamknięciu pliku DOS kasuje bity 7 i 2.
-DOS 4.0 nie pozwala założyć na dyskietce pliku o zerowej długości. Każdy nowo założony plik dostaje status $81. Po zamknięciu pliku DOS kasuje bit 0, jednak jeśli do pliku nie wpisano żadnych danych, status będzie miał wartość $80, co oznacza plik skasowany. Dopiero wpisanie co najmniej jednego bajtu powoduje, że funkcja CLOSE zmienia status zbioru na $40 (plik istnieje).+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.
-=== Mapa alokacji plików ===+Bajty $F5-$F7 klastra katalogu są nieużywane, a ostatnie 8 bajtów ($F6-$FF) zawiera informacje o katalogu:
- +
-Mapa alokacji plików zajmuje, jako się rzekło, ostatni sektor 59 jednostki alokacji, o znajomym skądinąd numerze 360, czyli $0168. Pierwsze osiem bajtów tego sektora zajęte jest przez system:+
<table border = 1 cellpadding = 5> <table border = 1 cellpadding = 5>
-<tr><td><b>Offset</b></td><td><b>Znaczenie</b></td></tr>+<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
-<tr><td>$00</td><td><p>Znacznik formatu:</p>+<tr><td>$F8-$F9</td><td>
-* $52 ("R") dla dyskietek jednostronnych+<p>Numer następnego klastra zajętego przez ten katalog ($0000 w ostatnim).</p></td></tr>
-* $43 ("C") dla dyskietek dwustronnych+<tr><td>$FA-$FB</td><td><p>Numer pliku - $0000 dla katalogu głównego.</p></td></tr>
-</td></tr>+<tr><td>$FC-$FD</td><td><p>Numer losowy dysku (ten sam co we VTOC).</p></td></tr>
-<tr><td>$01</td><td>Offset wewnątrz mapy alokacji plików wskazujący pierwszą pozycję, gdzie zaczyna się wolny obszar. Jeśli na dyskietce nie ma wolnych jednostek alokacji, oba te bajty są wyzerowane.</td></tr>+<tr><td>$FE</td><td><p>Numer kolejny klastra katalogu (począwszy od $00).</p></td></tr>
-<tr><td>$02</td><td>Znaczenie nieustalone, być może rezerwa na przyszłość.</td></tr>+<tr><td>$FF</td><td><p>Typ klastra ($FF - katalog).</p></td></tr>
-<tr><td>$03</td><td>Liczba wolnych jednostek alokacji na dyskietce.</td></tr>+
-<tr><td>$04-$07</td><td>Znaczenie nieustalone, być może rezerwa na przyszłość.</td></tr>+
</table> </table>
-Pozostałą część mapy alokacji plików zajmuje właściwa mapa dyskietki. Pierwszy jej wpis to bajt nr 8 (licząc od zera) sektora 360, oznacza on jednostkę alokacji nr 1, czyli sektory 1-6. Następny bajt symbolizuje jednostkę alokacji nr 2 (sektory 7-12), kolejny jednostkę alokacji nr 3 (sektory 13-18) itd. aż do bajtu 127, do którego przypisana jest jednostka alokacji nr 120, czyli sektory 714-720.+== Mapa pliku ==
-Wartości poszczególnych bajtów mogą być następujące:+Mapa pliku składa się z klastrów połączonych w listę liniową, podobnie jak w systemie plików [[SpartaDOS]]. Pierwszych 248 bajtów przeznaczonych jest na 124 numery klastrów, w ktrórych znajdują się dane pliku. Ostatnie osiem bajtów zawiera dodatkowe informacje:
-* $00-$05: koniec pliku+<table border = 1 cellpadding = 5>
-* każdy inny: numer następnej jednostki alokacji zwiększony o 7+<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
 +<tr><td>$F8-$F9</td><td>
 +<p>Numer następnego klastra mapy ($0000 w ostatnim).</p></td></tr>
 +<tr><td>$FA-$FB</td><td><p>Numer pliku.</p></td></tr>
 +<tr><td>$FC-$FD</td><td><p>Numer losowy dysku (ten sam co we VTOC).</p></td></tr>
 +<tr><td>$FE</td><td><p>Numer kolejny klastra mapy (począwszy od $00).</p></td></tr>
 +<tr><td>$FF</td><td><p>Typ klastra ($80 - mapa pliku).</p></td></tr>
 +</table>
-Jeśli bajt 3 wpisu pliku w katalogu ma wartość 8, to znaczy, że wskazuje on tym samym, iż informacji o początku pliku trzeba szukać w ósmym bajcie mapy alokacji plików. Jak objaśniono powyżej, bajt ten oznacza jednostkę alokacji nr 1, a więc jest to pierwsza jednostka alokacji wypełniona danymi tego pliku.+== Klastry danych ==
-Jeśli plik zajmuje ponad jedną jednostkę alokacji, to odpowiedni bajt mapy zawiera numer bajtu w tejże mapie, który symbolizuje następną jednostkę alokacji zajętą przez plik. Inaczej mówiąc, jeśli plik zajmuje jednostki alokacji 1, 2, 3 (i dalsze), to wartości bajtów 8 i 9 mapy alokacji plików będą wynosić odpowiednio 9 i 10, a jeśli czwartą zajętą jednostką alokacji jest jednostka nr 50, to bajt 10 mapy będzie zawierał wartość 57 (numer następnej jednostki alokacji plus 7). Krótko mówiąc, każdy wpis mapy dotyczący danego pliku wskazuje na kolejny wpis mapy dotyczący tego samego pliku.+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:
-Koniec pliku jest w mapie alokacji plików zaznaczony wartością od $00 do $05. Liczba ta oznacza, który sektor danej jednostki alokacji jest jako ostatni wypełniony danymi. W połączeniu z informacją z katalogu, która mówi, ile bajtów zawiera ostatni sektor pliku, pozwala to na dokładne określenie długości pliku.+<table border = 1 cellpadding = 5>
- +<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
-Wolny obszar dyskietki jest w mapie reprezentowany tak samo jak pliki: wskaźnikiem do niego są bajty 1 i 2 mapy alokacji plików, a tam każdy kolejny wpis w mapie wskazuje na następny wpis mapy oznaczający wolną jednostkę alokacji. Dzięki temu DOS nie musi przeznaczać specjalnego kodu do wpisania do mapy, jeśli któraś jednostka alokacji jest zarezerwowana i nie powinna być zajęta przez pliki (np. VTOC), wystarczy, że takowa jest pominięta na liście wolnych jednostek.+<tr><td>$FA-$FB</td><td><p>Numer pliku.</p></td></tr>
- +<tr><td>$FC-$FD</td><td><p>Numer losowy dysku (ten sam co we VTOC).</p></td></tr>
-== Przykład ==+<tr><td>$FE</td><td><p>Numer kolejny klastra pliku (począwszy od $00).</p></td></tr>
- +<tr><td>$FF</td><td><p>Typ klastra ($00 - klaster danych).</p></td></tr>
-* wpis katalogowy pliku QDOS.SYS jest natępujący:+</table>
- +
- $40 $06 $7A $08 $00 QDOS____SYS+
- +
-Status $40 oznacza, że plik istnieje; zajmuje 6 jednostek alokacji, czyli 36 sektorów (i taką własnie długość ujrzymy w katalogu, bo DOS przelicza wszystko na sektory 128-bajtowe). Ostatni sektor zawiera 123 bajty danych (offset ostatniego bajtu $7A, czyli 122), a dane o rozmieszczeniu pliku zaczynają się w bajcie ósmym ($08) mapy alokacji plików.+
- +
-* mapa od bajtu nr 8 zawiera co następuje:+
- +
- Offsety: $08 $09 $0A $0B $0C $0D+
- Wartości: $09 $0A $0B $0C $0D $03+
- +
-Offset bajtu to numer jednostki alokacji zwiększony o 7, a więc plik zajmuje jednostki alokacji od 1 do 6, czyli sektory od 1 do 36. Jednostka alokacji nr 6 jest niepełna, zajęte są w niej tylko 4 sektory, a w ostatnim z nich, co wiemy z katalogu, są 123 bajty danych.+
- +
-Struktura mapy alokacji plików w DOS 4.0, jak widać, przypomina nieco pecetowy FAT.+
== Zobacz też == == Zobacz też ==

Wersja z dnia 13:20, 29 wrz 2006

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

Spis treści

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 2 - sektory 2 i 3, klaster nr 3 - sektory 4 i 5, i tak dalej.

Boot

Pierwsze trzy sektory (fizyczne) dysku zajmuje program ładujący DOS. Oprócz tego w bajtach $09-$2F sektora (nie klastra) nr 1 zapisane są informacje o dyskietce i konfiguracja DOS-u.

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.
$0A-$0BNumer losowy dysku.

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

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 (nr 5).

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-$0E

Wielkość pliku w bajtach.

$0F-$10

Numer piku.

$11-$12

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

$13-$14

W przypadku katalogu wskazuje to na pierwszy klaster katalogu. W przypadku pliku - pierwszy klaster zajęty przez mapę pliku.

$15-$2A

22 bajty o nieustalonym znaczeniu (same zera), być może rezerwa na przyszłość.

$2B-$2C

Data utworzenia pliku. Zapisane są kolejno rok, miesiąc i dzień 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.
$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.

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).

Mapa pliku

Mapa pliku składa się z klastrów połączonych w listę liniową, podobnie jak w systemie plików SpartaDOS. Pierwszych 248 bajtów przeznaczonych jest na 124 numery klastrów, w ktrórych znajdują się dane pliku. Ostatnie osiem bajtów zawiera dodatkowe informacje:

OffsetOpis
$F8-$F9

Numer następnego klastra mapy ($0000 w ostatnim).

$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).

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

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

$FF

Typ klastra ($00 - klaster danych).

Zobacz też

Personal tools