签到天数: 2172 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器$ C% x' Z$ g1 ]. e3 z
( ]- q; g( h# P
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html! a2 k/ W$ U: W% s+ `
% W# _! N$ a, e( w( D以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
! i* Z0 i0 |- x4 G- W8 A
' x3 O. Q- _0 z# Q' H! V( _本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
2 n; O2 }+ ]9 z1 Q' A* c0 @. x, `( t1 _1 v6 ?8 O- `
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减" w/ x6 V0 h# u1 x% m. S( u
! j* G5 x1 v8 V& ?
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
* t, w! p. R% g9 `4 P* @" e! i5 z3 \) o
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
) W. o- X. F7 P; Z9 ^
# _& ?) j( y$ f% @ X7 c7 @: y+ \5 D$ X: k
左上角框是显示汇编指令,右边是寄存器显示. ]" y/ `. M! ~3 @# Y# f' X( L+ c
2 e% U- G5 D# |Address Breakpoints是地址断点8 E* j5 I' C0 F' N1 C4 z3 v. K
Address Range是对一定范围地址设置断点
5 \2 t# \- l! v5 aRegister breakpoints是寄存器断点
7 ~# s5 q9 x- t+ x' FVDP Breakpoint Range是对VDP一定范围地址设置断点
( x( ]5 Z9 s% GVRAM breakpoints是VRAM断点
( u+ B& K! U" _( a2 s+ }9 [8 rGo to address是转到指定的地址! V' ~. |( [" o
show disassembly是对指定的地址反汇编- K: i" Z; O8 z6 t1 z" ?1 y
Debug step是进行单步或N步调试
7 H7 w9 d* @4 @9 O0 r% d; jROM MEMORY是ROM Viewer
* u, y; R5 }0 D6 I* N68000 MEMORY是RAM Viewer8 {3 s% R' Z9 V6 d
Z80 Debug是Z80调试器/ e, D* Y( _1 `, ?5 e3 _
7 s5 m1 h' h; s" h
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)8 o3 |" p8 J) j; }9 b
) \; Y3 e8 V0 z/ VRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
8 P) _9 u X% Y o; s7 G, \7 c: L4 M' K/ k3 {9 D( [
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
/ p, n" F6 h; O9 J- E
' N' k& r" K$ `9 w0 f Z8 L
5 A4 s) @) S3 j& L! e4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
' {: i: `0 [$ T5 ?4 m9 T5 N! b+ {9 N/ W$ _5 @6 ]
$ x E2 N3 o S# u! Q- Q( `+ o: i9 Y
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:+ Z$ A9 c4 c7 s
3 v Q9 N. v7 Y$ |
6 z$ W5 g& T8 E- p现在来分析一下:
6 o; d8 ^) M; E8 k* MA2=FFFFFA00
" Y8 \- S. n. i) u3 g5 [6 hD1=00000001) _, t2 }2 Q; i& h
$ S! w4 v% c; m! [6 D- r; l011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
; Y; a+ _* `9 w7 K011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器' _7 Z% p5 z# E8 j2 \
* q* z4 |* j3 W' x) U) x1 s- K只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71/ u; @' T" q9 f( Q, @! R5 A
8 t* O( I- f* H2 e5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:0 q) W8 M: H2 o$ y
9 s( i5 b( d) l, t% q! e1 _% r9 {" D9 c* J
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。8 Y( `0 D! z. G+ ?4 M5 Z
- Q; D! E# T5 Q/ ] G. _6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
k, {: t. U2 G+ ~4 h4 D' K. b! k0 t1 A8 {" S8 m' f2 K- e
. G3 m+ [- a* } y3 l5 k8 ^6 V' B
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
0 h. M: a5 J$ F8 F* k8 @. n; U$ z/ a
9 w7 d$ I" Q* e5 n; U" n8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:: ]4 o6 F; s' h3 q2 u* c0 I
- H6 B$ e* g( \) e4 S1 E1 G! O9 W0 J" x7 \% [, |
疾风之狼) x0 h2 O( Y4 E
2013/09/13 4 L2 Q6 N2 Y u% |
. A8 [; B: R- h$ Q
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|