home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / anwend / bigdos / dateisys.txt < prev    next >
Text File  |  1996-08-09  |  11KB  |  237 lines

  1.         Dies und das zu den Dateisystemen ISO 9293, GEMDOS und MS-DOS
  2.  
  3.  
  4. Copyright ╜ 1995-07-02/1996-08-09 by Rainer Seitel
  5.  
  6. Diese Datei darf mit Quellenangabe ganz oder teilweise zitiert werden.
  7.  
  8.  
  9. Bootsektor
  10. ----------
  11.  
  12. Aufbau eines Bootsektors nach Atari, MS-DOS und ISO 9293:
  13.   $00-$02  00-02        M68000- oder I8086-Sprungbefehl
  14.                         MS-DOS will ab Laufwerk C: hier $EB $3C $90!
  15.   $03-$0A  03-10        Name des Initialisierungsprogrammes
  16.                         Erlaubte Zeichen: » !"%&'()*+,-./0..9:;<=>?A..Z_«
  17.   $08-$0A  08-10        TOS erwartet hier eine Seriennummer zur
  18.                         Diskwechselerkennung! Ab TOS 2 wird auch die
  19.                         von MS-DOS geschriebene Seriennummer beachtet.
  20.   $0B-$0C  11-12        Sektorlänge
  21.   $0D      13           Sektoren je Cluster
  22.   $0E-$0F  14-15        Anzahl reservierter Sektoren einschlie₧lich Bootsektor
  23.   $10      16           Anzahl der FATs (nach ISO immer 2)
  24.   $11-$12  17-18        Einträge im Wurzelverzeichnis
  25.   $13-$14  19-20        Gesamtzahl der Sektoren oder 0 bei mehr als 65535
  26.   $15      21           Datenträger-Kennzeichen, Media-Byte
  27.   $16-$17  22-23        Sektoren je FAT
  28.   $18-$19  24-25        Sektoren je Spur
  29.   $1A-$1B  26-27        Anzahl der Seiten
  30.   $1C-$1D  28-29        Anzahl versteckter Sektoren vor dem Bootsektor
  31. Ab MS-DOS 4.0 gibt es den erweiterten BPB:
  32.   $1C-$1F  28-31        Anzahl versteckter Sektoren vor dem Bootsektor
  33.   $20-$23  32-35        Gesamtzahl der Sektoren wenn mehr als 65535
  34.   $24      36           physikalische Laufwerksnummer für MS-DOS
  35.   $25      37           für MS-DOS reserviert
  36.   $26      38           $29 kennzeichnet den erweiterten BPB
  37.   $27-$2A  39-42        Seriennummer, Zeitpunkt der Initialisierung
  38.   $2B-$35  43-53        Diskname wie im Wurzelverzeichnis
  39.   $36-$3D  54-61        Dateisystem: »FAT12   «, »FAT16   «
  40.   $3E-$FD  62-253       Boot-Programm
  41.   $FE-$FF  254-255      Atari: Ausgleich für Prüfsumme $1234 wenn bootfähig
  42.                         MS-DOS: $55 $AA wenn bootfähig
  43.                         Mac: mu₧ bei Disketten $55 $AA sein, das ist ein Fehler!
  44.  
  45.  
  46. /* Media-Byte und Format-Parameter für MS-DOS, Atari und DIN EN 29293 =
  47.    ISO 9293:1987. Nach ISO bedeutet das Media-Byte $FD Werte aus der Tabelle
  48.    benutzen und $F9 Werte aus dem Bootsektor lesen. Wenn 40-Spur-Disketten von
  49.    der Tabelle abweichen, dann ist das Media-Byte also $F9.
  50.    "ISO Typ ..." nach DIN EN 29983 = ISO/IEC 9983:1989.
  51.  
  52. Media-Byte   Diskette  Grö₧e       Formatierung        Initialisierung
  53. MS Atar ISO  ISO Typ   in mm (in)  CYL NSIDES SPT BPS  RES  SPF  SPR  SPC  Clust
  54. $F0 $F0 $F9   303       90 (3,5 )   80    2   36  512    1    9   15    2  2863
  55. $F0     $F9   302       90 (3,5 )   80    2   18  512    1    9   14    1  2847
  56.     $F0       302       90 (3,5 )   80    2   18  512    1    6   14    2  1426
  57. $F8 $F8      Festplatte
  58. $F9     $F9   301       90 (3,5 )   80    2    9  512    1    3    7    2   713
  59.     $F9       301       90 (3,5 )   80    2    9  512    1    5    7    2   711
  60.     $F9      (301)      90 (3,5 )   80    1    9  512    1    5    7    2   351
  61.         $F9   203      130 (5,25)   80    2    9  512    1    3   11    2   711
  62. $F9     $F9   204      130 (5,25)   80    2   15  512    1    7   14    1  2371
  63. $FC $FC      (202)     130 (5,25)   40    1    9  512    1    2    4    1   351
  64. $FD $FD $FD   202      130 (5,25)   40    2    9  512    1    2    7    2   354
  65. $FE          (202)     130 (5,25)   40    1    8  512    1    1    4    1   313
  66. $FF          (202)     130 (5,25)   40    2    8  512    1    1    7    2   315
  67.  */
  68.  
  69.  
  70. FATs
  71. ----
  72.  
  73. Die Einträge 0 und 1 enhalten das Media-Byte und $FF.
  74. Die Werte in den Einträgen 2 bis Clusterzahl + 1 bedeuten:
  75. $0000                        freier Cluster
  76. $0001                        nicht möglich
  77. $0002 bis (Clusterzahl + 1)  nächster Cluster
  78. (Clusterzahl + 2) bis $FFEF  reserviert
  79. $FFF0 bis $FFF6              verboten!
  80. $FFF7                        defekter Cluster
  81. $FFF8 bis $FFFF              Dateiende
  82.  
  83.  
  84. Beschränkungen auf TOS-kompatiblen Rechnern
  85. -------------------------------------------
  86.  
  87. DL_SECSIZ     $4000   $4000   $4000   $8000?  $8000   $8000   $8000
  88. DL_MINFAT         2       2       1       1       1       2
  89. DL_MAXFAT         2       2       2       2       2       2       2
  90. DL_MINSPC         1       1       1       1       1       1       1
  91. DL_MAXSPC         2      32      32      64      64      64
  92. DL_CLUSTS     $7FFE   $7FFE   $7FFE   $7FFE   $FFEE   $7FFD
  93. DL_MAXSEC     $7FFF   $FFFF   $FFFF   $FFFF $FFFFFF   $FFFF   $FFFF
  94. DL_DRIVES        16      16      16      16      32      16      26
  95. DL_CLSIZB     $4000   $4000   $4000  $10000?  $8000   $8000
  96. DL_RDLEN       1008    1008    1008    1008?   2032       ?
  97. DL_FSIZ         128     256     256     256     256     128     256
  98. DL_FATREC         ?       ?       ?       ?     512       ?
  99. DL_CLUSTS12    $7FE    $FEE    $FEE    $FEE    $FEE    $FEE    $FEE
  100. DL_CLUSTS32       0       0       0       0       0       0       0
  101. DL_BFLAGS         1       1       3       3       3       1
  102. DL_FILESYS   '_DOS'  '_DOS'  '_DOS'  '_DOS'  'BDOS'  'MAGX'  'MAGX'
  103. DL_VERSION                                 19950401       2       3
  104. Sversion()     0.13    0.15    0.20    0.30    0.20
  105. Ab TOS         1.00    1.04    2.06    4.04
  106.  
  107. Die Tabelle ist noch nicht vollständig. Über Ergänzungen freue ich mich.
  108.  
  109. Ab GEMDOS 0.15 (TOS 1.04) sind Partitionen mit mehr als 32767 Sektoren bzw. 
  110. 32766 Cluster möglich. Wegen eines vorzeichenbehafteten Vergleichs in Ataris 
  111. GEMDOS < 0.30 ist es ratsam, einen bestimmten Cluster als defekt zu markieren:
  112. Bei  1 Sektor   pro Cluster den Cluster $7FFF = 32767.
  113. Bei  2 Sektoren pro Cluster den Cluster $3FFF = 16383.
  114. Bei  4 Sektoren pro Cluster den Cluster $1FFF =  8191.
  115. Bei  8 Sektoren pro Cluster den Cluster  $7FF =  4095.
  116. Bei 16 Sektoren pro Cluster den Cluster  $3FF =  2047.
  117. Bei 32 Sektoren pro Cluster den Cluster  $1FF =  1023.
  118. Bei 64 Sektoren pro Cluster den Cluster   $7F =   511.
  119.  
  120.  
  121. Getbpb() (BIOS 7)
  122. -----------------
  123.  
  124. Die Elemente »recsiz«, »clsizb« und »numcl« des BPB sind vorzeichenlose 
  125. 16-Bit-Werte! »clsizb« nicht benutzen, sondern das 32-Bit-Ergebnis von
  126. »recsiz * clsiz«.
  127.  
  128.  
  129. Dcntl() von Big-DOS
  130. -------------------
  131.  
  132. #define FUTIME    (('F' << 8) | 3)  /* Zeit des Verzeichnisses setzen */
  133. /* Die Bezeichnungen XH_DL_... sind die der DOS-Limits aus xhdi.h (0 bis 7). */
  134. #define DL_SECSIZ ('D' << 8 | XH_DL_SECSIZ)  /* max. bpb->recsiz */
  135.     /* in Big-DOS z. Z.: 32768 = 16$8000 */
  136. #define DL_MINFAT ('D' << 8 | XH_DL_MINFAT)  /* min. Anzahl FATs */
  137.     /* in Big-DOS z. Z.: 1 */
  138. #define DL_MAXFAT ('D' << 8 | XH_DL_MAXFAT)  /* max. Anzahl FATs */
  139.     /* in Big-DOS z. Z.: 2 */
  140. #define DL_MINSPC ('D' << 8 | XH_DL_MINSPC)  /* min. bpb->clsiz */
  141.     /* in Big-DOS z. Z.: 1 */
  142. #define DL_MAXSPC ('D' << 8 | XH_DL_MAXSPC)  /* max. bpb->clsiz */
  143.     /* in Big-DOS z. Z.: 64 */
  144. #define DL_CLUSTS ('D' << 8 | XH_DL_CLUSTS)  /* max. bpb->numcl 16-Bit-FAT */
  145.     /* in Big-DOS z. Z.: 65518 = 16$FFEE */
  146. #define DL_MAXSEC ('D' << 8 | XH_DL_MAXSEC)  /* max. Anzahl Sektoren */
  147.     /* in Big-DOS z. Z.: 16$FFFFFF */
  148. #define DL_DRIVES ('D' << 8 | XH_DL_DRIVES)  /* max. Anzahl Laufwerke */
  149.     /* in Big-DOS z. Z.: 32 */
  150. #define DL_CLSIZB ('D' << 8 | 8)  /* max. bpb->clsizb */
  151.     /* in Big-DOS z. Z.: 32768 = 16$8000 */
  152. #define DL_RDLEN  ('D' << 8 | 9)  /* max. (bpb->rdlen * bpb->recsiz / 32) */
  153.     /* in Big-DOS z. Z.: 2032 */
  154. #define DL_FSIZ   ('D' << 8 | 10)  /* max. bpb->fsiz */
  155.     /* in Big-DOS z. Z.: 256 */
  156. #define DL_FATREC ('D' << 8 | 11)  /* max. bpb->fatrec */
  157.     /* in Big-DOS z. Z.: 512 */
  158. #define DL_CLUSTS12 ('D' << 8 | 12)  /* max. bpb->numcl 12-Bit-FAT */
  159.     /* in Big-DOS z. Z.: 4078 = 16$FEE */
  160. #define DL_CLUSTS32 ('D' << 8 | 13)  /* max. bpb->numcl 32-Bit-FAT */
  161.     /* in Big-DOS z. Z.: 0 */
  162. #define DL_BFLAGS ('D' << 8 | 14)  /* unterstützte Bits in bpb->bflags */
  163.     /* in Big-DOS z. Z.: 2$11 */
  164. #define DL_FILESYS ('D' << 8 | 15)  /* (XBRA-)Kennung des Dateisystems */
  165.     /* in Big-DOS: 'BDOS' */
  166. #define DL_VERSION ('D' << 8 | 16)  /* Version des Dateisystems */
  167.     /* in Big-DOS z. Z.: 19950401 */
  168. #define DL_CHAR ('D' << 8 | 17)  /* Zeiger auf String mit erlaubten Zeichen */
  169.     /* Erlaubte Namen auf GEMDOS: */
  170.     /* »!\"#$%&'()+,-0..9;<=>@A..Z[]^_`{|}~ÇÄÅÉÆÖÜ¢£¥Ñªº¿¬½¼¡«»ßµ±÷°·²« */
  171.     /* Erlaubte Namen auf ISO 9293: */
  172.     /* »0..9A..Z_« */
  173.     /* Erlaubte Namen auf MS-DOS: */
  174.     /* »!#$%&'()-0..9@A..Z^_`{}~ÇÄÅÉÆÖÜ¢£¥Ñªº¿¬½¼¡«»ßµ±÷°·²« */
  175.     /* Erlaubte Namen auf GEMDOS und Kleinbuchstaben: */
  176.     /* »!\"#$%&'()+,-0..9;<=>@A..Z[]^_`a..z{|}~ÇÄÅÉÆÖÜ¢£¥Ñªº¿¬½¼¡«»ßµ±÷°·²« */
  177. #define DL_SETCHAR ('D' << 8 | 18)  /* Erlaubte Namen setzen oder abfragen */
  178.     /* arg = -1: Erlaubte Namen abfragen */
  179.     /* arg = 0: Erlaubte Namen auf GEMDOS setzen */
  180.     /* arg = 1: Erlaubte Namen auf ISO 9293 (oder 9660) d-Zeichen setzen */
  181.     /* arg = 2: Erlaubte Namen auf MS-DOS setzen */
  182.     /* arg = 3: Erlaubte Namen auf GEMDOS und Kleinbuchstaben setzen */
  183.     /* arg = 4: Erlaubte Namen auf VFAT setzen, reserviert */
  184.  
  185.  
  186. Dcntl(KER_DOSLIMITS, ...) aus MagiC 3
  187. -------------------------------------
  188.  
  189. #define KER_DOSLIMITS 0x101  /* Kernel: Limits für FAT-Dateisysteme */
  190.  
  191. Big-DOS kennt diese Funktion auch.
  192.  
  193. Mögliche Probleme (auch bei MagiC!):
  194. ∙ MetaDOS greift bei Dcntl() _immer_ auf den Pfad zu! Daher mu₧ auf jeden Fall 
  195.   ein gültiger Zeiger auf einen Pfad übergeben werden!
  196. ∙ Da das Minix-Dateisystem schon länger eine Unterfunktion mit der gleichen 
  197.   Nummer kennt, mu₧ dies ein Pfad sein, bei dem das Minix-Dateisystem 
  198.   garantiert nicht angesprochen wird. Das ist der Kernel-Pfad "U:\". 
  199.   (Minix-Pfade beginnen mit "#:\" oder "U:\#\", dabei ist # eine 
  200.   Laufwerkskennung ungleich "U".)
  201. ∙ Wenn MiNT aktiv ist, dann ist es möglich, da₧ Dcntl() eine andere 
  202.   Fehlermeldung als EINVFN zurückgibt. Daher nicht auf ungleich EINVFN testen!
  203.  
  204.     MX_DOSLIMITS *p_DOS_limits;
  205.  
  206.     p_DOS_limits = (MX_DOSLIMITS *)Dcntl(KER_DOSLIMITS, "U:\", 0L);
  207.         if ((ULONG)p_DOS_limits < 0xFFFFFF00UL) {
  208.             /* Zeiger ist gültig */
  209.             ...
  210.         }
  211.  
  212.         clr.l   -(SP)
  213.         pea     Kernelpfad
  214.         move.w  #$101
  215.         move.w  #$130
  216.         trap    #1
  217.         lea     12(SP),SP
  218.         ; Vorzeichenlos grö₧er als (unsigned long)(-256L) kann keine
  219.         ; gültige Adresse sein, sondern ist eine Fehlermeldung.
  220.         cmp.l   #$FFFFFF00,D0
  221.         bhs     kein_KER_DOSLIMITS
  222.         ...
  223. kein_KER_DOSLIMITS:
  224.  
  225. Kernelpfad: dc.b "U:\", 0
  226.  
  227.  
  228. Autor, Adresse
  229. --------------
  230.  
  231. MausNet:  Rainer Seitel @ KA
  232. Internet: Rainer_Seitel@ka.maus.de (bevorzugt, keine Mail > 16 KByte pro Tag!)
  233.           Rainer.Seitel@stud.uni-karlsruhe.de
  234. http://www.uni-karlsruhe.de/~Rainer.Seitel/bigdos.html
  235. http://wwwrzstud.rz.uni-karlsruhe.de/~ujo7/bigdos.html (für Links diese nehmen)
  236. (http://129.13.95.1/~ujo7/bigdos.html)
  237.