Format SpartaDOS

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 02:55, 3 mar 2006
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 08:41, 6 maj 2006
Pecus (Dyskusja | wkład)
(Przerzucenia z linku do opisu, zmiana na HEXy itp...)
Next diff →
Linia 1: Linia 1:
-http://krap.pl/mirrorz/atari/www.kossinus.com/tom/SDX/07-technika.htm#dyskietka+[[Formaty systemów plików|Format dyskietki]] używany przez [[SpartaDOS]] oraz wzorowany na nim [[BW-DOS]].
-== Zobacz też ==+Istnieją cztery wyróżniające się rodzaje sektorów na dyskietce w formacie [[SpartaDOS]]. Są to sektory odczytu wstępnego, mapy bitowe, mapy sektorów i danych. Sektory danych mogą zawierać zarówno dane katalogów, jaki dane plików. Poniżej znajduje się szczegółowy opis sektorów każdego rodzaju.
 + 
 +== Sektory odczytu wstępnego. ==
 + 
 +Jak w większości innych DOS-ów dla 8-bitowych komputerów Atari, pierwsze trzy sektory dyskietki są sektorami odczytu wstępnego. Zawierają one program odczytujący wskazany plik przy uruchomieniu systemu oraz inne informacje konieczne do zapisu i odczytu danych z dyskietki. Sektory odczytu wstępnego są zawsze w pojedynczej gęstości, niezależnie od gęstości pozostałej części dyskietki.
 + 
 +Sektor 1 od bajtu $30 do $7F i całe sektory 2 i 3 zawierają program, który odczytuje plik SpartaDOS 2.x i 3.x, jeśli został określony (przez polecenie BOOT). Program ten nie jest wykorzystywany przez [[SpartaDOS X]]. Pierwszą częścią sektora 1 jest tablica danych zawierająca wartości opisane poniżej. Dyskietka może być dyskietką elastyczną, ramdyskiem lub partycją twardego dysku, chyba że w opisie zostało podane inaczej. Wszystkie liczby dwu- i trzybajtowe są zapisywane w standardowym formacie młodszy/starszy bajt.
 + 
 +Oto wartości sektora 1, podane według położenia w sektorze (pierwszy bajt sektora ma numer 0):
 +<table border = 1 cellpadding = 5>
 +<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
 +<tr><td>$09</td><td>Numer pierwszego sektora mapy sektorów katalogu głównego (2 bajty)</td></tr>
 +<tr><td>$0B</td><td>całkowita liczba sektorów na dyskietce (2 bajty)</td></tr>
 +<tr><td>$0D</td><td>Liczba wolnych sektorów na dyskietce (2 bajty)</td></tr>
 +<tr><td>$0F</td><td>Liczba sektorów mapy bitowej na dyskietce</td></tr>
 +<tr><td>$10</td><td>Numer pierwszego sektora mapy bitowej (2 bajty)</td></tr>
 +<tr><td>$12</td><td>Numer sektora rozpoczynającego poszukiwanie przypisania sektorów pliku (2 bajty). Jest to pierwszy sektor sprawdzany, gdy konieczny jest sektor nieprzypisany. Służy to do dwóch celów: uwalnia od konieczności przeszukiwania mapy bitowej od początku za każdym razem, gdy na dyskietce umieszczony jest plik oraz pozwala na rezerwację sektorów za głównym katalogiem dla rozszerzenia katalogu.</td></tr>
 +<tr><td>$14</td><td>Numer sektora rozpoczynającego poszukiwanie przypisania sektorów katalogu (2 bajty). Jest to pierwszy sektor sprawdzany, gdy rozszerzany jest katalog lub dodawany jest podkatalog. Oddzielenie tej wartości od wyżej podanej umożliwia przyśpieszenie przeszukiwania katalogu.</td></tr>
 +<tr><td>$16</td><td>Nazwa dyskietki (8 bajtów). [[SpartaDOS]] wykorzystuje to jako część procedury rozpoznającej zmianę dyskietki.</td></tr>
 +<tr><td>$1E</td><td>Liczba ścieżek na dyskietce. Jeżeli stacja dysków jest dwustronna, to bit 7 jest ustawiony. Jeżeli nie jest to dyskietka elastyczna (np. ramdysk lub partycja dysku twardego), to rejestr ten zawiera wartość 1.</td></tr>
 +<tr><td>$1F</td><td>Rozmiar sektorów na dyskietce z (poza wektorami wstępnego odczytu). Zero wskazuje 256 bajtów w sektorze, a 128 oznacza 128 bajtów w sektorze.</td></tr>
 +<tr><td>$20</td><td>Podstawowy numer wersji formatu dyskietki. Dyskietki w formacie SpartaDOS 1.1 mają tu $11. Dyskietki sformatowane przez SpartaDOS 2.x, 3.x i SpartaDOS X mają tu $20, ponieważ wszystkie one używają identycznego formatu dyskietek.</td></tr>
 +<tr><td>$26</td><td>Sekwencyjny numer dyskietki. Liczba ta jest zwiększana przez [[SpartaDOS]] po każdym otwarciu pliku na dyskietce do zapisu. Jest on wykorzystywany do identyfikacji dyskietki.</td></tr>
 +<tr><td>$27</td><td>Losowy numer dyskietki. Jest to losowa liczba tworzona, gdy dyskietka jest formatowana. Wraz z nazwą dyskietki i jej numerem sekwencyjnym jest wykorzystywany do identyfikacji dyskietki w celu określenia, czy dane zawarte w buforze dyskowym są poprawne.</td></tr>
 +<tr><td>$28</td><td>Numer sektora, który jest pierwszym sektorem zajmowanym przez program odczytywany podczas odczytu wstępnego. Zwykle jest to plik "DOS". Wartość ta jest ustalana przez program XINIT.COM ze SpartaDOS Construction Set i przez polecenie BOOT.</td></tr>
 +</table>
 + 
 +== Mapa bitowa. ==
 + 
 +Mapa bitowa jest stosowana do określenia przypisania każdego sektora dyskietki. Każdy bit w każdym bajcie mapy bitowej pokazuje, czy odpowiadający mu sektor jest zajęty, więc każdy bajt zawiera informacje o stanie ośmiu sektorów. Bit 7 reprezentuje pierwszy sektor każdej grupy, a bit 0 ósmy sektor grupy. Bajt 0 pierwszego sektora mapy bitowej reprezentuje sektory od 0 do 7 (pomimo, że sektor 0 nie istnieje), bajt 1 reprezentuje sektory od 8 do 15 itd. Jeśli bit reprezentujący sektor jest '''USTAWIONY (1)''', to sektor nie jest wykorzystany. Jeżeli bit jest '''SKASOWANY (0)''', to sektor jest zajęty (przypisany do pliku). Jeżeli potrzeba więcej niż jeden sektor mapy bitowej, to mapa zajmuje kolejno następujące sektory.
 + 
 +== Mapa sektorów. ==
 + 
 +Mapa sektorów jest wykazem wszystkich sektorów zajętych przez plik. Pierwsze dwa wpisy są numerami następnego i poprzedniego sektora mapy sektorów pliku. Reszta sektora zawiera listę numerów sektorów z danymi pliku lub katalogu. Są one opisane poniżej według położenia w sektorze:
 +<table border = 1 cellpadding = 5>
 +<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
 +<tr><td>$00</td><td>Numer następnego sektora zawierającego mapę sektorów pliku lub katalogu (2 bajty). Znajduje się zero, jeżeli jest to ostatni sektor mapy.</td></tr>
 +<tr><td>$02</td><td>Numer poprzedniego sektora zawierającego mapę sektorów, pliku lub katalogu (2 bajty). Znajduje się tu zero, jeżeli jest to pierwszy sektor mapy.</td></tr>
 +<tr><td>$04</td><td>Numery sektorów zawierających dane pliku lub katalogu w poprawnej kolejności. Wszystkie numery sektorów są dwubajtowe. Jeżeli numer sektora jest zerem, to ta część pliku nie ma przypisanego sektora. Pliki takie są opisane razem z instrukcją POINT w rozdziale "Programowanie ze SpartaDOS X".</td></tr>
 +</table>
 + 
 +== Struktura katalogu. ==
 + 
 +Katalog jest specjalnym plikiem, który zawiera informację o grupie plików i podkatalogów. Każdy wpis katalogu ma długość 23 bajtów i zawiera nazwę pliku, czas i datę, długość, numer pierwszego sektora mapy i status wpisu. Pierwszy wpis jest inny niż pozostałe, gdyż znajdują się w nim informacje o samym katalogu. Poniżej podane są informacje zawarte w pierwszym wpisie (licząc od jego początku):
 +<table border = 1 cellpadding = 5>
 +<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
 +<tr><td>$00</td><td>Numer pierwszego sektora mapy sektorów katalogu nadrzędnego (2 bajty). Zero wskazuje, że jest to główny katalog dyskietki (MAIN).</td></tr>
 +<tr><td>$02</td><td>Długość katalogu w bajtach (3 bajty). Jest to wielkość pliku katalogu, a nie liczba wpisów.</td></tr>
 +<tr><td>$05</td><td>Nazwa katalogu (8 bajtów). Puste miejsca są wypełnione spacjami.</td></tr>
 +</table>
 +Gdy katalog jest otwarty w trybie bezpośrednim (jak każdy inny plik), to jego plik jest odczytywany od drugiego wpisu (tzn. od pierwszego wpisu pliku lub podkatalogu). Aby odczytać pierwszy wpis, należy instrukcją POINT wskazać początek pliku po jego otwarciu.
 + 
 +Pozostałe wpisy katalogu są takie same. Mają one długość 23 bajtów i zawierają następujące informacje (licząc od początku wpisu):
 +<table border = 1 cellpadding = 5>
 +<tr><td><b>Offset</b></td><td><b>Opis</b></td></tr>
 +<tr><td>$00</td><td>Bajt statusu. Bity tego bajtu, jeśli są USTAWIONE (1), określają status wpisu katalogu następująco:
 + 
 +*B0 - wpis jest zabezpieczony
 +*B1 - wpis jest ukryty
 +*B2 - wpis jest archiwalny
 +*B3 - wpis jest w użyciu
 +*B4 - wpis jest skasowany
 +*B5 - wpis jest podkatalogiem
 +*B7 - wpis jest otwarty do zapisu
 + 
 +'''UWAGI''': Bity 1 i 2 nie są rozpoznawalne przez wcześniejsze wersje [[SpartaDOS]]. Bity 3 i 4 mają zawsze przeciwne stany. Bit 5 nie powinien być zmieniany! Bit 6 nie jest używany i nie może być, gdyż jest kasowany przy wykonywaniu innych operacji. Bajt statusu równy 0 oznacza koniec katalogu.</td></tr>
 +<tr><td>$01</td><td>Numer pierwszego sektora mapy sektorów podkatalogu lub pliku (2 bajty)</td></tr>
 +<tr><td>$03</td><td>Długość pliku w bajtach (3 bajty)</td></tr>
 +<tr><td>$06</td><td>Nazwa pliku lub podkatalogu (8 bajtów). Puste miejsca są wypełniane spacjami.</td></tr>
 +<tr><td>$0E</td><td>Rozszerzenie nazwy pliku lub podkatalogu (3 bajty). Puste miejsca są wypełniane spacjami.</td></tr>
 +<tr><td>$11</td><td>Data utworzenia pliku lub katalogu w formacie DD/MM/YY (3 bajty).</td></tr>
 +<tr><td>$14</td><td>Czas utworzenia pliku lub katalogu w formacie HH/MM/SS w systemie 24 godzinnym (3 bajty).</td></tr>
 +</table>
 + 
 +==Zobacz też==
* [[Formaty systemów plików]] * [[Formaty systemów plików]]
-{{stub}} 
[[Kategoria:Atari 8-bit]] [[Kategoria:Atari 8-bit]]

Wersja z dnia 08:41, 6 maj 2006

Format dyskietki używany przez SpartaDOS oraz wzorowany na nim BW-DOS.

Istnieją cztery wyróżniające się rodzaje sektorów na dyskietce w formacie SpartaDOS. Są to sektory odczytu wstępnego, mapy bitowe, mapy sektorów i danych. Sektory danych mogą zawierać zarówno dane katalogów, jaki dane plików. Poniżej znajduje się szczegółowy opis sektorów każdego rodzaju.

Spis treści

Sektory odczytu wstępnego.

Jak w większości innych DOS-ów dla 8-bitowych komputerów Atari, pierwsze trzy sektory dyskietki są sektorami odczytu wstępnego. Zawierają one program odczytujący wskazany plik przy uruchomieniu systemu oraz inne informacje konieczne do zapisu i odczytu danych z dyskietki. Sektory odczytu wstępnego są zawsze w pojedynczej gęstości, niezależnie od gęstości pozostałej części dyskietki.

Sektor 1 od bajtu $30 do $7F i całe sektory 2 i 3 zawierają program, który odczytuje plik SpartaDOS 2.x i 3.x, jeśli został określony (przez polecenie BOOT). Program ten nie jest wykorzystywany przez SpartaDOS X. Pierwszą częścią sektora 1 jest tablica danych zawierająca wartości opisane poniżej. Dyskietka może być dyskietką elastyczną, ramdyskiem lub partycją twardego dysku, chyba że w opisie zostało podane inaczej. Wszystkie liczby dwu- i trzybajtowe są zapisywane w standardowym formacie młodszy/starszy bajt.

Oto wartości sektora 1, podane według położenia w sektorze (pierwszy bajt sektora ma numer 0):

OffsetOpis
$09Numer pierwszego sektora mapy sektorów katalogu głównego (2 bajty)
$0Bcałkowita liczba sektorów na dyskietce (2 bajty)
$0DLiczba wolnych sektorów na dyskietce (2 bajty)
$0FLiczba sektorów mapy bitowej na dyskietce
$10Numer pierwszego sektora mapy bitowej (2 bajty)
$12Numer sektora rozpoczynającego poszukiwanie przypisania sektorów pliku (2 bajty). Jest to pierwszy sektor sprawdzany, gdy konieczny jest sektor nieprzypisany. Służy to do dwóch celów: uwalnia od konieczności przeszukiwania mapy bitowej od początku za każdym razem, gdy na dyskietce umieszczony jest plik oraz pozwala na rezerwację sektorów za głównym katalogiem dla rozszerzenia katalogu.
$14Numer sektora rozpoczynającego poszukiwanie przypisania sektorów katalogu (2 bajty). Jest to pierwszy sektor sprawdzany, gdy rozszerzany jest katalog lub dodawany jest podkatalog. Oddzielenie tej wartości od wyżej podanej umożliwia przyśpieszenie przeszukiwania katalogu.
$16Nazwa dyskietki (8 bajtów). SpartaDOS wykorzystuje to jako część procedury rozpoznającej zmianę dyskietki.
$1ELiczba ścieżek na dyskietce. Jeżeli stacja dysków jest dwustronna, to bit 7 jest ustawiony. Jeżeli nie jest to dyskietka elastyczna (np. ramdysk lub partycja dysku twardego), to rejestr ten zawiera wartość 1.
$1FRozmiar sektorów na dyskietce z (poza wektorami wstępnego odczytu). Zero wskazuje 256 bajtów w sektorze, a 128 oznacza 128 bajtów w sektorze.
$20Podstawowy numer wersji formatu dyskietki. Dyskietki w formacie SpartaDOS 1.1 mają tu $11. Dyskietki sformatowane przez SpartaDOS 2.x, 3.x i SpartaDOS X mają tu $20, ponieważ wszystkie one używają identycznego formatu dyskietek.
$26Sekwencyjny numer dyskietki. Liczba ta jest zwiększana przez SpartaDOS po każdym otwarciu pliku na dyskietce do zapisu. Jest on wykorzystywany do identyfikacji dyskietki.
$27Losowy numer dyskietki. Jest to losowa liczba tworzona, gdy dyskietka jest formatowana. Wraz z nazwą dyskietki i jej numerem sekwencyjnym jest wykorzystywany do identyfikacji dyskietki w celu określenia, czy dane zawarte w buforze dyskowym są poprawne.
$28Numer sektora, który jest pierwszym sektorem zajmowanym przez program odczytywany podczas odczytu wstępnego. Zwykle jest to plik "DOS". Wartość ta jest ustalana przez program XINIT.COM ze SpartaDOS Construction Set i przez polecenie BOOT.

Mapa bitowa.

Mapa bitowa jest stosowana do określenia przypisania każdego sektora dyskietki. Każdy bit w każdym bajcie mapy bitowej pokazuje, czy odpowiadający mu sektor jest zajęty, więc każdy bajt zawiera informacje o stanie ośmiu sektorów. Bit 7 reprezentuje pierwszy sektor każdej grupy, a bit 0 ósmy sektor grupy. Bajt 0 pierwszego sektora mapy bitowej reprezentuje sektory od 0 do 7 (pomimo, że sektor 0 nie istnieje), bajt 1 reprezentuje sektory od 8 do 15 itd. Jeśli bit reprezentujący sektor jest USTAWIONY (1), to sektor nie jest wykorzystany. Jeżeli bit jest SKASOWANY (0), to sektor jest zajęty (przypisany do pliku). Jeżeli potrzeba więcej niż jeden sektor mapy bitowej, to mapa zajmuje kolejno następujące sektory.

Mapa sektorów.

Mapa sektorów jest wykazem wszystkich sektorów zajętych przez plik. Pierwsze dwa wpisy są numerami następnego i poprzedniego sektora mapy sektorów pliku. Reszta sektora zawiera listę numerów sektorów z danymi pliku lub katalogu. Są one opisane poniżej według położenia w sektorze:

OffsetOpis
$00Numer następnego sektora zawierającego mapę sektorów pliku lub katalogu (2 bajty). Znajduje się zero, jeżeli jest to ostatni sektor mapy.
$02Numer poprzedniego sektora zawierającego mapę sektorów, pliku lub katalogu (2 bajty). Znajduje się tu zero, jeżeli jest to pierwszy sektor mapy.
$04Numery sektorów zawierających dane pliku lub katalogu w poprawnej kolejności. Wszystkie numery sektorów są dwubajtowe. Jeżeli numer sektora jest zerem, to ta część pliku nie ma przypisanego sektora. Pliki takie są opisane razem z instrukcją POINT w rozdziale "Programowanie ze SpartaDOS X".

Struktura katalogu.

Katalog jest specjalnym plikiem, który zawiera informację o grupie plików i podkatalogów. Każdy wpis katalogu ma długość 23 bajtów i zawiera nazwę pliku, czas i datę, długość, numer pierwszego sektora mapy i status wpisu. Pierwszy wpis jest inny niż pozostałe, gdyż znajdują się w nim informacje o samym katalogu. Poniżej podane są informacje zawarte w pierwszym wpisie (licząc od jego początku):

OffsetOpis
$00Numer pierwszego sektora mapy sektorów katalogu nadrzędnego (2 bajty). Zero wskazuje, że jest to główny katalog dyskietki (MAIN).
$02Długość katalogu w bajtach (3 bajty). Jest to wielkość pliku katalogu, a nie liczba wpisów.
$05Nazwa katalogu (8 bajtów). Puste miejsca są wypełnione spacjami.

Gdy katalog jest otwarty w trybie bezpośrednim (jak każdy inny plik), to jego plik jest odczytywany od drugiego wpisu (tzn. od pierwszego wpisu pliku lub podkatalogu). Aby odczytać pierwszy wpis, należy instrukcją POINT wskazać początek pliku po jego otwarciu.

Pozostałe wpisy katalogu są takie same. Mają one długość 23 bajtów i zawierają następujące informacje (licząc od początku wpisu):

OffsetOpis
$00Bajt statusu. Bity tego bajtu, jeśli są USTAWIONE (1), określają status wpisu katalogu następująco:
  • B0 - wpis jest zabezpieczony
  • B1 - wpis jest ukryty
  • B2 - wpis jest archiwalny
  • B3 - wpis jest w użyciu
  • B4 - wpis jest skasowany
  • B5 - wpis jest podkatalogiem
  • B7 - wpis jest otwarty do zapisu
UWAGI: Bity 1 i 2 nie są rozpoznawalne przez wcześniejsze wersje SpartaDOS. Bity 3 i 4 mają zawsze przeciwne stany. Bit 5 nie powinien być zmieniany! Bit 6 nie jest używany i nie może być, gdyż jest kasowany przy wykonywaniu innych operacji. Bajt statusu równy 0 oznacza koniec katalogu.
$01Numer pierwszego sektora mapy sektorów podkatalogu lub pliku (2 bajty)
$03Długość pliku w bajtach (3 bajty)
$06Nazwa pliku lub podkatalogu (8 bajtów). Puste miejsca są wypełniane spacjami.
$0ERozszerzenie nazwy pliku lub podkatalogu (3 bajty). Puste miejsca są wypełniane spacjami.
$11Data utworzenia pliku lub katalogu w formacie DD/MM/YY (3 bajty).
$14Czas utworzenia pliku lub katalogu w formacie HH/MM/SS w systemie 24 godzinnym (3 bajty).

Zobacz też

Personal tools