签到天数: 1976 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器0 M; g6 B, p' v7 @9 U- L4 G/ J+ D
5 Z! w$ w/ ?/ ^5 e5 k* h/ Q- VREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html% v( j2 m% i; s- ?
5 c: b& M+ ^9 t' a# d1 O以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。- t+ b/ k- h7 G$ u1 W4 }( n, Z
3 N4 {6 k& h- b M$ m( m, @
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
( w1 u, y& F% x! t- d' ~! k- m+ o' i' z0 }. V. L# |; N8 Z
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减' f3 E; d: F5 Q7 E- U
# T C! E1 {3 W- R4 H4 |6 q' b2 Q) A
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
; N2 I* b( b' ^$ G! d3 W
9 z: i1 {: m* k, h, @7 U2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:! Q" a% y+ w3 H# Z( c$ J2 s8 _
( ^3 _2 a6 M9 m# Y/ W& B8 U0 K5 R& p8 b! O) g( j& g
左上角框是显示汇编指令,右边是寄存器显示
) Q! k) l$ Y$ ]) [: Q- S9 b$ L* H6 }
Address Breakpoints是地址断点+ r) \: Q1 g# z) f
Address Range是对一定范围地址设置断点
2 G' N$ \8 d8 D! r; K. M" lRegister breakpoints是寄存器断点
& E9 Q% w) a8 A8 Q/ z# e5 }VDP Breakpoint Range是对VDP一定范围地址设置断点2 v. W' O4 F4 y( ]0 W
VRAM breakpoints是VRAM断点# F0 K5 |# `8 b4 [" n+ m
Go to address是转到指定的地址6 l) d. y5 I) o/ }, r
show disassembly是对指定的地址反汇编& W# X" ^: Z/ r; {
Debug step是进行单步或N步调试% i$ h2 z! S T( j
ROM MEMORY是ROM Viewer
3 P' m4 q4 q) a+ m1 e68000 MEMORY是RAM Viewer$ _# g, L/ o7 E! C
Z80 Debug是Z80调试器
9 J* F+ _( O z8 R5 {' ^7 C3 S9 K0 h4 w' \9 _
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)# E9 b) S* N& H4 e
% ^; o3 `1 s" Y' I3 S: m( A7 gRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启3 ~( u8 n6 @% m: l1 T+ ^& b0 K
) _, \6 f. b$ D+ o+ m/ u! r! m/ s
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
: M( Z. \; t( _
9 O# B8 |/ t6 d
& K* P3 ^- @& z4 `+ v- M2 F0 ~% Y* z4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
6 ?+ |) z% K9 [5 l2 d
; x9 o7 u3 x8 f( I t* f. @. N
& z6 Q) a8 ^+ o* y) V: j+ i9 I2 A指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
# X+ y( f4 _4 u3 ?4 N& z6 i
\. G3 @3 p- O) Y# A, e1 _/ x' k! r6 s0 |6 c9 \# B- W
现在来分析一下:
' G4 M i5 f8 v* @. pA2=FFFFFA00+ A, `% D0 F$ E; @# L7 V2 ]3 w
D1=000000012 U3 A' `" H/ r) j' M. F; ?' I
% B& T- i7 `, t/ l7 L
011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
2 {5 o2 n* w: X3 x* | n. S011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
- Q4 `1 W* c+ N. h. J% ~
- C3 t0 b" L9 A' V9 p只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E719 ^/ K/ o! a6 F' e0 C
1 u- P" M6 U4 K; S) _% O3 l5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
4 C: q1 _$ C* }. ?+ w# f! k0 _$ r% H/ [: U
( @! e5 s6 A5 N$ K' U& x) k/ ?# ]5 B* w注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
: R! l/ F+ l5 t" z% D
6 a/ @ `& F( h6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:+ Y2 G/ k/ I. C4 r# w: b) |
- u+ _$ j7 p2 ?# W. ~/ f" C, e& ]8 t: w# i" P; a
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:- ?, H8 e: J5 J
- k( l$ l: c) v m5 v: l
! d( a5 l0 z" p+ l# s/ u& d! a" g8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
: G* ~6 ]2 j' F _" a& a/ q3 ~, n: ?* Q# n. Z
9 ~4 K+ J5 |% g- @9 J
疾风之狼
. e! ^$ U6 g- l4 I/ A2013/09/13 * w0 }9 T: h1 B# B8 x
( ?- p! C! E% C7 h' U
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|