EMU618社区

 找回密码
 立即注册
搜索
查看: 1029|回复: 7

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式

1 ^% _" z1 v/ ]8 h2 g! \很快速的整理我自己常用的指令
' v- H% R. f' J% [) k: D4 A9 y& a! G. W
{:4_112:}
/ L5 F# S, E) p4 s) ]. f& j/ J
/ o$ ~# |9 V( `* x9 P$ @MAME DEBUG常用指令
+ p8 O% ^& r/ U' x/ N. Y6 G( M: h; ?- {
内存搜寻: ci, cn, cl/ m$ m9 ?/ J% x. p" ]: I3 b9 k- G+ B
1 }- |1 `2 M0 W& w; `( G0 W
    ci/ D6 Q1 S8 ~. {' D$ U& o9 H  t. [" |! ?
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令1 v5 n, O  D" D( t1 m& i

* W8 n0 X1 \3 V7 y0 z% v+ o. Y    cn* r( i% I7 \1 L4 `. I* ~' c% |
    搜寻指令  a9 u1 |% M6 |3 `+ I) M
    例子:
% T# \2 F. \1 @) o  `) m$ ^9 p. u    cn eq,60
: m  a1 U/ M- Q    搜寻目标等于60 (十六进制)3 O5 X, X5 Y6 w* Z% e7 Y' o" h- x
        
8 j; ^3 d# M$ I1 V    cn eq,#96" ~$ y9 g3 o) Q; |
    搜寻目标等于96 (十进制)
0 ~" j7 }0 n+ v) t) j1 a$ p9 [7 K% A# f- n, x$ v; {$ ~
    cn eq5 m4 p- K3 f8 O  v% Q, ^9 X2 p
    搜寻目标的数值没有变化
+ x4 G6 f$ V8 J9 L8 `$ U/ j/ n4 C  v/ T, |# R
    cn ne- Y/ T: r) l+ G0 l3 F
    搜寻目标的数值有变化3 I" Y' i# G  z2 a9 D
        
9 C5 v2 j$ P. }9 h; f0 Z    cn +
! P  W! U0 b9 X5 A5 q6 O0 G    搜寻目标的数值增加" t7 V, h: S. F5 V/ C& ]% ?
    ) B. b3 b/ y7 k
    cn -+ b) H( I, c# ~' K& _1 s
    搜寻目标的数值减少
# O! c. p( z2 H* P# `( |        
' n; o( V$ l# m/ V2 e1 @- D    cn +,33 U1 N: j9 s' a6 ^
    搜寻目标的数值增加3 (十六进制)# X( ], ^% ^. W# \7 N
5 b0 v! c6 ^& D! H/ D, U
    cl; a: R+ X$ t' g( A2 y# i/ _
    列出所有搜寻结果
5 V( K3 m' [# ]7 I' w. @# J! x
! K3 D  _7 y# l  [    cl xxx.txt4 w- ^( u& N) c  O  @% ?
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* d4 M( A5 A8 S) n5 u& i
- [" U$ c" B" e( l* h
   
$ m7 `1 t0 I# M- ?8 S- z内存监视点指令: wp, wplist, wpclear
% O6 A! }% C1 }  X8 x8 x9 n    例子:+ N$ J% ]# |6 o: b. ?
    wp 1234,1,r: l' b; B  C, l8 b3 j, v$ s
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ v; _: T& |: p" f  f
* G0 S' m6 v; Z7 a6 x7 s
    wp 1234,2,w
3 F1 N  H2 C4 E+ @, o' |6 M" F, O      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ l/ P2 s; s- h) \1 }( K' A
     # w. y6 ?8 B& }" _3 _- L# O
    wp 1234,6,rw, F: y7 |/ v4 C! E  [
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& l6 x2 _, ?. c* H% T4 R' _+ n. z1 q1 C* k8 |4 w: v; m# Q2 u  Z
    wp 23456,a,w,wpdata == 1* l- \8 S2 ?# y$ O' ?
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
5 ~& E- S: l0 d4 C6 f+ D
! |2 a; J% I' j* L4 L  |    wplist
8 _" R# X, |+ {+ ^; X/ \      列出所有监视点& [( f8 w' N% W' N6 O; p6 M9 v

  P8 U6 D; Y. \# ]& G    wpclear 32 u3 ?6 }" W3 G8 [% G: h
      删除编号3的监视点
/ M% f& D' h/ U% {$ T) N* e9 |- D6 d+ P
    wpclear  s/ u0 Y+ D4 E- ^) p' ]0 {  F2 Z  \
      删除所有监视点
& w9 ?% S8 ^6 p8 _6 R
: {  K3 B$ u" V, {; y- U) T: k" t      
5 P1 x5 D) o. O: x( i0 M% z0 [+ N! u! x8 o
程序断点指令: bp, bplist, bpclear* h6 A, m" p+ C8 F9 u
    例子:* _. ^" i5 _" C/ f% ]# |+ J  n9 C
    bp 1234) {, X1 z: Y* x, w( ?# L: G
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* a, ?4 d; u  {. O& o& e
0 I+ K' ~) b& y
    bp 23456,a0 == 0 && a1 == 0
1 {( A- i% E- X9 ]. g. ~      在地址23456下断, 且中断条件为a0等于0以及a1等于0- E+ c6 Z/ B" C* x) M0 G
; k5 S0 d. J: d; g
    bplist3 p. G/ n; w8 I$ ^, A. A+ o1 w
      列出所有断点
( M7 {8 [! C# B8 L/ ~- A4 R2 ?; h9 l- [: V8 Y; q3 I% X
    bpclear 3, i+ D2 Q# {" M& ?) s3 N
      删除编号3的断点
& a8 a' J6 g  m: Q, Q8 k3 v
) ?' p' S( Y8 T* O" K; S$ D0 o    bpclear/ P- B1 i5 p5 i( [" ?" I1 k
      删除所有断点: {6 z" r2 r4 {. n8 q- d0 @

  P. n! a6 S1 D. H$ U      
# K4 U* Z/ R) C- s9 P      " n' |' ?: k. d1 L9 r- [# z
跟蹤紀錄指令: trace
7 h% W5 ~6 S( [( Z    例子:
0 z" F' h1 g+ ?/ P    trace 01.txt$ p9 Z( U3 v9 Q2 L6 U
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 ]5 ^, G) H0 c! x. i) ~. A& _, M3 ~/ }( r) e; Y
    trace off2 N- p+ W  [% `% `, f
    停止跟踪, 并且关闭文件
1 @2 f3 I% U2 Q2 q. _* d6 z; j: y% G
    trace 01.txt,00 u. U5 |/ `" h% N. ^/ s
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! B4 ~( a" @; G+ b5 }  G
7 P4 I' Q0 ~- @1 R/ Q6 k. N2 l* \    trace off,0$ V6 @( Y9 ?5 f9 f  j3 E% W
    停止跟踪编号为0的CPU, 并且关闭文件
7 v  K7 O% a" Z" M) m3 v$ o# J# [4 f- P; I9 d0 n2 [
    trace 01.txt,0,{tracelog "A=%02X ",a}
# {) c5 q/ i# h    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt * h9 L. O: w  q, k" v
    并且在每一行的前面, 写上"A=a "
4 x' Z! z/ c) u    "A=%02X ",a为一个C语言printf函数常用的输出格式6 ]0 n! j1 Q9 d% b: H0 t) z
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入8 `# q5 d0 |9 M7 b; n: t
    X表示为大写十六进制数
) F% w4 t8 c: o& j  @$ M; ?* G
1 T4 n$ _8 Z  s2 V
+ q  S* l! h+ K
! y8 {! }. |4 Y! K5 _% o1 a内存直接写入指令: maincpu- _( m! f( P) t+ T9 R3 ^
    格式为 maincpu.[][]@地址=数据2 `- E+ s6 q; o9 c. ~+ s
    第一个[]:
8 p+ V3 M) e* y# y  Q% _+ z    o 表示ROM地址
) O7 ~# w$ v* j    p 表示RAM地址
) n. q' s8 k' e" {. `9 R$ e# v( e9 ^( b# C& n& X$ n
    第二个[]:
! q2 K+ M0 U6 b0 W9 N4 B: ^    d 表示4字节
+ v, K' p4 u8 J9 S    w 表示2字节) {6 k- C$ S# Z% ~; t
    b 表示1字节
/ i7 c7 Q1 P/ Q$ S7 e% F' V) E" o. ], N9 T% c  L
    例子:4 H$ l- N. T4 k. l
    maincpu.ob@1234=FF, R1 L- E6 P- X, t* g5 D* B
    在ROM地址1234处, 写入FF一个字节) ^3 J6 J% @- M( u( L

$ v" w' [) D4 t$ ~2 v5 Y    maincpu.ow@1234=4E71: C' Q1 M2 P8 w  Z
    在ROM地址1234处, 写入4E 71两个字节
6 X* ?/ m. N2 _6 K& B
; I! |0 \9 l9 e1 Y" j    maincpu.od@1234=600A4E71) J" C) v5 X& q' h$ S/ S7 R
    在ROM地址1234处, 写入60 0A 4E 71四个字节
5 W7 f& L  L5 k( H% z! F: A/ `' @0 s. ?- L: C- s
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 E/ i" S6 W1 J/ l* w: j$ p
    ; |) Y' |1 @6 K0 |) L( Q

5 u1 T8 H" T. d/ Y& U) T其他:
+ n  j4 R7 d1 q! W  n2 V% t4 Y    dasm 输出档案名,地址,长度
9 Z+ B. E% _' \) b/ z% n    输出程序的反汇编代码
0 e' R9 i1 R" ?  e- B6 [! u    例子:* j7 K' \5 S4 p
    dasm 01.txt,0,100000
( e& w% W* P; K+ U0 p& n; k1 a    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
6 ^7 s% g2 b; o5 y0 s
: ]! r/ I& @3 I  X5 b7 S! v. D    softreset( o- f) n6 E% i& N* M6 p
    游戏重启, 但不重新载入ROM
5 K; L7 |1 H7 _9 _# T) V& S1 R2 S. g. f
    hardreset0 n- `, Q4 Y, c1 W+ P' w, {
    游戏重启, 且重新载入ROM; h8 i3 h3 E% ]5 K& [. m/ J
# i( a* W# k+ v- N
    snap xxx.png1 ~9 k# l5 v0 ]/ F4 N7 h$ x
    截图为xxx.png
* d* b1 j( J9 u$ j  a( C+ O
! {9 S  W# C% \+ R& I3 T  . t0 M8 O. P6 c
  
7 Q" ?) t+ i( e. O  C  $ E3 r- ~6 a- c$ m2 s- U
热键:
( K; Z, A8 e7 `* ]/ u    ~ 中断游戏% N& m4 S  M% F1 S" X
    F5 运行游戏, q. M( U; O# V9 L4 f6 J; D0 z/ i
    F12 运行游戏且隐藏调试窗口
$ f+ R+ M7 u* w: v  m* T    F11 步入, 单步执行, 会进入子程序' H/ `% J  B  @3 c5 C5 V. b" H
    F10 步过, 单步执行, 不会进入子程序. z, I. |9 U6 g0 o
    Shift+F11 执行到子程序返回
( n# d8 q8 Y$ N0 b4 a! C    Ctrl+M 内存浏览窗口- s2 G% R* I( F7 J- y4 O
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, E" \# J  D' [' w3 @
) N' F9 Z# U: ~1 ]8 V% Y) p3 ?{:4_94:} * ~, A) y* K7 J! G- e
& \2 l) n, {0 r! z; Y$ C

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-3-20 10:14:03 | 显示全部楼层
我又来顶帖子了
[发帖际遇]: 银河漫步踩坏了花花草草,被罚款15 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2544 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- Z8 f" h8 k) _$ X' ?- K! l0 }7 B- K) Q" V6 I2 r
PS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 2013-3-20 16:27:53 | 显示全部楼层
看到二楼就忍不住顶顶

签到天数: 31 天

[LV.5]常住居民I

发表于 2013-3-21 09:48:53 | 显示全部楼层
先顶一下!有时候研究一下
[发帖际遇]: sdiencelee 在论坛发帖时没有注意,被小偷偷去了 1 个 柠檬. 幸运榜 / 衰神榜

签到天数: 149 天

[LV.7]常住居民III

发表于 2013-3-22 23:02:26 | 显示全部楼层
要详细些的东东
. s/ B$ P5 k5 N& C  W11111111111111

该用户从未签到

发表于 2013-6-14 19:10:18 | 显示全部楼层
感谢分享,谢谢。{:4_118:}

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2025-2-19 06:17 , Processed in 1.083985 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表