签到天数: 1590 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器$ D, \, l! ]: F3 j
$ n3 `( ]" h3 s: n1 A* N" a: m& O8 jREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
. h u( b5 u8 r O0 T% f
2 `. d, S: Y$ D以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。, B9 I/ q* G& R) B" R5 p6 u
6 o1 n# X+ h1 j+ W" \
本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。7 I) [& }! R" ~ E
6 ^" Y: i9 N/ M, M$ X5 ~以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减' g( d& A7 R& S! B
! k. a% a$ P* x3 t- b1 s) f1 V1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
" O. L9 Z# F2 C& N' K
' v3 F1 e+ E" j2 N2 Q7 u2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:5 d8 o1 |9 Q% t& e5 G% I
$ @, b5 S" H! i9 B M( i9 T- V; }
u5 P$ F& M. {- s左上角框是显示汇编指令,右边是寄存器显示
" D+ C4 Q1 Q( D3 e5 G. X5 }5 r7 h5 O4 `
Address Breakpoints是地址断点% D/ L# P' U$ p6 p: |
Address Range是对一定范围地址设置断点
8 I; d9 Q* @8 H9 F3 WRegister breakpoints是寄存器断点, r+ \5 Y4 R9 |3 O( v% P
VDP Breakpoint Range是对VDP一定范围地址设置断点4 q- {) `0 W# d- [6 E( [
VRAM breakpoints是VRAM断点
; U$ y: Y e! u/ Q7 pGo to address是转到指定的地址
7 o4 q4 c6 }( ?% S6 \% n+ Q: Vshow disassembly是对指定的地址反汇编5 A+ U7 M" F( ~' U
Debug step是进行单步或N步调试7 P+ L( r0 U' C" f: e
ROM MEMORY是ROM Viewer
& S+ `/ R) F; ^( A ~, y7 q, k68000 MEMORY是RAM Viewer
2 Y! B+ \& U! ^3 }Z80 Debug是Z80调试器
+ K3 f6 c- a( ?' o# L* D8 S$ f, o/ X5 Y% [
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
; s- V3 {. Q$ T/ q$ {& v% a2 {: J% p1 H8 F* g4 B
RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启+ g% _& `7 j+ W$ i' ~
; D5 w- _. M& ^1 V' _8 i: G
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
. t9 p3 M, o0 O2 \: j1 [; {& ^' ^& ^8 J/ r2 P
, o: `; R# E) {3 S
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
8 c: ~( m$ G6 C) [: i+ X. l/ }2 U: w' C
+ n4 q/ p/ U8 ]6 n- b! K) W: U0 H
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:* w/ {# r. l* _7 \, t! ?- _: Y
% g' c* H9 L; U$ q+ `7 }; j7 P( u w: J6 \# ~* {: b! Z7 n
现在来分析一下:" N) f) T% n0 ~* m
A2=FFFFFA00, C- D1 u7 e: X4 Z
D1=00000001
' l; [9 M3 {& o! X
: L' N! c8 [5 r* }011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
6 b- ~5 r7 F* j+ J0 o4 M8 g$ T011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
3 d. x. G) T' E C& `( Y! R$ l& G8 g9 D t9 R
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71- X0 U, s& }9 N; a; p' L/ Y
& G# y- j) r' m$ U) k
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:! X& t' `! J1 W# S: u- U! ]
8 H4 b8 l( R4 F4 P7 h+ v: M9 U( R
/ ]. H4 D0 b2 r7 m1 T
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
+ u" H" @6 H+ T: e# w& p
9 ?% E8 h I, f2 r' j- E6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
) d9 O; Z$ D7 k& b' r. @6 b% J. T' p
0 ^+ I1 P: f9 y- L% e1 B
5 i7 `8 ?: M' K# H1 l) G! I7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
% Y* B" e7 u7 J0 S8 U9 |) L4 x7 |2 G/ M1 Y
, W8 W R' I" B( a4 Y& n3 M4 c( k9 Y8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
+ }5 H3 P6 x. g4 W! ~0 G
* w2 W$ H. F/ m' V' l8 S+ [# v; l& j- C% |/ L/ C8 u7 S4 T, u
疾风之狼$ N, H: e- N6 c
2013/09/13 + R; @: w" H9 t4 L# b/ {
1 w& x C0 c8 a: l
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|