签到天数: 2049 天 [LV.Master]伴坛终老
|
1。准备工具和资料. q$ s( `2 s" n( t
(1)NEORAINE 1.2.1.0+MK68KDIS.EXE(注:官方NEORAINE模拟器是不附带MK68KDIS.EXE,你要在官方网站另外下载MK68KDIS.EXE,并放在NEORAINE模拟器目录里,下载页面:http://rainemu.swishparty.co.uk/html/download/dev.html)
. n* F" P; w& l1 s# Q+ V/ [(2)十六进制编辑器WINHEX或ULTRAEDIT G2 I/ j8 @0 v1 W! b# Y
(3)68K指令集资料
$ G5 |& V. m% f e: Z0 W4 r0 I(4)笔、纸
7 v/ K' f7 j, X4 y2 |; a# `" u0 U, Q* x
本人以NEOGEOCD《合金弹头2》为例,目标命不减。$ {" q4 I; h( H$ J
$ G% } [& E5 _8 E
2。下载NEOGEOCD版《合金弹头2》,将ISO里面全部文件解压到任意目录下再重新打包压缩成ZIP,因NEORAINE不能提取ISO镜像里面文件出来反汇编,所以要先将ISO里文件解压出来再重新打包压缩成ZIP。
! ]) R+ R9 K5 g$ Z& X5 B9 B
1 f4 z7 M) v5 R8 h# Y8 D3 b3 t3。首先要找到游戏命数存放地址,我已经找到,命数存放地址是:101276
) M9 U' j5 O* ]' l7 z8 B; A* e4 v* H: Q
4。运行NEORAINE模拟器,读取《合金弹头2》ZIP文件,进入游戏后,现在你看到生命数是2,如图1:* D/ [6 n, j: x- Y3 l
0 I; s+ q- q5 @% k8 f! D k
. A o6 y' ~# f5。按ESC键进入NEORAINE菜单选择界面,选择Console,输入watch $101276 1 1回车,这样当有1字节数值1写入生命存放地址时就发生中断,说明一下watch指令格式,watch [read] [adr] [size] [value]* Q# h& {5 i4 D
) m' e, x% G! o) N0 j( d1 C
read不加的话,就是写,adr是地址,size是字节长度,value是数值,数值必须用十进制表示,监视读取101276地址2个字节数据,可以这样打:watch read $101276 2
. C+ B! ?: z! _1 }$ k0 K1 C1 s# | y- v5 B; H, K
要删除断点就输入watch del [n],n是断点编号
. W5 G6 G3 Q8 M& q6 U I6 t8 c' S2 s7 Y7 L& {5 ]
再输入watch查看一下断点是否设置好,提示"watch #0 adr:101276 size:1 read:0",说明一下,#0是断点编号,adr是地址,size是字节数,read是1的读,是0的不读。如图2:
- w5 U: }& p7 @$ x
9 b5 ? y! r' c- \) b0 [4 A4 y# O% p ?
提示:关于其他NEORAINE的控制台指令用法请输入help查看。
' ?& q5 g" d1 Z# x! _/ T+ C8 l, y( }# J# W$ B
6。回到游戏故意死一命后,模拟器发生中断,程式停在000cc086 6400000e BCC $cc096一行,用笔纸记下。如图3:1 Q$ ~9 }& K' _( [( I9 Q
6 T$ l2 ]$ [7 G' D1 w( c4 v2 y' ?
2 v4 O; x& \- i4 H( g. I
7。进入NEORAINE目录下debug目录,你会看到模拟器在发生中断同时在debug目录下生成2个文件。如图4:
- f& Y/ \8 x0 W# R0 A, T& q
. N9 T1 ^3 j* R! m
9 }9 w, Q* |; _! A& e8。用记事本之类软件有S后缀文件,查找000cc086,光标停在000cc086 6400000e BCC $cc096一行,现在来分析一下:1 F8 I; N1 y) l- x' x% U
+ L& i& d% t& |7 Q j$ v4 H6 L8 E, j000cc082 532e0082 SUBQ.B #1,130(A6)" ^! l$ s! F' w& u' @$ r
000cc086 6400000e BCC $cc096" X- m! e! a3 Z8 k* ?' |8 ^* |/ [$ f
+ c& ]6 w6 b. r
留意000cc086的前面一行000cc082 532e0082 SUBQ.B #1,130(A6),查了一下68K指令集资料,这一条指令作用是将130(A6)地址数据减1,结果存入130(A6)地址。# K8 A% d; k2 y- Q$ H4 a6 `
& x9 r8 d) O3 F% _5 T
9。回到模拟器用regs指令查一下寄存器,A6寄存器数据是001011f4,将130换算成16进制是82,再将82和A6寄存器数据相加,82+001011f4=00101276,00101276正好是1P命数存放地址。如图5:: `& @" h9 U5 r' M7 a, f
6 X2 \4 N0 i/ f1 K& N! G1 _" q! A
( t" C7 j# m- M( b0 X' C$ Y) |7 K# ^2 m
10。只要将000cc082 532e0082 SUBQ.B #1,130(A6)这一行指令NOP掉就命不减,关闭模拟器,打开ZIP压缩包将MS2CD.PRG解压出来用WINHEX打开,来到cc082地址,将532e0082修改为4e714e71,保存。如图6、图7(注:4e71是NOP汇编指令机械码):
" T V" B8 f/ b7 R. i' W
8 O0 a$ I$ u" u- ]
0 f- d' m: B) d& ~) ^- p- l' w: S" |$ m& ]7 O
11。将修改好MS2CD.PRG添加进ZIP压缩包里替换,再用NEORAINE打开加载合金弹头2 ZIP文件,测试一下是否命不减了,命不减说明修改成功。如图8:
1 M b( Q1 m! S- C4 t: g. m7 Q8 c7 A
- T0 H" l7 V# [4 G% p) d7 k教程到此结束。
. E# z, t* l$ l* U+ R# H; E8 u+ |0 z: ~
疾风之狼3 ?2 ~; H. f) \- `/ J4 u0 h3 Y
4 O; A6 ?; A7 f; I- G$ Q9 ?2010.3.23 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
2
查看全部评分
-
|