EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
% j2 ~9 L" F( c7 V3 |6 c( M5 w
很快速的整理我自己常用的指令
: I3 r  B+ R/ o! B
  s7 J/ r& \; Y' [: v; G{:4_112:} 8 h# \- c" q& l( z+ k2 z) [

  v7 g4 i( H; J. P& J% R$ X# ]MAME DEBUG常用指令
  @9 ]& ?5 N: D$ M4 K. S2 v
$ U: \+ Z2 ?& S; ~2 v- z5 ~内存搜寻: ci, cn, cl" u( U5 o1 x3 H/ G" L

0 p$ x3 \, c  w# z( @+ @    ci& K3 m& B: x) M) s- `
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 D% K' ?% f5 m- Q3 U+ u

6 b: Z! d& s8 E: Q9 @    cn% U. U7 F  ~# J, W# i- F/ Z" t
    搜寻指令
/ h4 r6 Z, y  f) O/ f    例子:
3 Y7 [3 Z6 {7 I    cn eq,60
2 E3 }+ D) e7 B9 }$ ]8 N! m* _    搜寻目标等于60 (十六进制)7 G9 n: B, B$ n6 z' k7 L# Y. L8 O
        
& I( J' n& R+ o5 N- Q    cn eq,#967 K" @# e; ?8 F; ^. F  x3 C
    搜寻目标等于96 (十进制)
& k) {$ S3 t, b3 `# {+ O
# V) _) z  _* l/ w9 p. x3 ?  P: ?7 R+ w- g    cn eq
6 W  P" x- F% v" g; H+ G+ f  m    搜寻目标的数值没有变化
, V9 l# o; E# Y" p$ U: U9 A  J4 V2 V- ~) _' U
    cn ne7 c( e% c9 W9 K( j9 Z# i: |
    搜寻目标的数值有变化
) q- m$ y0 y  a: o        . r# @1 k& h% ?& V# z2 k' s
    cn +! R) X4 N2 o' x2 ~0 r: N. E" R- V5 l
    搜寻目标的数值增加
5 W0 {; o$ }& x" u9 e& e    " I4 l* S! J7 T0 |" Y
    cn -2 x  J" z& Z4 e" U8 s
    搜寻目标的数值减少  x% U$ l  T2 F# B
        
2 a3 i; _# ~6 p% h, W$ b, u    cn +,38 J* y3 R, o  h3 V+ H
    搜寻目标的数值增加3 (十六进制)
' G1 Z8 n+ o8 x& f5 R- \1 t% |( U
: [% x, j- H: z4 `2 G    cl: u$ T1 R& B, q
    列出所有搜寻结果
# r9 v- D/ D- Q/ l% T5 S6 p8 d7 R' a
    cl xxx.txt
5 @5 m9 M+ b; a; O% ^4 B0 I    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 S3 \/ w" |% r& s6 r

* z) `  C& [; x    ! Q& }2 A) G( A1 V
内存监视点指令: wp, wplist, wpclear5 ~8 x9 `, ^" F$ ]0 r
    例子:
2 K  H- j9 E7 z0 T; k7 x    wp 1234,1,r8 ^6 c0 o6 F0 I4 _8 a, Y! O
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度14 g! Y3 C; W; w) O: n. [
* n: L4 |7 A' P. U  Q2 }/ `+ B+ N2 i
    wp 1234,2,w
% y) l" D: O4 p0 L0 B- V      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 h, I" l: I  D% b9 J: |     ! P! A( }; {8 _
    wp 1234,6,rw) n. o( l( N7 C. i3 R/ H2 G  F
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 }* H  q2 e7 Y" T2 \" c  R) ?6 N1 M/ n
    wp 23456,a,w,wpdata == 1
: \0 w; B# H1 b) a9 t      在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 [3 }% T  |: W; C

9 l# P6 c3 T9 Z4 z2 L% |6 m( w    wplist. y/ O  W1 k7 |) v9 e
      列出所有监视点
, n. o9 f+ r) t1 z+ f- ?, D6 a( I+ h0 o* Z
    wpclear 3
  S: l4 ~3 ]( x9 o' Y2 E. p, [      删除编号3的监视点: _2 ?/ d) C4 e0 Y( f1 G

5 e, \. Z" ~/ C1 H5 i$ E0 l    wpclear  s) _( w9 s, T! K% C
      删除所有监视点0 _! P- k6 r9 t# o1 C

" U7 ^! i% X- E; l1 Q- ]: N      
5 G. S5 B5 D) n- f2 a; l: J2 R
" T" J. @2 {3 A% {' K程序断点指令: bp, bplist, bpclear% h! |( C+ [# N
    例子:( C" v1 G, w/ |" _4 N" {+ O: W
    bp 1234
) ?' J( L% ~5 x$ E; E& y. P; Z      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
% B* M0 H% T3 y( ~# a1 A
6 J# Y$ ?0 _0 S# ^* R    bp 23456,a0 == 0 && a1 == 04 N& Y2 h$ M, g% m" f
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 W- o4 D! s2 j, v7 I2 ]/ ~
1 `8 i& B) m5 y/ D; T* U    bplist/ R8 x" o* `/ p+ P( o" j  x: i
      列出所有断点
- H( f- w6 z: D7 d# e" `  ^6 h* ~/ i5 \' `/ v- g; r% j! @
    bpclear 3
, J2 t* v& V  Q/ p6 z      删除编号3的断点5 a, v# `: S3 `/ y8 O3 t! J
4 [' Y0 o+ u" m0 X, {- x
    bpclear: a& x/ t  Z) F1 }
      删除所有断点
+ k; m9 ^; v6 Q1 ]7 b$ f4 c; p# [$ x+ C3 j; P+ X
      
, X: X2 o- W, h6 l      
& e- ~; r0 P  W, B, Y  V' N5 m0 N跟蹤紀錄指令: trace! J! q$ A' C5 W9 X& A8 e
    例子:1 N/ [  G# f0 `
    trace 01.txt
8 A4 a9 y# r; m; n    跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 u7 U, r. U# i- c$ w9 V7 l7 [  z3 {
    trace off" ^) }; G8 E3 K2 _
    停止跟踪, 并且关闭文件
- E# y5 \# v+ I( A2 V
; X/ }3 s! y% \& t3 Q* P3 S; a- O    trace 01.txt,0" ^( v" h$ t$ d7 o5 s1 C1 O
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. K' {1 T) H. a- [; D* ^7 M

) m; H8 l* r; ?$ ~# F    trace off,0$ T5 X# q9 @7 g4 M) S+ y% p% Z5 y
    停止跟踪编号为0的CPU, 并且关闭文件
: ]# D& j* W4 a+ d* z3 G  @9 q& T9 w( J
    trace 01.txt,0,{tracelog "A=%02X ",a}
* g7 X$ D6 V7 @0 ]4 Z$ m* Q8 L    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 5 h$ ]' E! X+ e
    并且在每一行的前面, 写上"A=a "
" s& f! F' H; A    "A=%02X ",a为一个C语言printf函数常用的输出格式
8 U+ d, v2 O* k6 R    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入! D2 z9 R; O# k2 w; J# c4 `
    X表示为大写十六进制数
& \2 ^" }+ h5 @+ v: j) `, y5 \6 w7 M3 r9 G+ v
) \9 ~, b  }. X; g- ^+ S. a
, r9 R8 G3 L5 X# n
内存直接写入指令: maincpu
; z8 H9 s$ O+ E6 _$ x: I- ^, E) z    格式为 maincpu.[][]@地址=数据6 ?/ i, V3 l6 t7 \) u2 f9 f/ W! Z
    第一个[]:6 v6 _) J) A- g
    o 表示ROM地址
- l/ w/ Z% {# o% N+ F    p 表示RAM地址
- Y1 c# G4 g* s' Q) |6 P5 ]) V) m3 F
    第二个[]:
8 m, i  J- C  a$ x    d 表示4字节8 C5 ]( e/ J: a& [
    w 表示2字节
9 v" d" f- s6 l/ i0 Z    b 表示1字节+ L( ~$ S3 S9 D3 Y# o" T$ t
4 z+ U, A; \# v' v7 q. Q
    例子:
/ P6 A( z8 p7 D- W    maincpu.ob@1234=FF
4 }  X7 A, r, h! |% j! V    在ROM地址1234处, 写入FF一个字节
8 l4 L8 I3 u6 `
% I* t! l1 ~9 J( Z    maincpu.ow@1234=4E71  F" n: D5 @" p1 s* G
    在ROM地址1234处, 写入4E 71两个字节
; g2 _+ V6 E" ?: A6 b+ P$ G6 o  D5 ~6 G# u# K' t) X$ a2 _
    maincpu.od@1234=600A4E71
' A" v6 {7 ~+ S- Y; w4 `- ^    在ROM地址1234处, 写入60 0A 4E 71四个字节% u) I, `8 f' I, L$ e

% v3 f8 f/ W) }3 G    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% j* k8 G* P  o6 n7 G1 k, w    ; a; U7 X( V2 H- w! Q

- u' i/ R* s0 o其他:
2 v, R) ?9 W6 R. L! I    dasm 输出档案名,地址,长度
* D$ x, I% A$ n5 S: R    输出程序的反汇编代码
1 B  `0 D- n+ F( }8 f) w    例子:- x/ W  ?( i9 ?2 g) {) L) P* F
    dasm 01.txt,0,100000
4 G# A! \4 h, r    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt- T& C; `2 U( U; J

# L% f" r/ x; w0 u1 }    softreset. A9 Y) V# x, }/ ?. Q
    游戏重启, 但不重新载入ROM
. h5 k/ p) @/ J3 U; W+ l- ?0 h0 |) ^1 G- C# p
    hardreset
; s8 V, F& l% v; f# X, S7 H1 d6 O    游戏重启, 且重新载入ROM
% H3 b' [* y5 o) `+ x
- o/ A* U6 ]+ u    snap xxx.png
: k3 Y) n5 K4 ^$ e  H, P' t    截图为xxx.png% K( D( S* n: K) ?+ `0 E9 B# F

8 a& q; ~) B, S) L; E  
& I, O: A5 P0 C( ]+ h  8 |# _6 E4 F  y: i
  ! O5 D- Z2 [1 q/ w1 t
热键:2 k2 \/ o/ b* }. M( y
    ~ 中断游戏
- |' Z5 T6 P, g. `* ~5 I& J8 B    F5 运行游戏0 b* D+ P- }% w, o: ~* {) X% h. f& k
    F12 运行游戏且隐藏调试窗口  m" E/ p% P( _: g
    F11 步入, 单步执行, 会进入子程序
+ X* T$ e1 {+ p8 I/ }. X    F10 步过, 单步执行, 不会进入子程序" {1 R0 p  M% e3 A3 j0 M
    Shift+F11 执行到子程序返回
; G0 \- n8 E5 W- B  b    Ctrl+M 内存浏览窗口
( M; u( f1 d5 ?) }' }2 H/ v* n- W    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; i" b& J2 |+ ?2 O. e

4 M: J1 P/ ]! @{:4_94:}
7 n% _; d' H# ^5 w! s9 ?1 G8 n

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
4 y( q# J$ U+ O7 o1 y
/ U; Q0 m: v- X1 R) K& s7 b" VPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东$ \) J" u4 z7 x
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-21 19:26 , Processed in 1.099609 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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