设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
' `+ r1 T2 [' T% A0 K; r
很快速的整理我自己常用的指令
6 U) h9 p7 w4 k" z/ y4 P. _; R: k1 q% p8 P& K5 Z# C+ p% H9 u
{:4_112:}
9 K0 X; U8 j0 d9 W/ F. p. K
* m8 m! K3 Q: W+ E: X, _5 L: FMAME DEBUG常用指令1 b+ v* v9 B: d# F& [6 b# s
# s9 J8 i+ V, {+ Q6 W1 ~; s4 G
内存搜寻: ci, cn, cl4 s3 U4 M4 T. C
' d: X3 \  W6 i; E9 z
    ci. A$ w% k1 u; u/ S/ i# h' L! i
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
$ Y/ Y) O) x1 b) |( Q; k- N3 b+ p# m8 s" O
    cn
! S. X* s2 Y9 B7 n    搜寻指令& V- f1 r0 `7 Q
    例子:0 z2 @' @+ @7 T& D
    cn eq,608 r$ V8 [7 K) u5 E
    搜寻目标等于60 (十六进制)
# P1 A0 Q: H" F, ]" g        
2 n( W/ N, T! }4 z4 c    cn eq,#96
: @0 U- ?1 e9 L5 T' x; K  y    搜寻目标等于96 (十进制)
  u# h: d# y% b% Y
( K6 C0 ?6 e7 P% |7 z; a7 T8 T    cn eq
+ g% Q; h0 i) G5 Q# `/ s8 y+ }    搜寻目标的数值没有变化
# c0 h0 |/ p! T/ l$ S2 d/ W8 \: v9 w) e. Q6 k3 a
    cn ne- m& d3 Z3 S4 A. P7 \9 F, z
    搜寻目标的数值有变化
. A5 _& h) j1 y  D) d6 ~        # }! Z9 u& E1 M, b' J2 Y3 r2 y' B
    cn +  H/ b, X/ G) E6 x
    搜寻目标的数值增加
+ o- ]2 F- @  l* ^# w    ! m8 B/ E$ H* q: Q1 ]8 k7 Q
    cn -, p& h6 A+ \4 h6 r" E
    搜寻目标的数值减少
: c+ F* h) U8 z# l2 [- i+ d        
0 u  _' e2 o" ~( E    cn +,3" g8 P/ P' j. k6 K5 d
    搜寻目标的数值增加3 (十六进制)" w7 x+ U5 n- P7 |" m* Y3 L
' h# R0 D+ Y, q5 z5 H
    cl. ~7 P% \1 k+ G! a3 P) p  b
    列出所有搜寻结果
6 n9 b8 |* [; D0 b: o7 @) P# r( ], d. d0 w) ~0 d8 r
    cl xxx.txt4 s5 o: J7 L( M& L" }: |& S9 V
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式- S; Q0 j/ E, x* h9 D% J$ Z

3 `) ?2 o2 ^- z9 q4 p: Q   
/ M* e& D, R' g2 u) l$ E4 T内存监视点指令: wp, wplist, wpclear9 \( }/ D. P, _5 q
    例子:
- K' e! a& t' r7 O3 ~    wp 1234,1,r. X4 e) i2 S* W- Q
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ g4 F1 X1 B0 u4 w3 ^! S9 p
2 y/ B6 ?: J: g
    wp 1234,2,w
. C6 S/ ^7 }% {, f0 V" |0 {1 G      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 N  A: w$ [6 h6 R
     
' Y; G: J1 j3 e- V+ F# t  C    wp 1234,6,rw2 C: u/ W$ c' q6 W; h
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 G: f; w$ R6 H, L! y
" Y! D3 F- S+ D4 N; ^. z% _    wp 23456,a,w,wpdata == 1; W4 l) [% F1 Q) M: Z- K$ B4 o; G: O
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
6 T( ]) O) k! g
' f: l# u: _: r4 P" b* ]" P    wplist0 x, w) P) D. M# b6 s: [6 P% O
      列出所有监视点
- q" Q! V4 H0 k2 ?4 E
1 B! O" k3 l' c    wpclear 3
6 c$ ^& Y  N8 `) D2 ^% Y. B      删除编号3的监视点
  h) `& P1 D' Q9 G9 P
2 {- l% a" d8 n1 R; i- |; @    wpclear
' a" t. g# K( n* K4 X0 t- `      删除所有监视点* B# L0 g- Y7 U7 g1 o; q9 L
8 A7 Q# W( ?9 |$ h4 J  g; J
      ; O4 Q4 Q( }3 H1 t; W
% T+ }3 B, a3 `& [" p
程序断点指令: bp, bplist, bpclear
9 l( u1 N8 [& a" F    例子:
! D! d/ D: z, i8 @2 m    bp 12348 |$ I# v2 U' ^! s% C' J
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
' L! W6 i& T; {2 B( @% M% u  O5 h* F+ G  H- Z/ ?$ U$ n8 @! H6 x
    bp 23456,a0 == 0 && a1 == 0
! ~6 f$ \) S% g6 z$ L: {0 H      在地址23456下断, 且中断条件为a0等于0以及a1等于0; a6 n+ R) V( K5 p0 V, ~* n

6 y, M. j7 c' \: m    bplist
) L* u; t) f) d. f5 o1 D      列出所有断点' A8 p, Q8 K0 Y- c  {
* G  t, D+ m0 C  u2 p1 l8 V+ W* ^+ S
    bpclear 3
# x3 `2 d9 y+ ]      删除编号3的断点
+ L- O5 _/ |  n, x' s& Q  l
4 `2 a! |) U0 K: D% A# Q& n1 U6 `    bpclear
' }/ v7 m7 R4 ^% T: z, K! e+ F      删除所有断点
+ |- B  `( _" v( y' j# a; u+ t; N& i/ Y" i8 d, q( Q% v" v
      
3 k* H% c; K8 r0 C6 ~7 I      
& N6 c; j' D8 T0 ]& q2 {# s跟蹤紀錄指令: trace$ `: Y" q4 p2 a# z  }6 @: }
    例子:
) |. d1 L) |" e" ]3 g+ ^$ @    trace 01.txt9 ]  X  X5 H' U
    跟踪当前CPU运行的所有代码, 输出至文件01.txt' s) N" R# f( e3 B- \; R/ z
, C+ p+ k) }4 D
    trace off
7 v) b1 y) q& c2 F+ h    停止跟踪, 并且关闭文件
5 s/ X; M0 ^7 y7 Z: q: h5 Z- S) [5 Q& ?" f( N+ [$ j0 i6 n
    trace 01.txt,0) F& G4 ]$ A+ J3 K# E
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) q9 |0 W/ ?& I7 A1 U" d
. ^& _6 L" m' x# I    trace off,0
1 i& ~# I; S/ }4 ^* p- a" m    停止跟踪编号为0的CPU, 并且关闭文件
: k* z3 w  e' B2 u% e8 h  c" Y3 U% O* u2 D* Y3 E  O7 Z* l' h8 o! x, v* D
    trace 01.txt,0,{tracelog "A=%02X ",a}6 P8 C0 a1 x# I+ H
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 O3 a  h: J7 v+ g& v  ]
    并且在每一行的前面, 写上"A=a "1 o7 m; L7 M& }+ {
    "A=%02X ",a为一个C语言printf函数常用的输出格式
9 e3 V! x: }8 `  Y' y6 ]    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
  Q( z7 j7 r7 c' A# Z- l8 D    X表示为大写十六进制数
$ w" u$ X0 N5 m8 V! I: e2 K' Y5 L/ o' E1 [- ^% d  [
3 S% L( y/ @. a7 C3 X, r+ C3 Z
# k# H$ w# }; E$ M" {
内存直接写入指令: maincpu
4 S+ }2 l% F0 I0 Q. y    格式为 maincpu.[][]@地址=数据
& p/ A1 l9 f; z) N, L    第一个[]:; V; `' d4 M3 V6 L  X8 a4 G8 I  K, K) M
    o 表示ROM地址
7 ~6 X/ w; F6 W" N    p 表示RAM地址
3 Q$ u% e/ `+ `# y# I  Z: I0 u' a1 H4 W: m, U( \
    第二个[]:
! \0 e5 i3 {- ]  Q9 U2 m; x0 P4 z    d 表示4字节9 @' H, F0 w7 c. F! W- p( u
    w 表示2字节# M6 M# U3 U2 i' I0 l+ i
    b 表示1字节& E- }* I: L' Q4 k" Z  S8 f/ d6 ]' B

0 O* h: ^: T* V2 q4 Q; Q    例子:
) U+ C) D( M! `    maincpu.ob@1234=FF
5 Y( t: x9 G2 L    在ROM地址1234处, 写入FF一个字节
9 ~, ^: r! D1 s1 O, S
+ v' z: [# \3 j/ }3 f- n    maincpu.ow@1234=4E71! _0 m  B- e- G; U, q
    在ROM地址1234处, 写入4E 71两个字节: i7 D3 s: n! B0 S& W: L
0 f# r' {  G0 {4 `5 i" e6 T
    maincpu.od@1234=600A4E715 a* W+ u2 g9 n/ v
    在ROM地址1234处, 写入60 0A 4E 71四个字节
! s8 M& U* K/ }: W
" p* n8 ~: H, k  z. U  X    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
0 D0 F# g9 l7 S' r; o; }* L$ |   
, a( d0 g4 S) m) d: z! G8 Y' p5 O: c" O# \- \1 ?& N9 {; _5 J7 q
其他:
% O8 b7 l4 W0 t& @) Q    dasm 输出档案名,地址,长度* b" e& n& Y/ {9 y+ G
    输出程序的反汇编代码" Q7 y2 R" ~3 \( x1 }
    例子:& s9 K2 X5 ?" B' ^# D
    dasm 01.txt,0,1000009 j0 ~+ X. Y& d) Y. m
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 F+ \7 F& W5 r+ }
+ E; \6 {1 P+ q# Q0 b
    softreset8 a% F2 y8 z4 G5 n/ _; L4 k* z
    游戏重启, 但不重新载入ROM/ D3 W' W$ ~% o; h; Z

0 e1 y: j3 M; h1 w7 y    hardreset. k4 h  F9 C5 M  p  C% e, o/ f
    游戏重启, 且重新载入ROM
2 l( p  P; L0 E9 Q  A5 s- Z8 U$ h
    snap xxx.png! e) I, P  z* e4 A
    截图为xxx.png* K1 X8 u; e7 p# y0 ]1 X0 b9 }# t* H
6 Z; P) ]3 Q# q8 o
  # J) w- Q& h# x* B; C
  
" w) @4 l& g$ k* ~- |  1 f& X( P) `8 }1 ~7 j9 m: I
热键:
3 ?$ P. D5 I+ B    ~ 中断游戏
6 q, X0 [- L% ~" r    F5 运行游戏$ |/ \  W- u$ R* b- R+ u
    F12 运行游戏且隐藏调试窗口. X$ v  P# m' S* W% s
    F11 步入, 单步执行, 会进入子程序
' ~+ G7 ?6 D" d( ]6 H+ O    F10 步过, 单步执行, 不会进入子程序
6 f! O$ m! L) p$ g. P    Shift+F11 执行到子程序返回, U& D( M2 U0 O( s4 q
    Ctrl+M 内存浏览窗口( G, G7 g' |5 \$ b5 |
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. @% N, a" a, ^* c
: J+ }6 a# O* J$ v{:4_94:}
: c+ `  i& ]" [4 Q+ j( n: d( G' I0 i9 g3 p. S0 [* ^' p! M

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2551 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。2 y$ a% t3 _$ k6 G; P3 @5 ~
; ]3 i$ d  m* t
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 | 显示全部楼层
要详细些的东东. e: B- O2 Q. @, E* J
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-31 16:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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