签到天数: 1968 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器" m* H. a) ]* @" Y$ \. V, E# e
3 _( H" f. [# n( k3 a: S& _$ \6 I6 T
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
+ a0 F: }3 R3 @: J7 P) B
& C4 T$ g! }, |9 ^2 W6 h/ V& N以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。6 P& R, Q& g# E% k
' u7 E6 q+ S, X1 l* ^, [( U3 P! H本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
5 D6 w! W! r. l
6 d) p# X A% s1 N F以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减- e* P& K, m1 p$ D2 p" G" H
' j% w# F; E; ]( w! l% ?
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
2 _" n' D3 v% K2 m# ^) @3 {+ R8 S7 q- | n
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:, \, ]& u2 w* s5 d
2 c, p1 D5 @( h" S, C% i
, X( }" Z2 t1 ?" X左上角框是显示汇编指令,右边是寄存器显示
2 \: e/ c' V2 ]9 f. b* ?6 i; X: X) G; ?2 u q0 R+ f" ?
Address Breakpoints是地址断点: _ i, }! x' u% \2 x Z& g
Address Range是对一定范围地址设置断点& I; ~! R" D7 p: e' k7 H
Register breakpoints是寄存器断点& X6 c; u7 `4 \' M6 n
VDP Breakpoint Range是对VDP一定范围地址设置断点8 c. S9 P8 w! n
VRAM breakpoints是VRAM断点
9 _% T# \5 D) [2 l6 S! n7 e' VGo to address是转到指定的地址
0 r" W+ V2 c; X1 `# f$ z" eshow disassembly是对指定的地址反汇编
+ A, k+ u* f1 W0 A- KDebug step是进行单步或N步调试
/ h5 n+ |7 o7 n/ c# u- dROM MEMORY是ROM Viewer
9 F: D& b" X; v! M9 m2 S2 H7 Z0 @68000 MEMORY是RAM Viewer1 `0 v- k8 ]' ]# Y
Z80 Debug是Z80调试器
; r; t( Q: i/ X$ D; [- ^+ a! a
8 u6 t: J7 G r# RRead是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)2 ?4 ?& }5 Y# U" w) u5 m
1 U5 d* g1 D3 M" G+ D0 F) K# }: ?
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启" t6 U% n0 A8 t$ D0 o( x2 m# |1 |
4 [7 \/ `0 O$ N, M3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
( C9 ~: X4 R- d+ n8 x7 A
( G( c; H' D2 K0 V( q. `3 B9 q0 R) z& {. `3 v5 a
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:$ v( I1 m; h+ x& H' S* [
- _* d$ X8 M$ W, Z' M
, s6 Y- B! o a4 N6 \& C指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
" D) W( o& Z9 Y/ t, Q
4 P8 ]- L- ]" j8 `4 M9 \
9 A1 _, {" B3 S7 g现在来分析一下:
. R! _+ G; E( I% C5 q- y3 H) HA2=FFFFFA00
. Y) e- J6 S! rD1=00000001
7 A& F8 B4 _$ g) w J9 g9 q* Y
" B& p F4 w; i( g( C011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
! |4 j$ y( x0 o# |) Q, u011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
3 I" N0 F; {# v* U' ~8 Y' C, r. g/ {; T; ^
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
+ z; E% P; r! a2 n3 Z: n" Y' B
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
' a8 r0 C6 y% v' |: l% `3 k8 t3 S: B9 `& `/ c
. {6 u3 B7 ^: x9 r5 x5 |
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
1 L5 I- t! g3 D. ~5 c5 `
& I6 F- i: p- _0 q @6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:8 m$ X A( B& L: `) D( k
1 f7 m0 s) _) K9 l5 x ]+ [0 W& L
4 @: H% ` Z5 d0 P. Q7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:4 X( p; m2 j! f) ]2 l1 g. i
; p, {8 I) a1 J0 n4 b" H: J
, n, Q5 ^0 d) _( y1 P- e8 ?( \; X8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:" d2 q; q1 `$ k/ e$ J3 L6 s- G
) P* R8 L9 ^% E/ I$ B% r
9 a& ~/ e* j1 N3 J& V( a6 |; F; j疾风之狼& y% K" n' l, t, w+ u/ l n2 N
2013/09/13 " M; x4 n* R1 D6 Q% Y2 G
9 K: Q* X# I* e" L" a0 [3 `如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|