签到天数: 1934 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
# z9 V" t& k/ }0 e! Q2 b1 l! i% J" K
, g$ V4 b( I. v! l2 r( dREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
& k% a/ A g7 h, t
1 V" w* n$ e7 r$ g7 j" \ v4 n( F以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。2 p& E( L7 U0 T
" K0 n/ V8 N+ O1 M
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。- l$ U6 {! Y" L- E8 i( j4 _ ?
2 g6 N0 `* ]+ M6 f, H以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
& h! L2 {- P( Z1 Q# k& F. N, {! [* q, d( Y
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
m3 z0 G6 E5 ]) l/ ~5 M6 b; O* m1 l) ?6 y
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:1 H& ^( @1 g8 C7 I% y
( n0 y) @& M* H7 \
4 }- f ?3 Y1 M2 s5 r% p0 K5 T左上角框是显示汇编指令,右边是寄存器显示
+ l. v ?" c1 p
# c6 U4 f% } K$ o* YAddress Breakpoints是地址断点$ R! l( y% S( _: K- e Y- d( Z' z; [
Address Range是对一定范围地址设置断点
. M! p3 V5 O# BRegister breakpoints是寄存器断点
4 |5 R4 F3 O" H& kVDP Breakpoint Range是对VDP一定范围地址设置断点
, |/ g2 n* o1 KVRAM breakpoints是VRAM断点
& B: s/ s7 v: o4 R' e: u2 D1 sGo to address是转到指定的地址+ z6 P, J5 [6 U( L- j$ }" h
show disassembly是对指定的地址反汇编
$ N5 A B, q0 V& X5 ?9 W7 |! P2 D8 _9 ODebug step是进行单步或N步调试! g5 L$ p ] C
ROM MEMORY是ROM Viewer
6 N6 P' W% f$ C2 w68000 MEMORY是RAM Viewer7 f9 A2 s+ L. V
Z80 Debug是Z80调试器2 [) c2 z, `( U* L% \# ]
. H" b7 u: T2 _! f
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
+ x) T! D. l" w1 c
) Y r* j/ W7 @3 r9 d, @3 zRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
5 r/ T$ o( t; K _+ g" m4 f
( t# o" H8 `8 c* [# g3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:2 i9 A1 N6 t/ Z! C& R
3 L8 j1 i$ t6 c1 s! G- q; |) H: @% U- F- I! f# u% c
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3: g9 x# ~7 f0 Z8 @) C$ I( Q
9 ~3 I1 m- B$ \8 n2 Z
' J! Y, R% H" `5 H: _' r指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
4 G$ g! S; n. Z! x. ?6 T5 F9 q, q0 X5 p9 e1 e& g
. D, B2 j, |$ `% d. Q( H" b
现在来分析一下: a6 t* }: ?! P
A2=FFFFFA006 a5 V+ Y1 w- p/ n1 n9 f( n: R4 O3 m
D1=000000017 Y+ b) `: j0 K% A! s
# G' g) C2 s+ I+ @
011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
' g; S4 b& U! A* A011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器+ r% t N( k( [
& ~0 _/ }6 k! k& p4 T; c2 T6 ~2 u
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E717 O- }! _/ s# E
: O0 [( n" p: P8 c7 @3 z, e) }
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
8 y, ^/ V s7 V) `6 A" B. y6 ~2 w5 G: Q8 g3 v' H
1 I' Z7 W6 T- S, k
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
( q: z1 q, h. B5 C& ^4 |- h5 G8 x6 v6 o+ y$ W" L
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
6 P* m6 E9 ~/ R, Y$ p9 H' L* @! h! Q( n! A3 H
2 [1 V Z3 X# O; p
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
; }& p- J& I" P a
9 b8 A6 U! }8 R$ D
( `7 D& l6 y6 `3 a: |4 a" x0 v8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:) S0 D" A {3 j7 h) o: p
* f% m' h6 G. `" c
& v; I8 v. v4 S" }) }疾风之狼
; n5 K# r. q8 h+ i6 b2013/09/13
' C+ R/ l2 ^3 G# }- g7 k( G8 U9 i- @& X
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|