2008-11-28 | 来源:互联网 | 小编:疾风之狼 | 人看过
本文教大家如何修改GB游戏,偶以GB《忍者龙剑传》日版为例,修改目标是命不减
准备工具:调试器BGB,Z80指令集资料,WINHEX或UE等十六进制编辑工具,纸笔
先找到GB《忍者龙剑传》日版命数存放地址,偶找到了,命数地址是:C09C
原创文章出处 http://bbs.emu999.net/thread-39192-1-1.html
开始罗
(1)打开BGB模拟器,如图1:
(2)在BGB模拟器窗口中右键点击,在弹出菜单中选择“Load rom...”载入《忍者龙剑传》的ROM,如图2、图3:
(3)进入游戏后,看到主角命数是2,如图4:右键点击在弹出菜单中选择“pause”暂停游戏
(4)在模拟器窗口中按右键,在弹出菜单中选择“other”>“debug mode enabled”,开启debug模式,再在菜单中选择“other”>“debugger”,如图5:
(5)解除暂停,弹出如图6窗口:
(6)接下来设置断点,在图6窗口中选择“Debug”>“access breakpoints”,弹出如图7窗口:
偶说明一下access breakpoints窗口中各项作用:
addr range左边方框是输入地址,value左边方框是输入数值,on read是读取,on write是写入
Add是添加断点,Delete是删除断点,Replace是用修改已经设置的断点地址和数值,修改断点方法:先选中已经设置好的断点,再在下方addr range和value方框内输入你要修正的地址和数值,再点击Replace OK!
Disable是关闭断点,Enable是激活断点
(7)偶知道忍者龙剑传主角的生命地址是C09C,命数是2,偶在addr range方框输入C09C,value方框输入01,并在on write选项前打勾,再点Add完成断点设置,如图8:
(8)之后回到游戏中死掉一命后,模拟器会自动中断停在ROM0:131D EA 9C C0这一行,如图9:
(9)接下来分析一下:
ROM0:1319 FA 9C C0 ld a,(c09c)->将c09c地址数值载入到累加器a
ROM0:131C 3D dec a ->将累加器a的数值减1,结果存入累加器a,将此指令修改成NOP就变成命不减了。
ROM0:131D EA 9C C0 ld (c09c),a->将累加器a的数值载入到c09c地址
如果要想命不减,只要把dec a指令nop掉就OK了。
记下FA 9C C0 3D EA 9C C0,备用。
(10)选中ROM0:131C 3D dec a这一行右键点击,在弹出菜单中选择“Modify code”,如图10:
(11)在弹出窗口中方框输入nop,再点OK退出,指令修改完毕。如图11:
(12)ROM0:131C这一行指令发生变化,dec a变成nop,3D变成00,如图12:
(13)解除断点,回到游戏中多死几次看看效果,是否命数不减了.....呵呵,如图13:
(14)命数不减修改成功了。接下来打开WINHEX加载GB《忍者龙剑传》ROM,还记得之前抄下数据么?查找FA 9C C0 3D EA 9C C0,找到后把3D修改00,保存退出WINHEX,完成。
顺便说一下Z80的NOP指令机械码是00。
教程至此完成。
BY 疾风之狼
2008.11.28