设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
* O+ ^7 o1 y1 h+ w5 n! |# ~
很快速的整理我自己常用的指令
5 P$ q( O# s0 P9 Y% [* `1 R) Q
2 r+ I6 F: [& q8 H7 X( Q" p{:4_112:}
1 F' g) z, @. b0 H& [; H# a" [, y+ t2 `
MAME DEBUG常用指令
# e; V# o  C' x9 y7 M
: V$ H5 _: `1 L4 B. G+ R1 A内存搜寻: ci, cn, cl
" n8 v, l* X+ j6 S( s. _3 j2 v3 t8 a6 I
    ci
2 i% U; p9 n+ [- B+ \  [    搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 S% t" S& T; P6 M
! P, o, \3 @; _' C$ T  [3 U
    cn! B$ i& k* \8 B) @1 N' |) d* I- \
    搜寻指令
! G( \( _) @- M- q! S- Y9 ^& F    例子:( j& ~- W: }, y( V' S& U  k6 _# ~
    cn eq,60
: r- k+ l% E7 a4 C0 h* ^( r( e    搜寻目标等于60 (十六进制)
: _0 t/ J, Z0 {' E' j7 Y        ! n) h$ E8 i* V& T5 Y( \$ o
    cn eq,#96
1 O+ \/ @9 U% a8 N6 Y2 d0 N% e    搜寻目标等于96 (十进制)$ n6 H# ^2 H1 `  s

, i: w8 E8 R' t4 h1 L- t    cn eq% J; X: b( |2 C% x+ T+ o% Z3 L: W
    搜寻目标的数值没有变化$ {7 Y: g6 \4 Z* z

. V( c% z- w* n1 K    cn ne
9 i; q& X& C$ |6 c( s: h    搜寻目标的数值有变化0 y( g* W2 Y/ B' @/ E9 {
        - `) t" B* v- F% T7 n! B( w4 \
    cn +# c5 G9 n# G! N. }
    搜寻目标的数值增加" `$ t& ^, y' S2 R$ W
   
6 [0 ~7 Q" ?% o, I: @    cn -3 O+ C9 j. W. l" f1 B
    搜寻目标的数值减少
) S- q2 \' w) R1 _* `1 K' b  v( s        " W. l( q- L% Z3 R
    cn +,3
. \8 V3 Z' e  Q4 q* S& z' H, k! M! N3 d    搜寻目标的数值增加3 (十六进制)2 U' F5 s5 j7 g5 \$ V5 ^+ o& L
. N( a5 T/ p/ _2 [
    cl8 x4 P6 j+ K$ f/ ?* Z: t
    列出所有搜寻结果
* D; e! e) r- l6 g6 X8 C( o0 L1 x$ j7 M
    cl xxx.txt
, i6 U/ O6 a6 v. M" N( D    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式, H( n$ j4 v, q% F7 x

+ M! p$ m& o$ O# `9 I' F, I   
* v  r' ]0 m6 y" B& u内存监视点指令: wp, wplist, wpclear& `' ]& e0 t  r
    例子:
% ~  E4 O9 [* W( P5 U/ ~9 h    wp 1234,1,r( t9 j2 F  x; u
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: d6 T& m0 J) h
8 @% e" o* f- f9 p- j0 a5 M    wp 1234,2,w
1 @4 `+ U! _0 F2 i5 e5 I      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2! a- }& f& i  B5 `) r
     
7 P- n% H& c& s0 E7 o( ~    wp 1234,6,rw9 z2 J1 n  A+ O2 h: G6 U1 j0 N
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" ^! {1 T. t) ?1 _, y; {3 i/ M% {( [
* ~% c4 j$ N0 m# v7 h# f# m6 e
    wp 23456,a,w,wpdata == 1
' T9 M: a( O$ |/ c6 G" x      在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 r; G0 J0 E; a" q  F( L

2 j/ }+ O+ A4 n    wplist
3 T8 ^4 P7 R1 o9 p9 t+ f2 _% A      列出所有监视点
' A" p, R  h1 J. A1 x, J- E0 t$ f' d& |( a& {& q) S
    wpclear 3
8 L. Q' a- |$ a0 p3 p      删除编号3的监视点( K4 R5 G& f. u9 s+ R
8 d2 @  O4 f  w/ z
    wpclear, Y7 O7 ]1 Q$ P; u
      删除所有监视点
# {- o& }5 U4 o2 U4 t& N6 d: T0 Y" e3 z
      
3 b) {1 N0 S+ f  T& q" o
: P& n' b  l: X$ w程序断点指令: bp, bplist, bpclear9 U! X0 `3 x% Q$ \, X7 W
    例子:+ g3 g' w5 o/ r6 f* H/ I
    bp 1234
! j" \7 B4 M+ O  O+ v5 g      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断# g& i+ l# Y& u  s- o
0 B: {# D8 r& T2 _/ Q( s6 K
    bp 23456,a0 == 0 && a1 == 0
& F: q2 a& |+ s# a      在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 V2 w7 w4 k2 w  Z" _8 W3 O( [# z' n; c/ Q( b' |
    bplist! x3 M  P% x  E" r( z7 F
      列出所有断点
' q! |1 ]1 @& J; J+ V" y, P1 B' F: b/ U0 _! h
    bpclear 37 k8 y) m, X, ^+ h
      删除编号3的断点
; Z7 i; s8 F# j* U* `+ j  c3 T% m: K* U* C1 R- ]$ B
    bpclear1 J- I) {  @# q; {2 V0 `
      删除所有断点
% j. o  u' L- n3 o1 N* e9 d, d  \3 m6 L) y) K, q. k3 |
      
& ~1 z8 g6 W( }* d) q: V* l. D/ f        q$ h( A$ Z' i4 A, J% p3 V# F
跟蹤紀錄指令: trace
5 ]" n1 k9 a' V" C" i) _8 r    例子:
4 b( Q* Q! O) D6 p5 p( W2 p    trace 01.txt
- V" @) E+ J: p    跟踪当前CPU运行的所有代码, 输出至文件01.txt7 a3 a+ w8 H6 w9 |# J4 K, s' P
* h( n3 ^% B- h& p* r& Z8 J, @
    trace off
( m% Q! e) s, J% a! g    停止跟踪, 并且关闭文件
3 z8 t/ c( V( Q( K) _. w9 w; z( r8 [( g
    trace 01.txt,0) `1 Z1 j. v1 }
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( ~9 _7 G0 G) ~! F$ E5 |) M! q6 t
3 b% d, Z4 Z$ S/ x/ ^    trace off,0
, ^/ E" {) ^/ _0 B    停止跟踪编号为0的CPU, 并且关闭文件! K+ I# ~, x" U$ J9 ]: n  n% e
2 \! m5 j/ ^; y* t, d  S
    trace 01.txt,0,{tracelog "A=%02X ",a}
! \, C3 |  k/ Q0 e# E! h    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt + s5 }* X' j2 p( j8 E9 |
    并且在每一行的前面, 写上"A=a "
6 n' E$ o; p5 b6 {    "A=%02X ",a为一个C语言printf函数常用的输出格式
$ N* Y7 J& W% M0 R5 ]    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入; M$ a6 j5 C8 r1 z$ `) A
    X表示为大写十六进制数1 B$ D) S8 ]) }5 s) e+ p4 l% ~7 ?
- z( c- d5 r5 e% b- W- s& Z. L7 H

" i( t+ `7 s$ G0 B7 j" f: D# b+ I1 V) Q! @
内存直接写入指令: maincpu* i8 Q6 u' C! H8 B. c
    格式为 maincpu.[][]@地址=数据
9 E' O$ @7 G% z: a) j3 j    第一个[]:: p3 Q1 }* a' w+ f% g- Q1 P
    o 表示ROM地址" o, H, B4 @# C
    p 表示RAM地址
: x' C0 U8 ]1 x7 ?, B, I( Y/ H+ i( H3 X5 o# m2 V: I. [
    第二个[]:
# d; z3 l  c* C0 d2 D: i& g2 r    d 表示4字节
2 ]8 X6 d! Y) `" g; n# L    w 表示2字节$ b2 d: V  l5 `: \7 M0 I
    b 表示1字节( T* I; `6 f6 |2 o; m1 _

2 U" o* H3 v. w7 S; r3 u0 c    例子:
0 W1 s/ |/ K$ o! V: W    maincpu.ob@1234=FF9 ~6 ^" O) i8 j2 M' L5 W( }2 D
    在ROM地址1234处, 写入FF一个字节! _; V( e3 d* ~1 L
$ e, ^. S3 M/ a/ u
    maincpu.ow@1234=4E71
, Z+ w/ h9 ^1 z. f* X    在ROM地址1234处, 写入4E 71两个字节
+ M; L7 h" \" M" o* i1 D  J( C+ G* x+ E' t: s2 [7 {- p
    maincpu.od@1234=600A4E712 x0 D  M7 q8 n8 `9 J- G: p
    在ROM地址1234处, 写入60 0A 4E 71四个字节
% v9 B' ?: X% u, }( a; J6 r6 ?2 B' ~+ w7 E0 a+ _3 O
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
  L7 i# `1 w  V4 N+ k2 W    ' [6 `. s, `, O+ i# ?. J/ o& M# h
$ J( O1 z% F/ t- y9 g5 b
其他:
7 ~; K1 n: f6 e    dasm 输出档案名,地址,长度4 Q' }0 o8 E+ ?: r
    输出程序的反汇编代码
3 @5 C% C7 V1 e2 T% o    例子:+ s0 L2 c" {+ i* U; P1 {& P
    dasm 01.txt,0,100000" s9 d4 `, n' y) e  v9 j3 \# ]
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ q% Q$ N  o: |2 b3 Y! w; E' \% a

# `0 ^# F- M4 s7 W8 F    softreset  r- }. a, o- |2 _. Y
    游戏重启, 但不重新载入ROM3 h9 {3 f2 Y! w1 t, B

1 f5 V9 A2 R  j  x/ m4 a* r    hardreset  v; s! U, q' s1 T/ T# H, ~
    游戏重启, 且重新载入ROM
. c" {8 [5 q3 g& w$ X2 P" E
( {! p7 e1 U  U; u    snap xxx.png
2 E# K4 a8 i( t  E7 e; D. _) P! J    截图为xxx.png" e; }7 j" l+ N

! [) z3 d; R5 @' d7 b3 ?9 G* m  
" t+ @6 K1 k) ~* p  ( Q" K6 b2 e9 O- M
  
# W* U3 p8 v, n/ P# r$ q6 |% T# x' c热键:
! n3 F/ t2 t' E* Y( H* r" n% I    ~ 中断游戏
) R! k" E! L; a; V+ F6 J    F5 运行游戏/ `3 S& x& [8 d0 B
    F12 运行游戏且隐藏调试窗口0 ^+ `7 L8 a& s- Y0 [2 E
    F11 步入, 单步执行, 会进入子程序
4 `( l2 I3 g; e1 B$ @    F10 步过, 单步执行, 不会进入子程序/ `. K, Q/ X$ I2 x5 T3 w  B6 d+ ]3 x
    Shift+F11 执行到子程序返回
$ I( J- k% b- n% ^' E" O    Ctrl+M 内存浏览窗口6 E6 ~7 o1 `* ?. g
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* y$ C* K+ e6 O2 [$ l) ~. c) V: b9 ~3 S7 a
{:4_94:} $ H  p0 I3 G& c- |* F4 E

: H) o6 \' k& q

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
; s; V6 \9 j* }2 E. X% W6 H" b9 t2 j/ q" C3 Q2 J/ }0 T$ W
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 | 显示全部楼层
要详细些的东东
6 J' q# x/ J. ~: I& U11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-7 03:04

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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