EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

. I- k! x: \6 V很快速的整理我自己常用的指令$ J8 E1 Q. l3 c6 G" j0 K/ y$ R. @

  x2 z/ [9 a1 r' ]{:4_112:}
5 W& m) J" P/ ]3 C0 J- Y) v
$ G) t5 y% `  A' d4 I  z) D( l3 hMAME DEBUG常用指令
2 ?  y6 \3 c' T2 J9 B
" y. y& P' O  ~. [+ e内存搜寻: ci, cn, cl
" \! x# ~: c% h$ q* `5 S& p# j/ A# @" F2 x3 ]) _% x
    ci1 m5 }; s, l' L4 ?5 _* B9 `  Y& ?1 h
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令! Q. X& f! y. @6 |# s. |

+ c4 M$ F3 G- G    cn& ?4 N3 [  {4 T! f
    搜寻指令
! i8 E. ~& k# ^1 O. K9 J    例子:
- |( [' q0 T+ E# Q- U/ s2 t7 Y6 b8 G+ k    cn eq,600 U! |3 h% N+ D5 \* \! J
    搜寻目标等于60 (十六进制): Q5 f+ \7 f% t5 O3 W. s
        # C( i$ N/ N& x3 o4 Q
    cn eq,#96, ?# c2 J# w9 |
    搜寻目标等于96 (十进制)5 Q5 N: S1 r) B: s8 Z; V! c

! ~( \4 ~# l  t. R- g1 n+ z    cn eq) F- G) |7 s1 R( b
    搜寻目标的数值没有变化+ d2 \- M0 K0 c& x4 q# }  N0 L9 q

% T$ t$ g2 l+ t    cn ne
& E1 F( p( K/ Y: V    搜寻目标的数值有变化
9 }& R2 l4 V4 A8 \0 |/ K# Q        
* A+ \; l* M7 x: j" u5 a    cn +
8 L: }  b. F! M) \( X* z$ H    搜寻目标的数值增加
( q0 C/ B8 k2 f   
* `% G# R1 c+ O. K( m( Z& v    cn -
6 d/ X/ Y& e2 d  h    搜寻目标的数值减少
/ N8 ^( M3 Y! H* {        / k5 R$ {' v( O( a
    cn +,31 i: O1 p7 z) ~" n
    搜寻目标的数值增加3 (十六进制)
8 _1 w) A, `4 g) J6 |) Y
2 J7 B% ?3 ~! h# e5 V    cl
, `8 a9 ^. \. A# Y. X    列出所有搜寻结果
; J5 Q" d) e+ E0 K+ g* U% s# G5 M2 z! y+ F
    cl xxx.txt
* J/ i9 U: }+ v  t% F    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- o) e# L, z; A+ h/ k3 ]3 F, o( k
8 A. C1 ^6 ^/ b7 V) \5 b   
9 I0 q% `5 M3 g/ y& z% ~' _内存监视点指令: wp, wplist, wpclear. Y9 u' W- e6 C( ?
    例子:
- R, P5 F% T1 {6 _! ?- _6 Q    wp 1234,1,r
# y0 B2 j; {$ b0 h& ^. g9 V      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1& y- d: S4 G9 I" o( _* {8 O5 d4 g0 m
5 x7 L, U/ }/ B5 j% M+ e
    wp 1234,2,w. A7 [3 l4 V9 r9 H
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 ?! K+ l8 t- |     
! i" v4 X5 \8 b5 B1 F. l- E- X    wp 1234,6,rw0 ~5 W# B0 C( G
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
. }4 F/ z4 O0 S% c
" a# X9 ?: {- ^4 D# ^    wp 23456,a,w,wpdata == 1
# b: K1 P( t& ]. M7 l$ }! e. M/ j      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* F* n' V2 t9 w: r
) z! ]- ?5 L% |" ?    wplist4 x- g3 V: I8 C1 y
      列出所有监视点
2 r" _) G% G) A$ [- y* T- K  B( N; l0 ~. U8 S" V
    wpclear 3: r7 z) e* u% Y1 L9 ]
      删除编号3的监视点% M' x/ u2 g! B1 W: h+ B9 q% N2 s& D# ^
% p' I/ W* G- k
    wpclear; r: g- h5 j; d; z( n" K5 m
      删除所有监视点
9 t4 p& W! Z8 c$ O6 @( r. T  _- ]
3 a- y- _$ }' u. A8 _: j4 f1 B      9 n# @4 o  x1 W* ?' C0 U

# ~8 u- o- N9 Z8 B0 b程序断点指令: bp, bplist, bpclear- `% v% i$ T( Q
    例子:5 n' j1 L# Q- v" t, L/ ]% s
    bp 1234
: J* b( n9 k3 \      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
$ S1 B9 o( C  a; x$ d1 R; [' ]+ f' ?1 k: K* _  o& W+ ]
    bp 23456,a0 == 0 && a1 == 0
2 R& G$ v# K. r9 _1 R$ P1 }% i% \      在地址23456下断, 且中断条件为a0等于0以及a1等于0
: C3 O# G  K9 H" _- e; [5 {) v+ C; Q/ o2 _0 \3 ]
    bplist, t' X( a, e1 m$ {
      列出所有断点3 x, T' Y9 \0 q. u

' c& x1 F8 f1 f: n    bpclear 3' w* C% v) @& @- V% T6 k: s( q& ~
      删除编号3的断点  V3 X, ^4 o) m) M. q6 A
5 m' o! I, L8 {1 H, _
    bpclear' A3 g3 _6 P. u5 N5 x  O, _
      删除所有断点7 |% J  G) N! D$ t$ W! x
$ F  @" `* ]% v
      
& V5 |2 n; j8 ~& U      
" W8 t1 M+ @; H跟蹤紀錄指令: trace1 r) L" N# F9 k/ u& ~
    例子:% |1 J$ K% M. F. G8 a& P
    trace 01.txt) i6 ]' c0 c6 `- ~; s/ x/ y2 U
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
* e2 }+ U2 V4 A# L% O
' L" R# n9 Q4 o! Q0 ~, c6 C    trace off3 Y1 A8 x. C5 ^  v" C
    停止跟踪, 并且关闭文件. u7 a( h& F0 @: m1 t9 V

# Q" [/ K9 Q; e0 j! t+ _    trace 01.txt,0
$ H& @0 Z' J5 `) \$ H, F    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& w) {2 O# d+ f7 {  Q. d+ A3 c2 v

: z+ O# \( y' W. E    trace off,0
( p3 F5 {7 l$ S% {9 j    停止跟踪编号为0的CPU, 并且关闭文件% @1 S6 j( O8 B( v
4 B1 B9 f1 ?8 X
    trace 01.txt,0,{tracelog "A=%02X ",a}
& k9 p! ^) Q& I9 g    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 k4 H8 a/ g* U    并且在每一行的前面, 写上"A=a "( m- }9 q2 |% \# Z
    "A=%02X ",a为一个C语言printf函数常用的输出格式
6 u* P! F' s' W3 [  X    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
6 I4 W8 |- B; c3 v+ j8 U    X表示为大写十六进制数3 o- D; a* _! B( Y
% Q( Q6 N  l7 B9 T: E; Y6 W/ E
; B' a4 |9 I! \  R. Y
7 z5 z% c3 W) D# h% M7 M$ u$ x7 J
内存直接写入指令: maincpu
* Y9 n. W) n* c( l0 h    格式为 maincpu.[][]@地址=数据
3 a6 Y$ }' b5 F) l* L    第一个[]:
3 y3 L8 z* ?1 B# x    o 表示ROM地址
9 ^; U8 q% d3 x    p 表示RAM地址# l- o) @8 B' ^3 P4 i& ?- Q
3 v! G. @# L2 H" |% m! h  l2 X
    第二个[]:
2 x# k0 y9 G, T    d 表示4字节
# r5 k* O6 h. s" s7 A    w 表示2字节5 A7 d8 c" R& g5 d
    b 表示1字节" L- T- ?" K) J. o+ l% d7 Z4 f
* m& U) h  q" {/ s$ R! _/ j$ Q+ d8 I
    例子:
4 I: ?+ t+ ?" k. x3 L5 }( O1 |6 U    maincpu.ob@1234=FF
/ w# n, \2 J# W2 F- k  ]6 x% n# K- c    在ROM地址1234处, 写入FF一个字节9 e5 y+ x' b" b: r
; w: f0 p+ I6 o. a& a
    maincpu.ow@1234=4E71
7 I8 M. ~* ]. e$ x. y    在ROM地址1234处, 写入4E 71两个字节
& U, `) Q  j7 w4 `# N' k* Q1 _# p5 J7 f
    maincpu.od@1234=600A4E714 \" ^# y4 r7 `& e1 x
    在ROM地址1234处, 写入60 0A 4E 71四个字节5 Y  @' W: r$ T: z3 {! ]+ p! Z* }
: U5 Q+ y. |2 ?! h" O
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
6 `2 P# Z! R- Z. e) |4 g7 n. m# L   
3 ]$ |5 t; m! }. y" a4 E
& M1 P3 n, J* I其他:; r! P+ X+ c8 z& ?
    dasm 输出档案名,地址,长度
" A& c! x' u+ ~- Z4 c    输出程序的反汇编代码; C' J+ J! r8 L) B% L
    例子:
/ ?0 L2 u" ?: C    dasm 01.txt,0,100000$ j$ L. U% a  H" \- ^" m
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
5 t& ~# @1 t* M0 t) [/ `9 G
; T5 Y  R5 M  J# x5 ~9 ^    softreset: D5 a# }* `3 D0 N1 V1 Q
    游戏重启, 但不重新载入ROM9 [# V. m7 m% l* z$ ?8 Y6 G, ]
3 {- \6 V, V+ @! i& T  @& N
    hardreset2 l* W$ t: ~+ b1 x. l! t' L
    游戏重启, 且重新载入ROM
& |( P7 J* r+ J3 i% M  N( \, D1 W5 q# {% B
    snap xxx.png
& Q) F% W' P& E" l* a9 Z" E1 B    截图为xxx.png
! U+ h* o% |& g: U+ O# \  f* I# O5 ~
+ b* k& W8 k0 U. q  % c9 I7 _4 \; m
  
0 U. X$ _' J% S' ^, U  1 m  V: g4 S, O( v( A  [
热键:3 K, P) U+ A0 H9 h9 s4 D# E
    ~ 中断游戏
2 z2 b" b8 `3 s+ n  {4 P    F5 运行游戏$ Q, @+ H. Y0 v3 b
    F12 运行游戏且隐藏调试窗口  D! P. @  ^2 j+ ]+ I  F
    F11 步入, 单步执行, 会进入子程序8 U, Z3 V, R- L: R9 t
    F10 步过, 单步执行, 不会进入子程序
: R, g9 C0 w$ [6 e6 f% i+ `. t    Shift+F11 执行到子程序返回/ X9 }1 w+ a, Z
    Ctrl+M 内存浏览窗口
' k( X3 B: c2 W+ z  b1 a) l8 D    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU  D- Q3 N! @- s: m/ h' Q
: U1 K$ i2 Z" l# e) C# ?
{:4_94:}
& J' E! _) H% @8 Q* G3 S* u7 h+ |. ]+ Y  i! s; g0 H) e

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。; i! {: Y  a, I) L# s( `, a; ?
- |& q8 X' C1 k+ ]* `
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 | 显示全部楼层
要详细些的东东
# [6 f# c3 J- h- s6 v4 i# q11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-7 21:19 , Processed in 1.077148 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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