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也就不用再扩容空间了。
|