» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 22 12
发新话题
打印

[专题讨论] P制MD主机用 EVERDRIVE MD 玩不了美版游戏!!??

引用:
原帖由 叶欣 于 2012-4-4 16:01 发表
试着改了一下其他几个游戏,Aero the Acro-Bat 2 也是P制不能运行的, 欧版值是45  美版值是55  ······按照改3F的方法不行,值大于46的话有啥其他方法吗?
我11楼说了,这个改法不是通用的,如果只要看简单的改法,跳过下面4节,从红字开始看,如果咸蛋疼痛,可以不跳过。

MD的区域检测和限制是纯软件写的,卡带上没有任天堂那种CIC芯片。Sega提供了标准的函数来检测,但是在官方的各个版本的开发包里对应的检测函数的实现方法略有不同,而且有时候开发商的程序员也会自己写一些特殊的检测方法,所以改法不通用是必然的。

一般早期的制转卡就是根据卡后拨片对应的区域,把0x000001F0改为JUE三个字母对应的Ascii码,也就是0x4A 0x55 0x45,因为早期Sega的区域检测函数实现就是通过检测头部信息中这个字节的值来确定游戏区域的,但是啥B也能意识到这样的区域保护是多么傻,所以Sega后来也意识到了。。。。改了库函数,所以早期制转卡现在来看,对应的游戏很少,包括上面说的Warlord和AeroAcrobat2都用了这种方法无法解决的检测方法。

(1)AeroAcrobat2首先检测主机的硬件区码,会根据主机的日、亚、美、欧,得到编号0、1、2、3,然后游戏程序会到0x0000042A处根据这个编号取出对应的字节。
(2)0x0000042A的4个字节分别是0x4A 0x00 0x55 0x45,编号是几就取第几个字节,这样日版机取到的是0x4A,亚版是0x00,美版0x55,欧版0x45。只要取到的是00,程序立即故意进入死循环,不再继续下面的版本比对,所以亚版机最悲剧。
(3)然后把取出的字节内容和0x000001F0处的那个字节比较,如果不同,那么就出版本不对的提示,如果相同,就进行游戏。(这游戏欧版卡在0x000001F0处是0x45,美版是0x55)

好了,检测流程已经知道,那么其实有两种改法:
1.把0x000001F0那里改成你主机的版本,也就是如果你ROM是欧版,但你要在美或日机上玩,就把这个字节改成0x55(美)、0x45(日),亚版机上照理说改成0x00即可,但是上面的(2)里我说了,亚版最悲剧,只要检测到是亚版,直接死循环,根本轮不到0x000001F0里的值和它比对。而且这个方法不能改出全区,所以不推荐。
2.(推荐方法)把0x0000042A处的4个字节全部改成和0x000001F0一样。这样无论主机是什么版本,取到的对应值都能和0x000001F0处的值完全匹配,游戏可以全区正常进行。
另外这个游戏没有校验和检测,不会因为修改而红屏,所以不需要额外校验和修正。


咸蛋不疼的从这里开始看:
根据以上的方法2,实际有以下两种操作方法,2选1:
1.WinHEX改法:WinHex打开ROM,翻到0x000001F0处,记下那个值(美版ROM其实就是0x55,欧版ROM是0x45),然后翻到0x0000042A处(见附件1),把那四个字节全部改成刚才记下的值
2.GameGenie金手指码改法:到模拟器中找到GameGenie Code输入的地方,根据ROM版本输入以下值:
欧版ROM:
JYCA-ALVL
JYCA-ALVN
美版ROM:
LYCA-BLVL
LYCA-BLVN
EverDrive也支持以上金手指改法,可以参考说明文档写一个txt文件放在SD卡中,具体看文档,我没用过。

[ 本帖最后由 SONIC3D 于 2012-4-4 18:23 编辑 ]
附件: 您所在的用户组无法下载或查看附件


TOP

多谢神人!继续膜拜·······我这就去研究!!



TOP

那如果对应有校验和的游戏,该怎么改呢?我想把可能的情况搞清楚,有时间写个转换小程序。


TOP

引用:
原帖由 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,或者遇到完美主义者,就是在分析其定制算法的基础上,计算出正确的校验和,填到指定的位置去,其实效果都是一样的。

TOP

必须MARK

TOP

引用:
原帖由 sonicteam 于 2012-4-15 00:33 发表
必须MARK
team现在很少现身啊。。。。:D

TOP

MARK,学习一下MD专业性技术人员SONIC3D

TOP

 22 12
发新话题
     
官方公众号及微博