EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

: }6 w9 T9 a1 A& s很快速的整理我自己常用的指令, h+ W! b# m( M2 p$ e  M2 i* H
4 L0 g( C# B) ?' D
{:4_112:}
9 ?0 U1 l3 ~) o, A6 n# V/ ?9 W0 Y: h  \: {
MAME DEBUG常用指令+ C- W' H4 J+ }2 W# \- m8 X- i8 m8 u
" G* e$ [- A# }* k3 v
内存搜寻: ci, cn, cl+ Q/ y. Q6 O  V# V- Y% u; E/ M

6 r* V3 L* e  ^* S! ?# j    ci( x9 y* Y! C: \3 a' O7 `
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令) I: K/ V  Y2 @5 `' h' L

7 R' i; I1 Z# n0 |3 {: f    cn
; v& b/ H3 p1 w    搜寻指令
. S2 n3 i' y2 H3 d/ y    例子:/ g6 K, p1 T4 E% I/ ]# G' p/ ?
    cn eq,60' x8 }' M9 |1 @6 f+ \$ C
    搜寻目标等于60 (十六进制)
  D" l6 b; |$ n) @' u+ F        , O  r+ S# f+ @* t
    cn eq,#96, I9 C& G9 f1 U: ]0 G
    搜寻目标等于96 (十进制)
: G' `5 _8 y+ B, |1 z; B* s6 s. i' d* {- ]; C
    cn eq
. _. u$ @  D" I7 g- \: @" `    搜寻目标的数值没有变化
! Z. n3 e# \* k9 T& i! }, h6 A
( Y/ P, S' n8 k    cn ne+ ?# y1 p0 p% Z/ _: D8 |
    搜寻目标的数值有变化
; h' R$ e' j! a9 R7 p; S        0 N2 @* ]. ~5 J* S% r8 Y" s4 p
    cn +. x+ z) t- ^6 n6 ]
    搜寻目标的数值增加
$ o& ]% S- G' E: U: E# H   
: R) y7 `, G% J- t) B' M    cn -' q! ~$ e: i: k
    搜寻目标的数值减少0 s# L( o1 `/ q7 G8 k
        
/ ]0 ~6 E; z8 n! R$ p' L$ v9 [    cn +,3
, I) j, `$ R5 b0 @8 B% ?! B    搜寻目标的数值增加3 (十六进制)
& S5 \% Z% @& w1 a3 @1 d6 Q/ ^" P( F' z& A4 I
    cl* t9 O5 X: t. x$ O# f7 o* ]
    列出所有搜寻结果
% t1 C# S7 b/ j* U" r, i6 @2 K- P* \1 p
    cl xxx.txt
2 ]5 K6 l- s: m7 n    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- ~- [2 x$ }2 J# H' O5 ]3 h+ x% ?- j" y, K8 A
   
+ C% i) K$ {. F5 j5 W内存监视点指令: wp, wplist, wpclear! ^; ?' e7 R# R* @
    例子:
6 {( M6 @* i% `2 O8 H+ Y7 W    wp 1234,1,r
- P. Y$ W7 y) K3 I4 k      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
1 M) b! u! U" A3 _6 m- h) C* p2 g: Q% c" q- }" e
    wp 1234,2,w
6 r( b5 J2 Q" t: f/ l; ~1 O      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2; p- m' V7 Q# [: ^& l
     
8 n) ?/ `; Q( r& l# g    wp 1234,6,rw8 H3 w" l/ j' p  _% b% g% Z8 }! B; C
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6# u7 z& o! j: V9 M2 V$ }4 E/ U( H
) r; E$ o  E" B# E$ }
    wp 23456,a,w,wpdata == 1
* Z1 O* I0 w9 E. j# ~      在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 T/ P& U- Y6 X0 ^# O7 T# B# H! x4 r
3 l. S/ a3 S- Y5 @* _# x, f
    wplist% n, y$ ?* T! V2 U# z; f1 J1 h
      列出所有监视点2 k6 J, i1 `, o& }) m
- [$ s: o, ^2 I# m% j  a
    wpclear 3$ N/ n7 X6 k' y
      删除编号3的监视点
/ d/ ^) t/ O7 Z* _& {7 w/ i* e
    wpclear. o1 O5 W) k  I5 D7 U+ X: a
      删除所有监视点
7 X* M5 o+ h" O' n# l! ]
" A' ?5 m0 Y% j# Z, s      ' D6 ^' j2 Z- m( r# @) D/ S
$ H+ v$ B! Q- W" m
程序断点指令: bp, bplist, bpclear' t3 {9 v2 y7 j. t2 e( X+ q
    例子:" Z" ]5 B7 j' X0 n0 W; ^
    bp 1234( p( a% G7 k( W8 x' W5 ?2 L1 a
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断- m- Z* s3 F- x* z! A: X

) k7 E: Y" q! W( e: E    bp 23456,a0 == 0 && a1 == 0
2 {; h- C+ T( d6 v/ }0 j8 I      在地址23456下断, 且中断条件为a0等于0以及a1等于03 \) N  ^  }5 B9 @  x3 ~

2 p& l4 \" F" N+ {: s7 M2 n; Z    bplist! t$ s* r) [' A$ ^2 T
      列出所有断点  C* Q* `1 o' _' X( t
6 N0 R* n3 W: N6 O2 e, {, T0 V
    bpclear 3
! U- U5 Z1 d2 E1 |9 f* \      删除编号3的断点
  G5 |9 \: K: M% t% v  [. L2 `
  m- M2 f* m, n9 j    bpclear
& l# l, J( c5 A      删除所有断点3 P% s9 K# p( z% E2 U

! U( i" a; X0 _3 g" d/ Y- c6 j& H      
' D7 X3 j5 v$ U8 C" ?( U$ y1 k! m      
4 Z2 M# Q1 Q- c跟蹤紀錄指令: trace& d/ j' @6 i+ I" K6 P
    例子:5 }6 b& Q& M9 ?8 ]: C! a
    trace 01.txt
8 W+ F; Q: N' e    跟踪当前CPU运行的所有代码, 输出至文件01.txt" T+ L3 n( d; d3 E2 q% J

$ O* i. y; |- y) x    trace off: r" }" D9 h: B) v
    停止跟踪, 并且关闭文件
7 u2 i0 b% @' M6 ^. d# u
! R' t# _& r2 f    trace 01.txt,0! ~7 {$ f) s4 e% U
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. A. h: I) ~& @, i, `
, K6 d- c3 n( t) c, K. D
    trace off,0
" J8 u9 I$ u( c6 [+ J0 \0 F    停止跟踪编号为0的CPU, 并且关闭文件
& D5 x( k% y+ }5 v) m- w% w
: O1 S. b: T: h# G1 s3 |1 O    trace 01.txt,0,{tracelog "A=%02X ",a}
7 A& P; v, C3 W  N) ]1 G    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- ~4 b* [0 v+ o& b: W    并且在每一行的前面, 写上"A=a ") Y$ }% N  f! {7 F7 t
    "A=%02X ",a为一个C语言printf函数常用的输出格式
$ n! ]" ~9 l4 U: `    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 h$ M( u, P: p$ S# A1 W    X表示为大写十六进制数
8 g' j9 I0 O0 V* d# m' I8 q2 j  O+ O3 l0 j8 M) O* s& `

3 N5 {  Y* V& d  J. A) a
4 I. ^! G* I# H& j+ k, q内存直接写入指令: maincpu6 X5 a1 J1 x" T" o4 T
    格式为 maincpu.[][]@地址=数据! }9 y7 v: Q) e
    第一个[]:
& A- z! Y- Q7 p/ X    o 表示ROM地址5 [8 ?! u( c' ~+ _/ O8 G* V
    p 表示RAM地址8 z  |+ ~* P$ ~) ^4 Q
# r; w6 k: H0 s- I3 b" ]* |
    第二个[]:
; b  M! V. C) Z" k    d 表示4字节
2 U% |8 z* \6 ]1 {6 [5 h/ T) l    w 表示2字节- Y' K4 L+ u6 ?4 Q! }, I4 f
    b 表示1字节( D8 D" z/ A+ P: c1 v6 m

" W2 G. |7 I" C& _) z2 `7 a    例子:$ C5 h3 N$ ^6 ?6 U) t* `2 f
    maincpu.ob@1234=FF
& C9 K* N1 W6 _! O# N$ g    在ROM地址1234处, 写入FF一个字节" r+ x  d% J" M8 @- S% G
2 ]+ f9 o. W; N6 {* u) G- w5 X
    maincpu.ow@1234=4E712 I+ D- n& d' H0 @, f* F" s
    在ROM地址1234处, 写入4E 71两个字节
) ~" L( m" z* Q& P& X7 _% j( k+ {+ G2 D) Z3 g
    maincpu.od@1234=600A4E71) ]2 z. c0 B3 x# w) s5 ^- L
    在ROM地址1234处, 写入60 0A 4E 71四个字节
' E7 U  L! f* k4 ~$ |2 \: E9 K+ P( F9 M" m4 t& s6 O, N7 p( }% X
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
7 }8 S! d# I6 i9 d2 \9 B   
! R6 j5 m% o. U" D/ Q+ u( F0 I, O
其他:" R& L. ^9 v6 h2 X+ e
    dasm 输出档案名,地址,长度
. i& ?3 m& R! y: d) L! r    输出程序的反汇编代码( C" h) t+ k6 m3 n. h8 C
    例子:3 C$ \/ l$ p! [* {5 Z9 S" o
    dasm 01.txt,0,100000' A1 P2 a1 c' p4 A8 P( o5 J; X, v) z
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; Q% h0 ^$ F! q3 S

7 f0 p+ P3 H- ]& v+ ]6 b. p    softreset5 O9 p# t' h- Q0 Z
    游戏重启, 但不重新载入ROM
# U/ \+ H& V# Z. `! _6 ~; i  U3 p5 M  K! V3 I  r! @
    hardreset
; m9 M# R. L$ r8 ~    游戏重启, 且重新载入ROM3 M8 Z; {$ D9 P/ z; O5 m0 i) H/ W8 M

6 p  k- x, `# s- W2 h0 ?8 |    snap xxx.png& W% B& a2 x  j. l) @7 e, o
    截图为xxx.png
8 S, u. W% {% Z' g5 x$ w, N) h3 z$ g/ b* q% q) B
  ' |3 q3 ?, b( n+ ~4 c
  
$ O6 @0 T5 B8 i' }, ~) c* m  
0 Y- d5 f) v4 a4 Y热键:
; o1 x7 H( l. W, |    ~ 中断游戏
  g4 F/ G2 O5 E$ d: u# W" `    F5 运行游戏
, I: K: m& a3 ?- A* o    F12 运行游戏且隐藏调试窗口
' P7 z, a$ Q: I3 }    F11 步入, 单步执行, 会进入子程序$ b3 K, t. \5 c$ I
    F10 步过, 单步执行, 不会进入子程序: w# Y2 s5 [" _9 F4 X
    Shift+F11 执行到子程序返回
7 `0 t/ _5 g" `9 W& \4 f    Ctrl+M 内存浏览窗口
/ E, |  t  |' f4 C* e8 a0 L3 A    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- U# d8 w6 P, k# Z  w! e, F
% `' H( a' H0 Z1 q! H
{:4_94:}
1 D3 y2 {6 ~- Y7 |, v
) }1 Z2 Z  |" `9 f6 |+ M

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
& V( f! W) L$ g1 M
; L) K' A) 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 | 显示全部楼层
要详细些的东东  ]% C+ }9 B: J2 k, G1 p
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-9 18:59 , Processed in 1.067383 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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