签到天数: 2072 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器
. T, Y0 J4 P; n1 F- x/ V5 D" A
' {2 a+ B ?) ]( w, M- y# vREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
9 o! y0 j9 f- x1 u: h5 i# j7 R
3 W) V, H+ O. P% m. @4 h; n* \以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。8 `% F" I$ k( Z* x# m
, j- X* b. c+ I( x: V
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
6 j5 V# O% d# G3 h* n
& c, S7 Q1 T* s以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减' p+ @2 j1 x% l
6 W5 r& W4 I, D3 z5 \; J1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
" O4 k0 F- ~+ `8 o0 p9 ~3 [) s8 I& Y0 f- t% q: O+ H3 K
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:% s* n. e3 G. `
) ~; y- i9 [- A, H9 x+ J
4 A; R/ V2 M+ r* I$ l
左上角框是显示汇编指令,右边是寄存器显示
! K5 }( s4 i% T8 t6 [
w) w) f1 ]- g, h5 ZAddress Breakpoints是地址断点
" } Z# h' l! E( Z2 S+ RAddress Range是对一定范围地址设置断点
6 `- z7 Q% ~3 e+ S4 M/ q1 |Register breakpoints是寄存器断点
- d0 y' }1 N. E( \7 d5 R9 kVDP Breakpoint Range是对VDP一定范围地址设置断点2 ?) f! d0 j/ V, f1 J
VRAM breakpoints是VRAM断点
3 c/ r2 n+ R' M0 d0 Q/ ZGo to address是转到指定的地址7 J; Q! l9 c. S [% i T. l& O
show disassembly是对指定的地址反汇编" v/ R' l" ~8 C9 K
Debug step是进行单步或N步调试; Y& u Q) @! J- @1 h
ROM MEMORY是ROM Viewer Y9 H! M- \' _
68000 MEMORY是RAM Viewer
) }0 k1 L1 a+ K x# p% IZ80 Debug是Z80调试器6 Z& _( ]# [& s( F) `
1 J8 E. d- e% {+ w2 j# H
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
' w* t" b9 k) O/ d1 r7 o( X# |1 ^. H/ U+ O7 N: R+ [( j
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
5 R: j- A* b7 O! e" s1 [) H$ ~9 u) m2 _; G
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
2 @' J: u& \9 @7 g3 m: }" Q( C
$ b* h( J a4 h$ h* z. w N
+ R4 [8 y3 y* O8 L4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:3 Q6 K( k9 w& q# J# Q
7 `2 ]7 g/ J; ]
, D3 z. C- D4 H. S8 g5 ~. U指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
, q3 V$ Z- V' y5 ?& N4 O* @, r. l; X5 w
$ [$ g( I! W3 W3 E: T
现在来分析一下:7 ]) s: s5 ~. L2 Z* C
A2=FFFFFA00; v: p* @6 h4 z4 e6 \" N* Z
D1=00000001
# d0 ?9 ?) D. e8 x& k! {- a7 X7 A5 M$ c7 r, S' Z3 w
011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D' h e v1 d7 g z
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器/ j0 W) }' W! a
/ T$ {6 \# D7 N$ u
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E719 k9 P3 {+ _9 G, E Y. |% G
" t; A( p. }7 M+ g M5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:# U. q U5 v6 g) Y
0 ^* w7 O8 g9 e* g6 w1 X
$ h' e' S6 n' ^$ Z/ x% I6 z注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
+ F% K: R6 B, m3 n
. u+ \3 Y' d- t5 W' P5 ~6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
; E8 N0 w* \6 K, |
f. j: N) F5 B; f/ d% h n+ B; V% ~) g$ c
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
/ l7 ^8 R; s3 P( A% F0 [! T$ f' l7 b$ f! r- o' @; i) G
1 B; G- x$ ?/ R. x
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
; H3 }8 `2 S" }& h1 y' o- b
8 Z$ Q- k: z& ^3 B t s" S! m& ^; E$ s" e" {5 t G8 H
疾风之狼1 P& I: n2 M! O6 X+ A0 z, ~8 [, A
2013/09/13 % N' ]3 h- ]3 j( F5 Q9 I- W
$ ?$ }/ T8 T0 v+ `; C如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|