签到天数: 2170 天 [LV.Master]伴坛终老
|
准备东西:68K指令集资料、REGEN DEBUG、十六进制编辑器# j4 {6 F; ?0 l! g: O5 k" C9 d
1 b! B: q/ Z y- L
REGEN DEBUG官网下载页面:http://aamirm.hacking-cult.org/www/regen.html
3 e u5 ~" Q/ q' Q6 l- `8 a6 l: v0 d8 X$ d
以前写的MD HACK教程是用MD调试器,但这MD调试器在使用过程发现有点缺点,显示机械码只显示前2位,后面地址或数值却没有显示,有可能造成后来新手在修改ROM时寻找不到要修改的数据。
- K, m- G* W9 k9 @/ Y; v" o* g* l
, S1 p g. `1 A. K6 Y) Y. m4 B本篇教程考虑改用REGEN 0.972 Debug版来调试跟踪,现在的REGEN DEBUG很强大,可以考虑放弃MD调试器。
* G m! g9 ?2 z# v1 L% [* f: i
& Q' k/ @% Z* [; ?7 O以《魂斗罗:铁血军团》日版为例,修改目标:体力值不减
1 X/ d# q1 R: X( Q
5 }7 S( V9 N* X# _# K1。先找到《魂斗罗:铁血军团》体力值存放地址,可通过REGEN自带的作弊码查找功能来找,我找到了,存放地址是0xFFFA0D。
! j& S3 u% ]! M8 ?- o6 D. f" G
5 T$ W6 W' U+ F" {2。选择人物进入游戏后,点击Tools->68000 Debugger进入68000调试器界面,图1:
1 u6 q. K4 H1 e# G z& M! y. ?. {% H4 j4 m8 b
; O! Z$ }+ j a$ O" _3 z左上角框是显示汇编指令,右边是寄存器显示- C' R: B% V2 O0 i
3 h& |- w% d8 d6 Y
Address Breakpoints是地址断点1 e3 r- A7 y& }
Address Range是对一定范围地址设置断点- N0 ~1 ?) J N6 O: Q
Register breakpoints是寄存器断点: h' Q n" n) ~* M8 }( O( O3 ~
VDP Breakpoint Range是对VDP一定范围地址设置断点
4 b& a. D- K/ j( @: Y. r. `VRAM breakpoints是VRAM断点# C# k1 q: D# `6 D
Go to address是转到指定的地址8 `' I% }' P2 P2 R+ L
show disassembly是对指定的地址反汇编
1 G- x! g$ B- [2 a( {$ r/ [& bDebug step是进行单步或N步调试9 f7 O/ r" U5 f1 ?" Q
ROM MEMORY是ROM Viewer
8 ^2 f0 Y" N' ~; z68000 MEMORY是RAM Viewer
# F5 h2 _9 p- C4 x1 V$ ~Z80 Debug是Z80调试器# P+ S4 K, s8 n7 T
( `: O" L) C" r* {
Read是读,Write是写,PC表示是PC地址,Trace是跟踪(选择该项会在模拟器目录下生成ASM文件)# T. y4 o8 |( \+ X6 t
$ J, Q$ }3 J( o2 N/ a# NRESET是重启游戏,RESET68K是68K重启,RESETZ80是Z80重启
5 r, S6 u- X( S; p0 H$ }6 v
2 b8 S: Q% j; S$ V3。在Address Breakpoints的Set Breakpoint右边框输入地址FFFA0D,Write选项加勾,再在Set Breakpoint左边框打勾,图2:, \7 q- {+ n$ v# L+ j
, m6 X0 q& a7 ?( {8 T: g; }* c
$ ?$ Y8 n7 u, K! h
4。点击OK返回游戏,当被敌人攻中时调试器发生中断,图3:, c2 L& p0 n$ Z! Y, O% M
! ?, W! g9 p: w- G+ n0 B; a3 K
- e7 G8 }" \6 N3 c+ v
指令停在011DEE 1C2A000D move.b ($d,A2),D6这一行,前面指令却没有显示,用show disassembly把11DE0~11DFA这段地址反汇编看看,图4:
; i# P+ P( P. m/ ^0 w
" M% b6 L8 X1 o% Z+ C6 S
6 M3 n8 C+ `* Q+ m5 E+ k7 b现在来分析一下:
4 E1 U8 F/ G/ O8 @* P& F% P3 [A2=FFFFFA00
9 r+ H. ]; w/ o! k/ o {D1=00000001! N* ~9 r# N+ ~1 V' b
X) P' V9 F; \2 Q' K
011DEA 932A000D sub.b D1,($d,A2) 把$FFFA0D(A2寄存器的数据($FFFFFA00)+$d=$FFFFFA0D)的地址单字节数据减去D1寄存器的数值,结果存入$FFFA0D( \, x, N. X) {. k5 A$ y
011DEE 1C2A000D move.b ($d,A2),D6 把$FFFA0D的单字节数据存入D6寄存器
. X: t( s& L0 X: `: V l, p! T# [
只要把11DEA指令NOP掉,就可以实现体力不减,NOP指令机械码是4E71$ J$ t2 R G9 h+ e5 j3 }
; F! x' m* H" G9 R+ P) d" i
5。点击ROM MEMORY进入ROM viewer界面,来到011DE0地址,在Set new value输入11DEA和4E714E71,再点击Set 1-10 bytes写入,再点击OK退出ROM viewer,图5、图6:
' r% I0 ]2 Z& A" T% w' \3 L$ }( y
" ^& }" n4 L. H' _7 w E
/ f, I! [* \. q- K; q5 s9 X注意:在ROM viewer修改,修改结果是不会被写入ROM里,要修改ROM还得用16进制编辑器。
5 C) C* \, {# R/ h% O7 s
! Q9 J6 T3 @6 ^3 _$ c6。再对11DE0~11DFA这段地址反汇编看看,11DEA的指令被NOP掉,图7:
+ X3 H& D9 i) g9 E$ C* ^7 m |9 D6 j- m7 S8 [3 p8 c
" d- ?6 A+ q Y) F
7。把Set Breakpoint和write的打勾去掉,再点OK回到游戏看看,体力是否不减了?体力不减说明修改成功。图8:% Z0 v4 }9 h: F9 e. ]
2 o' W7 W' ~8 X: V% W
; t* W4 Y! }; M! `8。打开WINHEX或UE,载入《魂斗罗:铁血军团》日版ROM,来到0x11DEA,把93 2A 00 0D修改为4E 71 4E 71,保存。图9、图10:
4 A- ]) l" k; U: H6 n
" o. ]9 e/ b, T; }' ~! S" ?- U) x7 t8 ^4 e2 h
疾风之狼
& L/ U" P: k; z6 O/ B) B5 g6 B1 K2013/09/13
* ~7 D- @4 o0 u6 [1 v1 d4 v" N3 }1 t* \ C
如看不清图片请点击图片放大,或至我博客:http://zero3c.blog.163.com/blog/static/278215082013813111414953/ 观看 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|