签到天数: 1834 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器3 \! F# K4 J0 d7 W
& ]6 n" R2 T8 W' e+ L0 s% h+ S
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html: e) P- F' s# S. W( e
+ p4 S6 Q" Z. w+ _& D. [2 h4 i
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
1 ?6 z9 y% K4 w, i3 r) j4 I2 k# n# E8 B4 P) R
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。( T# I1 m: z' E4 S% r
9 _' v0 G+ P" {0 ^% N0 i' n
以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减" u7 r7 h8 Q* x5 D7 |
9 K# y) _ W9 s# Z$ G) i {% n
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。+ s; |5 e0 K" W2 o" z2 [8 s- j% @
/ l/ y, Q/ G4 Q6 M
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
6 Y) S" N+ ^+ K9 y
6 l# q p9 C% b2 f: T+ Y+ E* K f2 m/ b6 P. V: A0 J6 z
左上角框是显示汇编指令,右边是寄存器显示6 F8 F$ e4 K1 ?! c& _3 \7 O/ D' B
0 X2 c7 Z; }0 DAddress Breakpoints是地址断点
0 q; U. n1 U. R0 |Address Range是对一定范围地址设置断点
7 k U+ g4 W- o2 [* sRegister breakpoints是寄存器断点
; r- ~$ s9 q! O; U# Y) L. nVDP Breakpoint Range是对VDP一定范围地址设置断点+ L# H8 K) M1 k' z& r8 G
VRAM breakpoints是VRAM断点7 _/ `, Q4 T- p3 I+ E/ {
Go to address是转到指定的地址, k8 ?" e* f1 i6 N# j
show disassembly是对指定的地址反汇编
4 K8 j" n( m/ q# c7 BDebug step是进行单步或N步调试, t w$ z6 k0 G. c. K) g
ROM MEMORY是ROM Viewer
; x4 d5 n" f; i# i68000 MEMORY是RAM Viewer" R! K" Y0 C* D4 G- ^; k3 q
Z80 Debug是Z80调试器
( ^# ?: A j3 Y7 E* {
; H5 F. _8 M6 V+ |! o' ARead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
) J5 z# L0 y$ i5 G' s2 Q% M. \: x3 j6 W' j9 _: x
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
9 Y; O3 Q$ a% V; |, G$ d/ f: m# P* h' N; s4 \, D
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:7 Z+ T9 J* l; f5 O! q9 J/ q
* ~1 j g3 Y* D& v3 |9 ^: q8 A c
2 h) }! j/ h; ^$ J, _4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
4 A$ N$ H" R) V! }6 v* L% P4 I, e. n
2 m( M1 O$ s2 q; E @3 B
! L$ O* N. l! J* I* z8 \, S2 c指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:( n% r0 L+ d H2 z- R) B
E* p% p* T( D# T
; ^" Z5 l( M6 e6 c4 c现在来分析一下:
' U" s' i& _" g0 a& |. F2 rA2=FFFFFA00( N! S# k/ e0 F8 e
D1=00000001- s' @5 b) ~# ~
# y0 N" j+ S; F! i' a; K011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D( G! `# e7 P# t& O
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
5 ?$ C' M* I' @' }' ?2 K, B3 t0 M# @8 W9 w# J& e
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
3 E, t0 s/ `3 H7 _
- i4 x0 K1 h" n) P z' u5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
" I C/ h. O, m( C& a5 n6 S" g6 Q+ F! p
% L. |+ s7 t0 p, |4 O }注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
# X% u5 N6 V% N! Z- o( z( R ^
: ^+ R2 c" u; S6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:# S+ i; @. t/ F. G7 K8 @* u# D
; D1 _& A; j# M, N5 w* [2 m
9 P% [$ O/ ]& @* I1 e& K3 W7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
+ H# ~. g4 X' X
2 q( ?5 J/ P8 L( k+ T9 n. m
1 R4 w( }8 V. Y3 J' f8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:! B; y$ f; r7 q, v
4 G& u8 j! }1 _6 ~4 ~) g
' p) w, L, B1 \* D) F
疾风之狼. v: g& d& x- o) V% W2 Y* @# a7 {& _7 Q& G
2013/09/13
7 _6 A: S/ z/ K! X+ `+ G5 ?
1 |8 k/ E4 O$ E' j) _+ Z6 P如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|