EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
3 I0 `+ s- e+ p9 s$ a2 ?
很快速的整理我自己常用的指令- R9 M1 V) H4 D0 Y  Q5 C3 K/ y
9 F! t' @+ Y2 S0 n
{:4_112:}
1 O6 N. |& N) G. o. R! T. K. {% h% U4 f( ?+ ]+ r
MAME DEBUG常用指令
* a( ?' o) t7 t; r' G2 J4 o: ^/ `+ u* m; p; @% E9 i5 v7 C
内存搜寻: ci, cn, cl
1 w, `: q% Z3 e. ?
& \8 h8 r) t2 t    ci
1 g/ j) M4 ^3 d$ u) i) S    搜寻任务初始化, 每次搜寻一开始一定要输入这指令$ G( c8 R* Z/ C/ t: S; L* Q; w
$ B1 q- X$ N  [# n" X  u2 e& h5 y
    cn
  L8 Y( n" B3 N3 `6 T    搜寻指令
6 I( f( e% E( b3 y9 f    例子:3 F3 n6 \6 Z5 t6 ~
    cn eq,609 H* l% u# H& O+ f
    搜寻目标等于60 (十六进制)8 _, p# y4 h+ }9 U
        
! o* A4 a0 H- r. V; _, i    cn eq,#96# B6 S  y" H! J8 O' o
    搜寻目标等于96 (十进制)
9 L) u4 a9 R* Y% ?2 S) g2 A- W
5 i. X; D. h  U. q& @6 ^* ]6 ]: t0 }* T    cn eq
6 j. i6 l9 p9 f0 b; ?. l6 Z& k1 s4 m    搜寻目标的数值没有变化
/ u2 E, ^2 Q3 j& ~9 }* z8 n! k! f" r5 f% R
    cn ne8 K9 E9 R* Q  a$ g- P% `
    搜寻目标的数值有变化
1 p7 {+ J* [. w1 e, ~, k& m        
, ^7 L3 F- M* z  y3 H    cn +
& O  [5 F0 v0 M    搜寻目标的数值增加# ?& e7 j1 c& |
    0 {/ _' p. x6 K6 R7 K7 ^/ k
    cn -
" z, T0 {8 j! u' D- }    搜寻目标的数值减少. G6 L8 p. `. L; D& c' h
        
6 f* I- k8 b/ o$ I. c* _9 d! Z+ S    cn +,3' c+ h7 P- p) T2 o# N$ u1 \7 E
    搜寻目标的数值增加3 (十六进制)/ c2 E. }) b' L1 v

/ t. E3 s+ A' d$ R) E5 @    cl% r6 B; l0 X: |& _0 u/ U9 q. S3 W
    列出所有搜寻结果
. z7 S: q4 Z; V4 Y
1 M* w7 M$ Z$ F8 m9 U    cl xxx.txt
" {: ]7 P' X' M6 t% \    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ `  X; l( v3 r' y8 ~
% E, j% z% M7 J, [% k" q: g% u   
( B# F. I8 I' ?内存监视点指令: wp, wplist, wpclear. F  j/ }5 v3 A8 F3 F- e
    例子:
( l0 u9 w7 O! M  p" ~7 A5 M6 G    wp 1234,1,r1 z' e$ I$ Q7 u; u" f
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! M% n, [% k( ?! c$ E
; c6 F' R: q) v    wp 1234,2,w. p  }# P3 q. G0 R
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 d: N& Q0 m$ ~     ! P2 f# [( r5 U! G7 @5 s- Y
    wp 1234,6,rw
( M' B- _6 Y& i, G      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
1 _0 L! c" p2 J0 }1 P2 r# L& A' L9 W+ @4 H) }& u
    wp 23456,a,w,wpdata == 1# S* {  b2 I) |$ w- {8 J0 l
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 F. t7 c& K$ E1 U. r' A

, G- n  `2 q& e5 r    wplist
' s% y6 ^8 M+ G4 f' ~, w      列出所有监视点
! D7 W# r, }. i
% [0 @+ e# y( b- _    wpclear 3
5 K2 H2 i6 Q3 o2 ?0 K  j& V      删除编号3的监视点
9 \$ S$ ~5 }7 Q! p4 w2 c7 a* w- J( g2 O( @+ k( `
    wpclear& H8 A7 j# f$ \
      删除所有监视点" ?- j, s; E; R/ }

# t2 s+ p% a2 i  W4 n8 I, R# O# g3 ?! x      * @2 R5 g6 a7 F$ {; d1 b( f; V/ A

7 b: Z) }4 a% `: ~6 H程序断点指令: bp, bplist, bpclear5 B" M* y5 {* h7 A( J; Q
    例子:5 O' M7 h9 \' S6 v4 f. d0 Q
    bp 1234
* c; w5 h' T* y! g" h5 ^      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ {2 B8 c6 w4 H4 l

& ^# D' g% S7 M7 X9 h    bp 23456,a0 == 0 && a1 == 0
! Z4 }9 M% I! V  W2 m      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' H* l% H5 i% F: C" u( w. h1 G1 ^  [- ~/ v$ G0 ^3 X7 q
    bplist  `3 [. {/ P: b* _; b2 V
      列出所有断点
5 ~4 f1 }( O* X8 n& Z5 d& ^4 ]7 I4 g" S1 s
    bpclear 3
  ~6 M: V% z8 |      删除编号3的断点
2 G6 W* {' H2 l5 b! v  v, P) d# `
    bpclear7 l. B6 o  }8 C! ?% Y5 u2 \
      删除所有断点
" e( y0 _1 Q: l, e- y# n2 o! P
# b2 v3 }/ Z# {6 T* ~1 y& X      
0 a9 x, r( N+ `$ L4 V      1 M6 ^, X7 V4 g) K2 Z( b+ T
跟蹤紀錄指令: trace
% @* a9 }# E( A5 v! h    例子:8 \( g( q) [1 ~2 K' Q7 [
    trace 01.txt
0 s  ^9 M+ O; L    跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 ^8 x) c, Y7 A7 Z- P) H& \' p
5 D9 s: M3 P: r9 l5 O    trace off
, J$ H" D8 x" n) m3 j    停止跟踪, 并且关闭文件
! w0 W- h9 N6 D& V
9 X  g; u# |3 _/ m0 R/ Z0 i    trace 01.txt,01 v6 s2 e* Q% P: ^5 A& J# I
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ v# V$ e. U" l4 ^9 q' C" P$ k" f% ]( R6 ~  P! h4 r
    trace off,0- `: Q, ~! ]+ P; U* `/ E/ q; f
    停止跟踪编号为0的CPU, 并且关闭文件
  Z4 ?- d- |# {8 A. n- v6 U/ }! {; U: m3 r+ I- v
    trace 01.txt,0,{tracelog "A=%02X ",a}
/ \( o  ~2 ?' J+ A7 y    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* w  Y9 \) ^2 M1 R+ s4 F4 z! [, z" g# w    并且在每一行的前面, 写上"A=a "# ^8 U: K& q) C# G$ V  b
    "A=%02X ",a为一个C语言printf函数常用的输出格式
- V7 t' G4 s9 s) ^$ Q    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( B+ l$ a3 a5 J6 O2 k; Z3 S, @0 g6 y4 c6 o
    X表示为大写十六进制数7 f6 I7 W$ H1 T2 ]9 J
! c* X0 s0 A# Y6 P- X4 L% l, m& T
5 G4 x. u6 }, y

  C. h, X7 B4 h( l/ I内存直接写入指令: maincpu3 e, X3 u8 E) Q3 c. ^6 _: o$ w
    格式为 maincpu.[][]@地址=数据. F% ]( ?, t* F) {! W# ^
    第一个[]:
7 J% e* |; s0 |( }    o 表示ROM地址
0 a, L& G; W+ Q: c* M" g; ^/ ^' _    p 表示RAM地址5 i  D2 p2 t# O+ O
. c2 I( Q7 O7 }" Z$ D$ {  f+ X
    第二个[]:
0 `  ?# {: Z6 P. \3 J9 B    d 表示4字节
2 T% `! D# X" C7 Y    w 表示2字节, e% R: _4 I2 Y1 p
    b 表示1字节
. d" R  H6 @" i- Y' L" B9 m4 c0 n9 G
    例子:1 K% S3 g$ F4 y
    maincpu.ob@1234=FF
5 Q- H+ k4 y" \; u: D' a$ Q    在ROM地址1234处, 写入FF一个字节3 L8 s+ ?* g: I( h0 t2 g% l

* s5 S8 Z9 _$ W9 }6 o    maincpu.ow@1234=4E71
4 ~; j5 z; Z" J5 D8 B! `0 I+ C    在ROM地址1234处, 写入4E 71两个字节* D; F& o" s% M4 y. G4 U8 M8 q+ a

3 j( Q& R6 j! |7 w. P, R4 \! q    maincpu.od@1234=600A4E71
4 A0 @& p3 H" J2 e$ w    在ROM地址1234处, 写入60 0A 4E 71四个字节
" `( L. [' d+ s: U: |: X( p) F; E5 }% e, s: f# D
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写9 Z$ r( N- S* R+ i' l
    . ?. t7 v5 j$ b6 `

  X, K. M4 O: u- {2 j; F其他:
* C0 k- M2 A& M7 c3 y6 |# P    dasm 输出档案名,地址,长度1 m* a. k5 Q3 w* f5 g$ q; C
    输出程序的反汇编代码
5 w; _$ G8 Z" _( g$ L0 N" G    例子:! n% Q7 R9 }0 b/ A
    dasm 01.txt,0,100000
2 h8 @& r' ?  [2 B' \9 ~! H    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 i& q  c$ J/ O9 N/ V# p: k1 B
" W1 ^1 B5 y$ l) {
    softreset$ M% A2 T9 B, o7 ^( n' D! }
    游戏重启, 但不重新载入ROM# w1 }$ ]% L) ]6 {# Z" U' E

6 A1 L" N8 ?# Z- \2 ~    hardreset5 n1 |- b  K" R6 m
    游戏重启, 且重新载入ROM
( v1 E: Z) a8 ]+ H" r" x  @% s# D
+ K- l% q; g7 L5 T6 o3 K( C    snap xxx.png7 E$ H9 L% B) \4 w1 y+ M
    截图为xxx.png$ h% O0 }* z* ^4 ^% V- D7 Y8 ~! A
% t4 E( ~; s& |0 c7 X6 ^
  , V9 ]1 S3 G2 B$ |, j4 ?) E
  
, V: k5 P% w5 Q" U7 g3 |8 }( W) [  . c* p9 S9 J9 G: O  l) |( ]' }
热键:
: l2 X! a: i6 j# o    ~ 中断游戏
2 M& [) n" p( ~, K# {( t& v    F5 运行游戏
1 i& k; e' o* }& j! I/ L% I    F12 运行游戏且隐藏调试窗口
6 j0 I- ~2 e+ J: x3 A: m    F11 步入, 单步执行, 会进入子程序
, a0 X9 Z9 w& V, ^: b    F10 步过, 单步执行, 不会进入子程序
% K8 w$ f1 L$ a4 b  [8 v    Shift+F11 执行到子程序返回
- q0 D0 A# @1 O3 }+ u5 D) a9 ~    Ctrl+M 内存浏览窗口
+ F' c1 Y4 z) e# l: y4 r    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
( A6 \# @% c) [! Y  O4 x) W  j5 M; K3 X8 }
{:4_94:} ( K, x2 E2 v! @/ S
, Y/ Z8 G+ w5 Y# R! v1 X8 t

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2586 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
  J5 X! v$ B5 @, T: h
7 R/ [6 c7 Q( ^: q$ {; F0 O2 ?1 fPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
" M  O" d, b4 C7 }% N$ I11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-25 05:36 , Processed in 1.100586 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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