EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

9 r# S( M1 n1 F# s+ R很快速的整理我自己常用的指令
+ a: X" _! @! v  Q% @
% r; j: P" F* a9 F$ m{:4_112:} # M; x% {% [* c6 P
( [' a" a' D+ {' i8 P
MAME DEBUG常用指令" M8 N3 p: c7 J2 l1 `* s

9 q% g3 _. z1 o  Y/ E! i内存搜寻: ci, cn, cl
! W- n% L5 Y# U, b* f; D% S% M' K
    ci' }' ]- j0 `) E4 W! T8 d
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' ]5 e1 x/ N0 [' P. L3 j" C9 M3 i5 I3 P9 _+ E- e" G0 |
    cn
8 D6 D! p$ r! K    搜寻指令
+ a; D: J( v! z6 V2 R    例子:
4 w! y: D/ Q1 _: c    cn eq,60
& S* s3 R/ E& n0 s# {, k% P8 V  R    搜寻目标等于60 (十六进制)
6 W0 Z& F+ U* Q        4 I/ R- x* j- m' I$ p
    cn eq,#96
, e# t7 A  c& A# {& t. d" {    搜寻目标等于96 (十进制)2 n) P/ |- I& j/ y" w8 h& H  o& @

) f5 [9 r; Y3 B& k2 g    cn eq
" O. N2 z3 e2 g' S. a  \    搜寻目标的数值没有变化% R) V2 O1 Z1 \2 d! M: C) |/ c
9 u) ]1 M; ?, n
    cn ne+ h, r# N; M% l; B7 X1 H
    搜寻目标的数值有变化
  b& Y" j6 b3 s( P9 L" D        ! l! j5 M5 H8 _8 L1 _
    cn +3 e/ o' u) U: O: e4 S+ B
    搜寻目标的数值增加9 C/ O2 W: O% c* ?) {: h
   
- `/ i& O$ K0 Z! U    cn -
0 @8 d/ b1 v3 i0 O    搜寻目标的数值减少& c+ h, v% R0 X9 ?
        
( e0 E5 r) U$ U    cn +,3; c0 Z% k" p0 A" K$ a6 g6 J, a6 t
    搜寻目标的数值增加3 (十六进制)+ s$ H4 l/ S1 {; `+ _: R

/ Y7 o: }" q  H2 v( J. Q2 I    cl
+ w0 ^; ?0 x! K; O& ~    列出所有搜寻结果4 @+ v) E6 {: ~' @

# ]3 ~! e2 T& _6 P; ^& ^6 j$ \4 m    cl xxx.txt  y' G* h! T+ F
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
! z$ S0 k/ R, a7 h6 D3 ~( e; _; z5 w2 J' n5 `/ u& R& K6 {, T. g0 n
   
7 ^$ O4 m% i* |) j# o  T内存监视点指令: wp, wplist, wpclear
7 ~3 F6 z2 s( q' M- h7 b: k    例子:$ c7 ]/ H  m8 X7 p: p0 W
    wp 1234,1,r/ p* u% K5 {  _0 f! ?# i& ^, c
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: n( Y+ [& Y5 j0 b0 _3 U9 E9 B
" H5 o1 o9 r, j( w! D
    wp 1234,2,w
3 k: J3 B. V) W. F      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度25 a4 `6 T4 E1 a# J6 y2 [
     / U3 m  X4 {" @( C5 Z7 h
    wp 1234,6,rw: M/ I0 N2 q2 I4 v. t
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 T( v2 d$ U9 O3 V# c& h0 [/ }
7 @9 q( L+ e0 R: `7 c8 P' i    wp 23456,a,w,wpdata == 19 `) x" \+ o0 f
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1# @) b* z% W5 H: g6 [" Q. H& B

9 |3 h5 u% w- |    wplist
" T3 m* j: p1 b4 z      列出所有监视点
) S( [  h/ @) `1 T/ b* F6 y8 E1 N; ?0 o6 [- D  P
    wpclear 3
- |: m" O2 V1 @+ P5 ?      删除编号3的监视点
- \" W/ P( g( s0 K6 h; i: V+ R+ P( ~; m" w
    wpclear" E- N) Y# O( R1 s8 ?2 |
      删除所有监视点
1 @& X2 B7 |$ ^, o6 k
# c' V) R+ o9 F1 C- a' s9 q      # _+ x: [5 r8 y5 L$ D* u

9 w3 d8 G  x7 o0 Z程序断点指令: bp, bplist, bpclear3 q$ r3 I& D/ N3 P+ t) l
    例子:
- G8 t) R, f# a    bp 1234: d3 ^; J' Y2 z* @. j
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, I* g- B, G" E" t$ L' G1 |  q0 R$ \  [7 }5 D+ g  b
    bp 23456,a0 == 0 && a1 == 09 p0 }. n6 h5 p  f5 p" h
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
! M: s! k1 F2 f+ q& E6 K
& s5 g: e' n& V9 z$ E2 O    bplist7 D: _; H' y* v
      列出所有断点
: C/ e1 J- o3 y0 T2 U8 [: r
" b6 _& t3 D3 n) r' H8 T# \9 e' j    bpclear 3
5 I3 V9 Z* d/ {  r; S      删除编号3的断点3 q5 k' f; }7 z# j! v  C
+ F6 D% L" z  Q5 a
    bpclear
! n% q: {5 h- _8 T" R+ p  I3 U2 k      删除所有断点
( m# k1 ^. T+ [6 ?. S. c
* e( ]* a" v* I/ c5 l      : N' Q5 P+ @( x+ q1 M
      
/ ?6 @9 ~8 k; p% C/ R跟蹤紀錄指令: trace
. ]# Q# y! }3 L, {% e8 n6 J    例子:
# C6 g8 \; h, W6 I6 _/ r/ [    trace 01.txt
" D% l# ^5 A8 L; D7 j) X    跟踪当前CPU运行的所有代码, 输出至文件01.txt  b; k( {; k# u9 V
8 T) X4 _& `+ ?; x1 l7 K+ N
    trace off
+ W  u; Y- r6 I  w, t7 W- U2 f    停止跟踪, 并且关闭文件9 C; O& f# j) W* h/ b  f% R
0 ~% Y  D* O, p. k) v
    trace 01.txt,0% w" v2 T' M: H+ O
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* l- I% G/ j% _: p& X: t! l" Q( @. ~" W2 I# g# ]" C
    trace off,0
. H- H" j" {' W    停止跟踪编号为0的CPU, 并且关闭文件0 i9 F9 ?+ t, i
" d% @! i5 i; I# p, c
    trace 01.txt,0,{tracelog "A=%02X ",a}* a/ |3 R9 D% S- p
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 1 P: y* Z8 u2 ?1 a* q5 s. c
    并且在每一行的前面, 写上"A=a "4 Q  O! L, z1 |/ q8 [6 m
    "A=%02X ",a为一个C语言printf函数常用的输出格式7 E+ C* Y% J4 i# g/ u; H( y" k* }
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 d4 P- b( Q) [( k! |    X表示为大写十六进制数
( N0 t. ~4 F- u6 Q# O: I' [4 k. Y, k8 R3 \

5 V& ?# l* m' `, m0 Q: F
5 T3 S6 M% _# C3 Z8 J内存直接写入指令: maincpu: ], B) i- c2 {2 Y' f
    格式为 maincpu.[][]@地址=数据* Q7 T' K2 x. y' W4 T7 e
    第一个[]:
. S/ M/ [+ O9 B3 \" O    o 表示ROM地址
. |5 |3 H% z* m8 b9 @: L6 [    p 表示RAM地址
5 y7 h9 Q) ~# J6 H
" ^# j* Z4 L: X' s/ }    第二个[]:" M, S0 _- `) F
    d 表示4字节
% A$ `% f- d; b5 }% m4 S    w 表示2字节
' U; Z) a" E# \6 H8 S6 F4 A    b 表示1字节  S7 H. z" a( u! K/ b  }# o( \
+ ^: R. R& u% }' f8 w. B: b
    例子:
& B, l% N, y2 m: \8 R% `1 k" _    maincpu.ob@1234=FF' z3 W4 b; d# b! ]
    在ROM地址1234处, 写入FF一个字节# w1 W, o& o2 t/ D
$ y/ V- \: o9 N8 v: ?2 P7 T
    maincpu.ow@1234=4E71
! r& K8 o7 s8 w. x# U! k! L    在ROM地址1234处, 写入4E 71两个字节3 z  j- S" L1 }* D# \/ w) U

5 }+ e" m7 n, Q& f% A$ \    maincpu.od@1234=600A4E71
7 a1 J( O! z' K/ c; Z" G8 w    在ROM地址1234处, 写入60 0A 4E 71四个字节1 `- J$ y% @: Z' V; Z: r

; u6 N- Q: \- N8 H+ F    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写& P. E7 Q0 R) R2 e: O3 s
   
% I5 C8 e8 p+ c6 u8 j- A# p
& I5 i; x2 E) V% M3 K7 r& ?0 G其他:# u) h8 F  }& H& m
    dasm 输出档案名,地址,长度
* B2 r( z1 D$ t) h6 T4 |6 J    输出程序的反汇编代码
, A( J$ [1 ]5 H* P3 r& v2 ]1 v+ I    例子:
, c/ Q) b. e2 P    dasm 01.txt,0,1000000 o4 z$ I! W( c; L
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! l" L+ B8 _7 C  I
) b. a  S% n4 @: L6 a    softreset
+ f. N- _9 d( l    游戏重启, 但不重新载入ROM
. F) T' A6 m: Y4 ?+ Y, B: a$ S! A7 e2 y8 J1 Q
    hardreset2 }% p7 F5 M- P/ ?/ }4 D
    游戏重启, 且重新载入ROM
/ R: `4 {( _: N) f6 b5 _! O0 ~, M' t! V# A$ {9 E) W- c' h# X
    snap xxx.png! s" D/ k% {3 z& Z6 e5 I; v6 p8 R
    截图为xxx.png
; e* @5 l/ ~7 Z  B% m5 C/ Q' Q7 o: h; z& B' ]( d5 z  g
  " T1 R$ h+ B- j
  * N( {. @3 l2 J: ]  |3 H$ v4 G/ ~
  
: @+ Y! {1 a' y; G6 x2 P& {热键:, e+ N% n9 o/ T# Q
    ~ 中断游戏
8 O+ j8 _& H( }    F5 运行游戏6 ~* M: _4 {+ e8 D! D
    F12 运行游戏且隐藏调试窗口8 Q1 U( v) N* ^: v: F( M, r
    F11 步入, 单步执行, 会进入子程序
) f$ L" j# q: N( p    F10 步过, 单步执行, 不会进入子程序" b) W& M+ D) M2 N) ?9 I: J5 K3 K1 m/ w
    Shift+F11 执行到子程序返回' Z/ I+ l# T9 V0 k
    Ctrl+M 内存浏览窗口! m8 y9 X  T$ C+ `8 X! x3 {+ }
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ F# D) ]( f+ C) G& Y; ~  x7 U' e1 z& W8 `- N; Z+ y
{:4_94:} 0 H) M  O$ _* x1 A( R* Q
4 k+ V: G7 D5 w7 Z! X6 z1 F" `

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2581 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。, E+ k- e0 m" m! H) j9 V
, [, L* ?/ t$ g& f6 v! J- k
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 | 显示全部楼层
要详细些的东东, X  K3 |2 g" s2 ~6 [/ a
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-19 14:16 , Processed in 1.067383 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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