A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 10186|回复: 7

超任磁碟机博士系列磁碟机金手指代码完全解析

[复制链接]

精华
0
帖子
478
威望
0 点
积分
629 点
种子
12 点
注册时间
2008-3-13
最后登录
2024-8-5
 楼主| 发表于 2012-5-3 15:54  ·  吉林 | 显示全部楼层 |阅读模式
本帖最后由 ly63 于 2012-5-3 15:56 编辑

这篇文章我是最初发表到PPXCLUB论坛的,不过貌似没有人关心这些东西,那里都是分享ROM、镜像的玩家。
放在那里估计没几个人能看到,所以我又把这文章搬到这里,献给那些对老东西感兴趣的玩家。


正文:


每个80后玩家都应该知道甚至熟悉超任游戏机,在那个年代,有经济实力购买正版卡带的人不是很多,大多数人接触超任是从游戏厅里的磁碟机开始的,这其中香港邦谷公司推出博士系列磁碟机市场占有率最高,还可连接光盘驱动器(另选购),也可连接电脑传输ROM、存档等等;此机器还支持金手指修改游戏、即时存档、慢动作等附加功能,在众多磁碟机之中,可谓是极具竞争力。
转眼十多年过去了,超任早已退出历史舞台,不知道有多少人能真正了解陪伴了自己无数个不眠之夜的游戏机呢?本文就为大家详细解析博士系列的金手指功能。

首先介绍一下金手指码的构成:

例如,
第四次机器人大战4:
无限金钱:
04620EAEA8D670

博士系列的金手指码由5部分构成:

前5位    :04620:要修改的ROM数据地址
中间6位:EAEA8D:要修改的数据,每2位1字节,一条金手指一次可修改3字节数据
后2位    :67:金手指码的校验和
最后1位:0:功能代码,为0表示修改ROM,为1表示修改SRAM

看到这里有同学就会问了:
Q:你不是说由5部分组成么?前4部分已经把14位金手指码全包括了,那么第五部分在哪儿呢?
A:请各位先看张图:

图中画红圈的地方就是金手指码的第五部分,很重要,但是似乎所有人都把它忽略了,博士的说明书中也没有提及与金手指相关的内容。这第5部分就是指示内存分区的标识,你可以用手柄的X、Y键改变箭头所指的分区,我把它命名为Slot Code。

下面开始详细分析:

1.地址:
地址码为5位,20BIT宽。说到这里,了解超任硬件的同学会有疑问了:
Q:超任主机地址总线宽度为24Bit,最大可寻址16MByte内存空间,而金手指码地址却只有20Bit,只能寻址1MByte,这不是很失败的设计么?如果我要修改超过1M的地址怎么办?
A:博士的金手指地址码是经过编码的,要与Slot Code一起来实现24Bit寻址。我看了很多磁碟机介绍文章,以及支持金手指码的ZSNESW的源代码,发现人们都是把金手指的地址当作20Bit来处理,这是不完全正确的。

到这里不得不提及游戏ROM的类型:
游戏的ROM类型分为HIROM、LOROM、ExHIROM、ExLOROM;
HI、LOROM最大为4mbyte,绝大多数游戏属于这两类;ExHI、ExLoROM可大于4Mb,比如幻想传说(Tales Of  Fantasia) 就是ExHiROM,容量为48M(6Mbyte)。

1.1地址的解码:
前面说过,金手指需要与Slot配合才能访问全部ROM地址,其对应关系是:
如果一个金手指码未指定修改哪区,那通常就指修改A区
情况1:ROM=HIROM,Slot Code=A:
地址指向的是ROM的每64K的后32K,0x??8000~0x??FFFF(比如地址码=00000,访问的ROM地址就是0x008000)
范围0x008000~0x1FFFFF。

情况2:ROM=HIROM,Slot Code=B:
与情况1类似,但地址加上0x200000(范围0x208000~0x3FFFFF)

情况3:ROM=HIROM,Slot Code=C:
地址指向的是ROM的每64K的前32K,0x??0000~0x??7FFF,范围0x000000~1F7FFF

情况4:ROM=HIROM,Slot Code=D:
与情况3类似,但地址加上0x200000 范围0x207FFF~0x3F7FFF

情况5:ROM=LOROM
这时地址是线性的20Bit地址,Slot Code=A:范围0x000000~0x0FFFFF,Slot Code=B:范围0x100000~1FFFFF,依次类推
如果游戏ROM不超过16M(2Mb),那么只有A和B区可用,修改B区的情况跟大于16M时修改C区相同。
经过解码过程,我们就得到了金手指码的真实ROM地址,有了这个地址,我们就可以把修改数据直接写入到游戏ROM镜像里,或者转换为PAR码(Pro Action Replay码,另一种金手指,可以用在模拟器中)。
注意这样得到的ROM地址是不包括ROM信息头的地址,博士系列的游戏ROM(比如sf24046A)都带有512字节的信息头,在这样的ROM上,计算得出的地址还要加上0x200才是真实ROM地址。

2.数据
每条金手指包含修改数据最多为3字节,也可以只包含1字节(不需要修改的位置输入‘X’),甚至可以不包含数据(数据全为‘X’),此时如果输入并确定的话,你会看到这个地址的当前值。

3.校验和
校验和是用来检验一条金手指码是否合法,算法是:
5位地址前面加0补齐为6位,然后按顺序将地址和数据按字节相加,比如上面的金手指码:
00+46+20+ea+ea+8d=2c7
得到的和再减去0x160,再和0xFF做按位与运算
0x2c7-0x160=0x167
0x167 AND 0xFF=0x67
这就计算出了校验和,与金手指中的校验和比较,如果相等,则是有效的金手指码。

4.功能代码
如果为0表示修改游戏ROM,为1表示修改游戏存档SRAM。
因为所有带有SRAM的游戏都会校验数据的校验和,所以不存在通用的修改存档的金手指码,如果你改变了存档中的1个字节,校验和就会发生变化,游戏就会认为存档已经损坏不会读取。所以要想修改SRAM,首先要弄清楚校验和的位置,并在修改数据后对校验和补正,不然就会损坏存档。所以这个功能操作性不强,需要玩家有一定基础。

5.Slot Code

这是个隐藏参数,不存在于金手指码中,但是没有它金手指码便无法使用,如果你查到一个金手指码并没有指定修改哪个区,那很可能就是修改A区(Slot Code=A),如果无效,可能这个金手指码不是为博士系列编写的,有些磁碟机也支持金手指码,但实现方式却不相同,比如龙2、金霸王磁碟机,通常只有LOROM游戏的金手指码有效(因为LOROM的地址在磁碟机上为线性),而且只能访问前1M的位置。

6.ROM类型
Q:现在我知道了ROM类型对于计算地址非常重要,那么如何知道一个ROM是什么类型呢?
A:可以利用ROM工具或模拟器查看,用Snes9x载入ROM后会显示是何种类型;用Ucon64、NSRT 也可查看,这两个工具是控制台程序,用ROM文件名作为参数运行,程序就会返回ROM信息。

7.总结

一条完整的金手指应该以下列形式表示
AAAAADDDDDDCCF@S

A=地址,D=数据,C=校验和,F=功能码,S=Slot Code

由于超任主机的复杂性,并不是所有游戏ROM映射方式都是标准的HI、LOROM,但数量较少,对于这样的游戏,金手指可能无法正常工作,因为ROM映射方式不同,还有带有特殊芯片的游戏金手指也不会工作。

具体的地址转换算法:

  1. If (GAME ROM = HiRom and game rom >16MB)
  2. {
  3.    if (slot code = A)
  4.    {
  5.    //code Address is second half of every 64K ROM
  6.    //for example, GF code address is 00000,then ROM Address=0x008000;
  7.    //GF code address is 08000,then ROM address=0x018000
  8.    Rom Address=((CodeAddress & 0x3f8000) << 1) + 0x8000 + (CodeAddress & 0x7fff);
  9.    }
  10.    If  (Slot code =B)
  11.    {
  12.    //algorithm is same as slot code =A, but ROM address +=0x200000
  13.    //for example, GF address = 00000, then ROM address = 0x208000;
  14.    //GF code address is 08000,then ROM address=0x218000
  15.    Rom Address=((CodeAddress & 0x3f8000) << 1) + 0x8000 + (CodeAddress & 0x7fff);
  16.    Rom Address+=0x200000;
  17.    }
  18.    If (slot code = C)
  19.    {
  20.    //Code address is first half of every 64k ROM
  21.    //for example, GF code address is 00000, then ROM Address=0x000000;
  22.    //GF code address is 08000, then ROM address=0x010000;
  23.    Rom Address=((CodeAddress & 0x3f8000) << 1) + (CodeAddress & 0x7fff);
  24.    }
  25.    If (slot code = D)
  26.    {
  27.    //algorithm is same as slot code =C, but ROM address +=0x200000
  28.    //for example, GF code address is 00000, then ROM Address=0x200000;
  29.    //GF code address is 08000, then ROM address=0x210000;
  30.    Rom Address=((CodeAddress & 0x3f8000) << 1) + (CodeAddress & 0x7fff);
  31.    Rom Address+=0x200000;
  32.    }
  33. }
  34. If (GAME ROM = HiRom and game rom <=16MB)
  35. {
  36.    if (slot code = A)
  37.    {
  38.    //code Address is second half of every 64K ROM
  39.    //for example, GF code address is 00000,then ROM Address=0x008000;
  40.    //GF code address is 08000,then ROM address=0x018000
  41.    Rom Address=((CodeAddress & 0x3f8000) << 1) + 0x8000 + (CodeAddress & 0x7fff);
  42.    }
  43.    If (slot code = B)
  44.    {
  45.    //Code address is first half of every 64k ROM
  46.    //for example, GF code address is 00000, then ROM Address=0x000000;
  47.    //GF code address is 08000, then ROM address=0x010000;
  48.    Rom Address=((CodeAddress & 0x3f8000) << 1) + (CodeAddress & 0x7fff);
  49.    }
  50.    //Slot code c and d are not valid while rom size <=16MB
  51. }
  52. If (GAME ROM = LoRom)
  53. {
  54. //define slot code Constant:
  55. A=0;B=1;C=2;D=3;
  56. ROM address = code address +(slot code*0x10000)
  57. }
复制代码
金手指码的功能是软件实现,只能静态地修改ROM和存档内容,对于运行时数据(WorkRam)的内容是无能为力的,所有7E、7F开头的PAR金手指码从原理上就不可能转换为金手指码。

8.后记

超任磁碟机早已淡出了历史舞台,这篇迟到了近20年的研究成果还有没有人在意呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

圣骑士

业余维修工

精华
0
帖子
3415
威望
0 点
积分
3609 点
种子
17 点
注册时间
2010-5-7
最后登录
2024-3-25
发表于 2012-5-3 15:57  ·  河北 | 显示全部楼层
老兄能修改一下BIOS 让博士七不分段读取 一次性读取32M的文件

精华
0
帖子
478
威望
0 点
积分
629 点
种子
12 点
注册时间
2008-3-13
最后登录
2024-8-5
 楼主| 发表于 2012-5-3 16:06  ·  吉林 | 显示全部楼层
lichangliang 发表于 2012-5-3 15:57
老兄能修改一下BIOS 让博士七不分段读取 一次性读取32M的文件

这个貌似难度很大,因为博士7当初设计时就是操作软驱的,要修改成读取其它媒介就得为它重写个OS,可是博士7的主板上的ASIC芯片任何相关资料都无法找到,几乎无从下手,国外Hacker之前也试图破解这个芯片,后来也都不了了之了。

国外现在有把Super UFO Pro 8 Hack成读取SD卡的,不知实际使用效果如何,一直也没见到实物。
ryb

挂版VIP

課金薄いぞ!なにやってんの

精华
19
帖子
30551
威望
47 点
积分
33741 点
种子
84 点
注册时间
2009-4-24
最后登录
2024-9-10
发表于 2012-5-3 16:08  ·  新西兰 | 显示全部楼层
除了貼圖能看懂以外
剩下的已經超過我的文字裡解範圍瞭.........

精华
0
帖子
455
威望
0 点
积分
561 点
种子
68 点
注册时间
2010-11-21
最后登录
2024-6-11
发表于 2012-5-3 16:22  ·  吉尔吉斯斯坦 | 显示全部楼层
ly63 发表于 2012-5-3 16:06
这个貌似难度很大,因为博士7当初设计时就是操作软驱的,要修改成读取其它媒介就得为它重写个OS,可是博士 ...

国外现在有把Super UFO Pro 8 Hack成读取SD卡的,不知实际使用效果如何,一直也没见到实物。
TB已经有售了,LZ是不是先入,然后再给评测,造福玩友!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

征服者

绝对不会烂尾的!

精华
1
帖子
5728
威望
4 点
积分
7507 点
种子
142 点
注册时间
2005-5-22
最后登录
2024-11-13
发表于 2012-5-3 21:05  ·  广东 | 显示全部楼层
当年的金手指书上说过,除非懂汇编语言,否则很难自己搜出可用的金手指码。而后来的模拟器都有搜索数值、甚至低阶搜索的功能,我就不再关心磁碟机的修改方法了。
该用户已被禁言

精华
0
帖子
39
威望
0 点
积分
39 点
种子
0 点
注册时间
2006-9-1
最后登录
2020-4-15
发表于 2012-5-3 22:07  ·  陕西 | 显示全部楼层
不错啊..支持楼主..谢谢你的分享...

精华
0
帖子
89
威望
0 点
积分
83 点
种子
5 点
注册时间
2012-7-5
最后登录
2022-5-2
发表于 2014-6-3 00:58  ·  广东 | 显示全部楼层
我对这老东西很感兴趣。
楼主 能否教我怎样连接电脑传输ROM到博士机上吗?现在的电脑软驱都没有了真头痛!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-11-24 08:45 , Processed in 0.206223 second(s), 22 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部