EMU618社区

 找回密码
 立即注册
帖子
查看: 1082|回复: 7

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

) U$ w/ ~5 J+ a  Q. ~( N很快速的整理我自己常用的指令
4 J! O3 p: f# f7 v. ~  x, h  O; ~
1 |1 m5 y' A9 O/ b{:4_112:}
7 Z6 j7 J0 e8 ^/ v, X3 l! L7 s! u% Z" k6 E3 e  ^* s  m
MAME DEBUG常用指令7 Z5 l5 _4 U" v, P4 [

+ h2 [7 U' r! P4 n9 w8 W内存搜寻: ci, cn, cl
0 X0 [8 f4 m% X( G: O
! h/ l7 r5 H( I8 r* Z- y    ci3 V3 V, L( ^# x: L, {5 |
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. I6 A0 u/ i9 @3 t# J8 j' y& A- S! h+ @3 W
    cn
. ~6 _/ ^* R# E- w" S; Q, H# b    搜寻指令
' ]; V) L) z& w    例子:
. M# K1 r+ {- h* F0 U! @& V    cn eq,604 c) r! K" ~0 K2 ^' A8 f# t
    搜寻目标等于60 (十六进制)
" Y" F5 d7 b; F) G        
0 u9 x- T# k( E    cn eq,#96
4 S2 i; k$ p, |2 M" c8 a    搜寻目标等于96 (十进制)) \: P$ x" x" w% F3 B! I" _! \) g

* y6 {) h5 w3 {+ K0 @5 P' T  u! G    cn eq
" w1 S$ D1 a3 w) a! D    搜寻目标的数值没有变化
! m5 e  k: r9 {' P
$ A; k( M) K, p7 U: ?0 ], S) r+ E    cn ne* S6 @- ]5 B/ [4 b8 o
    搜寻目标的数值有变化: P4 N/ |* w9 @( c" u
        
+ @' A; B5 q& O    cn +2 a' p2 {; L6 `4 n5 X$ W
    搜寻目标的数值增加, z3 o. D/ o. k$ m$ o5 ], E
    % }$ i7 M5 c& C
    cn -
! G* w- t' |$ z0 @. `/ C7 A* p    搜寻目标的数值减少7 l) O* F1 m/ c/ ~' `8 ^
        
) ~5 `: o+ c& P  P0 a    cn +,3. M( O# u4 }" I& `4 D; E3 K* A4 b% L
    搜寻目标的数值增加3 (十六进制)
( z$ {; d, z9 W. ]/ v' J( U. Y/ B
    cl
% A) S, \3 x2 U/ Z0 k) R    列出所有搜寻结果$ \' k  O. P, a* Y  l4 ]) N' J. ^

3 @7 s- v# e! N9 D' s' N    cl xxx.txt: q- F0 z3 n$ l1 T" g. B
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
: v6 A, ~& a6 w
2 v9 L% u! b/ v. @) O* ?3 o4 A% ?   
$ q& {6 t+ J; J. ^; t- u, \8 _内存监视点指令: wp, wplist, wpclear
% E( _5 J( W; E+ @( U2 H5 X    例子:
& ?; O9 c6 H3 o0 }' z$ k3 |7 G    wp 1234,1,r: y1 |. D* ^" ]5 S" a
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 \$ L, N5 B# z2 {. y2 B* w* Q+ L" n, R' p
    wp 1234,2,w$ _/ I7 m# |1 G  ~; K& \
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
7 }1 o1 R6 K4 d: H     
( M' q6 i0 d5 q% [0 X- ]4 N+ E    wp 1234,6,rw4 `8 P; F5 \& A: b. v/ O
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ Z2 G" {% d$ t* w' x% @; D4 s7 @! _0 s- n& H) _/ K
    wp 23456,a,w,wpdata == 16 I. V! p  `2 I8 {/ F
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
5 C/ n4 c5 ?, J0 Z. V( j8 Z4 A  S, `, Y3 H% F1 x
    wplist
- Q8 Z3 u2 z1 l, k      列出所有监视点. i' p  O! [( j! \# e' L4 j) e
' t1 l# F' P  V# F
    wpclear 3  ?, }3 y5 K- x
      删除编号3的监视点$ |( R3 \9 x5 ~( P
1 S% B# p9 z: [
    wpclear
9 |3 ^# S+ p. W: r, j) w. W      删除所有监视点, n; R: |+ R) B6 o. t0 J

. `. q, k# Z, {7 J      
& S8 p; v+ w0 V3 j: W& f. p7 r2 B$ m2 L- a
程序断点指令: bp, bplist, bpclear7 G. ]- g9 k; U7 x- k
    例子:. _8 M/ A1 {4 I) w6 Q
    bp 12341 C/ v( g; ~+ C" p) L
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! B+ h3 R3 r7 P7 x- w" K# ^4 c9 ?
    bp 23456,a0 == 0 && a1 == 0
' B8 B8 X" u% i: d; M      在地址23456下断, 且中断条件为a0等于0以及a1等于0
( J( q+ L6 G$ g& i/ g2 O9 P* U! @! |" u
    bplist' x, Y% q) v( o% v1 [! T
      列出所有断点8 D: a' r8 U' _; D1 M! ~

) K  m! V2 ^/ n0 G    bpclear 3% V* M6 f, h/ s& @8 n
      删除编号3的断点7 M* m  y) ^0 U1 S3 H) q: O
  F3 V+ i7 t# q4 t1 b: X  }% U
    bpclear8 m' o& ~/ v: p) u' D* Z+ I4 {
      删除所有断点, d8 ^) B+ y) z- z0 H& ~6 L- i5 M, b

9 l2 [" @" n7 B8 n& A5 T) W* U      6 v* @1 I) T  ]
      
: G) @) _' d' J* g* S8 a! i跟蹤紀錄指令: trace, ]+ n1 z# q/ l2 n% S
    例子:
7 V2 d6 n+ `! q& A+ c! _* s1 T8 ?' g    trace 01.txt
( v1 K5 S, c, \    跟踪当前CPU运行的所有代码, 输出至文件01.txt9 @/ F" z; F9 a- S( u0 W
6 Q2 d0 A5 o) s- p: k0 c/ q
    trace off
9 j) F! v- H0 F" {7 Y+ J  A! V    停止跟踪, 并且关闭文件1 {; g& A8 L5 w

( {0 ]" h* g* `- N0 Y) R% @3 ]    trace 01.txt,0
% x0 ^6 L. L; W5 q    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( N" E! G$ F# j" \9 k
4 M0 P7 d5 H1 E+ r' n
    trace off,04 P! k& T) J8 I1 t2 U& s  W
    停止跟踪编号为0的CPU, 并且关闭文件
) a0 G+ p7 l0 {; W
, ]) p% J" i) ~; I    trace 01.txt,0,{tracelog "A=%02X ",a}& u& G0 L1 I$ z4 ]8 `
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt * p. I% V- t2 j; H4 M
    并且在每一行的前面, 写上"A=a "( f/ S$ ]# _  ^) m& N2 s
    "A=%02X ",a为一个C语言printf函数常用的输出格式- ~' }( }1 x+ D- ?3 m' q4 j
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
9 j- H: A: Z# ~# U  L9 n: J    X表示为大写十六进制数; E& o& W7 p5 r9 y2 `9 E1 ^7 r# o
2 X# |5 i- X! l0 ?1 n
! \; s6 Z& L7 ?- O
( ^% a% _2 \$ s- i) Q
内存直接写入指令: maincpu$ S! K9 S* A$ X
    格式为 maincpu.[][]@地址=数据6 _! k: N" j- B  v- c
    第一个[]:: v% ^1 R& G  n7 W8 G
    o 表示ROM地址4 N0 |- [: q+ o$ p4 G% e
    p 表示RAM地址
2 m9 S7 W! F4 i( b$ ]# \! x& |. X- [! ^: p' K9 P
    第二个[]:
( K" I/ k$ l: b6 m    d 表示4字节
' Z8 F: ^8 s+ `; V    w 表示2字节
) h# [; R* D  Q    b 表示1字节/ G. U4 Z( G5 H: ?% Q9 w
1 |' y( |# W  X8 n! L! a/ X
    例子:# Q4 ^) g5 O3 L# y
    maincpu.ob@1234=FF
  S3 \" c; _. w    在ROM地址1234处, 写入FF一个字节! v% M; ]. R- ]! x5 q4 Y

& @6 L, J( y6 {! P" z+ h9 d( ?    maincpu.ow@1234=4E71/ e  V- [( s# I' ]/ c8 i
    在ROM地址1234处, 写入4E 71两个字节! `- ^. w* B# l% E9 ]0 F5 _
5 g0 K8 i  e/ o4 O* @  V
    maincpu.od@1234=600A4E71
9 ]7 O5 h, T. q5 Q4 B; A; C3 j- z- Z    在ROM地址1234处, 写入60 0A 4E 71四个字节
1 i1 i5 H" m& f! t3 k2 t# b
9 T) s9 o. @  x$ ?    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: G5 f1 _/ M( l& w$ p3 m! K) \   
/ Q3 h4 y, I. w: i! d1 W# D- c4 ]8 o0 Z, F, R& s2 \' m
其他:2 u" m, k& @; O6 z( r- X4 f
    dasm 输出档案名,地址,长度
5 W1 c: Z, i4 q6 ]0 C' M$ r5 F    输出程序的反汇编代码
1 f/ a- ^2 L& Y2 I* F# U9 U) z: l    例子:
& J3 }3 l! U/ Z    dasm 01.txt,0,100000* r) j1 |+ ~2 i8 C& u/ E4 X
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 i3 G, ]8 x1 }: D. A
: N# b) N; N; y  [. I$ r( S    softreset
  z3 F! P$ X2 Q1 b5 E1 [# ~, }    游戏重启, 但不重新载入ROM  p! }- {' ^$ _
2 _$ h( q% c) l5 e  P* l
    hardreset& p" ]* E8 }0 z8 S% `
    游戏重启, 且重新载入ROM7 a. A; k1 f/ Z2 ^0 r+ F% c3 S( |3 N

  P. F# U7 i, S    snap xxx.png1 t  G' S9 u6 j# s' N" }
    截图为xxx.png8 A$ h2 b0 A5 J+ a! w- a. V: c  p
- B+ X, U- }+ F5 O5 p4 b& S
  
+ r: C* s; G3 Y5 [8 Y, r    ^7 v9 t6 w- g
  , z, n) B# q0 O* G6 Q/ I; Z
热键:
  R8 j: C0 O1 Q3 B9 i. x4 P    ~ 中断游戏- L1 M' R- k/ d0 T
    F5 运行游戏( l, X4 i  Y9 ]+ B7 r5 U; h
    F12 运行游戏且隐藏调试窗口4 x) R) ]( r4 V& M
    F11 步入, 单步执行, 会进入子程序# ^! _1 G5 k+ v( E3 U
    F10 步过, 单步执行, 不会进入子程序
) D( x% t. Z3 L    Shift+F11 执行到子程序返回
8 X( F' @8 _( z    Ctrl+M 内存浏览窗口
6 Y$ d4 s: I- q  Y$ n    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
7 `- E/ M+ `- V& a0 J. U1 g6 \
( z! R- D  @6 D3 z( y{:4_94:} 5 u2 k) R8 w$ J
+ Y5 z. X  C6 L8 I% N. X: d$ S

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2554 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。6 p* o: G* u+ w( U" G
8 g4 z9 E, J4 p6 U7 R
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 | 显示全部楼层
要详细些的东东4 r  k2 c! P0 V% e$ I" J; W
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-5-5 15:40 , Processed in 1.094726 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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