设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

8 J- Q# ]+ X, l" r% j9 z+ d* \, x5 W很快速的整理我自己常用的指令
2 u! Y* s0 Y+ n5 L
9 Q) ~- V( k) L7 l0 }7 f! V{:4_112:}
; p( p/ f4 Y# d/ Z# f* ~0 y6 y
# r4 ^0 r) |  H2 M$ O; mMAME DEBUG常用指令
5 w. B9 Y. G1 f' U+ v" y* J: L& W& U4 f4 _
内存搜寻: ci, cn, cl
8 S$ a( [6 a# X; |; X+ d) U5 n4 T4 ^4 S% v$ r. i$ z
    ci
  s' e; I6 B0 C! d    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
1 [+ i# @$ }% g8 d5 t" u1 P  h; K/ Z& s
    cn
  b- ?; A( I6 B) P# ~    搜寻指令; z2 m3 @# M7 _$ V& C
    例子:
' l9 [& ]# _* v) |+ [# S    cn eq,60
( E2 S) P  b2 q    搜寻目标等于60 (十六进制)
3 I8 ~4 D7 J7 s8 _) R3 k, }8 S1 P$ j( G        % L& J' b; {2 g
    cn eq,#96
+ {  o# f/ D0 w- |8 c) F7 A( |4 |    搜寻目标等于96 (十进制)# a) x; B8 I9 x2 _) K
* ?/ N4 w5 N7 r& `" R$ Z" `
    cn eq
# Y2 O* W% n! L# Z; t, [' ]    搜寻目标的数值没有变化
4 v8 I0 n3 y* q9 o* j( F  P) W  z
" f; c! O+ f, _    cn ne0 e- \8 h4 l& C
    搜寻目标的数值有变化
" \, n& R2 K* v* p8 l# k        
' S) _9 L7 G4 t$ ~' Q  Q+ F% h# l    cn +
# M! ?5 l; n2 G& M  Y8 N; C    搜寻目标的数值增加8 E( |8 u3 N7 B+ [3 H' v% |3 v; P
    . z. H' o3 P3 v1 }4 Z
    cn -
. B- J3 n, N5 _) E6 I    搜寻目标的数值减少
& {' `8 Q6 l! e, O7 ~8 H7 P        7 G# [: Q3 S) {4 N4 T
    cn +,3$ P2 Z- e  x, w  r$ T. r; g
    搜寻目标的数值增加3 (十六进制)
$ [! x/ d9 ~% i- W# P# T# h+ z5 W$ e* P% o- F9 N7 C
    cl  B. G5 ]) B& I7 f
    列出所有搜寻结果" c" |6 \5 L- G

  c4 p; H: d9 I( I    cl xxx.txt
( m0 J2 V' [3 c1 Z! j" @) x    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式4 o: `4 c5 _3 P% a1 e" X2 b
. J% }) B# L1 m& h( P6 O
    - ^* Z  @0 h1 I- Z. D. i
内存监视点指令: wp, wplist, wpclear  `* V( @8 {9 ], E3 w
    例子:3 j: A. S# L# k6 Z" W- L, A
    wp 1234,1,r
, O+ x! f7 N+ P      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1  i0 m# Q' f# ~* h! @

- j; Q+ l& @; Q! U, _5 U    wp 1234,2,w
3 f9 v/ u0 d# _/ ~: A      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2' _5 {1 t2 j+ ]% U2 J, m& c5 {2 a3 C
     
% C7 L7 M/ [" U" h4 d) K2 N3 I    wp 1234,6,rw
/ W: T0 N  D) \, [( [9 w4 x2 G      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 l! L- w$ H( F' _9 m: R

% s4 n1 U1 @) z* S2 A# m- U) f& X    wp 23456,a,w,wpdata == 1. y0 N2 h6 r) o. B* T
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' g7 n' ~7 x* z8 ?2 v7 U& A8 {
8 Z# N& Y9 F2 o5 J* S
    wplist1 i$ {- z8 x) a1 l. W0 L. {- q  L7 @( }
      列出所有监视点
& Q% ?- }; ?$ H* g5 u2 B- X) X; n! I& x9 R* ]3 F
    wpclear 3
4 V: J. K: e# ^4 T. \( @      删除编号3的监视点  x  V( U! h0 z5 X5 G& d9 h" r1 ^
) U! x; P0 w! A1 b
    wpclear* @; r0 J2 X8 [8 g  T1 F
      删除所有监视点
% S- Y  M4 x6 @# I- @% v/ F$ [
$ B3 X: c% w. U5 C: }3 o      1 g1 |# f' h3 ~: p  U  k. t
% \& e& n! `' {* x2 V
程序断点指令: bp, bplist, bpclear. N/ c6 ?  x6 Y4 i  F" ~3 @  H
    例子:0 M4 s2 t& o. z) G
    bp 1234
+ K' x2 P- d8 c+ Q2 Z( h% D. c/ c      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) |2 J- X4 D% i, x
/ l7 n# a) |5 g    bp 23456,a0 == 0 && a1 == 0( a7 e5 E3 K! U7 W$ B! A' q8 S
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
; B7 B" W, ]3 V/ _
+ t4 _# y( A9 v    bplist5 d# B' U; }4 S7 f2 H
      列出所有断点- W% J) ]8 C3 P7 x

0 k3 V* a- C) m9 S    bpclear 3
: P! Z( D8 |* K3 u# E      删除编号3的断点
) }* C. T: V; _# O& f" B8 y. A' w) T4 S7 h6 U- k# u# a
    bpclear0 W2 Z/ P; J  I- @+ a
      删除所有断点2 ^$ b8 U/ B4 ?$ W- @4 r
7 i- b5 Z, F& R+ k& @4 r3 h- s
      . M0 {( X5 a/ l# s* t1 S) F
      
- Y4 h+ \) M8 ~# j. R跟蹤紀錄指令: trace
/ V. b: T2 P, A0 B0 I# k; P    例子:: P, O7 y7 t& y$ D9 A5 ]. t% o' a
    trace 01.txt! M9 C# _% G0 [. d6 |; t
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
2 K+ m! D* U' K, ?' \4 p6 G, g0 O$ e1 I+ u7 h8 b! d5 |' _
    trace off
/ f( K3 w) ?/ n4 u9 @4 T0 j# N    停止跟踪, 并且关闭文件
) r% a0 v$ ?* i0 T
4 G+ z) W% |2 i. p    trace 01.txt,0
8 H( E8 Z, w3 {: |0 j# T    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* K# _8 p4 k' Q4 V% O
3 ^9 g8 t0 {! h' y) p% U: _    trace off,04 p3 C& i$ Z- W4 i, v4 ^, h9 Z: z
    停止跟踪编号为0的CPU, 并且关闭文件
8 |. p' T. _$ U# Q& d6 s/ L4 B/ M: s5 P$ G
    trace 01.txt,0,{tracelog "A=%02X ",a}
; Q0 p9 j( n; T7 n. H    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# w' e6 A+ |; a2 O5 O2 V. c; T5 J    并且在每一行的前面, 写上"A=a "
) ?# R4 j4 A; a) Y5 X5 i4 m/ q    "A=%02X ",a为一个C语言printf函数常用的输出格式  u0 A, I& N. S# a
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入6 A5 ^1 b6 `. o/ y1 H5 x
    X表示为大写十六进制数0 l; y# m( Q& p) s
8 M5 m% c: n/ e
, g$ U# d) M& M/ _. b

3 D5 F1 e& J" Q5 K: J内存直接写入指令: maincpu, J* ~) j- F, v% Q" V. L
    格式为 maincpu.[][]@地址=数据
; j5 g) c, P( j4 d; I6 p% q    第一个[]:
2 ]# {6 d* M! T0 ^6 Z; P    o 表示ROM地址6 j& I. F2 v3 f7 m# B) W; h) c
    p 表示RAM地址* z( V, [5 N; s

) X6 l! q( A& `( M4 b% P3 U* @    第二个[]:$ D3 f1 @# c  a; O8 Z
    d 表示4字节
7 k1 o; @' Z  ^7 M2 Q5 c    w 表示2字节  A7 Y0 p. B( K3 G  j
    b 表示1字节+ T& J  a( V1 U6 N

: e+ n6 Q: d; i* v, [* M' D7 w6 l    例子:: `4 W1 m: {  F& g' m
    maincpu.ob@1234=FF5 z9 i: f/ D& B+ s; s$ A/ t, p
    在ROM地址1234处, 写入FF一个字节
7 _  l: u& U3 a4 s! y" |- C  o$ w. p* z2 w9 f$ H" B6 L
    maincpu.ow@1234=4E71
2 H7 f) U# ]( ~+ }9 \* g- w% k    在ROM地址1234处, 写入4E 71两个字节( D7 x  z/ l( ?3 A
/ Q7 c. C& m* d
    maincpu.od@1234=600A4E71& k2 r3 ?9 p2 X6 `" M
    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ q, ]+ |9 G/ u  g  v4 c+ f6 s# \1 E! ~/ s, C  o' Q8 o/ D# y
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& P+ e' k5 d1 ~! M; D) C   
6 A6 ~9 y; o+ j& b
! Y  \9 V9 t# O其他:
0 _7 k9 P2 f  G    dasm 输出档案名,地址,长度' A, c% V8 J. g4 R4 v8 t$ L) f
    输出程序的反汇编代码+ h. F' v& V( v  h. ~" O
    例子:
) C$ Q: x+ z. D0 }  g/ x% {6 P    dasm 01.txt,0,100000
& E& L, Q. v" V' X( J    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt% D8 n2 x. i: \/ g% F1 u7 u0 r
; f% @/ {/ W$ |2 D, A" \
    softreset
! ~; q( B. Q2 X! t+ u% c' B3 \    游戏重启, 但不重新载入ROM
. Z0 S9 U. x3 k* B( g* j0 K) {- j0 q$ Q! i& ?: i1 I) c  e  H% I) }$ P
    hardreset
2 u3 \) n8 Q6 v% C* G) x) r2 S. O    游戏重启, 且重新载入ROM9 Y: `' t8 D- q: j. u9 Z

8 r( y- t) |- F' U7 q# \" A; ^    snap xxx.png; I5 T1 S# f1 z
    截图为xxx.png
, O. X" ^7 _3 Q$ j  l
' m5 l* O2 K( O. z2 R  " m; u/ q5 B' F' R+ ~! z+ B
  
9 a! `( U8 r/ |: g" \6 e& ], V+ h% l  , n# F* N! ~( G
热键:6 Z9 F9 e9 I# w2 J" w; I; m7 t
    ~ 中断游戏
6 `3 d) ]$ N* ]. D. _/ G    F5 运行游戏
, D/ S; Z3 q$ Z% Z    F12 运行游戏且隐藏调试窗口& @- g- J5 a9 ~# I
    F11 步入, 单步执行, 会进入子程序& W- u$ Q5 N9 U: S0 H1 K; ^
    F10 步过, 单步执行, 不会进入子程序
: Z! k* l0 n( e- K0 x3 Q! H' K# C    Shift+F11 执行到子程序返回
- _0 M" `4 f. d/ ]5 E5 G2 Z    Ctrl+M 内存浏览窗口: D3 r2 Q% k4 r- G4 B
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU* H6 `7 i4 A3 Y( A1 d! F

& ?4 U  g5 x" J& V+ Y{:4_94:} ' }) ~: n6 w8 \/ n
1 q4 u; y4 c8 h5 F

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2561 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。, `/ H& W# z& i; C

, X1 |- s, N% ?2 c+ I2 hPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 u; m% g# n1 F# g  Y11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-6-29 14:38

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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