设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

欢迎注册EMU618社区论坛

您需要 登录 才可以下载或查看,没有账号?立即注册

×

+ X! p6 ?4 l! ?2 ^+ J) @很快速的整理我自己常用的指令$ F: b& X1 W$ B

$ ~6 n: Y+ Y* X{:4_112:} 4 o+ W1 I' `+ t& Z
. ?- e" V" r, w$ X/ |! N  Q
MAME DEBUG常用指令( s6 G2 _8 W" v4 P- q
6 b7 f# A# N/ i( {% \# V
内存搜寻: ci, cn, cl- _% T& P3 k9 }9 W
1 e* Z- k2 H& p2 k2 z6 W
    ci) H6 u% P" v( b* M/ g
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令* b- p$ |/ t9 }- U- {& @) S+ t
  _6 N! W. f' p0 `  }
    cn( z8 d! o- G6 s! n. J
    搜寻指令4 m) K4 T" _& \2 ]) f: w4 v
    例子:
6 _1 r( I# s- a4 m, m/ Q! z. ~, q    cn eq,60
# V& A4 K$ B. K4 e6 Z' v    搜寻目标等于60 (十六进制)* x- F" e  |) h' D' J2 Y
        # g- M' U% e8 J$ I7 A
    cn eq,#96
% O5 `0 R+ M: A* }/ p' P* m0 B: e; f& p    搜寻目标等于96 (十进制)
; g  S6 l% X0 r2 q3 {0 P
, j7 [9 B4 S/ \( I3 O    cn eq2 P2 D. `- \, @) s& x
    搜寻目标的数值没有变化
% L6 ]- u" G8 M* C- n
: d, B  M! L' V  }, \    cn ne
8 ~" Y1 c( n+ w- B+ B    搜寻目标的数值有变化7 z) g3 C; E; m2 t6 E0 V
        
5 |; I( o9 J* f: |1 g    cn +
: `% X: a- N$ J% ^2 g- o7 p* h    搜寻目标的数值增加
' t4 l2 A3 ?$ X4 U- G  u    - G, J- v6 V+ f7 h
    cn -
8 p/ A8 ^/ A" z; ~7 l1 C4 B    搜寻目标的数值减少4 u- r9 I' c- ?- |
        
- c1 g, k- ]2 A% v/ x    cn +,3: }* c8 X: i" a6 a( b! l
    搜寻目标的数值增加3 (十六进制)
; R# s& E$ t% C( j9 Y; n) y$ z+ X( P  e- H  f- O, _3 q6 K
    cl
! I, F$ w- p* y+ I( }( ?    列出所有搜寻结果
' e% v4 [' @! ]$ T) @3 k9 S; O' s$ \" m$ I& z
    cl xxx.txt' p3 }3 t9 l; I# t) n: s
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 k2 }' V3 [7 J" C7 |: Y. f
. C! N: e, i- \% z( F
    / ]8 q2 C) ]1 i
内存监视点指令: wp, wplist, wpclear
  c( j- d8 ^2 D! N5 A9 z    例子:
8 y' C: |! f) O; o* ?    wp 1234,1,r* W! S% m+ w. i0 Y0 J. `1 q
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# e7 L1 V) v/ v; n! ~3 n5 [1 P+ t  Z$ J" |- d1 d+ ^
    wp 1234,2,w) c/ \9 }' o' N+ m
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 K4 {1 a6 J# a2 c: L# |: z
     
9 c2 `3 F7 i8 q" i1 l$ }) G    wp 1234,6,rw, l( w8 S" Y" \; Y1 O
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 a( d( l/ [" N9 |1 q& X8 L! m% n# J- I  W0 a' T
    wp 23456,a,w,wpdata == 13 o7 g. H* A! e* n' L
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
& C& x, z3 \& U1 u. E/ r3 `; d' \8 s
2 ?( c# x- y" X: [+ m+ k& f    wplist) d  _9 [, D: [6 q% F
      列出所有监视点
$ m9 K; X0 {9 E1 z7 z: E& ~' q9 c+ i6 _3 M4 W# i
    wpclear 3
# r; E! @1 v! F, B7 O4 v1 b- a+ [# T      删除编号3的监视点
" J2 E. O% M. @. J
. }2 K) t* E, r% A& ?0 U: H  ~4 m    wpclear( U/ V5 N; y# r& g( q" h- f
      删除所有监视点
( e8 D' |& i1 h- K1 z' N0 K
9 j2 b2 l  ^3 V/ f" i, g- _      2 g% Y3 y- G- x$ }; g) u

6 q  j7 `" b( W" l( F0 Y* d程序断点指令: bp, bplist, bpclear& |' M, x: C) R
    例子:
& b4 v0 j: O1 ]/ O. O    bp 1234
* J: u' S7 H: X+ q7 j& v      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ e: k5 h+ [4 i8 S& i" f# u' g- u
) e# F- d$ N" q
    bp 23456,a0 == 0 && a1 == 0
6 d8 V" s" F8 G# \      在地址23456下断, 且中断条件为a0等于0以及a1等于0
, s- x/ ~: n$ M+ m1 _7 G/ b# ?5 }8 k) h" A
    bplist0 q! I5 C, G. \# g- j! I
      列出所有断点) w$ _& d; a* M

' c1 b4 J9 v. k& j2 S    bpclear 3
4 ?: w3 ?! M  [, W8 g7 b& b      删除编号3的断点6 c# D( P5 u% S+ z! o
$ ?' ]' D$ ~2 w# T1 d
    bpclear& H7 F3 F1 f* P3 X3 g
      删除所有断点# c. b7 r+ A" ^( t
5 L2 }+ b! p$ d! l
      
! q/ }) e$ t# ]' S, f# f$ u# S& W      
4 i0 g$ |" g7 _! y) D, i% z跟蹤紀錄指令: trace
! Z+ a# f! }4 @3 T2 h; Z5 y( b: w    例子:! I% w2 A1 h+ P2 X3 C
    trace 01.txt
9 x6 W' i5 z2 ]5 x, v    跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 f6 Z& G  e8 k. T- H! Y5 ^- ?' V) \+ d; ^& }% m4 ~1 a
    trace off
. U/ h8 }* a9 |! f% r8 N0 M    停止跟踪, 并且关闭文件
, _" r" U) f) t( I4 u! [- x
# O2 @; j" U3 `3 u- V: A0 _    trace 01.txt,0
2 R+ s, ~2 {$ C% O    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. l+ T# M0 Z. d: L3 N) ?

" Z( `3 d; T: o: P$ a  o  c2 `    trace off,0
4 w  O9 G! ?# r% u, F% C% H. k$ i# t' c    停止跟踪编号为0的CPU, 并且关闭文件
- M" i9 E* R; [% b
  G9 _3 |& l& G  X- Q" z  k% J    trace 01.txt,0,{tracelog "A=%02X ",a}
1 f! k9 [1 h& d+ k- b4 @/ {* o    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt $ h$ }% r$ ?6 ?) V7 ^9 X1 Y: g
    并且在每一行的前面, 写上"A=a ". l+ ^( j% g" a4 h/ z
    "A=%02X ",a为一个C语言printf函数常用的输出格式2 _" W$ {! {) T: j3 _% W
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 Z: x" d& r3 p
    X表示为大写十六进制数  r/ P6 V' a# ~: D. T1 J0 T0 |

" O7 M# s: X6 T! B7 `
, [" Q4 m' [% x  U6 I
3 w: E2 |: ^5 {& w/ b内存直接写入指令: maincpu/ Y4 A; E. H# ~1 z4 ^. [
    格式为 maincpu.[][]@地址=数据
  t) I5 T( N: `9 n: l! U: R    第一个[]:9 ^. j" }6 W3 q4 O
    o 表示ROM地址
7 Q" A% W% Q  N9 V' r8 }    p 表示RAM地址! t# x5 B5 i7 m

- E' d5 b' l& i" z& o7 u    第二个[]:0 K, `3 g, m9 y$ Z
    d 表示4字节  r: J' ^) Q" E0 @3 E- i; [
    w 表示2字节
  F) Z/ `  `! N" z! X3 g" T    b 表示1字节
, x" B. `7 K$ {, k  s6 v$ E  F/ n! K, |8 i7 @
    例子:5 K; y4 A3 m  s9 H- t& f0 Y
    maincpu.ob@1234=FF
$ G4 N8 E7 ^- J9 X9 ?( @5 K    在ROM地址1234处, 写入FF一个字节
1 b2 v/ d; _, b
7 ?1 h) q" y. z5 e9 M' F    maincpu.ow@1234=4E711 O8 y2 K9 |6 l- c. Q0 \& m6 f
    在ROM地址1234处, 写入4E 71两个字节3 n/ Q9 q7 v. p+ L$ `, L
: f* W& i9 a- _4 e+ B9 d1 u
    maincpu.od@1234=600A4E71- s7 [/ ~0 j: _7 ]4 e/ Z
    在ROM地址1234处, 写入60 0A 4E 71四个字节0 d8 D9 I& i% Z

, j/ ^7 N* Y* V# u    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
; E# E% D) P# @1 e    3 p3 u9 ^! A& M, U4 g  Z( P

: U8 @% N3 d6 ?* \- S其他:
  n  h8 h' j$ n; v' _    dasm 输出档案名,地址,长度- b! P9 k2 Q# ^# v0 Z
    输出程序的反汇编代码4 c% X8 I4 j& i& q8 f) T
    例子:) ~" ]8 B8 p: l5 O4 O
    dasm 01.txt,0,100000+ U- |; G+ ^/ Y, |- d6 D1 f& V" s
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
4 g/ t& k; c3 j& @* X, K: P7 x; m
$ X$ v( w7 g9 E5 e* D. N2 q" W    softreset
. t2 Z: l. z% Z0 D6 W- Y& u    游戏重启, 但不重新载入ROM
. }8 p& c/ S" u- \
6 v( }, ~7 E! a, `3 ~- H4 \1 D    hardreset
# A8 J, X: m. h" |) F    游戏重启, 且重新载入ROM
7 ~, w+ X' p5 u9 e( [, A# M# \
4 A" F+ Q1 N" o4 u4 x    snap xxx.png7 M6 h1 o$ R2 v4 J$ L* b0 f
    截图为xxx.png
7 v( s, `) D% N2 O# j" p- e4 U! ?) V! I, Y
  / O2 b9 B' B- x4 b1 Y% o
  + l$ L& c8 k; M# s9 C5 c9 z% d
  3 X" P# O0 J9 `7 s" D
热键:( A2 g: u- ?' H
    ~ 中断游戏$ ?7 M+ a+ _8 l2 I8 R% F; l
    F5 运行游戏
2 s2 Q8 `/ C* t& d- r+ ?, A9 o1 U    F12 运行游戏且隐藏调试窗口
9 N' S, d3 l9 r( f    F11 步入, 单步执行, 会进入子程序$ x% T/ w6 X( p$ D  l: v0 B* }
    F10 步过, 单步执行, 不会进入子程序
  _2 D- K" \/ x3 z- j8 Z% X$ i  W" ^' m    Shift+F11 执行到子程序返回
, t: d& p. H8 w3 ^# ]( I    Ctrl+M 内存浏览窗口# ^# k' N+ v" s  A/ t& B
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
  z* W6 N  b% J: D$ l1 M; r8 m2 Y# l4 y) a
{:4_94:} + v) E: j; L1 K

  B" C! s6 j) u. j. z. ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2550 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。0 `5 p) E/ C/ j7 {

8 l/ a8 O5 Y# o8 D5 q) K2 u* FPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东3 j, j# g: j7 F9 z6 j% W$ v# O% ~
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋

GMT+8, 2026-3-10 15:44

Powered by Discuz!

© 2001-2026 Discuz! Team.

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