签到天数: 1992 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器% b+ S$ J& i+ m; m
" Q! {( B4 C: g3 M1 r) Z
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html& ?) A. d# c& D) I0 n9 T6 o5 x
5 k3 p$ }' v |, n1 y
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。6 j: V7 w; F) Q
6 ?7 w& E d& i& k本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。' f$ V) b+ A; O+ y
3 |8 _' _6 H) s) n N$ z5 p
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
; D" L# o X- ~
2 K" ?) }! a+ N1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。/ `. y3 u/ G+ N& f8 Y
4 X0 ]" `# B% E8 l
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:( r2 A& W0 X6 |1 Z
5 v" p, h4 D* L) N7 m1 K
$ D0 \. T/ C6 T7 @
左上角框是显示汇编指令,右边是寄存器显示1 l- I- R8 _0 F3 y
" ?) x9 Y& G; l: MAddress Breakpoints是地址断点" L* o: ]9 {& ~& ^( L* _( @6 I
Address Range是对一定范围地址设置断点
+ x2 W7 ?4 @* u/ q) K3 tRegister breakpoints是寄存器断点
) Z& i7 R7 o/ y; ?VDP Breakpoint Range是对VDP一定范围地址设置断点3 X+ ], T9 z; i0 _# V! P
VRAM breakpoints是VRAM断点& R6 m4 |- b! B" I
Go to address是转到指定的地址
) s7 _/ }/ |/ b$ W4 Z( C: p8 ushow disassembly是对指定的地址反汇编' v! @4 [; P. a) }3 c0 j! p
Debug step是进行单步或N步调试
. \& Q# t+ T7 ~6 k3 s- J% tROM MEMORY是ROM Viewer( u! C. V, h- m" b& u! o) M
68000 MEMORY是RAM Viewer
# ~) [$ O \ e% [. O3 t- AZ80 Debug是Z80调试器
0 L( Q. A/ Y) B. b! w
( w$ ~, o. _& [Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)& ?8 ~) Y7 z5 `, l) G5 I
5 D7 {: R s8 H- h' r, w- }
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
) j7 l6 d' c. h
( c7 x* Z: s- G# k# O" v z3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
% Y6 J% }( G/ @. L' |9 f# E7 v0 k, @& g/ W
$ M7 c) Z2 M; ~0 I
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:7 J/ ]+ r1 R2 n) j. V
" W: q2 X: U: m. S; m: q4 W
8 W2 R$ {8 Z' z5 E- r0 h2 i
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:) s* w& v7 e, h9 }. I0 H
7 q6 F& A$ d' m% X3 W. i
, X" x. E* a( s2 B- w# @现在来分析一下:2 f; l$ S. {) Z
A2=FFFFFA00
7 i/ R1 L z. X% h8 s+ v& L5 WD1=00000001
; H- s- s# e: H( Z5 \
0 q6 g! s! P1 T7 G011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
- H- E! O3 D6 p% L, @1 S011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器% v1 X% O* B. a$ x7 a( C1 k2 ?: o
- ^' S1 @( L+ `- g
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71# t7 {0 m r# c* }
: z$ Z5 t3 Q! t4 P! `) G2 B5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:: y9 n% h4 O: W
' ^/ K3 V' y0 a4 _7 N
+ D$ X5 K5 I% Z8 F' J" S6 M注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
# C4 \9 K7 R; }! m S" A. U5 j! u+ g7 g
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
2 X' {( W( d9 k# z2 L: y$ d+ f% b, U6 M+ k8 W0 u; O& [
' |8 W! h9 m( n) A+ f3 r) u9 L! q0 ~* U
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:; L2 g. g7 @$ c! c: s$ }) v' J
1 U' h, X8 j1 Q, k* | m3 L# M3 g3 A1 A5 U4 t+ D) T J
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
% q5 x6 R9 s N$ [
2 s. v, Q/ D8 P# u0 u' o
( f, u5 J- S# d( {* \: O疾风之狼
0 i2 L. g, i3 A2 d* ^% x+ n; P2013/09/13
8 P( a1 c' k5 `* ]/ f
! j, Q# ~, b( | e如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|