签到天数: 1986 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
/ {8 K# d) ^' {& A/ Q7 m. H3 z
0 j5 K3 W6 N% R5 ]REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
- u$ @! X* n, g* t: P4 E \
. h' O; C0 T1 \; G+ k2 Y' ?1 T以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
, U. d# q7 U7 b. i L2 |
5 W) e1 V+ i6 x' j" c. a本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
! o. `4 j$ o0 Q5 E: j7 k4 }3 G) w, N( x3 g" R6 V6 l
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
5 I: {& L" a2 y0 g0 c8 C# C- g
o3 q/ J" O* w$ X' J1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。4 ~; |. y5 [2 K$ W( U
/ `. ], c n- v$ L& Z
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:8 z* z) N, N' N/ m& [0 K$ \8 _
* {" Y- ^( Q7 K6 F
7 E, L) [% C) F7 \6 g0 e' Y左上角框是显示汇编指令,右边是寄存器显示
! ]+ O+ m& y* o' o" M9 Z! K' C6 X3 X i4 A
Address Breakpoints是地址断点4 q5 I d$ ^4 \3 u4 c
Address Range是对一定范围地址设置断点( B7 A3 a1 G+ r. n- R# k3 g8 Q P
Register breakpoints是寄存器断点
0 k1 S; b5 v! i M+ _) ^3 f jVDP Breakpoint Range是对VDP一定范围地址设置断点7 A: f T; p+ p9 v+ M! D% V
VRAM breakpoints是VRAM断点$ t9 A9 O" j! j/ N3 T
Go to address是转到指定的地址
3 Z8 V! G' z2 `$ h6 w6 i2 \( bshow disassembly是对指定的地址反汇编0 } x$ ~0 ` ^
Debug step是进行单步或N步调试
% | l4 i& E* e) U; |ROM MEMORY是ROM Viewer" Y \) U# F8 c# R
68000 MEMORY是RAM Viewer
2 {& c% m1 m+ v; x- O8 A" [; B7 x( JZ80 Debug是Z80调试器6 B5 d$ p0 j) e2 ]! H8 O
4 ^: U' q! U* g/ A; S: I+ a
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)/ c1 L* i; ~. }# H; E3 [! k% T
, ^8 ?; K: {6 C+ ^' V' lRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
2 d: ^9 I# G2 E# K3 m
+ ?1 I8 O( J# v/ U0 D/ H3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
8 Y! J; P; V6 }
4 \, Y( q) C: v, G! Q+ K. d. s. m; Y& w
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:6 J- ^: y! C" t
0 x( t. ^7 X& D# W% b' e3 M
' ]8 @6 O/ A8 i/ ]* t
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:9 {1 s: r( d) ^1 q$ f7 e, m
1 B; w7 z0 a2 F2 j7 s* J& ]' [# u6 U+ M
现在来分析一下:
; V- X7 |) H/ KA2=FFFFFA005 {" ?' V2 N. z- E
D1=00000001
6 T6 Z# i. {: I1 o
6 }8 R- _: @* q6 _011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D9 D5 C; b* |# @) M% O1 {6 H
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器) C% u' o4 h3 ?! j, B4 _
: @6 k) q6 Q& \只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71 Q; o" o$ Y" _9 j2 u% d, g
5 e" c; a! x. k- s) t( t
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:$ t. n4 N9 j' d( M
2 g5 r, |; R* ^6 |1 _7 Y3 g
& C. ]' l$ c- m' r4 S注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
0 Y9 F d. L- }) x" Y9 }5 `; L4 H9 K' j( H8 N* H, ]
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:( ^6 L4 s( q" g" ]! R% w! F- Z
: p0 J1 E4 K- W: B: _; q1 c" ~/ Q5 W
1 |, ^& ]) H) c0 O; I4 C7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
% M+ I3 f% o6 C/ Q5 k4 B7 A+ z6 m7 x% f8 O
9 S; H. M5 z2 G
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
1 t; [+ ~6 z N" O
9 e% P. J8 k8 u9 A- D+ G4 ]$ K; R% `4 z* w) n
疾风之狼- w! s1 L# C5 l4 H
2013/09/13 + m* s8 O. ?$ ~
/ q5 Y/ L: l9 \如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|