Formát diskety systému TR-DOS
Formát diskety (disku či jiného zařízení) je naprosto nezbytné znát při používání různých disk doktorů, nebo při psaní programů pro konverzi mezi systémy. Naštěstí formát diskety TRDOSu je velmi jednoduchý a pro všechny známé verze Betadisků (včetně ruských variant počítačů Pentagon a Scorpion) je stejný.
Základní vlastnosti
- nemá FAT, má pouze adresář s velmi jednoduchou strukturou
- má vždy sektory dlouhé 256 bytů, vždy má 16 sektorů na 1 stopě
- proměnnými parametry jsou počet stop (40 nebo 80) a počet stran diskety (1 nebo 2), z toho vyplývají 4 běžně používané formáty disket, kterým TRDOS rozumí, počty stop mohou být větší (42 a 83), nebo menší, ale obvykle se nepoužívají
- TRDOS nečísluje strany diskety, z toho vyplývají časté problémy při čtení disket na jiných systémech, protože diskové řadiče nejsou schopny ověřit, ze které strany se sektory čtou (obě se jim jeví jako strana 0) a ohlásí při čtení chybu, řešením je formátovat diskety pro TRDOS jinde a na Betadisku zapsat
strany | stopy | kapacita v sektorech | volné místo v sektorech |
---|---|---|---|
1 | 40 | 640 | 624 |
2 | 40 | 1280 | 1264 |
1 | 80 | 1280 | 1264 |
2 | 80 | 2560 | 2544 |
Z tabulky je vidět, že na každé disketě je stejný adresář, který zabírá 16 sektorů (tj. 1. stopu označenou číslem 0). Mimochodem, většina emulátorů implicitně používá kapacitu největší.
Rozložení sektorů na disketě
sektory | stopy | použití |
---|---|---|
0-7 | 0 | adresář, každý sektor obsahuje 16 hlaviček, každá hlavička je 16 bytů dlouhá |
8 | 0 | systémový sektor s informacema o disketě, viz. dále |
9-15 | 0 | pomocné sektory používané během ukládání snapshotů |
- | 1-80 | zbytek sektorů na disketě je vyhrazen souborům, resp. datové části souborů |
Struktura adresáře
V adresáři je celkem 128 položek, které mohou obsahovat jméno a parametry souboru. V každém z 8 sektorů adresáře je 16 položek 16 bytů dlouhých. Struktura jedné položky je v následující tabulce.
byte | popis významu |
---|---|
0-7 | Jméno souboru |
8 | Přípona B=basic, C=code (bytes), D=data (array), #=sequence pro kanálové operace |
9-10 | Startovní adresa bytesu (CODE), nebo délka BASICu |
11-12 | Délka bytesu (CODE), nebo délka BASIC bez proměnných |
13 | Počet sektorů, které zabírá na disketě tento soubor |
14 | První sektor na němž soubor začíná |
15 | První stopa na níž soubor začíná |
Struktura systémového sektoru
Kromě položek souborů musí být někde uloženy informace o počtu souborů, formátu diskety, jméno diskety a podobně. To vše je v sektoru devátém (číslo 8). Opět následuje tabulka.
byte | popis |
---|---|
0-224 | prázdné místo (možno využít třeba k identifikaci diskety programem, jednoduché ochraně proti kopírování a podobně) |
225 | číslo prvního volného sektoru na disketě |
226 | číslo stopy obsahující první volný sektor |
227 | 22=80tr, DS; 23=40trDS; 24=80tr, SS; 25=40tr, SS (DS=double sides, SS=single side) |
228 | počet souborů včetně smazaných (těch co mají jako 1. znak jména kód 1) |
229 a 230 | počet volných sektorů na disketě |
231 | 16 (TR-DOS identifikace, bez tohoto bytu bude TR-DOS hlásit DISK ERROR pro všechny diskové operace, krom čtení sektoru) |
232 a 233 | 0 - nevyužito |
234 až 242 | 0 (heslo ve starších verzích TR-DOSu 3.xx, 4.xx? - nepoužívá se) |
243 | 0 |
244 | počet smazaných souborů |
245 až 255 | jméno diskety (verze 5.03 a starší používaly jen 9 znaků) |
Při mazání souboru z diskety mohou nastat dvě situace. Buď je soubor na konci adresáře a za ním už jsou jen neobsazené položky, nebo na konci adresáře není. Když na konci je, tak je první znak jména souboru vynulován a dojde i k příslušným změnám v sektoru 8 (změní se byty 225, 226, 228, 229 a 230, byte 244 se nezmění), přičemž následující zapsaný soubor data právě smazaného přepíše. Pokud před takto smazaným souborem jsou jiné dříve smazané soubory s kódem 1 místo prvního znaku jména, budou všechny smazány jako by se nacházely na konci adresáře (v tom případě bude změněn i byte 244). Pokud mazaný soubor na konci nebyl, tak je první znak jména souboru nahrazen kódem 1 a v sektoru 8 se změní pouze počet smazaných souborů (tj. byte 244 a nic víc). Následně zapsaný soubor je uložen do prázdného místa za poslední soubor a sektory dříve obsazené smazaným souborem, který nebyl na konci adresáře, zůstávají netknuté, dokud není proveden příkaz MOVE.
Pro editaci diskety na ZX Spectru s Betadiskem doporučuju program B.D.E.. Pro formátování lze použít kromě příkazu TRDOSu i program Maxifor (příp. i jiné), ale taková disketa pak nemusí být čitelná všude, takže když použít, tak s rozvahou. Obojí najdete mezi programy ke stažení.
Použitá literatura: Mikrobáze z roku 1989 a k tomu vlastní zkušenosti s opravováním disket, které se mi podařilo poškodit většinou při programování.
Opravené chyby a změny
- 18.7.2006 - opraveno několik překlepů, chybných čísel bytů v textu pod tabulkou, upozornil Roman Bórik, postižený odstavec textu jsem díky tomu mírně doplnil.