签到天数: 1952 天 [LV.Master]伴坛终老
|
1。准备工具和资料
3 U4 x% E% I' P! E( z(1)NEORAINE 1.2.1.0+MK68KDIS.EXE(注:官方NEORAINE模拟器是不附带MK68KDIS.EXE,你要在官方网站另外下载MK68KDIS.EXE,并放在NEORAINE模拟器目录里,下载页面:http://rainemu.swishparty.co.uk/html/download/dev.html)
/ X7 e3 q9 s- G2 g8 |% b/ k(2)十六进制编辑器WINHEX或ULTRAEDIT
: b# o! ?: Q- u0 N; I8 j* a(3)68K指令集资料
" i# o' B+ s& |, i6 m(4)笔、纸9 A0 F" p/ i U1 F
- W, Q+ ^' @/ l+ g本人以NEOGEOCD《合金弹头2》为例,目标命不减。7 U* Y# l$ g! h
" `1 d" |$ h" J. {4 K2。下载NEOGEOCD版《合金弹头2》,将ISO里面全部文件解压到任意目录下再重新打包压缩成ZIP,因NEORAINE不能提取ISO镜像里面文件出来反汇编,所以要先将ISO里文件解压出来再重新打包压缩成ZIP。
% Y2 t2 F/ | u- t2 C$ a: l' S0 q9 L: h+ [" }$ H" u
3。首先要找到游戏命数存放地址,我已经找到,命数存放地址是:101276
2 a4 M7 L6 }9 c5 ^ c; Q. _9 H. }, T4 ?: d6 G, Y3 j
4。运行NEORAINE模拟器,读取《合金弹头2》ZIP文件,进入游戏后,现在你看到生命数是2,如图1:
3 e/ C$ V9 Q4 Z& L G3 J
3 Y& M8 P! f$ f, |* B. I; K# W6 d% z. ]
5。按ESC键进入NEORAINE菜单选择界面,选择Console,输入watch $101276 1 1回车,这样当有1字节数值1写入生命存放地址时就发生中断,说明一下watch指令格式,watch [read] [adr] [size] [value]
, h$ _3 \8 r) Q1 R6 o: r1 b6 J$ j4 [. P4 d: A
read不加的话,就是写,adr是地址,size是字节长度,value是数值,数值必须用十进制表示,监视读取101276地址2个字节数据,可以这样打:watch read $101276 2/ x" q' x8 ?8 j
3 w- ]. p3 ^1 o! w0 z
要删除断点就输入watch del [n],n是断点编号9 B" m" j0 k& I& h- j
4 |4 K. Q( ]3 o* w
再输入watch查看一下断点是否设置好,提示"watch #0 adr:101276 size:1 read:0",说明一下,#0是断点编号,adr是地址,size是字节数,read是1的读,是0的不读。如图2:
5 w; M7 y) k" U" t1 M) X3 v
, \0 P# i8 Z# ?. r# z" D( x* P7 ^& x" \' J( M! D3 u
提示:关于其他NEORAINE的控制台指令用法请输入help查看。
+ o, {4 n/ [! i( c/ {1 Q- |2 r! w( t$ s% {0 ?# b' W8 G& ?5 X
6。回到游戏故意死一命后,模拟器发生中断,程式停在000cc086 6400000e BCC $cc096一行,用笔纸记下。如图3:
3 N$ ~) \! c* G6 R* V& ~$ V3 N0 v$ d0 d8 B/ t7 H
' S2 X1 M3 @& G9 Y
7。进入NEORAINE目录下debug目录,你会看到模拟器在发生中断同时在debug目录下生成2个文件。如图4:
; l3 L3 @8 i; O( n
9 g! w) m3 Q E. F/ k. F; Z: ]# k9 c( o, z; E" x9 z3 G& D2 C. B
8。用记事本之类软件有S后缀文件,查找000cc086,光标停在000cc086 6400000e BCC $cc096一行,现在来分析一下:
. e/ o; L b) W7 l% n2 {: r
/ N5 H4 z, g; C* e) L; j000cc082 532e0082 SUBQ.B #1,130(A6)
- l2 N1 N( b) b6 A2 }" B000cc086 6400000e BCC $cc096
, y8 @3 m8 d8 {6 Z3 x, s6 Y m1 P" u8 G, l; P D7 \9 j
留意000cc086的前面一行000cc082 532e0082 SUBQ.B #1,130(A6),查了一下68K指令集资料,这一条指令作用是将130(A6)地址数据减1,结果存入130(A6)地址。
% B2 f& Y" y6 c- @5 [1 N( s" V) W) B- n' s
9。回到模拟器用regs指令查一下寄存器,A6寄存器数据是001011f4,将130换算成16进制是82,再将82和A6寄存器数据相加,82+001011f4=00101276,00101276正好是1P命数存放地址。如图5:
$ D. o: B# m9 U( J2 X( B3 Y
8 N& s- Y) A$ h" c5 E- o
0 M8 X7 t( q2 F! C! m: k10。只要将000cc082 532e0082 SUBQ.B #1,130(A6)这一行指令NOP掉就命不减,关闭模拟器,打开ZIP压缩包将MS2CD.PRG解压出来用WINHEX打开,来到cc082地址,将532e0082修改为4e714e71,保存。如图6、图7(注:4e71是NOP汇编指令机械码):
( }7 b [/ F1 U/ { a4 Y" r# D8 }$ z% Z$ L9 a6 y. k, |
& _. s1 C3 X, u; l( n
$ x5 r) k) U [; V( F
11。将修改好MS2CD.PRG添加进ZIP压缩包里替换,再用NEORAINE打开加载合金弹头2 ZIP文件,测试一下是否命不减了,命不减说明修改成功。如图8:% w' j: D3 [, ~: d/ p
/ \; n0 w( x& _" C) X) y
% Z; n' L7 i/ }* c" f教程到此结束。3 q! y' B4 V9 W0 c1 Y. |5 T
, N: X/ w4 Z6 v# t* }" p疾风之狼
5 {# ^3 Y" P0 z2 b' g" R9 |9 ]/ x
1 ` F- c. d1 u+ [+ ^0 ~2010.3.23 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
2
查看全部评分
-
|