签到天数: 2074 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器9 |! h5 p* Q; K- ~8 `6 p3 X
+ Z! U/ Q& z/ w3 z5 @REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
& j. R9 h% `7 s5 W/ J
( t5 h6 i Y: G6 f" _: M) @0 b. D以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。2 J2 Y" H/ H- n1 `* c: A
( s+ t+ d/ n4 P
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。$ ?" T$ ~, L, x3 m2 o- W
$ G* P5 {2 i! H0 ^% A( |
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
6 Q' C3 u$ p# I- m( O/ c, M
; Q) D- f5 C% K! M( D. s1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
# ]" z* M! Q0 Q* g0 |' m: B9 d4 s1 L
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
$ \; o; X+ ^/ n; p3 x0 O
2 |+ u' }( o: ]7 X
3 c% Z) Q$ |2 K7 U左上角框是显示汇编指令,右边是寄存器显示
& r, P* A- f! H4 A$ d& B" A1 I3 O1 a& p8 e
Address Breakpoints是地址断点
/ m/ b+ o% t$ `1 T) E8 MAddress Range是对一定范围地址设置断点
, s$ l; u1 } a2 nRegister breakpoints是寄存器断点* L: Q9 j" L; \: f( k+ b: [0 j
VDP Breakpoint Range是对VDP一定范围地址设置断点
, P, v! i, |$ ^1 r3 y% EVRAM breakpoints是VRAM断点
+ U: h( U6 _# cGo to address是转到指定的地址1 `* c* a9 q% o6 B! F3 q
show disassembly是对指定的地址反汇编! o: @& m. H: p' g, }8 J
Debug step是进行单步或N步调试
2 M4 y( m5 n; J: F$ {' C1 D( j( mROM MEMORY是ROM Viewer
1 w: `, E# W1 g) T7 C# E68000 MEMORY是RAM Viewer
) p8 K0 [7 D% K6 _5 kZ80 Debug是Z80调试器
7 l2 M& V9 C8 ]5 g) i5 |8 ~: D: e
5 ^7 z. ?. Z$ h; KRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件) _7 c& ^; E) _+ F
4 c, _, @6 _6 d7 S2 @
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启/ W& H' K* j9 n# _" I' `
# e" L9 Z7 N- v3 d3 [! N4 A( m. B3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
- ]; S( S) }8 ]# Y0 t( L" m- Z0 M9 G( E' M
6 k: x* O: Z. ~. a4 `) q3 o& S
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:: d) a: P, n( x
! L5 y6 N" b) R" N% y) Q! Y
% H$ f0 _0 Y1 J+ [指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
! C9 h& W4 d! }8 G, b, T. K }' E# Z3 c0 ?" |; \* e1 N/ V: i
6 G0 q5 g5 ^7 k, u2 ^$ v/ j
现在来分析一下:- T$ E7 y0 j" Q- G$ _% N- w
A2=FFFFFA00( x3 P# _# T! Z4 j; ]0 n
D1=000000017 S/ J/ e4 i9 }' }( ]
" X, ^; z* v6 g6 c1 U011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D8 J% Q+ K1 a V \" ~
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
* V9 m: m2 L, K2 n ]5 o ?% m7 c1 Q r
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
) \" x, ?; G9 ]9 S3 s! i# |% O5 L8 c- l ]* T/ S
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:2 S1 d2 R2 m9 f: E3 Z7 Y
. J! b& ^! I: [% V" c
3 f' p! A. ?4 j; G& W; n注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。0 I/ J/ m# _" U. [
* @0 x7 v; i4 }' K2 {, F
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
% C$ ?- n+ Q& X% [- B3 _$ U
, f4 R5 Q7 }$ d& x
+ u3 U* U0 O( z. P3 T7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:& y7 Q b1 l$ n7 w) d& K( t
: z+ H S% g- c7 J( O$ P2 m% s7 `- t3 m
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:- V; g! s" R9 p7 Z. s0 v7 `1 o; q
" R* S( R0 M/ F- T% t" G2 {* Y! v0 s
/ `0 F1 {3 j; y' k3 B( i
疾风之狼# ]* k# z f8 x& F
2013/09/13
- J6 _+ t" }& z, ]7 V, C2 |7 z# h) \, g1 a. |2 M5 R
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|