回到首页





PS光盘格式简介
文/Agemo
2003-04-28



PS光盘格式符合 ISO9660 level 1 规范,以下依照ISO9660文档写成。

参考文章:
Pinocchio翻译整理的PS_CD资料
ISO9660 规范


1. 一些名词

. Logical Block(LB, 逻辑块编号)
 逻辑块号在iso中就是对应第几个扇区
 扇区在ISO的起始偏移量 = LB号 * 2352

. Directory Record. 一条文件和目录信息的表示格式 <见ISO9660文档的9.1章>
 含有LB号,文件大小,文件名等信息

 文件名的格式为: 文件名.扩展名;版本
 比如       SYSTEM.CNF;1
 文件名必须是8.3格式。字符只能用大写字符、数字和下划线

2. 扇区格式

 用Winhex打开一个ps的iso,可以看到
 一个物理扇区为2352字节,每个扇区头:
 00 FF FF FF FF FF FF FF FF FF FF 00 00 02 00 02
 前12字节为固定的 SYNC 标志 (为了光头寻找扇区的同步)
 跟着的4个字节分别表示 minute, second, sector, mode
 这些字节用BCD码形式表示,就是说
 0x20, 0x10, 0x03 代表20min, 10second, 03 sector
 一张PS碟最多 71 minutes, 59 seconds , 74 sectors 长.
 ps所有扇区的mode值都是2

 2352字节的其余部分含数据,还有ECC/EDC校验等非数据的部分,
 具体长度与该扇区存储是何种数据有关:

 对于存放xa格式声音,以及CD的扇区来说,格式是Mode 2 Form 2
 数据区要长一些。这个不在本文讨论范围之内。

 对于存储数据文件的扇区来说,格式是Mode 2 Form 1
 数据区从扇区的SYNC处开始的偏移0x18 字节开始,
 长度为2048字节

3. 下面举一个手工修改目录表的例子



 用WinHex打开ISO查找字符串 SYSTEM.CNF 找到根目录区。
 如上图,这里解释一条Directory Record

 例子中,这条记录开始于偏移 0xCE26

   偏移 解释
   ————————————————
   $0  这条记录的长度,一个字节,如图是 0x3C
   $2  文件的起始逻辑块号。用8个字节来表示,前面4个字节是低位在前,
      高位在后的32位整数表示法。后面4个字节是高位在前低位在后的
      32位整数表示法,
   $B  文件的长度,32位整数。也用8个字节表示,表示同上。
   $21 文件名的长度,一个字节
   $22 从这个字节开始就是文件名的字符串了。
   ————————————————

 按照格式修改就可以了。在目录表末尾添加一条记录也是可以的。
     
 注:直接用编辑ISO的话,必须用 eccregen 重新计算一下ECC校验。
   建议用 isopatcher 修改,会自动计算校验。
 


4. 其他的说明


比如需要嵌入logo图片,在文件列表的末尾加一个文件可以用这种方法。
需要从ISO中找一段无用的扇区,比如ISO尾部。没地方可以在动画文件尾部取一段。

还可以用这种方案:
把原来psx-exe压缩一下,作为数据。然后前面加上一个头,做成类似代码自解压的程序,
这样一般能带上一些图片,原来psx-exe也就不用再扩容空间了。