设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
* ?# l0 {2 r: O- k4 V
很快速的整理我自己常用的指令
; P! Y' C! l+ f$ E" K! Y9 I3 V, y0 O" n0 R( F5 _) w8 n2 Y0 r$ i$ S
{:4_112:}
' V4 m- g1 c! N+ q( P- w8 ^& p2 a6 u& C6 ?1 v
MAME DEBUG常用指令
, G* ^3 P6 c# r8 E5 l1 V
4 x, T# k6 {, g内存搜寻: ci, cn, cl
& R  n/ R7 @: Z" Y: N9 }& o9 ]6 R) z2 D  N! P# G7 {* y" ~2 p: K: F0 B$ f
    ci
+ O; U' B, k4 }1 T' I    搜寻任务初始化, 每次搜寻一开始一定要输入这指令0 @5 w/ L* D/ N7 H
8 ^" ~- D# J* m3 g
    cn/ G, I4 P' p* \1 C/ D
    搜寻指令
. h0 y( f( T8 t( R    例子:- x6 G; {' V+ f9 q- Q
    cn eq,60
# d0 ?2 ^+ R( C+ J* u    搜寻目标等于60 (十六进制)  `0 z' ^/ M; [, U. U
        4 d# ^- H0 v0 O+ F) s, ?) h
    cn eq,#96# u" n  F  t; u& n9 ?3 k, R" c! b
    搜寻目标等于96 (十进制)
( P/ A! M# j& `' o* b) h
% v+ L5 g/ _: a% Y8 v    cn eq% E' L& i2 u: x" m( t  K) w1 V3 X
    搜寻目标的数值没有变化6 L3 P! e9 `3 x! b2 c' O8 E

0 j  J# ~' O' R) b    cn ne" E& ?1 U0 c/ W0 c
    搜寻目标的数值有变化( ^1 b9 D5 H3 a8 ^+ T! c* j1 m0 Q
        
% h0 I* @3 u( d2 U6 ?9 _+ M    cn +& Y7 _& r, B0 R5 ^1 m
    搜寻目标的数值增加3 {( L9 w$ W; M; E/ g( n
    + t- P- T$ }& d( M  @" X
    cn -1 S) @1 k# f6 K+ T1 {: u& ]9 ~5 ~8 r
    搜寻目标的数值减少% W6 @, N+ H. |
        ( @" I6 D2 B7 G' A
    cn +,3
$ r1 J) d: z" D6 i2 T    搜寻目标的数值增加3 (十六进制)$ y0 u  W/ S) E% A( }" S4 e, Y9 e
7 ^4 p1 e. g# d- e) `) Z
    cl- \2 q# u4 W* ]3 c( _2 R
    列出所有搜寻结果
4 `; B( C) o$ g9 d& D7 `
. G/ r/ X- T- g8 `$ f6 v    cl xxx.txt0 `4 W' Y" c* O! F
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
2 f+ q, o; ^2 t1 G" t# L. r
: F1 a+ K, x9 m2 j" L   
- |: c3 E3 Q3 N' h0 B* }! b. I内存监视点指令: wp, wplist, wpclear
" S1 _$ }$ r( s& l4 j7 {3 A    例子:
8 E, h( X* E& V0 v% x    wp 1234,1,r
/ f/ X! ]3 @: @* r! ~, v# e      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) f/ q' R7 y. X

) Y7 j, V' [2 ^/ z$ t% M    wp 1234,2,w$ r4 C3 |* Z4 b4 f
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度29 h  v! ?' y4 _+ ^
     
- \* _6 T6 E$ U7 d    wp 1234,6,rw
* z" N4 l6 O3 p& {: m  c      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 I7 k' U; ?: C' @1 Z) o3 k( {+ K
+ v0 a9 |8 {: O* j# ^$ B    wp 23456,a,w,wpdata == 1" w7 P; D! F- Z; X
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1# r5 G" t9 C" o: E

; B) b) O( `! D! M; T( d    wplist
" }- W3 t1 ?. T/ f! P      列出所有监视点' E  o% n. o0 L, @6 C
0 b) s2 s  {/ T) p2 c/ C! H" Z; w
    wpclear 3* P  U3 r3 `0 n+ I3 Y. ~
      删除编号3的监视点
' E% y$ ~5 U7 w/ F. {0 k& q" H% }
. _2 _  p  H2 y& f8 W# \    wpclear2 P! P8 L7 n7 Z; @
      删除所有监视点+ J* `- V' W& [0 T+ c

: R) g0 S$ A- x5 P6 {, k) D      
9 O& N. P; ?6 d% T6 p0 f, ?- f  Y; u( R6 l* }) }& W
程序断点指令: bp, bplist, bpclear
) o1 U6 ^7 [" y' S/ }4 i( K    例子:% r0 D9 g! T  d3 X
    bp 1234
* g) o6 i0 ]4 T% A1 [  n- c! Q      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- U2 P; I" q+ m0 ?3 ^* h- B; j( n. N1 I' r5 g
    bp 23456,a0 == 0 && a1 == 0
# @# _$ ~8 y) t3 C6 i: {8 d      在地址23456下断, 且中断条件为a0等于0以及a1等于0
9 Q8 X, L4 G! C! [3 e" _' r8 E" q8 v' y: W4 n" z3 i' B9 y  h
    bplist0 y* a- f% [9 K( V; S5 G
      列出所有断点
0 j8 q5 b3 Z5 K- d8 e
) h; n# t' X4 u3 _    bpclear 3
% o  C8 K: G) f% H8 \      删除编号3的断点
1 Q- ~* l- }8 K$ R1 L6 Q3 u$ {) M* ~6 M
    bpclear
: Q5 O; v( B! T! w  H; }      删除所有断点$ x" G& S( w+ T- f
) C0 Q' W" @" Z8 z. B
      
7 f" w% @$ C# X) u* {) S* z1 l      ( T) ]  F. K. E+ A% H3 |, y
跟蹤紀錄指令: trace
+ ~$ b4 z9 f1 e! t    例子:1 x& x  G! I6 }3 D  x# U
    trace 01.txt: q0 e4 N% D! X; X: G
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
2 o  R( J1 C6 I* z) E9 p: e+ v! D) B& o# _# X. P
    trace off5 E; f3 H! N" X$ K# U
    停止跟踪, 并且关闭文件8 G4 K6 m& p9 o' Z* S% W+ f9 A9 V
. `) r4 j8 Y; J. e9 [, m
    trace 01.txt,0- U7 v' s4 {0 M
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt: D, @( b( D% e
6 o: o. \) o0 m  H3 }
    trace off,0; d  ~" u. h% H  F6 Y# z; p
    停止跟踪编号为0的CPU, 并且关闭文件
) \7 W+ V. P0 l  T2 j/ E& ?3 Z1 i; P! |8 t* I* v
    trace 01.txt,0,{tracelog "A=%02X ",a}
6 S; T+ s! n( J: @    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 9 L: c& x5 F' e4 i0 g2 i
    并且在每一行的前面, 写上"A=a ". J* x; I6 C+ K9 S1 p! E) x2 q
    "A=%02X ",a为一个C语言printf函数常用的输出格式
0 W- J" Z. p. O    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
$ F3 T6 G/ T) l9 @* ~5 q    X表示为大写十六进制数
& D4 s5 `+ O8 j2 ?# E0 @0 b6 P: H' ]" W: x3 J

/ u8 ]$ s% S' c8 F1 Y6 e2 o! k7 A' |' v& H( w( k; e# p: b/ I
内存直接写入指令: maincpu
6 B, p9 ~1 G6 U! q    格式为 maincpu.[][]@地址=数据
/ b2 [: y. ~' P: D    第一个[]:; l7 Q/ o) c- i" X$ D/ T
    o 表示ROM地址
% x: }! {/ C# b' }0 M$ Q    p 表示RAM地址
8 l7 _* i1 x# Z; n: @/ ~) O% i! D/ \  R3 S0 ~5 J6 U& H& Z9 Q7 \) x% Y+ j) ?
    第二个[]:
1 m) T6 d9 R0 Q6 `% g' Q% F    d 表示4字节
' O5 Y9 p+ v+ E7 N    w 表示2字节% B7 q1 |# N& W( k6 L% Z8 n0 f8 D& E
    b 表示1字节
6 f/ }' Z; d# L( P- F* }5 s' _% f7 c
& t) K& Y% }6 n5 |( ^    例子:& [8 ?0 y# i; e& _0 }2 ~
    maincpu.ob@1234=FF$ K3 N1 V: Y; h" T' k
    在ROM地址1234处, 写入FF一个字节
7 d. {3 p: E; m
, c) U2 `- |4 N+ [9 M) n. T4 o    maincpu.ow@1234=4E71
- ^& g( i8 l9 Z6 s: N    在ROM地址1234处, 写入4E 71两个字节. Q2 S1 t; J+ _, n
$ w  s' N9 C! h: D3 K9 w
    maincpu.od@1234=600A4E71
+ V* Q: j3 K# a# r    在ROM地址1234处, 写入60 0A 4E 71四个字节, Q$ y2 V1 z1 q2 h8 I
8 I$ S* t: j8 {2 N9 m3 v
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: p4 F1 ]9 M* J$ Y5 }( s    : x" y" l, l1 Z. {6 C8 n/ X% x

2 X0 C  ^# \( }: V- X. W' r其他:8 ^+ M. I' ?; _: ~9 ^
    dasm 输出档案名,地址,长度4 n; S4 y1 m$ w$ S" T" B" l
    输出程序的反汇编代码. r' d, S" k2 ^  U) z
    例子:! d) _7 b, O; @* L0 G* |( D  |
    dasm 01.txt,0,100000
' \$ i8 O5 H2 h- |    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 u! m  D6 n% ^0 j2 ]1 C
; s  _8 A! e; N3 C* e8 m+ J1 _    softreset
3 Z9 H% F/ \1 |* K    游戏重启, 但不重新载入ROM* a" F3 D0 v8 c& S
2 L3 H, u+ e8 [, l8 P
    hardreset
: M" O) G: t+ d& x    游戏重启, 且重新载入ROM/ _5 ~  I# |! S# I4 ?, b
% D$ @/ f; o( r9 P6 K
    snap xxx.png
. |0 C5 b+ e6 I    截图为xxx.png) B# s: V4 C- D
5 v- X" [: f$ F" P* R7 V9 E
  ' J5 |+ t4 A, A( O# G; B
  
2 Y! A  i; n$ u  
- E# F  j8 f% \: J0 T! G" b热键:: ~9 L! C+ K; Z( b- f' r6 p
    ~ 中断游戏
2 w: o) K8 v& y- _    F5 运行游戏
. v) L. r! B3 H1 @) F    F12 运行游戏且隐藏调试窗口
$ o  T8 [  J+ ~4 }: t7 w. R    F11 步入, 单步执行, 会进入子程序" ]' D/ v/ u9 a0 C, j
    F10 步过, 单步执行, 不会进入子程序
: g* b' q2 |: Z" r: k3 ?! ~    Shift+F11 执行到子程序返回
$ g4 ?7 p" ]% i) s: \4 h6 V    Ctrl+M 内存浏览窗口
3 u2 p* R8 x: A, C    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% O( X; O: i" J+ B+ ]

) [2 F. X# E1 M2 f{:4_94:} . ~1 V- x- @5 v' C4 m
: V8 s2 V8 f, c! j( I  Y2 X1 F

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
  o) p1 O7 s  Q1 C% U0 {5 [9 l  S* S6 Y% t) C$ |
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 | 显示全部楼层
要详细些的东东& U6 F5 a$ O. k, W
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-8 08:47

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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