签到天数: 2121 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器" t# n3 B' w0 Y/ h% J0 r S
/ ?4 u3 Y+ B9 k( l
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
/ T& \# p% O* [5 r n2 {3 D" m; Q7 k7 S* U
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
! w" _9 N2 m) n( Q$ H
8 V( M4 l7 G/ r$ I5 N2 N本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
9 i+ U/ Z1 |2 M; N8 d- F/ D/ l0 e- |7 S0 }# N
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减0 K0 x! @, W, v# J/ d8 E9 d) |) K
5 H% q! g( k0 W3 C' C$ o9 ?% P
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。0 v8 ]6 A3 J- L9 D, H) g4 g
, W/ {' i6 w! P9 B; s E; d' c
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
, M& b5 N0 t$ U& y) C
- ?4 R2 ^' z7 s, U- a1 s; {: Q( N9 V# k" s
左上角框是显示汇编指令,右边是寄存器显示& t, b* v- z. ~# k, y3 [
, I) O% u2 o+ y
Address Breakpoints是地址断点
) t- g" H- B- X7 R1 H$ t0 {Address Range是对一定范围地址设置断点2 j9 I2 I- v' Y& a/ x l
Register breakpoints是寄存器断点5 k7 N- k1 o& }9 |* ?8 F* {2 g/ \ V
VDP Breakpoint Range是对VDP一定范围地址设置断点
' D7 W7 F L2 p, i) ~" YVRAM breakpoints是VRAM断点' X5 \' u& t6 a* b3 X# ^/ Q
Go to address是转到指定的地址
) ~# H4 }5 d$ ~* Yshow disassembly是对指定的地址反汇编
2 b/ D/ x9 m G3 a4 s. FDebug step是进行单步或N步调试- Q9 Y2 E' R" T/ s: K; \* d
ROM MEMORY是ROM Viewer
2 i# _& i( B" v! W4 {1 n0 ^5 d/ {# v68000 MEMORY是RAM Viewer
3 ]0 e6 D" A7 R8 u! JZ80 Debug是Z80调试器6 g/ o+ r- U+ C/ V9 E% O) ?
+ F* G( y/ { N+ h9 HRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
5 L- m! Z3 |4 \& S; x: \( e/ @( x' M
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
7 h; j$ \; \* d9 p q; e1 O0 U
+ D. Z, _: d' q& G$ Z3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
1 q. T- B: \. P$ \9 L2 H4 F% W, }5 W$ p4 `. X6 }7 y
: F* p# b3 Z2 B5 |8 K2 N
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:+ _) d; h# h7 X
& A- E" U2 {8 R8 w
% P# R% L) Z) ?( s9 X# \
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:8 S) {3 B+ `4 Z& Y2 B/ ~( D4 ?0 @/ C
' S; G8 I0 k) Q L& y6 T9 O, T
0 p0 ]2 } ^' c. x6 ]
现在来分析一下:3 [- y+ X# ?" L2 o
A2=FFFFFA00
3 T, n# i: j5 `+ Y1 T# f QD1=000000018 p) ^7 e1 W2 l) [ L
' A/ \ t/ Q) k) [( b% s% L+ @( {
011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D" t0 S5 v, D! g2 D
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
8 J' L8 [1 _, m7 c. |) W
, r1 Q& d$ H+ I, r* i4 Q, `% o0 ^只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71, \: Q8 i4 D6 k1 x3 o
& Q2 k* X5 y, C6 E4 }6 L
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
8 b9 m3 q6 ~, ^" I' V
" x8 o) ^* W0 r' w& ]
( @8 s8 N5 |) J5 b% o注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
, c* }9 a% m7 F7 J4 T; e' D8 _! R: P$ q; l; |$ S" Q. _
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:$ l4 A6 j$ b) n8 g/ w
) J* D/ f- r/ L& H, k# B
2 }- s+ a; @$ F4 W! L+ {6 o
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
2 [& _ }# f5 }/ V. q0 ~
R$ B$ t4 V# `& H
$ W+ t( z$ o4 F5 {8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
+ B2 I) @+ `/ }$ M4 G3 U8 E) v. K; s; c) Q% j* C" L8 K8 F: U
. q7 e6 w! A9 l, q) W4 K% {疾风之狼
& ^0 r* _% K1 O$ `; `# s [2013/09/13 ; k+ U( ^0 G, K, w
* a; _ A: n2 h% R如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|