EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

/ V. Q+ g0 o8 @* x很快速的整理我自己常用的指令: l4 t! T/ E3 ?1 V9 P# Q
" v& E# W: j" |+ w" q( b
{:4_112:} - D9 y! I2 `7 @
, T1 _1 m- _# l/ q8 u1 c
MAME DEBUG常用指令
0 v$ e  P1 w3 e5 V0 ^( @$ i* n) U) u% d
内存搜寻: ci, cn, cl
8 V" O' d) ?0 D6 r! \  ~. z2 k* {! {
    ci
! B) z( n1 v% y6 W0 M6 x    搜寻任务初始化, 每次搜寻一开始一定要输入这指令. V% x0 `1 x' \# ]) @( r$ _4 m

# y6 z) b& y3 }% x3 W    cn. J& [7 o" m2 h4 E' s
    搜寻指令
+ A1 d# y5 ]& g    例子:
" }  Y5 r- j( M5 h    cn eq,60; b& P7 }+ |  G+ I
    搜寻目标等于60 (十六进制)
/ Q2 b1 ?6 W% h& `1 o( f; |4 S        # f1 ~* z: F" u# ^! d
    cn eq,#96
2 ?! v3 @: h3 v% O$ H) q    搜寻目标等于96 (十进制)
+ V1 K0 ?4 o/ e; F' ?; L* x7 Z. ?0 H( z6 Q$ A6 p
    cn eq- w3 D, T) e* N7 y3 T$ t( G+ D
    搜寻目标的数值没有变化
2 r6 p5 x' y# f% r  T6 S6 w" D4 f% x7 Q0 t- ^: I
    cn ne
+ H; h; {5 X3 N" u, |% G2 o; ^    搜寻目标的数值有变化
. i  d  e- J+ J# V, |" K& F# E* i+ L        ! v4 k: m9 t% Z) I( V
    cn +% \( N% T; ]4 r2 w+ C' N% ^# q
    搜寻目标的数值增加2 {8 B! b  Y# _  N: u6 U7 d: k
   
; Q) i$ H3 v: V9 _* g    cn -
9 ^2 U( l$ @2 X+ k! w6 p    搜寻目标的数值减少9 r/ l4 r$ I) [6 |
        9 i# o4 N9 Y: J' X$ ^" r
    cn +,3) M) l# W% X1 O6 h" E
    搜寻目标的数值增加3 (十六进制)
% d0 e( |8 a8 F; @! j( R% k- T: K+ Z
    cl& A8 ~8 s% x/ C# E
    列出所有搜寻结果) }- G' k( o; e7 ^! \0 G/ O, P& Q
& b  c  ?  [3 @3 C% F$ F
    cl xxx.txt
" i1 `) K( ^, H- J4 R) f# i, M    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式8 w  l+ L3 \& a/ p% Z

3 }0 _4 _6 a7 A& m. [   
% O  Q9 K" L7 I* R内存监视点指令: wp, wplist, wpclear
- ?4 V: c4 y& ~) y7 ~4 |- D- p    例子:& n9 B! k; f0 @# ~
    wp 1234,1,r5 \/ A6 w( C) ~+ n! T& k7 F
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度17 @- M+ @5 L: ~; x) j1 k3 Y

+ J7 z8 \* q, G( `7 H    wp 1234,2,w0 S% V3 `7 O7 l0 Z# i- t0 W
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2' R6 k' \6 a0 X5 r$ B- B$ A+ g
     & y+ Z/ K, O$ [
    wp 1234,6,rw  G3 z9 t. K" ^9 I
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ `6 Q+ j& {$ h9 }5 x7 i+ L- a

4 X9 O( U7 v- h& w# H/ ]5 w, A    wp 23456,a,w,wpdata == 1
5 w3 U! n5 O0 U+ l! f: O8 f      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
1 A0 P( O/ J4 R2 _  ]* L  H1 ]3 s, ?" O5 m. Y$ N6 r5 A1 s
    wplist* q! o  H- @% u/ u* O, j8 p; o7 A
      列出所有监视点
( Z2 c7 E: `$ B! s" s% A# F3 K! d5 |' Q& F; D( u' |) A1 B: ~- _
    wpclear 3
1 j9 C/ G9 s% S4 I" ~; {7 N      删除编号3的监视点4 w) w, q0 K$ ]8 P2 b# j. P

) {, _0 `* C5 c/ s    wpclear
. U: ]% H" ?5 X* {      删除所有监视点5 i& Y' j7 x$ J) Z
, R# {6 f. i& a8 I
      
6 n4 [6 q" E9 K: X& V, \8 L' `( J5 V
$ o" m; D( n7 S7 E3 u! f程序断点指令: bp, bplist, bpclear+ E9 ^4 i- L0 {( Z' h
    例子:" x" S0 ]! c2 u! J1 C6 \
    bp 1234
$ j2 k4 ?/ i' y' g4 q( z. [      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. o1 |/ `6 G. T, H+ u
/ j# u( A% ~* W/ @' {( g    bp 23456,a0 == 0 && a1 == 0/ w$ ^# ]+ W" e( J2 x% i
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
* K6 r5 A( L1 @
8 v  M4 K* L' K    bplist
: l# Q4 `2 r9 F3 N      列出所有断点, z& b% p# j5 ~6 X( a- p

. M8 H7 j" }. s1 M) h    bpclear 3) K7 q9 E3 Z$ Q) @
      删除编号3的断点
& U4 [* N  U' N4 R! d1 U$ w5 G9 f0 _8 {4 z; p2 Y$ c8 U0 {9 V
    bpclear; q) e- O: f& u( j  j  y% Q: J  C
      删除所有断点$ G: [$ J8 `. S# P
+ ]7 O2 ?+ T1 ~- B; u3 E, T" G, b
      4 p# c/ |4 r# C) R, @  ?
      $ M+ a0 b6 V/ }
跟蹤紀錄指令: trace% O1 S# r% p* P- p* ^' m( V$ w
    例子:
1 i: r/ \+ ^+ o0 J. j    trace 01.txt
8 c5 R+ T& r* y    跟踪当前CPU运行的所有代码, 输出至文件01.txt6 L. b1 j' D  h/ z+ I

$ x# t% ?, _9 b; X$ R2 ~    trace off
( L! Z. j- k7 y/ n5 x7 a    停止跟踪, 并且关闭文件
  h1 Z( C3 y8 u6 P
+ Q1 l6 r  m8 O3 _8 b7 a+ q2 F    trace 01.txt,0
. M9 X6 m8 O6 t# @4 O( k$ ?! K4 h# Z8 c    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* G  ?2 m* k$ l# s" L4 E  Y" P+ E
9 g& y' y# r4 n# k) H
    trace off,0
+ R" \! A! s$ \* C: A    停止跟踪编号为0的CPU, 并且关闭文件5 H0 I% Z$ f0 R3 z
) n1 g- v% G5 b" W/ L* v) A1 w  o
    trace 01.txt,0,{tracelog "A=%02X ",a}, |% c6 P/ y& ~* s/ I2 y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 2 W, {3 t/ w7 ^+ \6 R% l
    并且在每一行的前面, 写上"A=a "
6 A+ {0 |- N" |8 }; R4 ^    "A=%02X ",a为一个C语言printf函数常用的输出格式$ ]/ I9 @# L% I4 c* l- H0 U3 V0 c
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入9 j7 ]$ D! v/ y2 f7 b; h9 O0 O
    X表示为大写十六进制数, K9 L) n3 O6 z
& e5 j$ m" \6 H; k2 }
, @: y$ T' b' n

- {2 k' P- }, ^8 j" d内存直接写入指令: maincpu5 L" k. E7 E9 o3 @: q1 m
    格式为 maincpu.[][]@地址=数据  j0 s4 w. W- T( ^* o
    第一个[]:
1 f. A  |0 t- ?    o 表示ROM地址
2 f% r8 A' W& @% h! h; ~6 E    p 表示RAM地址
0 F) I- N. T& u5 q1 N
$ K- j1 E6 v' H4 i" h$ f& Y' F    第二个[]:
  j+ W$ K! A$ m) d5 ^# i    d 表示4字节
; n1 _0 L3 e' y6 [( E/ \    w 表示2字节& X$ g% d5 ~' |9 \1 L
    b 表示1字节
: w) U3 V# O% q8 r/ g5 Z1 b1 f8 o3 w' r1 o3 X  w1 m& w$ }6 i
    例子:
) {0 K2 i% B+ \, D& _8 X    maincpu.ob@1234=FF
4 ^; p* {  {& ~$ U" _/ ~    在ROM地址1234处, 写入FF一个字节
: P/ f. |2 q. r/ H+ R4 u; K; r: Y6 c+ @
    maincpu.ow@1234=4E71' m9 O% H3 f/ O
    在ROM地址1234处, 写入4E 71两个字节( R$ q( {& O6 ?
7 U  p. [0 g& o6 F# T3 N6 s
    maincpu.od@1234=600A4E71
/ P! x3 a3 ^! V# m) X6 G. U    在ROM地址1234处, 写入60 0A 4E 71四个字节
9 v+ G$ q! M! o) Q* H- l5 p) @5 K) L+ F4 r: |
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
- t/ D+ U5 w) X    - l/ _. w$ g4 C$ C# {
+ i' S& [( P8 U$ n! F
其他:: [- o; {' {" z5 }+ T- c
    dasm 输出档案名,地址,长度
% I2 v( c  p' C7 _) k2 v! o; L: h5 P    输出程序的反汇编代码
- V; |3 H9 H* T# x    例子:
! f, S) P! }* O) P, d! h# K    dasm 01.txt,0,100000
! x2 @; ?5 c& s# k5 L3 ^% L! x6 k    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, }0 v# u4 r4 S; y2 K

4 j( Z* L) h5 C, f! T1 Z; t    softreset0 P3 L" E. }. c8 N6 E, c
    游戏重启, 但不重新载入ROM
/ S) ^, C& Q2 I' H, g( A6 k
1 ~( F: _  }1 Z    hardreset# l9 o$ X* Y& \) g1 t3 O4 A  J
    游戏重启, 且重新载入ROM- \' G  ]4 B. G& k$ r

& B) `+ t- J, n8 u8 ], N$ ]    snap xxx.png
7 ]  N1 e$ A0 s2 F0 g' B3 g4 `    截图为xxx.png
5 o& A1 J' Z4 G& N: ~# V- l/ {! v! V
, ^$ N6 [, t* [& Y9 J  
; Z9 R& k! c  k+ w  _. e  `  
" I6 j4 Q, y, E# u% X. J  
, }2 `6 {4 ~0 X5 B6 C# E' }; D热键:* }& v8 m3 G5 o5 x$ b
    ~ 中断游戏% ?  ]7 S+ b% u9 d
    F5 运行游戏9 p9 Z2 D: l5 ?- {* z9 k
    F12 运行游戏且隐藏调试窗口5 c6 x( x7 M' z* }* \; o. N
    F11 步入, 单步执行, 会进入子程序: ?6 {2 h2 T& a2 L* h+ ]
    F10 步过, 单步执行, 不会进入子程序- T* |' F' t" V9 c4 z0 N6 d: s7 @
    Shift+F11 执行到子程序返回' a. }9 ^, f& l+ K& ?
    Ctrl+M 内存浏览窗口
( y* d( \8 m$ X9 F$ P$ ]    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU8 J# i* \/ s  w5 r$ j% H4 e1 j

* T. o4 V+ z+ F$ A* d$ k& d{:4_94:} ; m3 h( R2 V; X* Z0 Z! z; _/ C, A

  w0 t  P6 V3 A% ~7 ^/ J" s

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
: W% ^9 @0 ^! m- N* n0 b, z+ j
& b( Q) \% k: ?4 c0 W: A$ ?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 }5 R+ I$ e; p6 f$ ?
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-2 12:56 , Processed in 1.075195 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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