签到天数: 1933 天 [LV.Master]伴坛终老
|
1。准备工具和资料
% X! S+ r- Q& B; S0 ](1)NEORAINE 1.2.1.0+MK68KDIS.EXE(注:官方NEORAINE模拟器是不附带MK68KDIS.EXE,你要在官方网站另外下载MK68KDIS.EXE,并放在NEORAINE模拟器目录里,下载页面:http://rainemu.swishparty.co.uk/html/download/dev.html)
$ Z% v5 d( m( R(2)十六进制编辑器WINHEX或ULTRAEDIT! P {7 Y" B' A% E1 D: O
(3)68K指令集资料0 c6 E8 ~; O+ Y. u
(4)笔、纸
" K8 I8 a/ t. c" A U* L) H2 `
) N" y2 ^3 t+ A0 [# i, d7 m本人以NEOGEOCD《合金弹头2》为例,目标命不减。
( A+ Q/ \& q" O# t/ q, @7 w
/ e6 n! o$ E7 ? W' X' D! o( r2。下载NEOGEOCD版《合金弹头2》,将ISO里面全部文件解压到任意目录下再重新打包压缩成ZIP,因NEORAINE不能提取ISO镜像里面文件出来反汇编,所以要先将ISO里文件解压出来再重新打包压缩成ZIP。) ?0 O, Y, t* {* t- w2 G: B
* p' n1 B: K/ y# x( F4 s6 `! K
3。首先要找到游戏命数存放地址,我已经找到,命数存放地址是:101276
$ h5 \* I( i5 ~/ ?1 o& g5 ^: }
8 p$ r5 z$ @( v8 L9 s4。运行NEORAINE模拟器,读取《合金弹头2》ZIP文件,进入游戏后,现在你看到生命数是2,如图1:
% u5 X- [' S: w* ^- y/ f1 d- s; R2 C; o7 m, k
9 ?) e2 ^4 r. ?5。按ESC键进入NEORAINE菜单选择界面,选择Console,输入watch $101276 1 1回车,这样当有1字节数值1写入生命存放地址时就发生中断,说明一下watch指令格式,watch [read] [adr] [size] [value]
4 ^5 i8 m' L0 m) j
5 q0 G3 z0 g2 j7 u3 s1 }9 Vread不加的话,就是写,adr是地址,size是字节长度,value是数值,数值必须用十进制表示,监视读取101276地址2个字节数据,可以这样打:watch read $101276 2
& q( ]: d+ Q8 y: d! e7 q
4 _2 } D. G! W, k& b要删除断点就输入watch del [n],n是断点编号
- r: B! E( K* G2 c& B+ l, Q* c3 z/ k- t7 m2 }$ J' m
再输入watch查看一下断点是否设置好,提示"watch #0 adr:101276 size:1 read:0",说明一下,#0是断点编号,adr是地址,size是字节数,read是1的读,是0的不读。如图2:
( P$ M) W1 I/ X, U( f6 ~3 Y- J) ]& `% y! V
/ q4 c% @0 I8 x2 a/ [1 t/ b提示:关于其他NEORAINE的控制台指令用法请输入help查看。
. v$ e6 |2 N; `, {; E. e8 T) A3 P$ C4 k9 L' j
6。回到游戏故意死一命后,模拟器发生中断,程式停在000cc086 6400000e BCC $cc096一行,用笔纸记下。如图3:7 L5 F% ^0 {/ n# R6 j8 ~2 X$ B
# M( i+ x i' R; i0 q- v: o( o6 }0 a! a& C
7。进入NEORAINE目录下debug目录,你会看到模拟器在发生中断同时在debug目录下生成2个文件。如图4:
' m$ N( U, q+ k& Z# b$ P& i3 A
# ^9 ?9 _4 W+ B( W* D7 k5 }; L# c9 e! z7 Q
8。用记事本之类软件有S后缀文件,查找000cc086,光标停在000cc086 6400000e BCC $cc096一行,现在来分析一下:
, }2 R/ l3 A$ x6 E
4 u' _5 M0 x8 i& S" w- l) K000cc082 532e0082 SUBQ.B #1,130(A6)" G0 D( ~: P. r$ a: O. I0 Q
000cc086 6400000e BCC $cc096
' e4 Q% l5 D$ i6 \/ l! J* @
9 q! ~5 y2 C5 L9 D, B+ s留意000cc086的前面一行000cc082 532e0082 SUBQ.B #1,130(A6),查了一下68K指令集资料,这一条指令作用是将130(A6)地址数据减1,结果存入130(A6)地址。6 Z1 L/ O+ a j; Q+ I- [% T- ^1 X6 S
* }2 | t& D' V9。回到模拟器用regs指令查一下寄存器,A6寄存器数据是001011f4,将130换算成16进制是82,再将82和A6寄存器数据相加,82+001011f4=00101276,00101276正好是1P命数存放地址。如图5:
8 I) u6 Q ~9 `" C4 Z
% u! p$ U& I* \9 ?( L" K1 t$ T/ L0 \
- T+ M& k$ Q# J. R' ^( O0 _3 V4 h10。只要将000cc082 532e0082 SUBQ.B #1,130(A6)这一行指令NOP掉就命不减,关闭模拟器,打开ZIP压缩包将MS2CD.PRG解压出来用WINHEX打开,来到cc082地址,将532e0082修改为4e714e71,保存。如图6、图7(注:4e71是NOP汇编指令机械码):
: c, t; @8 Q3 ~1 r: ]. O
# @3 Y( m# K0 @) j" s5 }7 r0 ~) s$ s! y. M/ z+ g
4 _9 v5 e, R* g2 k+ L11。将修改好MS2CD.PRG添加进ZIP压缩包里替换,再用NEORAINE打开加载合金弹头2 ZIP文件,测试一下是否命不减了,命不减说明修改成功。如图8:
' k; C, A3 D+ i
7 ^6 s* w3 q% f5 W: q! t" s; ?4 W5 P3 `
教程到此结束。* I g ], z9 R5 g: w. D" V
! i( c$ I4 ~4 A2 W; Q疾风之狼4 W+ U6 H \: Q& B# E0 s$ ^1 i7 X
* r5 H: r5 n2 n2 f$ ^0 T2010.3.23 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
2
查看全部评分
-
|