回复主题: P制MD主机用 EVERDRIVE MD 玩不了美版游戏!!??
作者:SONIC3D

原帖由 zhqing 于 2012-4-10 11:53 发表
那如果对应有校验和的游戏,该怎么改呢?我想把可能的情况搞清楚,有时间写个转换小程序。



如果修改时涉及的修改点在大于等于0x00000200的地方,那么就会造成ROM的校验和和事先写在ROM头部的Checksum不符,有些游戏会红屏有些游戏会提示,也有些不会有任何影响。
解决方法:
1.如果是模拟器使用,只需要在选项里钩上Auto fix checksum的选项就可以,模拟器会在加载ROM的时候按照标准算法重新计算Checksum值,然后写入内存中加载的ROM的头部(不会写入磁盘上的ROM文件里)
2.如果是要永久修复ROM文件的checksum,可以找网上的此类工具,比如http://www.romhacking.net/utilities/342/
3.如果咸蛋疼,想要自己写算法止痛,对于MD标准的Checksum计算方法就是把0x00000200到ROM结尾的所有数据都加起来(注意是按Word方式累加,溢出无视),然后把最后的结果和0x0000018E处的16bit数作比较,符合就是校验正确。(见http://en.wikibooks.org/wiki/Genesis_Programming#Checksum)
4.暴力破解法,即找到ROM代码中的校验和的验证点,无论校验正确与否,都让它跳转到正确的分支去。这个方法最彻底。而且如果会分析代码改区码,那找这校验和验证的代码难度更低,肯定可以搞定。

注意,少数游戏有特别的校验和算法,如果按照标准算法反而会造成ROM校验错误,红屏,比如16人街霸。这类有特殊校验算法的游戏在GoodGens里都有(c)的标志,c就是Checksum的缩写。对于这类游戏,一般就采用上述方法4,或者遇到完美主义者,就是在分析其定制算法的基础上,计算出正确的校验和,填到指定的位置去,其实效果都是一样的。



[登录后才可回复]