EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
6 U+ K3 K; N2 `; v0 d8 N6 k
很快速的整理我自己常用的指令  E) r) x4 j- c$ {$ I  K

. @/ R4 g* k* \{:4_112:} 1 G0 l+ Y+ g8 S: y9 D7 X
$ z' ~& ?' c+ r% x2 C
MAME DEBUG常用指令
! d* G3 M: F# y4 B3 \9 _5 @
5 Y- k% f, s& k9 W4 ]6 y内存搜寻: ci, cn, cl- }% t  x; H" K' f1 s! M) T/ h

: p' i8 W) \  K3 M* g2 ?$ N    ci
9 X- O! S+ X9 s# L8 B& {& P9 g6 k4 I    搜寻任务初始化, 每次搜寻一开始一定要输入这指令- n& S3 |" q. ?7 y# {2 W$ E

/ `4 d) f. h" w. t, H    cn
% E. t8 Y, I7 Z. d/ j) A2 v    搜寻指令& z7 Z7 z8 b5 u$ S& m* I( u
    例子:2 ~/ y) f+ f5 c, f$ \
    cn eq,60
  e2 d8 h8 h3 B9 M; A# U. G% n    搜寻目标等于60 (十六进制)
6 S( I3 t6 G7 c4 Y        
( V, d5 ?; I/ `* _0 W4 _. F5 o    cn eq,#96# ^# V3 K* {* l$ }  m! a$ Z. L, [5 N
    搜寻目标等于96 (十进制)
* N& D) c2 C" u" P  W2 I
, N2 f. e. P" a7 U    cn eq( m0 b4 w5 c7 O6 J( S; ^
    搜寻目标的数值没有变化' S, Z1 {5 \  P  N; i

) [' z" P0 D$ N$ N, Y2 R( N    cn ne
6 D5 U% `: t: c: C. X    搜寻目标的数值有变化
$ O& e3 S" U8 G6 C8 r        
0 s  T9 l2 p" b' V1 e7 K    cn +
' U( o! B9 d  a3 A6 `1 R    搜寻目标的数值增加5 x; J9 [. l) w+ {+ S% H' w% f  N  i
   
/ W  T! q' G9 X1 |2 a    cn -
, @; j! \! B' P" C    搜寻目标的数值减少
: n# M# B! a& g" a        7 O3 \( ?+ p% h
    cn +,3
8 D1 |7 A  f" r+ a    搜寻目标的数值增加3 (十六进制)
( F" |9 y, R9 }4 }; `; A
6 T" O- C5 f% \8 v2 F  M    cl
% l+ S% U, F/ _    列出所有搜寻结果, J  Z" l0 v8 ]2 b: R; \
2 L0 h" e8 j. t
    cl xxx.txt
. X9 y  c- U4 t% g2 w6 _    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- W: K% w% N+ q: o
- _* g+ E/ \1 Y: Q$ m: m) n5 w    ! _0 R- S+ G6 @: T0 a
内存监视点指令: wp, wplist, wpclear
2 R3 B/ x, a' S0 U4 z; ~    例子:: w5 N" v0 Z1 \$ ~
    wp 1234,1,r, Y, G0 ?( _, l* Q+ S
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) P4 c1 h7 l' M4 X4 F' M; w: }5 i$ ]
) T& Y5 W: A: t( p
    wp 1234,2,w- Y9 L. p/ P% y" V. C- A
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* S# M0 _* {2 d# |
     
: G" [; Z3 e4 p    wp 1234,6,rw
( s. Y/ o5 L3 y6 ?% O- v      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
) ~) L5 P' a$ E% r% ]
, B- e" O' U# C    wp 23456,a,w,wpdata == 1( T% y( m3 T4 U
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
/ G. B- O3 G4 n. o& B0 [
. [0 R8 j" m( s# j- K( O    wplist' |9 d; D2 Z; Q7 _: x/ ?3 d' n
      列出所有监视点/ |+ V2 f/ V% ?: s
& x  i& F' E9 r* l
    wpclear 3- S. i: @: o9 Z1 F) E
      删除编号3的监视点
6 B  J+ H5 K$ q
' N- A) _7 d0 H% [" y6 M    wpclear
) l, H) M6 |! A      删除所有监视点
& e% ^6 U' m. Z) `3 f
$ |% H8 Y/ i  K      
4 P, C' [) A8 b. j) k' \& n+ n  T0 q% u! c
程序断点指令: bp, bplist, bpclear
; i' _' L$ k$ ?; e( ?% H: o    例子:7 d) O6 G& ]* v$ G8 P  W* O
    bp 1234) Z" t9 W, u) u  R$ F
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ }! ^, u1 _  S/ S, ]1 m4 P3 @
7 H$ V$ {" A1 q: I* }( B
    bp 23456,a0 == 0 && a1 == 0
" ^. v6 M  Q( X; B      在地址23456下断, 且中断条件为a0等于0以及a1等于0; z1 l" Y( H1 A7 k" a* T
% B3 {7 X/ f3 f
    bplist: |+ v& Z, g- r
      列出所有断点9 h) E. y. i+ ]7 C- ]- E

. W/ I0 m+ g) l* V    bpclear 3- R5 E7 M0 y. _) d! _: p
      删除编号3的断点9 U" S5 o& I- \' I, L( d/ D) i
4 |7 M1 T) C7 G* C$ |# J3 z
    bpclear
0 H- e6 N- b' I% h* s- n" g      删除所有断点
  N& @( Y$ V, V* \1 R% r) u) I' B# w$ M( `' e2 k  Y7 K
      
* d& S. w3 v3 _: W      
4 Z8 L8 c* \: |. d: g* w! v跟蹤紀錄指令: trace; V5 R: c! f2 O2 Z7 [: ?6 V
    例子:- Y* N) W# J* h+ l$ F- E- x
    trace 01.txt- u3 R4 w& n. E( e# q- n
    跟踪当前CPU运行的所有代码, 输出至文件01.txt0 t* P  N+ x$ g" x
, R/ w, [/ k* P  A% |( p* U# ]
    trace off
0 {& g; ~0 x0 ?8 N    停止跟踪, 并且关闭文件
5 a" n8 y& w* [' s+ D  t* Y$ {$ n( H
    trace 01.txt,06 _1 n. _: T( w- S$ a2 J
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 b9 K# C3 D7 e+ C, ~7 L
# j: s9 Q6 E* Q2 g; _. A+ f
    trace off,0
( n2 O* G* O, s2 m! k* z8 r2 R1 d    停止跟踪编号为0的CPU, 并且关闭文件
( ^$ ^( _) u+ F% L$ h* C5 {. N3 @, T% t4 z, J0 @
    trace 01.txt,0,{tracelog "A=%02X ",a}+ Y) y4 D, {, k' \: y" K, A7 o
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt % C" y! ~, s  S7 R) s$ B, B
    并且在每一行的前面, 写上"A=a "7 a7 Y; X$ `: `. O$ O% m
    "A=%02X ",a为一个C语言printf函数常用的输出格式! c9 M" E7 H9 n$ H' ~" x
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ |9 e* B! G5 k- ?4 I3 [) k8 ?
    X表示为大写十六进制数
- }  c# ?$ N6 ?  u
  Y% ^7 ]  [1 b7 \% f8 m2 W8 j/ x! u3 L! Z6 a! q

- e' _, [( f6 _% R0 g5 ~内存直接写入指令: maincpu, ^2 s3 j" @6 L1 L- y# ^) c
    格式为 maincpu.[][]@地址=数据
6 x5 m# j; a" s5 k6 R; M    第一个[]:$ p2 I- H- }; V( k1 @+ g9 D/ u* I
    o 表示ROM地址: W6 D) }5 c: {$ ~1 N* z- ?
    p 表示RAM地址
" d  i! q' H  A7 f
1 `- z2 x! i* ]8 V% X% r    第二个[]:9 D: U5 p+ k8 c% l4 X& i( j
    d 表示4字节
# i" s7 I$ z1 Q* V( n9 j4 t2 C    w 表示2字节
( M' ?3 ?0 l0 U0 b+ [" \  E( E/ F    b 表示1字节, \, `, o' W/ Q' f3 J0 }

" e  [. L/ y% v# X5 l/ `+ a- h    例子:
- l- r# s0 D, R* X9 G* I& T    maincpu.ob@1234=FF
- u2 t3 `& ^5 ^. e    在ROM地址1234处, 写入FF一个字节
, M( I2 i& X' {6 b# _7 q& V7 D8 p* l/ `9 S& B2 [. S" R6 ?8 c
    maincpu.ow@1234=4E71
+ c) ]) a2 V2 E- R# s    在ROM地址1234处, 写入4E 71两个字节
# {- t% G' H+ ^  f
: |, h4 B3 f! M    maincpu.od@1234=600A4E71# ~* h5 R7 E; y4 D
    在ROM地址1234处, 写入60 0A 4E 71四个字节, F/ S7 A+ @: ?- y
4 [! j/ B' A+ e- I; w  Q; \2 G
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& Q9 O6 C+ D: j    * l) ]" w. E  N
, D- c3 f& u& s. C
其他:
" W: q; a/ V0 e9 Q    dasm 输出档案名,地址,长度- Y: X# t0 O% d% E
    输出程序的反汇编代码5 ]4 z: W3 t" B$ Z
    例子:2 `  [8 K6 t& ~- o; q
    dasm 01.txt,0,1000004 L2 N/ z) N$ B8 W6 v
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
, t% S( M: O8 c; V  P5 ^- \5 W  |0 H2 G. O$ T) X# N
    softreset7 \/ M; [8 B8 m& q" d; V9 p
    游戏重启, 但不重新载入ROM
! L6 |  ^8 U, b' t' E9 P) N* L! E1 |  k/ R* ?7 m
    hardreset
7 n! n. E, ?: n# g8 W    游戏重启, 且重新载入ROM( s+ K2 ?- o7 s  x  |, o& v
. C( H0 m/ ]; ?( E  w+ y4 I, K# e8 |
    snap xxx.png
% w, F! }1 f8 i7 y/ O    截图为xxx.png6 W: h( ]/ w$ e0 N# P
: b" d! E& `! l+ V% e) v: g% A
  3 Z3 {7 M! H& Q
  5 o% _( s% }: y2 r& p* F$ r
  
& |# u/ j  h9 j; I: o+ L热键:
' A' f& A) s) p/ i    ~ 中断游戏
- [6 p" A" T: r9 T    F5 运行游戏5 g' F0 P1 ?) W) {  D2 A
    F12 运行游戏且隐藏调试窗口
& R0 `6 x- b7 {  d    F11 步入, 单步执行, 会进入子程序
3 r4 l* |4 C, ]2 s' ]- P    F10 步过, 单步执行, 不会进入子程序: X, ~$ Y6 Z9 w- B; O
    Shift+F11 执行到子程序返回
( _3 B# l) |. U: ?% Z9 j0 p    Ctrl+M 内存浏览窗口$ H/ u+ R& Q# M) R+ ?5 S1 y
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU8 \; [7 X$ r1 b$ _# y( m
2 _; K- w) J# a4 G8 D& g+ m& l
{:4_94:}
5 N4 [2 ]" ^; i) t7 {4 P* D# T$ V
* T. p7 W5 B1 _+ C. z8 y9 A5 r

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2572 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
1 u, M9 h# p' B1 u" j$ S
" B' q. Q; F  M' s' {. iPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
) ?% U, ]" y7 B  V1 h$ U4 a11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-17 03:54 , Processed in 1.139649 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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