EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* S4 }% K7 {/ n! ?; i很快速的整理我自己常用的指令: M' T' s! [& \  n# r/ D
( n. }0 u3 s, y5 ^
{:4_112:} . l9 s' Y2 E* T; d8 v
' H% C/ V, a' ~' i' r* Q* q
MAME DEBUG常用指令
' V8 \$ F  G- G( K) j% S6 j1 D! I" Z% E, W; `; P6 D* k
内存搜寻: ci, cn, cl
: W" E6 X; j& R6 A: }( J5 }& x7 }0 C' [! I8 b! A: ~
    ci4 t1 s  o6 Y* t" |
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令5 ]; ^& \/ q: I+ h* O; T
# X/ u6 p/ v+ D
    cn6 M+ m9 z+ y- q" p6 T
    搜寻指令7 j' z" t& g5 z: ^6 t6 H
    例子:& i) M% f" U* V% H' X
    cn eq,608 j. h: X5 k# n4 }. K0 A+ J
    搜寻目标等于60 (十六进制)" ]) d+ i5 p9 b& u. J" G
        & g& c" {' @( r  ^4 T
    cn eq,#96, q# ~, \1 T, P- h
    搜寻目标等于96 (十进制)
3 O: @) ^2 q1 c/ V1 n% D0 }! z3 X: R  Z0 C' \
    cn eq
7 \1 z  k4 n1 d# u$ X    搜寻目标的数值没有变化# e9 m& Z5 {' p% [9 _6 ~/ T  Q

% R1 F4 ^5 ~( ~9 O- o8 p+ K+ k    cn ne5 O. N, v. \' O% j, k! R
    搜寻目标的数值有变化
- j# p3 v% `& x' Z2 X        & o8 [' x3 K. B6 R& U9 `* B7 }  ~
    cn +# r4 F$ E. b8 d" Q- G
    搜寻目标的数值增加' Y$ n6 |2 S- M; J' R
   
' Z8 S( w+ {' ^( U; a4 o. Z% V    cn -
! }1 J0 Y( n9 G    搜寻目标的数值减少
+ F8 p* v2 b3 |  _3 _        
( S4 q  V8 M; l0 A8 n3 q0 A    cn +,3
. N! p. }$ B, i    搜寻目标的数值增加3 (十六进制)6 [7 P, C8 w0 A' ~

6 n, w4 \7 f% [    cl+ U& B& L# F9 W5 y
    列出所有搜寻结果' v% u6 R) F6 `1 v! X0 y/ R

. g& n1 V7 g/ A" v* U+ L" X    cl xxx.txt- l+ A) X( K! x9 V
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 K. B# s+ G6 N0 b  K

  L$ h2 M6 l% V7 u# n   
5 A0 W' b+ H' b% h' U2 {- C内存监视点指令: wp, wplist, wpclear
0 N; Y" ?- ]/ d4 I5 J/ u: v    例子:7 r. o6 N( s. |5 H# o
    wp 1234,1,r9 X3 k4 T! b( H6 L
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
  \) [& Y6 H' P% G/ p) u5 ^
, Y( [; R5 `8 w4 R6 I0 g; g: S) q    wp 1234,2,w2 O' P# C$ S" j4 z3 N
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* E! ^3 ]6 M  ?9 R# P, j- M
     ; X3 a2 A4 ?$ H  k$ O) r) H
    wp 1234,6,rw
+ p$ h9 B5 R0 Q' p& n) C- D6 m      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& m2 V' h+ ?0 z8 z

* H& z& H& [0 m; K9 t( X    wp 23456,a,w,wpdata == 1
7 z4 F) Z  ~" t8 a5 J7 h+ g( i      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
: s4 v, e& j3 y9 P# Y% G+ F# t
" Z6 G  o" h; N5 C# Q1 j% p    wplist+ g- o8 ^, }3 D9 L1 V/ C, u
      列出所有监视点
, J; r, Y! S9 F* Q+ J$ c3 y7 S; ?; G- a9 @  `/ s" C5 p: b, ?
    wpclear 3# c1 K2 Z% q! \1 u
      删除编号3的监视点
0 P$ ^+ V- j6 J* V" |, s3 ]4 F  ~# u0 W, v. M# V$ d  P
    wpclear
' g; s% x5 W. t' K* Q7 A9 F      删除所有监视点8 `& j: G1 D6 V: U# l2 {

/ b4 ?1 g  I3 S; x. X; R' y      ; Q: ^" g# m9 t/ I0 B; A

8 v+ @& {+ O+ y8 I程序断点指令: bp, bplist, bpclear1 x; V, [: {8 d6 t8 n" e
    例子:9 d' x- N* h$ }7 A7 q+ k0 P2 s
    bp 1234
2 h1 L4 t4 a" k3 n1 D      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 O) ]9 b4 H8 y+ l
0 p- j& C( M  ?# D: h  u" T% i6 {0 f# b+ \    bp 23456,a0 == 0 && a1 == 0
0 I. f8 `* m$ h1 y: V# S      在地址23456下断, 且中断条件为a0等于0以及a1等于01 X: p8 o' {- Y; B1 }1 o$ z
7 _! Y! R* l- a3 i% N8 O# X, P
    bplist
9 z( n' a4 {, U4 v7 Z      列出所有断点
0 D/ R! m' o7 n  Y9 K8 n6 ]* K( K6 ~3 W1 E/ U
    bpclear 3/ z( R5 x2 B7 D9 m
      删除编号3的断点
+ U9 u  N1 o) x+ W" w) Q# s- r- b1 W8 l0 m: Z- I5 s
    bpclear
3 V) d2 ]1 h' d, N, V8 |      删除所有断点1 d" ^& Q* P$ Z  f8 b
$ H# w. d" W7 w, Z- S  z+ @- m
      
2 w* O& O: X% c* t. V9 c3 T      
; d4 O- E$ V8 a  m5 j/ I跟蹤紀錄指令: trace
5 l0 L' w1 k8 D! }4 H) _    例子:  P% d* S3 Y7 m
    trace 01.txt6 p5 n' S, M2 q. i9 g: h& S
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
, h& _7 T; q5 @9 T, z3 F" l4 \! p$ ?9 G; \  b
    trace off
2 b- w! ~9 Y2 R" M. k# m    停止跟踪, 并且关闭文件
5 H, C9 b: i$ D! ^; @! t, f' W0 i# V: b# N+ ]( \+ X3 `' u
    trace 01.txt,0
% @2 N9 l4 U: H3 p- G5 W5 i- J    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 {/ }& Y$ h$ U9 p. V
( J) p! f  H( ^1 h0 c( z
    trace off,0  v. }. n- ?% X/ T; g
    停止跟踪编号为0的CPU, 并且关闭文件; y' T) C9 }1 i$ A
5 S: _1 l% e4 t* x
    trace 01.txt,0,{tracelog "A=%02X ",a}% j' C! y% p( k
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt $ y* h6 L5 j9 e+ w
    并且在每一行的前面, 写上"A=a "
: \. p/ t% b- r7 i    "A=%02X ",a为一个C语言printf函数常用的输出格式/ W4 i) I5 W' I" c
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# ~0 t3 s0 [6 m. G    X表示为大写十六进制数
* b  v& N8 p$ P2 \) y
; S1 A$ y; {/ G4 k/ K; }! R
0 ]+ K; N* ]( I; W, c8 b7 D" j6 ^: i3 {
内存直接写入指令: maincpu3 r8 h% e1 O* B, \; m& Y6 c1 y; a$ Q
    格式为 maincpu.[][]@地址=数据
: F" A  H' O4 g3 u9 T    第一个[]:
5 X* |$ b! V1 _( j' Q    o 表示ROM地址
, a4 g4 U, [% }( N    p 表示RAM地址8 H5 u+ i$ E3 }2 _/ j3 n( n. j
& I* k* ?1 K: z/ m/ x- t
    第二个[]:
  u0 `4 m* g6 G" p    d 表示4字节
2 ~) O/ k' f; x: r1 k    w 表示2字节
! {: S3 P* @2 o    b 表示1字节6 B0 V7 s7 @: Y9 c9 R

+ R1 r, f" x' N2 T/ j    例子:
+ i6 d3 j4 P% \1 B# F2 m7 I" C    maincpu.ob@1234=FF$ M$ J9 D+ z# F5 t
    在ROM地址1234处, 写入FF一个字节
+ W* |+ c9 p( @5 D7 f% `
: K) r9 V$ |* V7 ~    maincpu.ow@1234=4E71
. b1 b/ i' }& [) [6 }4 H2 `& i# Y    在ROM地址1234处, 写入4E 71两个字节# Q( F+ h  ^- S+ }
1 C& ]( j- n2 y4 ]: C" `( ]
    maincpu.od@1234=600A4E71
& b! o- F2 E# P4 C    在ROM地址1234处, 写入60 0A 4E 71四个字节& S$ c5 I/ W9 H( J; p
( P3 T8 x/ y2 W) \
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' o; A' Y' }# U; b$ v    - ?; j5 I$ m( c1 h
$ u$ T: w! K8 U  L
其他:& l) r& s9 g! `" q1 e! N/ D; J' D
    dasm 输出档案名,地址,长度
% S1 Q/ Z' V( q1 X6 e; }    输出程序的反汇编代码
" T* |6 g+ [8 a7 }: `5 q$ q    例子:& Z$ o: E5 v6 `% X+ w" @8 \  j
    dasm 01.txt,0,1000009 T+ e# C9 D- b4 ^# C* t5 _' N+ I& K
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, H4 X; g( S" ~2 T; _7 S

$ Y* t1 R* q, G3 R; U' C+ q3 S7 k    softreset; K+ I7 r0 M# ~7 N3 V
    游戏重启, 但不重新载入ROM
, _& f9 D+ [% i9 f# o0 f2 Y/ Z
( Z4 D* j+ {4 @    hardreset
3 t$ X, ^8 i+ c6 o    游戏重启, 且重新载入ROM8 z; g( j4 V, I  d& x% L4 r
2 W5 I" |- Z% a+ z1 j  U3 Z' i" ?0 ]
    snap xxx.png
2 R/ [- A1 T  W) T3 J" d    截图为xxx.png
; u' a+ @! h( f5 o2 B+ P" H$ e7 |4 w% q1 S$ l% a! N9 v7 o
  
/ B5 K+ {- O1 F  
& a" l& D- _4 _1 \- Y4 J2 P  
8 H* l& s" t2 G9 T. L# J$ k热键:
1 V1 @2 }8 ^  A. a8 n    ~ 中断游戏
0 N' ?% I3 N; r$ x    F5 运行游戏$ g& l0 L- x: r) Q0 s) |
    F12 运行游戏且隐藏调试窗口
8 ~  H( |9 a) i9 `  \" S' U    F11 步入, 单步执行, 会进入子程序5 l# C5 W6 o# m* p% d6 L/ E+ e
    F10 步过, 单步执行, 不会进入子程序
8 K8 F( D9 Y% A. n    Shift+F11 执行到子程序返回
* i# W1 p' w% l% }* k+ b( ]    Ctrl+M 内存浏览窗口0 t6 Q4 G) I1 `3 a
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' q  w# C6 `7 w9 t6 T: [' e! N4 X0 p. R, O- ?5 `9 v
{:4_94:}
% \* X7 M& h3 `! H( H$ a
3 x3 l$ ~# E: `# g2 e

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。! b* `4 i$ ^# u- P  r
, {* _6 w' ^9 t$ n# 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 | 显示全部楼层
要详细些的东东; c. w: g5 u5 d0 W6 q
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-7-6 04:51 , Processed in 1.077149 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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