EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
; f5 c; ]9 v# x
很快速的整理我自己常用的指令
  O1 H7 D% V1 ^+ P+ b! g8 Z# k. Q' ~
# [5 ~+ [' J. d; r{:4_112:}
# a" D) S7 }; i. `& H' Y# z( d( s" u/ D& X$ B9 c* Q5 M
MAME DEBUG常用指令
0 p6 G! y+ S; o* j  m: }
( X& C" I, A! u' ]$ X' s内存搜寻: ci, cn, cl
, _0 F" n+ [8 m
6 U2 e; i% e* q* |% P4 a0 F2 ~    ci
# F; a) W" t) j! x! \8 \7 s" l' P, K    搜寻任务初始化, 每次搜寻一开始一定要输入这指令% z+ v6 w! ?- x9 H6 u$ s7 w

$ g6 R2 F1 Y5 o    cn
+ I5 z6 w1 E1 G) [    搜寻指令
5 ?0 ~( ]+ O) l6 t- H6 O% a    例子:
: z& k. Y- n: i) O2 y    cn eq,60
. k- W+ @( O  `4 s3 v    搜寻目标等于60 (十六进制); k1 `2 G( d4 y4 q
        1 W& q' G* x  K+ r7 L" N# _
    cn eq,#96) r4 ]( e+ B7 s3 X* |4 y9 Q
    搜寻目标等于96 (十进制)
. J3 h1 x, n" t8 C; {" j5 U# L" a$ X8 x1 q  u9 J/ P
    cn eq
( z4 B3 Y7 Z) [* A    搜寻目标的数值没有变化) z4 S& _8 |) r: w/ m
9 K6 U& W) G8 F  I( d  M
    cn ne
! \# ~5 f9 N4 {( S    搜寻目标的数值有变化
- M+ ~% O: A- g6 S& D0 l        
$ Z: R9 |- F  L! Q8 G$ f' y    cn +
" \9 e( Z3 x7 k# K- X$ }    搜寻目标的数值增加
' O1 n/ E7 R9 p7 @+ M    6 N" [" T2 d7 t) G
    cn -
3 G# m% n( A# m1 n    搜寻目标的数值减少% I4 C) h% K8 r
        4 x/ M5 `2 z. Z! J5 I
    cn +,3
% w4 F. f5 N3 @! G1 u; O' |/ y* Q! }    搜寻目标的数值增加3 (十六进制); t4 Q4 j; C; Z: z3 \8 O6 O

# @0 h6 _0 G5 R" W/ q  w4 g    cl
/ |- t( P5 ^$ G5 I' W* l8 x    列出所有搜寻结果4 U# ]  g2 N' v, u4 F. X
* [: R9 x" T. E0 S
    cl xxx.txt+ T% ^, [) [0 i
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 P; }# K, M  a% h0 N
$ T( i+ J) t# r( _& B. q: ~) s    8 t! k5 ]$ o9 O( l! {7 l
内存监视点指令: wp, wplist, wpclear
; T5 }" E$ I1 N& a/ B    例子:5 ]3 b7 y  `5 H
    wp 1234,1,r
" z' s( }. h; ?3 O      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 Y, F+ T1 Y) e1 x# w( M

: Z9 M+ Q% j9 ]$ P! N2 _    wp 1234,2,w
, C' ?7 G! b+ C1 ^      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ [* |  {5 |/ T9 ^# L     2 d* Q- E0 N6 n- v! ~
    wp 1234,6,rw& `' a7 Z3 {% I* |
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( ^9 N( ~: b/ c2 L& H% t0 M' \8 _; m# C) j2 H6 D3 C
    wp 23456,a,w,wpdata == 1
# V* K7 m" X9 ~6 ?+ X! x3 t      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 A% m4 f+ r% `+ X* F8 H& _
" K; X1 j! L5 {& y! i    wplist/ r& U; D+ D2 H1 e! V* R* D6 k
      列出所有监视点& D/ r3 _$ G  Z, E/ @+ `  M, r( m

$ J$ e0 }1 ?: {* X+ B    wpclear 34 R% Y$ {, p  r* ^& {
      删除编号3的监视点$ [  w1 H* S/ _1 A- s, w

1 A8 n' I, C$ t6 N- H' d    wpclear
( t) a$ o$ z8 r0 }      删除所有监视点9 X7 t7 `, M; M9 g3 g7 H# Y( h

: {9 ~' f, b1 I' ?7 a      
: E( \& O" {! |9 z6 K. P! l! g: h, k# g) d
程序断点指令: bp, bplist, bpclear
. K* a. {+ R' h1 B1 {, F! ]( q    例子:
, N. G5 p+ E/ R6 f- j    bp 1234
5 P; n/ o: k$ B      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 ]9 m5 [) }5 j* ~0 L
" f! I5 J" N3 [- R5 M# M5 X3 Q
    bp 23456,a0 == 0 && a1 == 0" z; R8 N4 q  W
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
5 T( t% Z- U6 K' X( c* L# v: m
6 Q" L. z% ]) Y; O0 j% O    bplist
& h/ i# X- t6 r2 l. T3 O6 b      列出所有断点
. Q5 r9 K" ^& g8 j$ J" f7 x8 }  u9 r. t% w! [* }7 b; D0 i& n
    bpclear 3
, M  J) ]3 S, \4 c/ r/ ]: J0 L      删除编号3的断点
, R: }' X3 A, F5 j  O5 R, g/ N* E3 ?5 W; [) C( F( K0 l
    bpclear
) @7 d+ r9 l" d3 ^* X9 F      删除所有断点
6 Y" y% p1 l: c  Z# ]. |! I- e) |& ?) c9 U
      8 c6 Y; I$ `4 G, a  ?/ N/ f" b
      
( ~) X, h; K2 |& F4 S2 i1 ~跟蹤紀錄指令: trace* z7 S1 o: f* C+ c) s* \
    例子:" T* a) q& d0 @  `
    trace 01.txt
3 q8 C2 }! D8 M5 G1 k% M    跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 V* _1 C5 Y  L
8 D" Q: B6 C. w0 ?$ ~    trace off# u" J  k4 u2 Q7 ~0 z1 A* M% E* p8 B
    停止跟踪, 并且关闭文件
# W$ e( ~) r+ r- g' U+ }$ B0 N( Q! m: ]* b; Y
    trace 01.txt,0
% n0 N4 ~5 J' ~8 e0 r. L    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& G. X: i3 X" M
( b" H3 K8 [1 b
    trace off,06 u4 R( U8 q$ I# P8 l! y
    停止跟踪编号为0的CPU, 并且关闭文件7 F! ~% y4 N- x9 n# i  k* e  [+ v
/ @7 u1 \4 _( M- e( J$ W  k0 I
    trace 01.txt,0,{tracelog "A=%02X ",a}
; h; `2 m8 z% k: v$ {    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" e' h# K2 d6 D1 @2 k7 y    并且在每一行的前面, 写上"A=a "
5 ~, C& q+ K3 p    "A=%02X ",a为一个C语言printf函数常用的输出格式
& v! Z: q0 w, A+ E    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
3 ]1 J! ^4 l7 }$ {% z8 ]6 k4 ^% ~    X表示为大写十六进制数
6 Q. m, B1 d) \2 o9 z, Y& J# E* G6 ~3 B' _. g: [8 q* H

* i2 N3 V4 s$ I2 M; l7 V5 ]" V; j
8 B& N! ]: W- `内存直接写入指令: maincpu' s' b  U( M& }' H
    格式为 maincpu.[][]@地址=数据( ^* l* e7 y. W" d! ^' ?# Q/ b( N
    第一个[]:
  m2 A7 H- W5 l* q! ^4 g    o 表示ROM地址
. X3 z0 [, T+ D/ b; {: \  l9 ^    p 表示RAM地址
3 ~! x- {0 s  V/ |! r* |& ?, ?
: t* s; p2 u: O) `" |* I    第二个[]:* y; |: A7 _2 e# H& H9 n
    d 表示4字节
. {4 Z. ?2 l& c8 \5 q    w 表示2字节
: |: M8 p" j) g% ~' u    b 表示1字节
. f7 H7 j3 Y! a" M& y
5 i! s2 }7 [# S# T    例子:
, O+ N  b' @* a/ u: s    maincpu.ob@1234=FF/ `+ k  O& D4 X3 e* N- Q
    在ROM地址1234处, 写入FF一个字节
/ V/ _4 M: w: C- j* q% ^( P$ M
1 }8 i* a- g6 M" ^/ m! p0 s    maincpu.ow@1234=4E71( i. u( D3 {. C/ R
    在ROM地址1234处, 写入4E 71两个字节! _, m" p& B" _& c" ?

: t+ E/ K, r" ?: i' X    maincpu.od@1234=600A4E71
8 l4 m$ i; I0 d2 |# O1 m; f8 q+ E, t    在ROM地址1234处, 写入60 0A 4E 71四个字节- U0 |) p- y+ t8 X) e# T/ a
% W. I: x0 d0 A' X' o$ m% _
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 k# C: H+ X3 K# G" o# i    4 p8 t, @. g9 r0 k- m

2 Q, u% D- h' H- |3 \# Y其他:6 f. m: }+ X4 Y3 B
    dasm 输出档案名,地址,长度
9 u3 P/ k. @; r( L# `' x) ]. ?5 Z! X    输出程序的反汇编代码, [2 ]! n* w) r0 C. C
    例子:$ S  G7 V9 T' f& Y8 I" V% d
    dasm 01.txt,0,100000$ x! G: F' ^1 C1 k' }% }$ ^8 Y
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
& U: z- j3 P9 p- e2 {; E+ ]$ V5 Z1 j' k+ O5 i  X8 t) f
    softreset
1 x& f  x( q5 h5 H9 \    游戏重启, 但不重新载入ROM
! x6 H  @7 L% {
$ a0 u! u7 V/ J6 Z    hardreset  f/ ?5 p& T, m* e
    游戏重启, 且重新载入ROM
7 r+ {% C; i0 B% q# q' }- n0 }& C6 I- a' c! G7 f
    snap xxx.png8 e: h- D) D. i; f
    截图为xxx.png
* X' L: m7 v4 _/ W4 T
7 K- l7 W' ?0 Y: E( m8 m  $ j9 b* a/ g2 u- |% V( L
  
1 ?& H# i$ Y0 v  
* C0 B$ x1 {; M6 S+ M热键:
5 V% u% H" o, h" f    ~ 中断游戏8 K/ n, s) c2 }. I* M3 S5 p/ i
    F5 运行游戏* V. n* K2 b% D9 E  x( U2 a' Q1 r1 Z$ w# ]
    F12 运行游戏且隐藏调试窗口
' _7 ]" B! j! f7 G* p    F11 步入, 单步执行, 会进入子程序
7 O) p* D* w6 z4 c    F10 步过, 单步执行, 不会进入子程序
7 I7 Y6 d# ~) c( X! o    Shift+F11 执行到子程序返回1 P& P- `' i6 D- S% F% h
    Ctrl+M 内存浏览窗口
& Y; h4 b1 \$ M" d8 n" L, O( x* ?    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU+ @8 Z5 O/ w0 u

' W2 T0 b4 o3 q0 o  w* w{:4_94:}
6 a5 E, W) ?. r: |* Z/ |5 @. Q$ \; q: O& q  e; k9 @  f

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。, {" U3 I3 A7 c$ f% V) w1 H2 K) y

3 P2 B' ?% U" X4 z9 c% HPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
. E; A4 y9 T2 S11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-5 11:44 , Processed in 1.083008 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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