设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* t  {8 c8 l8 y7 I5 E& s很快速的整理我自己常用的指令) V( H9 R: p1 r4 q. Z
2 {& m: u0 R( I4 o* W  C( g
{:4_112:} 8 S' K. m' `. ~0 q

0 |. K0 C& o& y1 C5 QMAME DEBUG常用指令
' Y. i) N+ v5 {$ B
. q8 n- H( Q4 W1 ^内存搜寻: ci, cn, cl
' ]' h# \* N/ D9 m0 v9 W, l# v9 A# M% `  v+ f% |: W
    ci
% h, ~4 C6 O' r/ n    搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 a; V8 ?, m, I+ I7 n
3 U( Q- I. l) j" n, G) N7 }; |, j
    cn
& Q6 r' F: {9 ?0 J3 `4 K+ z7 Q7 o    搜寻指令
- y! d6 r( {3 d' Y    例子:
; T3 q. p9 u) A/ q. z. Y* R" y4 {    cn eq,60
$ I8 {2 J+ {* v2 @9 ]( v    搜寻目标等于60 (十六进制)/ _" g+ x* U4 p$ ?
        
+ D3 H( W5 M& N1 j8 X0 l    cn eq,#96$ q6 I3 X9 D) W8 i5 M* i2 c
    搜寻目标等于96 (十进制)7 f8 ]/ g* b. C( F  j% F7 {+ ~
# e  I0 ]- W8 h* a5 v" v" m6 h
    cn eq& S! Y8 Z( t7 `* q4 o/ j6 q" J
    搜寻目标的数值没有变化7 l% f6 W, ?' `7 g  G4 \+ v2 U2 D

. o1 Z. Y* R; ]/ b    cn ne
2 F5 w5 u+ B9 K5 k    搜寻目标的数值有变化
3 g3 y* Q7 `. D" a        
& C* S9 x5 k' n, _, \3 Q" l    cn +. Y1 q) t3 R7 q+ q
    搜寻目标的数值增加
. c9 x/ N" p; z   
+ E+ `9 k$ l0 g" }7 X    cn -1 d0 i0 K% a6 }* Y. f, W2 C% ~! Y
    搜寻目标的数值减少/ N! f- N6 B  ~  N7 W  @2 F/ ~' u
        0 D0 E# U- h9 g6 g' {. n. P0 o
    cn +,35 n4 X5 U) l) ^% z0 {+ l
    搜寻目标的数值增加3 (十六进制)6 \1 q- \& u! d0 Z0 S+ t  u, k- F
. H. w  b9 K- N$ h! C
    cl1 G6 f3 d" V) k- b/ }$ A9 W
    列出所有搜寻结果
& i1 E  t+ }# X4 x7 `
8 O) `& y: v4 d! S# j! `: c* ]7 c    cl xxx.txt
1 p7 ~8 @& t( O9 _. `: q    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式! j% a1 [- K' p5 G! \! A" {4 k
5 }$ @/ x- |& j; }1 ~6 @
    4 B: [0 B$ Q# K
内存监视点指令: wp, wplist, wpclear
. P2 y* U- K% ?& B: \  m    例子:
! k+ j: p% S' g  V    wp 1234,1,r- u' y! F0 {3 [! M  x( T
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1" L1 Y! @$ L; Y5 K

% n3 ]( a8 d/ T/ V+ R  `    wp 1234,2,w
$ l) L6 F  I9 `2 s5 [      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 F, y8 L- B9 b: a
     & {) x  G# D; {, d0 |2 Q
    wp 1234,6,rw% S, k# {3 f( |) A$ n
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
4 x. d4 S* q- {) c$ l$ g
5 ~" Y$ }% K4 e, W+ q- ?    wp 23456,a,w,wpdata == 15 y9 i9 K0 \% f6 j' R
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
! ^2 ?8 n0 h( l  v" \9 C. Q% G
% K$ J3 j) r: E1 Y    wplist2 d. _& m5 J9 x0 r6 }3 \* C* ]
      列出所有监视点
& X* [5 Z7 K3 x
& q$ K: Y( H4 u5 d6 B) @( w    wpclear 3
# g7 ?3 b. G8 h% `1 n      删除编号3的监视点& ]9 f! r4 r( c% ?1 C

6 l3 p! p' V, K$ B, j( \* U$ d3 {. r    wpclear% B; \1 @$ Z8 ], q: G( X
      删除所有监视点& [5 `/ n5 d4 Q1 {: X
0 K; P6 c  \4 \' \$ @
      - G: j2 ^1 i1 p# t- E0 h* R' s2 y
: b2 N: [# J% E8 ]
程序断点指令: bp, bplist, bpclear
8 G, B; V8 K" `& U2 s    例子:
, I* j# k6 p$ @" m    bp 1234
2 `. |  z7 L9 F, \$ x+ G      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
# a6 N2 S( R; a; S
- ~" q0 y7 |5 p$ C1 G; _0 R5 ?1 D    bp 23456,a0 == 0 && a1 == 00 I: r! s, {* a
      在地址23456下断, 且中断条件为a0等于0以及a1等于0# |5 F' S: I% P1 q0 _. n5 j
* M% I  N4 Y! N
    bplist
* V2 i2 D1 B) @1 S& A5 {      列出所有断点
$ I6 x" h8 o6 c4 w, E( y# l' A- g( W
    bpclear 3
. x. x7 j* }5 X. o4 ]      删除编号3的断点% B0 t6 t4 K, m, E- N+ ~" t

4 ]; C: f* w. t6 ^* F* K    bpclear
* p* e7 I( ~' R2 }/ a, |& _7 t      删除所有断点
& c# l9 d/ V1 S0 ~3 X2 H0 Z1 i! h7 b
" A- e8 b) H9 }+ x) R      
3 Q1 ^& }; Z/ o8 k: z0 J7 ^      
1 ?+ |4 c1 F( ]1 w+ W跟蹤紀錄指令: trace
8 a; V; |  F" P) r0 Z    例子:1 Q2 S; B1 }5 q- |" Y/ A& F1 t
    trace 01.txt
9 }1 C4 x& u  N1 C# ~5 L    跟踪当前CPU运行的所有代码, 输出至文件01.txt
- W! n! I) E5 o$ J  k, b( K, f  R8 U0 T5 S* X. B
    trace off( v3 d- i6 K! f5 R5 F( X
    停止跟踪, 并且关闭文件
4 j, A  Y  `6 b, v8 W2 ^5 f- h
0 E5 i# O  C/ d' \" R, F( K    trace 01.txt,0
6 n4 A7 `- |% K6 r. a. m# R6 c0 A    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt: W0 `% c! g/ ?. t" d4 v

- Q: m5 T( T$ L7 c1 M9 v    trace off,0+ X4 _% l; U/ @7 z( n4 z2 P
    停止跟踪编号为0的CPU, 并且关闭文件
4 A$ V: ]* Q; X$ D2 [  z2 T. x0 W! Y, o
    trace 01.txt,0,{tracelog "A=%02X ",a}$ r% e7 ?4 ?) {8 `, H: t2 o: C: N) f0 V
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' j6 s8 d! h* Z: _    并且在每一行的前面, 写上"A=a "
, h' P  W* z. B* V3 k1 F3 M! J    "A=%02X ",a为一个C语言printf函数常用的输出格式
, a5 J+ ^8 Y; @* d! H    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
* l8 i  a' c. d( M; d    X表示为大写十六进制数
( B3 {) i4 f+ F8 t( m, d+ }. v8 B/ Q& o' `* t
* E. h. F6 N9 N0 B5 X- M
, G8 B9 I  h' I4 ~/ `4 {% |7 P
内存直接写入指令: maincpu
) m& a- x" W; T- K8 h2 i# J' [    格式为 maincpu.[][]@地址=数据
9 ^& y$ o6 `2 P5 a( R0 X( O    第一个[]:% X: |8 Q$ w7 n# k( {
    o 表示ROM地址& u& C0 `  C  T( Y7 H8 I' U
    p 表示RAM地址+ i# D  r0 P6 o. x. B2 ?3 \
) ^; ]) J% t+ j& C
    第二个[]:1 u2 f% T& M! d% P# n- g, g
    d 表示4字节8 R% {4 A5 v. U: T$ k" h
    w 表示2字节) I9 G: v3 I/ k( C/ Q
    b 表示1字节
( w  G* ^2 @4 R. Z  T, r1 C2 c; }
" g# m9 g1 K7 c7 R" U1 P    例子:
. F6 ?3 n, K. q; S4 F* }* u    maincpu.ob@1234=FF
; N( c) y. o' F) @, I, C2 V6 Z    在ROM地址1234处, 写入FF一个字节! c) w1 k' E7 F9 F
& ^5 g, q, y% r/ x" D
    maincpu.ow@1234=4E71
& o3 J; I6 X8 K) [' _% @    在ROM地址1234处, 写入4E 71两个字节4 O" D' O9 L2 h  w& U
  r9 O6 T# Z: Y: D
    maincpu.od@1234=600A4E71- A! T9 ^9 g% s% J
    在ROM地址1234处, 写入60 0A 4E 71四个字节
2 q* a0 U3 D* [, D6 n4 x" z. I& O- h3 d) z- v8 Q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
/ g  L4 T# o3 l& T/ N    : s# A6 V2 U6 @% t- {% U4 }
8 N$ i$ V( r/ T, ?3 X$ O4 H
其他:
+ P$ l1 ^) q0 T- g    dasm 输出档案名,地址,长度
$ Z! p3 S7 R0 U    输出程序的反汇编代码
* \# ]: T; o& Q$ J# `& s    例子:
! d1 [3 D3 x0 D) B+ q5 V. I* z    dasm 01.txt,0,100000
* P; k: E7 o2 x* L+ M    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 W0 t, ~- r+ k& Q8 S7 L
2 m" \% y. H: x" Q" f# @' }
    softreset
* l2 l2 }' e, L2 s8 D+ o    游戏重启, 但不重新载入ROM; _( V4 X* x1 n8 i" s  ]2 `. r0 N% E

) e. v- j0 b* U) H    hardreset  J+ L0 q; b4 @+ w& z9 O
    游戏重启, 且重新载入ROM) P. f  R6 x2 p% t- W5 P
, [% E8 A% o% W
    snap xxx.png6 _9 @: s/ r4 O
    截图为xxx.png
9 ~8 `; X7 p7 K$ O- ]
) H4 w1 |3 Q8 k4 v! R! j  ; x9 h6 b  P, x" i; J
  
3 P( V/ }/ m4 |/ @0 Y6 k" b  M6 Y  
, p& f$ K& Q1 f! v  x热键:
  ?/ [) E  D- p" j% ?* s    ~ 中断游戏
1 D# V- Y+ N# U& j7 C" @+ Z, f5 Q    F5 运行游戏
5 j8 d. o/ t3 W: Y* J$ Z. p4 I    F12 运行游戏且隐藏调试窗口4 C+ t& l% n$ H4 \' p
    F11 步入, 单步执行, 会进入子程序
$ }( [$ K( X: M6 ]. q' i1 _    F10 步过, 单步执行, 不会进入子程序
! F' i# ]5 V6 s" `' B3 w- u    Shift+F11 执行到子程序返回' \* \9 d7 u% D" B4 b
    Ctrl+M 内存浏览窗口; s& D0 B4 ~+ Y- M3 o" a
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
0 J, g8 b9 m5 P$ l8 O1 w
' e0 u) r8 o, y' H4 ^2 l6 ?{:4_94:}
; y  U/ v% f! ]/ c: t$ s
# W4 W5 ]3 U5 D' J6 y9 e' u: o

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2549 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
' M5 a0 @7 n; S# k/ L& q" Y" a. C. ?6 N7 [& W7 k9 ?
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 | 显示全部楼层
要详细些的东东8 K5 [, F1 Z6 J& E
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-3-2 20:28

Powered by Discuz!

© 2001-2026 Discuz! Team.

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