EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
+ ]5 N4 O* k9 d' v  \7 {: @
很快速的整理我自己常用的指令
. v7 S" T( E! M9 N' \( K2 m- N
# x9 m8 u9 J- H' n$ |( m1 [{:4_112:}
" @* Q. T2 |; y$ c& w' ]& S4 I
) f" B& I* ^3 z' j) Y! RMAME DEBUG常用指令% V. y5 }0 D9 [" w
! T& g7 n- ?! f0 I& r8 l
内存搜寻: ci, cn, cl3 l  M  h' b  G% h
. |4 L/ Z4 ]+ D/ m. a" ^* m
    ci0 _& M/ M4 I6 S& I" h
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 n8 `- T1 P* q# `/ C( D
( Z5 n; b) M2 w& @% y! L
    cn  o7 z- p4 f2 _) P6 U. U: p) s3 s6 c
    搜寻指令; _: c3 b1 X3 G: K
    例子:2 Q3 _" I( Q/ }8 ?3 ^* l
    cn eq,60
7 p7 ~1 V6 D8 R% |' T. o& D    搜寻目标等于60 (十六进制)
% T* @) n1 C& {( w6 ]6 M        
, [' a0 e* Y! d! G    cn eq,#964 T" `' C6 r$ s5 O
    搜寻目标等于96 (十进制)% n$ ?5 L' x. C- t
& M, D) l0 q5 y, |7 W
    cn eq) Z) P9 U, e# \- }7 K
    搜寻目标的数值没有变化; c& X7 O8 ^& `. b# F* E

- u. J1 H+ p, W* h0 N+ J    cn ne
" c( j* g. d; y# V    搜寻目标的数值有变化
+ B. Q' H9 m) s        . K' y- k/ {! E9 }; i8 m! d
    cn +# h; _) g1 w7 O6 O, U
    搜寻目标的数值增加, t# e) m. O. s3 y% Q
   
. \9 n8 v2 U, Q  }! X$ q* z8 c    cn -. }+ [- w0 c3 e1 p
    搜寻目标的数值减少
: _3 Z1 q9 g" N2 V! f        
5 O# U4 h3 d; s$ T! b* a" T! x9 }    cn +,3
  m6 R$ f  c- \+ Z3 W  e    搜寻目标的数值增加3 (十六进制)
) ~/ V7 {- J; j$ l5 Y6 v' u6 W( E. k: {3 S  m; u+ c! _
    cl
6 o5 `  ]4 b$ Y3 F    列出所有搜寻结果
- I5 l! B# J$ C# l% W) G+ G3 F  s/ n8 _
    cl xxx.txt5 {5 N8 I' Z  g1 o4 q5 I5 |
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* i( [/ n: g' s; }1 n% g& _2 S+ w$ j; r
   
% U9 {' \. c) q) \, C  R% A内存监视点指令: wp, wplist, wpclear1 }9 n7 W2 A. s' j2 {
    例子:
5 ~3 V3 ?, S/ n+ O    wp 1234,1,r
) j3 ]9 i7 T. j% p6 A5 \      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 T: j" ^# {  z
% V. x$ q- C# e6 e8 {# N; J    wp 1234,2,w
9 G7 ]/ ]% M, k6 N) T      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2  A; c+ ]( H* Y7 ]* ^
     
( a; C) D" ]# _. a9 j1 D' |    wp 1234,6,rw
9 M: j4 M% h# x# i4 l; v      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ |+ L- b! ^+ R% _& A0 ]+ f. ?# {' P
% W* ]& X+ F- O* t4 x2 k' l2 Y
    wp 23456,a,w,wpdata == 11 B* A, \$ H! d$ x0 [/ G/ ]( c
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& D; m+ ^' G- n) a7 V3 ^% Q8 M! N
; J: F  r! z; f" ?  k$ F
    wplist( v1 u, h$ @$ E- f8 E) }
      列出所有监视点
1 B& Y+ L! ]* ~! ?/ _# o' f( W* I7 M$ Y% U! u  l! @6 D( M
    wpclear 3
- l- j! T3 f, i" G      删除编号3的监视点
2 w5 `) n5 M- J0 [5 q, {: t+ D4 z2 i- M* X) a! F, p
    wpclear3 |9 {- ^0 u# R, k3 e4 U+ f' M
      删除所有监视点
: \& Q- H3 j  U. ?
2 i- k. u+ X& K9 R% F* D5 k      ! n! R) h9 @0 q* ~1 `4 G1 t- h

, L7 T- u: n8 y& n1 A程序断点指令: bp, bplist, bpclear
" o5 {2 ?! E( F* l    例子:
: Z3 E- c; t7 @. I2 b    bp 1234
. m# l: l2 r+ Q: Q* v% J) m      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* X' L8 p& @# W2 F

3 Y# E% c7 m. r# ^/ \8 v+ I    bp 23456,a0 == 0 && a1 == 0- c$ Y5 a7 m1 _$ {; p# t( m3 t% W0 F
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' M: j) D, Q: x5 W" o7 l$ n" R8 {1 K* v5 h6 Q! }
    bplist
* L: j, O  f! y9 E* ~# x      列出所有断点1 G9 A. N; Y* X2 ]9 W8 b
9 F2 G* _6 |8 t! Z9 Q6 H( ?+ S
    bpclear 3
7 r6 ]2 j3 ?, f! ~. q: v      删除编号3的断点
# N, r7 I( z$ \, w3 ^* q+ Q+ X* Y) a6 r2 l8 l  B" s5 E, ?  s
    bpclear
" q" R3 h+ N% w* ~3 a! l: E      删除所有断点% v- [& }  Y7 `0 Y- {  b% {

  r3 }% ~6 P+ _      
6 ?# a, K9 ]' `0 R: w  J      ' I- V. S  S: n! o& m. K9 P$ |
跟蹤紀錄指令: trace% r& h3 U) K/ S
    例子:
; S; @) N9 {5 s6 o4 \% ^    trace 01.txt6 m0 l6 o" D: Q" @6 b
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ F  ]2 ], \4 j" B4 t* @9 E$ Q8 a+ J% n3 m& ^8 g
    trace off
" g! _1 W, M) D0 K3 o4 \3 x% ^! k    停止跟踪, 并且关闭文件3 j) K* T. v; f( R4 L& J$ s
1 y0 k( }6 P& U+ l3 \1 ]7 ~
    trace 01.txt,0
4 i2 x, |& T/ @    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; r2 T' m. R6 }* h) s% H. @# g, k% V9 t
    trace off,0
1 ~) V9 e- C7 R1 {0 Q: i! H( m    停止跟踪编号为0的CPU, 并且关闭文件# l! z0 s) g0 f2 _8 E
7 K5 c3 V! Z, F
    trace 01.txt,0,{tracelog "A=%02X ",a}
5 k" C8 l8 @" J    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 t0 A8 c6 ^  s; ^" r- q8 j    并且在每一行的前面, 写上"A=a "
4 N" [! U' {3 i- ]; J1 `    "A=%02X ",a为一个C语言printf函数常用的输出格式3 E) z, D1 i1 f" r) ?
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- X7 O0 {2 Q! L% W0 X  s9 Q
    X表示为大写十六进制数
+ T* d$ w! e* f& G+ W7 }1 \/ p( Y  k" M5 g
. z  Z: c' t/ Y. N( K% L5 w

! Y0 h7 I7 `+ D+ b8 {, p* G内存直接写入指令: maincpu* B  Y' N% i# Y! k
    格式为 maincpu.[][]@地址=数据
1 G) B  C9 {& d% e    第一个[]:# }5 J9 Q8 c! ?  E/ ~
    o 表示ROM地址
& V& }  t3 m, V4 `/ b- N+ R" l    p 表示RAM地址
( j5 a( G/ d- r9 J% ?6 |
7 \- s" y  J  h$ t& c! H    第二个[]:
  S+ c, B$ B3 }3 s/ q    d 表示4字节: _- I0 C: C  \
    w 表示2字节: W: M6 D# X7 d
    b 表示1字节9 y; Y* Q: F, y- x& Q: P( Y" A' ^5 M
0 k1 x3 l4 _' h# }  {) e8 U
    例子:
8 |8 m8 j; X) ^/ x$ R/ i    maincpu.ob@1234=FF
7 ~; Q, W0 }, C# Z7 h! V    在ROM地址1234处, 写入FF一个字节- t/ L9 i) M6 I9 ~* o( M& o/ [

1 w. N7 o- k1 \" X2 ]: [    maincpu.ow@1234=4E71
, K3 z3 V! f2 C    在ROM地址1234处, 写入4E 71两个字节
" @9 G9 K. o7 R6 a, ~# c, l- H# T; l) c) L# B1 I; ~
    maincpu.od@1234=600A4E71
- I. B8 w: }6 q8 K. f+ \- U    在ROM地址1234处, 写入60 0A 4E 71四个字节
8 d, u+ O2 W, C' [+ w5 D' t9 Y
* ?6 o$ f9 n) ^( h    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
+ W4 f: P$ ~9 e   
+ T) \0 O: F& C- W9 ?4 H; M
5 N, k5 a& e3 y# A; j. J% G( N其他:' S) ^, {! o1 G2 `
    dasm 输出档案名,地址,长度0 O6 K: r+ H7 p  z! I- t+ w
    输出程序的反汇编代码( v% a/ H; w' G- f2 o
    例子:. c" y& d) t0 I' W$ Y5 U
    dasm 01.txt,0,1000008 O7 F% t3 K7 ^/ T
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( i2 _/ F) @1 U  t0 a3 `* F; y0 h& l( B  V! I2 m8 x8 f9 Z
    softreset* d0 w2 W0 ?( z7 C' C- B
    游戏重启, 但不重新载入ROM6 Q. S) R+ W5 }4 ?3 m) q! d9 l

: q2 t3 V+ r4 e6 [* }    hardreset, c- |6 G; C/ w0 E
    游戏重启, 且重新载入ROM! k* ~3 G7 _. |
8 Z- G9 |- l6 Z
    snap xxx.png
1 K2 i& {8 U9 s    截图为xxx.png
3 S- v# I, U0 @% t: H
4 {) x* ?' B) C% e$ @1 k6 @( \7 f  . h! R4 Y- j2 k+ x3 y8 c" R
  4 b& o' ~- s5 u9 }( q
  " m- a& _( b7 M7 Y+ N& r6 N
热键:
4 U8 h4 u4 Q4 t2 }    ~ 中断游戏
$ a) L- B# i* K    F5 运行游戏
: g) ?# d' P. q; p4 N    F12 运行游戏且隐藏调试窗口' j! i8 N$ F0 l( T2 c) Q
    F11 步入, 单步执行, 会进入子程序: _0 G0 ^4 K: J- }
    F10 步过, 单步执行, 不会进入子程序
3 P' c* M6 t5 k    Shift+F11 执行到子程序返回
- z/ _1 P" M! e& L% X    Ctrl+M 内存浏览窗口  _$ J) E( G: S( I, k
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# B' y2 G' f) }6 o; w3 l& [" \" V6 ^3 g; H" G! u. R- L
{:4_94:}
4 n# K8 P4 `  W5 A# X* `( N& c# k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
( h/ _0 G/ ^2 Q$ u$ P) I4 g
0 m2 U3 [  \; u4 s! iPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
) \" z1 w9 {  Z4 F: r11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-27 06:51 , Processed in 1.070313 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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