|
|
; f5 c; ]9 v# x
很快速的整理我自己常用的指令
O1 H7 D% V1 ^+ P+ b! g8 Z# k. Q' ~
# [5 ~+ [' J. d; r{:4_112:}
# a" D) S7 }; i. `& H' Y# z( d( s" u/ D& X$ B9 c* Q5 M
MAME DEBUG常用指令
0 p6 G! y+ S; o* j m: }
( X& C" I, A! u' ]$ X' s内存搜寻: ci, cn, cl
, _0 F" n+ [8 m
6 U2 e; i% e* q* |% P4 a0 F2 ~ ci
# F; a) W" t) j! x! \8 \7 s" l' P, K 搜寻任务初始化, 每次搜寻一开始一定要输入这指令% z+ v6 w! ?- x9 H6 u$ s7 w
$ g6 R2 F1 Y5 o cn
+ I5 z6 w1 E1 G) [ 搜寻指令
5 ?0 ~( ]+ O) l6 t- H6 O% a 例子:
: z& k. Y- n: i) O2 y cn eq,60
. k- W+ @( O `4 s3 v 搜寻目标等于60 (十六进制); k1 `2 G( d4 y4 q
1 W& q' G* x K+ r7 L" N# _
cn eq,#96) r4 ]( e+ B7 s3 X* |4 y9 Q
搜寻目标等于96 (十进制)
. J3 h1 x, n" t8 C; {" j5 U# L" a$ X8 x1 q u9 J/ P
cn eq
( z4 B3 Y7 Z) [* A 搜寻目标的数值没有变化) z4 S& _8 |) r: w/ m
9 K6 U& W) G8 F I( d M
cn ne
! \# ~5 f9 N4 {( S 搜寻目标的数值有变化
- M+ ~% O: A- g6 S& D0 l
$ Z: R9 |- F L! Q8 G$ f' y cn +
" \9 e( Z3 x7 k# K- X$ } 搜寻目标的数值增加
' O1 n/ E7 R9 p7 @+ M 6 N" [" T2 d7 t) G
cn -
3 G# m% n( A# m1 n 搜寻目标的数值减少% I4 C) h% K8 r
4 x/ M5 `2 z. Z! J5 I
cn +,3
% w4 F. f5 N3 @! G1 u; O' |/ y* Q! } 搜寻目标的数值增加3 (十六进制); t4 Q4 j; C; Z: z3 \8 O6 O
# @0 h6 _0 G5 R" W/ q w4 g cl
/ |- t( P5 ^$ G5 I' W* l8 x 列出所有搜寻结果4 U# ] g2 N' v, u4 F. X
* [: R9 x" T. E0 S
cl xxx.txt+ T% ^, [) [0 i
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 P; }# K, M a% h0 N
$ T( i+ J) t# r( _& B. q: ~) s 8 t! k5 ]$ o9 O( l! {7 l
内存监视点指令: wp, wplist, wpclear
; T5 }" E$ I1 N& a/ B 例子:5 ]3 b7 y `5 H
wp 1234,1,r
" z' s( }. h; ?3 O 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 Y, F+ T1 Y) e1 x# w( M
: Z9 M+ Q% j9 ]$ P! N2 _ wp 1234,2,w
, C' ?7 G! b+ C1 ^ 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ [* | {5 |/ T9 ^# L 2 d* Q- E0 N6 n- v! ~
wp 1234,6,rw& `' a7 Z3 {% I* |
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( ^9 N( ~: b/ c2 L& H% t0 M' \8 _; m# C) j2 H6 D3 C
wp 23456,a,w,wpdata == 1
# V* K7 m" X9 ~6 ?+ X! x3 t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 A% m4 f+ r% `+ X* F8 H& _
" K; X1 j! L5 {& y! i wplist/ r& U; D+ D2 H1 e! V* R* D6 k
列出所有监视点& D/ r3 _$ G Z, E/ @+ ` M, r( m
$ J$ e0 }1 ?: {* X+ B wpclear 34 R% Y$ {, p r* ^& {
删除编号3的监视点$ [ w1 H* S/ _1 A- s, w
1 A8 n' I, C$ t6 N- H' d wpclear
( t) a$ o$ z8 r0 } 删除所有监视点9 X7 t7 `, M; M9 g3 g7 H# Y( h
: {9 ~' f, b1 I' ?7 a
: E( \& O" {! |9 z6 K. P! l! g: h, k# g) d
程序断点指令: bp, bplist, bpclear
. K* a. {+ R' h1 B1 {, F! ]( q 例子:
, N. G5 p+ E/ R6 f- j bp 1234
5 P; n/ o: k$ B 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 ]9 m5 [) }5 j* ~0 L
" f! I5 J" N3 [- R5 M# M5 X3 Q
bp 23456,a0 == 0 && a1 == 0" z; R8 N4 q W
在地址23456下断, 且中断条件为a0等于0以及a1等于0
5 T( t% Z- U6 K' X( c* L# v: m
6 Q" L. z% ]) Y; O0 j% O bplist
& h/ i# X- t6 r2 l. T3 O6 b 列出所有断点
. Q5 r9 K" ^& g8 j$ J" f7 x8 } u9 r. t% w! [* }7 b; D0 i& n
bpclear 3
, M J) ]3 S, \4 c/ r/ ]: J0 L 删除编号3的断点
, R: }' X3 A, F5 j O5 R, g/ N* E3 ?5 W; [) C( F( K0 l
bpclear
) @7 d+ r9 l" d3 ^* X9 F 删除所有断点
6 Y" y% p1 l: c Z# ]. |! I- e) |& ?) c9 U
8 c6 Y; I$ `4 G, a ?/ N/ f" b
( ~) X, h; K2 |& F4 S2 i1 ~跟蹤紀錄指令: trace* z7 S1 o: f* C+ c) s* \
例子:" T* a) q& d0 @ `
trace 01.txt
3 q8 C2 }! D8 M5 G1 k% M 跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 V* _1 C5 Y L
8 D" Q: B6 C. w0 ?$ ~ trace off# u" J k4 u2 Q7 ~0 z1 A* M% E* p8 B
停止跟踪, 并且关闭文件
# W$ e( ~) r+ r- g' U+ }$ B0 N( Q! m: ]* b; Y
trace 01.txt,0
% n0 N4 ~5 J' ~8 e0 r. L 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& G. X: i3 X" M
( b" H3 K8 [1 b
trace off,06 u4 R( U8 q$ I# P8 l! y
停止跟踪编号为0的CPU, 并且关闭文件7 F! ~% y4 N- x9 n# i k* e [+ v
/ @7 u1 \4 _( M- e( J$ W k0 I
trace 01.txt,0,{tracelog "A=%02X ",a}
; h; `2 m8 z% k: v$ { 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" e' h# K2 d6 D1 @2 k7 y 并且在每一行的前面, 写上"A=a "
5 ~, C& q+ K3 p "A=%02X ",a为一个C语言printf函数常用的输出格式
& v! Z: q0 w, A+ E 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
3 ]1 J! ^4 l7 }$ {% z8 ]6 k4 ^% ~ X表示为大写十六进制数
6 Q. m, B1 d) \2 o9 z, Y& J# E* G6 ~3 B' _. g: [8 q* H
* i2 N3 V4 s$ I2 M; l7 V5 ]" V; j
8 B& N! ]: W- `内存直接写入指令: maincpu' s' b U( M& }' H
格式为 maincpu.[][]@地址=数据( ^* l* e7 y. W" d! ^' ?# Q/ b( N
第一个[]:
m2 A7 H- W5 l* q! ^4 g o 表示ROM地址
. X3 z0 [, T+ D/ b; {: \ l9 ^ p 表示RAM地址
3 ~! x- {0 s V/ |! r* |& ?, ?
: t* s; p2 u: O) `" |* I 第二个[]:* y; |: A7 _2 e# H& H9 n
d 表示4字节
. {4 Z. ?2 l& c8 \5 q w 表示2字节
: |: M8 p" j) g% ~' u b 表示1字节
. f7 H7 j3 Y! a" M& y
5 i! s2 }7 [# S# T 例子:
, O+ N b' @* a/ u: s maincpu.ob@1234=FF/ `+ k O& D4 X3 e* N- Q
在ROM地址1234处, 写入FF一个字节
/ V/ _4 M: w: C- j* q% ^( P$ M
1 }8 i* a- g6 M" ^/ m! p0 s maincpu.ow@1234=4E71( i. u( D3 {. C/ R
在ROM地址1234处, 写入4E 71两个字节! _, m" p& B" _& c" ?
: t+ E/ K, r" ?: i' X maincpu.od@1234=600A4E71
8 l4 m$ i; I0 d2 |# O1 m; f8 q+ E, t 在ROM地址1234处, 写入60 0A 4E 71四个字节- U0 |) p- y+ t8 X) e# T/ a
% W. I: x0 d0 A' X' o$ m% _
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 k# C: H+ X3 K# G" o# i 4 p8 t, @. g9 r0 k- m
2 Q, u% D- h' H- |3 \# Y其他:6 f. m: }+ X4 Y3 B
dasm 输出档案名,地址,长度
9 u3 P/ k. @; r( L# `' x) ]. ?5 Z! X 输出程序的反汇编代码, [2 ]! n* w) r0 C. C
例子:$ S G7 V9 T' f& Y8 I" V% d
dasm 01.txt,0,100000$ x! G: F' ^1 C1 k' }% }$ ^8 Y
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
& U: z- j3 P9 p- e2 {; E+ ]$ V5 Z1 j' k+ O5 i X8 t) f
softreset
1 x& f x( q5 h5 H9 \ 游戏重启, 但不重新载入ROM
! x6 H @7 L% {
$ a0 u! u7 V/ J6 Z hardreset f/ ?5 p& T, m* e
游戏重启, 且重新载入ROM
7 r+ {% C; i0 B% q# q' }- n0 }& C6 I- a' c! G7 f
snap xxx.png8 e: h- D) D. i; f
截图为xxx.png
* X' L: m7 v4 _/ W4 T
7 K- l7 W' ?0 Y: E( m8 m $ j9 b* a/ g2 u- |% V( L
1 ?& H# i$ Y0 v
* C0 B$ x1 {; M6 S+ M热键:
5 V% u% H" o, h" f ~ 中断游戏8 K/ n, s) c2 }. I* M3 S5 p/ i
F5 运行游戏* V. n* K2 b% D9 E x( U2 a' Q1 r1 Z$ w# ]
F12 运行游戏且隐藏调试窗口
' _7 ]" B! j! f7 G* p F11 步入, 单步执行, 会进入子程序
7 O) p* D* w6 z4 c F10 步过, 单步执行, 不会进入子程序
7 I7 Y6 d# ~) c( X! o Shift+F11 执行到子程序返回1 P& P- `' i6 D- S% F% h
Ctrl+M 内存浏览窗口
& Y; h4 b1 \$ M" d8 n" L, O( x* ? F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU+ @8 Z5 O/ w0 u
' W2 T0 b4 o3 q0 o w* w{:4_94:}
6 a5 E, W) ?. r: |* Z/ |5 @. Q$ \; q: O& q e; k9 @ f
|
评分
-
1
查看全部评分
-
|