EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
. a; D+ A- Q* j. A! K( k6 Y) z
很快速的整理我自己常用的指令
% l8 g- F% M- U9 B* c0 B8 c0 z0 O3 H; }/ O. U
{:4_112:}
6 C; p$ _+ E- q7 G, V% C; S6 X( c" g7 u" ^6 x& o$ ?* r: ^
MAME DEBUG常用指令/ m8 ?8 a8 ^- B$ c& ?
5 _- }5 L/ E. c) p. `. B& ^: M0 n
内存搜寻: ci, cn, cl
7 [, V7 n+ e. J7 U& V5 ~- B; i+ m$ x: z9 n1 V
    ci9 r0 l2 x* j, r7 }1 I
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 H# j( F% S- l' S1 l, g' x
/ R: `# q3 t  R% }  g; P) S0 z
    cn/ R' P- `# l  Y; y; ^
    搜寻指令5 t& W# J% r, f# @) p
    例子:* Z3 w. N/ K6 z5 Q; ?: ]
    cn eq,60* ~0 q. j# D, {; S! R1 {5 ]1 v+ w9 o
    搜寻目标等于60 (十六进制)
+ w3 @" {" B0 i% w          b: r; b1 q- Q( F+ [* C# @& s
    cn eq,#96
# A# J' L2 F4 E5 j; A- _$ Y    搜寻目标等于96 (十进制)
4 g/ p" f9 p: o! F
' L# L* j& w' V5 M: `  O    cn eq
; R  P. N& h  q    搜寻目标的数值没有变化5 _0 x/ p3 M5 U. h

) R6 J. g: e: k; N1 a% ?1 j    cn ne4 P0 v8 t  I( N& J' ~+ V5 F
    搜寻目标的数值有变化
1 g/ S" _, @: N        ) A6 I& T+ y5 U
    cn +
; a  k1 Z6 w1 q3 r% p  i    搜寻目标的数值增加) _+ V0 I0 d" C+ K* R- V$ l6 Z( t% _2 x
    & x4 B6 `6 k+ n- @; w, n1 d
    cn -
- X% Q/ O5 C" r+ W    搜寻目标的数值减少
' X. `, w, i( n" X        
3 D  |) N$ M& S) }- G    cn +,35 r' B+ w& |7 N. G) j/ K& v- z
    搜寻目标的数值增加3 (十六进制), X" z3 Q% e: U' h' r8 w/ x4 f
5 c" u, O0 e, N3 p, L
    cl
  e. }: H. G0 O  \    列出所有搜寻结果, B* Q  R( t8 g1 U6 ]2 O
0 q1 m, Z9 }+ D- W' |
    cl xxx.txt
8 E" K" O$ j8 R8 x* u+ U    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
; J3 O. S$ N! ?% G" b& t
3 r  Y" ^" @7 `7 d   
$ Y) f# W  h  b" Q5 ^5 I内存监视点指令: wp, wplist, wpclear
" X& P5 c# @* w7 L2 V    例子:
2 @/ U) p+ v6 h9 k( E; Z    wp 1234,1,r
0 M3 U# K1 ?+ \# d; \% c4 W3 h* L      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1& i. o5 d( n; o) m9 |  i; Z# a: l
) A4 m" G7 d# F- v" ]& s
    wp 1234,2,w
" {7 D5 _: A4 x5 E, T( p) E& g      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* P/ w7 P; g- s8 J; e, i4 D4 ~
     . [7 O  Y% g' a0 c& x6 K! b
    wp 1234,6,rw
5 c6 a# O1 b/ A* n0 @      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6$ i4 T9 q& o8 T" ~( {' U6 S  N
, O' o. Y) G3 T7 g$ B* ^4 p
    wp 23456,a,w,wpdata == 1# }3 P+ L9 H5 |& p8 p1 ^7 B5 B
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于14 D4 t2 F3 X6 Y! F
+ V% M. `3 W4 r& T, R3 j- \. q2 J
    wplist
. ~' v4 n: _/ Q2 h( t+ O/ K' W6 x      列出所有监视点2 F, R& y4 K3 T. u6 {0 L8 _
% j& O: Y$ N# W" o3 s7 G' \1 w
    wpclear 3
9 ~; t% r4 a- \3 ^; b      删除编号3的监视点2 i6 c; \; [# @

: A% }7 v& i( E! [) p0 Q' ]    wpclear, B) T+ n; m6 B. C) Z0 R
      删除所有监视点- d% [3 O2 `# x9 a/ z
: Y) N: F. `. }  w/ S
      
7 m4 Z. D. [  m& Z/ n: I1 r) d' l
程序断点指令: bp, bplist, bpclear
' |4 F6 e3 @7 W/ s6 x+ n! k& P' Q    例子:
4 n; g( d% X2 i# c, c    bp 1234% M" v9 a) I" A. T% _) ^" N8 O8 Z
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
0 l  G6 [3 c1 b* C) v( D% d2 v5 K/ I
    bp 23456,a0 == 0 && a1 == 08 F4 [& q7 i. ?
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
" j4 P6 \- k* d( D1 K- U& p( u8 E/ S% T9 F5 f
    bplist
0 y, D9 u6 A1 a2 R' \% C( n! `      列出所有断点
4 C$ w2 |( D9 v3 f3 [, g- j! U* G/ B
    bpclear 3
/ R1 F- r7 F* p; ^0 i; g* u      删除编号3的断点
& G: X# \% e8 W4 \5 i6 r- b7 x, k) J5 F
    bpclear
' |+ H/ [; u3 Q, Z      删除所有断点
6 ]& I2 b9 [" U' _9 [' Z+ {  l' c8 b4 r) t& K  A, ^
        d# m  }5 Y0 Z5 z8 F; A% Z
      
. r6 ^& |1 n7 w跟蹤紀錄指令: trace' s8 a  g/ b( v7 T) p/ e4 w- g
    例子:+ f' F- e- H! a3 T+ m( s6 E
    trace 01.txt
& F" j5 y* d7 U: k/ X8 _( t3 |    跟踪当前CPU运行的所有代码, 输出至文件01.txt* ]* d; z5 D: _8 f3 n' N9 E

! a, p& Z& K+ c3 w    trace off
" h, P0 N: D1 X5 Y) k, g    停止跟踪, 并且关闭文件
5 E. z% S" O. q# C( g9 B  D- u: W0 F5 ?
    trace 01.txt,0
6 S0 o3 s. A: f    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" ~9 M0 C; |& h- {
" X0 ?( U, _  |; Y
    trace off,0
1 G8 j: c  v" K" Z# R    停止跟踪编号为0的CPU, 并且关闭文件; r$ u# V* d/ M1 ?. p6 o

7 U, q0 y+ A$ C% O2 {3 v    trace 01.txt,0,{tracelog "A=%02X ",a}% i. A# ~+ S5 T- o2 S% I, q
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 8 p. {2 p- T5 u5 W7 w
    并且在每一行的前面, 写上"A=a "% J0 R6 _# d) C# ?: u
    "A=%02X ",a为一个C语言printf函数常用的输出格式
* J$ K" q6 N2 V" {; J    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- D) ^9 V- K  [
    X表示为大写十六进制数
0 d' e* h- h( H" u: p& i2 [9 n, b# t9 E1 }
( P9 H0 c8 r# T+ F6 D0 L1 k1 C" ]2 L
0 \5 I& [8 n9 D) G6 z
内存直接写入指令: maincpu/ B7 N9 }3 B: s7 s6 J: v8 G0 E( w; k
    格式为 maincpu.[][]@地址=数据
7 w( A; F8 g2 x    第一个[]:
' K: Q$ U& V4 _    o 表示ROM地址
8 |9 g+ L7 U. h9 m" B    p 表示RAM地址" }3 C7 _. K( v7 L( ^

1 \" T  k! v4 t  j& ^    第二个[]:6 M! r: H6 F0 _2 m( M
    d 表示4字节2 C" Z1 I, l3 k+ g7 u' D, B' g% J: A
    w 表示2字节
8 ^' ?+ y- g9 W) a    b 表示1字节
7 Y7 e) z2 ^5 S# M' ?. x! F; X' v7 G$ W# A9 }
    例子:1 s* @! u; P  O
    maincpu.ob@1234=FF
0 q& W. g, S) V/ V' s3 a  `; O, Q    在ROM地址1234处, 写入FF一个字节
8 H9 V- X) A/ g3 a# [( i8 N- Y1 v" e; s; v+ d9 O- y( X+ p0 F
    maincpu.ow@1234=4E71
* l& }8 l3 i; y2 d3 k    在ROM地址1234处, 写入4E 71两个字节; [9 n7 p) q+ S* u. {" w
4 Y: n; ~$ a: h1 T! m  Y
    maincpu.od@1234=600A4E718 ^7 R6 [, [; T, ^% ~  L4 L; m- D% A, j
    在ROM地址1234处, 写入60 0A 4E 71四个字节, J8 B8 I0 L5 K6 \: U- U: o

% ^# G+ X- d; X9 y    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# ~8 n, L0 v+ \( B; `# c
   
  ~* z" |  t/ y& C' m# }' Z
5 ?! I5 i7 t9 Y+ j& p. U其他:
$ t  x7 C' U: u6 s+ M    dasm 输出档案名,地址,长度
1 Z4 v/ w* I& ~" U- _3 T- f+ M    输出程序的反汇编代码! E, c! B) J6 Z' h7 g% C6 p8 V
    例子:3 ]) u) o$ h" B, A
    dasm 01.txt,0,100000' c5 ~8 @3 z3 x/ d$ \8 p) i
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
5 T8 ?/ p" b; t8 v% t3 _( G7 S" b
    softreset
5 c, {7 D. k( P2 s  X    游戏重启, 但不重新载入ROM6 S3 r: C3 q% y  A

3 U% v8 e8 U& k( x& Q0 {- t: D0 p6 L  G  |3 p    hardreset& ~; r; K, F. E; C# z' i  k
    游戏重启, 且重新载入ROM9 U9 S9 C/ ?# N( @

" B* d2 X9 s' \    snap xxx.png
8 `7 [/ ?- S% P6 |    截图为xxx.png# R( m/ D+ s: i: Z

* E5 y7 F! H, B+ ^" Z# K  
6 P# d9 B0 G5 z  
: C+ O2 L" b+ q6 T  8 L/ Y: F9 g3 |! B; F6 N
热键:
" Y/ z+ Y  u# y    ~ 中断游戏; A# {/ W1 X6 I. K! I
    F5 运行游戏
8 w6 h. G: V: P  @: N    F12 运行游戏且隐藏调试窗口( a' }4 }2 b) X0 j4 J. _# E, Z; u
    F11 步入, 单步执行, 会进入子程序
8 h+ R) q4 a: m, I3 d    F10 步过, 单步执行, 不会进入子程序, }/ H, s! t2 M
    Shift+F11 执行到子程序返回% [' }5 N+ I$ i& H; ]& }+ N
    Ctrl+M 内存浏览窗口) g- z5 ~) A% C' V- d
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% y, V7 n$ `( @0 L& J

( j, `, k7 v1 T2 v! T{:4_94:}
/ d. O. E4 G+ y; ?9 K. s
6 B) U; J# n. ^2 C0 y- W3 }

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
  q+ M+ c4 q+ v) N4 @+ N) |0 S5 d. R8 c; d
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 | 显示全部楼层
要详细些的东东& a5 I5 C2 ~: o9 ^
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-23 14:59 , Processed in 1.079102 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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