TGFC俱乐部>>经典游戏怀旧专区>>
- 刷新/显图/登录/注册/WEB
标题:P制MD主机用 EVERDRIVE MD 玩不了美版游戏!!??
时间:12-04-02 13:53
作者:叶欣

请问P制式的主机用 MD EVERDRIVE 烧录卡是不是 玩不了N制美版游戏??烧录任何美版游戏都显示有制式限制! 不是说无视制式的吗?? 我另一台N制MD 插上卡就黑屏,真TM悲剧·············

[ 本帖最后由 叶欣 于 2012-4-2 13:54 编辑 ]


这些回帖最骚
===================
SONIC3D 骚(8) 引用
好吧,咸蛋疼,看了一下代码.帮LZ找了一下修改的地方
用WinHex或UltraEdit打开ROM,然后转到[color=red]0x000001F0[/color]处,把原来的34改成[color=red]3F[/color]就全区了,而且因为这样改的是文件头,不影响ROM的校验和(不过这游戏好像也不检验校验和。。。)

如果改不来看附件的图。。。
...
[内容过多,请查看原贴]

附件:: [您所在的用户组无法下载或查看附件]





回复列表 (21)
#2 yangjuniori 2012-4-2 14:45
posted by wap, platform: SAMSUNG (Galaxy S II)

烧破解的?

===================
#3 学不会五笔字型 2012-4-2 17:08
从goodgen 3.0全部rom中可以找到每个游戏的所有版本rom,基本上从每个游戏的修改版中可以找到能通玩的rom,也就是解除区域限制的版本

===================
#4 vdiy 2012-4-2 18:25
引用某大侠的话:由于这个烧录卡使用了主机的特殊功能 所以不能运行

===================
#5 叶欣 2012-4-2 21:56
下了GOODGEN 3.0 正在努力校验中······不过最想玩的 武装领主(Weaponlord) 没有出过美版以外的版本 里面的2个文件都玩不了······· TT TT

===================
#6 Soviet所谓爱 2012-4-2 22:39
原帖由 叶欣 于 2012-4-2 13:53 发表
请问P制式的主机用 MD EVERDRIVE 烧录卡是不是 玩不了N制美版游戏??烧录任何美版游戏都显示有制式限制! 不是说无视制式的吗?? 我另一台N制MD 插上卡就黑屏,真TM悲剧·············


锁版本的游戏之所以会锁,不是仅仅和制式有关

版本由区和制构成
区分为日区(写做J)和洋区(写做O),就是JAPAN和OVERSEA的意思
制分为N制和P制,即NTSC和PAL
那么,两种区和两种制可以组合出四种版

J+N=日本(以及亚N、韩国)
J+P=亚P(即香港等东南亚PAL国家)
O+N=北美
O+P=欧洲(以及澳洲)

锁版本是中期开始搞的把戏,以前的绝大多数不锁,锁版本的原理是卡带检索机器的区制,一般只检索一个。不过后期有一些同时检测区和制的,最典型的就是16人街霸。

不过,对不起楼主兄弟,我帮不到你:D



===================
#7 SONIC3D 2012-4-2 23:01
你看看Weaponlord在goodgens里有没有后面括号里带f的版本,比如(f1)或(f2),如果有就用那种版本。:绿脸贱笑:兔脸红:

===================
#8 Soviet所谓爱 2012-4-2 23:14
原帖由 SONIC3D 于 2012-4-2 23:01 发表
你看看Weaponlord在goodgens里有没有后面括号里带f的版本,比如(f1)或(f2),如果有就用那种版本。:绿脸贱笑:兔脸红:


:绿脸贱笑:兔脸红: 我整理ROM时只要[!]的.....:绿脸贱笑:兔脸红:

===================
#9 SONIC3D 骚(8) 2012-4-3 03:02
好吧,咸蛋疼,看了一下代码.帮LZ找了一下修改的地方
用WinHex或UltraEdit打开ROM,然后转到0x000001F0处,把原来的34改成3F就全区了,而且因为这样改的是文件头,不影响ROM的校验和(不过这游戏好像也不检验校验和。。。)

如果改不来看附件的图。。。
其实可以改成00-46之间的任何值,00-3F时只看个位,所以00和10和20和30等价,以此类推,40以上有些区别,具体看所附的各种值的对应区码真值表:

//Weaponlord修改Offset 0x000001F0时的值所对应的区码真值表
-------------------------------------------------------------------
| 值 | Jap | Asia | Usa | Eur | |
-------------------------------------------------------------------
| 30: | 0 | 0 | 0 | 0 | |
| 31: | 1 | 0 | 0 | 0 | |
| 32: | 0 | 1 | 0 | 0 | |
| 33: | 1 | 1 | 0 | 0 | |
| 34: | 0 | 0 | 1 | 0 | //默认是34,也就仅美区 |
| 35: | 1 | 0 | 1 | 0 | |
| 36: | 0 | 1 | 1 | 0 | |
| 37: | 1 | 1 | 1 | 0 | |
| 38: | 0 | 0 | 0 | 1 | |
|40或39: | 1 | 0 | 0 | 1 | |
|41或3A: | 0 | 1 | 0 | 1 | |
|42或3B: | 1 | 1 | 0 | 1 | |
|43或3C: | 0 | 0 | 1 | 1 | |
|44或3D: | 1 | 0 | 1 | 1 | |
|45或3E: | 0 | 1 | 1 | 1 | |
|46或3F: | 1 | 1 | 1 | 1 | //改成3F就全区了 |
-------------------------------------------------------------------
//by SONIC3D,2012.Apr.3
附件:: [您所在的用户组无法下载或查看附件]


===================
#10 danman 2012-4-3 04:22
拜ls,太细致了!

===================
#11 SONIC3D 2012-4-3 17:04
但是只针对这个游戏,不是通用,这个注意:绿脸贱笑:兔脸红:

===================
#12 叶欣 2012-4-4 14:11
我去······太仔细了!!大拜啊!!

===================
#13 wood 2012-4-4 14:23
我tgfc能人忒多。

===================
#14 叶欣 2012-4-4 15:32
太神奇了!!!以前不能运行的游戏改完都可以了!

===================
#15 叶欣 2012-4-4 16:01
试着改了一下其他几个游戏,Aero the Acro-Bat 2 也是P制不能运行的, 欧版值是45 美版值是55 ······按照改3F的方法不行,值大于46的话有啥其他方法吗?

===================
#16 SONIC3D 2012-4-4 18:04
原帖由 叶欣 于 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 编辑 ]
附件:: [您所在的用户组无法下载或查看附件]


===================
#17 叶欣 2012-4-4 18:19
多谢神人!继续膜拜·······我这就去研究!!

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

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

===================
#20 sonicteam 2012-4-15 00:33
必须MARK

===================
#21 SONIC3D 2012-4-15 17:43
原帖由 sonicteam 于 2012-4-15 00:33 发表
必须MARK


team现在很少现身啊。。。。:D



===================
#22 Soviet所谓爱 2012-4-15 21:48
MARK,学习一下MD专业性技术人员SONIC3D

===================


[登录后才可回复]