签到天数: 2179 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
+ h" S/ O& T6 J/ u6 P
2 u( B W8 D: h4 _# n0 ^3 _# oREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
! A3 n5 }+ n& P4 @& ?7 ?$ [
3 A, ^1 e6 C; r ^6 N以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
0 K5 H6 {8 O2 g& f# _) o$ D
: g7 p( P8 a p9 W5 s3 t4 p, v本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
- S6 I9 m1 ?$ H% g3 A
# O Q; b' A# h以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
+ r6 ?; _+ h) k" f$ S+ B
s. e, {5 M% ]! `1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
: H( i3 n# |! c* ]/ l5 p; }4 M8 ?* Z6 l+ D# A p6 C
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
9 R+ a1 _* J( F( g
# B$ ?; d! K( B: w3 F# P, h1 _
/ w* U3 C7 D+ w6 Q2 C! f- j' {左上角框是显示汇编指令,右边是寄存器显示# r1 B( j! @. z/ g1 |; @5 Z; U& R
- t, a5 K6 G5 G' e7 ^- a/ v3 IAddress Breakpoints是地址断点
- y. l7 b, G: }Address Range是对一定范围地址设置断点
1 H) i; K8 U* |6 S7 e; cRegister breakpoints是寄存器断点2 K5 T0 m1 c3 m' [& q' Q# H( m1 s$ g
VDP Breakpoint Range是对VDP一定范围地址设置断点
- Z5 @5 V \" m `VRAM breakpoints是VRAM断点- x9 a+ Y7 n4 _6 {! H* J
Go to address是转到指定的地址
$ x5 O2 i3 }8 H0 }2 ]0 w7 zshow disassembly是对指定的地址反汇编
( k* z% e$ _; D6 k8 ?Debug step是进行单步或N步调试6 A: ?. l9 H* G4 I) i
ROM MEMORY是ROM Viewer
# w% B0 N4 [. ^ }68000 MEMORY是RAM Viewer. u* Y. x* } W9 i. V- [5 e
Z80 Debug是Z80调试器! S5 y8 o- j2 e3 @
) \6 f* x" q$ x; ]! r z4 }
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
6 q4 y' \1 H7 ~2 b7 w$ V' x! H$ |; t& ? ^- H3 V$ {$ E
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
- x6 n7 P9 F6 r5 U6 Z7 |6 P- p( c4 @9 c0 A
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
3 y2 Y3 F; Z {
( \+ L/ ~! T4 ]( A5 e) e* f2 T6 C+ Z8 }8 \* p. u: E4 {
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:3 P. v5 l9 ~% [) x% Z) r2 x
) O" c2 ?: i) f0 F8 ~, { f0 T
6 q/ z# R4 h4 J8 B" ~5 ^# N指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:) e' n2 p, y! ]$ ?8 c
5 K- [, V, i: @, E" K; q( F0 F" y5 @4 x& H$ i1 s- s
现在来分析一下:
7 J' j* @' x0 t! n4 dA2=FFFFFA00/ D9 s Q, @3 P5 W
D1=00000001% b7 A! c* n: u: v
; t1 j4 D4 ]( q0 B. _011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D8 r$ p* @2 O% U9 O$ n/ a
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器6 A" ?$ ^) C8 X c
; y" O$ G& h/ B8 d只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E716 L# r ?) S! d: ^8 ?. G4 i
s9 _+ y, |0 n4 m2 ?) v9 X
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:- l3 d5 X0 m8 t5 E. e, G- w" g
: G9 T ~2 I* O! l8 b# E8 ~, H, e0 p7 f2 i0 k. G4 j: U
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
' b1 `, f. `( P1 |" A) l. t3 D' G% C
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:, w2 v4 C2 O" S2 g- w: R4 I Q
; q9 g: f! r5 ?4 ~) a# [
8 q4 G y& A, H2 F4 g7 ]7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
1 @" A% R% [% a) u9 [
: c( j" I6 O- }7 n, q0 n) [) W! |" z! y w5 I5 W& w5 ~8 S
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:0 N/ m8 f# x9 x- Y/ V+ ^$ p$ y
: j% W0 M4 m7 C: X
* n* E0 r1 k2 C' v" F疾风之狼2 `; J [: r! ]6 S0 e
2013/09/13
! C# r4 {/ D" r& s% Y7 s- q7 b. ?1 A4 { Q
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|