主题 : 【原创】【讨论】世嘉土星游戏汉化教程1
YZB
无广告位,看帖子签名
级别: 超级版主

UID: 12451
精华: 6
发帖: 19003
威望: 173 星
金钱: 9081 浮游币
贡献值: 9858 点
好评度: 54599 点
人气: 4322 点
在线时间: 18591(时)
注册时间: 2004-10-02
最后登录: 2024-03-29
楼主  发表于: 2021-11-16 11:39

【原创】【讨论】世嘉土星游戏汉化教程1

管理提醒: 本帖被 YZB 执行加亮操作(2021-11-28)

本贴原创,转载的话请注明出处


很早以前,很多人询问过我,想让我写个ss游戏的汉化教程,因为原来一直比较忙,这段时间终于比较空闲下来,在我们的组长sky0611的督促下,终于可以静下来慢慢写了

开头第一篇,先来点简单的基础,聊聊ss游戏的运行原理吧,毕竟了解了运行原理才可以比较熟悉的汉化游戏.以下说明全部是我个人经验以及猜测,如果有说得不对的地方,欢迎指正


有关世嘉土星(下面简称SS)的详细的资料可以去看yaba模拟器的维基百科,里面写得很详细
https://wiki.yabause.org/index.php5?title=SH-2CPU

首先ss的内存分为2个区,一个是高段区,大小为0x100000,也就是1m,地址从0x06000000-0x06100000,这部分称为高段区,跑程序 dma复制什么的比较快,一般ss游戏程序方面的文件都是会优先放到这里

另外一个是低段区,大小也为0x100000,也是1m,地址从0x00200000-0x00300000,这部分称为低段区,速度虽然比高段区慢点,但是肉眼是区分不出来的,而且也是可以跑程序的


ss的显存分为vdp1 vdp2
vdp1 大小为512kb 地址从0x5c0000-0x05C80000, vdp1作用一般是做为处理活动块图层

vdp2 大小为512kb 地址从0x5e0000-0x05e80000, vdp2作用一般是做为背景图层

另外还有一个颜色表,地址为0x05F00000,大小为4kb,也就是0x1000,作为vdp1和vdp2图层为16色或者256色的时候当颜色表来使用
想看详细的资料就去上面的网址,里面写得非常详细清楚了.

ss主机在开机以后,会先运行bios,播放bios里面预留的开机动画,在播放期间会进行一系列的操作,各种初始化 以及验证(因为ss主机在国内大部分都是加过直读了的,所以抛开光驱解锁以及原版盘验证这些,那里比较复杂,其实我也不太明白,所以接下来的说明都是默认光驱以及其他验证都是通过的)

在播放完第一段bios动画以后,程序会优先检测是否插上了卡带,是的,你没看错,卡带的优先级别比光盘还要高,在检测到没有插入卡带或者卡带里面的ip头数据和bios对不上才会去读取检测光盘

刚才说到了ip头数据,这里做一下展开说明
因为ss是以cd rom光盘为媒介的,格式又是标准的ISO9660文件系统,而ISO9660文件系统其中有一个定义就是,光盘最开始的32kb是保留的,在这32kb里面可以放其他数据
所以SEGA呢,据我了解应该是从sega cd主机开始就这样玩了,把这32kb拿来放游戏信息以及校检数据,这地方从sega cd到ss到dc都是如此(只是dc读取的不是最开始的32kb而已),可以说是sega的老传统技能了


说回土星,通常我们把这32kb数据称为ip文件,当ss开机以后,没有检测到有卡带插在主机上,或者卡带内的ip文件头部不正确的话,才会去读取光盘的ip文件,也就是光盘最开始的32kb数据,这32kb默认是读取到ss的高内存0x06002000这个地方,32kb也就是0x8000大小,地址也就是从0x06002000-0x0600a000(注意,这里是固定的,不能更改)

把32kb数据读进内存以后,bios播放完第一段动画会跳到06002100这个地方,也就是ip文件的0x100地址这里。(这里重点说一下,这里的地址是指2048的iso格式地址,而不是redump那种2352的bin格式,bin格式因为含有edc ecc校检,所以实际上,在2352的bin格式中每2048字节的数据就会含有一个304字节的扇区数据,用来校检和修正这2048字节的数据是否正确,其中有16个字节扇区头部数据在2048数据的头部,后面剩下的edc ecc校检数据在尾部,看下图)


从0x100这里开始就是校检ip数据和显示SEGA那几个大字的地方了,也就是判断这些数据是否和bios内的一致,不一致则返回到bios的9球管理画面




这里继续展开对ip文件的说明,网上应该有比较详细的资料,我这里只简单说一下,ip文件的前0x100字节,是该游戏的信息,比如游戏名字 版本 年份 时间什么的,从0x100开始才是程序入口,显示sega画面,验证数据,最后才进入游戏


这里重点说一下ip头的0xf0这个地址,这个地址非常重要,在程序进入ip文件入口以后,也就是0x100这里,在校检数据以及显示sega画面之后,会根据这个地址(一般这个地址为0x06004000或者0x06010000),把光盘内的第一个文件读取到这个地址中,可以当成该游戏的主程序文件(注意,这里是固定的,不能更改),然后一般的游戏都会直接跳转到这个地址开始运行游戏,另外注意一下,ip在内存中的地址为0x06002000-0600a000,如果主程序的地址为0x06004000的话,就会把ip文件覆盖掉一大部分,所以ip文件大部分后面都是留空的,因为一般都会被主程序覆盖


但是也有一些例外,不走寻常路,比如我遇到过几个capcom的游戏,会把ip文件常驻在内存中,把一些常用的函数放到这里在游戏中调用,或者有的游戏会把主程序文件读进去以后,但不跳到主程序的开头,而是跳过头部N个字节在

总之在显示完sega这几个大字校检正常以后,就可以正式开始各种骚操作了,主动权就回到游戏手中


聊到这里,既然知道了运行原理,那么重构一个iso镜像就很简单了

首先我们把游戏的ip文件抽取出来,然后把游戏文件复制到硬盘里面,最后利用makeisofs这样的制作iso文件的工具就可以很轻松的把游戏镜像制作出来了

(再次注意,对于MODE2/2352的游戏来说,把镜像里面的游戏文件全部复制到硬盘成了一件困难的事情,因为载入虚拟光驱复制某些文件的时候总会遇到提示出错的情况,排除因为直接修改镜像导致edc ecc校检数据不一致的情况以外,原始的redump文件出现这个问题只能是因为使用了MODE2/2352格式,因为MODE2/2352格式减少了大部分的edc ecc数据,节约了容量,这样一张光盘就可以存更多的数据.

但是MODE2/2352格式数据也带来了一个问题,那就是这些数据不能修正了,也就是也有可能从光盘读取进来的这些数据,可能是损坏错误的,所以MODE2/2352数据一般是声音或者CG视频之类的,就算数据有点损坏,最多也就是出点杂音或者花屏之类,总比读进去的是错误的程序,然后运行到这里出现死机 黑屏的时候要好得多


那么怎么区分游戏是否使用了MODE2/2352格式呢,很简单,以redump的bin文件为例子,解压游戏以后会有一个cue文件,用记事本打开这个cue文件,你会看见都是里面都是英文,试着搜索一下这个cue里面是否含有MODE2 2352 之类的字眼,如果没有,就万事大吉了,如果有,就自己想办法提取那些文件吧


当然还有最后一种情况,虽然不是MODE2/2352格式,但是也总是有那么几个文件不能提取出来,对于这些文件,一般是音轨文件的索引,大部分的游戏是不会根据这些索引来定位文件的,所以这些文件可以不用留,这种文件一般名字带有CDDA track之类的字眼或者是.da后缀名的文件,这些可以不用理会,没有也关系


上面洋洋洒洒的一大堆,其实大部分都是原理解释,真正操作起来就2步
1 虚拟光驱载入镜像以后提取ip文件
2 复制游戏文件到硬盘
3 生成iso镜像


这样生成的iso镜像就可以用模拟器测试了(注意一下,某些带有很多音轨游戏直接测试iso话,也许会在游戏中出现黑屏 花屏等现象,那是因为读取音轨出错的现象,如有有音轨,请继续按下面的方法加载音轨以后再测试)

因为iso格式是没有音轨的,如果一个游戏使用了音轨应该怎么办才能加载播放音轨呢(如果游戏只是带有一个音轨的话,那么这个音轨大概率只是警告这是ss盘片的音轨,测试期间可以不用附加上去,到最后完成的时候再考虑是否加入进去)

其实方法也很简单,这里我用附件的游戏来做例子

把你生成的iso和原始的redump文件放在一起,然后用记事本打开原始的cue文件


CATALOG 0000000000000
FILE "AI Shougi (Japan) (Track 1).bin" BINARY
  TRACK 01 MODE1/2352
    INDEX 01 00:00:00
FILE "AI Shougi (Japan) (Track 2).bin" BINARY
  TRACK 02 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:02:00



这个cue文件里面你会发现带有"AI Shougi (Japan) (Track 1).bin" 这个文件名,把名字改成你的iso名字,注意不能是中文名 ,后缀也要改,以及名字前后的"符号都要保留原样,然后把下面一行的2352改成2048保存就可以了


修改后的cue文件是这样的

CATALOG 0000000000000
FILE "1.iso" BINARY
  TRACK 01 MODE1/2048
    INDEX 01 00:00:00
FILE "AI Shougi (Japan) (Track 2).bin" BINARY
  TRACK 02 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:02:00
这样用虚拟光驱载入这个cue的时候,就会自动加载音轨了,期间用模拟器测试或者用其他工具重新生成一个打包的bin+cue文件都可以

说到这里,这一期就算讲完了,这篇呢,与其说是汉化教程,还不如说是镜像修改重构教程

因为汉化过程中毕竟要修改很多文件,文件或者减少或者增大,如果单纯对镜像操作的话比较麻烦,重做镜像的话就没有这方面的压力了,寻找字库 文本方面也比较轻松一点,理论上大部分的ss游戏都可以按这个方法来重做镜像,少部分可能因为直接定位LBA读取的游戏例外,目前我没遇到过。

还有注意某些游戏不会以文件名来定位读取,而是按该文件在光盘内的编号来读取(比如说程序会直接指定读取光盘内的第5个文件-_-)所以对于这些游戏,千万不能在光盘内增加或者减少文件数量。

当然重做镜像也有缺点,因为重做后的镜像和原来的镜像相比,相差可以说是非常大,所以制作出来的补丁可能比原来的镜像更大,所以直接分享补丁的方式就不可能了,要分享只能分享整个镜像文件,这样的话会有触犯法律的后果,当然这方面不在我们的讨论范围之类


最后老规矩,附件带有一个压缩包 ss_make_iso.rar (1155 K) 下载次数:18 ,压缩包里面带有一个全版本通用的ip文件,解压这个压缩包以后,虚拟光驱载

入游戏镜像,把游戏文件全部复制到data目录,然后修改ip.bin文件头部以及第0xf0地址,改成原游戏相同的

最后双击运行1.bat即可(如果想要修改iso的名字,用记事本打开bat文件,把相应的名字修改即可)



另外一个压缩包为游戏,特意选了一个很小的用来做测试 AI Shougi (Japan).zip (1835 K) 下载次数:7

最后感谢环节,感谢sonic3D大大的资料,感谢组长sky0611的鞭策,以及大伙的支持,欢迎更多人投入到ss dc的怀抱中 ,有不明白的可以跟帖回复


by SGGG_yzb2021.11.16
[ 此帖被YZB在2021-11-16 12:44重新编辑 ]
本帖最近评分记录:
  • 人气:+5(kona) 辛苦了,送你 1 点人气
  • 好评度:+5(zengzidane) 授之于渔,功德无量!
  • 级别: 模拟小生
    UID: 288518
    精华: 0
    发帖: 146
    威望: 0 星
    金钱: 325 浮游币
    贡献值: 15 点
    好评度: 426 点
    人气: 0 点
    在线时间: 272(时)
    注册时间: 2008-05-23
    最后登录: 2024-03-07
    沙发  发表于: 2021-11-16 20:06

    据说光荣的游戏汉化破解比较麻烦