EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
7 |# u6 Q( ?8 F2 |. p  {9 o
很快速的整理我自己常用的指令
4 u- _$ k2 p3 [& w  X4 k/ E) a8 _$ V2 `# P4 X
{:4_112:} 6 ?7 I9 y8 w! y0 \

: b* ]1 s" [! C5 p& s; q: D# ^MAME DEBUG常用指令
+ l. k( d2 R3 ]* {: A: \# }0 b3 T$ |) P- |4 q4 e: u4 E1 Y( I
内存搜寻: ci, cn, cl" r/ M: p. k3 j  C3 m6 q

1 I- R" d& m# \# R" [' d$ d    ci
: T9 m! N( G! I: {6 F- e  y    搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 l( G; c) g* r8 h) S" O

" c% e' h# J2 r5 I( `" r    cn
, L  P/ E3 S2 b: Q* {) n6 f1 d    搜寻指令
4 Z! n9 c: Z. @" n( h    例子:
: i1 W  F( t( F% r$ L9 L5 _    cn eq,60! {; o. B1 Y! Q9 C& d& o& s
    搜寻目标等于60 (十六进制); ]5 U! E) t9 z3 ~- _
        
' f" c+ N: `9 `5 S6 `/ K! q* R5 `    cn eq,#96# `- G! i- a$ Q# H4 p
    搜寻目标等于96 (十进制)
% t0 I9 {6 [6 ^+ F! m: k' ^8 V" i( y1 \6 k& ?: O. w
    cn eq  p3 J0 v' Q2 e+ K
    搜寻目标的数值没有变化  u) j' N. q9 B7 G/ u) f6 U& K

0 V  q' ]  N7 Y- s: W& {! @. G    cn ne1 [4 y9 p; j' |0 o) Q" t+ @& t
    搜寻目标的数值有变化3 z. p8 F* F1 B( [. u5 k' ~3 [
        
% a. z( ~+ {/ {" K    cn +3 O6 w( _  k. n
    搜寻目标的数值增加7 X8 S3 v+ e3 r
   
+ k3 A% H% I1 y/ V7 x8 o, v    cn -
9 _6 g, `' ^6 S2 o+ e. X    搜寻目标的数值减少+ ^. ~1 T  _" h3 ~. z5 E
        
( \8 ~: a: h$ `. r" ^, w    cn +,3
+ A& i# ~  ?* H6 w- K  n    搜寻目标的数值增加3 (十六进制)
  q7 U7 |( H3 a" [, @! A; x5 ~; Z  v' t' Q# S
    cl
4 E; i/ A. A" z$ b; B& m    列出所有搜寻结果
7 h9 c, v9 ?( n" C. w& ^; d  K* G3 A% D# m9 ?/ ]5 r4 |# c& Q% Y
    cl xxx.txt
- B3 t, p' e5 K, Y: _    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 T  I6 S  q1 J* g  I, Q! n, J

7 p6 Q1 y, ~$ u& }$ Z  k" ~, `) R/ x   
7 K$ M. u( \$ \( ~  ^7 @: I内存监视点指令: wp, wplist, wpclear, h/ \7 s3 q/ m; @. T
    例子:
) l: e$ B; c3 u    wp 1234,1,r: E) Q! d# B  X0 i: H# B. L
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# R5 a' O6 q6 g4 u+ p( K
. A% _8 S6 Y7 R0 s    wp 1234,2,w
& y! h) \2 n: E# c, }      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 M, M+ F1 ]5 B5 _' K
     . B' C1 S  r* k" n0 \% `
    wp 1234,6,rw9 |/ v* [! Q( k8 o
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: W+ N+ d5 f# X
6 ?' A" c$ C9 R1 Q8 T7 V! W    wp 23456,a,w,wpdata == 18 V2 G+ r3 u" ~! O- J, K4 }4 c
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' }& J; |0 j( V
! b* p! {- Z$ K& l: h8 p) D9 F
    wplist
1 V+ a0 c9 g" w  j6 |- h% K      列出所有监视点
1 ]; |7 O3 d: ]2 {8 F) w  A! Z3 ~
% Y# D+ D3 E: E% c+ Q; y9 u    wpclear 3
- `  F8 V) [6 u# ~& q& }& G4 a      删除编号3的监视点. z: i9 B/ }: ]* t" c1 e( i
$ Y( J9 M0 p' z! f- P
    wpclear5 e* [* S: N: V( |& {5 f2 D
      删除所有监视点# @2 i; ^( Y: Z' e3 [$ w
7 I. U; K! W) {4 z
      
$ }, F7 A, n6 b% P' l0 b( Z5 u) S( i6 p0 G
程序断点指令: bp, bplist, bpclear
1 _! D8 i4 g2 m+ G7 W3 n7 m    例子:! V/ G+ S! b$ p
    bp 12349 O; Y0 {2 k9 ]6 Y0 C  p9 ]5 x) m
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, P/ S4 [2 ~- g. L( ?
4 b' ~) u4 y( p+ q1 Q' G
    bp 23456,a0 == 0 && a1 == 0- n( h/ V( f0 P* o1 Q
      在地址23456下断, 且中断条件为a0等于0以及a1等于0- c1 e8 a* D. x% X
+ q! E: M3 p' z
    bplist+ L& e6 `% t& {+ ?" q# ^
      列出所有断点
$ c, y6 F" y! o7 n6 H; h9 t2 d7 q3 P1 F  \6 ^7 c
    bpclear 3
7 O. @  t& T7 o" j      删除编号3的断点9 k- e" g6 G- y6 G0 s

. ]! Y/ V, S, P/ L9 B+ `    bpclear
; N5 f* W$ k. _' \      删除所有断点% v9 w! b- Q0 V8 |& {
- @3 }: \1 W* P! e$ Z) I3 o
        Q  o9 H- J+ c, F
      $ X' i' R( q. c9 e+ n# m
跟蹤紀錄指令: trace; }+ D& [6 n+ d# A" W* L7 s) W
    例子:) s/ x& d% y4 Z* X4 N
    trace 01.txt
9 {6 p0 q/ }1 O    跟踪当前CPU运行的所有代码, 输出至文件01.txt
4 Z* [$ S3 H. t9 S* L" B# A& B0 t. l  B
    trace off5 y7 g# r) w- }5 n; ^# M/ N
    停止跟踪, 并且关闭文件
% ?  X, K  @) r1 }* V% x9 z; f2 r6 q; I* T4 K8 U
    trace 01.txt,0
8 }6 Q" n$ J/ F7 G    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; Z7 T4 c* n+ o" w* y# r
1 C: f. g% m- Y1 d8 `7 Q" C' b    trace off,0
" B: p1 G" X( \9 w; Q    停止跟踪编号为0的CPU, 并且关闭文件
0 w; m  C3 D$ Z4 v! C0 n6 p- y8 c- f/ H8 n6 C
    trace 01.txt,0,{tracelog "A=%02X ",a}8 E. ^' Q1 G; E. t8 O
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 5 Y0 n9 E0 X) c1 j; B
    并且在每一行的前面, 写上"A=a "& ^' R4 Z6 x: i; E. P6 }9 g
    "A=%02X ",a为一个C语言printf函数常用的输出格式6 L, M9 A7 X7 N% x6 b* Q2 ?# u
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入) P9 G5 D8 z) K' w6 b7 |) h; i
    X表示为大写十六进制数: K# i* I% t: x, E0 ~+ C% n

  g" M# E0 \7 y. p/ P( L) K) B' ~2 a5 i9 ^/ D5 @- z3 C
3 \( I2 h- G: i$ W& b6 q) O" G  Y
内存直接写入指令: maincpu. F' f3 ?& X! K1 P
    格式为 maincpu.[][]@地址=数据
, H. `/ _* Q  l: ]9 O' V. m    第一个[]:
" I, E7 E2 S; a' w' P/ g% f8 U    o 表示ROM地址# ~7 G9 t, h' y" H& w* l8 h
    p 表示RAM地址/ _1 i" @2 X2 K9 F, @

& o; p. P6 n' ^    第二个[]:. V3 ~7 Q! E/ g$ L
    d 表示4字节9 E( N* e, Y& j9 D: h
    w 表示2字节
! w& Z2 i$ A8 w# W    b 表示1字节: W" x# Y: r: E

$ n9 I* h. `6 Z: O1 S    例子:/ H: y4 _0 S) B2 P8 p7 Q
    maincpu.ob@1234=FF
  b( K$ U2 ~+ Z    在ROM地址1234处, 写入FF一个字节3 u5 S9 N* }* Z+ ^8 h

7 F- C1 l/ O: _    maincpu.ow@1234=4E71
3 v  N* m% t) H* S    在ROM地址1234处, 写入4E 71两个字节7 N0 A8 ]7 k4 k; j9 b9 ^( C6 Y

6 T0 E/ z: @; T. L* l9 q0 M6 G$ Y3 R    maincpu.od@1234=600A4E71
, w" ~: `- W% c    在ROM地址1234处, 写入60 0A 4E 71四个字节( _7 k7 a( p- l. h' `) ^8 x% n
8 e& Q- Q4 ~2 x8 ^# C$ k' D$ b
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写( @4 }- s  |% H9 r& ~
   
2 A; ~9 O) \5 e! b* I) Q) U' Q2 H5 K# t9 V0 y# f; @$ H$ d% g9 _( H" T% b2 L
其他:
: d. s  X$ z9 T( S8 [& x( ^    dasm 输出档案名,地址,长度+ y+ n0 J( ?7 l- [# k5 \
    输出程序的反汇编代码# c5 s% P1 g! ~" L5 A0 C
    例子:; @- p) [8 |* {0 G
    dasm 01.txt,0,1000008 J  e5 B6 C7 H+ ?' `  d
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
/ P, w: T0 D& K& X8 g" R9 a( t3 z* L' p$ t+ M
    softreset3 c' W# W, ~) r( ^: S( h, u! O
    游戏重启, 但不重新载入ROM
5 I% X# }( n" z/ \* d1 y" [8 c2 T$ ]5 h- D3 C9 Y
    hardreset
/ ?& f! a' G1 m1 _# k. ?# L    游戏重启, 且重新载入ROM: d7 j6 i# p4 Y, B: G% R! E4 m

; o* O! i6 I9 ^' f) q  i    snap xxx.png6 R2 j$ ?+ y8 w. [( f% Y
    截图为xxx.png
# U+ W7 y3 q8 o$ m9 o
5 f; n) J/ D9 ?& i% z) w  . {* K3 c. u7 @" U0 f
  5 h. ]+ r, a$ F0 O, ?/ k
  
4 B, Q/ y$ J* A8 Y/ C0 a* N' a7 q. S热键:
" c6 j1 R. ?" |9 p    ~ 中断游戏0 ^9 b- I; w/ U3 \  m; A; [. X) r
    F5 运行游戏
! c5 n/ `- q3 e8 N  O    F12 运行游戏且隐藏调试窗口
$ z/ |) _9 F# f0 C% x! d/ [) [    F11 步入, 单步执行, 会进入子程序
* b7 B- @% s3 w, x    F10 步过, 单步执行, 不会进入子程序
% I/ D, I: E# o  h) j' j. ^. j2 P    Shift+F11 执行到子程序返回/ h# ^$ }; ~7 B+ K( R2 q
    Ctrl+M 内存浏览窗口+ V9 W; E- m5 ~9 \! h
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# W  n0 g+ K9 W; z; ?3 D9 u! o' |/ ]# d
{:4_94:}
( u$ b5 s0 E7 A5 m* p& ?) g, c( r" p7 @- q5 j# Y2 f$ h6 K. ~" J

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
1 U4 e! T3 ?! u. @! G3 ?+ F2 Y4 K. a  W" F# o6 }, 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 | 显示全部楼层
要详细些的东东
8 ^( e2 n9 V0 ^$ l11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-10 17:26 , Processed in 1.105469 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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