EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
1 b# N, u+ c+ L( a  j" C& ]( v( L1 h
很快速的整理我自己常用的指令* S0 b9 ?* I8 o7 ^& V

3 e1 c' e& s- q/ B5 D{:4_112:} $ D0 g' Z0 J$ s$ z+ k

: S( h" o9 a9 b( e7 k) xMAME DEBUG常用指令# ~% V+ M: ~( f, a7 D
% U' V& O: x0 {1 E+ v% R" a# Q+ W
内存搜寻: ci, cn, cl
) B( P1 @% L6 L+ m1 D+ l: L- G
  D1 @" d) Z- \$ p    ci
7 Y& l0 @& u1 l- v    搜寻任务初始化, 每次搜寻一开始一定要输入这指令9 h5 r1 ~8 f* b: b- r
% d3 Z- T& V$ X9 j
    cn$ Q4 b8 E5 I2 S6 ]' |6 s
    搜寻指令
2 ]0 R) A1 ?: j3 Z    例子:
! x; c$ b5 z+ ~  v: W+ D    cn eq,601 h, F8 c2 r: X; O: d
    搜寻目标等于60 (十六进制)% g: e$ v3 j, z- J2 O7 R
        $ O6 d2 q7 {( d7 X
    cn eq,#96
+ q1 G2 c# s; i" R    搜寻目标等于96 (十进制)
. {# M. y: {5 {5 b% e/ k% z+ W; V& i) T
    cn eq
5 f$ J# ~( O: r1 ?1 \- F    搜寻目标的数值没有变化7 a& E! I4 p0 g+ o

4 ~! i( E. }. m. H    cn ne  Q8 ?- v3 X% a: z3 t; P, l) P
    搜寻目标的数值有变化6 h  B8 O& k; x; {; i7 _7 @
        
% ]9 ~0 ^& K9 ?6 A    cn +7 \, }1 A+ X1 L9 b; M. U
    搜寻目标的数值增加
( z( U  g: b# C    * N$ i+ b. n# k
    cn -
% Y- S& D# q/ B    搜寻目标的数值减少7 ]; \) ^- i5 ?7 E& O9 T' Z6 \: l( X  l
        
2 Y. @6 W- Y% R' C    cn +,32 G" S7 u% @& X4 M6 @# h
    搜寻目标的数值增加3 (十六进制)$ P9 \# ~5 @2 w8 Q

/ d; j  s7 r/ n, z    cl9 L0 [1 F* V5 W
    列出所有搜寻结果. k! l- S5 n$ U6 ~. R

% W) h0 V% v! r1 g2 t' D    cl xxx.txt9 E) t' i* Q0 n* Z4 T: ?" Q
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* E+ V! d; b7 x) z$ S1 b8 ~
7 _9 e8 K" ~' {6 \6 W7 p; L
   
1 I9 ]$ a) _' y! e, g1 C$ }# k& Z2 n内存监视点指令: wp, wplist, wpclear
, N7 ~7 }$ m! b9 w7 b6 ^& J    例子:
8 l! a" _  w, u9 r0 G% N9 n    wp 1234,1,r
6 M9 a6 h# }  @& u% q" w  t7 Z! q      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ ^" B% b5 A9 e# K) G
' M6 ?! h2 A0 x# {6 i0 b. w    wp 1234,2,w: C3 I/ |/ y6 S- y; \
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 N/ O/ Y! j" \7 N
     " T& h4 m" P* o2 z5 X9 y
    wp 1234,6,rw
# l; A! Q7 X1 O! i. q* B. s      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
4 X. E' i0 q! Z1 A
. Y0 U6 ~( y) p. v9 i7 V$ p( S$ b    wp 23456,a,w,wpdata == 1
, `- h" M/ Z8 {" I      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1+ g: L! }5 T( R% }9 W! T2 R) x
/ B+ v' {) [  r& `
    wplist
" x9 Z: K9 U& E: n      列出所有监视点
+ \9 }# _, Q) m- @3 }  r
) p' V& Q2 N. H  A6 A* W    wpclear 32 p  f* z' C6 _
      删除编号3的监视点9 T' f0 u  v/ Y' K; `0 A5 r

6 n& [" A& G' I. `- y; e2 j# \# ~    wpclear& O8 E. Y6 o# ~9 z
      删除所有监视点4 U1 g* v( M" ^8 b, y) r- ?
/ ^, B! P/ S5 \+ H3 S6 F& ]
      " @" Y9 \4 p/ x: N1 h( t$ k
: N0 K. z2 n8 w+ k8 U9 w/ h
程序断点指令: bp, bplist, bpclear
* k3 S5 F- Q# d; B  y- Y9 c2 x    例子:7 _  d" X  `2 r5 E
    bp 1234
0 v6 B+ b4 A" J      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, Z+ N6 o# j0 H  ~( G; A- H; a5 s* S5 Y( F8 Z& `
    bp 23456,a0 == 0 && a1 == 0
1 `4 t; f3 M$ y* C7 g      在地址23456下断, 且中断条件为a0等于0以及a1等于07 `/ K- f) J( d2 Y9 m! X

! ?0 I$ P/ r0 |8 L4 _/ c0 c& y    bplist
: j/ {8 t  j0 t' n! }/ M" X  a      列出所有断点
3 q; ?. N" o( Q7 _; x# f3 r4 \! z; e# Z/ W/ t7 t
    bpclear 3' R* W! H$ @) F# m& i$ Y
      删除编号3的断点
1 L; g, N4 X; U& S* P2 @2 i2 j- B1 }! j$ |) x* K
    bpclear! f( C8 k1 {9 Q! Y6 e
      删除所有断点
: e# k/ s, B- {
8 x- B  w8 D/ p5 {- N6 O      
! l% I: W! }& |5 s! {! K2 Z      0 x& u0 j/ Z- J% d, [
跟蹤紀錄指令: trace' D% S, `1 l- T; @4 M
    例子:
( d4 D6 Q* G3 `7 c( x& A    trace 01.txt
/ Z. a" `* P0 X- [    跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 t2 L' K  O+ S# b9 q3 r9 t  ~; t0 o' a) h# o1 s) w, \3 u) @
    trace off# R4 @) n3 _- C+ r1 R6 A; B3 D: C5 z5 p
    停止跟踪, 并且关闭文件+ J  \6 W1 N. O: Q4 l

& k5 |! f2 ]- _( d    trace 01.txt,08 e4 y0 n* H( |) X, G
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! ^4 [" @, X6 z( G, r% S! l' Q
$ a4 V7 T) C3 k    trace off,0
8 v+ j# O# d! e0 W- a" ?5 b9 S    停止跟踪编号为0的CPU, 并且关闭文件
) A* m0 w3 i6 ^4 J
) T& ?- g6 g  G: v& c8 X6 X    trace 01.txt,0,{tracelog "A=%02X ",a}( t8 I$ {& M$ |0 s9 C4 d5 w
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt . t4 o& A) ?: @
    并且在每一行的前面, 写上"A=a "
1 _& ?2 A1 y3 i. O) l: I    "A=%02X ",a为一个C语言printf函数常用的输出格式0 r* m1 z8 @* F0 G6 r, U7 ^/ Q( L$ M
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, W3 L2 q' n) `) J  i- J5 V8 _& X; i    X表示为大写十六进制数8 x1 F7 p. l( ]; l: T
8 K( U0 o" V2 F' T) r

, C. X! N7 l; e/ D% ^$ k% h& g+ V+ S" D
内存直接写入指令: maincpu
/ f) s3 n9 c# l. x; V    格式为 maincpu.[][]@地址=数据
& w4 h+ X$ n2 v1 A- G    第一个[]:
: O' j/ [) w0 Y7 }0 O! N+ G    o 表示ROM地址
$ W$ V6 {1 G7 ~: k4 y$ [    p 表示RAM地址& a) e, L/ Y; K& f
. j8 Z2 D+ x6 ^4 T
    第二个[]:1 k+ e% j% |" z# }6 |
    d 表示4字节8 @: c/ ^- E& t$ z$ L! p7 l
    w 表示2字节
; M5 V$ [4 w  B: a  W- Q    b 表示1字节( C; c( X; L1 y' M
% U' {) Z. {/ X( g
    例子:1 s: Q& d3 m/ \0 N
    maincpu.ob@1234=FF
0 @" B- {1 M0 J6 K    在ROM地址1234处, 写入FF一个字节
3 \$ S' d3 S7 x' {: `/ \( b; D
1 i0 p" j8 n- f3 \4 Q    maincpu.ow@1234=4E715 F8 {; [. p% N9 `9 F" i9 k
    在ROM地址1234处, 写入4E 71两个字节
+ `. Z( r" s" N* z, S9 [
$ r% A( m6 L# P    maincpu.od@1234=600A4E71
) n1 N$ _9 J# a2 _    在ROM地址1234处, 写入60 0A 4E 71四个字节
5 `5 j+ D4 g; j4 U% U0 c5 D* n! d- \* i$ m, w/ ~4 [
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ \" O9 z! \) y  c' C  a8 o+ f    5 t$ A) |* E/ i( `& C/ M6 Y
' O' Z' `$ d& Q# f) |
其他:' s2 A  J; Y& ?8 @6 a# L- B9 o
    dasm 输出档案名,地址,长度
: }. O% i4 Y2 F' P2 }7 K0 i9 H    输出程序的反汇编代码! M  F4 G0 K% b+ B, E4 q) Z
    例子:; p  ^  x) |, b: ], k9 R
    dasm 01.txt,0,100000
  q! t# C$ K  e9 v# V" `    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
* }5 |: N8 c4 ?& h+ `- |3 d$ \2 r4 L$ P/ h
    softreset. j' |6 S0 |' T: z5 Q
    游戏重启, 但不重新载入ROM
# y& B5 v/ l& r) P! S% b
* }, c1 U0 q1 D3 u$ I, m    hardreset8 `4 m( k% O5 w# B' R; X1 H6 H
    游戏重启, 且重新载入ROM
0 P; [3 @4 \6 s0 c
5 y$ L7 o# I5 ~% T+ B$ O* n0 S0 R    snap xxx.png8 \( A+ K6 M- O; y# r" e' y+ X; g
    截图为xxx.png4 v3 @: _7 q) G

- T" h# c, [9 }1 R: Y  7 o1 H3 [. K+ R+ z' q3 D+ D# @
  
" b0 _  l' t3 W8 v  
- l! i# @* _# e( @* m; N; d# C热键:
' D) w4 b( h4 j    ~ 中断游戏9 ~/ q( M: m; D# U
    F5 运行游戏0 }7 x. G) }- n! k6 Q6 ^* v6 S  o3 {
    F12 运行游戏且隐藏调试窗口) m& o( R8 a% f9 R* ]# K" r8 j4 m
    F11 步入, 单步执行, 会进入子程序6 W- _6 ]: t  f0 A1 t- O
    F10 步过, 单步执行, 不会进入子程序; ?8 Z8 C4 Q: L+ Q8 G9 x
    Shift+F11 执行到子程序返回- n; s4 w2 e$ i9 ]" T* m1 S' s
    Ctrl+M 内存浏览窗口
6 V( U) Q" Z8 d" ~    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU. `, F% A7 e. d; Y1 p! M

+ u* E* X7 ^( t7 z/ H9 N4 R8 f$ q{:4_94:}
/ s% p1 T6 c( k+ w; d7 R. B" [: n2 r2 y- `& f1 k3 f0 C. O* m

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。/ y% j$ G3 [) i+ x& e1 @/ Y

& v4 p9 W# L: v1 [1 E9 [; ePS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东' p" A* G1 F9 f# x
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-8 06:47 , Processed in 1.060547 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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