签到天数: 1909 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器1 f6 Y# \9 D$ v b) c
/ g* v4 W9 D) C: J% @9 y0 jREGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
& e9 I- C$ m9 P- o1 }' q- _% z- i. F
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。, U# Z" [# i* N2 t
! H7 ?2 x+ S' [ r$ B+ ?- t9 V本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。. x9 W* l! s0 g k; }" _( M
1 r( M4 J; z2 v$ |% R以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减! O* Z. e; g* }" H
" w) m" J s( X8 r# A0 r& i
1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。! H, F( F; l1 n6 v
, H9 l/ p2 f2 s* W4 [) {# U
2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
) T% Z5 d5 y$ w/ }" O, v6 I9 ~( Z: _5 y5 P: Z
: [6 z" S- H+ Q3 n% c8 b$ c左上角框是显示汇编指令,右边是寄存器显示
9 U$ ?$ g" {* G1 h" L4 f8 [7 `* K5 l: y4 Y/ g/ q
Address Breakpoints是地址断点
5 }8 {/ A% R) Y2 K$ k6 C0 \0 m' [- tAddress Range是对一定范围地址设置断点
! `' e' B* l. n' R! R- iRegister breakpoints是寄存器断点0 J- e2 z! \+ {9 [0 d5 O5 u# i
VDP Breakpoint Range是对VDP一定范围地址设置断点
* Q$ Y7 s3 f4 _3 e/ `' sVRAM breakpoints是VRAM断点4 M b7 y3 L3 ` f
Go to address是转到指定的地址
* V7 k5 g# C: Z' d1 n& u5 qshow disassembly是对指定的地址反汇编
7 R. ^, K5 D7 y% d' ?1 t. e, GDebug step是进行单步或N步调试
- ~. b5 m+ q3 ]% E2 ?ROM MEMORY是ROM Viewer
2 L) A4 p6 @3 Q3 @68000 MEMORY是RAM Viewer
3 C, W5 U6 {. h! H" ZZ80 Debug是Z80调试器* o: ^3 S" a" R. T. |6 x4 A
& }6 p$ P1 k7 R% j
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)
) n" t& T+ ?- g) F) p; i9 w
9 m- O% i0 k$ ~, _RESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
2 t) p& T/ ]2 d2 ?4 S! J& s0 ^8 l3 `$ F& A7 N6 S
3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:
. \7 I; r6 n7 Z; ?9 G
. I" v2 T% X1 J, I& c9 I" N# @5 i" |
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:
! z! j1 d$ i" ?1 h+ j
. ~' E6 W& B B( C6 b5 u0 n) g0 x2 K8 j' c# m5 S$ E" h- V$ a
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
* |8 T% q+ e7 `+ G
1 k2 i# R/ F$ m* ]
z9 C, N0 C$ b, }) A现在来分析一下:
# ?2 q4 B" S! w7 j% I2 F2 o' i1 v0 sA2=FFFFFA00
! g& ~ A( y0 z3 ?$ {5 d; j6 MD1=00000001! D! `( w, J+ J5 ]' E$ [" P
9 y* I, T& }, C5 W. K) |011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D
/ T* h( f } s! ?% T011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
! g0 R. M: s4 y4 ]9 s U) Y9 }$ p' n D
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71
3 `# J' A' Q1 t6 x; I: d1 F' B+ _1 E* ?: _
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
5 W# y- }9 [1 N5 ~5 X5 o8 X- U8 e, s7 n0 m6 e% J5 O
' X0 Y2 v% F! E K# f
注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
& L/ ^( `+ s8 C, o8 V1 G" u+ p7 t0 X+ Q+ V
6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
, h/ A: ]% T( e, J+ `2 D5 _; y+ W5 j
; L* u: r" X1 E s
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:
; p" x) q, A1 @( C# a6 C6 ?: f8 D; p7 U/ M% e" Q
, _. u6 r- s3 H: j9 {, d
8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
9 M. E6 R X) i W% s4 C% h
+ `4 }. ?) }3 T1 X9 p
- o9 D6 o6 H7 F4 o/ w2 ?! a疾风之狼& {8 ]) }9 W3 G" z2 g, d
2013/09/13
. E' w% t& S4 L4 i1 v, V; U% e+ F- |" Y5 {
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|