EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

5 g! R8 `6 h& U0 ]! t很快速的整理我自己常用的指令- w/ x0 y% u$ _. y3 y7 V

" F$ [1 L7 y7 B8 c7 Y/ x/ l{:4_112:} 9 M1 k1 c+ p' ^- \' |/ K
) D) _4 i. T  ^8 L; y5 b
MAME DEBUG常用指令
* h+ v4 k" H9 {% o& Y/ g0 `3 b
6 x4 B& S9 P4 W7 C内存搜寻: ci, cn, cl
, V# k' j1 |" |8 Z$ p
4 U/ Y  @$ t0 D    ci
5 F, f7 H: V! h- G/ V9 V    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
0 j. T% ^- ^: u$ I) m8 }5 G6 z" [3 l6 s/ Q& J) [7 f
    cn
$ V% i/ Y; s  U: [- _    搜寻指令
  i- l5 |2 \; }! X    例子:1 g  x! f; K  _) a1 j) R0 J' O
    cn eq,609 I+ G" A5 O6 |$ @0 [" ^6 u
    搜寻目标等于60 (十六进制)7 w! C  s4 q' C( s  V' G2 h
        
: b: z: Z* o) x+ ]9 C    cn eq,#96& W( o# u! k/ c: H. n
    搜寻目标等于96 (十进制)8 ^/ d* h' _$ d6 A0 P
& U& V* E  {& w* k8 Y- t
    cn eq
6 C+ G* D; L/ t5 _4 f! X2 i    搜寻目标的数值没有变化
" A0 A+ n; j* m; X2 V: q3 z2 |8 D- u1 P
    cn ne
) Z7 A* f  m4 J: g9 A    搜寻目标的数值有变化5 E- n' w9 U" N8 ^. R. D
        
/ F9 l2 W9 z2 _    cn +
2 q+ B1 T, L0 _, \% v" C' J    搜寻目标的数值增加
. \# }  q2 P7 f% i+ |: G   
) h! Q4 ]& }- g, C! \% n7 B    cn -5 S5 N' z& G& {+ M1 q6 F' |7 s
    搜寻目标的数值减少9 G& E! d) z- O  D) [4 O
        
' x/ e3 V: Z% h    cn +,3
: O: j% k2 b4 M& t9 @( z    搜寻目标的数值增加3 (十六进制)7 A, I9 O: n' ^/ ]7 U6 j  b, N* v- I
( j! o) L7 k2 x* C1 f
    cl
& j4 e7 W+ }  {2 _, ]# e/ H6 s    列出所有搜寻结果
4 e" ^( P# }/ ], t
: Q+ u( f( C1 L# T( i. l" F' [( d    cl xxx.txt
  @: k8 L# D( g' L1 V    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式8 S: F5 m" o. B2 I5 M, Y8 Q1 Z

3 k9 o1 O5 C6 ]   
$ u( m( T# t6 R# f! q/ k6 J内存监视点指令: wp, wplist, wpclear* C7 u/ B2 Q/ H. P9 y8 M: I# z) I
    例子:% g: _8 x: G$ ]. ~* Y
    wp 1234,1,r
8 W! A, U5 |7 L$ c  r2 b      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ [! S9 P/ R) ?6 G6 f8 b$ O! I2 L- E( |% Z# h1 E6 L
    wp 1234,2,w
, j+ T- y; r8 r; z# X      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
! m. |, ?3 e) y$ O2 r     
2 s. ?% e0 d  o( q) p  ~. @. N    wp 1234,6,rw
9 Y; x0 V' Z0 a1 {; f, g      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
# ^" x+ U- _7 @& q: f! i) r6 D' e3 [9 w. X' Z+ R' l6 H
    wp 23456,a,w,wpdata == 1  Q* D% E+ {* h
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1; o3 `7 w/ o6 Z
1 \4 Z$ f' }6 M0 @+ }; P5 S
    wplist
8 E3 t3 ^" M9 I$ |& {      列出所有监视点
* B5 j: G  V: _& _3 n% b6 a2 F- q6 L- j* G% A3 k: k! h0 G3 |" A4 A
    wpclear 3
8 F5 i1 l# G- _1 \% v      删除编号3的监视点$ Y4 H( c+ p& X

4 T6 A& c6 L+ G, F" M/ z* {& l7 I    wpclear
6 n1 N  I+ q1 z1 e      删除所有监视点
+ ~+ `" z; i& o, j2 F3 c3 t7 X: R
4 O1 X9 b' T3 Y      
% |7 t; w1 U% |. U2 D
  U# t" D3 e  i1 m' a' x6 H程序断点指令: bp, bplist, bpclear
6 `0 p5 C# U: g$ y0 ^9 d+ a    例子:3 C2 M; k6 J. s" z
    bp 1234+ X  i5 ^1 h& _+ }" ]
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
6 d" ^( T  X5 ^' N' r; B0 Q( g6 O2 l. A2 q7 \2 o
    bp 23456,a0 == 0 && a1 == 0
3 D9 S; E3 f; ?- }$ N/ k* ^      在地址23456下断, 且中断条件为a0等于0以及a1等于0( ~: p% K" b6 }  `: V7 p( q4 X

1 e  f- E/ i- r( Z1 `5 X    bplist' F# ]3 u& {0 \5 |/ ^! d
      列出所有断点/ Z: x. T1 _) Y* I

" m; T) @+ w: D3 b( E    bpclear 3
$ H9 S& _  X& ?. Z& N3 O      删除编号3的断点- p2 v9 d' k# Q

6 z2 @7 O1 g/ p3 m( B    bpclear( }7 E* J. B  b3 {- e1 a% Y
      删除所有断点; B* m7 A: v# X$ ]
0 O$ v/ Y- n* B, A* U
      
7 Z+ Y8 O" a4 _" Q' _5 o$ |9 o      
9 B. c# w' W' J- k1 g跟蹤紀錄指令: trace) Z4 W9 T3 W* U
    例子:
" U4 k( i8 E# k, g9 N' ?' `    trace 01.txt
. U; L% _" l9 W8 f% |    跟踪当前CPU运行的所有代码, 输出至文件01.txt; _" H  V$ h1 y

* \' j% E  [9 _# u9 z- u    trace off
& a5 N# H" |+ X' h9 E) H    停止跟踪, 并且关闭文件
. I5 K3 R4 d$ C; o
' d/ e; U$ k) E* l9 e- s    trace 01.txt,03 S$ ?7 o2 s5 g/ u9 x
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 D# C5 y: Q5 c/ J! e& }1 U* P& A( ~
    trace off,00 i6 L7 l+ O8 c8 V( ~! j  G+ z1 }
    停止跟踪编号为0的CPU, 并且关闭文件
  d0 r2 P7 Z1 ~$ r6 B5 P" p7 o! e/ x& p3 _2 l4 `# l
    trace 01.txt,0,{tracelog "A=%02X ",a}6 U/ y5 ?7 }2 }% K- z
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 a0 t0 W& |- H. r    并且在每一行的前面, 写上"A=a "
. s8 W- I3 {, z' v9 x! N1 Q' J    "A=%02X ",a为一个C语言printf函数常用的输出格式; o2 p8 N/ Z: i7 n2 ~( d3 I
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 |1 D  B# T4 |9 r0 s    X表示为大写十六进制数1 A( m0 Q% d4 b/ z

' F0 Y8 ?8 J: ]! f' Q; n. m; Q5 M6 z

( X7 [  ^# N) j  E0 L内存直接写入指令: maincpu
( N# X9 G8 F. x  @. a" g3 x    格式为 maincpu.[][]@地址=数据' L, r: u" C. J7 s- Q2 [
    第一个[]:1 h6 o8 x3 H4 P  y1 Z
    o 表示ROM地址
( h$ F8 {+ m9 A& }    p 表示RAM地址
( ?1 l) }7 [  z& D  |) y+ e7 a' x5 O
    第二个[]:
$ ?& V' ^4 {3 S) k5 {    d 表示4字节
. r- B3 K) a( K- x3 U' `9 |    w 表示2字节
, E+ e$ E+ ^: }) B: R9 O$ o    b 表示1字节+ L: v/ h) A7 W' N3 j3 X8 a' n

. k6 ?+ B, @; ~# H    例子:3 a) I. N$ U' q+ }* }* F
    maincpu.ob@1234=FF0 ~) G, K& Y6 z! v! n. k: Y- L( E
    在ROM地址1234处, 写入FF一个字节. {7 O7 \: \1 h9 p; L9 r

# M, S% {- y. O    maincpu.ow@1234=4E717 v; O) T: f! V' V+ F) Y
    在ROM地址1234处, 写入4E 71两个字节# I) |& \* E% o5 A* a4 m! |

4 x; M& D3 l! n8 z2 d    maincpu.od@1234=600A4E71& [7 @; z& d" X5 Z! s: K; s
    在ROM地址1234处, 写入60 0A 4E 71四个字节: J4 f- L/ T7 B8 a/ _# h5 o

; K" [5 |( B3 \, `* E: @1 r3 c    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写; y9 Q8 V. L$ g4 q) p5 [
   
+ v% c. S" ?/ |! _/ X; a
; S$ n2 u+ g/ J$ \! C- k其他:
/ i% K! F1 P3 l. i0 Z    dasm 输出档案名,地址,长度8 C+ X. j; L/ n% |4 c
    输出程序的反汇编代码; S" n- ^% l9 \& I
    例子:
4 ^! M4 T- p% n: I2 T    dasm 01.txt,0,1000007 W' J% E: o5 g$ u& I& P
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
- Y4 K: V: b& H& C) T1 k6 }" A3 \: l7 q4 X  \+ W7 N& u
    softreset6 D0 V/ p/ f: G/ X$ p
    游戏重启, 但不重新载入ROM5 Z+ i. G' q0 x

8 l$ z3 @/ i4 l; p6 g$ `/ n    hardreset
2 T) _' \9 N( A% `* f    游戏重启, 且重新载入ROM
$ Y1 s! s! z( Q5 B1 _! M7 j# c% H
* G$ n* F- J' u    snap xxx.png4 F# ~7 @; F+ O/ s0 _% p  ~' [; t
    截图为xxx.png0 N3 u7 d+ g9 t" ]
3 d- T, y  Q7 y
  
. L& t* @" Y- s. D) ]2 p, V4 z" x  7 r2 a6 M/ N, j" E0 @
  
' d8 m% f& |% L9 F6 }7 S+ H' t热键:
7 z5 z& g# c; G    ~ 中断游戏
" M" C9 [9 h/ P2 e    F5 运行游戏2 v5 |6 ]; S7 K" v& V7 A
    F12 运行游戏且隐藏调试窗口" j) z# ^  @$ m( h9 K, {
    F11 步入, 单步执行, 会进入子程序
% k, \$ v9 \  J1 c- ~4 N    F10 步过, 单步执行, 不会进入子程序
" Y- Y# O- L% M. n* }+ P" c: J* j' ~    Shift+F11 执行到子程序返回# x  J: D0 j% c" `, M6 I! |- t$ `
    Ctrl+M 内存浏览窗口
4 P$ C8 g* n' Z. B    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU" o) D! ~- r! U# F% j$ B
5 e3 S! w  P$ v$ G* o. R1 O! @
{:4_94:} 0 O6 L% j$ F% j+ ]9 o

0 E, k! t& T; c& Y8 n4 f

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- U' P$ N4 H( m% x' a: ]( Y9 e9 g! A6 V+ f( @9 V2 r" J$ ?7 O; j
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 | 显示全部楼层
要详细些的东东
" l" ~# j& e4 Y) s: X11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-13 01:40 , Processed in 1.102539 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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