EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
( w& {! g5 d! Q3 R
很快速的整理我自己常用的指令+ n: m; O. M% T" }
; {% ^( `- W8 G& O
{:4_112:} , b; e8 \: v2 y
( T! L; K5 a6 I+ i: H" _
MAME DEBUG常用指令
6 I. J' [6 }7 E/ x  V
( X) R2 F0 x, Q  j' w4 Z* s4 I内存搜寻: ci, cn, cl
/ `  O+ d- {9 ~4 l5 J# ^0 N' U  ?5 u6 H, E, d
    ci
! p8 P; Y6 ~1 p  e% h' K  b    搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 E( H# A/ R6 |

, D" G4 T0 b( |" C, u4 i" t    cn
( ~* D) B1 ^, K7 F, }( l    搜寻指令  ]$ \: s; T9 O4 {7 V7 i0 E
    例子:8 A( O' N4 n% P) s; B
    cn eq,60. G$ F1 u  [5 m8 X& A
    搜寻目标等于60 (十六进制)
* z- b& O+ C& B6 H2 F9 u0 P  t: P        ' l& Y/ Z, J6 T
    cn eq,#961 y8 ~2 T8 C% h  p
    搜寻目标等于96 (十进制). p. K! H# g2 E' a1 F6 h: z

( o/ B, Y- @( J4 j" y' ?    cn eq9 P2 Q& u% ?  D
    搜寻目标的数值没有变化
( V, F+ F- [& @1 [$ W4 f" T0 F/ d9 Z/ H0 x3 ]' v" T: t
    cn ne/ k4 s# f/ K" S: T. Y
    搜寻目标的数值有变化
2 W3 l! Y: h3 y        " |: }- U$ Y( o& h: |3 t
    cn +3 }3 _. O  Y0 Z9 ]) |9 t" D6 A- v
    搜寻目标的数值增加
; w8 u7 Y. C2 _( C   
# M3 E2 u" Q. V6 C( h7 j    cn -0 i' w8 }; `% a& _' J0 ]- G
    搜寻目标的数值减少
, K4 _+ ^* [' ~/ o/ Y        ; |8 b& y0 c0 J5 |- p
    cn +,3( z7 @2 m1 t! C* b' {/ K
    搜寻目标的数值增加3 (十六进制)
/ l6 c. l1 S9 z: E2 H$ m! F& p5 K) c, [" z8 w, T5 u
    cl
# E; i6 y+ f2 k    列出所有搜寻结果
1 g* R+ J3 R, e+ e3 r5 [' i0 v$ C" h5 v  a
    cl xxx.txt7 |7 T2 B% b" w7 I: o
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
; t& C7 i7 S2 v  q
8 b( A, j1 e: ~" o   
+ g1 Y! O- e3 F& e: n4 |4 x内存监视点指令: wp, wplist, wpclear
+ `  {0 ?' l% w    例子:
; z5 U* t/ N# d    wp 1234,1,r
2 z# D" A. a# b. B      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度13 c- J& `% L7 s& w' S

5 j: e* l' \/ N9 S; M    wp 1234,2,w: p/ t3 ~- `! o0 W
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 a$ u* Y; ]8 I6 |4 V* h
     & Z9 W2 |, g6 t4 w% y- N* ^
    wp 1234,6,rw
$ x/ \$ P% ?) L      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
, g% k" R$ u1 B% s9 n$ E  `! Q* v9 {" W4 `% n: _/ @
    wp 23456,a,w,wpdata == 12 k7 N2 \' A! l- T! z2 i
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' Q' p5 }# z3 @& B& _+ }4 g

7 v3 a0 e7 G, |  J  l" q    wplist! C" K0 J  C" f2 q
      列出所有监视点
/ ]/ `  i/ \5 x1 w% v" |3 [) I% p% O# q$ P
    wpclear 3
- N2 j$ ~3 G# T$ {9 }4 k      删除编号3的监视点; i2 h* W( Y6 v4 C
$ k$ n4 \! J# a% Z6 B/ r  w5 v
    wpclear. }0 ]' R7 w* d% {  r! q) s
      删除所有监视点
/ I+ g- j6 R/ n& n% o: L5 I- |
7 \: F3 W) |* v      , a# U- i' t4 K6 m& M' d; @
  d; w1 M  o, v& C8 R# |2 R* Y# w+ B
程序断点指令: bp, bplist, bpclear
9 A( @8 n# G5 \! B+ w) F    例子:
4 q' ^0 L  }9 n6 Z3 ?/ z    bp 12345 ~. z! E! T2 Q# w
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断! Q8 _$ [' [' }( u( J1 }
4 {; l" Z. D" N
    bp 23456,a0 == 0 && a1 == 0
$ \. V' T8 S' t0 M7 h      在地址23456下断, 且中断条件为a0等于0以及a1等于0
+ X/ n& Q- H8 D' x( s1 p$ `, J/ X/ t" Z$ j) G
    bplist; v# j6 u" a$ ~6 S% g
      列出所有断点
1 x& \3 H+ I& i& ]2 h9 Z: C7 I& y. `' B$ t# I4 g
    bpclear 3; o5 R: E5 ~6 X" `! b0 P
      删除编号3的断点
: q# n5 l& q# t" j# v
0 h/ I$ F1 [- R* @, q3 c8 ?7 @    bpclear0 v" a' n  o* h  s4 U% m
      删除所有断点
. W: @8 o7 L3 W# G* G& k* b" \1 ?# K6 Z& q. T9 l
      4 m! R7 O% R1 v) n2 D9 N$ l* p
      
9 Q- X; I) B" q  L. [& h  e跟蹤紀錄指令: trace
( k% c2 K% E1 l1 o& z    例子:6 ^4 o: A9 v1 U$ r, n
    trace 01.txt
- ?) J3 ]3 `: s" A% l    跟踪当前CPU运行的所有代码, 输出至文件01.txt
# w! N: W. X( N0 W* @& K
  @0 H4 d/ D& K- _+ Y' Z2 u3 r9 j, y    trace off
) ^- L2 R% D$ J# y) o& i, M    停止跟踪, 并且关闭文件7 v2 `; n" G5 Z& @; h4 |
0 ]8 H  c. u2 d
    trace 01.txt,0
4 l0 k+ h* H% W    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
. W. ~: A2 ?1 z# O7 P
( X; [( Q' K+ e7 W* z! }* _- o    trace off,0
0 y  i5 K. R) Q. ?6 P  A6 f4 x/ ?' j    停止跟踪编号为0的CPU, 并且关闭文件
" h) Z; Q6 Y* a
4 W1 ^, a/ c5 X    trace 01.txt,0,{tracelog "A=%02X ",a}
$ t8 b; K' W# L    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt + [4 L) O9 U3 E
    并且在每一行的前面, 写上"A=a "
* K; f; o; r& h0 R$ X    "A=%02X ",a为一个C语言printf函数常用的输出格式' x5 l" {+ q* A% s) `1 m
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ F6 b- D1 s: E    X表示为大写十六进制数
6 j3 Q1 g( y2 H5 U0 E- S+ Y
4 c: B& m# y! n4 t/ T) ]$ m1 |5 e% D1 j" {5 _
8 J5 F) C) u  |$ M- e
内存直接写入指令: maincpu0 c$ X3 d7 P8 ^7 I: _
    格式为 maincpu.[][]@地址=数据
8 V+ N7 S1 @! f, d    第一个[]:: c# F1 K; \& ]- K0 X* Q& T1 o# ~- Z  h
    o 表示ROM地址
3 \8 r. d: Z8 ?1 c    p 表示RAM地址
% E. X( K* `  X( j
% g9 M. G2 M. k# N) w, s7 v    第二个[]:
6 E" T! o8 V0 ^( E5 l9 |. I    d 表示4字节
2 @( u& K( _% |  U" y6 z0 L1 y5 Q    w 表示2字节3 w* |' _3 {. Q; ~, @1 B
    b 表示1字节
+ s1 F/ I9 W7 f" @- I6 |+ ~; Z$ n0 w# T8 a4 p
    例子:
' T' ?/ O9 P, S    maincpu.ob@1234=FF
. g$ S! m7 d3 z    在ROM地址1234处, 写入FF一个字节
$ e5 ?! j* M8 _: }! U5 V& [; I8 E' B# v5 ~( G( e
    maincpu.ow@1234=4E71
) k) d3 T( q' n" \) ~  @9 ]% B    在ROM地址1234处, 写入4E 71两个字节' `0 X. C, A# l/ @' G: S- b' O3 ^

( m1 d6 I  _2 t* P; n; L2 c    maincpu.od@1234=600A4E71' Z2 j& e  i- K+ L) p; b2 d; D
    在ROM地址1234处, 写入60 0A 4E 71四个字节
4 R, T9 d, d; b! l1 |: W- q* Q4 ]# ]! F* `& Q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写+ L6 X" a* ]3 t3 g; j/ G
      ~( C1 u8 X% r' _

- X! w% C& {- H; }) q其他:0 H- E! l6 Y' c, O( d( A0 C
    dasm 输出档案名,地址,长度
" ?, n  k7 E3 h; \7 D, F# K) k    输出程序的反汇编代码
% _* U/ k% }3 c  g    例子:
+ D4 L# I* p; P, d+ L: u    dasm 01.txt,0,100000+ ]$ i$ @, L, T
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" W+ q- o+ }2 V- ~2 @8 z6 q0 b6 p$ H" k1 o: p% T
    softreset
# L) F( v6 U3 D( F    游戏重启, 但不重新载入ROM1 _6 o+ L' S+ U6 K* Z3 [* `

- v  p# a( D+ K% h) H. H$ e    hardreset
  H% G: [& B1 S2 T) p9 M5 @) m    游戏重启, 且重新载入ROM
2 Y! K* b' c3 F/ R& P; F) p! E/ w0 B# a. [1 @
    snap xxx.png
4 L- Z, ?5 A: q# v% z4 J# l8 y    截图为xxx.png6 J. E; p; J! @: E5 H$ `

- R0 x4 ^" ~+ u7 }6 G, V& o* h  
6 U4 j; t4 s; V7 J+ u  ( y( I8 M1 Q4 k- {3 V4 s, l) Y
  6 `- ]2 @. v( a% C  S* f- x
热键:! y" n# i; l1 p3 W- i
    ~ 中断游戏. f: ]. e8 X9 k5 T9 n$ A8 y
    F5 运行游戏- ~8 [+ h7 _5 q4 c- T* W' b7 e
    F12 运行游戏且隐藏调试窗口  l- S% z+ a: n1 |3 k, o. h
    F11 步入, 单步执行, 会进入子程序
0 _8 x2 p% M+ J2 I    F10 步过, 单步执行, 不会进入子程序
# j# w5 x. ]& n& p; P6 W& {2 z    Shift+F11 执行到子程序返回5 F6 j/ v" R9 i3 ~% @
    Ctrl+M 内存浏览窗口
8 V& p; y  I& ^2 X% d    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' P9 t6 e$ G! V) m
, A, X8 K. v3 P3 ]8 h. T{:4_94:} 3 ~1 |+ F$ v5 o* B) F* m) N6 v

% o& R: V2 D! ~" L

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。. o7 _/ H( k6 h% I0 g6 T9 D: I, P
9 g, ?8 v; B: j& `$ D  |
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 | 显示全部楼层
要详细些的东东
) v; V) m& x& |, X11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-8 23:53 , Processed in 1.109375 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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