DOSa wy(z)wód konieczny cz. 1
- Pajero / MadTeam
Jak sam tytuł artka wskazuje zajmiemy się najciekawszym wy(z)wodem pod słońcem. Problemem pewnego chłopa o swojskim imieniu Dos. A chorował on na wstydliwą choróbkę zwaną skądinąd "bez standardzie".
Jeśli nie załapałeś dotychczas o czym pisze poniżej, to już tłumaczę Ci łopatologicznie. Miałeś problem z odczytem czy zapisem dyskietki? Twój ATR nie chodzi pod MyDos?em? Dyskietkę w medium czyta tylko Twój dos? Otóż nie ma standardu, mimo obietnic autorów przeróżnych dosów. To dlaczego to wszystko jeszcze "chodzi"? Odpowiedź banalna: programiści atari są najlepsi czyli ofkoz the best!
Tyle dłuuuugiego wstępu. Mam nadzieje, że poniższe dane przydadzą się do stworzenia lepszego dosu (mam na myśli dosu dla "twardzieli" ? HD).
Opiszę jedynie Dos 2.0, Dos 2.5, Dos II, X-Dos, oraz My-Dos i tylko w single, medium i double. No bo tyle dobrze poznałem pisząc plugina dla Windows Commandera.
"Czyj ci on": jak rozpoznać dyskietkę = który dos formatował
Pierwszy sektor i pierwszy bajt prawie na 100% określa pochodzenia nośnika (wartości w hex):
00 Dos 2.... dla single i medium 00 Dos II dla double C4 Dos II X X-Dos (to odmiana Dos II) M MyDos S Sparta Dos lub BW-Dos
Jednak nie zawadzi sprawdzić w pierwszym sektorze czy nie ma napisu:
Error: No DOS Sparta BW-DOS BW- Dos
Później sprawdzamy także sektor 360 ($168) czyli VTOC i jego pierwszy bajt:
02 Dos 2... 03 Dos II lub X-Dos (także MyDos dla medium)
"Kato(logo)wać się chciało": jak czytać wpis katalogu
Główny katalog mieści się zawsze w sektorze 361 ($169) i zajmuje zawsze osiem sektorów nawet dla double. W każdym sektorze mieści się 8 wpisów po 16 bajtów. Przy double dla kompatybilności druga połówka sektora 256 bajtowego jest pusta! Osiem sektorów po osiem wpisów daje 64 pozycje na:
0 status wpisu 1-2 ilość sektorów zajętych przez plik 3-4 numer pierwszego sektora zajętego przez plik 5-12 osiem znaków nazwy pliku 13-15 trzy znaki rozszerzenia nazwy pliku
Wyjaśnienia wymaga jeno status wpisu (ustawiony bit oznacza)
Bity Dos 2... Dos II MyDos 1 nie-dostępny[1] nie-zamknięty[2] nie-zamknięty[2] 2 plik plik plik 4 - - plik 8 - - - 16 - - katalog 32 zabezpieczony zabezpieczony zabezpieczony 64 plik plik plik 128 skasowany skasowany skasowany
objaśnienia:
[1] nie-dostępny dla Dos 2.0 (zajmuje sektory 721-1010)
[2] nie-zamknięty przy zapisie (plik uszkodzony)
"Wiela wolnych sektorów" dowiecie się z VTOC
VTOC który zaczyna się na sektorze 360 ($168) a kończy na (!!!) 359 ($167) lub 1024 ($400).
To najmniej ciekawy fragment struktur dosów. Problem oczywiście jest z medium. Single i double zawsze zajmuje tylko sektor 360 ($168)!
Dla wszystkich dosów pierwsze 10 bajtów sektora 360 oznacza:
0 status VTOC 1-2 maksymalna liczba wolnych sektorów 3-4 ilość obecnie wolnych sektorów (dla medium Dos 2.5 sektorów 1-719) 5 zabezpieczenie przed zapisem dysku (?) 6-9 wolne
Dalsze bajty to bitowa rozspiska wolnych sektorów, bit skasowany oznacza zajętość. Dla 720 sektorów przy single i double wystarczy 90 bajtów. Dla medium potrzeba 130 bajtów i tu zaczynają się ?schody?. Dos 2.5 wykorzystuje sektor 1024 ($400) dla kontynuacji VTOC, a Dos II i MyDos sektor 359 ($167).
Sektor 1024 ($400) dla Dos 2.5 to kopia sektora 360 ($168) od bajtu 16 do 127 z tym, że bajt 123 i 124 ($7A-7B) zawiera ilość wolnych sektorów o numerze 720 ? 1010.
Sektor 359 ($167) dla Dos II i My-Dos ma tylko kontynuacje (to nie kopia) rozpiski wolnych sektorów 944-1009 dla Dos II i 944-1027 dla MyDos.
Należy pamiętać, że sektor 0 nie istnieje (we VTOC bajt 10 bit 1 zawsze skasowany), a w medium sektor 720 dla Dos 2.5 jest nie wykorzystywany (we VTOC bajt 101 bit 8 zawsze skasowany)!
Jak idzie zauważyć każdy dos ma inną maksymalną ilość wolnych sektorów. Jednak istnieje wartość graniczna liczby wszystkich sektorów. Dla single i double jest to 720, a medium 1040.
Dos 2 Dos II MyDos single 707 707 708 medium 1010 1009 1027 double - 707 708
Poniżej schematyczny wypis VTOC po sformatowaniu dyskietki dla każdego dosu.
Single Dos 2...
0 1 2 3 4 5 6 7 8 9 A B C D E F 00 02 C3 02 C3 02 00 00 00 00 00 0F FF FF FF FF FF 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 30 FF FF FF FF FF FF FF 00 7F FF FF FF FF FF FF FF standardowo zajęte 9 sektorów 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF na VTOC i katalog 50 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 60 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Single lub Double DosII
0 1 2 3 4 5 6 7 8 9 A B C D E F 00 03 C3 02 C3 02 00 00 00 00 00 0F FF FF FF FF FF 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 30 FF FF FF FF FF FF FF 00 7F FF FF FF FF FF FF FF 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 50 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 60 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Single lub Double MyDos
0 1 2 3 4 5 6 7 8 9 A B C D E F 00 02 C4 02 C4 02 00 00 00 00 00 0F FF FF FF FF FF 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 30 FF FF FF FF FF FF FF 00 7F FF FF FF FF FF FF FF 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 50 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 60 FF FF FF FF 80 00 00 00 00 00 00 00 00 00 00 00 sektor 720 używany 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Medium Dos 2...
0 1 2 3 4 5 6 7 8 9 A B C D E F / 00 02 F2 03 C3 02 00 00 00 00 00 0F FF FF FF FF FF 360 | 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 \ $168 | 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 10 | | 30 FF FF FF FF FF FF FF 00 7F FF FF FF FF FF FF FF 20 | 1024 | 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 30 | $400 | 50 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 40 | | 60 FF FF FF FF 7F FF FF FF FF FF FF FF FF FF FF FF 50 | sektor 720 \ 70 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 60 | nieużywany FF FF FF FF FF FF FF FF FF FF 2F 01 00 00 00 00 70 /
Medium DosII Sektor 360 $168
0 1 2 3 4 5 6 7 8 9 A B C D E F 00 03 F1 03 F1 03 00 00 00 00 00 0F FF FF FF FF FF 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 30 FF FF FF FF FF FF fe 00 7F FF FF FF FF FF FF FF zajęte 10 sektorów 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF sektor 359 to druga część 50 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF VTOC 60 FF FF FF FF 7f FF FF FF FF FF FF FF FF FF FF FF sektor 720 nie używany 70 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Medium DosII Sektor 359 $167
00 FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00
Medium MyDos Sektor 360 $168
0 1 2 3 4 5 6 7 8 9 A B C D E F 00 03 03 04 03 04 00 00 00 00 00 0F FF FF FF FF FF 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 30 FF FF FF FF FF FF fe 00 7F FF FF FF FF FF FF FF sektor 359 to druga część 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF VTOC 50 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 60 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF sektor 720 używany 70 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Medium MyDos Sektor 359 $167
00 FF FF FF FF FF FF FF FF FF FF FF FF 80 00 00 00 ostatni sektor 1040
"Linki poprowadzą cię" do końca pliku
Ostatnie trzy bajty sektora zawierają LINK prowadzący do następnego sektora na dysku. Oznacza to, że w sektorze może być 125 lub 253b. Zależnie od dosu bajty te mają (!) podobne znaczenie.
bajt: Dos 2.. Dos II i MyDos 125-126 [1] nr następnego sektora 253-254 - jw. 127 [2] ilość bajtów w sektorze, może być wartość: 1-125 255 - ilość bajtów w sektorze, może być wartość: 1-253
objaśnienia:
[1] ---125---||---126---- 7654321076543210 [#pliku][#sektora] #pliku: nr pliku zgodny z pozycją w katalogu (0-63) #sektora: nr następnego sektora [2] 76543210 S[-ilość-] S: status zakończenia pliku = 1 oznacza koniec -ilość- ilość bajtów w sektorze, może być wartość: 125 lub 1-124
Aby oznaczyć koniec pliku wstawia się zero jako numer sektora, dodatkowo Dos 2 ustawia bit statusu "S".
"Koniec nastÄ…pi niebawem" artka ofkoz...
Na zakończenie należy napisać, że istnieją dwa inne formaty MyDos?a: 360 i 720kB. Inne wielkości dyskietek powstają także za pośrednictwem tego dosu, ale są mało powszechne.
Wspomnę, że starsze wersje Mydos?a dla dysków większych od double wykorzystują cały sektor 256b na katalog.