|
|
7 n9 { l ~; B8 \# V% Q很快速的整理我自己常用的指令% X3 I' C$ u& M. W
2 Z+ j' A" P' P* i' r{:4_112:} 6 I {7 R4 M: D+ ^* U7 {
! H& Z z* Q" d$ [4 WMAME DEBUG常用指令
* ]7 r. R& w3 X* A% l" p& W6 J. p6 A8 M4 c
内存搜寻: ci, cn, cl
6 U+ i; }7 }% k3 X9 f x( g% k$ c8 B4 ^
ci$ p5 n* t7 H) F% [ J- t F
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
& D8 _' `' Y1 h/ ?$ l
2 ~# N/ @- g- O cn2 J: w# U0 v# P A: |# C+ }1 ~$ {! d
搜寻指令
) `2 b& w) s, M. c; h5 l4 u" z$ Z) a 例子:
! q# V, A4 O: k: ^# L Q( [0 [ R cn eq,609 h. P( ?6 x5 t3 j8 Y+ S& y& k
搜寻目标等于60 (十六进制)
0 W: T. e/ Y8 z" A
2 e( j8 V; E4 ?1 `+ m cn eq,#96
5 `4 q q4 w, i8 q3 c 搜寻目标等于96 (十进制)( M$ [8 B$ ^: M1 Q
) I; S' H- G N8 P) ^9 ]; G cn eq
; A( ^) Q1 P7 G- W; ]/ P 搜寻目标的数值没有变化0 H, s9 V8 r7 h, m5 g0 a
A: r- Z5 U! K1 W* T' B) u7 Y6 [
cn ne
2 _" C* i& a8 a& d. \) N/ b- O 搜寻目标的数值有变化, n! p' R. r% \9 R$ a, D0 m
% ^2 J# m- t% k3 E% m cn +
/ D3 O3 J1 P# @; U1 S {% ]: Q- l 搜寻目标的数值增加" N: b# U0 l4 L1 h
- `0 w9 L* `( ~) R+ ^& \; a8 U9 O cn -. Z. ^( f9 }" r0 W, `; r
搜寻目标的数值减少
1 n: P" |2 W1 [+ B & h' p6 E$ Q& n7 y3 b
cn +,38 H @8 n5 c1 F( G
搜寻目标的数值增加3 (十六进制)
1 O; |2 D" A q
. i* n9 q- R& D cl
" I8 w$ O$ v" k) v 列出所有搜寻结果
" Q2 x% d9 I5 n; t* k3 A4 K
j S, z4 Q# r/ h; l0 i3 ? cl xxx.txt, Q2 f H6 U p/ Q5 l0 C
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
7 q( v$ y5 Y7 x6 u4 {. R6 M1 N/ U. O6 U4 Q( i0 B( Y$ e8 }! [0 M" G& ~
1 a6 ^4 ~* N3 l; }& u5 e6 s内存监视点指令: wp, wplist, wpclear
- A, [8 f1 v, A+ k6 a6 I! K w 例子:
2 a5 x6 V- e/ ?2 M, {, |& F" \ wp 1234,1,r
9 O) E- X% I) e& S 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
_3 D) Z% W; h; k
; {' n* T2 @! r8 Y$ g ` wp 1234,2,w! A! D% X6 g0 r. H
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2. k4 V% r$ P( u1 f
- I7 u W- V$ }5 T* n3 @4 ^ wp 1234,6,rw7 C; m+ d, [" L$ B$ j
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 v# `, ~6 Y/ m5 A3 j1 L" X: X- R- b9 q
wp 23456,a,w,wpdata == 1
5 ]- ^: R! X0 V* s9 t. E 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1. b: M1 j/ q/ T
& j4 Q5 S& z; b/ Y# q3 J wplist
# _7 g0 o6 N- h$ ~( K7 m2 J 列出所有监视点. t: D6 |; y1 D' `$ H
% g- L2 C7 b0 t6 U7 [4 H wpclear 3* w" @3 g9 H' E; Z5 g' Q5 [8 M4 W
删除编号3的监视点
( _7 [0 A/ k7 _- f* V# u& \
) S/ B8 c' R5 t, y wpclear/ g5 _# f- n6 ~9 v& L
删除所有监视点/ j6 m7 S2 G3 y* f2 _! y
" k$ i# O+ g# @' k9 f9 i
4 G8 l+ x- e: g2 v* k! y1 t$ o" b
' n! N7 [: R) D! |程序断点指令: bp, bplist, bpclear y% _, g: L+ Y) z/ ]. U
例子:2 p6 y" a# V) a3 e% Z
bp 1234
7 u* g1 j; i) E# M- {: o1 E 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ Z) {! n8 q+ [4 E
4 f6 E& g* E% p
bp 23456,a0 == 0 && a1 == 0
5 q4 f0 H9 e+ \- w; g5 a) P: R# w( Y 在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 t" {0 O4 G/ y& a% C& o7 N0 o: @- K; p" a0 @
bplist6 E' A/ x: K. a* F1 o( r$ \5 ~
列出所有断点6 o8 Z! v( O8 {/ O6 M! ]$ f7 F
0 ~: k3 Z+ N: E3 o
bpclear 3
! u3 c+ b7 a S 删除编号3的断点
7 C3 N# @1 }7 U6 I- d- X
( ]' {4 b: ~7 ]1 s k U1 i, b bpclear
& F z; o2 L6 h$ z 删除所有断点
& i9 [) Y3 m" x9 x, U& N3 N( T
5 k& ~6 J, t9 ~* u
8 E3 X9 x2 N8 G. G% M# z
( W/ M" j$ B- J" P1 B4 y跟蹤紀錄指令: trace7 h; g. `5 u1 o# L6 B: i5 }" e
例子:
, E; D& L$ w$ _$ p" Y3 M$ r3 Y trace 01.txt
2 \4 q0 }; w# p 跟踪当前CPU运行的所有代码, 输出至文件01.txt
) d; @' f$ S2 p/ s" M
) n6 F" t6 u1 I4 q2 G- m1 A trace off
" n) `3 G; _& r: h 停止跟踪, 并且关闭文件; \" O5 [, F9 i. w7 p' P
) x5 _! R% X; ]6 B' }
trace 01.txt,0
( r" j4 F8 p6 r! B; q/ ^& Y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( a" e( p3 Z8 c9 v8 ]0 q z
) r! }) p5 m; H' ~1 S0 m trace off,0; m* M1 o* _% X; N/ ]) }3 P( a
停止跟踪编号为0的CPU, 并且关闭文件
, M' b7 F) o( ?
L0 n0 h3 T3 Y8 f# o. |( e+ } Y trace 01.txt,0,{tracelog "A=%02X ",a}
5 e) G; E. n# e2 v 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" f z0 S/ J; f& ?# E6 z 并且在每一行的前面, 写上"A=a "5 ~. W1 e# I* g9 L; W' w3 D
"A=%02X ",a为一个C语言printf函数常用的输出格式/ Z7 }; _0 S2 x% t& q: U, e4 x& Q4 o
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 [, e& j; E; J: E$ H' E
X表示为大写十六进制数; n* J; m$ S* L) {+ y+ r
5 U' J9 O0 f3 r& o7 B
0 {" E4 U1 s2 R1 B! \, |" B' Y) V7 v
Z4 P/ r) F( G
内存直接写入指令: maincpu
4 K6 ^' v; y! z 格式为 maincpu.[][]@地址=数据
9 l& @" |; v, l0 j$ }" { [6 e 第一个[]:
, u, D _5 {3 I& b2 p o 表示ROM地址4 M& |/ q& Z1 ]' K% C8 T1 n
p 表示RAM地址
( K; r! {0 a' G# U- t. n/ a- W; \* c) B& N' u8 z0 S
第二个[]:
, F7 V% \$ j/ n- A d 表示4字节
0 K3 H' {" P+ P$ L; p7 m7 w5 i0 A w 表示2字节+ J- J0 W9 T& N C) M3 F
b 表示1字节
5 R' t* }1 I' ]' n/ s2 o! `. q$ J: M
例子:3 D5 a1 ^, @0 U& N
maincpu.ob@1234=FF
$ y: _. u! I% O8 Y3 S: F 在ROM地址1234处, 写入FF一个字节
4 I- C! `/ P. P$ f% t
; Q/ P6 w% D8 B' J( w maincpu.ow@1234=4E71
, r% s& T' D, d, D+ Q 在ROM地址1234处, 写入4E 71两个字节
9 u. q% C+ ]3 `% ]( ^; R0 H+ M6 @7 d! p3 k) q
maincpu.od@1234=600A4E712 E8 ~+ h7 c7 p" w/ v) h9 e+ \2 q9 f
在ROM地址1234处, 写入60 0A 4E 71四个字节
4 L( S4 M! d5 ~* e; J# T& W9 N0 H) `( k' D0 z7 p
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 a5 q8 C5 `/ y; x+ l8 |8 s
8 \% x2 O C/ O! \
) e. I& c% W0 Q0 `! C h* ?- A$ x$ f其他:
0 ^2 n! K& Y& a) a. v+ T dasm 输出档案名,地址,长度
+ R) P- _- {7 G) A: A 输出程序的反汇编代码. f, R( B1 l, @" N
例子:
2 g1 \% N! s: t* c; F0 n+ Y dasm 01.txt,0,1000000 b) w7 ]# o1 j7 o% `% {; I
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! y0 z2 Z% _2 R/ t+ N
K+ M% i( T9 ^# _2 x softreset
' h, [" w5 W' z: X8 c, N) c, V 游戏重启, 但不重新载入ROM
7 L4 y% f1 `2 k, l* y: A3 p2 T% _# h' _& r( i# R2 ^; m% R1 L
hardreset
6 @! U# }, `! V [( e/ @0 n 游戏重启, 且重新载入ROM+ }6 U8 T1 r$ h6 `9 L7 z6 w% s( o
s7 H2 r" K4 ?9 y snap xxx.png
! U& b' q0 B6 `! [ 截图为xxx.png, l8 j3 |; T7 z0 k2 W/ P" B$ Q& E% O
& e. Z) W. O" l( V2 C# H9 N! ]- k
+ }+ ?0 ~& X' l9 U. g @( T0 G6 \
, x3 B2 x& g- p! ]
. Y) o$ P1 e/ `热键:- L7 {; ^2 s: y* g; P. [
~ 中断游戏
% G( i# u0 }9 D4 J3 b F5 运行游戏8 b9 H/ |- l, F
F12 运行游戏且隐藏调试窗口
3 c; n' m7 j* V% U* _+ r; X F11 步入, 单步执行, 会进入子程序
$ s: q" b9 z/ C6 g. v4 ~ F10 步过, 单步执行, 不会进入子程序+ q) R5 d' {& Y& W1 T
Shift+F11 执行到子程序返回
% J# O; g$ s8 |; j8 U* A Ctrl+M 内存浏览窗口
3 G# K0 p5 E, x! h$ W, `$ | F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU" _( a1 }" l( i! B* `3 n
" `" z% {+ A; @) B+ J7 C- E
{:4_94:}
* Z* r6 l& w4 Q7 E8 f$ H- q9 k9 c4 n& m) r" l w; d4 `+ r4 ]
|
评分
-
1
查看全部评分
-
|