签到天数: 2049 天 [LV.Master]伴坛终老
|

楼主 |
发表于 2007-4-21 05:27:43
|
显示全部楼层
2、通过调试跟踪获取指令代码及其在Rom中的地址,并用16进制编辑工具修改ROM其中数据, l2 c, V- Y! Y+ e
偶按照暗器数不减,放雷电必杀不减血,被敌人攻击不减血,一开始拥有99颗暗器雷顺序来教大家如何跟踪调试修改:
0 U) I9 h+ m0 o& C5 |: T) n x! O1 K* Q* R; q
(1)暗器不减:
7 x5 n3 n1 L" z' J/ t3 Z6 x! d! D6 D* g5 {# d
首先打开VirtualNes Debugger并加载赤影战士日版ROM,如图1:
: s, P- R U1 l0 H4 ~! u) l. L5 e
" A* }5 y! s% ^. ]4 J: u8 N$ ^& o接下来游戏进行到获到暗器飞镖20个,如图2:
5 G7 A: _* _4 Q' x3 q% ^ N6 e7 ?* D
接下来开始跟踪飞镖数量,先打开RAM,再打开DEBUG,先打开DEBUG的话,不然RAM就用不来:如图3、图4:/ ]0 {# H# F5 ~1 E
7 R5 i: C! \( g5 s! `4 m先点暂停,根据如下面作弊码提供的暗器数量地址,如暗器数量地址是662,就在注释内出现后面方框中输入[0662](注:可以用这东东当条件断点),再点右边确定让游戏继续运行,如图5:& Z2 w! d2 C+ H" ]/ ^, O$ j
3 C. |3 O1 O, D
[P1 暗器数量]
2 W$ ^, ], h0 I1 \, `/ z# v" gON=662,FF1 y3 ?7 Z2 q' [
, [" ]* k- `" A, \使用一次飞镖,程序会发生中断停在B840这一行,如图6:) q. i1 s7 L) b+ {. N
5 @" {7 n0 ]( t- E$ [+ ?# hB840 : DE 6206 DEC $0662,X;[0662]-- =0x13
$ j4 h: a" I. F# u6 ~# X) n
" C4 V+ ?# H6 {7 d; ^. r! v! C, e& w5 ]查指令表得知B840这个地址DEC $0662,X指令作用是将0662+(X)=真正暗器地址的数值减1;既然这样,只要把这条DEC $0662,X指令改为LDA $0662,X就可以让暗器数量不减了。LDA $0662,X作用是把0662+(X)=真正暗器地址的数值读入寄存器A。(X)是寄存器X的数值。
9 U2 o& ^( S8 H# z" v& c: ]举个例子:假设X寄存器数值是6,指令是“LDA $1234,X” 这条指令看上是将$1234地址数值读入寄存器A,但实际上$1234不是真正数值存放地址,1234必须加上寄存器X的数值才是真正数值存放的地址。1234+(X=6)=123A,LDA $1234,X指令应该是这样解释:将1234+(X=6)=123A地址读入寄存器A。$ P2 X6 Z7 u J& p) `" J* s
LDA xxxx,Y和LDA xxxx,X一样,不过寄存器X变成寄存器Y。
5 E9 p Y; J2 ^: [! o1 y; \/ q6 z* A5 T4 ?
查指令机器码得知DE是DEC - Absolute,X,BD是LDA - Absolute,X,注意寻区方式要一样....把DE修改为BD就可以不减暗器数量了。
5 S9 M/ @% t( o) G3 |( g# a# I, S( C
) a. v! n" k5 ? K3 K& J注意:别把BD修改成其他LDA指令,这样会死机的,因为指令寻区方式不一样。 V( Z: R3 m3 ]" @+ c
/ b! D, K- W4 Q' j- ` } D另外,有一些其他游戏是这样的:改为LDA $XXXX,X 那么就会破坏了寄存器A原来的数据了,后面的程序如果要直接用寄存器A的数值的话,那么就会造成游戏出错,如果后面的程序在用寄存器A的数值之前对寄存器A赋于新值就没事了。
/ o A8 Y8 [4 ^2 Z5 @
\; @9 I; k9 A& ]接下来在RAM中找到B840:DE 62 06,如图7:
5 J3 g9 X9 h* [6 V( g: k) U: i( _& X$ n; y$ D# B9 ]9 h! \
用笔纸抄下红框中数据,以便在查找,接得在RAM中把DE修改BD,如图8:
# U+ S8 v* ~1 x# Y% B' t2 R( v. U8 d) H, z/ |' f3 ]5 u0 x$ o1 o
关闭DEBUG和RAM,回到游戏中测试吓暗器数量是否不减,暗器不减了,说明指令修改成功。如图9:0 n% d3 i/ N+ n0 c |( j
) \% g1 H: g) t( m9 f
关闭模拟器,接下来用十六进制修改工具(如UltraEdit32)修改ROM,还记得之前用纸笔抄下的数据么?7 I& N8 l1 i" f% i; u9 n, F8 f, s
0 j# c2 [ q" @) [+ ]$ @! F
打开UltraEdit32,载入赤影战士ROM,编辑之前按一下Insert把插入方式设为覆盖方式,如图10:. e i1 ?8 q- m6 t
0 |- ~; Q/ h+ D+ }! {' L点击UltraEdit32“搜索”>“查找”,在弹出查找框中查找内容(N)后面方框中输入你用纸笔抄下的数据,再点“查找下一个”就能找到这个数据,如图11: a3 E4 D5 f- { |0 G7 c
, T, ?3 }3 ^- H/ {8 s6 T7 `/ F
如图12,结果出来,UltraEdit32高亮度显示你就是要找的数据,把DE修改为BD,再点“文件”>“保存”保存你修改结果。如图13:
# t1 _) N$ n5 A. f6 t: }) {
9 A3 x. {3 y, v' C! l) l关闭UltraEdit32打开模拟器载入修改后的ROM测试暗器数量是否不减,不减的话说明修改成功了,如图14:
0 F q+ r. _! _5 ~0 M& |) n( y+ P
q3 ^% m. k& T: h6 M$ C暗器雷数量不减修改方法和暗器飞镖数量不减修改方法一样。就不再说了,留给大家练习一下。
% G! r- l3 a% c2 @* J: g v/ I2 u0 R, X" i
[ 本帖最后由 疾风之狼 于 2009-10-14 15:08 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
2
查看全部评分
-
|