]> granicus.if.org Git - file/commitdiff
- Format the floppy code nicely, document where it comes from, and what the
authorChristos Zoulas <christos@zoulas.com>
Mon, 17 Jun 2013 19:23:58 +0000 (19:23 +0000)
committerChristos Zoulas <christos@zoulas.com>
Mon, 17 Jun 2013 19:23:58 +0000 (19:23 +0000)
  binary strings mean
- Better FAT detection
- Add the ability to print DOS filenames.
Joerg Jenderek

magic/Magdir/filesystems

index b932a69a9a1552f373d8c6c886885f62851fc575..cb248c5895ed888116dd32cc37cd90cd322d1eff 100644 (file)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: filesystems,v 1.78 2013/05/09 01:21:51 christos Exp $
+# $File: filesystems,v 1.79 2013/05/14 12:55:42 christos Exp $
 # filesystems:  file(1) magic for different filesystems
 #
 0      name    partid  
 >>>>>495               string          RENF            \b, FAT (16 bit)
 # x86 bootloader end
 
+# by Joerg Jenderek at Apr 2013
+#      Print the DOS filenames from directory entry form with 8 right space padded bytes + 3 bytes for extension
+#      like IO.SYS. MSDOS.SYS , KERNEL.SYS , DRBIO.SYS
+0      name                    DOS-filename
+# space=0x20 (00100000b) means empty 
+>0                     ubyte&0xDF      >0              
+>>0                    ubyte           x               \b%c
+>>>1                   ubyte&0xDF      >0              
+>>>>1                  ubyte           x               \b%c
+>>>>>2                 ubyte&0xDF      >0              
+>>>>>>2                        ubyte           x               \b%c
+>>>>>>>3               ubyte&0xDF      >0              
+>>>>>>>>3              ubyte           x               \b%c
+>>>>>>>>>4             ubyte&0xDF      >0              
+>>>>>>>>>>4            ubyte           x               \b%c
+>>>>>>>>>>>5           ubyte&0xDF      >0              
+>>>>>>>>>>>>5          ubyte           x               \b%c
+>>>>>>>>>>>>>6         ubyte&0xDF      >0              
+>>>>>>>>>>>>>>6                ubyte           x               \b%c
+>>>>>>>>>>>>>>>7       ubyte&0xDF      >0              
+>>>>>>>>>>>>>>>>7      ubyte           x               \b%c
+# DOS filename extension
+>>8                    ubyte&0xDF      >0              \b.
+>>>8                   ubyte           x               \b%c
+>>>>9                  ubyte&0xDF      >0              
+>>>>>9                 ubyte           x               \b%c
+>>>>>>10               ubyte&0xDF      >0              
+>>>>>>>10              ubyte           x               \b%c
+#      Print 2 following DOS filenames from directory entry form
+#      like IO.SYS+MSDOS.SYS or ibmbio.com+ibmdos.com
+0      name                    2xDOS-filename
+# display 1 space
+>0                     ubyte           x               \b 
+>0                     use             DOS-filename
+>11                    ubyte           x               \b+
+>11                    use             DOS-filename
+
 # added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
 # and http://en.wikipedia.org/wiki/File_Allocation_Table#FS_Information_Sector
 >0             string          RRaA            
 ############################################################################
 # Minix-ST kernel floppy
 0x800  belong          0x46fc2700      Atari-ST Minix kernel image
->19    string          \240\5\371\5\0\011\0\2\0        \b, 720k floppy
->19    string          \320\2\370\5\0\011\0\1\0        \b, 360k floppy
+# http://en.wikipedia.org/wiki/BIOS_parameter_block
+# floppies with valid BPB and any instruction at beginning
+>19    string          \240\005\371\005\0\011\0\2\0    \b, 720k floppy
+>19    string          \320\002\370\005\0\011\0\1\0    \b, 360k floppy
 
 ############################################################################
 # Hmmm, is this a better way of detecting _standard_ floppy images ?
-19     string          \320\2\360\3\0\011\0\1\0        DOS floppy 360k
+19     string          \320\002\360\003\0\011\0\1\0    DOS floppy 360k
 >0x1FE leshort         0xAA55          \b, x86 hard disk boot sector
-19     string          \240\5\371\3\0\011\0\2\0        DOS floppy 720k
+19     string          \240\005\371\003\0\011\0\2\0    DOS floppy 720k
 >0x1FE leshort         0xAA55          \b, x86 hard disk boot sector
 19     string          \100\013\360\011\0\022\0\2\0    DOS floppy 1440k
 >0x1FE leshort         0xAA55          \b, x86 hard disk boot sector
 
-19     string          \240\5\371\5\0\011\0\2\0        DOS floppy 720k, IBM
+19     string          \240\005\371\005\0\011\0\2\0    DOS floppy 720k, IBM
 >0x1FE leshort         0xAA55          \b, x86 hard disk boot sector
-19     string          \100\013\371\5\0\011\0\2\0      DOS floppy 1440k, mkdosfs
+19     string          \100\013\371\005\0\011\0\2\0    DOS floppy 1440k, mkdosfs
 >0x1FE leshort         0xAA55          \b, x86 hard disk boot sector
 
-19     string          \320\2\370\5\0\011\0\1\0        Atari-ST floppy 360k
-19     string          \240\5\371\5\0\011\0\2\0        Atari-ST floppy 720k
+19     string          \320\002\370\005\0\011\0\1\0    Atari-ST floppy 360k
+19     string          \240\005\371\005\0\011\0\2\0    Atari-ST floppy 720k
+#                      |       |   |     |     |
+#                      |       |   |     |     heads
+#                      |       |   |     sectors/track
+#                      |       |   sectors/FAT
+#                      |       media descriptor
+#              BPB:    sectors
 
 #  Valid media descriptor bytes for MS-DOS:
 #
 #  11111000    Hard disk any format
 #
 
+# all FAT12 (strength=70) floppies with sectorsize 512 added by Joerg Jenderek at Jun 2013
+# http://en.wikipedia.org/wiki/File_Allocation_Table#Exceptions
+512            ubelong&0xE0ffff00      0xE0ffff00              
+# without valid Media descriptor in place of BPB, cases with are done at other places
+>21            ubyte                   <0xE5                   floppy with old FAT filesystem
+# but valid Media descriptor at begin of FAT
+#>>512         ubyte                   =0xed                   720k
+#>>512         ubyte                   =0xf0                   1440k
+#>>512         ubyte                   =0xf8                   720k
+#>>512         ubyte                   =0xf9                   1220k
+#>>512         ubyte                   =0xfa                   320k
+#>>512         ubyte                   =0xfb                   640k
+>>512          ubyte                   =0xfc                   180k
+# look like an an old DOS directory entry
+>>>0xA0E       ubequad                 0                       
+>>>>0xA00      ubequad                 !0                      
+!:mime application/x-ima
+>>512          ubyte                   =0xfd                   
+# look for 2nd FAT at different location to distinguish between 360k and 500k
+>>>0x600       ubelong&0xE0ffff00      0xE0ffff00              360k
+#>>>0x500      ubelong&0xE0ffff00      0xE0ffff00              500k
+>>>0xA0E       ubequad                 0                       
+!:mime application/x-ima
+>>512          ubyte                   =0xfe                   
+>>>0x400       ubelong&0xE0ffff00      0xE0ffff00              160k
+>>>>0x60E      ubequad                 0                       
+>>>>>0x600     ubequad                 !0                      
+!:mime application/x-ima
+#>>>0xC00      ubelong&0xE0ffff00      0xE0ffff00              1200k
+>>512          ubyte                   =0xff                   320k
+>>>0x60E       ubequad                 0                       
+>>>>0x600      ubequad                 !0                      
+!:mime application/x-ima
+>>512          ubyte                   x                       \b, Media descriptor 0x%x
+# without x86 jump instruction
+>>0            ulelong&0x804000E9      !0x000000E9             
+# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV       
+>>>0   ubequad                         0xfabce701b8c0078e      \b, MS-DOS 1.12 bootloader
+# IOSYS.COM+MSDOS.COM
+>>>>0xc4       use                     2xDOS-filename
+>>0            ulelong&0x804000E9      =0x000000E9     
+# only x86 short jump instruction found
+>>>0           ubyte                   =0xEB
+>>>>1          ubyte                   x                       \b, code offset 0x%x+2
+# http://thestarman.pcministry.com/DOS/ibm100/Boot.htm
+# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0             
+>>>>(1.b+2)    ubequad                 0xfa8cc88ed8ba0000      \b, PC-DOS 1.0 bootloader 
+# ibmbio.com+ibmdos.com
+>>>>>0x176     use                     DOS-filename
+>>>>>0x181     ubyte                   x                       \b+
+>>>>>0x182     use                     DOS-filename
+# http://thestarman.pcministry.com/DOS/ibm110/Boot.htm
+# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV                
+>>>>(1.b+2)    ubequad                 0xfa8cc88ed833d28e      \b, PC-DOS 1.1 bootloader 
+# ibmbio.com+ibmdos.com
+>>>>>0x18b     use                     DOS-filename
+>>>>>0x196     ubyte                   x                       \b+
+>>>>>0x197     use                     DOS-filename
+# http://en.wikipedia.org/wiki/Zenith_Data_Systems
+# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6            
+>>>>(1.b+2)    ubequad                 0xbbc0078ed3bcc601      \b, Zenith Data Systems MS-DOS 1.25 bootloader
+# IO.SYS+MSDOS.SYS
+>>>>>0x20      use                     2xDOS-filename
+# http://en.wikipedia.org/wiki/Corona_Data_Systems
+# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;           
+>>>>(1.b+2)    ubequad                 0x8cc88ed8fa8ed0bc      \b, MS-DOS 1.25 bootloader
+# IO.SYS+MSDOS.SYS
+>>>>>0x69      use                     2xDOS-filename
+# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;              
+>>>>(1.b+2)    ubequad                 0xfa0e17bc007cb860      \b, MS-DOS 2.11 bootloader
+# defect IO.SYS+MSDOS.SYS ?
+#>>>>>0x162    use                     2xDOS-filename
+
 # CDROM Filesystems
 # Modified for UDF by gerardo.cacciari@gmail.com
 32769  string    CD001     #