O DISKETOVÉ MECHANICE
Zdá se, že některé čtenáře zaujal článek o ochranách proti kopírování, který jsem psal do minulého čísla. Svědčí o tom hlavně to, že jsem obdržel několik dotazů vztahujících se k této tématice.
Jeden dotaz se týkal i fyzického způsobu ukládání dat na disketové mechanice na Atari - šlo o to, jaké "chyby" se dají na disku úmyslně vytvořit. Díky tomu jsem zjistil, že mnozí lidé vlastně ani netuší, jak jsou data na disku uložena.
Snad vám tedy následující krátký článek o struktuře diskety přijde vhod.
Počítače Atari (od ST výš) používají standartní 3,5" disketovou mechaniku. Aby se v ní dala použít disketa, je tuto vždy nutno nejprve naformátovat.
Formátování je vlastně příprava diskety na uložení informací. Tato příprava se může lišit na různých druzích počítačů - u nás není například možné číst diskety naformátované na Amize, ale na druhou stranu je možné číst IBM formát (tedy diskety od našich nekolegů PC-čkářů).
Co přesně je takové formátování: Disketa je rozdělena na jakési kroužky, zvané "stopy". Tyto stopy mohou být dále rozděleny na 9, 10, nebo 11 úseků, zvaných "sektory". Sektory mívají obyčejně kapacitu 512 bytes.
STRUKTURA STOPY:
mezera 1
mezera 2
synchronizace
ID AM (index adress mark - značka adresového rejstříku)
číslo stopy
číslo strany
číslo sektoru
velikost sektoru
ID CRC (index adress checksum - kontrolní součet adresového rejstříku)
mezera 3
synchronizace
DAM (data mark - značka datového pole)
data sektoru
DATA CRC (checksum of datafield - kontrolní součet datového pole)
mezera 4
mezera 2
synchronizace
ID AM
atd... tolikrát, kolik je sektorů ve stopě
mezera 5
Mezery slouží k oddělení polí jednotlivých informací ve stopě. Neobsahují použitelná data, ale dávají disketové mechanice určitý čas, aby identifikovala pozici čtecí hlavy ve stopě.
mezera 1 - tvz. "pre-track gap" umožňuje mechanice najet čtecí hlavou na začátek informací ve stopě. Její délka je pro standartní formát něco okolo 60 bytes, jež všechny mají hodnotu $4E.
mezera 2 - umožňuje najet čtecí hlavě na začátek informací v sektoru. Je dlouhá 12 bytes jejichž hodnota je 0.
Synchronizace je řadou tří bytes o hodnotě $F5, umožňující synchronizovat hlavu mechaniky na následující byte.
ID AM je jeden byte dlouhý a vždy má hodnotu $FE, označuje začátek adresového rejstříku pro ovladač.
Číslo stopy signalizuje mechanice, nad jakou stopou se nachází čtecí hlava. Je dlouhé jedno byte.
Číslo strany signalizuje, na které straně čtecí hlava pracuje. Může mít jednu ze dvou hodnot - 0 nebo 1. Je dlouhé jedno byte.
Číslo sektoru signalizuje, jaký sektor následuje po tomto adresovém rejstříku. Je dlouhé jedno byte. Sektor může mít číslo od 0 do 225 (tedy $0 až $FF).
Velikost sektoru je zakódována do jednoho byte. Může mít čtyři různé hodnoty (pro velikosti 128, 256, 512 nebo 1024 bytes).
ID CRC je dva byte dlouhé a umožňuje ovladači zkontrolovat, jestli jsou data z rejstříku načtena správně.
Mezera 3 odděluje adresový rejstřík od datového pole. Je rozdělena na dvě části:
22 bytes s hodnotou $4E
12 bytes s hodnotou $00
DAM označuje skutečný začátek sektoru. Standartně je jeho hodnota $FB pro normální DAM nebo $F8 pro smazaný DAM.
Data v sektoru mohou mít různou délku, v závislosti na definici délky v adresovém rejstříku.
Mezera 4 označuje konec sektoru. Obyčejně je dlouhá 40 bytes s hodnotou $4E.
Mezera 5 označuje konec stopy. Může mít rozdílnou velikost, od 30 do 700 bytes v závislosti na počtu a velikosti sektorů.
Takhle tedy vypadá struktura stopy na disku. Pokud byste někdy chtěli s touto strukturou nějak blíže pracovat, musíte si opatřit nějaký speciální krekerský monitor, protože tyto informace vám běžné diskdoctory neukážou - ty zobrazují většinou jen přímo obsah datového pole. Já používám Ultimate ripper od anglického Power computingu.
Část informací o struktuře disku pochází právě z manuálu k tomuto programu, část jsem vyčetl z několika TXT-ček od zahraničních krekerů.
JIRI