컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴-
                     Prostota a primitivnost sama      /
                                 DoSfS                /
                   컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴

      Zdrav�m  v퉑chny  'v�h賑ky'  i  n�hodn� �ten壽e. Tak copak se dneska
      dozv�me?  Asi si pov�me n�co o souborov�m syst�mu DOSu - jak vlastn�
      p�esn�  funguje  to  ukl�d�n�  soubor�,  a  kde a jak je ulo푘n� FAT
      tabulka,   jak  jsou  ulo푘n�  adres壽e,  atakd�le  atakd�le  neboli
      zkr�cen� atd. A jestli budu m�t n�ladu tak zkus�m sbastlit i n�jakou
      utilitku kter� to p�edvede v praxi. Tak se na to vrhnem!
                  휼st prvn� - jak jsem rozp�lil harddisk
      Ne,  nezkou퉑l  jsem  ho  nijak  �ezat  ani  jinak mechanicky p�lit.
      Jednodu퉑  jsem  editoval  partition  table podle m�ho gusta, i kdy�
      jsem  mohl  tak� b�t lenoch a ud�lat to pomoc� n�jak� utilitky - pr�
      se  jmenuje  fdisk  nebo  tak n�jak a d�l� p�esn� tohle - a existuje
      snad na ka푗�m opera�n�m syst�mu co jsem vid�l.
      No jo, ale co to vlastn� je? U� jsem �ekl, 푘 je to jak�si tabulka -
      ve  Win�e퉡in�  se  tomu 曝k� tabulka odd�l� (co� je kupodivu celkem
      pou푝teln�  v�raz, narozd�l od mnoha jin�ch :-). A v t� tabulce jsou
      popsan�  diskov�  odd�ly,  kter� se chovaj� v�t퉕nou jako samostatn�
      logick�  disky (ov퉑m pokud to zrovna windows 퉝atn� nepochop� - pak
      m�sto  kop�rov�n� souboru na jednu partition ho zkop�ruje na za矮tek
      jin�,  co�  je  celkem  fat�ln�  :)  - moje vlastn� zku퉑nost ):. Ta
      tabulka  mus�  b�t  na  ka푗�m  HDD  a  mus�  v n� b�t alespo� jedna
      partition  (diskov�  odd�l,  logick�  disk). Cel� tabulka je v �pln�
      prvn�m  sektoru  harddisku  a m� max. 4 polo푟y (ono jich m夏e b�t i
      v�ce,  viz  d�le).  Ti  kdo  u�  o  harddisku  n�co  v�d�, ur�it� si
      uv�domili,  푘  je  ve  stejn�m  sektoru  jako zavad麟 - holt se tam
      musej� n�jak vej�t... :) No, u� toho nech�m a rad퉕 v�m rovnou uk瀟u
      jej� form�t:

旼컴컴컴컴컴컴컴컴컴컫컴컴쩡컴쩡컴쩡컴컴쩡컴컴컴컴컴컴�
� Za矮tek partition  � AI � H � S � CYL � offset 1BEh �
� Konec partition    � SI � H � S � CYL � offset 1C2h �
� Partition          � Relativni zacatek� offset 1C6h �
� Velikost partition �   Pocet sektoru  � offset 1CAh �
읕컴컴컴컴컴컴컴컴컴컨컴컴컴컴컴컴컴컴컴좔컴컴컴컴컴컴�
�Zacatky popisovacu partition:�
� 1 � offset 1BEh �  velikost �
� 2 � offset 1CEh �   jedne   �
� 3 � offset 1DEh � partition �
� 4 � offset 1EEh �   je 10h  �
읕컴좔컴컴컴컴컴컴좔컴컴컴컴컴�

                 Nakres I - partition table
      Hmm...  z  toho  asi  moc  moud曝  nebudete  -  tak푘  to bude cht�t
      vysv�tlen�.
AI = indik�tor aktivnosti oblasti - to znamen� ze kter� oblasti se zav�d�
     syst�m.
     00h : oblast je neaktivn�
     80h : oblast  je  aktivn�  -  tento  flag  m夏e  m�t  nastavena  max.
           jedna oblast.
SI = indik�tor syst�mu - ur�uje OS, kter� danou oblast vlastn�.
     00h : nikoho to nenapadlo ur�it aneb nespecifikovan�
     01h : DOS 12-bit FAT
     04h : DOS 16-bit FAT
     05h : DOSEXT  -  tak toto je velice d�le푝t� typ. Slou얩 k vytv壽en�
     	   tzv.  roz蔣en�ch  oblast�  (extended partitions).  Ty maj�  ten
	   v�znam,  푘 v nich m夏ou b�t zapouzd�en� dal뱁 partition - tzn.
	   v  prvn�m sektoru  takov� partition  je dal뱁  partition table,
	   obsahuj�c�  z�znam  o jedn� oblasti  v t�to  roz뱁�en�  oblasti
	   (st�le s n�mi? ;)  a p曝padn� odkaz na dal뱁 roz뱁�enou oblast,
	   atakd�le a� do nekone�na... - pozor! nezapome�te 푘 zapouzd�en�
           partitions m夏ou b�t  jenom  v mez�ch  jejich mate�sk� oblasti!
	   N�zev je m�rn� matouc�,  pon�vad�  takov�to roz뱁�en� partition
	   lze pou얩t i t�eba na Linux, a snad na ka푗� OS...
     06h : BIGDOS  -  netu뱁m rozd�l mezi 06h a 04h -  pora�te mi n�kdo...
     	   (v�ce ne� 512Mb?)
     82h : Linux SWAP
     83h : Linux Native
     DBh : CP/M :o)
     samoz�ejm� 푘 t�ch typ� je daleko v�ce - tohle byl jenom �zk� v�b�r.
CYL= Doln�ch 8 bit� 妖sla cylindru. Horn� dva byty jsou ukraden� z vr퉗u S
S  = Doln�ch 퉑st byt� obsahuje 妖slo sektoru
H  = 妖slo hlavy
      Tak푘  H+S+CYL  ur�uje  jednozna�n�  konec  oblasti  (ale je tu mal�
      probl�m  s  妖sly  cylindr�  nad  1023  -  ten  probl�m  jsem  je퉡�
      nerozlu퉡il   -   jakmile   to  n�kdo  rozk�duje,  dejte  mi  pros�m
      v�d�t...  Jedin� z�chrana aby  to pochopily  i Windoze 95,  ne jenom
      Linux,  je  nechat to  na  jejich  fdisku  nebo rucne  snizit  pocet
      cylindru na 512...  ;)  i  jej�  za矮tek.  Pole  AI, H, S a CYL jsou
      je퉡� k tomu organizovan�  tak,  푘  sta妖  pouze  dv� instrukce MOV
      aby se vhodn� nastavily  AX  a  CX p�ed zavol�n�m INT 13h, kter�m se
      na�te  aktu�ln�  zav�d�c�  z�znam   (pozn.:  modern�  zavad麟e  jako
      LILO,  BOOT  MANAGER  apod.  pracuj�  tro퉗u  jinak,  v  podstat�  v
      sou�asnosti ji� nem� AI tak nebety�n� v�znam).  Jo,  a  ka푗� oblast
      za妖n� hlavou 0 a sektorem 1. Ov퉑m푘 vyj�mka  potvrzuje  pravidlo -
      oblast na za矮tku disku,  kter� za妖n� sektorem  2,  pon�vad� sektor
      jedna  zab�r�  hlavn�  zavad麟  a partition  table.  Nejsem  si  te�
      jist�  proto푘  to  u�  jsem  n�jakou  dobu nezkoumal, ale takt榕 by
      to m�lo b�t s DOSEXT...
      Relativn�  za矮tek  je  vpodstat�  po�et  sektor�, kter� p�edch�zej�
      danou  oblast.  Je  velik�  4  byty,  tzn.  DWORD (unsigned long pro
      C�ka�e,  pascalisti  maj�  sm�lu,  proto푘  tpascal m� jenom longint
      kter�  je znam�nkov�). Tak푘 u disku se 4mi hlavami, 17ti sektory na
      stop�  a  na퉑  oblast za妖n� na cylindru 3, sektoru 1 a hlavi�ce 0,
      tak   jej�   rel.   za矮tek   m�   hodnotu  204  (3*4*17)  na  t�ech
      p�edch�zej�c�ch  cylindrech.  A  po�et  sektor�  kter�  dan�  oblast
      vlastn�  je  v  poli  po�et  sektor�.  To  je  op�t 4-bytov� hodnota
      (DWORD). Prost� jej� velikost.
      Ale  je퉡� nesm�me zapomenout na kontroln� signaturu 55AAh, kter� je
      na  ofsetu  1FEh - ta potvrzuje platnost tabulky. Pozor! Tenhle znak
      mus� m�t ka푗� zavad麟 OS!
      Tak - to bysme snad m�li partition tabulku. Te� p�ich�z� na �adu ona
      MSDOS�  뱁lenost  kter�  se  曝k�  Boot  Record.  Je to vlastn� pole
      spousty  podivn�ch  �daj�,  jejich� chybnost zp�sobuje pom�rn� velk�
      probl�my a tehdy  nen� radno  zapisovati na HDD :(  Ale nu�, vrhn�me
      se  na  to! To�, zase by to cht�lo n�jakou tabulku, 푘? Tedy z�ete a
      radujte se!

Offset  �  Velikost  �  Popis
컴컴컴컴탠컴컴컴컴컴컵컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
  +03h  �    8xDB    �  OEM ID
  +0Bh  �  DW (L M)  �  Pocet bytu na sektor (vetsinou 512)
  +0Dh  �     DB     �  Pocet sektoru na cluster (treba 16)
  +0Eh  �     DB     �  Rezervovane sektory na zacatku disku
  +0Fh  �     DB     �  ???
  +10h  �     DB     �  Pocet kopii FAT tabulky (vetsinou 2)
  +11h  �     DW     �  Pocet polozek v korenovem adresari
  +13h  �     DW     �  Pocet sektoru na disku (pokud je
        �            �  vyplnen velky pocet sektoru tak
        �            �  je toto nepouzito a musi to byt 0!)
  +15h  �     DB     �  Media descriptor byte - typ media
  +16h  �  DW (L M)  �  Pocet sektoru na FAT tabulku (190)
  +18h  �  DW (L M)  �  Pocet sektoru na stopu
  +1Ah  �  DW (L M)  �  "Stran" disku (hlav)
  +1Ch  �     DD     �  Specialnich "skrytych" sektoru (??)
  +20h  �     DD     �  Velky pocet sektoru na disku
  +24h  �     DB     �  Fyzicke cislo disku
  +25h  �     DB     �  ???
  +26h  �     DB     �  Extended Boot Record Signature
  +27h  �     DD     �  Seriove cislo svazku
  +2Bh  �   11xDB    �  Volume Label (vsak vy vite o co de)
  +36h  �    8xDB    �  Filesystem ID (FAT16/FAT32)

                        BootRecord
 Tabulka hodnot pro ty m�n� znal�... (bude se v�m hodit i jinde)

 � Asm � Pascal  � C
 쳐컴컴탠컴컴컴컴탠컴컴컴컴컴컴컴컴컴�
 � DD  � longint � unsigned long
 � DW  � word    � unsigned int
 � DB  � byte    � char (unsigned :)
 Pozn.: pascalsk� longint je znam�nkov�, tak bacha na to!!!
 LSB (L) = Less Significancy (kdo v� jak se to p紫e :) Byte
         = M�n� v�znamn� byt (ni씁� bity)
 MSB (M) = More Significancy Byte
         = V�ce v�znamn� byt (vy뭐� bity)
      Hrmpf...  To  je  sice hezk�, asi si 曝k�te, ale cht�lo by to n�jak�
      popis. Budi�, m�te ho m�t.
      Na  za矮tku  je  tzv.  OEM ID. To obsahuje n�co jako jm�no 'v�robce'
      partition  -  nap�  na  m�m  DRDOSu  je  to "IBM 3.1", u win95 je to
      "MSWIN4.1" apod. Nevid�l jsem, 푘 by na tom n�kdy n�co z�le푘lo...
      Potom  tu m�me po�et byt� na sektor. To je douf�m jasn� - prost� jak
      je   velik�   jeden   sektor.   Po�et   sektor�  na  cluster  u�  je
      zaj�mav�j뱁.  Ur�uje,  kolik  sektor� bude v jednom clusteru, p�itom
      cluster  je  minim�ln�  jednotka, ve kter� se fyzicky ud�v� velikost
      soubor.  Tedy pokud m�me soubor velk� t�eba jenom jeden znak, p�esto
      zab�r�  (bytu  na  sektor)*(sektoru  na cluster)! Viz tak� popis FAT
      tabulky.   Rezervovan�  sektory  na  za矮tku  disku?  V�t퉕nou  b�v�
      jedni�ka,  z�ejm�  (asi, mo푣�...) po�et sektor�, kter� se vynechaj�
      p�i  妖slov�n�  a  jedni�ka  je  a�  za矮tek partition + rezervovan�
      sektory,  nebo je to po�et sektor� po kter�ch za�ne FAT. S�m jsem to
      nikdy nepot�eboval...
      Na  0Fh je nula a asi by tomu pat�ila popiska "rezervovan�" :) Po�et
      kopi�  FAT tabulky je v푗y 2 a DOSu i r�zn�m diskov�m utilit�m byste
      asi  p�kn� zamotali hlavu p�i pokusu to n�jak m�nit ;) Po�et polo푘k
      v  ko�enov�m  (root,  ?:\  )  adres壽i.  흡m  v�ce polo푘k, t�m v�ce
      soubor� v n�m m夏ete m�t, ale t�m v�ce m�sta tak� zabere. Doporu�uji
      zmen퉛vat  jenom  pro mimo脯dn� po脯dkumilovn� typy a zvy퉛vat pouze
      pro  ty  co  neuzn�vaj�  mo푣ost  adres壽�  v  DOSu  :)  Ale  i  tak
      nezaru�uju,  푘 s t�m DOS um� korektn� pracovat - ka푗op�dn� to chce
      p�i   zvy퉛v�n�   samoz�ejm�  tak�  zv�t퉕t  odpov�daj�c�m  zp�sobem
      velikost  adres壽e  ve  FATce  (viz  daleko  daleko  d�le...). Po�et
      sektor�  na  disku  no  comment, v�jimku m�te p曝mo v tabulce. Media
      descriptor type ur�uje typ m�dia, pro harddisk je to F8h.
      Pocet sektoru na FAT tabulku je dulezity - cislo je vypocitano podle
      velikosti disku - abysme to plne pochopili, musim dopredu prozradit,
      ze  jedna polozka v FAT ma 16 bitu (2 byte) a oznacuje jeden cluster
      na  disku.  Takze  kdyz jeden sektor ma 512 bytu tak se do nej vejde
      256  clusteru.  A  pokud  je  jich na disku treba 48640, tak logicky
      48640/256 = 190. Takze pocet sektoru/FAT je 190 (na __JEDNU__ FAT!).
      Pocet  sektoru  na stopu? Snad taky neni co dodat - ja jsem to nikdy
      nevyuzil,  ale  mozna  ze  nekomu  hodit  -  pouziva se to k vypoctu
      fyzickeho cislo sektoru (o tom zas nekdy jindy...)
      Pocet  hlav  ('stran'  :)  disku  -  take  pouzito k vypocitani fyz.
      sektoru.  Pocet  skrytych  sektoru?  Nejaka  tajemna informace DOSu,
      pokud  nekdo  prijdete  na to,  co to vlastne je,  napiste mi (Resp.
      k cemu  to slouzi,  na zacatku disku  je spousta prazdnych  sektoru,
      jejichz cislo  se podezrele shoduje s  udajem zde...  :-\ ). A velky
      pocet  sektoru  na  disku? Pouziva se kdyz nestaci ten maly. Fyzicke
      cislo  disku je... jeho fyzicke cislo :o) - blize viz INT 13h... 25h
      byva nula a ExtBoot Signature podle me soukrome teorie potvrzuje, ze
      nasledujici  informace jsou nastavene. To znamena ze volume label je
      i  (viz  adresare)  tady,  mate  tu  serial  number  (muzete  vyuzit
      treba  pro  ochranu  kopirovani  nejakeho  programu) a filesystem id
      (snad  vyuzivane jenom Windows9x aby poznal jestli tam ma FAT16 nebo
      FAT32.
      Uff... U� abych pomalu zalehl, tak푘 na zbytek se t移te p曝st�! �ek�
      v�s popis adres壽� a toho hlavn�ho, fyzicky nejjednodu뭐�ho ale kdy�
      o tom nev�te nic tak nejnepochopiteln�j뱁ho subjektu - FATky.
      A pokud jste n�kdo zklam�n, 푘 si je퉡� st�le nem夏ete vytvo�it sv�j
      vlastn� adres壽, pro netrp�livce tu m�m jednu malou strukturu:

C:                 쿖oment壽e:        쿛ascal:
컴컴컴컴컴컴컴컴컴컵컴컴컴컴컴컴컴컴컴탠컴컴컴컴컴컴컴컴컴컴컴컴컴�
filename[7]        �                  � filename:array[0..7]of char
ext[2]             �                  � ext:array[0..2]of char
char attr          �                  � attr:byte
char reserved[8]   �                  � reserved:array[0..8]of char
unsigned int time  �         LSB MSB  � time:word
unsigned int date  �         LSB MSB  � date:word
unsigned int abno  냠. Alok. Bloku L M� abno:word
unsigned long size 쿗SB(L M) MSB(L M) � size:longint {neznamenkovy!}

      Dlouh�  b�d�n�  a  nakonec jenom apatick� �ek�n� na pokra�ov�n� v퉑m
      netrp�livc�m!
                                                   Pac a pusu, Pasky.
           e-mail: pasky@pruvodce.cz (t�eba ;)
           homepage: http://fly.to/pasky
           (mj. (srde�n� zdrav�m, Martine :) tam bude pokra�ov�n�
            �l�nku hned jak ho sep紫u)
      (definitivn�  dokon�eno,  zform�tov�no  a  p�ipraveno  k  odesl�n� v
      hv�zdn� datum 10012000/2059)

-->