DOSa wy(z)wód konieczny cz. 2
- Pajero / MadTeam
Druga część artka o dosach będzie czysto teoretyczna. Chciałbym przybliżyć założenia na temat dosa obsługującego dyski twarde poprzez EIDE. Aby nie komplikować życia koderom założenia powinny ułatwiać a nie zaciemniać kod.
Ze względu na brak oprogramowania do HD nowy dos powinien jak najbliżej nawiązywać do standardu Dos II. To pozwoli napisać proste emulatory. Ponadto, należy być w założeniach dalekosiężnym wybiegając w przyszłość, aby nie zamknąć rozwoju nowego dosu!
Założenia:
Dyski EIDE posiadają bufor minimum 512b. To wyklucza zastosowanie bezpośrednie standardu Dos II. Dlatego też możemy zrezygnować z adresowania 2-bajtowym na rzecz 4-bajtowego.
Sektory:
$0001-$0003 boot $0004-$0167 wolne. $0168 VTOC główny $0169-$0170 katalog główny $0171-$0FFF wolne $1000- VTOC HD dalej wolne....
BOOT sektory są znane nam wszystkim, pierwszy sektor będzie miał w pierwszy bajcie literę "H".
Dysk twardy powinien dać się boot?ować oraz musimy mieć możliwość jednoznacznego rozpoznania HD.
VTOC główny pozostaje dla kompatybilności z Dos II (wykorzystywane 128 z 512!)
0 1 2 3 4 5 6 7 8 9 A B C D E F 00 03 00 00 00 00 00 10 00 01 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 00 00 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 00bajt: 0 oznaczenie dosu = 3 1-2 zawsze = 0 3-4 zawsze = 0 5-7 numer pierwszego sektora dla VTOC HD 8-9 ilość sektorów przeznaczonych na VTOC HD
Pozostawienie VTOC w sektorze $168 pozwala obsługiwać HD przez programy nie przystosowane do tego celu. Wszystkie sektory są dla nich zajęte - co uniemożliwia zapis, jednak pozwoli wyświetlić katalog!
Katalog główny oraz podkatalogi wykorzystują dwa bloki 128 bajtowe z 512b sektora.
bajty: 000-127 katalog A 128-255 puste 256-383 katalog B 384-511 puste
Katalogi posiadają 8 wpisów po 16b każdy. Katalog B jest uzupełnieniem katalogu A.
katalog A, bajty: 0 status 1 - plik uszkodzony 2 - plik 4 - wolny 8 - wolny 16 - katalog 32 - zabezpieczony 64 - plik 128 - skasowany 1-4 długość pliku określona w sektorach 5-15 name.ext pliku
katalog B, bajty: 0 status m.in. bajtów 5-15 = 64 zapis tylko daty dd:m:rr = 128 zapis tylko czasu gg:mm:ss = 192 zapis daty i czasu dd:m:rr gg:mm:ss = 1-63 w pierwszym sektorze pliku ile bajtów zajmuje długa nazwa pliku 1-4 numer pierwszego sektora pliku 5-6 dzień utworzenia pliku 7 miesiąc 8-9 rok 10-11 godzina 12-13 minuta 14-15 sekunda
Bajty 5-15 katalogu B zawierają datę i czas utworzenia pliku w formacie atascii, aby przyspieszyć wyświetlanie katalogu. Jednak, co do ich zastosowania nie jestem do końca pewny...
Uważam, że podział katalogu na dwie części, pierwszej zgodnej z Dos II i drugiej umożliwiającej obsługę HD ułatwi operacje Rename, Lock, Unlock, i wszelkich przeszukiwań nazwy pliku, czy też prostej komendy Dir.
VTOC HD zawiera dane nt. wolnych sektorów na twardzielu.
0 1 2 3 4 5 6 7 8 9 A B C D E F 000 48 00 00 20 00 00 00 1F FF F2 01 00 00 00 00 04 010 0F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF zajęte sektory 1-3 020 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 030 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF zajęte 9 sektorów 040 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 050 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 060 FF FF FF FF 7f FF FF FF FF FF FF FF FF FF FF FF sektor 720 nie używany 070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 080 FF itd 1F0 cd. FF FF FF bajt: 0 litera ?H? 1 wolne 2-5 maksymalna ilość wolnych sektorów 6-9 obecna ilość wolnych sektorów 10-11 ilość sektorów przeznaczonych na VTOC HD 12-15 pierwszy wolny sektor na HD 16-.... bitowy plan wolnych sektorów
Na następne tablice VTOC HD przeznaczone zostaną kolejne sektory dysku.
Ilość sektorów VTOC HD zależy od wielkości dysku twardego!!!!
Bajty 12-15 określają pierwszy sektor wolny przeznaczony do zapisu (na początku równy 4). Dzięki temu możemy uniknąć czasochłonnego przeszukiwania tabeli VTOC HD w celu odnalezienia wolnego sektora. Bajty te są oczywiście aktualizowane po zapisie. Licznik ten może być tylko zwiększany aż do przepełnienia (dzięki czemu skasowany plik nawet dawno temu można zawsze odzyskać), lub też aktualizowany w przypadku kasowania pliku.
LINKI sektorów. Link znajduje się w ostatnich 6 bajtach sektora 512b.
$1FA-1FB ilość bajtów w sektorze $1FC-1FF link do nastepnego sektora (gdy = 0 oznacza ostatni sektor)
Zastosowanie 6 bajtów na link ułatwi emulatorom przekład 512 bajtowe sektory na dwa 256b.
TO TYLE. Jak widzicie na podstawie Dos II można oprzeć prosty i skomplikowany zarazem system obsługi dysku twardego. Jeśli etapowo nastąpi rozwój Dos II poprzez obsługę 1MB, katalogów a potem HD można wywnioskować piękną przyszłość nowego dosu. Tylko kto się tego podejmie???