设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
+ ?8 b0 S  N% g
很快速的整理我自己常用的指令5 L) O5 _9 L* {6 M5 F3 M! n+ d

3 Y8 ?$ E/ o" B6 i; j{:4_112:}
. g1 C# ]; L6 ^; h7 g% K+ ]
7 |7 G: P0 X# ^8 v& s; iMAME DEBUG常用指令
0 p' |: y# p0 c4 N  m: O! }) E, \( ~1 }# L
内存搜寻: ci, cn, cl+ X4 R6 e2 n8 B* n5 w, R% n6 U

. M3 X$ p# Y* O0 L: c1 E    ci. ]/ q: }0 S1 L2 P" c' D' c5 C2 N
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 z! Y0 I' t0 a1 r9 k7 Z6 t! T2 W

& F& _4 x& R  g. g  n0 [    cn) q% s5 l8 C; _; Y- S8 L* c8 C
    搜寻指令3 b4 p' U6 @1 v5 r
    例子:! @: l2 @; O( j& U$ }+ e# i
    cn eq,60
8 `3 Q4 c* T' T    搜寻目标等于60 (十六进制)
4 Q& e9 G) F7 k' L        # m! R# w5 Q! G/ h) S: N1 I$ P
    cn eq,#961 J2 e0 N* D" X+ }7 S
    搜寻目标等于96 (十进制)( \2 G( w! R2 E/ ^; k  s  b
" [  I/ p, l1 b
    cn eq
6 ]! [) n( n4 C- l- K! ^% t    搜寻目标的数值没有变化
7 h' s( L0 l' R) d) K7 w6 @0 \
" _( h4 j1 t$ u: C( u5 Y# c    cn ne
8 }% u, J9 `+ C$ y+ U+ ^' n    搜寻目标的数值有变化
0 H. V0 P' J- [& R/ S1 O        $ G, b" z) A8 f8 y4 s+ b, x1 S  M
    cn +" f" s" R. x$ ]6 l5 Q
    搜寻目标的数值增加/ {% V5 Y' @, {* {  Z! y4 z
   
* `" J0 c7 Y6 O* `5 `    cn -
! D& z; e" F0 q3 j: R  \1 u    搜寻目标的数值减少  n" R+ L& @$ E* B% V3 T
        
$ ?3 D/ w* u4 c& ?    cn +,3
& r3 U3 M: V5 o- c' ]! |    搜寻目标的数值增加3 (十六进制); x! ^' a) z" g$ L4 `" ^

5 O: a3 P9 i5 @" l! y9 Q$ ?% ^    cl
2 [: ~4 R" |' x3 N$ L    列出所有搜寻结果
' \6 N$ o7 p" i% B4 a1 D" @" C
$ r+ Z- |1 l; h' {- L+ z+ R* L    cl xxx.txt
7 F0 @8 m" u0 B. a4 f    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
7 Q1 ]# H% |# j# a' j: y/ A6 o4 c5 _$ a$ r' X$ p( j& @" V# C6 ?0 T2 E
    & s- m8 B) `- {$ |' d
内存监视点指令: wp, wplist, wpclear
( ~& r1 t6 ]! o1 U$ v4 i7 J4 l' z    例子:2 v* W9 d" D4 H% t* E* z
    wp 1234,1,r
3 v  Q' S4 m) O9 x      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度17 X$ J+ b; B. x- a; w# }9 B
; _4 [0 o' ?" Y* H* K. j/ U: A
    wp 1234,2,w& T# s' O1 Q4 V; k
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2& Y# y8 _! o8 l! ^: B. G5 W" c0 O
     
; n! r6 M0 S% a: O6 _    wp 1234,6,rw' M( G6 R7 W0 p$ E
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ R! a; G& `9 c4 T' u
! G% n- p# {# w1 G
    wp 23456,a,w,wpdata == 1; F; X! Y* i3 P7 m! q
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 Y5 A4 `* T0 p- k" V& |

& w+ O0 i5 E% q6 w6 P% [8 [    wplist$ S4 M0 h7 W5 Y2 W4 }! S- s
      列出所有监视点
' K% y# r4 K7 y- [
9 k+ Z5 `, H( m; ^    wpclear 3( ~) T' h( b. z0 }% a
      删除编号3的监视点9 E- M8 D$ ~& R! Q3 r

2 N8 N: U0 i1 @% w8 q7 ^5 u# }    wpclear: {4 S6 f, X% t, h
      删除所有监视点# ]% ~4 @3 s0 L% n# p6 O8 M2 C; V

! Q3 T  T# J8 b( H      & m9 M6 k* [. ]5 m  `
, L$ L, E3 I: y" O
程序断点指令: bp, bplist, bpclear8 o" P/ A  E5 R1 L  V
    例子:- j/ f& Z) s( X
    bp 1234& n2 I9 ]5 O  c5 x( G
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
9 n+ I$ u1 k6 n: U8 L
2 }9 @+ N/ W0 c. o, S' p    bp 23456,a0 == 0 && a1 == 0
% e( g2 D' W" K5 k: y5 ]7 E! X      在地址23456下断, 且中断条件为a0等于0以及a1等于0/ }+ j; \: M& C' c2 Z/ h
" x+ |( R4 l6 T7 ~  c, z
    bplist/ |8 r  @3 s/ y+ k) B% B
      列出所有断点
8 C" c6 Z/ H6 n% f0 ^2 t7 ?) D, \- d$ i, {+ x
    bpclear 3
* t* M, n$ u4 m- [+ G  B      删除编号3的断点
# `9 ^: c5 m5 O2 f  B# x
0 @- _9 p. l- l7 b/ b" c; E    bpclear
' W* _/ Y6 Y  B' T5 a- @$ E8 U      删除所有断点
- w. u0 E9 A& u8 d- i
& I1 u; `& L, R      
3 Z: p% ~; D% G9 R) Q      
: G2 l$ b- f" K) M: L( W! u3 V: @, V跟蹤紀錄指令: trace3 ]* p5 W! R# d8 L& a) l
    例子:
8 O& N2 R: u: ^* K    trace 01.txt
: \* h( N7 ^. V$ f% p1 s; n4 e    跟踪当前CPU运行的所有代码, 输出至文件01.txt
! W+ }' z) i7 ]9 r$ c7 T3 P- Q) r# _$ V; b# p. s
    trace off6 \; X5 d( z, ^" a
    停止跟踪, 并且关闭文件4 {, t, B* g! _# o/ j! x/ S2 T

( S& s: q. B4 r2 c) o7 I    trace 01.txt,0
9 H& w( s, w. ?- X: U    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 L6 V& n) C: f. @. \8 T; }
& }5 R; i5 u% r$ M4 @! x# u5 k, ^    trace off,0! _  h( B+ I" o# N2 _
    停止跟踪编号为0的CPU, 并且关闭文件% q1 d# j! w; E& f. ^

& E: N; p6 I$ q8 i    trace 01.txt,0,{tracelog "A=%02X ",a}
( t& |  A' H8 C& z) m' @    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 1 `: p5 |8 n% a, @, J1 ?
    并且在每一行的前面, 写上"A=a "* B4 k4 O9 p3 Y0 Z9 |
    "A=%02X ",a为一个C语言printf函数常用的输出格式
) J: B4 [( Q) x4 |. o    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入. T* Y+ ~( K; k2 o
    X表示为大写十六进制数- `, r5 m# |* l6 s

+ L2 G8 B0 d. w% w! d# \% [, |) h. x5 Z- Z. F

! [% d) x- K* p8 m: c内存直接写入指令: maincpu% `& p( u  s8 C6 f& M1 C- z
    格式为 maincpu.[][]@地址=数据4 J8 Y: I7 T9 h3 |
    第一个[]:# Y/ [* e! _; l; _1 ~
    o 表示ROM地址& F% r2 `1 [5 [8 R1 W
    p 表示RAM地址! V6 {/ u  d! M; f
! L  h3 |0 A# Q% a, _
    第二个[]:
, h* n$ J; d- a1 l    d 表示4字节& G0 F: s% r% U( r& h5 ~
    w 表示2字节
/ K+ T6 i. h4 N" }/ ]. O+ Z* n    b 表示1字节# |( w% ]9 v( R: G/ {1 H

: `0 B/ }8 y8 j! I    例子:3 c& P* t7 E7 R3 }
    maincpu.ob@1234=FF
) M3 P& y0 r+ P& V1 B    在ROM地址1234处, 写入FF一个字节
% A! u/ D3 _' A% `  Z" G" b6 i( E
' }- k. x0 X5 P    maincpu.ow@1234=4E71
- N- ]+ r8 g- {" k3 g    在ROM地址1234处, 写入4E 71两个字节! ]) e: ~3 E9 X6 [" D& X: D

8 b+ u' c5 H! G* b    maincpu.od@1234=600A4E71
# z# n$ l& N( g6 A6 u) C5 Y    在ROM地址1234处, 写入60 0A 4E 71四个字节
! `. a2 ?9 K: L# }% _# u: \  U/ ?" h  B' k/ L1 A
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
4 l* r( c1 |8 w3 ]; e    : K) I4 @( n% A# E
% a  ?+ \1 c! g: V0 M
其他:- N1 h: h/ E4 m. f/ o! q6 ~
    dasm 输出档案名,地址,长度& k+ s+ h6 D! o, l- s/ w; T* y5 D+ V
    输出程序的反汇编代码
9 ?+ N' b4 r4 _. ~- K    例子:/ @. U1 V- o! v  }8 o* q2 X
    dasm 01.txt,0,1000000 U8 J& f4 j4 F
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 `8 l. H- `, `1 T. R' s

: h8 w' h/ D$ ~: F! m% g    softreset- g( F* `# ?% ~! |  ~/ j% I9 l
    游戏重启, 但不重新载入ROM, d1 `8 i1 W9 |) H# U

# K8 p) P9 @  W7 ?, X    hardreset0 u5 D' o3 V* n: n) n3 e! s
    游戏重启, 且重新载入ROM7 h# g# K, {( {" m% _
3 i* e$ R% q/ [
    snap xxx.png0 X( Z4 d( j+ {6 V
    截图为xxx.png
. }  G5 h7 o; b* a" B9 q; I
# f* b0 E- x1 u* E3 t  |  0 [4 P7 g, W% q, ~
  ' A; `( m% q, {! E: r* h
  
9 p/ f% u$ x( R( _. o热键:
1 K2 E' n2 u) s0 t7 |6 a0 r    ~ 中断游戏
$ w$ M& g6 v8 d    F5 运行游戏
$ R6 {5 Y* W; K4 t  i, C    F12 运行游戏且隐藏调试窗口2 K6 d; h  l/ @' b. }
    F11 步入, 单步执行, 会进入子程序6 k3 B# ^, d6 |1 Q1 w9 H
    F10 步过, 单步执行, 不会进入子程序
2 e; Y8 i. d( ]9 w) N/ O    Shift+F11 执行到子程序返回9 }' z" a$ i/ W6 Y# e
    Ctrl+M 内存浏览窗口
' }5 x* I! [& p, s" O# K3 f% F    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: t- h: b4 i- ?0 n0 W1 S4 |

( @4 Z6 H* B1 |" @0 q{:4_94:}
& v1 d4 x' V; d3 X3 N" V1 Q( T" v7 @" I- W: T

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2563 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。) h. z; Z, V  n* n) N- x
2 ~. l% n; o+ k; Y7 h
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 | 显示全部楼层
要详细些的东东( Z5 q- u8 m5 J& M
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-7-13 14:59

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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