Format AtariDOS XE
From Atariki
Wersja z dnia 14:25, 1 paź 2006 KMK (Dyskusja | wkład) (→Boot) ← Previous diff |
Wersja z dnia 14:34, 1 paź 2006 KMK (Dyskusja | wkład) (→Boot) Next diff → |
||
Linia 39: | Linia 39: | ||
<tr><td>$1A-$1B</td><td><p>Maksymalna (początkowa) liczba wolnych klastrów na dyskietce.</p></td></tr> | <tr><td>$1A-$1B</td><td><p>Maksymalna (początkowa) liczba wolnych klastrów na dyskietce.</p></td></tr> | ||
<tr><td>$1D</td><td><p>Numer pierwszego klastra katalogu głównego.</p></td></tr> | <tr><td>$1D</td><td><p>Numer pierwszego klastra katalogu głównego.</p></td></tr> | ||
- | <tr><td>$22</td><td><p>Komenda SIO odczytu sektora, normalnie $52 ("R").</p></td></tr> | + | <tr><td>$22</td><td><p>Komenda SIO odczytu sektora, $52 ("R") dla standardu, lub $D2 ("R" w inwersji) dla trybu przyspieszonej transmisji [[XF551]].</p></td></tr> |
- | <tr><td>$23</td><td><p>Komenda SIO zapisu sektora, normalnie $57 ("W").</p></td></tr> | + | <tr><td>$23</td><td><p>Komenda SIO zapisu sektora, $57 ("W") dla standardu, lub $D7 ("W" w inwersji) dla trybu przyspieszonej transmisji [[XF551]].</p></td></tr> |
- | <tr><td>$26</td><td><p>Komenda SIO formatowania w gęstości, w jakiej aktualnie jest dyskietka.</p></td></tr> | + | <tr><td>$24</td><td><p>Wartość rejestru AUDF3/4 układu [[Pokey]] wybierająca szybkość przesyłania komend. Dla transmisji standardowej jest tu zero, dla przyspieszonej $28 (= 19200 bps).</p></td></tr> |
+ | <tr><td>$25</td><td><p>Wartość rejestru AUDF3/4 układu [[Pokey]] wybierająca szybkość przesyłania danych. Dla transmisji standardowej jest tu zero, dla przyspieszonej $10 (= 38400 bps).</p></td></tr> | ||
+ | <tr><td>$26</td><td><p>Komenda SIO formatowania w gęstości, w jakiej aktualnie jest dyskietka: $21 ("!") dla przeplotu standardowego, $A1 ("!" w inwersji) dla przeplotu turbo [[XF551]].</p></td></tr> | ||
<tr><td>$28-$2F</td><td><p>[[SIO#Blok_PERCOM|Blok PERCOM]] dla tej gęstości, pierwsze 8 bajtów.</p></td></tr> | <tr><td>$28-$2F</td><td><p>[[SIO#Blok_PERCOM|Blok PERCOM]] dla tej gęstości, pierwsze 8 bajtów.</p></td></tr> | ||
</table> | </table> |
Wersja z dnia 14:34, 1 paź 2006
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
- Obsługiwane wielkości sektorów: 128 i 256 bajtów
- Maksymalna pojemność filesystemu: 15,62 MB
- Maksymalna wielkość pliku: 366,21 kB
- Maksymalna liczba plików na dysku: 65536
- Struktura katalogowa: hierarchiczna
- Maksymalna liczba plików w katalogu: nieograniczona
- 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 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ą pewne informacje o dyskietce i konfiguracja DOS-u.
Offset | Opis |
$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 |
$10-$15 |
Kod zastosowanej gęstości 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: |
$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. |
$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ę.
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:
Offset | Opis |
$00-$01 | Wartość $0101. Prawdopodobnie znacznik formatu. |
$02-$03 | Całkowita liczba klastrów na dysku, zwiększona o 1. |
$04-$05 | Aktualna liczba wolnych klastrów na dysku. |
$06-$07 | 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. |
$0A-$0B | Numer 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:
Offset | Opis |
$00 |
Bajt statusu:
|
$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 |
|
$15-$2A |
|
$2B-$2C | Data utworzenia pliku. Zapisane są kolejno dzień, miesiąc i rok niezgodnie z granicami bajtów:
+---------------+---------------+ |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:
Offset | Opis |
$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:
Offset | Opis |
$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).
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:
Offset | Opis |
$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 1499 ($05DB), a więc starszy bajt tej liczby jest zawsze dodatni, przez co jednocześnie stanowi znacznik typu klastra (<= $7F - klaster danych).