签到天数: 2189 天 [LV.Master]伴坛终老
|
1。准备工具和资料1 P' M4 ` t7 R7 \: E h( G z
(1)NEORAINE 1.2.1.0+MK68KDIS.EXE(注:官方NEORAINE模拟器是不附带MK68KDIS.EXE,你要在官方网站另外下载MK68KDIS.EXE,并放在NEORAINE模拟器目录里,下载页面:http://rainemu.swishparty.co.uk/html/download/dev.html)& }7 y0 ~# u! q1 e) @2 G6 y
(2)十六进制编辑器WINHEX或ULTRAEDIT
& B/ M' ^* H- B' C: f H(3)68K指令集资料0 l, f- `3 z S/ R; V0 m2 w
(4)笔、纸( S' i/ n, D+ u0 {5 X, a! J6 W0 w
: ?4 K; [1 \; b本人以NEOGEOCD《合金弹头2》为例,目标命不减。0 q) E( j9 N- w- \) a4 p
+ u0 ]1 T' t O8 r# ^
2。下载NEOGEOCD版《合金弹头2》,将ISO里面全部文件解压到任意目录下再重新打包压缩成ZIP,因NEORAINE不能提取ISO镜像里面文件出来反汇编,所以要先将ISO里文件解压出来再重新打包压缩成ZIP。) B# {# f7 B7 d I" H. L" C
, s. k9 |" u1 P. ~: V7 ?( {
3。首先要找到游戏命数存放地址,我已经找到,命数存放地址是:1012763 j* S) L) i8 r: d& @" M" b
) t0 S( `5 y$ d8 N/ \4。运行NEORAINE模拟器,读取《合金弹头2》ZIP文件,进入游戏后,现在你看到生命数是2,如图1:. i' Z: y" m0 R! w6 r- J5 j, s
# t( T6 k# R3 n; P0 W& v* T; Y
* A4 f% ]5 I& P! {. D* R2 z% `4 g6 a5。按ESC键进入NEORAINE菜单选择界面,选择Console,输入watch $101276 1 1回车,这样当有1字节数值1写入生命存放地址时就发生中断,说明一下watch指令格式,watch [read] [adr] [size] [value]3 _: ^& H* [/ {+ s: Q4 o' R% Q3 d
1 `. d$ g; `# j% B5 I$ E
read不加的话,就是写,adr是地址,size是字节长度,value是数值,数值必须用十进制表示,监视读取101276地址2个字节数据,可以这样打:watch read $101276 2
' k: x! L* w- s v# D4 p* L. ~, B# r" Z& ^: ]
要删除断点就输入watch del [n],n是断点编号/ B7 m: ~( j& o2 i
7 T6 \7 ~# g9 N2 x: E& t; K' H: r5 q再输入watch查看一下断点是否设置好,提示"watch #0 adr:101276 size:1 read:0",说明一下,#0是断点编号,adr是地址,size是字节数,read是1的读,是0的不读。如图2:9 r7 J* }) p" c5 A% p4 K
]6 c% `5 Z1 Y/ X, Q5 ]$ Q6 V( X
" v s Y4 K3 C6 v8 O提示:关于其他NEORAINE的控制台指令用法请输入help查看。
5 n O7 F- P, L/ s# w/ h8 p/ {/ S: `3 M7 s! t. O
6。回到游戏故意死一命后,模拟器发生中断,程式停在000cc086 6400000e BCC $cc096一行,用笔纸记下。如图3:
0 R7 E5 G5 p, C7 H8 }& L$ N B" @; j
& R8 h6 ]0 A& Y! U7。进入NEORAINE目录下debug目录,你会看到模拟器在发生中断同时在debug目录下生成2个文件。如图4:
! Q5 A* l& K: x9 k1 d
0 g6 A8 Z- p- [) u3 l2 d1 {2 E b% h+ x
8。用记事本之类软件有S后缀文件,查找000cc086,光标停在000cc086 6400000e BCC $cc096一行,现在来分析一下: V& J. f2 Z. F$ u; g
% h2 f! p$ B* a8 t- c& d000cc082 532e0082 SUBQ.B #1,130(A6)% B% I7 B: @* r4 ^- s' v' i* u+ E
000cc086 6400000e BCC $cc096+ B: a+ t- n" q7 v0 I" ^# o
1 y7 J/ W& S2 J% |, | p' p) E留意000cc086的前面一行000cc082 532e0082 SUBQ.B #1,130(A6),查了一下68K指令集资料,这一条指令作用是将130(A6)地址数据减1,结果存入130(A6)地址。
( @* n2 ^+ a) Q. l7 L3 G* U) M1 _7 J/ o) @3 \2 B- U# P% ^
9。回到模拟器用regs指令查一下寄存器,A6寄存器数据是001011f4,将130换算成16进制是82,再将82和A6寄存器数据相加,82+001011f4=00101276,00101276正好是1P命数存放地址。如图5:
0 k4 `" F' J' C: s" h
. @1 E( Y" T4 {2 h+ o0 w; }# _
1 {, u! O" [- J10。只要将000cc082 532e0082 SUBQ.B #1,130(A6)这一行指令NOP掉就命不减,关闭模拟器,打开ZIP压缩包将MS2CD.PRG解压出来用WINHEX打开,来到cc082地址,将532e0082修改为4e714e71,保存。如图6、图7(注:4e71是NOP汇编指令机械码):
9 G8 g: d5 @" e" Z! I8 n' T, Z
) Y$ p* m2 b' |/ T2 ]+ E( J7 x- |* p
' p; A6 u/ f3 N. K
# j, P; }- \) |# q+ K( s" M# M11。将修改好MS2CD.PRG添加进ZIP压缩包里替换,再用NEORAINE打开加载合金弹头2 ZIP文件,测试一下是否命不减了,命不减说明修改成功。如图8:! I& a& x7 _7 g7 ]5 H
0 [7 K) C% d$ O6 G+ N; x2 ?! d! [4 b. p
教程到此结束。( B; e( E: |- \; H
5 M. _* E1 t; }# Z疾风之狼
) Z: G0 Y$ R' X- }! k5 k' u8 t% a
5 p" L5 e+ g: ^4 ]/ B2010.3.23 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
2
查看全部评分
-
|