设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
2 c* O+ c# n! ?% t2 U& Q3 y
很快速的整理我自己常用的指令
. o& {+ b7 ?& h  `5 k8 B, W% m
* g( E2 b9 F3 h, g* ^% t{:4_112:}
! ]$ h* F8 e5 t3 H+ e9 c( @) z2 @5 A+ w& @" N6 I% |6 O. z
MAME DEBUG常用指令
5 l  |6 Z% M3 C3 n4 B/ J$ g2 P# P% |7 ]/ w5 ]
内存搜寻: ci, cn, cl
+ c# I  T7 ?% V9 l" ?2 J% s- \. C2 R
  Q8 T& p3 p/ N    ci
" Z7 |* L! w8 s, a    搜寻任务初始化, 每次搜寻一开始一定要输入这指令$ H: B  [/ Q% y/ w, }+ T: i& l
/ d8 T3 Y1 X3 O' a& ]
    cn
! Y4 b& B" j2 w% @: K5 t& N+ n. ^7 q' V% g    搜寻指令( n% l" r- r, U. [
    例子:  V7 R& o4 k9 e# o/ g5 r* B4 G
    cn eq,60% X4 \/ e  `! E0 C
    搜寻目标等于60 (十六进制)$ _( x9 u; |7 x) r; i8 u- Q: ?" a
        
5 O* c4 M8 y3 ]# `, n    cn eq,#96# a4 T6 c  P8 C/ B5 |2 C
    搜寻目标等于96 (十进制)' V8 Z7 o7 D1 f, X6 j$ x) K
5 e1 L* T5 K  x2 J
    cn eq
  Z, P, Z- r6 u% L" q    搜寻目标的数值没有变化
2 I1 k% W- {5 @  r0 w
& a! @! X1 @% M6 N! G* J% g1 b% e    cn ne( G/ d- Y# N' Y- F
    搜寻目标的数值有变化9 p% J% m0 k6 G, X; l
        
' x  r. U1 A7 ?: u    cn +  E7 @2 q& S" q6 A: ~$ D$ c
    搜寻目标的数值增加
9 I. a, i# y6 e/ Z    ; Z' K2 |! g/ T9 ]7 n! l
    cn -. O3 ]" V& r4 t# Q) q
    搜寻目标的数值减少
' r$ D. r/ @' g$ w5 i! ?& e/ {. n        
+ r% n3 r) u/ W& V. Z( {. t" n    cn +,3
/ \. T$ P1 s' F9 P* A; @7 L    搜寻目标的数值增加3 (十六进制)
9 q4 O, b7 ?$ ?" [7 k! O' V* x# _6 Q7 y! [7 R
    cl4 O, m9 N% b( |0 v
    列出所有搜寻结果3 R& s' X' }7 t3 k+ h! O
' O/ u/ \5 J1 X4 j: y2 W. V
    cl xxx.txt$ j: V( J1 [! Q' ]# E1 M
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* Y( x+ q, [# W
; t% r) U* Y# c: j   
- r9 K3 C) |* a: t2 c! Y- B内存监视点指令: wp, wplist, wpclear8 `# t- e, p4 p
    例子:# ]# {7 l- R3 Y' M
    wp 1234,1,r+ \- x9 h' ?; l' V+ }- b2 r8 L% [
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! C# H- r1 J$ q6 W5 {% t# a
+ A) ^  r( x( M) j
    wp 1234,2,w
' Y& P9 S5 x! r9 f& f4 C8 n      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" ]" j  e. B1 x. j" k1 O+ w
     ) I" u7 r* A" B! l( ^$ K8 a
    wp 1234,6,rw" \7 t  C$ r) w6 f# c: J# e  G9 S: U
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& t1 `) r) z; P) u& u2 _* u. D
    wp 23456,a,w,wpdata == 10 F: T  u% h* H9 G. |
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 \! K+ F' h2 I3 L4 w3 n1 ?; [9 k) C
    wplist
! W+ r' [4 D6 A  m/ |$ d5 B      列出所有监视点
) ]" v$ Y. Q% T' W7 d" d, R: G3 D' B0 c4 `" Y. j. M9 q
    wpclear 3! o, F) o- d, A8 ?- E  C$ {
      删除编号3的监视点
- G4 }( D& s- ]7 u2 a8 t  q1 ~% k" W6 |. S3 F$ v( \
    wpclear/ D0 j3 s/ d/ t2 Q  G3 q9 @. R# n
      删除所有监视点
4 k: i+ i8 u$ J( M2 S0 E5 Z+ U" i! z; V- `. ~, F
      7 `8 q+ Y1 e4 Y( @' W8 N2 o/ V& s

! n7 ?) w& K( t7 r" L4 T  W; ]; q程序断点指令: bp, bplist, bpclear
, F$ j* g' Q$ N0 e, b- Q! L1 Z    例子:0 s8 N2 Q1 h4 h5 K0 h$ K
    bp 1234
8 _6 K4 J7 O3 d( l5 t0 Y      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 _+ q6 ^$ D7 ~2 e- t$ K- U+ T

( g) v+ s& ?& N" G2 E2 Y, q    bp 23456,a0 == 0 && a1 == 0) u0 E* G5 ^) P9 Q+ }
      在地址23456下断, 且中断条件为a0等于0以及a1等于0  @; X5 X& U# ~4 r8 J

' b$ i4 o, T2 k- l4 [    bplist3 l; R4 [5 g+ L3 ~( i8 J. n: e
      列出所有断点( _+ t6 ]7 S' e6 ~

) P, M* o" t, f$ ]: ^' p1 ~( [    bpclear 3
2 ]) F, c8 ~! h1 x      删除编号3的断点) |- l- ]1 c9 c$ G; |' A( |
, Z2 s' w5 k2 e! p/ A
    bpclear
+ O, j) `+ I3 L" ]! \% K      删除所有断点
6 ^; `. ~  J/ b+ }% u6 g6 B' R5 H# m' J& _/ o# V* ]
      : I$ U: l4 a, E+ o* k
      " ?: n$ c6 g2 L
跟蹤紀錄指令: trace
4 W, M5 X* A  ^    例子:
! ~9 e+ K/ e5 R; g' X2 m    trace 01.txt
. \8 o; c0 j+ v* {& ^* K% Q    跟踪当前CPU运行的所有代码, 输出至文件01.txt3 W1 ^: x8 [& Y/ n
; M; k+ q0 z# k* l+ x1 o7 }
    trace off% d  F; }$ G5 A+ s0 Q
    停止跟踪, 并且关闭文件
5 D7 K; o+ C+ q# v4 `
, r$ o3 n, F  O2 t    trace 01.txt,0
: L; u: A, K' N" |: d5 A    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 x5 d  }+ \5 x% d6 @

, ^5 X. r8 n  e    trace off,00 x* o; C8 e5 g, o* _* u
    停止跟踪编号为0的CPU, 并且关闭文件
+ O2 v4 I+ C% Q, K3 ^$ g
! G4 p2 O1 a$ b. [* i    trace 01.txt,0,{tracelog "A=%02X ",a}9 \& T: p9 ]2 I
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; @2 b7 R. A5 m# Q  w% n3 ^/ g    并且在每一行的前面, 写上"A=a "
" z1 r6 ~9 Q+ Z1 Y# P  l2 Q    "A=%02X ",a为一个C语言printf函数常用的输出格式3 ], U4 u1 A! T1 p/ s/ C
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
6 h+ E8 Z, X- u& @# O0 `4 G    X表示为大写十六进制数. \9 \0 p6 i# \+ Y( F
* u  A6 Z1 h, S' }2 {" U- n: A0 i

: ?$ y9 \- Z1 y4 h3 Z( o  s% B+ N  J% k" G% z  F7 ~1 h; H+ F! g
内存直接写入指令: maincpu
5 Q( R( m+ P- O+ P- X: J    格式为 maincpu.[][]@地址=数据+ n( [! D9 z+ K+ y6 z4 U0 i2 y
    第一个[]:
- v; t" R$ f5 s& i: B    o 表示ROM地址  x5 @3 `% y& A) `7 P4 w+ G
    p 表示RAM地址
* o- @$ i' V8 f1 a' A; G% c
9 u4 M1 K# n- _' Q/ _) _2 @- F7 j    第二个[]:6 g( Q0 X& H* u9 H
    d 表示4字节9 T: _% ^, y) T/ w. h/ a9 d. D/ B
    w 表示2字节1 ~. o1 p  B" D. d
    b 表示1字节
) c# i5 ?7 O7 W$ [1 h
# A. @9 R2 K* q" \5 q7 U9 [    例子:
) {: N9 P- ?7 O$ B2 E    maincpu.ob@1234=FF
* x- c3 u0 Q/ L0 {    在ROM地址1234处, 写入FF一个字节
4 m1 K8 x, o) l9 d% R4 A9 U9 @& |9 f5 T7 v* w
    maincpu.ow@1234=4E71
% q, |; r5 p3 ^' E7 {    在ROM地址1234处, 写入4E 71两个字节
6 u' ?4 |" L0 \7 ^; t' A; e3 ~  m% N* v' h  {* C9 {/ T! Q
    maincpu.od@1234=600A4E71
$ }  Y" Z! N% E# e) E6 Y    在ROM地址1234处, 写入60 0A 4E 71四个字节6 U# w$ p3 ?7 L, C

( k; k/ ?, d  C! o' e; S2 G" {    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# D8 t: }2 M8 z6 [( M) p: M" @
    8 b- R8 p4 G# a. \7 X. R& G

' z, |  E& S8 G其他:
& y2 g" d& e: X' S1 W& y- ~    dasm 输出档案名,地址,长度
4 a) P5 a$ `- P+ W& E) Y    输出程序的反汇编代码: L7 Z$ b2 c9 B2 G3 }2 T: B
    例子:5 m6 ?- w# n- l; f, P
    dasm 01.txt,0,100000* I4 v  M4 ^; C. j, V5 }7 s6 d
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 u# ]. V! o! O( _8 K. y. [9 Z' H# Y% W; ^7 r1 ]8 ~
    softreset' o3 C* f* h, {9 ~4 \. c6 U5 {
    游戏重启, 但不重新载入ROM9 D) c1 C  A4 H  s; o" ?! \9 T

4 |# e/ v) P5 B    hardreset
: Y) h4 g( F$ w- ?  O    游戏重启, 且重新载入ROM
2 o( w) n0 z& b8 \9 u" S
" G* ^5 }9 z' ~, A    snap xxx.png( ^' o' K& Y6 `( S/ _: z) Q
    截图为xxx.png* u3 a0 q: \4 m; Z: J* d" u
, T: N8 p; \2 _/ V7 V& n) I
  ) F* c( N# ~& {( d/ Q
  ' W$ a, ~9 A/ J+ b
  
6 u6 r8 K# u& W9 T- `热键:+ S1 f5 O4 x, s9 s* C
    ~ 中断游戏
- t* {2 y: `6 n    F5 运行游戏
  ^2 W3 W! w# ?  {/ ?6 C) p    F12 运行游戏且隐藏调试窗口1 `# V; H. t; @* B
    F11 步入, 单步执行, 会进入子程序' ]1 f+ p, H7 v; y
    F10 步过, 单步执行, 不会进入子程序8 T! r% I% g, s! P5 A! W
    Shift+F11 执行到子程序返回- Z4 A* Q6 L! [* Q" a
    Ctrl+M 内存浏览窗口# r1 E# y8 H' K( u1 ?% K
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" v# E6 M3 n+ Y
# f7 W* W" B7 L- \+ ?2 |{:4_94:} * T( a) E8 K. s% ?) t8 I

2 S" y- A& n) j% h

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
" l, M3 B( c2 X% z( ]' c. _  ^; e  v4 M/ G: F4 G
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 | 显示全部楼层
要详细些的东东+ P7 _, ^& Q/ h; q5 B- y
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-6 14:16

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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