签到天数: 1894 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器9 F4 k. p6 o) X) M7 |) ~: t
t; N# Q% |" G" I6 hREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html+ t7 e; Q/ I5 n6 m
* ^9 \, w! m. u- f% ` M# s
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。) V; W" o* T, {+ O
* ?& d" p+ R: [3 e4 p: A9 S本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
6 Y4 t3 A: f g3 M2 k% A! P o8 ~, H4 Q! P2 Z, X
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减# y2 h8 O% E) e, D+ r; p6 _
( Z+ V- C- \5 V5 g' t* c# K1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
" d4 L9 r6 p3 }& W" G
0 k8 f) N$ u4 \. t2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
, A* Q% m G8 R8 \0 P
$ `! B- _" F( D6 u* M' a* p5 C* o+ r4 Y0 D$ ^% f/ t4 Z2 n! ~
左上角框是显示汇编指令,右边是寄存器显示
* n" z- t5 m; `5 p6 ?; g3 n
; V5 S( v& M, G4 T- ^0 BAddress Breakpoints是地址断点, G4 C( Y, q6 U$ j3 ]* @8 A
Address Range是对一定范围地址设置断点) ]9 |% Z7 X* v3 Z! }; C3 L) K
Register breakpoints是寄存器断点' \" L* G7 o: h+ T- H
VDP Breakpoint Range是对VDP一定范围地址设置断点! V& n. B0 k6 K- W9 i: F
VRAM breakpoints是VRAM断点
' p$ Q O) D/ c! PGo to address是转到指定的地址2 P$ F4 Y8 _4 q
show disassembly是对指定的地址反汇编
7 g% w% S2 \- I- H2 a3 [" f& D9 c5 L+ uDebug step是进行单步或N步调试
" [0 j6 i0 G0 w0 Z! }ROM MEMORY是ROM Viewer
/ W- ?: `" d9 ~. w4 F; t' m68000 MEMORY是RAM Viewer
: e4 o9 w7 K! p5 HZ80 Debug是Z80调试器6 u. T- s" s k3 V* o- ^
6 q1 M- e+ O" s1 _) fRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)7 P1 U1 v( Z* i: h: j [9 P
' e- K1 B7 l$ `# @( _
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启/ y! ~6 y2 ?/ h
3 \* j0 ?: k& a1 x4 N+ `
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:3 g; S! T( f* S- L& a
$ G0 E# Z0 \) R! V- K
8 N: D" q( V# b4 \( x4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:3 @7 L$ S. i' J
: e2 f. J6 D. n: b5 }4 K, @
) P% h; ~# W6 M3 g. W l4 ~5 a指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
$ h |7 {7 }% `9 [% j7 `
, Y" N, J. \) L: d/ W
2 p& m* T/ l* O, V0 S现在来分析一下:
9 Z% }( ^! y2 VA2=FFFFFA00
8 ]/ Y' e- E2 M' y! T- v+ U) g/ RD1=00000001, u5 n: _2 ^1 i. h# y- i: C/ z
8 Q( s+ P3 i" d6 a; q) S! ~011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
: |- d5 e1 c0 ~8 }, r011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器9 k' q* n8 y" T8 U
% j' F. w8 X+ o" A$ q( S只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
6 h( ?" k+ O! u( `% n3 g6 B6 ^3 ?3 z; }
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
$ n( v6 a+ U; n$ s; s) M/ X
3 { ?2 q+ g3 j! i9 ]5 N4 r- U8 b5 ]2 Z+ v
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
, ]7 I, H/ K1 @* i! }/ |2 I2 z) L1 o8 T6 x
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:$ v, O* N! p, ~3 k0 a4 N& I% Y% V
2 U8 m3 m6 d( H
8 o' h k. K* @0 F% f& Q
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
' p* c, _# }2 d& w0 g$ n, }$ ~) ~% \: ~% ]& A D+ P
8 |9 u Z+ j/ P' v6 I) p& p9 N5 v$ ]8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
" S$ {- \4 X- s _- s! T
; q; M" D" f4 A; s$ N
: o# |7 m9 h7 V& z: q( K疾风之狼
. N! B! I$ @/ |, b8 F+ K- D5 N7 e) J2013/09/13
2 O( w6 F3 b- H( W" N) l, f$ L) k- f
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|