帖子搜索:
  • 作者:悦游天下
  • 积分:50027
  • 等级:性感女神
  • 2017/3/18 12:13:59
  • 楼主(阅:32875/回:0)[FC/NES] 红白机 Game Genie Code 金手指码 DIY 教学

    Game Genie 是一种红白机的金手指,
    网路上有不少美版游戏的金手指密码,
    但是日版游戏无法使用, 因此必须透过模拟器 + 日版游戏 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/

    动感游戏,悦享生活!


    目前不允许游客回复,请 登录 注册 发表言论。