EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
5 \1 o3 P( b+ R$ L) t
很快速的整理我自己常用的指令2 u! T8 ?9 n% t5 c
! t* k" k# t3 x" C
{:4_112:} 0 X  [8 D  z' v0 A1 t5 f
0 A& q5 z1 F! ~' i/ A6 r5 b
MAME DEBUG常用指令
" @- I! h! P, V7 p' B; q' }: H5 V1 W& k% ]: K
内存搜寻: ci, cn, cl
6 y- g, O$ X1 w- g' H7 J. e2 e$ q% J
    ci
3 n9 r  L7 A2 @/ Z% c; K    搜寻任务初始化, 每次搜寻一开始一定要输入这指令/ \# R5 z# z# U8 B! j0 j

9 y: F: X* X% `( j6 g3 a& }    cn. Y* {* @( l( {9 @* u
    搜寻指令
, F$ h- k2 J7 e, X" A    例子:# f$ d8 u3 Z( I5 ?+ \% n3 J
    cn eq,60
, z% e+ J9 w$ r3 x    搜寻目标等于60 (十六进制)
' U9 a8 U' f  J        # i0 B, {4 N+ D7 D
    cn eq,#96
* U8 ?7 E3 {# V    搜寻目标等于96 (十进制)
+ n: q+ R5 m0 U: E2 U! ~! m/ N3 b/ t3 f% C9 S7 k! T
    cn eq
- W% _- |. s4 k    搜寻目标的数值没有变化
# c! F, b" I! I$ ?% T; v/ [& K% \$ Z9 W. U& [8 i
    cn ne
# [# M( E6 T) v9 i0 U    搜寻目标的数值有变化
: t# l* K" C2 p, I9 C: f, H0 h        
# A; V& ]6 ?+ q  j. |    cn +
. x! C: _5 R) r3 B1 ?# S7 B    搜寻目标的数值增加" F% d# K' E' ^- |, z
    1 N; I! @, t9 i0 Y0 w! K9 @
    cn -
9 F- Y; s# v' L3 j5 J  ]4 k    搜寻目标的数值减少
) \' q0 m) X: s, B. Q2 ]( P$ |        
& d- Z0 ^% e$ Y% n) z; J( o    cn +,32 W4 d, S* [2 u7 {
    搜寻目标的数值增加3 (十六进制)
; E) w8 v! |0 G. c5 O/ b; F/ _6 s* t( f' i
    cl7 J1 o9 u- a- E. \3 F/ N
    列出所有搜寻结果; E) q2 `2 P: ?4 J: E3 V
  ~. a! T) t0 g. p" @2 A
    cl xxx.txt$ ]3 j/ o8 K5 {. z4 T
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式/ M& U' R$ ~5 l1 S" ?. g

+ D. X+ n  P9 Y! K/ M' g  @   
( ^5 S. N9 U$ u  T. I. r" h$ L内存监视点指令: wp, wplist, wpclear
. Z2 p# y* w) J+ b- e) E0 V    例子:% `- l5 P) O. p% Z2 J+ d
    wp 1234,1,r5 U" r9 K, y6 v$ v# L& N
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ W6 Z2 l3 v3 Z5 N* B. I( M9 v, Y
    wp 1234,2,w- }+ g* K" P6 B# ^
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
. z( x% C$ x6 g' S# B( f. `! {     
3 b! @$ `; ^5 m* Q& `! T# X    wp 1234,6,rw
. \! O: X* R9 H' a6 l      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 O0 v9 f* Q3 P! ?. i1 ^
4 s8 f2 V$ ?9 W7 ?" e# e! O) X- X    wp 23456,a,w,wpdata == 1
& X/ s: N1 P+ k+ j      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 Z) b, w1 z0 z2 I2 x# p+ A0 U1 a
8 Q2 ^8 I, s( m- E2 I    wplist
1 J* d  S4 n& Z( V( [* y      列出所有监视点" s2 P3 I4 u+ _% Q
8 m3 r  x+ {+ p5 q
    wpclear 3
+ r9 q/ @8 w2 S- z& H      删除编号3的监视点) d& t7 `/ y5 D8 q

2 k/ b+ s! _$ ]4 m/ i7 c    wpclear
2 o: }6 M! C9 A) u  V* v9 _      删除所有监视点/ ?/ J; c/ L  p9 W4 r( @. ~5 Y$ \

; A. l- I( C- O0 t: r% o/ c      ; l" X5 T/ N5 t7 F

4 L7 L$ S9 o/ L) I- I程序断点指令: bp, bplist, bpclear- F2 w! M5 a2 f2 x! Z" R# ]
    例子:& q$ Y5 ~' w+ I# ], Y5 x# D
    bp 1234
% L  a2 B! y3 ^: y: @6 x      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 y) M4 R' X! t; n8 C
+ e& k# l# P1 L# B0 |9 l    bp 23456,a0 == 0 && a1 == 0
) R0 B! j; J; F1 n      在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 U# a9 v4 H+ K. |  Y) j% M+ {$ Z. m" J/ Q3 U8 k; Y
    bplist/ _; V0 q7 g  q; M  F, K6 \
      列出所有断点
% F% G# ?" y" @, P( Q" v- W
+ x+ \8 h2 W# {9 r5 e# M    bpclear 3
8 W) H0 N5 K6 Q% G      删除编号3的断点
+ p* v& A5 g0 \5 q: }1 O
, E, Y* A; [9 U4 o+ X    bpclear1 ~0 t* \! J& ~# d
      删除所有断点6 j( S# }  u2 ^* }- v' Z

$ a& F; f9 q& \* h      
& o+ H4 x. t" o$ ^/ o0 |! s; [      * K4 z) S- h  c/ x. g& S
跟蹤紀錄指令: trace
" r4 k  ]) ]' y7 f    例子:
* ], b4 `4 H8 g4 Z$ `2 }    trace 01.txt
2 g% E4 X- _8 \3 Z) ]    跟踪当前CPU运行的所有代码, 输出至文件01.txt
* O# P' S6 b! G2 h8 Y
9 F# K; z5 I9 P    trace off' X  m5 W& G4 k. D  {+ i
    停止跟踪, 并且关闭文件, G  K% }: n8 [, o. u8 }
; o& m. I, G  i4 t7 c' `7 k5 y
    trace 01.txt,0
5 S" B. K. B0 h9 \    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt5 d- n+ a  e9 h+ S' [) g0 }

& r& n1 d* ~; s: ?8 D5 t( S0 S    trace off,09 X1 Z3 ^; h$ c" j6 ]  c9 r: e2 u
    停止跟踪编号为0的CPU, 并且关闭文件3 D0 W) W9 @/ f2 `% L
  v) S3 s; Z2 E
    trace 01.txt,0,{tracelog "A=%02X ",a}: I$ c6 Y% l$ U0 U
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , n1 O6 M! y: Q, J
    并且在每一行的前面, 写上"A=a "
! W5 A5 W% M) D7 h  Q6 k    "A=%02X ",a为一个C语言printf函数常用的输出格式% r2 T  q2 V- r5 Q/ A1 k6 k2 p. l
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入, q' P* }( Z1 p1 N. |  G
    X表示为大写十六进制数. b$ H! h9 e2 _$ m8 O3 ]- ~

& B, \, a6 h3 K" E) p/ o* C; q5 t  m( ^% N

! p& G: {- h2 S7 ]2 u5 u7 I: o; p" z7 T内存直接写入指令: maincpu
5 {3 ^/ ^8 B! Z% N    格式为 maincpu.[][]@地址=数据
  l8 {( V& @& F/ }* j1 u    第一个[]:
: G/ b" L5 |% M/ R    o 表示ROM地址
/ \4 [% O1 C% ~    p 表示RAM地址% L( g! ~( z% r6 M

& Y  Y3 I& l1 x+ y# z    第二个[]:5 k+ h0 ]9 O" i
    d 表示4字节
9 a0 W. c% K' ^; g% w5 d    w 表示2字节5 Z: f' P2 l- Z6 H) n# h
    b 表示1字节7 \  ?1 f* U7 s5 t
; L# V; G# U* i6 q% t! c7 P4 @
    例子:
" i% Z6 I& f8 [% o" b    maincpu.ob@1234=FF
$ W$ H: A' l. O3 _7 a$ r2 S( i    在ROM地址1234处, 写入FF一个字节
% X/ K% H3 V2 G- k; |4 ]# g) E
2 C/ R' O$ O% j' p    maincpu.ow@1234=4E71
; ?/ v$ Q' f+ n. m, s2 k5 x# j    在ROM地址1234处, 写入4E 71两个字节" \6 o) ]7 p5 f1 Q. C
$ z+ D! B4 N0 w9 J% z8 {
    maincpu.od@1234=600A4E713 W& z9 u# x) }% r! j! \3 y
    在ROM地址1234处, 写入60 0A 4E 71四个字节
/ h( U+ r# a# j( Z
3 i  h* y' t/ X7 O    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) d4 S7 G5 p- a  E/ u* g& d    + V6 e9 Q2 P& I6 T9 n" d4 {

' P$ I/ F& t0 r; _1 W0 B3 {: U3 l其他:+ J& d6 z( V( z. L
    dasm 输出档案名,地址,长度! j: O7 `8 Q+ [% I$ p+ x
    输出程序的反汇编代码
! N: t, n1 |+ `5 ~    例子:5 j- [8 u2 W& |6 o1 v8 r6 j3 ~6 w. \
    dasm 01.txt,0,100000* u, L0 I3 M1 h, p) j
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 w2 l+ o% r! F2 ]

! L- ~3 q# \) K! W, Q; V: S. N    softreset' l. Y4 t2 H4 S+ I/ r
    游戏重启, 但不重新载入ROM
3 X- A+ @% s9 x
9 [6 U$ D" U$ \$ x4 U6 [! \    hardreset6 x' z) O1 o+ Y( w1 }5 s9 {
    游戏重启, 且重新载入ROM
9 R! I- E9 ^: [7 d  H+ ]* e$ C$ ]. j6 p# A# E# W
    snap xxx.png. ^- `, ?- y7 J, J( l+ M
    截图为xxx.png7 Z7 i; i; J4 ?; y- ]' {  r3 s- n- j+ r
4 Q! G* L* j- `7 r! a
  
" W) _5 @# U% A) d/ o# K5 R  ) }/ X: p' r' [/ O! c& W0 \, _0 k
  
4 o. z0 Q$ I) ]( ?热键:
2 Y6 |( S- ^/ V  U    ~ 中断游戏6 D' O5 y2 H4 S/ N2 ~
    F5 运行游戏
1 a( l( h% s, m. J+ [    F12 运行游戏且隐藏调试窗口/ v7 x) t0 O, Y4 `
    F11 步入, 单步执行, 会进入子程序  \$ A$ j2 x; \! o$ v
    F10 步过, 单步执行, 不会进入子程序
2 T6 {6 X' M" r" U    Shift+F11 执行到子程序返回, n$ f8 t( V6 p5 {' X" l; H1 W& _; _! {
    Ctrl+M 内存浏览窗口
  s% c, t7 A7 g7 o    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" H( m4 B8 e3 W! x% M' a& F' {7 t; O$ e2 _  X
{:4_94:}
1 g0 c/ \- q/ d# ]( H! S% y- l8 Y6 R0 B1 j/ K7 W

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。& {8 J0 I$ ^/ v" Y1 I) D
( J3 R' |, o7 w1 Z# L+ y3 _
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 | 显示全部楼层
要详细些的东东0 `' l: x" F5 _, W# F
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-26 21:01 , Processed in 1.099609 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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