作者dewenhsu (dewen)
看板Emulator
标题[心得] 红白机 Game Genie Code 金手指码 DIY 教学
时间Thu Mar 17 22:21:23 2011
作者 dewen (茅十八) 看板 OldGame
标题 [心得]自制任天堂红白机金手指密码的方法
时间 Sun Jan 29 05:00:16 2006
───────────────────────────────────────
Game Genie 是一种红白机的金手指, ( OldGame RPG 版主有一块 )
网路上有不少美版游戏的金手指密码,
但是日版游戏无法使用, 因此必须透过模拟器 + 日版游戏 Rom,
自制可以让日版卡匣使用的金手指码.
参考资料
http://www.angelfire.com/games2/codehut/DebuggerGGcodes.txt
工具
1. 具有 debug 功能的红白机模拟器 FCEUXD SP version 1.06
http://www.the-interweb.com/bdump/fceuxdsp/fceuxdsp-1_06.rar
2. 金手指 Game Genie 的 ROM ( Galoob 公司已允许自由传播 ),
可用来测自制的金手指码是否正确.
http://nesdev.parodius.com/genie.zip
3. 日版游戏的 rom ( 自己想办法 )
这里以美版游戏 Zanac 银河号以及 Zelda 2 美版为例.
建议以同样版本的 rom, 实际操作一次就会了解.
步骤
1. 将模拟器解压到次目录下, 例如 c:\fceuxd\
2. 将金手指的 rom 解压到 c:\fceuxd\ 下,
同时由 genie.nes 更名为 gg.rom, 这样模拟器才会认得.
3. 将游戏 rom 档 zanac(U).nes 拷贝到 c:\fceuxd\ 下
4. 执行模拟器 fceuxdsp.exe
5. 选单 File --> Open --> 选 zanac(U).nes 载入游戏
接下来我们要开始利用模拟器提供的 cheat 功能,
找出存放 "只数" 的记忆体位址.
首先进入游戏, 开始出现敌人时, 按暂停, 然後选单 Tools --> Cheats
这时会出现一个视窗, 点选中间上方的 "Reset", 将资料重设.
右边的空白视窗会列出符合条件的记忆体资料.
因为此时还没设定条件, 所以会列出很多.
接着关闭 cheat 视窗回到游戏,
让银河号自爆, 减少一只, 再按暂停, 同样选 Tools --> Cheats
因为只数减少了一只, 所以在设定条件的 "Less Than" 右边空格打勾,
再右边 by 的空格填入 1 ( 表示减少的单位为一只 ),
然後按下 "Less Than" 的按钮,
这时右边记忆体视窗会筛检出符合条件的记忆体位址,
剩下 19 Possibilities ( 19 个位址符合条件 ),
可以观察这几个位址的变化都是由 03 --> 02 或是 02 --> 01.
重复同样步骤, 回到游戏再爆掉一只, 再回到 Cheats 同样按 Less Than by 1,
这时会被筛减到只有一行记忆体位址符合条件,
那就是 $0032 : 02 | 01
$0032 表示这是记忆体内存放只数的位址,
02 | 01 代表该记忆体内存放的资料数值,
由 02 变成 01, 也就是银河号的只数变化,
把这个记忆体位址 $0032 抄下来.
这时候如果你把 0032 填入右边的 Address 空格, 03 填入 Value 空格,
再按 Add, 其实就可以在模拟器下直接启用 Cheat,
它会把 $0032 的存放数值锁定为 03, 也就是银河号的只数一直保持在 03 不变,
但是为了能让实体红白机以及 Game Genie 硬体能够运作,
我们必须把这个记忆体位址与数值转换为 8 个英文字母 的金手指码.
这必须用到模拟器的 Debug 除错功能.
选 Tools --> Debug
会出现一个 6502 Debugger 的视窗,
接下来我们要设定 "中断点" Break Point,
选右边偏上方的 "Add", 会出现一个小视窗,
在 Address 的空格填入刚刚找到的位址 0032
然後把下方的 Write 打勾, 然後按 OK,
这麽做的意义是 : 当程式对记忆体 $0032 做 Write 写入的动作时,
游戏就会 中断 ,进入 debug 除错模式.
在 6502 Debugger 视窗下, 可以见到右边上方 BreakPoints 处,
有新增一行 $0032:EC-W ,这就是我们设的中断点.
接着按 Run 让游戏继续执行,
当银河号爆机的一瞬间, 只数由 03 变成 02,
程式会对 $0032 存放只数的位址做 Write 写入的动作
( 把变少的只数资料 02 写入 $0032, 取代原本的 03 ),
因此符合我们中断点的条件, 程式会中断而出现 6502 Debugger 视窗,
左边是一堆组合语言, 看不懂没关系,
主要是第一行 $8F8F:C6 32 DEC $0032 = #$03
机械码 组合语言
这行的意义就是把 $0032 位址里的数值 减 1,
C6 = DEC = Decrease 减 1, 32 = $32 = 0032 位址,
我们要让 C6 = DEC 这行减少的指令失效, 这样就变成只数无限了.
要把 C6 改成什麽数值才行呢 ? 何况有时候这个递减指令码不一定是 C6,
不懂组合语言的话怎麽修改 ?
还好, 根据前人的经验, 无效指令的改法有规则可循, 对照表如下 :
==========================================================
如果是 85, 改成 A5
如果是 8D, 改成 AD
如果是 9D, 改成 BD
如果是 C6, 改成 A5 <-------- 参考这行
如果是 CE, 改成 AD
如果是 D6, 改成 B5
如果是 DE, 改成 BD
==========================================================
所以对照之下, 只要把 C6 改成 A5, 这行递减只数的指令就废了.
也就是将 $8F8F:C6 32 --> DEC $0032
改成 $8F8F:A5 32 --> 指令作废
也就是说, 将记忆体 $8F8F 里面的数值, 由 C6 换成 A5 即可,
这就是 Game Genie 硬体在做的事情.
当卡匣的 ROM 传到红白机记忆体时, 金手指会把这段程式码拦截掉改成无效指令.
最後我们要做的事, 就是把上面的资料转成 金手指码,
选 Tools --> Game Genie Decoder/Encoder
左边的 Address 输入 8F8F
Compare 输入 C6 <--- 原始数值
Value 输入 A5 <--- 修改数值
这时右边的 Game Genie Code 就会出现 SXEENYVG
这 8 个 英文字母 就是我们要的金手指密码了, 把它抄下来.
要验证密码正确与否,
在模拟器选单下 Config --> Game Genie 打勾
( 确定 Game Genie rom 档 gg.rom 有在同一目录下 ),
然後载入游戏, 这时会出现金手指的输入画面,
将 SXEENYVG 输入, 成功的话就表示正确.
Zelda 2 的做法也类似,
只是林克的血量并不是以 1 为单位递减,
所以在血量减少 Cheats 的筛检,
只点选 Less Than, 而不要填入 by 多少递减单位,
这样慢慢筛检, 最後可以找到存放血量的记忆体位址是 $0774,
将其设定为 Debug 中断点, 找到的第一行机械码是
$E337:8D 74 07
8D 是递减的指令, 74 07 就是位址 0774
我们要修改 8D 让这行指令作废,
查上面的对照表, 8D 改成 AD 即可,
因此在 Tools --> Game Genie Decoder/Encoder 处,
Address 填入 E337
Compare 填入 8D
Value 填入 AD
就会得到 SZUTYUSE 这组血量不减的金手指码.
最後补几个连结 :
NesDev. 有很多红白机的硬体资料
http://nesdev.parodius.com/
红白机金手指码格式
http://nesdev.parodius.com/nesgg.txt
红白机, 官方 Game Genie Code ( 美版游戏为主 )
http://www.gamegenie.com/cheats/gamegenie/nes/index.shtml
The Code Hut. GB, SNES, NES, MD 的金手指码
http://www.angelfire.com/games2/codehut/
红白机模拟器
http://rancer4.computed.net/xroms/nese.html
红白机金手指购买处 Lik-Sang 网站 ( 目前好像缺货中)
http://www.lik-sang.com/info.php?category=182&products_id=2939&&
要搭配这个 60-72 pin 转接卡
http://www.lik-sang.com/info.php?category=125&products_id=171
--
※ Origin: 巴哈姆特<bbs.gamer.com.tw> ◆ From: 220-135-28-136.HINET-IP.hinet.n
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.119.141
1F:推 conpo:长知识、专业好文推!需要的人可以参考一下 03/18 11:52
2F:推 AmosYang: 这篇文章 1.值得推荐 03/18 15:16
3F:推 garygod:先推 03/19 00:45
4F:推 aoirx:力生记得被任天堂告倒了,应该买不到了。 03/21 11:35