Polaroid Photo

点击上图访问我的私人相册。 你要知道我的中文名才可以哦!

Jeff Cai的流水账

Choose a Topic:

Tue
21
Jul '09

HDCOPY的IMG格式简析

HDCOPY乃DOS时代一猛将,遥记往昔,记得第一只光盘(好贵的哦,而且当然是盗版的)里面就是装满了IMG格式的磁盘镜像。一开始还要用磁盘一个个弄出来才能用,后来还好有各路好汉的软件,才可以直接解出来,免去磁盘之痛。 闲话不提了,最近针对一个应用需要解压这个老的磁盘格式IMG。一开始自己分析,没太多头绪。还好后来找到了DOSIMG这个工具,作者还提供了源代码,通读后终于摆平。想到可能还有类似痛苦的童鞋,所以在这里把格式简单写下来。 总体结构: IMG分为头部和数据区域两大部分。其中头部对于有HD1.7和HD2.0两种格式。 头部: HD2.0头部: 偏移(字节) 长度(字节) 描述 0×00 2 0xFF 0×18,格式识别标记 0×02 1 磁盘标签长度 0×03 11 磁盘标签,就是DISK Label,不够11字节的地方用空格0×20填满 0x0E 1 最大Track号,从0开始。一般为79(DEC) 0x0F 1 每Track的Sector数目。对于3.5英寸的HD高密盘一般为18(DEC) 0×10 168 Track是否有数据的标记数组。0为无数据,1为有数据。对应HDCOPY里面的绿点。Track0,Head0为第一个,Track0,Head1为第二个,如此类推…… 长度固定为最大84Track,2Head共168。 HD1.7头部: 其实就是没有了2.0格式的头三个数据。 偏移(字节) 长度(字节) 描述 0×00 1 最大Track号,从0开始。一般为79(DEC) 0×01 1 每Track的Sector数目。对于3.5英寸的HD高密盘一般为18(DEC) 0×2 168 Track是否有数据的标记数组。0为无数据,1为有数据。对应HDCOPY里面的绿点。Track0,Head0为第一个,Track0,Head1为第二个,如此类推…… 长度固定为最大84Track,2Head共168。 数据区域: 数据区域紧接着头部,由若干的数据块组成。每个数据块包含一个Track的单面的所有Sector的内容,每个数据块都是经过简单压缩的。数据块以Track + Head的顺序排列,但不包括头部的Track标记数组里面标记为0的单面Track。下图中显示了Track2的两面(Head0,Head1)都为0的情况。 Track0, Head0 Track0,Head1 Track1,Head0 Track1,Head1 Track3,Head0 [...]