签到天数: 2200 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器" C' @4 q$ S9 C# t Q9 D W. G
' e: H- _- v) z" j! l( MREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html; {4 Z {: O+ h3 P; y* }+ C
! F. q2 {+ Z, E( m以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。, U( o/ c/ Y* W
0 O0 [" F9 Q% p" d: ?本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
8 H9 U" J; q7 K, H: g: _: J& u. Y- c3 i0 z |' Z n
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减# i. z3 d& ]' f) j1 T' p1 W1 X
/ j- e. z; U! V: U; C
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
! T! b0 `% j* j4 \( x: q$ ? l) X( N6 z, P/ A3 G+ g, C7 `
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:1 K- p3 A* f- Q3 j; \3 I
9 m" s6 Y9 X" v) A' u- I: |* c' C; q7 i& [0 x1 X6 X2 _- j" y
左上角框是显示汇编指令,右边是寄存器显示# H+ b- b: ]+ u+ m, A
$ {8 Q3 y6 M& o6 U" D. ~5 wAddress Breakpoints是地址断点
S2 }* w! E, [" f+ N o8 YAddress Range是对一定范围地址设置断点/ X8 m) G8 P* t# p2 }2 T
Register breakpoints是寄存器断点* O( J/ L5 t/ C0 j ]
VDP Breakpoint Range是对VDP一定范围地址设置断点
. V0 ] g% I7 p/ G2 D- e) D jVRAM breakpoints是VRAM断点/ z1 ]; A) V2 Q- X$ U/ r s& l
Go to address是转到指定的地址: c2 L7 c# w |% U3 H! e9 N2 i
show disassembly是对指定的地址反汇编 g4 {% s( J* m, G" w9 c# O
Debug step是进行单步或N步调试1 a W0 J8 d# I% Q& |: W
ROM MEMORY是ROM Viewer, i5 _+ ]# s: V+ G6 z
68000 MEMORY是RAM Viewer, Q7 r' m% o; p g0 i( W
Z80 Debug是Z80调试器
6 ?& v+ w, w) r3 w6 S
$ h1 s2 A( V) U- R3 }9 ` l- ]Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
" H, S1 O# t' h8 A( w# z& z d! F2 O
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
% f) Q5 }0 F; r0 O {- J# J, l
2 m3 _9 f# m. Z6 J8 D3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:8 u, M* l( n' F2 T4 m( A6 x
$ D& a* c0 p; Q0 |1 e2 }$ a/ t' J2 J1 g# s: g
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
9 {" J+ r1 D# Y+ F
+ W! U; |( I" P3 f' @* \
- L; D6 }: v0 `; c# d! ]指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:8 Z* n$ m7 o8 I; f- `% P! U
6 `5 q, s$ }! Q$ e3 g( M5 ^( u3 Z) l: _. J6 T. Q
现在来分析一下:
; w) x) h6 B) F5 G" w% |: kA2=FFFFFA002 @% O. E: a$ x1 q5 y q+ l
D1=000000014 ?7 D( P0 z2 E. O7 Q3 M+ q
1 R, ^/ Z& f2 X" h# S! y& @3 s7 C011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D2 B, O8 v; M) `4 J
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
4 K% h7 h& S' Y7 U. f! W! a0 `% E# [/ @8 r0 U# Q t
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71' r% {1 m$ M: [$ C; P
' G/ Y# F* O$ q0 l$ x5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:1 `5 q# h9 x; y0 T$ _( x; J A
* F' Y* w+ F" U! [8 n: E0 b2 ]: K- p+ i6 u. K% N7 [
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。% ?! B; g, s: l
+ E' M& c" a0 I3 y/ i) G
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
. [( [7 p' Q: i+ ~/ O% @" k& {' f) ?, z9 I0 e: r t% M
# g V7 I4 L3 g
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:$ b! o3 ?9 K$ q+ V
$ \2 j; |' ]/ \, ~- W0 s
5 ^' ~: h9 [6 B5 k8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:1 k( r0 h" l. ~- z+ d
2 H3 `7 r3 Z% h7 Y# j/ _3 j
- H& w. S0 d, @0 Q: J; H0 h7 j( U3 i疾风之狼3 X* r9 Y& \" l
2013/09/13 / G2 ]9 X! ^# T, b* r* }% n
& Q/ E, c! Q& g" }
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|