EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
5 r( M+ p5 ^5 a3 G2 |
很快速的整理我自己常用的指令
1 U: i& j0 d% U; Y) F) y1 h" M- q8 q
{:4_112:} $ C4 z8 ~3 a/ R: b5 E$ U0 m2 V, I
" z9 _9 S) M! Z) Z- O& B
MAME DEBUG常用指令( _/ t! T) ?; T
% W; s) e' G# [9 U4 D% h3 N
内存搜寻: ci, cn, cl
% ?6 ]' b* e$ v' n3 z9 |
% G2 R- Y% B9 g5 ]    ci/ o* g/ q. C" ?3 @* h9 W
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# t7 @* \* J% `$ D) A* }0 S+ X$ Y+ ~2 D3 j! D" K
    cn
: P. M! ^% [3 H" K6 V0 I5 [    搜寻指令
0 T1 J) M" @: h& q6 Y    例子:
% T2 g! V) _8 a3 ~( a    cn eq,60
% r2 Y; I6 X+ G: G; a. f6 I    搜寻目标等于60 (十六进制), a. C) @( E9 d3 W/ ?2 a+ _6 n# V" t
        
  q5 l1 W: m4 @- d    cn eq,#969 t) c6 J( V* p$ w7 Y1 z9 o5 H
    搜寻目标等于96 (十进制)
* A7 p% b; u1 V* ]' i$ n2 H- y! L3 a
    cn eq
3 t* q# K1 A: r7 f" V    搜寻目标的数值没有变化3 G6 S  w, }7 j" Y! r8 ]6 T% E
0 J- h7 N+ ~3 k0 _
    cn ne
4 B  m- O8 F. i. T' A6 ?  w# e+ T    搜寻目标的数值有变化5 V/ [4 Z/ x" z3 E3 M8 L
        & E3 q. I8 E# N1 j5 d
    cn ++ {" K+ ~& @* d, K2 u
    搜寻目标的数值增加
" g: ]' b/ A- H5 z: C( G$ D( K    9 Y" l# y( z3 K' a  I5 M! ^
    cn -* r7 t( E3 s. r- U, d& P& C
    搜寻目标的数值减少
6 v8 s- y, G; }! S+ \) G4 A( g) M        4 `9 l: s9 `: W: p8 K3 E
    cn +,3
5 J+ `) g, Q$ E# ^$ d    搜寻目标的数值增加3 (十六进制)' b0 x) M  M8 q- j
2 r, o, S: j0 D# W6 m- A
    cl  U1 ]& o! I6 B" a! y. `( N
    列出所有搜寻结果
9 _2 |# U! X; X9 ^6 J2 h. Q; P* @. H2 c2 P- h) ^7 Y
    cl xxx.txt
& U' k) C2 q9 x7 q1 ?' j' F1 c    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) U# A" E9 U8 K. ?6 ?0 b# y- g
, F  p$ r! ]; z) W( l   
$ K( ?$ K9 y% o2 b8 ?内存监视点指令: wp, wplist, wpclear
7 t, p, y3 k1 l' b    例子:5 r3 ?3 p9 f0 e2 W2 @* s* g
    wp 1234,1,r! G7 k9 @) q0 w. o9 b$ F6 c
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
7 B; a0 R: E6 U% r- G
" c1 m: l; k( z    wp 1234,2,w
( q- s6 Y; g5 V6 W8 p      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ G' _3 V4 y2 ]. [/ O7 ]1 v
     
7 n- q% l2 W& O6 U( }    wp 1234,6,rw2 S# Y  p0 ]+ I! C
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6, N+ Q1 s( `2 @9 X( b; ?
4 ]5 Q2 c+ x, q$ C
    wp 23456,a,w,wpdata == 1
! a$ h" e2 V0 v2 ]4 i      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 g" j$ a$ y9 Q9 F2 y. G6 Q8 ?1 `. V- x, n
    wplist
  V1 b' _  g4 z9 B' A5 @      列出所有监视点
* ]/ C# ^) s5 h
# E1 f+ e+ K7 ~    wpclear 3, O% c1 ?) H  n8 O  R: ~* D
      删除编号3的监视点! c  s4 p: l$ k0 x5 o2 E  m6 m
7 b  S  v+ s2 c
    wpclear
4 c/ l/ N( r9 J( E0 L( z      删除所有监视点
2 }4 E! q7 A4 B! i$ p* Y( {6 x! ^; x# C# n! P3 L
      3 G( b) q& R. t4 e" h5 n
3 }3 M- K2 w' o2 l3 n
程序断点指令: bp, bplist, bpclear
+ L& V. i/ ~1 `1 E0 i    例子:
5 z, m* }4 ]- h) _$ x; y    bp 1234
  f1 e3 |. v6 f1 T3 \      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
* A% c7 w7 w7 N, k
" j, G" V! x# p2 c* R    bp 23456,a0 == 0 && a1 == 0
6 ^$ M4 Z  Y9 e1 I0 z      在地址23456下断, 且中断条件为a0等于0以及a1等于0, m/ B; h2 e' |% U: Y1 h
% Z2 i- Z$ P/ K* ], R
    bplist" a0 W0 d7 a: u. G
      列出所有断点
0 S, W" P1 g5 w: R2 Q( |
, X. L% B$ a& [1 ^9 s+ ^# V, [$ D    bpclear 3! [2 B4 b* l' g
      删除编号3的断点5 p; b/ f: P; Z( [: b& n) s
6 s. ?0 `' t- b7 V# f2 x; D
    bpclear
9 C4 _4 G0 @+ Y) p9 Q  w/ J0 v      删除所有断点
% A3 \% S$ u( ]) s0 ~7 Q+ a* V" F6 ^7 f+ C% g/ {3 _: X. x1 k
      & S+ O4 {  D  B2 \8 \5 X& s6 }
      / x; i2 F6 `, R3 U  T
跟蹤紀錄指令: trace
* z  q; \5 i1 Y) R1 E" Y    例子:, V0 F% V) V& q7 X& {
    trace 01.txt
5 H4 e. E+ |& s3 K) y4 E    跟踪当前CPU运行的所有代码, 输出至文件01.txt) R% t+ K: q$ @3 D( O
3 v& m" g, ]5 z
    trace off
! k; V9 _6 [  _& |    停止跟踪, 并且关闭文件
8 y0 e( ?3 p1 v& C% p/ c
( ^1 E7 }4 K: [6 V/ ~! v    trace 01.txt,0; n( l' t: t; @8 _
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt$ ]2 s* ~% }0 z' \

) t; d6 H4 n% y# _, e; A    trace off,0) D& z' a2 b3 s1 z7 O& \
    停止跟踪编号为0的CPU, 并且关闭文件
' ]# f2 K0 W  `4 t- E* W8 U$ _* ], G4 A# I* c7 [/ O8 W
    trace 01.txt,0,{tracelog "A=%02X ",a}* g" ~. ^/ m! o5 d" @1 _: z/ t7 F
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
: t7 _" ?7 @- m3 G    并且在每一行的前面, 写上"A=a "
/ b! j$ T& I, y9 M6 m    "A=%02X ",a为一个C语言printf函数常用的输出格式3 O" G# g% P7 A" q  g* x; A0 n5 e
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
: K; m. K6 \( Y) O. b; d    X表示为大写十六进制数1 w1 f7 x8 s" Z
2 N6 R* Z% w- `  b
6 ~& _5 X" n5 d
- v& C, M/ L0 N( w, d, [# q7 M
内存直接写入指令: maincpu
/ @; E) q. S5 q) p/ l/ r    格式为 maincpu.[][]@地址=数据
6 I6 O, B1 K5 t8 [, O. K1 ~8 n    第一个[]:  B! t" g, t% h
    o 表示ROM地址; O  ^8 q7 U9 ^4 m: v
    p 表示RAM地址
9 b; D: n) _" Y+ l
0 o4 a! f( T9 _    第二个[]:: j& ?- C4 b! z/ n) b! O
    d 表示4字节
) O1 L6 i' x* s3 G* u    w 表示2字节+ f8 ~& u) W: a5 ~+ R$ `
    b 表示1字节
- j" M. N3 W- _4 L+ |6 O: B
4 {, s1 p3 g' z/ `    例子:: e& W0 c! S. j( K4 C/ K/ ]- E
    maincpu.ob@1234=FF
4 G$ x1 T' ^5 Q6 Q5 P8 O! I/ T    在ROM地址1234处, 写入FF一个字节
( D4 o; z% u) x7 O' s5 N3 U8 x8 n& ?& d( c7 v% H2 z# c6 l
    maincpu.ow@1234=4E71, D% m( A$ L9 b" D0 B
    在ROM地址1234处, 写入4E 71两个字节
0 ?) m: B$ N6 ~9 N3 `! P4 V, m+ m/ P! g/ u) O3 ]
    maincpu.od@1234=600A4E71+ P2 L8 `: ~  A/ p  U$ ^
    在ROM地址1234处, 写入60 0A 4E 71四个字节8 i1 g9 ~! _4 P# R

* [" ?3 v# e/ ^% G  `; V% z& J1 w    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 I) `9 p2 z8 M, _" z+ n$ E    ( ^! Q$ e" z" p! |

2 r; T, _4 P: x7 d; a7 V! E3 y其他:
4 n$ F3 m' r5 q+ J6 d    dasm 输出档案名,地址,长度. w5 c& h; F4 `5 |  n9 Q
    输出程序的反汇编代码
1 ~, v5 u+ L- K3 t    例子:
$ m- }0 O& |" y) j  U5 O    dasm 01.txt,0,100000
5 d: |% I9 n  g1 a6 n    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt( _. c; L! d0 T7 C

! @7 g- b& Y" G* A8 t9 K    softreset
: W8 O! l! ]* ]" U    游戏重启, 但不重新载入ROM
( B$ N- {2 R, Q8 k
, Y  R  P: P7 p- \    hardreset
* Q4 y9 g6 |) P1 y1 _! p" Z+ R    游戏重启, 且重新载入ROM; m0 v$ m: e; N& p
+ ~1 h$ @  k3 `
    snap xxx.png0 v8 u4 h/ m5 j( k, Y% x
    截图为xxx.png
" U# D5 ?0 H3 J. h8 r) R& d; ]6 n! z$ b% t9 k9 e" w
  
! j+ [0 v) L7 Z3 M7 R) I  2 E; g: _3 X# r4 Z- E, q
  3 ]( {+ |3 L) M( e/ t, g
热键:
! T( q. X( ]5 ~8 p6 S    ~ 中断游戏% K5 w4 T/ r1 Q# u0 Y3 n5 O
    F5 运行游戏: e8 Q1 E, C; ^/ C
    F12 运行游戏且隐藏调试窗口6 h! w, Y0 ^) j% T6 B% @0 l  P
    F11 步入, 单步执行, 会进入子程序! t! O7 P( z" p. e) H4 o. r; h
    F10 步过, 单步执行, 不会进入子程序
* ^4 s7 S5 p4 h7 T1 ~( c    Shift+F11 执行到子程序返回
- f1 S, t, Q7 `1 ?" B* |    Ctrl+M 内存浏览窗口2 Y+ n. r, l" }3 \! a# \
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' {2 s  ?7 L" H5 {
' {! z- t/ Z" F4 U$ M- K{:4_94:}
4 l1 D5 E3 G, z3 M" ^, X7 n" A7 m1 e$ I5 J

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
8 d. w! a% m* K; B$ ?) m( m; R' e% I  v/ J0 j8 x  Z
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 | 显示全部楼层
要详细些的东东
) C& J  P' K& F7 [4 ]11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-27 13:55 , Processed in 1.122071 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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