Format OS/A Plus 4
From Atariki
Format dyskietki zaimplementowany w OS/A+ v.4.1. Jako jedyny na ośmiobitowym Atari pozwala na nadawanie plikom długich nazw, ponad standardowe 8+3.
Spis treści |
Cechy ogólne
- Dopuszczalne wielkości sektorów: 128, 256 i 512 bajtów
- Maksymalna pojemność filesystemu: 65535 sektorów (16 i 32 MB)
- Maksymalna wielkość pliku: 65536 sektorów (16 i 32 MB)
- Maksymalna liczba plików na dysku: nieograniczona
- Struktura katalogowa: jednopoziomowa
- Maksymalna liczba plików w katalogu: nieograniczona
- Nazwa pliku: do 30 znaków
- Metoda linkowania plików: indywidualne mapy plików
- Metoda alokacji sektorów: mapa bitowa
Struktura ogólna
Obsługiwana jest gęstość pojedyńcza (SD) i podwójna (DD). Jednostką alokacji jest pojedyńczy sektor fizyczny o wielkości 256 lub 512 bajtów, albo (gdy sektor ma 128 bajtów) klaster o wielkości 256 bajtów. W dalszej części tekstu ta jednostka alokacji nazywana będzie "sektorem".
Sektor nr 360 ($168) jest zajęty na VTOC, w sektorach 361-375 ($0169-$0177) znajduje się normalnie katalog dyskietki. W sektorach 1-2 jest program ładujący DOS, a sektory 3-7 są zarezerwowane. Początkowa pojemność dyskietki DD to 697 wolnych sektorów z ogólnej liczby 720.
VTOC
Offset | Opis |
$00 |
Bajt o wartości $02, zapewne numer wersji formatu. |
$01-$02 |
Zapisany w konwencji starszy/młodszy (!) numer pierwszego sektora katalogu. |
$03 | Bajt zarezerwowany o wartości $00. |
$04-$05 | Słowo zarezerwowane o wartości $0000. |
$06 | Bajt zarezerwowany o wartości $00. |
$07-$26 | 32 bajty zarezerwowane o wartości $00. |
$27 | Liczba wpisów w jednym sektorze mapy plików: 122 dla sektorów 256-bajtowych i 244 dla sektorów 512-bajtowych (taką liczbę - $F4 - podaje oryginalna dokumentacja, jednak może to być błąd typograficzny, być może powinno być $FA, czyli 250). |
$28-$2F | 8 bajtów zarezerwowanych o wartości $00. |
$30-$33 | 4 bajty zarezerwowane o wartości $00. |
$34 | Bajt zarezerwowany o wartości $00. |
$35 | Bajt zarezerwowany o wartości $00. |
$36-$37 | Wielkość sektora w bajtach (młodszy/starszy). |
$38-... | 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 $00, co oznacza, że z grupy sektorów 0-7 wszystkie są zajęte. Ostatni sektor dyskietki DD ma przypisany bit 7 bajtu nr 146 VTOC i jest oznaczony jako wolny. |
Katalog
Katalog zajmuje piętnaście sektorów począwszy od sektora, którego numer zapisany jest w drugim i trzecim bajcie VTOC. Normalnie pierwszym sektorem katalogu jest sektor 361 ($0169). Pierwsze 11 bajtów każdego sektora katalogu rezerwuje DOS na swoje potrzeby:
Offset | Opis |
$00 |
Bajt zarezerwowany o wartości $00. |
$01-$02 |
Numer następnego sektora katalogu (starszy/młodszy!). |
$03-$0A | Bajty zarezerwowane. |
Za tym nagłówkiem sektora katalogu zaczynają się wpisy plików. Pojedyńczy wpis ma 35 bajtów długości, w jednym sektorze 256-bajtowym mieści się ich siedem, a w 512-bajtowym - czternaście. Strukturę wpisu przedstawia tabelka:
Offset | Opis |
$00-$01 |
Numer pierwszego sektora mapy sektorów pliku (starszy/młodszy). Jeśli plik jest skasowany, oba bajty są wyzerowane (uniemożliwia to odzyskanie skasowanego zbioru). |
$02 |
Status (typ) pliku:
|
$03-$20 |
Nazwa pliku dosunięta w lewo i dopełniona spacjami do 30 znaków. Wszystkie znaki nazwy (całe 30 bajtów) mają ustawiony bit 7 (inverse video). Spacje, przecinki, znaki EOL i zera nie mogą występować w nazwach plików. |
$21-$22 | Wielkość pliku w sektorach (młodszy/starszy). Dokładna wielkość pliku ani liczba bajtów w ostatnim sektorze danych pliku nie jest nigdzie zapisana (!). |
Mapy plików
Podobnie jak w systemie plików SpartaDOS i DOS XE ciągłość plików zapewniają mapy sektorów. Pierwszy sektor mapy wskazywany jest przez wpis katalogowy pliku. W tym sektorze pierwsze 12 bajtów jest zajęte przez DOS:
Offset | Opis |
$00 | Bajt zarezerwowany o wartości $00. |
$01-$02 | Numer następnego sektora mapy (starszy/młodszy!). |
$03-$04 | Bajty zarezerwowane o wartości $00 |
$05-$06 | Bajty zarezerwowane o wartości $00 |
$07-$0B | Bajty zarezerwowane o wartości $00 |
Od bajtu o offsecie $0C idą kolejno dwubajtowe numery bloków pliku zapisane w konwencji starszy/młodszy. O tym, czym jest blok, decyduje zapisany w katalogu (zob. wyżej) file blocking factor. Jeśli jest on równy zero, wtedy blok jest równy sektorowi fizycznemu dysku. Jeśli jest równy jeden, blok stanowi osiem fizycznych sektorów dysku, a jeśli 2 - szesnaście takowych.
Uwagi
Odrębność metod linkowania plików i katalogów,a także fakt uzywania sektora lub klastra 256-bajtowego jako najmniejszej jednostki alokacji, może wskazywać na pokrewieństwo z późniejszym i doskonalszym filesystemem DOS-u XE.