Format OS/A Plus 4

Z Atariki mirror
Wersja z dnia 08:51, 1 paź 2026 autorstwa imported>Atariki recovery (Reconstructed from archived HTML; see provenance manifest)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Format dyskietki zaimplementowany w OS/A+ v.4.1. Jest to w zasadzie implementacja formatu DOS-u 3.3 używanego na Apple II. Format OS/A+ v.4.1 jako jedyny na ośmiobitowym Atari pozwala na nadawanie plikom długich nazw, ponad standardowe 8+3.

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
  • Wielkość wpisu w katalogu: 35 bajtów
  • 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.

Na Apple II DOS do adresowania pliku używa dwubajtowych wartości opisujących fizyczne położenie sektora na dyskietce: pierwszy bajt jest numerem ścieżki, drugi numerem sektora na ścieżce. Na Atari używa się numerów sektorów logicznych, np. na dyskietce DD z zakresu od 1 do 720, bez względu na strukturę dyskietki (dyskietka może mieć 40 ścieżek po 18 sektorów, 20 po 36 lub 80 po 9 - dla DOS-u liczy się tylko sektor logiczny, np. nr 500, i obojętne jest, na której ścieżce wypada).

Niemniej format Apple II DOS wymaga zapisywania adresów sektorów w wyżej wspomnianej postaci numeru ścieżki i numeru sektora na ścieżkę. W OS/A+ v.4.1 przyjęto więc, iż "ścieżka logiczna" dyskietki Atari liczy 256 sektorów. Ma to ten skutek, że w miejscach, gdzie w Apple II mamy adresy fizyczne sektorów, na Atari są ich adresy logiczne, jedynie zapisane w nietypowej kolejności: najpierw starszy bajt, potem młodszy.

VTOC

Offset Opis
$00 Bajt "nieużywany" o wartości $02.
$01-$02 Zapisany w konwencji starszy/młodszy (!) numer pierwszego sektora katalogu.
$03 Numer wersji DOS-u użytego do sformatowania tego dysku (na Atari zawsze $00).
$04-$05 Słowo zarezerwowane o wartości $0000.
$06 Numer dyskietki (na Apple II z zakresu 1-254, na Atari zawsze 0).
$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 Apple II: numer ostatniej ścieżki gdzie są zajęte sektory. Atari: nieużywane, zawsze 0.
$31 Apple II: kierunek alokacji ścieżek (1 lub -1). Atari: nieużywane, zawsze 0.
$32-$33 2 bajty zarezerwowane o wartości $00.
$34 Liczba ścieżek na dyskietce (na Apple II 35, na Atari 0).
$35 Liczba sektorów na ścieżkę (na Apple II 13 lub 16, na Atari 0).
$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:
  • bit 7 = 1 - plik zabezpieczony
  • bity 4-6 - file blocking factor, z zakresu od 0 do 7.
  • bity 0-3 - typ pliku: na Atari zawsze $00.

Na Atari typ pliku jest zawsze $00, natomiast na Apple II rozróżnia się następujące typy:

  • $00 - plik tekstowy
  • $01 - plik INTEGER BASIC
  • $02 - plik AppleSoft BASIC
  • $04 - plik binarny
$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 (!), a wobec tego odnalezienie końca pliku przed końcem sektora jest niemożliwe w OS/A+ 4.1.

Na Apple II używa się do tego celu metody odpowiedniej dla typu pliku wykazanego w katalogu - pliki tekstowe zawierają znacznik EOF w postaci sekwencji znaków ASCII o wartościach $8D i $00 (ten pierwszy to EOL w Apple), natomiast pozostałe typy plików mają długość zapisaną w nagłówku.

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 Numer (logiczny) pierwszego sektora pliku zapisanego w tym sektorze mapy (na Atari zawsze $0000).
$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 używania sektora lub klastra 256-bajtowego jako najmniejszej jednostki alokacji, może wskazywać na pokrewieństwo z późniejszym i doskonalszym filesystemem DOS-u XE.

Zobacz też