EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

+ |- m4 g" G7 \2 {$ q# Z- ]很快速的整理我自己常用的指令. h; n7 a) G; ]& {" H" X" B
% y4 P5 N  n4 n) Q( e
{:4_112:}   N! }. E5 Y! X' J5 I
. q6 B+ f, R" E/ F$ J
MAME DEBUG常用指令
6 L# j! T1 x, f3 l8 e
: q# ]( P8 @5 `' e3 r内存搜寻: ci, cn, cl! D7 E5 N% }1 Q' N; w* S' x- Q

0 z# O# X, {+ \9 l7 Q) Q/ C    ci- N$ A7 U! M3 O8 [+ h3 \2 _. T
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令" V8 \  u$ P" Z8 T$ O. h7 B+ i
+ l/ C+ J7 E# j4 T; @: J1 B, f
    cn, t9 E. ]! v% K3 S( z1 J
    搜寻指令
- n9 s- ~( w( Z# u' X    例子:0 A+ Y# ]: W3 @5 l& f
    cn eq,60( I- }- x4 F: R' b
    搜寻目标等于60 (十六进制)1 n1 m+ @/ d3 }( C
        ) n$ Q+ i' d: c$ Q# o' v4 q
    cn eq,#96$ D! \0 U& E, R& x$ C9 s( m
    搜寻目标等于96 (十进制)) m0 [6 J5 }" k1 O% q

) }# W& D4 {2 s  c- K, T/ h    cn eq* y( B4 y8 i5 Z& Q
    搜寻目标的数值没有变化( [* S7 d3 s  q3 @* {
) c$ d- ^3 M& d+ {! W" ~  j
    cn ne3 ~4 y1 {/ B: D
    搜寻目标的数值有变化
, E9 C3 ^# l' m3 R" l        
0 |3 a1 n0 R" ^$ {    cn +
. |* @& E" r, j7 V6 \    搜寻目标的数值增加
8 W# D; X8 w8 u5 }! a& Q3 p   
* E4 ?) i- Q7 z4 K6 N  q! V/ ]; |% J0 ~    cn -1 H' i+ c' I. J( H3 \& \
    搜寻目标的数值减少
: G' B  p# q8 F" w* ?2 o# a# s        
- y& i9 q+ V, m' }    cn +,3
4 T7 L: M' K7 ^9 y3 s8 u8 \3 ~    搜寻目标的数值增加3 (十六进制)) W# M! D/ W1 o8 w
, o1 _* h9 W3 m2 K) d9 N
    cl" S- b. ~- A- Y+ [' s- N6 |6 c
    列出所有搜寻结果5 x/ O5 R6 c5 W0 w( k8 Q

- i! Q' L, @6 \! Y! F6 z    cl xxx.txt
1 s6 t1 Q5 w3 G    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 {. o. R+ i, x: C" v" O
! k1 z" x, C# X" C+ b* L
   
9 X" a! t- L5 y1 R内存监视点指令: wp, wplist, wpclear2 e' U; {" t4 `
    例子:
; t$ B+ q5 P; P8 \# v. H    wp 1234,1,r
; B# n# Z1 K( d" [$ O      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1+ I# E; c" Q% d5 H( I$ j

0 }9 g4 J4 ?; X6 i2 |; p9 k8 O    wp 1234,2,w
$ g5 n$ r  Z( j6 `) \+ ]      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 I% i' \7 n, x. G% u2 i
     0 y: Y8 U! L1 ^' o5 y4 E, q1 z6 B4 e
    wp 1234,6,rw
8 m) V# Z* n2 d2 j# J! d' f% D      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
- w9 D/ R. C) \6 e( n# ?! q9 u1 S- M. P3 s# I- M
    wp 23456,a,w,wpdata == 1
0 C1 Q9 S) |5 i7 A      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ N! X0 s- a& [
* @. n; Z3 z$ J    wplist
9 V8 d" x; B- J2 K. C, ]( G& k2 ~      列出所有监视点) T3 K" t7 B7 z' x# V3 y
, U) w/ |# g6 T
    wpclear 3' g9 h3 [  B5 _6 p" F: x
      删除编号3的监视点
. L0 b2 H1 i' h0 |
  X2 l* o. A1 k" ?0 ?) m" _    wpclear! ?1 x0 Y+ e' D( n) N
      删除所有监视点
. G- m) O0 ]8 w9 l, E+ S! o7 V2 b( d, u  T# k1 l7 m$ x7 o
      
/ p9 V: h' a; N# Q- t3 l# o3 ]+ Q  S) _7 V& o
程序断点指令: bp, bplist, bpclear0 ~4 \0 W( K" ?! }
    例子:
$ Z& M" |6 [$ y; W, T    bp 1234" B# T# `, `9 |& Y6 q' N
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 [+ j' f: q" G
- s5 ]$ b1 V, m4 h    bp 23456,a0 == 0 && a1 == 0# @& \9 `9 e$ |3 E
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
  L7 |( z( L3 ?2 h+ Q8 s. z- W' R. E" ^8 L- o  z" V
    bplist
( `$ f9 b. I6 T, m* \1 @      列出所有断点0 `* O+ U$ C3 U, _( ]" y9 @! V% k' o6 o
$ u% p: n# C3 Z6 k# u. Q
    bpclear 3! p' ]% k( A2 H; k. d
      删除编号3的断点& K3 E, q; W* T" y3 O+ D
, K# U& E- G& _
    bpclear
. P, X$ A+ c  N      删除所有断点
* J3 a; y  x3 ]4 o, o! l) h' I  s5 B" \6 W* g6 G
      
( e) g6 c* @9 @3 k* [* R$ I3 B      
6 e' B# X5 b7 K5 n5 m: v- A跟蹤紀錄指令: trace3 h; X1 X) V" l" t6 G
    例子:/ T1 T/ `- p8 Q0 y5 g
    trace 01.txt5 ]. I+ C8 z) V' w% k" ^& v
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
% v  [$ t6 l7 X3 E
0 C9 e2 y! @( q: ^    trace off8 `$ z: ^) x, [" k
    停止跟踪, 并且关闭文件
5 l4 m* Q! P6 ~+ ]0 w3 l; `4 Z4 {& V- n& d
    trace 01.txt,0' l% A- M. `- Q' ^$ ~3 X
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% ]: [8 M3 Q, `

: D, P" o* ^) u+ W; r% r3 m    trace off,0
2 O* T& L8 g1 y! D3 T% Q2 K    停止跟踪编号为0的CPU, 并且关闭文件
- U& L' g, ]& r$ T$ E0 s; K# S% q1 y5 {! j! `9 R6 l
    trace 01.txt,0,{tracelog "A=%02X ",a}
; w0 |3 S) c& l, U) Z$ M7 ]/ z) r    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
  s! T- q; \  e0 W$ U    并且在每一行的前面, 写上"A=a "
; w* K$ g. M/ v, D9 z; ~0 @    "A=%02X ",a为一个C语言printf函数常用的输出格式
, l, u4 q) R# s7 ?    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入+ Z( ?3 K# d* P0 j. a; U
    X表示为大写十六进制数/ e$ ]$ r; Y% J& M
4 O0 C% a2 |1 R3 s# ?

! m' t+ m# N0 S& ~; ]5 ~$ z% m0 [3 w- U) {; b
内存直接写入指令: maincpu
$ o2 j3 r" `& o% [. ^    格式为 maincpu.[][]@地址=数据6 ~2 B* m( t, a. W7 Y
    第一个[]:
/ s7 ^1 o- I! F& }# n1 A( g6 R    o 表示ROM地址
* W, _7 K, Q. n. L' f    p 表示RAM地址& B7 c3 w' H5 n/ M

; x- N2 u- L4 ~: S' v    第二个[]:9 \/ t1 ?& S& h$ i
    d 表示4字节
1 z" x9 e- @; a: C    w 表示2字节
- Q( E0 I: O* v4 ~5 v    b 表示1字节
  ]) q# r( r, Z1 I) @" D) Y% Z) ~# d3 L5 N+ h
    例子:# b+ i, k7 Q0 ?9 }: |
    maincpu.ob@1234=FF. i5 t# O& F4 i& f. u% B- Y
    在ROM地址1234处, 写入FF一个字节9 A$ K: }$ ^: r1 B" U# v# J

$ Q) l7 a: P9 H6 g  l9 g    maincpu.ow@1234=4E719 x! c: ^( i/ n, }/ {
    在ROM地址1234处, 写入4E 71两个字节+ d' w5 I5 D: ~+ r
. W" K. v. Q; f' o' M  R
    maincpu.od@1234=600A4E71
& I' c) l8 N+ b- h7 D3 D* h    在ROM地址1234处, 写入60 0A 4E 71四个字节: k$ R$ t, ~3 \0 o, I+ P

" p- P  F6 {; I+ u2 J    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
  k# v4 k2 Z* c/ G3 F    ) l" O5 ~5 {5 K! [) J8 O

; a; b4 P" m6 d3 M! l! `8 V其他:
/ T9 b, O9 E' r    dasm 输出档案名,地址,长度0 ~% v0 K* |2 l9 g% B
    输出程序的反汇编代码
2 l0 f' e+ E. G    例子:
3 k& f  H" ]5 P; e    dasm 01.txt,0,100000
. `) A! F7 Q# F! d7 ]4 m4 e    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, b) E( |7 Y: ?" _1 G) {/ m( p* C/ o

9 v4 O# b( g4 U) }* d! ?    softreset5 b8 r' r$ n- W" [! R% `
    游戏重启, 但不重新载入ROM1 W7 M: T4 D! x6 ^* C+ u& R
0 y- Y2 n* z: o* W1 d" q
    hardreset
# C! W) x9 j- r% `' n7 J3 y6 k4 b    游戏重启, 且重新载入ROM% X, t8 p6 D+ L3 C7 Q& w0 ]
8 l: `! c! |! ]4 H9 u
    snap xxx.png0 Q2 ?- C: q) S9 r
    截图为xxx.png# l+ ~, a; X5 I$ w3 x" \
8 U" @& J/ ?  m( P/ l9 i8 f
  ' y2 I5 H0 {5 X4 w* w' x
  7 @8 M! i+ J! z: l
  : \( O9 s1 N/ c: |
热键:4 X4 |; A9 H: A8 c5 A/ F+ I2 u8 J
    ~ 中断游戏
) j3 D3 Z! J: U& c3 A- g1 \6 E- R+ E    F5 运行游戏8 j# J: A2 Z# z! {/ i! T5 z# p1 w# q+ Q
    F12 运行游戏且隐藏调试窗口5 w5 x6 y: t! z3 w9 R" b7 s- E- u
    F11 步入, 单步执行, 会进入子程序/ \  \  G8 f( Z/ e: x" t
    F10 步过, 单步执行, 不会进入子程序& U% U1 Z: @2 v6 ^4 J
    Shift+F11 执行到子程序返回) z1 D8 _& P$ V3 O
    Ctrl+M 内存浏览窗口# `2 D; |. X$ ?1 \  A* X! P1 `
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU  |1 _; a" q! m, k1 `" q

8 e" z3 n% u, F{:4_94:}
2 r. Z! d) T! J+ J; K7 H. R! m- ^3 P" T) u

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。2 t0 m8 c: T' ?  J
2 B# `8 T8 X( m4 n
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 | 显示全部楼层
要详细些的东东' _5 W- f' ?2 G$ o1 _! |1 w
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-5 16:36 , Processed in 1.078125 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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