设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
1 o2 i/ S& ]5 ^2 f9 [
很快速的整理我自己常用的指令" d4 {" c: ?% p3 e$ j; Z1 A

5 ^5 D% X" j4 z) W* E2 P{:4_112:}
, [, D& U3 n! D+ i3 c9 _( ^
( [) A8 ^  h# M$ ^+ eMAME DEBUG常用指令
6 `/ t. m; k3 K# h  c( p
$ b& U. y2 ^8 R  S: v2 @9 ^$ \内存搜寻: ci, cn, cl
4 d& x. I( l" F: _' [9 k2 _1 M" B. u9 r; Z9 Z. s
    ci
7 S. b4 a& ?. E0 q    搜寻任务初始化, 每次搜寻一开始一定要输入这指令! O5 F3 X3 [2 B5 b# C: ]2 a% n

/ e/ F/ S) p, p% [    cn
+ B5 V: S  L& a2 T1 s: V2 z. ?    搜寻指令0 g, P$ B$ Y8 v- F
    例子:
1 k" \6 {" B; u: b! c    cn eq,60
4 C: s& W4 q4 n$ z" c9 s1 z* Q    搜寻目标等于60 (十六进制)6 y% v# m: e- b3 X6 s' v; n
        $ E2 n' K: K  m" M2 [
    cn eq,#96, u# p, e7 l/ u: `7 V# T0 M; B
    搜寻目标等于96 (十进制)
6 h' M" A  d7 w# f8 O+ |2 f' h" W# j4 [' K
    cn eq
, a' A& [1 S. G+ a    搜寻目标的数值没有变化
; O3 q( ]3 c' g# n- W& b$ S# q- g, G0 P# n/ R$ [
    cn ne
6 I8 E- D$ A4 i3 Z; R0 h* x7 N    搜寻目标的数值有变化# ]$ u2 v2 |. ~+ g7 I( V
        
& Z/ K  F% E2 x1 _2 l    cn +( `# p  R7 I2 T
    搜寻目标的数值增加: C4 a5 ~4 E3 `1 y& q. g8 r' c
    0 z5 C& J8 c2 v
    cn -; a& N/ G& ?- {9 h) a
    搜寻目标的数值减少
; r! t8 S+ a) W        , s' X, L! j" f; T  C# U/ I1 ?
    cn +,3
* h, X; R9 [9 P, h; u% @" u& _- }" }    搜寻目标的数值增加3 (十六进制)0 I0 x: D. A3 T

2 L+ Y3 J7 E" b1 j/ k; U& T0 Q    cl
) c9 n# F0 X0 S* X; m. N6 Z    列出所有搜寻结果
/ C1 X/ s& a4 N% b+ D$ S$ `. x% h9 Q6 A2 E  W3 n
    cl xxx.txt& O( [7 r/ z! |8 \1 B0 q( f" v1 a
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- n# Z0 A7 G; Q+ V2 b/ ?, e) Y% D: c) B9 z
   
0 b% L0 @& F( z内存监视点指令: wp, wplist, wpclear/ A+ F2 |0 C3 ?* P
    例子:
5 h2 v* K/ t1 ?1 V/ t) a, y    wp 1234,1,r6 Z4 E, u' e) J4 `! Q9 S
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 {7 u+ K, o5 P+ I

4 L8 x/ z) t9 H. Z$ _" \  q    wp 1234,2,w8 ?/ f  F, d$ p) _* p& |% D
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 [6 X% F# }9 y  h9 H
     
8 w7 Q. {+ e3 s$ k' ~9 }8 n    wp 1234,6,rw
9 V9 D6 @- @! x      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度66 S4 ?0 J7 f: L7 O% ~9 V. d
1 X% s' A4 T7 @; |4 t
    wp 23456,a,w,wpdata == 1
4 W4 {4 T9 T/ o% |" S8 u6 O, t      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
  u: X. [5 I  N+ ?6 K# X3 w& ]4 G# w' g* s, Y  R
    wplist
7 o) Y/ |* c# L( {* }) |      列出所有监视点
- j1 o1 q0 ^5 Y$ F. N* g9 c2 }# ^/ o& @- E2 ~$ L  c# |
    wpclear 3
0 a# \0 x4 _' C! l% `7 W; `      删除编号3的监视点
2 Q. V9 B; F6 w% ~' L3 n/ u( ~# O7 s( `& A
    wpclear
; x1 F! G! y& R, a. s      删除所有监视点( z0 \  w6 f# h0 }2 m
( d' ^2 T. H% y5 s" g1 M
      
1 j8 J6 i# l; S% u2 j5 F5 U4 P/ V* `
+ S$ A+ f5 e8 @% O3 [程序断点指令: bp, bplist, bpclear
0 ~# h" A( f4 s  b. I    例子:5 D" r2 M! C4 F3 t; W" a
    bp 1234, o, R6 S# K/ r% q' D0 g. Z4 F
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断+ f1 J) Q5 ^6 ?- V8 I, M+ |: j" z% g
! J0 d  c: Q5 W" d1 t/ K) ?6 k$ l
    bp 23456,a0 == 0 && a1 == 0
/ D. Z, |4 `8 I2 W# }" h4 u/ e      在地址23456下断, 且中断条件为a0等于0以及a1等于01 U  W9 `6 u( X. J) p. b/ G: o0 }2 a; O

" r( j7 i8 l' v! M4 }+ W5 I$ E    bplist
# t. j) b4 f" d  P  n# n% j      列出所有断点3 m1 _# Z2 n  y: C

& N3 [% ~  o5 b6 c  E    bpclear 3
. W3 g7 Z# M2 r      删除编号3的断点* C! ]8 X7 E1 T. C

: N- g8 V2 F3 V; M3 K5 D    bpclear4 @/ u9 J7 q; D' |2 N" M: e
      删除所有断点  N( ^9 n4 }3 d
9 p: l) u9 |& X9 G
      
" j, ?5 I4 _8 x# }& h      
/ R3 v' I5 Y3 b! ^; }; L跟蹤紀錄指令: trace
1 N5 d* l( L) f8 Q: r  o$ Z! e- f# |    例子:
; b& H4 Z+ o* S: N9 s8 w    trace 01.txt
: J0 |+ l% g. O$ a( }    跟踪当前CPU运行的所有代码, 输出至文件01.txt
- q/ _, h6 |4 _& Z# R& |1 s) i$ I5 x4 K  U) c: g# U& z
    trace off# g( f+ `2 ?, ~+ P/ w9 e, o
    停止跟踪, 并且关闭文件
2 s" ?. M* b" Z
1 P9 H; S! k0 n) }. U8 K) W    trace 01.txt,04 }) A6 u, [9 I) Z( M6 f! d
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" p2 ]6 @/ A  I1 m
+ V1 {0 l0 i$ d; w; y2 R$ M
    trace off,0+ @3 E+ h$ d' u. g- e
    停止跟踪编号为0的CPU, 并且关闭文件
. B) ?2 \+ }9 F
  ]* A2 B8 K$ R* ^! L" C, |    trace 01.txt,0,{tracelog "A=%02X ",a}. r( q0 O- ~2 `
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt % F) E% H" e6 W4 u8 o  j5 E
    并且在每一行的前面, 写上"A=a "2 A/ I; f9 M1 l4 b
    "A=%02X ",a为一个C语言printf函数常用的输出格式2 i6 q: H7 T  t, N
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- W2 R) r# W+ Z! _/ B, N: h
    X表示为大写十六进制数' L$ x+ t) S% U% ?% E# [4 x4 K0 z
& |. a6 D* I1 h- k, l( t
* L5 }2 @* a2 |: s9 q
" r1 _! ?# Y1 H5 _  i. s) U
内存直接写入指令: maincpu
, t! d( r8 q8 ~2 H6 i; ^5 m% K! v    格式为 maincpu.[][]@地址=数据
1 ~: S: C3 @3 b# J' f  n    第一个[]:; @- b4 G6 S- X
    o 表示ROM地址
$ {$ \! n' }$ [7 U    p 表示RAM地址0 J7 {2 N' X8 E$ L$ E+ X
& f% ]2 w  {. i3 a
    第二个[]:
: \: D$ Q! r' [: s  [# i, p6 s6 E% D# N    d 表示4字节
, Y0 ?/ i; e. D# q    w 表示2字节
6 k7 ]0 x+ k5 s! B6 {/ z! z  p# {    b 表示1字节0 C, ]. }/ U# w4 v( A

0 |: v; U7 D5 H3 v    例子:# |; w7 h9 E' J3 ?/ n. a
    maincpu.ob@1234=FF! A2 }: e5 B5 l) y5 Y; U
    在ROM地址1234处, 写入FF一个字节9 ~& D! P7 ?, t: I( Z- p' K. F

7 H6 C, i. L- ]" b  g    maincpu.ow@1234=4E71- w% u  Y: C: i7 T- c, L/ d
    在ROM地址1234处, 写入4E 71两个字节
& Y" f( ~, c0 n2 H7 ?4 e3 b6 D+ v( l4 P4 F. v3 q- C
    maincpu.od@1234=600A4E71
, _( C$ \+ q  }/ O  w- o; c) N5 B1 [    在ROM地址1234处, 写入60 0A 4E 71四个字节* f: x  @& T2 K/ n: j. b) R
6 r1 X/ q# n% a9 J; I
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
! ?9 m* w5 C9 x! |" M0 D" |   
3 B9 i- A- V: E; s$ N% L2 z* \9 a7 v# S  S
其他:
" z3 @# E% q4 y. f1 t) O    dasm 输出档案名,地址,长度
; c% s0 h6 L9 v& R    输出程序的反汇编代码
2 R9 n, V# O& N" G9 c+ `    例子:1 Q0 B* a' E& M" h4 T3 d/ K8 X
    dasm 01.txt,0,100000' z: @( A% U9 a; a- G
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt0 ?& b6 l8 K4 Y6 d% P

: \' ?: n9 Q+ L    softreset8 Z3 T7 ~" @; ^
    游戏重启, 但不重新载入ROM
: Z& N. R: j8 b# F4 K/ n0 s$ ~. }; e1 t! \
    hardreset
5 e8 k1 P# |- v+ U0 [; x/ T  h- |: L    游戏重启, 且重新载入ROM. e8 P9 h* c3 B, t

5 G% {+ h2 f; c) ~+ ?) \9 O    snap xxx.png  U" E# k0 m9 v0 m% }. `! U( \- H
    截图为xxx.png
. n. }: G$ k+ g' G
2 E; t: W6 I( x* R. o& a& O3 u  
2 i; q1 [6 e8 h* |( K8 O, h0 F  
* k  h7 |8 \* p. M  & W/ n0 U. x% M+ v8 j4 L2 [
热键:
2 t9 W5 G8 q5 W6 V# x2 r" W( i    ~ 中断游戏
1 @- Q2 p- @; z* B2 q  q- q0 I    F5 运行游戏! q1 l0 D# }, e; ^1 s+ i
    F12 运行游戏且隐藏调试窗口
/ `: v. J' ?6 P) W* ?$ O+ u7 o! Z) p    F11 步入, 单步执行, 会进入子程序5 B. \2 h, S5 ?- s
    F10 步过, 单步执行, 不会进入子程序
  X, k! D& A# \* h    Shift+F11 执行到子程序返回& m. T$ _' u! Q# F( G
    Ctrl+M 内存浏览窗口
" ?0 d' k) @* C3 m$ ]0 {0 ^    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# Z  n$ B$ H6 g8 Z$ E
. j1 r, o8 ~- A7 O$ ^, Y9 H{:4_94:}
& S- u; a  z0 w
% D5 {! T* s( R9 h- i

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2557 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。0 c+ W; F) c1 A$ X
4 L. ^& W. B/ S4 A
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 | 显示全部楼层
要详细些的东东
2 e- ^% G# N: `3 G& U11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-1 10:24

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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