EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

5 T7 I# A4 T7 A# j% e  S很快速的整理我自己常用的指令6 s2 ]$ @/ e. h$ F8 T1 Y
3 |0 X5 B& w! _. }
{:4_112:} 6 ~& G' F5 l- s+ q6 c6 g3 O

4 h! T& ~$ r$ e$ C1 ]/ V, K# ZMAME DEBUG常用指令8 i0 n- {3 B4 }/ G1 t& z1 [
2 S/ E9 t: j* Y+ M
内存搜寻: ci, cn, cl
1 M7 I+ f2 ^0 q) ^' {& q
, M$ ]' p3 L( J7 ]    ci. L1 Z- o9 I' Y! \1 j" [" H% w! M% |7 Q
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令# F8 _' [/ z) L% c& X( P

, P. H2 w( w, C" @& Z! |4 ]    cn
) l5 E5 ~' U" Z/ k    搜寻指令6 U: b: @8 g1 q" J2 D! A! }4 b
    例子:
8 J. t3 [, b. t$ a$ H( O8 v    cn eq,60/ O9 ?) r2 z) |
    搜寻目标等于60 (十六进制)
7 D$ y  M0 l+ {1 ~6 P# q        
/ |  f2 o2 w1 n* z5 ^    cn eq,#96
. c1 E& q0 _6 r$ F0 r    搜寻目标等于96 (十进制)
! C/ O$ u3 n3 |% s! S9 \8 ~9 F4 r- U* k0 o4 L- y, C0 ^5 A& s
    cn eq
' A" O2 H* `* p9 p( f    搜寻目标的数值没有变化
5 k1 @$ F4 }$ n% `0 u" D& N* t  T4 K' a3 z1 `) s" {& w+ h" r* A
    cn ne% R" p" i$ G, s. i  v
    搜寻目标的数值有变化" I* H$ x) }  n; s, f5 A
        
& T1 [5 \8 y- A+ {4 _4 Q8 y    cn +
$ Z1 P- R: q4 g1 s; L4 i    搜寻目标的数值增加
  V3 J6 D4 X5 j4 w" ?$ H    $ X$ u& r- `4 @! n7 A8 `
    cn -
2 G4 _: Q2 C9 O; X8 A' J3 P7 {    搜寻目标的数值减少
+ T! |1 n: R; H# b& b        
! Z9 P$ n: T* A/ K% \    cn +,3
& }  k; @+ K% L% v5 r    搜寻目标的数值增加3 (十六进制)
& p0 u! T1 M' \# {0 W) T+ ?. x0 n2 u. ]& F# [
    cl% Y* c* A' u: D) E8 O
    列出所有搜寻结果$ V! x/ g* O$ |& W) ~
! W6 x+ _, A' t, g3 P9 n
    cl xxx.txt
2 f; Y! w$ n" |$ C( t    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) c: U. X4 X0 I4 f. t# Y5 Q7 M* A. D( a
    & l  z# p! {& J$ @$ s
内存监视点指令: wp, wplist, wpclear% |4 g. g, Y9 ~6 d0 T; l8 x
    例子:
+ j  ?( X  Z3 Y1 B    wp 1234,1,r! v/ c2 x9 j9 _$ R' A; S' ~6 I
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 y. U! v9 R) ~+ {, I, M  f" D  _9 d% h- K. ~, Q/ Y, i0 h
    wp 1234,2,w
" P3 c0 i7 Q9 m2 ~# V- A      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2: A& G9 B4 G$ X7 V6 d
       F* I  U& A4 V8 E+ M2 i
    wp 1234,6,rw
. _/ F9 [2 a% U+ F- Y. b5 U      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 B2 R; v2 u" c5 n( A  d

& _( u* N7 A+ W' q' L    wp 23456,a,w,wpdata == 1
" x; b$ @, M7 D+ x; @% t      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) x. R# ~7 h: b% _9 E  M5 p6 K
" V7 W5 O2 W# K3 ^" |- j3 I    wplist0 l0 `3 ^, e* [6 |6 C% q
      列出所有监视点" I! q( g" W# ]2 j& k+ X1 [

/ S" r! G; O6 t: i/ j- w+ Z    wpclear 3' @! l0 E* |  r& f* y! {3 X. n
      删除编号3的监视点
2 J2 @7 H( T# Y& X3 F- ~( X
% C) \! _( Z6 ~5 z! ~& K    wpclear
2 W6 m# {! j. \7 W" q  F' d9 R3 \      删除所有监视点
) |( a- ?" D! @1 {; x0 n, D0 _0 q) ^3 T- X. a; J1 U% s
      
/ }1 h* K- q# Y- Q
' \$ b1 G; @$ C9 m, Z程序断点指令: bp, bplist, bpclear2 J7 r! J, z/ c# A8 p1 g" S; A# R/ S
    例子:
* `5 T  w" r' J3 A0 K    bp 1234
4 z8 [  J5 O% j2 _$ Z      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, W# \9 w6 a9 r% B8 k2 R% L( l

7 z. t' L7 t. y3 z8 W) m7 G    bp 23456,a0 == 0 && a1 == 0
- F* p( W2 x$ Y2 X. l+ c& I      在地址23456下断, 且中断条件为a0等于0以及a1等于0; E0 `3 F/ j: P" p: A* @

4 ?! F& k: m, W5 u7 A    bplist
- R) v" t/ [3 k& e1 Q# \      列出所有断点
8 B) U0 Z7 [; X4 d- W0 `; A
. w/ @! R% n( H( t* ?1 c/ |1 o    bpclear 31 _) a. Y$ W. Q8 k  C
      删除编号3的断点
" Z! ~6 V' n* `( U- J+ v$ @3 ?' Q, t" T. J2 _, [+ T3 e% ?( a9 J9 k
    bpclear
/ J. l+ U. l5 j, k# c      删除所有断点
" y, J. d+ ~4 |# n/ B5 ?0 x8 X2 z! a1 A8 J( u/ r, y  Y* E2 _
      
4 v1 U4 G0 ~& x, j      
$ `* X# t6 [" d  A) s& a跟蹤紀錄指令: trace( Y2 |4 C6 L8 U" ?
    例子:
# B7 ?% r% V' Q% U8 D. L" \    trace 01.txt
8 V0 F; S9 P0 G) U* w) R    跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 D) X8 ^. N6 c7 V( T9 M/ Y# N
    trace off  D& |) X0 e$ \) G
    停止跟踪, 并且关闭文件# z# S$ G- |; C, T

2 B% e( V5 ~; O) S    trace 01.txt,0
7 S) C) t" n4 K& {; J! A' h+ u6 g' }    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( y) D6 _  K- Z+ k
7 o1 i) x! w) o) t* Y. x0 q    trace off,07 b/ j% n1 Y# y2 I
    停止跟踪编号为0的CPU, 并且关闭文件
. D0 b+ o  t8 D5 u2 f" U! X' N3 V- k1 G7 @3 R# |& s# i  f
    trace 01.txt,0,{tracelog "A=%02X ",a}
) r  V4 h/ ]! X2 Q/ m    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : v% ?4 l$ \! S7 b
    并且在每一行的前面, 写上"A=a "3 c. l2 M9 U5 [# [! V9 m: l0 J& j
    "A=%02X ",a为一个C语言printf函数常用的输出格式8 ^3 ?" t3 j  E8 ^8 ]3 S$ U
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 u9 L* D- z, q
    X表示为大写十六进制数
" {  F( H- r/ t+ f/ q, ?2 r
% c* Y3 h/ W* M& v; Q5 w7 ?  w" W; {2 X* y, B

2 H* R& L7 L0 E0 ^# d+ b内存直接写入指令: maincpu
; }% o, ?6 Y# j- A3 _) _& ^    格式为 maincpu.[][]@地址=数据5 g7 E, |3 q! j9 _, U8 ^" v& A
    第一个[]:
: M, f8 Q" V; ]5 g1 m! Z" a    o 表示ROM地址' Q0 M: ~! F& e& n% q. \
    p 表示RAM地址' ^& ^9 d5 c2 q" H+ H2 F

2 }8 ~/ o2 M! N' j    第二个[]:0 |( v) K9 O/ q7 N
    d 表示4字节0 E0 D: }3 F4 F
    w 表示2字节
2 v* {3 z4 O) i8 Z* V" ?    b 表示1字节2 t6 ?/ a) M& E& H5 R

( U+ E9 X+ u' W1 z3 @- B    例子:
3 p8 _' }5 v. a( P5 z& C9 @    maincpu.ob@1234=FF
2 L& ]7 G- ~/ F; x' o- n$ e6 b    在ROM地址1234处, 写入FF一个字节
# G8 L/ J; c0 {% d0 p/ l; J( z5 n8 T- {! q: Q
    maincpu.ow@1234=4E71
! }7 R1 d; l! E! }* f; X2 V    在ROM地址1234处, 写入4E 71两个字节, o7 O2 |% b  O9 F0 {
/ ^; ~# h; ^: |
    maincpu.od@1234=600A4E71
/ P, L2 C6 Q/ Q1 {3 L+ d    在ROM地址1234处, 写入60 0A 4E 71四个字节  w8 ~2 K0 r4 J; H
; I3 c( Z' ?, v3 i  v
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
( L, ]8 c7 S4 X    9 R# J! |% t& v- K3 g
, E& w* D. ^3 y, M
其他:
4 D6 _- X! \' o" a, Q    dasm 输出档案名,地址,长度2 P3 M3 p- ~) T2 Y! J1 D, a8 e, X
    输出程序的反汇编代码
" ^7 u' c5 E! C4 Q% w    例子:
" i; ^0 b2 U5 g5 ~5 }    dasm 01.txt,0,100000
8 h2 x1 A0 S; r6 k5 p* P* \# p# b    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" B; S8 |( Q' p5 P5 c4 W( o  @! G3 z3 R
    softreset4 K5 K  ~# n. B
    游戏重启, 但不重新载入ROM# |' s7 }3 _9 z& G4 \

3 q) q5 i1 a; Z+ `' T    hardreset
( P# V3 A; e) m1 I5 X3 O$ x8 {    游戏重启, 且重新载入ROM
8 [4 K$ X5 E; o6 w. s
' q) }" R: x7 P9 i9 e    snap xxx.png
0 I% {" j% I5 ]7 ~5 n    截图为xxx.png
) m3 J3 k$ w% v5 }9 ^/ n, d& Y. p% ]6 P0 s; d# p" d
  . I3 ]; ~6 A6 ~) c* v
  4 O: w8 J+ o/ C% g; |
  
& |. f$ l7 }/ X热键:
/ U5 X9 n# N5 Q# |& W. H    ~ 中断游戏) j$ ?- U  P: s/ L
    F5 运行游戏( u3 z' r/ u9 f" @$ [8 X  o7 J+ T
    F12 运行游戏且隐藏调试窗口
! |7 c( r+ n1 ?    F11 步入, 单步执行, 会进入子程序3 G9 \* k' H4 g; J* R2 j% a; i7 F
    F10 步过, 单步执行, 不会进入子程序) J! c7 \$ \; V. T5 F
    Shift+F11 执行到子程序返回
  j9 @* @# }# j2 {9 H4 u* x    Ctrl+M 内存浏览窗口' U5 V! j+ V* ^! W- c
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU& r& k* f( F; s* L9 t# r

7 s7 \) s9 M! Y" Z{:4_94:} , v: F8 f, a- w1 \. e% A. ^5 c% ]
) K! ~0 B5 V$ ]

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。! K2 y$ j+ M5 W0 c8 m- l2 t

  L: i% b, h. u- E+ s1 xPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东2 S. J& F2 ?# A  ]8 a
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-29 20:25 , Processed in 1.122071 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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