|
|
1 o2 i/ S& ]5 ^2 f9 [
很快速的整理我自己常用的指令" d4 {" c: ?% p3 e$ j; Z1 A
5 ^5 D% X" j4 z) W* E2 P{:4_112:}
, [, D& U3 n! D+ i3 c9 _( ^
( [) A8 ^ h# M$ ^+ eMAME DEBUG常用指令
6 `/ t. m; k3 K# h c( p
$ b& U. y2 ^8 R S: v2 @9 ^$ \内存搜寻: ci, cn, cl
4 d& x. I( l" F: _' [9 k2 _1 M" B. u9 r; Z9 Z. s
ci
7 S. b4 a& ?. E0 q 搜寻任务初始化, 每次搜寻一开始一定要输入这指令! O5 F3 X3 [2 B5 b# C: ]2 a% n
/ e/ F/ S) p, p% [ cn
+ B5 V: S L& a2 T1 s: V2 z. ? 搜寻指令0 g, P$ B$ Y8 v- F
例子:
1 k" \6 {" B; u: b! c cn eq,60
4 C: s& W4 q4 n$ z" c9 s1 z* Q 搜寻目标等于60 (十六进制)6 y% v# m: e- b3 X6 s' v; n
$ E2 n' K: K m" M2 [
cn eq,#96, u# p, e7 l/ u: `7 V# T0 M; B
搜寻目标等于96 (十进制)
6 h' M" A d7 w# f8 O+ |2 f' h" W# j4 [' K
cn eq
, a' A& [1 S. G+ a 搜寻目标的数值没有变化
; O3 q( ]3 c' g# n- W& b$ S# q- g, G0 P# n/ R$ [
cn ne
6 I8 E- D$ A4 i3 Z; R0 h* x7 N 搜寻目标的数值有变化# ]$ u2 v2 |. ~+ g7 I( V
& Z/ K F% E2 x1 _2 l cn +( `# p R7 I2 T
搜寻目标的数值增加: C4 a5 ~4 E3 `1 y& q. g8 r' c
0 z5 C& J8 c2 v
cn -; a& N/ G& ?- {9 h) a
搜寻目标的数值减少
; r! t8 S+ a) W , s' X, L! j" f; T C# U/ I1 ?
cn +,3
* h, X; R9 [9 P, h; u% @" u& _- }" } 搜寻目标的数值增加3 (十六进制)0 I0 x: D. A3 T
2 L+ Y3 J7 E" b1 j/ k; U& T0 Q cl
) c9 n# F0 X0 S* X; m. N6 Z 列出所有搜寻结果
/ C1 X/ s& a4 N% b+ D$ S$ `. x% h9 Q6 A2 E W3 n
cl xxx.txt& O( [7 r/ z! |8 \1 B0 q( f" v1 a
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- n# Z0 A7 G; Q+ V2 b/ ?, e) Y% D: c) B9 z
0 b% L0 @& F( z内存监视点指令: wp, wplist, wpclear/ A+ F2 |0 C3 ?* P
例子:
5 h2 v* K/ t1 ?1 V/ t) a, y wp 1234,1,r6 Z4 E, u' e) J4 `! Q9 S
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 {7 u+ K, o5 P+ I
4 L8 x/ z) t9 H. Z$ _" \ q wp 1234,2,w8 ?/ f F, d$ p) _* p& |% D
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 [6 X% F# }9 y h9 H
8 w7 Q. {+ e3 s$ k' ~9 }8 n wp 1234,6,rw
9 V9 D6 @- @! x 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度66 S4 ?0 J7 f: L7 O% ~9 V. d
1 X% s' A4 T7 @; |4 t
wp 23456,a,w,wpdata == 1
4 W4 {4 T9 T/ o% |" S8 u6 O, t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
u: X. [5 I N+ ?6 K# X3 w& ]4 G# w' g* s, Y R
wplist
7 o) Y/ |* c# L( {* }) | 列出所有监视点
- j1 o1 q0 ^5 Y$ F. N* g9 c2 }# ^/ o& @- E2 ~$ L c# |
wpclear 3
0 a# \0 x4 _' C! l% `7 W; ` 删除编号3的监视点
2 Q. V9 B; F6 w% ~' L3 n/ u( ~# O7 s( `& A
wpclear
; x1 F! G! y& R, a. s 删除所有监视点( z0 \ w6 f# h0 }2 m
( d' ^2 T. H% y5 s" g1 M
1 j8 J6 i# l; S% u2 j5 F5 U4 P/ V* `
+ S$ A+ f5 e8 @% O3 [程序断点指令: bp, bplist, bpclear
0 ~# h" A( f4 s b. I 例子:5 D" r2 M! C4 F3 t; W" a
bp 1234, o, R6 S# K/ r% q' D0 g. Z4 F
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断+ f1 J) Q5 ^6 ?- V8 I, M+ |: j" z% g
! J0 d c: Q5 W" d1 t/ K) ?6 k$ l
bp 23456,a0 == 0 && a1 == 0
/ D. Z, |4 `8 I2 W# }" h4 u/ e 在地址23456下断, 且中断条件为a0等于0以及a1等于01 U W9 `6 u( X. J) p. b/ G: o0 }2 a; O
" r( j7 i8 l' v! M4 }+ W5 I$ E bplist
# t. j) b4 f" d P n# n% j 列出所有断点3 m1 _# Z2 n y: C
& N3 [% ~ o5 b6 c E bpclear 3
. W3 g7 Z# M2 r 删除编号3的断点* C! ]8 X7 E1 T. C
: N- g8 V2 F3 V; M3 K5 D bpclear4 @/ u9 J7 q; D' |2 N" M: e
删除所有断点 N( ^9 n4 }3 d
9 p: l) u9 |& X9 G
" j, ?5 I4 _8 x# }& h
/ R3 v' I5 Y3 b! ^; }; L跟蹤紀錄指令: trace
1 N5 d* l( L) f8 Q: r o$ Z! e- f# | 例子:
; b& H4 Z+ o* S: N9 s8 w trace 01.txt
: J0 |+ l% g. O$ a( } 跟踪当前CPU运行的所有代码, 输出至文件01.txt
- q/ _, h6 |4 _& Z# R& |1 s) i$ I5 x4 K U) c: g# U& z
trace off# g( f+ `2 ?, ~+ P/ w9 e, o
停止跟踪, 并且关闭文件
2 s" ?. M* b" Z
1 P9 H; S! k0 n) }. U8 K) W trace 01.txt,04 }) A6 u, [9 I) Z( M6 f! d
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" p2 ]6 @/ A I1 m
+ V1 {0 l0 i$ d; w; y2 R$ M
trace off,0+ @3 E+ h$ d' u. g- e
停止跟踪编号为0的CPU, 并且关闭文件
. B) ?2 \+ }9 F
]* A2 B8 K$ R* ^! L" C, | trace 01.txt,0,{tracelog "A=%02X ",a}. r( q0 O- ~2 `
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt % F) E% H" e6 W4 u8 o j5 E
并且在每一行的前面, 写上"A=a "2 A/ I; f9 M1 l4 b
"A=%02X ",a为一个C语言printf函数常用的输出格式2 i6 q: H7 T t, N
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- W2 R) r# W+ Z! _/ B, N: h
X表示为大写十六进制数' L$ x+ t) S% U% ?% E# [4 x4 K0 z
& |. a6 D* I1 h- k, l( t
* L5 }2 @* a2 |: s9 q
" r1 _! ?# Y1 H5 _ i. s) U
内存直接写入指令: maincpu
, t! d( r8 q8 ~2 H6 i; ^5 m% K! v 格式为 maincpu.[][]@地址=数据
1 ~: S: C3 @3 b# J' f n 第一个[]:; @- b4 G6 S- X
o 表示ROM地址
$ {$ \! n' }$ [7 U p 表示RAM地址0 J7 {2 N' X8 E$ L$ E+ X
& f% ]2 w {. i3 a
第二个[]:
: \: D$ Q! r' [: s [# i, p6 s6 E% D# N d 表示4字节
, Y0 ?/ i; e. D# q w 表示2字节
6 k7 ]0 x+ k5 s! B6 {/ z! z p# { b 表示1字节0 C, ]. }/ U# w4 v( A
0 |: v; U7 D5 H3 v 例子:# |; w7 h9 E' J3 ?/ n. a
maincpu.ob@1234=FF! A2 }: e5 B5 l) y5 Y; U
在ROM地址1234处, 写入FF一个字节9 ~& D! P7 ?, t: I( Z- p' K. F
7 H6 C, i. L- ]" b g maincpu.ow@1234=4E71- w% u Y: C: i7 T- c, L/ d
在ROM地址1234处, 写入4E 71两个字节
& Y" f( ~, c0 n2 H7 ?4 e3 b6 D+ v( l4 P4 F. v3 q- C
maincpu.od@1234=600A4E71
, _( C$ \+ q }/ O w- o; c) N5 B1 [ 在ROM地址1234处, 写入60 0A 4E 71四个字节* f: x @& T2 K/ n: j. b) R
6 r1 X/ q# n% a9 J; I
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
! ?9 m* w5 C9 x! |" M0 D" |
3 B9 i- A- V: E; s$ N% L2 z* \9 a7 v# S S
其他:
" z3 @# E% q4 y. f1 t) O dasm 输出档案名,地址,长度
; c% s0 h6 L9 v& R 输出程序的反汇编代码
2 R9 n, V# O& N" G9 c+ ` 例子:1 Q0 B* a' E& M" h4 T3 d/ K8 X
dasm 01.txt,0,100000' z: @( A% U9 a; a- G
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt0 ?& b6 l8 K4 Y6 d% P
: \' ?: n9 Q+ L softreset8 Z3 T7 ~" @; ^
游戏重启, 但不重新载入ROM
: Z& N. R: j8 b# F4 K/ n0 s$ ~. }; e1 t! \
hardreset
5 e8 k1 P# |- v+ U0 [; x/ T h- |: L 游戏重启, 且重新载入ROM. e8 P9 h* c3 B, t
5 G% {+ h2 f; c) ~+ ?) \9 O snap xxx.png U" E# k0 m9 v0 m% }. `! U( \- H
截图为xxx.png
. n. }: G$ k+ g' G
2 E; t: W6 I( x* R. o& a& O3 u
2 i; q1 [6 e8 h* |( K8 O, h0 F
* k h7 |8 \* p. M & W/ n0 U. x% M+ v8 j4 L2 [
热键:
2 t9 W5 G8 q5 W6 V# x2 r" W( i ~ 中断游戏
1 @- Q2 p- @; z* B2 q q- q0 I F5 运行游戏! q1 l0 D# }, e; ^1 s+ i
F12 运行游戏且隐藏调试窗口
/ `: v. J' ?6 P) W* ?$ O+ u7 o! Z) p F11 步入, 单步执行, 会进入子程序5 B. \2 h, S5 ?- s
F10 步过, 单步执行, 不会进入子程序
X, k! D& A# \* h Shift+F11 执行到子程序返回& m. T$ _' u! Q# F( G
Ctrl+M 内存浏览窗口
" ?0 d' k) @* C3 m$ ]0 {0 ^ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# Z n$ B$ H6 g8 Z$ E
. j1 r, o8 ~- A7 O$ ^, Y9 H{:4_94:}
& S- u; a z0 w
% D5 {! T* s( R9 h- i |
评分
-
1
查看全部评分
-
|