EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

/ x, ^! x* m  e1 y' N& ]* q: Y: _很快速的整理我自己常用的指令$ K8 Q$ P( ^+ k! i& s$ r# p7 W8 a
& U( Z* `$ v  ]3 D0 K/ m
{:4_112:}
8 R& E7 |5 ^5 C$ f% d% K- U
  I+ ~2 j$ a) X$ @* i: Z+ ?$ \MAME DEBUG常用指令: x, i6 d: n& q2 ^* N" [

+ I, N$ z  Q2 ^" [内存搜寻: ci, cn, cl) k! }0 b, W4 j5 w5 {8 W; u

4 B( x& E' G$ |    ci
5 J1 E7 W& o7 J  v- W$ Q9 B    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
/ K" Z) a+ M. N+ X, N& G1 k2 |( q; d
# N: ~& i& T5 p6 E% d  }5 K    cn& @$ E3 s0 l& @3 S  Z5 t1 _$ W
    搜寻指令& ]: X' s( D! C4 B$ _" |  p
    例子:- o" n* `6 V# z& |4 y, m
    cn eq,60
! H& }: V: s# m    搜寻目标等于60 (十六进制)
( t/ K+ j( D# F* g+ B; a        
8 P3 P) w9 Q7 H4 @. V    cn eq,#96
& j$ d# k8 G. i$ g. Q    搜寻目标等于96 (十进制)' d+ N, n$ \9 ?5 D) m. g% D
  G! m. C. k* v* T/ A
    cn eq% I2 Z: ^5 W, V( N0 q8 N
    搜寻目标的数值没有变化
4 x: g2 b) R6 E4 m" Z; P+ U( O3 @( u3 I  \- S& @# I' Y- r! i
    cn ne
* W0 o% n3 g/ H, Z    搜寻目标的数值有变化
0 ?/ \7 _+ m2 a9 V5 c        
: d# |2 O0 O! X: I6 [    cn +4 ^3 C: n$ }" b1 l/ f
    搜寻目标的数值增加
* P6 }. f) H8 J" _" y' f( T    6 q! [/ E, ?  t$ o+ s
    cn -
1 s4 e. Q- n. I# ]: Y    搜寻目标的数值减少. M) Q, f8 K5 u- R& q
        
$ v8 n0 {' {  R$ h2 h; t+ Q    cn +,3
) X( K9 x) \/ r/ l' q    搜寻目标的数值增加3 (十六进制)
, }% f: |2 ]: W$ _6 W5 v
& r  J; m: ^$ M5 k4 n    cl8 ~% w4 k9 T: C' x8 b! B
    列出所有搜寻结果% b# a4 M( I+ A. m8 T8 s

* O& N1 R) ?$ `7 z1 E    cl xxx.txt+ V# W- u# ~% [- r" t
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
  F; ~# f# s1 o: r7 R3 b* M# |+ I9 i% v% `( y
   
, J: C% v4 |8 X1 k' F) s4 f) Q7 p& n! X内存监视点指令: wp, wplist, wpclear
& M/ x- d  t) M  I    例子:
& ?9 F; p" B- [8 D# z$ O    wp 1234,1,r
5 a! s7 h' g; n0 w& W2 W      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! `% h4 A5 N& S5 W' q3 ?$ p

# g) j# X! y" x1 h3 E6 H8 B' q) I0 |    wp 1234,2,w  m6 }' D" R1 d6 N# e% J% ^
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 ?8 o0 b: ?4 X, a/ Y$ J
     % H- I1 l) N# u! b; P1 ^
    wp 1234,6,rw
  ^$ y$ A1 w+ m/ ], f% z2 t7 G      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ R: s' t' d$ @# j" E+ T( ?5 F, K+ [

0 t' ?: {+ C- U    wp 23456,a,w,wpdata == 1
! ]9 m4 V, ~3 Z5 o8 d      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
. N* k# [2 E! I  M& S2 z9 p. _0 }% A( U0 [: a6 u* q$ \
    wplist
- D. S/ U$ e8 L! J" T# B      列出所有监视点
8 y* Y. q9 B; n
+ x$ K! q; Z; T. v! G) r    wpclear 3
5 A6 w3 O" w6 C9 t/ j- v4 T      删除编号3的监视点
1 u+ \5 U5 W3 H; h' ~( p9 W; {( ~' x$ I$ o
    wpclear
0 o) g2 ?1 l3 F7 F" n/ }0 L5 ?0 U& U      删除所有监视点
* i2 R& u! G! M: e" P$ @" f$ n2 t. E+ p/ S; R: o& g4 f
      4 C* Y2 O6 Q* X3 y& A& L5 q' R

- [9 F/ L  N: L6 I程序断点指令: bp, bplist, bpclear
' O% l% `% l. O, J7 ~6 z    例子:
0 W1 ^9 o5 r: k, s" a8 B9 |6 ]    bp 1234; v% p9 \& ^2 w4 g8 ?! z* o3 P
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断0 m$ i& ]# U# `( P1 p
/ Z8 j! W/ [3 d) {! |" U
    bp 23456,a0 == 0 && a1 == 0& v8 [% q% o& X1 K2 l0 }' Z& D" \
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
5 K5 s8 B+ O* E" c
- t7 v3 M4 c. v" F    bplist' m" y  \) ]' j& ~( W; u
      列出所有断点
' m6 |: k' M/ g  r5 a$ }: p9 t, c% B( F% H* A
    bpclear 3/ \9 i  Q8 T# a" N6 z  O
      删除编号3的断点5 _5 P9 U2 o& n  F

& v# T/ N5 x* f  E8 S' p    bpclear. P1 N: Z4 g% v5 [5 ^! @
      删除所有断点, H, m) O2 _5 ]8 @/ j! y* P* y
  l' w0 V2 |. x7 H# d: w
      
0 {. p- ~* G" e% d+ e6 H% ]4 T# i3 c      : h# ~& r0 i$ Y) M5 W$ e" C
跟蹤紀錄指令: trace3 E3 [& b8 @* c- H: ], C
    例子:; P" u) P! d+ Q8 n* J0 |: ?
    trace 01.txt
% B$ F0 t8 F; I) U    跟踪当前CPU运行的所有代码, 输出至文件01.txt% g  k0 N4 r& a# r: @8 z) }

: |; |+ O) V4 n: C+ H8 S    trace off
# l4 K4 r) Z% ^! x1 V. n* i7 H    停止跟踪, 并且关闭文件
* I4 s: U/ ~4 C+ u- b3 f+ `4 C
    trace 01.txt,0- l3 F% C( l- [  _3 X/ |, p
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt- F  ~% A( C6 {" R3 C9 T& p

. f6 j* {; _( B5 W* s8 _    trace off,0
( X* X/ n/ f+ V* M6 E    停止跟踪编号为0的CPU, 并且关闭文件
8 c' l! m4 H% Q! Y) m5 y/ n. t- G( J6 d+ v6 U  o. \" q
    trace 01.txt,0,{tracelog "A=%02X ",a}
, T- F; {+ J# F6 ~9 J0 D( P  X    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
/ e% g% G% F& _! T# s$ e( v    并且在每一行的前面, 写上"A=a "1 Q; h2 O3 e* {. P% W) d6 ^" k
    "A=%02X ",a为一个C语言printf函数常用的输出格式2 y5 s$ M) a& j7 n, s
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( |. b1 B; n% c9 C8 u0 {; M( _    X表示为大写十六进制数5 k1 n- w* N! ?. b* M8 b/ a( M
7 O( i: @2 J' {- r% c, H
% n& A+ r6 [9 \( R

0 h% f  i5 r8 r! @" p内存直接写入指令: maincpu! n- y5 z1 y5 d- }: I) p1 ]% }8 m
    格式为 maincpu.[][]@地址=数据2 o6 m6 Z, F' C; e4 P- p, a
    第一个[]:8 T( ]7 I( F3 V1 w% c# D
    o 表示ROM地址
# S6 f: V6 e$ j* R/ A6 N3 |/ d- r6 q    p 表示RAM地址2 `' K4 D7 ~$ Y8 o0 p- `

: ~) B; z) ?  H: O5 I5 A1 R" g0 a    第二个[]:
% P6 N! ~/ X, B9 h4 s; _5 d    d 表示4字节
( ~6 p; S3 l0 K; c    w 表示2字节
% I3 i( v: K: f# E- g1 \5 I    b 表示1字节6 f' t' K; ?, P9 R  h* R  n8 B) Z
9 f9 F0 p$ j/ s! N! w6 V+ w
    例子:
" Y0 a$ v( F5 Z) q/ W) ^    maincpu.ob@1234=FF
3 j( ]+ g5 R2 Y5 A7 c2 q    在ROM地址1234处, 写入FF一个字节
- |" W" I/ t8 d  V- x1 L& g5 C% M0 d
    maincpu.ow@1234=4E717 \" R6 b5 G$ c* O5 a
    在ROM地址1234处, 写入4E 71两个字节
5 {* h( i7 t7 W, x; `2 y8 J# l0 A- x3 O% U8 D( Q5 p* f# @
    maincpu.od@1234=600A4E712 V+ Y2 Q9 B. h9 j0 L$ A
    在ROM地址1234处, 写入60 0A 4E 71四个字节
8 r/ ?' I. [# S* c' s! a$ q& L* D2 _& s7 D0 D; F0 _
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写8 t1 J9 [: V$ u, U' ^# N& n# [4 @
    $ P  H. x# r* i) g& q  A6 K* ~
+ ?; u4 {! C1 h6 s
其他:- C  u* `4 G; g; G% R8 b
    dasm 输出档案名,地址,长度( w9 V5 X, q5 ?+ N
    输出程序的反汇编代码- ]% g; n6 `. t0 T
    例子:2 H6 }( g. l8 {# H9 t# M  F
    dasm 01.txt,0,100000; P5 S! l6 ]2 P7 g7 R0 f# i
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 T+ z  J* \# H0 f7 c1 o+ Z
9 N! k/ E% M& o+ i0 B
    softreset
8 d* y( p0 I% @) v8 m    游戏重启, 但不重新载入ROM- @6 d: G- F/ d5 c: E( W( b3 O/ T

4 q7 K7 K5 L# y: V$ ~0 Q) ?    hardreset
2 H* S" F4 ?: V! N7 ?    游戏重启, 且重新载入ROM
/ @# L' U" d6 H1 A) f  W2 \
) j  {- |' O& h( U; z$ e) c& a- ]    snap xxx.png' U* i; a* {3 g" L: s# y- e, V  t+ `
    截图为xxx.png3 F2 f& C$ W' F/ S1 m2 S7 H

4 j8 P; L& u$ l; q  
$ b5 e4 v+ `$ V" w. R  
# a" t* M! y5 p. g4 u  1 Z' x7 G( ]! u* n7 _
热键:) v$ q+ A7 Y# z! ~
    ~ 中断游戏
( @4 e7 l+ d3 _- v! W    F5 运行游戏
- `" ]1 H* q6 z8 E5 f. ]    F12 运行游戏且隐藏调试窗口: C; }6 \5 E/ a) a+ i
    F11 步入, 单步执行, 会进入子程序- W$ f* _* Y5 t3 x7 B. c$ M( E* r
    F10 步过, 单步执行, 不会进入子程序
: B. P5 F, B0 @/ |' D% Q# `+ E& ^    Shift+F11 执行到子程序返回. S- I5 c! F$ Z; w9 C
    Ctrl+M 内存浏览窗口0 I" q* |# C4 U5 h! z
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU+ ]/ p- c; I( w2 q8 o$ p, S
+ C. Y: h7 G6 j0 E
{:4_94:} 0 |! a) \3 E( k- W4 _
8 @, s  D# Z) K/ H

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。* A! N+ V% {$ r! c- Y
5 o' n3 h9 n+ p$ g
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 | 显示全部楼层
要详细些的东东) I$ U9 m+ N# k$ c/ m) J2 I) h
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-23 00:47 , Processed in 1.073242 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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