EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

, [! @! n$ i6 h' b& O& O! T很快速的整理我自己常用的指令
9 _  R4 U) S; x. |; M( P
. n2 C* [$ Q( c0 H# j5 ]# s. s{:4_112:} ! z$ L8 I" R7 \
3 ~7 o" m0 E) }6 w7 A
MAME DEBUG常用指令
+ R% @+ p" a- t9 m$ P, k7 D$ l: N
( [5 k& B& d8 H% J2 s" C) j" w) U内存搜寻: ci, cn, cl
( b4 t/ E" ?) S' u1 _' b+ E9 k6 v- o
    ci
- m9 K: W( K( {    搜寻任务初始化, 每次搜寻一开始一定要输入这指令* X1 E" A8 L6 P( S/ H- }

/ j: A! n! b1 ?( p    cn: |( n7 n+ s- [) Y
    搜寻指令" ~0 A0 D) w9 s8 R
    例子:. r0 F3 |% P- Y( K* R5 d2 o
    cn eq,60
9 O/ \# F  S% p+ O' x8 e    搜寻目标等于60 (十六进制)
% s1 }* x7 F+ A8 n3 `. m        
; R- P7 V" L% W9 D7 n. l) z    cn eq,#96
3 E- a' C' Z$ E: q7 R$ q: |" F    搜寻目标等于96 (十进制)
! d. g$ ~0 u/ y2 Y$ }: a. p. ]* S& z# Y8 m: T$ j+ T7 ?
    cn eq0 S: E% l7 C2 y: V0 q8 ]+ X9 R+ @
    搜寻目标的数值没有变化
2 ?# y" m7 A8 I. X1 X# a
, f7 ?0 B! G  `    cn ne
5 A9 {3 ?" q# |' M& X    搜寻目标的数值有变化
" |4 R, t7 S& f$ x+ j2 y        $ J6 `- C* x$ I3 z! M  B0 F/ R
    cn +' z( @) F  O; Y1 y5 j% \
    搜寻目标的数值增加
/ y' k0 d; Z  G0 W8 V& @. ^: g   
" n1 [7 j, F, T    cn -* f5 w+ A. c8 D
    搜寻目标的数值减少
4 b. ?9 [0 A( X- h" t/ ]        . J" [0 I8 x+ ~
    cn +,3; \* ~0 X* q* [: \
    搜寻目标的数值增加3 (十六进制): U/ ^: W# ^/ d8 A5 i6 B6 ^6 q

  u/ o6 |9 [4 U    cl
$ w3 P, H& f+ \' z8 P3 J8 s    列出所有搜寻结果
% E% n6 n  R1 j8 I) [3 W0 Z
, y- n- s7 Z# q' F7 l1 Q    cl xxx.txt
3 \& c* D% l9 \$ |    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
  D. q: X% L2 q
# v' z) |0 ?4 m5 A0 W    4 G* G8 M* K; D( _: }
内存监视点指令: wp, wplist, wpclear8 m9 c1 n* i( o3 h# C; n. K/ C
    例子:
; o$ }2 T4 V' T1 A    wp 1234,1,r- s# E9 H) a  \( p, e; ^
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 j* j% K% x$ J6 s7 I$ t. }; }& V$ t, d3 V" B  b& \$ T* ~# Z  W
    wp 1234,2,w+ v- }' Z6 z" @6 B
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ m2 P0 b7 O" [* z" D$ m- c! [* `8 X
     
# U# y3 V) x' C) }: \2 H    wp 1234,6,rw
4 f! g  t: ~; ~0 A      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
$ w5 _+ \3 l4 N+ l* R. u- m3 g0 Y0 U- d* J
    wp 23456,a,w,wpdata == 1
& M* w2 t& K2 }: b      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" l' B: j. `9 _! @/ d
' b% P4 E( |8 f  O    wplist
! G! T, i8 a9 E5 ]% I      列出所有监视点
/ Z0 ]4 W- i; ]* u$ q
" v. [/ y4 `. u, S9 m6 r8 K    wpclear 3- C" d8 O# m5 P4 D
      删除编号3的监视点9 y: v/ ]+ S7 t" r8 S. U* ~& S
* V) q; y. n* B- f/ V. m+ f
    wpclear
! X9 b' J1 q+ O& `+ T7 X      删除所有监视点" @9 h4 D8 ?0 S4 X
; g" u1 L2 Q7 G- S
      6 f* G; X2 V" i

+ p: E9 w1 B& K4 I程序断点指令: bp, bplist, bpclear
+ u9 X8 g" B) ~. d  h. n0 `4 K    例子:1 ]5 p3 l# z+ t# `" I: `! E
    bp 1234
+ u- L% n! \6 |0 k3 K      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 d% a4 J  W# v3 ?' K
5 @  ~/ J7 U2 i    bp 23456,a0 == 0 && a1 == 0
1 Z" y7 `/ ~) {      在地址23456下断, 且中断条件为a0等于0以及a1等于0) s0 o/ b9 g, I3 N/ }& Y0 Z- I
/ d, `) a* w2 `3 w
    bplist) J( N, ^6 b- {/ M+ ^# q  E, q$ m
      列出所有断点
$ p, \8 x3 C+ ^. {
( R( E$ G* ^& U* T5 e0 c    bpclear 3
0 @" i9 p+ b9 D6 b8 {& Q      删除编号3的断点/ D* G. B* `9 V8 e- @

' t  L5 ?8 v. [5 Y    bpclear2 B5 g! H  f: l+ f# x
      删除所有断点
5 ?+ s  V6 m2 v9 P$ G: f
% k; r. }. {/ r8 ?: Y# P  I      ; q/ t/ y9 o; M: Q: h
      
- [4 F  _4 H" Y  p: I4 x跟蹤紀錄指令: trace$ @4 ~% }/ R6 p3 t  |+ @
    例子:
" i8 S: h, N! W' _) Q- _; X    trace 01.txt; d+ c* x5 o9 x& I0 R- ^  E
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 @+ b  n! c0 o3 p) O
/ M$ y8 x. K5 W( a8 P2 l2 m8 p) |8 {    trace off. S7 E( y1 Q5 \6 x1 A2 d+ x5 F+ \0 A6 T
    停止跟踪, 并且关闭文件
+ D0 z9 B- V5 _3 ^7 k* e* n4 m2 p6 E( R5 S: q
    trace 01.txt,0
0 J" m$ p2 z/ t9 V, ?0 _% p    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" M" B0 i) K* M3 B6 m4 K3 _
  p! W) s1 p+ A- K  p; K
    trace off,0" p) r$ o3 H" o! Z- y  T
    停止跟踪编号为0的CPU, 并且关闭文件$ K% g* m" ?' B
5 d( u# G. V' Z+ ^
    trace 01.txt,0,{tracelog "A=%02X ",a}. O* q$ d* j) j4 L4 m! O8 n% \
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ; U( \, A& J/ m: z( |8 ~
    并且在每一行的前面, 写上"A=a "
8 u7 w+ f; }0 Y    "A=%02X ",a为一个C语言printf函数常用的输出格式
  ?5 i' A5 `: \    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 X% F4 d" @3 n
    X表示为大写十六进制数
7 h1 b: i( q0 N+ T, |+ T5 w9 z. H6 O' }
5 p, `* R* r- Z9 K) }

5 Q% f4 F7 l8 t; Y* r内存直接写入指令: maincpu2 n8 b* V0 Y7 t) L2 \" ~! A
    格式为 maincpu.[][]@地址=数据/ c# Q, [* I* l! R1 w4 I
    第一个[]:6 [0 O0 {- s, d6 s( |: G% O
    o 表示ROM地址8 V3 A  g3 q1 M4 E9 j9 Q; ]
    p 表示RAM地址
) B, u0 h9 O  B) P
4 _6 k' ?) t* G+ @; L( q0 N6 u9 D* y    第二个[]:
) @7 {8 ?1 e) f7 z% p    d 表示4字节6 O. G/ t& Q! s% V% u$ _1 z
    w 表示2字节
+ k! n' |4 z) E9 @    b 表示1字节1 j0 }" }  _2 {$ }

- T" ]" k; r/ |5 _; l1 t9 b: f3 c2 G7 T    例子:: I4 x6 N/ ]( S3 @" i
    maincpu.ob@1234=FF, h. \8 y4 N0 [! e% U2 V6 Y8 t; a
    在ROM地址1234处, 写入FF一个字节
: P5 q$ q# y3 p4 Q6 U' s* v
  H$ a. Y0 C4 M# Q, s6 ?; m    maincpu.ow@1234=4E71+ X$ Z" v% q& M) e
    在ROM地址1234处, 写入4E 71两个字节
$ W8 l. a) I; R" q
/ S- O0 ^( b4 Q. |5 P    maincpu.od@1234=600A4E71
2 q7 @  S2 e! T' Y    在ROM地址1234处, 写入60 0A 4E 71四个字节, x' p9 p. I/ y6 Q2 J; f
* M, G: Y& k- ^5 P5 b* [' z5 f/ w  Y4 D
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
4 r$ B6 n, G5 L0 d* `! J   
: [" a  r/ e5 b: x! J( n7 T; ~- L, t% K9 m
其他:
! a) j2 Q& U, k  ~6 C; Z/ Q    dasm 输出档案名,地址,长度$ Z4 T8 E$ M1 {+ t
    输出程序的反汇编代码0 ?2 F8 R  H" C8 C& {5 l2 b2 a8 a  D
    例子:2 M$ t& f2 w6 O' ^, \. J1 w: V
    dasm 01.txt,0,100000
( z, X2 q) o" y) `    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
# T; [0 d; a3 r2 Q
8 Q0 \; Q% M, U0 `& T    softreset) m' @) u$ l( `' P8 m
    游戏重启, 但不重新载入ROM
* ^# u: T) ]: A1 T! y; C& T/ l" t) @$ |
    hardreset
6 f2 z5 \: P2 Z3 w, R    游戏重启, 且重新载入ROM7 i/ N/ g- K# x# {' Q) M) }

' L5 Y5 W6 ^7 M* l/ }# H$ v    snap xxx.png, ^! q+ s- E  Y% \$ \- x% O
    截图为xxx.png
3 J" B; X0 D! f" _
6 y0 r% Z& d) ], x. f* f8 M; S" z  
" s. [4 f8 m; s$ K  ( E0 X3 i! c2 M5 y( o) {/ e
  
9 J5 E" U5 R; _热键:
$ G& }5 K' e9 ?5 R    ~ 中断游戏9 C. D5 i& E. Z$ D8 S. w
    F5 运行游戏
/ A+ l: f8 Z2 j1 ^& U6 L    F12 运行游戏且隐藏调试窗口+ j+ y! L9 R: L$ p4 c1 L  \
    F11 步入, 单步执行, 会进入子程序
. d- H* ?  u" ]( R5 g    F10 步过, 单步执行, 不会进入子程序9 G, W, ^! V* d
    Shift+F11 执行到子程序返回) H# s6 k7 ~. w6 [9 y  Y
    Ctrl+M 内存浏览窗口& D, H( g; O' ^- c
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# h; k% f& o! _5 o/ F$ K+ Q% n, f
# o: l& G( q8 y  u/ r" H( U{:4_94:} # G8 _- Q. V/ i5 m

+ g2 \0 W; x% v8 ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2540 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
# v, g2 u: U0 V& ?( E& C/ y2 G/ ~4 M. M
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 | 显示全部楼层
要详细些的东东7 o0 ?4 k/ h3 ^
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-1-21 18:57 , Processed in 1.097656 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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