签到天数: 1945 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器5 X# E5 \* k' L: ]8 N. w
& Y! x# O% Z* z. ~% j$ n9 Y9 ~
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html" c* c) w3 G, T( ?+ E! V
: A% Q/ W+ P5 s3 y以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
1 |9 U6 O g0 e7 [2 ^2 J4 ]8 l( P) r y! r3 f
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。" G4 {! S6 L; g( d5 w* X& l- |
8 D) j" G( `" N2 Z& j
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
! k5 t4 J3 D! r9 p/ O$ [- s7 f
- k! }# z: }$ Q' ]% B1 R: R9 x# o1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。% C& F! D, Y! e E. f
% B6 O+ b% J8 T, B2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
) l4 W6 ], N0 ~4 K5 u0 I4 ^ u7 y7 p4 M5 m8 X O" ]0 K
' I9 C2 M1 z. j7 m左上角框是显示汇编指令,右边是寄存器显示, d D1 S( x& h$ m% I
0 D, b2 P# C( P' sAddress Breakpoints是地址断点2 C& j0 ? J) C5 h" l4 P
Address Range是对一定范围地址设置断点+ T3 T# d7 M7 J* }$ j
Register breakpoints是寄存器断点
: C/ o0 x5 \, Y! j9 U% }VDP Breakpoint Range是对VDP一定范围地址设置断点5 ~( @+ H# {7 n9 s8 Z! |) H0 ]
VRAM breakpoints是VRAM断点
% ^ p5 ^! `7 C5 ~7 k5 FGo to address是转到指定的地址' t o3 K; h. k1 B+ ]. k
show disassembly是对指定的地址反汇编5 j1 P1 G; p I/ Y J8 W5 }: t$ W
Debug step是进行单步或N步调试7 k3 s7 U6 a1 y, _3 C
ROM MEMORY是ROM Viewer0 B' |" k, m/ h
68000 MEMORY是RAM Viewer, s( e, X- o0 q8 A/ E7 X. }4 N
Z80 Debug是Z80调试器
* F) J, t* J# v0 l9 K3 G( B% @5 I
" B) F6 c* P0 ]! l1 A2 C- }$ _Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
* @% U* G' ^/ a. \) @- p
, b1 Z# U& D+ gRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
0 \* c* S$ Y# f# s/ z! B7 N0 A/ @& g) G4 h3 X- d
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:$ D* _6 b# z" m6 J, z( i8 o- d
& h1 n, [2 V6 v' ?$ W
% ~ {7 |1 o: d6 T) ^8 F4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:2 B8 J) Y u4 R- a# t8 h
1 W- j' @3 a1 _" ~. K' W1 t7 M0 Q* m- _) V& ]- n
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:* r) { l' A) K- k& \: a+ e1 s
" [% k5 ?0 J5 T9 X; e. L2 h* E* w4 S
1 h) m3 o' \- f8 I: g" E现在来分析一下:
& ~. C' R- ?3 L# ~A2=FFFFFA003 g3 d- c5 ^( v
D1=000000017 k$ r) {5 b+ g+ `4 t$ f
9 K- p; {8 e2 s2 Q! C- d1 c/ f5 f011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D4 x- M7 o% c) }
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器$ R# X0 u) ~" {
2 I8 C# ~( X( P+ \
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E711 \" H4 L$ J9 M6 p
0 D& |$ s2 E) y3 M6 }- s5 t
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
- I9 z) R F. B8 S* d! v% J8 B: Q$ E
! x& }1 l2 O% k注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。' H8 p9 i0 T0 W/ m$ J: q C- D
: g% p" ?% V# A# C6 [
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
) z; c! @0 Y5 q* S: N6 ^; | W6 g5 I$ G
' L) B' ]# B3 C) ?# s: q6 p7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
5 T, \+ V0 a2 n8 b# K+ c" v5 T& E* `- R2 ]" z0 j6 m+ ?
% X* w& z3 K. m, [& u
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:5 @: }" [ ?) R& F' j( Y
, s5 x+ g) i( l7 b. n! L0 R& ^" |
" j0 H, L ?6 N: x+ ?& d4 i
疾风之狼( a& J+ X8 k& e/ ]4 i1 S# {5 D
2013/09/13
( P `% a [- L1 ]3 P7 y4 V V1 c) |) M+ B* ^
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|