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

楼主 |
发表于 2007-4-21 05:27:43
|
显示全部楼层
2、通过调试跟踪获取指令代码及其在Rom中的地址,并用16进制编辑工具修改ROM其中数据+ g7 u' k/ b5 H
偶按照暗器数不减,放雷电必杀不减血,被敌人攻击不减血,一开始拥有99颗暗器雷顺序来教大家如何跟踪调试修改:: _6 [- S( J$ R* f
+ u5 D/ [7 A$ E( _, S) I% j: q/ Z/ T(1)暗器不减:% [: H! }, i4 T" s% L
# l8 k: i j& O r! b
首先打开VirtualNes Debugger并加载赤影战士日版ROM,如图1:, n+ t' h; T4 K2 m9 n. Z
0 c6 p* |. i# v- ?接下来游戏进行到获到暗器飞镖20个,如图2:
" R7 u" t5 r% q' ~) C4 z8 a* I ^" G) d" a: c
接下来开始跟踪飞镖数量,先打开RAM,再打开DEBUG,先打开DEBUG的话,不然RAM就用不来:如图3、图4:
8 }7 c8 g( _2 C) S
) I B( x; x# b3 k4 {4 U0 @先点暂停,根据如下面作弊码提供的暗器数量地址,如暗器数量地址是662,就在注释内出现后面方框中输入[0662](注:可以用这东东当条件断点),再点右边确定让游戏继续运行,如图5:$ [2 `/ ^. k8 T, r) d
& G' r6 {2 M7 @. y- t) ^# W/ P
[P1 暗器数量]
0 N4 @, b$ f6 z/ f# G, b' cON=662,FF
! E2 d8 s) Q* @& h1 D9 r" [; X2 r; d: x9 T& L3 W" `
使用一次飞镖,程序会发生中断停在B840这一行,如图6:, ~9 C) V: i7 v0 k
. K+ U! e3 r$ fB840 : DE 6206 DEC $0662,X;[0662]-- =0x13& z) F' m; j# U& w0 V; S( ~8 f
; B c, `: c9 l8 T, h. t
查指令表得知B840这个地址DEC $0662,X指令作用是将0662+(X)=真正暗器地址的数值减1;既然这样,只要把这条DEC $0662,X指令改为LDA $0662,X就可以让暗器数量不减了。LDA $0662,X作用是把0662+(X)=真正暗器地址的数值读入寄存器A。(X)是寄存器X的数值。, p4 e* }- h* g4 E+ t+ n9 W6 c
举个例子:假设X寄存器数值是6,指令是“LDA $1234,X” 这条指令看上是将$1234地址数值读入寄存器A,但实际上$1234不是真正数值存放地址,1234必须加上寄存器X的数值才是真正数值存放的地址。1234+(X=6)=123A,LDA $1234,X指令应该是这样解释:将1234+(X=6)=123A地址读入寄存器A。+ [% u% h. k0 t6 Q A6 c
LDA xxxx,Y和LDA xxxx,X一样,不过寄存器X变成寄存器Y。" F; U3 _; x7 Z' S4 J/ J5 o8 Z
' [- i8 M8 m+ r/ V, {/ ?* Q( J2 Y5 X查指令机器码得知DE是DEC - Absolute,X,BD是LDA - Absolute,X,注意寻区方式要一样....把DE修改为BD就可以不减暗器数量了。 _7 i) S/ V1 A7 X( ~' k
# z( I. h; W2 F1 S/ Q5 o- \
注意:别把BD修改成其他LDA指令,这样会死机的,因为指令寻区方式不一样。
' Q% `' X6 ^" N! n% {4 |- I0 y. K; Z# G$ m- h! p3 U
另外,有一些其他游戏是这样的:改为LDA $XXXX,X 那么就会破坏了寄存器A原来的数据了,后面的程序如果要直接用寄存器A的数值的话,那么就会造成游戏出错,如果后面的程序在用寄存器A的数值之前对寄存器A赋于新值就没事了。4 O4 s5 h9 T5 e$ R8 L" s* Q1 R4 y Y
: g* `' e0 O4 G9 R, ]+ P/ r接下来在RAM中找到B840:DE 62 06,如图7:
& p, t( k" Q" h% Q( ?: K9 U6 s) i/ l
( ?: ^7 i; h# k用笔纸抄下红框中数据,以便在查找,接得在RAM中把DE修改BD,如图8:9 o* k! H; k5 f+ M8 R: z: ], ~
" Q( h0 P( v$ a# p2 I
关闭DEBUG和RAM,回到游戏中测试吓暗器数量是否不减,暗器不减了,说明指令修改成功。如图9:
( }; G; C2 X, W% r Z" `' T- Q( Q* U& F' z
关闭模拟器,接下来用十六进制修改工具(如UltraEdit32)修改ROM,还记得之前用纸笔抄下的数据么?
( D8 C( u! n1 i/ F0 `" P+ L& H2 P- G
打开UltraEdit32,载入赤影战士ROM,编辑之前按一下Insert把插入方式设为覆盖方式,如图10:% C# W; |( g e" a3 \
9 f' Y& d* N! K7 @
点击UltraEdit32“搜索”>“查找”,在弹出查找框中查找内容(N)后面方框中输入你用纸笔抄下的数据,再点“查找下一个”就能找到这个数据,如图11:
6 p v( \* n4 @% j/ Z( i# B8 N: @9 A8 L" O
如图12,结果出来,UltraEdit32高亮度显示你就是要找的数据,把DE修改为BD,再点“文件”>“保存”保存你修改结果。如图13:
5 b4 n; Y! Q/ l2 B r( n4 X- \! ?, B, {
, m/ p% [, p3 E ]关闭UltraEdit32打开模拟器载入修改后的ROM测试暗器数量是否不减,不减的话说明修改成功了,如图14:' a/ E. C0 O P: a/ U# Q. L7 N
3 o" L4 J% r' Y( z
暗器雷数量不减修改方法和暗器飞镖数量不减修改方法一样。就不再说了,留给大家练习一下。 |' c1 f$ L3 k7 c" K- m4 d
X9 U" w6 H' B# m- V5 j8 e" l[ 本帖最后由 疾风之狼 于 2009-10-14 15:08 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
2
查看全部评分
-
|