签到天数: 2051 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器' f) S% L& n7 i: h4 A8 m1 T
; T; \1 E! T' e$ A4 ]7 c
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html' O' h4 ^! s7 ^
$ m2 J$ G. K6 B9 m8 k以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
6 q+ i: J9 ?8 x8 Z" J* Y$ S* T. N# h8 q6 Z' c: R3 g
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
; a% G! K' c6 b6 ~, F/ v. K1 m* n! B0 |0 J- h. ?: |8 c! M& E
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
- f/ q. m1 v" u; g7 M: X
# ?: X2 T v' w6 W& y S a- B3 }1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
. q. a% F# z4 @
8 ~0 j" o) v7 j$ Y# L2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
w, o0 t7 P1 p; x0 ~) @$ _$ k" F9 L& z7 q
" s: ~+ O+ V9 m' d. e0 H Z! V; l7 ]
左上角框是显示汇编指令,右边是寄存器显示
[9 w9 ~) {& r& Y4 r$ v# W$ \
: {1 F6 G% _# g3 q0 b o; kAddress Breakpoints是地址断点
( i: ?3 f+ T& F% YAddress Range是对一定范围地址设置断点
; [9 t" f) A- f+ D6 w+ o1 h/ K! \% ?. fRegister breakpoints是寄存器断点7 c+ j( f9 ]' j9 m
VDP Breakpoint Range是对VDP一定范围地址设置断点& D" x2 z4 t7 H3 r6 G
VRAM breakpoints是VRAM断点
+ Q7 D" `) P0 J6 j& W; S) SGo to address是转到指定的地址
) v8 ^. P9 K2 t* nshow disassembly是对指定的地址反汇编# \, K4 ~1 ]: q# ~! |) \* d
Debug step是进行单步或N步调试* B1 e+ \- \% c0 a+ Z$ G; f
ROM MEMORY是ROM Viewer9 \ {- S9 f0 m% I @4 Z' y1 H
68000 MEMORY是RAM Viewer
; B _5 b8 j3 [0 H; L$ f. H: T" P! uZ80 Debug是Z80调试器! H$ T5 v# n/ i
: ?7 p, a- s& D7 c4 p3 B% A
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
/ U6 I7 k+ n! `' @! r+ N7 _/ y$ F) Y+ |4 g) z
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
v% v2 d1 T! J0 f& p$ T
) G- z. u1 c5 j$ N3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:) n1 N/ \5 F2 p
9 Z) p7 _# ^% W; J( j$ z
1 Z0 Q- ]( y, C/ X2 t/ [$ {4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:7 t6 N/ Z: h) g) M; M
2 W+ E; O. Q3 N- I9 [/ E
% {, T4 V" C' u, M指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:: P( ~5 O O+ p; {
1 x' o) }0 J' P3 Q* `4 i
* w$ q5 M4 {- E# G现在来分析一下:
2 N+ J/ x& b: {5 b" a/ o$ e# K& RA2=FFFFFA00+ R8 y$ d+ s7 U- V/ Q; Q# W
D1=00000001! |% ]3 v o' q1 p7 J6 a
' D0 n4 O% z9 g7 i, K011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
9 e3 S7 s: G* G/ {011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
# p( ], W1 s h4 B0 v% T8 w2 g9 k, m2 h" ^, D+ C6 O7 R
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
3 }! K! P8 g" \/ ~
a6 Y! W0 F' Q/ c5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
; m6 n k( b3 C' k5 U. j1 f* I0 F& C: D1 h) `' Y* a
; ^/ C/ {$ l* z+ A
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。1 Q% U+ f5 e' V8 b
) M/ _( N. M; s$ {, M! ]
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
% k; `, j) ]( ]4 T2 ?' H
/ l) `$ @/ `1 v, d; l
) X. d2 ^3 F* i( h7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:3 j+ Y1 `# F i, I
2 G3 W) v6 ^4 t6 @ e3 f+ U/ Z
& f! u e8 z: o; E8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:& s# z0 F1 V( M- m+ G
( I2 ]0 i' a3 i0 W
2 ?; r3 e6 n5 E3 S# A疾风之狼
/ q" e1 F6 U% i! ]3 {# S2013/09/13
8 N2 B0 u3 {" R7 E: K# x1 C
; `! j: A! c9 M如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|