Format diskety pre MB-01 a MB-02

   Ked som si s pomocou svojho priatela MDV postavil svoju prvu disketovu jednotku MB-01, bolo treba este vyriesit dve dolezite veci. Jednou z nich bolo ako ma vyzerat format diskety.
   Hned prve co ma napadlo bolo vyuzit nejaky format z uz existujucich disketovych jednotiek. Lenze zistil som jednu velmi neprijemnu vec - ziadny existujuci format nedokazal priamo adresovat viac ako cca 1 MB dat, co je sice pre DD diskety dostatocne, ale pre HD je to malo. A tak som chtiac-nechtiac musel vymysliet nejaky vlastny format, pretoze s pseudorieseniami typu rozdelit disketu na dve logicke diskety a podobne som sa nehodlal uspokojit. Okrem toho tu boli aj ine dovody preco som musel siahnut po niecom novom. Napriklad ziadny existujuci format neumoznoval zaznamenat k suboru datum a cas. Uvazoval som aj o MS-DOS formate, ale ten zase nebol vhodny z inych pricin - neumoznoval uchovavat o suboroch vsetky potrebne informacie, ktore ZX Spektrum pouziva (napriklad zaciatocna adresa, startovaci riadok, dlzka cisteho basicu...)
   A tak som si vymyslel vlastny format pre disketu. Pre istotu som ho dimenzoval pre pouzitie az do velkosti diskiet 4 MB, keby nahodou sa casom rozsirili disketove mechaniky s hustotou zaznamu ED (extended density). Okrem vsetkych tych klasickych veci ktore umoznovali ostatne formaty, tento format umoznoval uchovavat o suboroch datum a cas, na disku mohli existovat aj bezhlavickove subory. Dlzku suboru som pre istotu dimenzoval az do 4 GB.
   Jednou z nevyhod vecsiny inych formatov bolo ze mali adresar pevnej dlzky a viac suborov ako umoznoval adresar sa na disk jednoducho nedalo umiestnit. Tuto nevyhodu som odstranil tym, ze som do formatu zaviedol dynamicku dlzku adresara - adresar bol tak dlhy ako to bolo potrebne a tym padom neexistovalo obmedzenie maximalneho poctu suborov. A este navyse som umoznil na disku vytvorit viac adresarov, ktore mohli byt zorganizovane do (nie len!) stromovej struktuty.
   Casto sa stava, ze disketa, ktoru sa pokusate naformatovat ma nultu stopu vadnu. Pritom nemusi byt vadna cela nulta stopa, obycajne je vadnu len jeden alebo dva sektory. Co vam oznamia bezne disketove jednotky ? Alebo co vam oznami klasicky MS-DOS ? Jednoducho taka disketa nejde naformatovat a vobec ju nemozete pouzit. Avsak toto neplati v pripade disketovej jednotky MB-01. Format pre ne som vymyslel tak, aby skoro vsetky potrebne systemove struktury (FAT, adresare...), ktore sa bezne umiestnuju na pevne miesto na nultej stope, mohli byt prakticky kdekolvek na diskete. Na nultej stope a nultej strane musi byt umiestneny len boot a zalohovaci sektor. Ale v ramci nultej stopy mozu byt umiestnene kdekolvek, takze staci, ak na nultej stope a strane su len dva dobre sektory, a uz je dana disketa na MB-01 v pohode pouzitelna.
   Jednou z velmi dolezitych vlastnosti, ktoru som pri navrhu formatu chcel dosiahnut, bola bezpecnost dat ulozenych na diskete. Vsetky dolezite datove struktuty su chranene kontrolnymi suctami, samotna FATka je dokonca pre istotu zdvojena. Dalsou vecou, ktorej cielom je zvysit bezpecnost dat, je prave vyssie spominany zalohovaci sektor. Tento sektor ma jednoduchy ucel - ak treba na disk zapisat boot sektor alebo nejaky sektor adresara, zapise sa najprv do zalohovacieho sektora a az potom na miesto kam patri. Je to tak navrhnute tak preto, aby sa v pripade akehokolvek padu systemu (reset, vypnutie napajania) v ktoromkolvek okamihu zapisu na disk neznicili data, ktore na disku su uz zapisane.

Format diskety MB-01

S tymto formatom pracuju operacne systemy BS DOS verzie 52 az 105.
                 5.25/DS DD  3.5/5.25/DS DD  3.5/DS HD
                 ----------  --------------  ---------
  Pocet stop ......... 40 ......... 80 .......... 80
  Sektorov na stopu ... 5 .......... 5 .......... 11
  Dlzka sektora .... 1024 ....... 1024 ........ 1024 bajtov
  Kapacita disku .... 400 ........ 800 ........ 1760 kB
  Cista for. kap. ... 395 ........ 793 ........ 1759 kB
  Dlzka fatky ......... 1 .......... 2 ........... 4 sektory 

Boot sektor obsahuje zakladne informacie o diskete a v pripade, ze je disketa systemova, tak aj systemovy zavadzac. Hned za boot sektorom nasleduje zalohovaci sektor. Struktura udajov v boot sektore je nasledujuca:

  0-1 ...... skok na systemovy loader
  2 ........ vyssi bajt adresy systemoveho loadera (#80)
  3 ........ identifikacia verzie formatu MB-01 (#01)
  4-13 ..... meno disku
  14 ....... pocet stop na disku
  15 ....... pocet sektorov na stopu
  16-19 .... datum a cas formatovania
  20-23 .... adresa a dlzka systemu (pre systemovy zavadzac)
  24 ....... logicke cislo prveho sektora zoznamu adresarov
  25 ....... logicke cislo prveho sektora zoznamu suborov
  26 ....... dlzka FATky v sektoroch
  27-30 .... logicke cislo prveho sektora prvej fatky
  31-34 .... logicke cislo prveho sektora druhej fatky
  35-36 .... neobsadene
  37-44 .... identifikacia disku (interne meno pre system)
  45-1023 .. systemovy loader alebo volne miesto 

FAT alebo File Alocation Table obsahuje informacie o priradeni sektorov na disku jednotlivym suborom alebo systemovym strukturam. Sklada sa zo 16-bitovych poloziek, ktorych bity maju nasledujuci vyznam:

   15 ...... 0 = platny sektor
             1 = zmazany sector
   14 ...... vyznam bitov 0-11
   12-13 ... 0=normalny sektor (used or free)
             1=systemovy sektor (boot, FAT, adresare)
             2=chybny sektor (chyba pri formatovani)
             3=neplatna polozka (koniec FATky)
   0-11 .... bit 14=0 ... dalsi sektor v retazi sektorov
             bit 14=1 ... pocet bajtov v poslednom sektore suboru

 Ak ma polozka vsetky bity nulove, potom predstavuje volny sektor. 

Zoznam adresarov obsahuje linearne za sebou zoradene vsetky adresare, ktore na disku existuju. Kazdy adresar obsahuje cislo svojho nadadresara, do ktoreho patri. Tymto je definovana struktura logickeho usporadania adresarov na disku. Kazdy adresar je definovany v 16 bajtovej polozke s takouto strukturou:

   0 ....... poradove cislo nadadresara
   1-4 ..... datum a cas vytvorenia adresara
   5 ....... 0=neplatna polozka, inak platna polozka
   6-15 .... meno adresara 

Zoznam suborov alebo klasicky adresar obsahuje linearne za sebou zoradene vsetky subory, ktore na disku existuju. Kazdy subor obsahuje cislo svojho adresara, do ktoreho patri. Kazdy subor je definovany v 32 bajtovej polozke s takouto strukturou:

   0 ....... poradove cislo adresara
   1-4 ..... datum a cas suboru
   5 ....... identifikacny bajt           \
   6-15 .... meno suboru                   \
   16-17 ... dlzka suboru (mod 65536)       } as MG head
   18-19 ... adresa alebo start            /
   20-21 ... dlzka basicu                 /
   22-23 ... adresa tela
   24-26 ... dlzka tela
   27 ...... flagbajt tela
   28 ...... atributy suboru
   29 ...... neobsadene
   30-31 ... logicke cislo prveho sektora suboru (alebo 0) 

Vyznam bitov v identifikacnom bajte:

   7 ....... 0=platna polozka, 1=zmazana polozka
   6 ....... 1=subor ma telo
   5 ....... 1=subor ma hlavicku
   4 ....... neobsadene
   3-0 ..... typ suboru

  Typ suboru: 0 ...... program (basic)
              1 ...... number array
              2 ...... character array
              3 ...... bytes
              4 ...... headerless
              5 ...... 48k snapshot
              6 ...... 128k snapshot
              7-15 ... neobsadene 

Format diskety MB-02

Po roku pouzivania formatu MB-01 sa nazbieralo zopar skusenosti, kde co ako vylepsit, aby sa s disketou pracovalo pohodlnejsie, bezpecnejsie a hlavne rychlejsie. Tieto skusenosti som premietol do navrhu formatu pre MB-02, s ktorym pracuju operacne systemy BS DOS verzie 199 az 308. Hlavny rozdiel oproti MB-01 spociva v tom, ze uz nie su vsetky subory zoradene v jednom zozname suborov, ale kazdy adresar ma svoj vlastny zoznam suborov. Meno adresara sa uz nenachadza v polozkach jednotlivych adresarov, ale v nultej polozke zoznamu suborov. Dalsie drobne zmeny postihli boot sektor a strukturu poloziek vo FATke a v zozname suborov.

Boot sektor aj tu obsahuje zakladne informacie o diskete a v pripade, ze je disketa systemova, tak aj systemovy zavadzac. Nachadza sa vzdy na stope 0 strane 0 a ma cislo sektora 1. Logicke cislo boot sektora je vzdy 0. Hned za boot sektorom nasleduje zalohovaci sektor (stopa 0, strana 0, sektor 2, logicke cislo 1). Struktura udajov v boot sektore je nasledujuca:

  #00-#01 ... Skok na systemovy zavadzac
  #02 ....... nepouzite, obycajne je tu #80
  #03 ....... tu musi byt #02 (znacka MB-02)
  #04-#05 ... pocet fyzickych stop na disku (vecsinou 80 alebo 82)
  #06-#07 ... pocet sektorov na stope (pocitaju sa od 1)
  #08-#09 ... pocet povrchov na disku (standartne 2)
  #0A-#0B ... pocet sektorov na cluster (standartne 1)
  #0C-#0D ... logicke cislo sektora DIRS
  #0E-#0F ... pocet sektorov FAT (1 az 4)
  #10-#11 ... dlzka FAT (#400 * pocet sektorov FAT)
  #12-#13 ... logicke cislo prveho sektora prvej FAT
  #14-#15 ... logicke cislo prveho sektora druhej FAT
  #16 ....... kontrolny sucet (XOR) systemovej identifikacie diskety
  #17 ....... neobsadene
  #18-#19 ... verzia formatovaca (Pre F02-V30 je to hodnota 30)
  #1A ....... logicke cislo  druheho sektora  prvej FAT
  #1B ....... logicke cislo  druheho sektora druhej FAT
  #1C ....... logicke cislo tretieho sektora  prvej FAT
  #1D ....... logicke cislo tretieho sektora druhej FAT
  #1E ....... logicke cislo stvrteho sektora  prvej FAT
  #1F ....... logicke cislo stvrteho sektora druhej FAT
  #20 ....... tu musi byt #00 (znacka MB-02)
  #21-#24 ... datum a cas formatovania
  #25 ....... tu musi byt #00 (znacka MB-02)
  #26-#2F ... meno diskety
  #30-#3F ... rozsirenie mena diskety
  #40-#5F ... systemova identifikacia diskety 

Podla bajtov oznacnych ako znacka rozpoznava BS-DOS ze sa jedna o disketu zo systemu MB-02. V boote su zapisane cisla prvych sektorov FAT. Dalsie sektory FAT sa daju najst priamo podla FAT - lebo obidve FAT su ulozene ako subory - riadne sekvencie sektorov.

DIRS sektor obsahuje zoznam adresarov na diskete. Jeho logicke cislo je zaznacene v BOOTe na offsete #0C-#0D Tento sektor obsahuje 256 stvorbajtovych poloziek, kde kazda jedna polozka znamena jeden adresar. Vyznam bajtov v tejto polozke:

  #00 ....... identifikacia polozky
              #80 = platna polozka a adresar existuje
              ine = adresar neexistuje a neplatna polozka
  #01 ....... xor mena adresara (koli rychlejsiemu hladaniu)
  #02,#03 ... logicke cislo prveho sektora adresara (len bity 0-13) 

Adresarove sektory obsahuju zoznam suborov v danom adresari. Logicke cislo prveho sektora kazdeho adresara je ulozene v bajtoch #02-#03 poloziek v sektore DIRS. Tieto sektory obsahuju 32 bajtove polozky. Vyznam bajtov v polozke:

  #00 ....... identifikacia polozky. Vyznam bitov:
                  7 ....... 1=platna polozka, 0=zmazana polozka alebo volne miesto
                  6 ....... 1=specialny subor, 0=normalny subor
                  5 ....... 1=subor ma telo
                  4 ....... 1=subor ma hlavicku
                3-0 ....... rezerva
  #01-#04 ... datum a cas vytvorenia suboru
  #05-#15 ... klasicka magnetofonova hlavicka
  #16-#17 ... adresa tela
  #18-#1B ... dlzka tela (#18=najnizsi, #1B=najvyssi bajt)
  #1C ....... flagbajt tela
  #1D ....... atributy suboru
  #1E-#1F ... logicke cislo prveho sektora tela (iba bity 0-13)  

Tato 32-bajtova struktura sa odborne nazyva "adresarova polozka". S tymito polozkami pracuju sluzby GETSUB a OWSUB.

Nulta adresarova polozka ma specialny vyznam - je vzdy platna a obsahuje taketo bajty:

  #00 ....... identifikator (vecsinou #80)
  #01-#04 ... datum a cas vytvorenia adresara
  #05 ....... cislo nad-adresara (do ktoreho patri tento adresar)
  #06-#0f ... meno adresara
  #10-#1f ... rozsirenie mena adresara 

File alocation table alebo skratene FAT obsahuje 16-bitove polozky. kazda specifikuje jeden sektor na diskete. Vyznam jednotlivych bitov v polozke:

 Bit 15: 0 ... neobsadeny, volny sektor pripraveny na pouzitie
         1 ... obsadeny, vyuzity sektor [obsahuje udaje alebo je chybny]
     14: 0 ... posledny sektor suboru
         1 ... priebezny sektor, nie posledny
   0-13: [bit14=0] pocet bajtov v sektore do konca suboru
         [bit14=1] logicke cislo nasledujuceho sektora v subore 

Pozor, ak bity 8-15 obsahuju same jednotky, potom vyznam hodnoty v bitoch 0-7 je takyto:

   #00 ... specialny sektor na sluzobne ucely [boot, zalohovaci sektor]
   #F? ... nepouzitelny sektor:
       #FC - chybny sektor [CRC error]
       #FD - chybny sektor [Rec. not found]
       #FE - neexistujuci sektor [druha strana jednostranneho disku]
       #FF - neexistujuci sektor [za fyzickym okrajom diskety] 

Datum a cas formatovania disku, vytvorenia adresara a suboru su vzdy 4-bajtove hodnoty s kodovanim presne ako MSDOS:

  bit  0-4  ... sekunda delena dvomi (0-29)
  bit  5-10 ... minuta (0-59)
  bit 11-15 ... hodina (0-23)
  bit 16-20 ... den    (1-31)
  bit 21-24 ... mesiac (1-12)
  bit 25-31 ... rok zmenseny o 1980 (0-127)

Podrobnejsi popis niektorych struktur a ako mozno nacitat MB-02 disketu na inych diskovych systemoch ako MB-02 sa mozete docitat v samostatnej sekcii.

Nazad / back