EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

- B) E4 }: N: O6 [. U- f& ~) G很快速的整理我自己常用的指令. s  l1 f1 [, X3 m- n" G% G
9 ~1 h# L- j/ s  |' m
{:4_112:}
% S/ |7 P7 P+ K$ K- J# |( n1 ?' y* P4 ]% x
MAME DEBUG常用指令& r, w7 C+ r8 s

; Z% l: g7 i$ f; P2 x9 D内存搜寻: ci, cn, cl. h$ U$ j( f6 \/ s9 S0 l
( I1 U$ i* X4 I( j8 w* v+ |/ D
    ci
. S. v) C- c0 U0 \7 u* M    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
9 S& a  z8 p+ t) |5 T! q# e# m
  ~. @. s2 ~) H. i3 P# t# B    cn$ G6 C( u* A& F& L
    搜寻指令
6 h5 G& ?2 D) Q8 F- f) ]    例子:
: _1 G- \1 N. ~7 U9 Y6 B* \# ?    cn eq,60! i+ R5 B  q6 H9 Y% D
    搜寻目标等于60 (十六进制)+ G7 q: v* m/ G5 k
        ' w8 N2 q3 M7 Y) P3 c$ D
    cn eq,#96
* ]+ d7 d  r. _& u( h    搜寻目标等于96 (十进制)
: d5 ?- u; \' E: e! U
& P9 H" ?' Y% b# V    cn eq! _( B; y# M0 `- o# a
    搜寻目标的数值没有变化* w( [7 D, C* t6 e; @' X

9 F) u* l; _3 @; ^. ~8 @: ]$ I    cn ne
! H7 o: D" y. t  D    搜寻目标的数值有变化8 |) X2 o" G& `1 s
          ]& ~$ _1 e5 p
    cn +0 t9 o! c/ c+ l6 q( J% {
    搜寻目标的数值增加
! J& L4 s, o6 r3 @- |; l- Q; ?1 ^6 Z    % K  ?& S7 }) z7 e
    cn -& Z5 t/ q+ Z+ h& B
    搜寻目标的数值减少2 d3 V2 c" G3 W5 d, i% l% |
        
) ]/ S3 Y0 j$ Y$ I! b    cn +,3! y. C- |/ e8 B, U5 }
    搜寻目标的数值增加3 (十六进制)2 O# I$ O& N- Q: w; U
  H  ]) V# F) a- p% m  N! ~
    cl
% [4 g* X9 `+ D) H, E, S& G7 ~# R    列出所有搜寻结果
4 i/ V8 @9 J4 \) T' p( Q; |9 P7 R0 s" J
    cl xxx.txt7 ?* K, O) J1 f, g5 h
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" ?! t% h5 _0 J/ M- k. ]) Y8 s+ \, o
   
9 ~5 f" L6 V; i& R5 I- r. O+ t  ?内存监视点指令: wp, wplist, wpclear' D2 ^9 M% Q8 n: H3 m& j& f) V/ d; R" \6 [
    例子:: _0 i3 {, y: {" C  D6 d
    wp 1234,1,r
4 Q, l! q! W: w+ h( c, U* q      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 C8 t; i$ A1 W8 O/ B7 x2 w9 p, o/ e7 d/ g
    wp 1234,2,w# w+ x/ a' a% `: D1 K: C, |. a, x
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2- w: T* K1 u9 Q  K/ t- f: `
     
4 m8 g) o" d3 Y" k- a    wp 1234,6,rw
8 I4 Y( a& b% ?- z+ O      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6  V, ], Y7 b1 [! j

: v* |) {8 T  [# w/ a! Q4 e9 T    wp 23456,a,w,wpdata == 1
" k6 q5 k& j: o: |6 V: n0 Y# L      在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 q" t2 p( z( Y

" h+ h0 `* _8 Y2 f5 {, H    wplist/ f4 J) [3 W3 T$ ^
      列出所有监视点) o) D. y8 z3 w, M) \) [* X

8 ]: A. J, y- O1 Q  B    wpclear 36 Z' s2 W9 C, W! r- H
      删除编号3的监视点
, t2 h% S) Y! A0 E/ C
0 g& D! Q# s! y" v  s    wpclear
: U6 b2 v9 E0 W  A: |: w      删除所有监视点
, c& q$ X6 _- s5 `
# O1 Z9 m2 p, l1 {      
1 Q/ p) k5 U, S. E, y
! m7 d2 l+ h$ H2 |+ Y8 A8 A程序断点指令: bp, bplist, bpclear
1 A0 G* w, y$ z    例子:
6 A! {/ I: I' X9 s    bp 1234
- {0 x! g4 o8 O+ F      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断1 y5 j. ]5 s; c/ c* L

1 }6 U. W0 v4 r. n: \6 N    bp 23456,a0 == 0 && a1 == 0' B2 r( m2 w1 [2 g4 C2 m
      在地址23456下断, 且中断条件为a0等于0以及a1等于0& v  _2 W! W2 i; Q8 H! @+ A

1 [) U0 |  n. p, m# h; D; n    bplist# W# @2 f" t+ p' E' D, n, k% k
      列出所有断点
" r* K! u1 @% w. @6 H3 `5 l) @- p$ H0 O& m2 G# J' Q( H6 @7 s: O3 g
    bpclear 3
3 z! D6 x7 x' _; |" P1 O8 e      删除编号3的断点
% g3 |+ X0 r5 |8 Z# s$ R9 e& m! Y2 o% N0 @4 l' D& j
    bpclear8 E: J' P5 R: E9 f# `
      删除所有断点
0 I; z: Q1 J  g) U# T- P+ c  Z' h; H1 c, j3 M
      0 u& A9 F4 l- G: P$ _5 Y+ {! _8 @
      * n+ n3 U/ O5 T
跟蹤紀錄指令: trace
/ q$ `5 H8 e! K* l    例子:
, r6 G% K1 v( m" u( D    trace 01.txt2 `& W+ H% D7 v: O
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ p* L0 a/ A+ ~$ t  L# }7 u- j3 j# @' h2 U6 t% P
    trace off6 |: G4 L5 Z( C: j, D3 f) c: g; d
    停止跟踪, 并且关闭文件# N1 T5 x6 ^/ V# {, @. ~

! O4 t8 C! p7 i# T2 P0 P% |    trace 01.txt,04 \$ l- j8 |/ {
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 U1 r0 o" a4 i& x; i8 O) V- q5 x$ b- E% v7 f- G5 M& m
    trace off,0
' N% B* G2 A$ p) H( I    停止跟踪编号为0的CPU, 并且关闭文件
8 j0 j7 B0 x/ U) l5 C" V/ f2 u5 `8 T/ V# k9 [, g
    trace 01.txt,0,{tracelog "A=%02X ",a}
3 F6 @% p( i( ?+ i$ c& U! x3 i    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( C' e. e% ]- Z  B: b( i
    并且在每一行的前面, 写上"A=a "
; x" X) P4 N) i" p$ |1 ~' V& N    "A=%02X ",a为一个C语言printf函数常用的输出格式3 O4 s8 m( C( y8 V+ K, y
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入! N0 z. q' \+ r6 I# q3 }! s
    X表示为大写十六进制数! c8 ]. O( ^' c+ Z  B

2 V8 r/ I, v9 E9 h5 l! e8 @: Q  Q% A; ?! S2 E4 ?; a, _
1 |" s; c/ r. d
内存直接写入指令: maincpu
/ l* Q7 D8 p9 b( c( h! X    格式为 maincpu.[][]@地址=数据
; U1 F' v% b2 }/ n1 j    第一个[]:
0 z; @7 o! d! V! W/ T+ |/ E, h    o 表示ROM地址4 a$ {) c9 v; ?- z, ~
    p 表示RAM地址
5 L5 g. f: ]+ e  l2 G$ c/ P# e/ \1 a- o6 m# h' s
    第二个[]:5 V! I- q% v1 o$ u" ~$ _& f8 p
    d 表示4字节
" r" ~$ f! A1 ~7 e% R+ c, U; L* _" b    w 表示2字节& c2 b7 f5 x  |, X% F
    b 表示1字节
8 Z1 N% Z: p: q5 S' C9 l  p
. W, w' S* k! R0 r    例子:& x* K8 e  ]8 o7 m* e2 s
    maincpu.ob@1234=FF
  X( C% D- d8 B) X+ S5 R    在ROM地址1234处, 写入FF一个字节; h7 J) l: g4 {) M  O
7 y7 Y& D. d/ W# U: i; V
    maincpu.ow@1234=4E71
- U& g1 k$ y$ p: `' l7 a" U. ?; q    在ROM地址1234处, 写入4E 71两个字节
# b' N; Y5 A- ~8 }* R# h2 u; p" X; \
    maincpu.od@1234=600A4E71
3 A1 u! L. x; L  {4 y8 k, o$ I& l    在ROM地址1234处, 写入60 0A 4E 71四个字节, t1 A4 R$ g  Z6 B, f! E/ ]- v

  v2 x/ J* J/ u2 y! e4 n7 c    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写/ y: y2 t# ~# @- h) ~& ~. P  h
   
: B( V5 U2 W0 J/ s
) y# i- _# [2 [+ n6 R7 P% K其他:
: q7 f  o6 d# `( ?8 x0 ?% I# t$ W! S    dasm 输出档案名,地址,长度
  Y4 I# q3 j" l) V6 y9 U* W& Z$ U    输出程序的反汇编代码
3 o# e5 F+ H: y2 w    例子:
- V" i/ `- J6 r5 \9 I0 J/ V# g    dasm 01.txt,0,100000
) S1 D$ Q, M+ f    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt% ~' v1 X6 Q" T7 K/ ~7 m
% w: }' |6 G2 r" P
    softreset
  b8 P0 @& a; n9 I4 I    游戏重启, 但不重新载入ROM* {; S' _: U5 y5 H+ `$ x. j
, `: }3 H8 u3 g/ }
    hardreset
# s2 m7 I- o% [' Q+ z: |: H    游戏重启, 且重新载入ROM/ L1 ?$ l) n. e- O
$ F. k& K2 I6 J
    snap xxx.png
4 u! {7 G0 [, ?* K" }3 y3 Q  z    截图为xxx.png
. U' d7 s/ V0 g# _7 V, Q1 |3 i6 U3 d  @; n; b; C
    |( E9 Y2 u; @  {
  
6 R/ K9 ?  S# n  4 C- V# Q  n4 {  R4 _- q
热键:: S, h& Y" c, C! ?( ^3 |
    ~ 中断游戏
1 e0 a9 G- O0 O/ A8 g; R. P8 l    F5 运行游戏. D4 j/ r" d2 {% h9 ]
    F12 运行游戏且隐藏调试窗口/ h7 y6 o9 u: T5 Y4 q  k, g# q5 E
    F11 步入, 单步执行, 会进入子程序+ g- G. d9 }0 `, i* }# S
    F10 步过, 单步执行, 不会进入子程序
5 ^6 v/ l; r( b5 D. e' {( M    Shift+F11 执行到子程序返回
1 N6 a# i+ f' ^( V$ j, N, g4 s    Ctrl+M 内存浏览窗口1 u& A& r0 A4 F  c2 Y5 q, }
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( t4 W8 Z9 w4 a
0 T9 V) Z; E: b' v
{:4_94:} & @+ u, e/ {% I5 ]9 i0 x8 t

3 S5 R5 g6 I- a

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2586 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。2 d6 I. ?* C, i8 |: P# m

- ^& ?' V" a6 @/ dPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东: ?: G) x; @0 W# h, A8 ~- R! `  v
11111111111111

该用户从未签到

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

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 22:26 , Processed in 1.074219 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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