EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

1 H/ |, i  L* S5 y. X% ?7 C很快速的整理我自己常用的指令6 N3 |! d& ~- l% L
; y6 s# [4 p1 F
{:4_112:} 6 T# g9 s% D3 U  Y* c
( H% Q. @/ o3 ]/ M
MAME DEBUG常用指令
5 r. F7 k; ]6 \7 ]# V0 _( _& N* F; u* |' E; t
内存搜寻: ci, cn, cl* A7 F2 H; h9 ?* g

4 v* |" m7 v! z) \: S0 `3 y    ci5 G/ ^; z0 \' O) R, V% T1 ~
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
7 e: D, S( j, S. i: V* i" W
% b3 B2 B, J+ B% @- j) s/ k    cn6 F) u0 e- F4 G8 t8 m  V
    搜寻指令
4 J7 U0 |6 k$ N1 A) j4 v6 b8 M    例子:
7 D9 p  M5 w! ?    cn eq,60
6 ~- _+ v, q- S% ?9 \# _    搜寻目标等于60 (十六进制)3 `( C- y6 a: h5 }& s$ E
        % y4 J2 h' m/ O
    cn eq,#96& t  x; B1 a/ j4 e
    搜寻目标等于96 (十进制)9 |) {% }2 B1 K+ ?1 E1 y/ u

' ^1 |& ^3 b2 |. Y! O6 ^1 F, `    cn eq" f# e: O# E3 Q/ \! a
    搜寻目标的数值没有变化
% g0 }- Y# }0 \2 G1 r' Y& I9 p! K5 Y: T1 [$ x6 b1 ?/ O
    cn ne
8 j# a/ \; B, u5 V% V    搜寻目标的数值有变化
  N' b& A5 `, l4 [9 Q! i6 v        1 p% i; r; C6 }! A( K
    cn +" I- S* n9 {1 ]  E
    搜寻目标的数值增加
7 o$ X8 p$ u& q/ G) g& d7 ?    # L, y- M- ~$ s" V
    cn -7 ^( G# ]7 s5 ?3 r+ Z# q
    搜寻目标的数值减少
2 Q  m9 K, H) l+ \  m        " y9 p8 `" j" L6 Y8 y9 W. T  D! R
    cn +,3
: W' P: J: _* l* g. o; f    搜寻目标的数值增加3 (十六进制): ]4 _% [5 K0 K% ^

' u2 b0 M7 G( K6 _    cl! W6 @" `/ L: p  w. {8 f
    列出所有搜寻结果3 q/ w) D2 E3 M: l* {7 @

% W! j- `6 l2 C3 }5 @0 h    cl xxx.txt# X, o, \* `$ ]$ D
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 ?# X( b5 q! ~* [& r( r1 I1 p

0 ?8 b0 V4 C, M$ K+ B   
8 e& A& G& d7 `5 T9 L; a6 s内存监视点指令: wp, wplist, wpclear# a5 R: Q& P5 G! H# z& g$ r  r
    例子:
" j% j* j7 C1 J2 ?$ ~; u+ [    wp 1234,1,r" M- n% z  N# j; C% j% P8 i1 H0 p
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
/ M* u( z& S# ]1 d9 O3 ?* B$ c+ E& p
    wp 1234,2,w
# J0 l1 T2 ~  L! {0 _8 F8 f% {& ^      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 U# H3 n( n" ]8 a5 A     
  I" Y6 O* _# G- K1 {& _3 B    wp 1234,6,rw
8 s& W) {' ]* A( s: g0 ^3 x      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
6 {, f" y( `' j3 m, F" m1 `
. b/ I; K+ }/ ~$ F3 ]    wp 23456,a,w,wpdata == 1
& D& R! t6 k1 j7 a      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" l$ {7 k8 r* t

, g0 T% P- R3 g( x    wplist# l: g, E. F% w. W- f9 u0 a4 N" K
      列出所有监视点
6 ?4 V& C5 t% \$ \% u9 r% v- C# _9 L" v& W! y+ j
    wpclear 3
7 c; K8 k6 a" }1 i( v      删除编号3的监视点8 m6 z4 ~/ x* I
4 \9 |; @" Z$ w0 B, K; M7 X
    wpclear, Q+ ^3 K+ }, Y: Q, F. Z
      删除所有监视点& y) m  V) S  U& R  _( s

7 `# T1 F3 C2 z2 V% G      
! R' w" v% n" M9 z/ [
& [+ y$ F' K/ c& i, s7 Y% D, `7 Y- I程序断点指令: bp, bplist, bpclear
/ m& W" `/ T2 `- Y* F# }    例子:5 E1 {1 q& `6 L* [) T& N& B7 b
    bp 1234
1 }6 h5 u# h( v3 O$ s8 H; v" b      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
5 B6 m5 R7 J( r
# W6 Q1 s! ?0 _! z1 ^4 M. ^" ~+ E    bp 23456,a0 == 0 && a1 == 0
) r& ?2 l6 r' M# I4 t( M. Q      在地址23456下断, 且中断条件为a0等于0以及a1等于09 O& A% E/ A/ w3 O3 s( D: C7 g9 {$ \

, Q# R$ d. _* |/ K0 ^2 \    bplist
, L% k# [* [" k$ c      列出所有断点9 O& Y; d4 h$ m& n' [, Q5 u

% G, m8 }* w3 T2 S; ]; A: s    bpclear 3
% z- k/ T4 h( W9 a9 E5 p# d" `& g- W# W      删除编号3的断点( i+ ?5 m7 N, w
3 B; o5 X/ p2 b. G8 J' {3 Q
    bpclear
9 {3 V& V. `# \7 f$ s      删除所有断点! {5 x- S  a% ]/ s7 t

2 g2 A7 C; s8 q$ d  ^( i& f      1 z; j  V# y, Q" q7 K2 R7 G
      
) k/ g( k1 @4 [, T0 T& F+ ~跟蹤紀錄指令: trace
( }3 f3 n7 P1 M# |4 |, r$ o  C    例子:
  ]$ F5 w! Q& L    trace 01.txt" h  [4 T5 I6 s: [$ o8 W
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
! {  |5 S# B0 P% c( g7 }2 W: o2 D  l& t9 W6 n
    trace off+ e, a) S4 \# I: R
    停止跟踪, 并且关闭文件
$ m1 Z. J4 p! Y' L6 w+ K# C9 ]3 b9 s6 Y4 R7 N9 q( d4 Y+ A( F' C% f* ~
    trace 01.txt,0, c; J( Q# T) R, O& G3 Q+ g9 s
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* ^6 I5 m# O# p

4 B; `* W* `. q3 I% k( |; r    trace off,07 I0 ]" B2 M/ C. u6 \3 _4 H
    停止跟踪编号为0的CPU, 并且关闭文件6 i. ]* U2 i8 P: A# n

$ [3 D8 O$ ]- [$ x3 q    trace 01.txt,0,{tracelog "A=%02X ",a}
' Q- g+ `- L! U* U8 a) h+ `4 Q7 r( s    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; T  h$ a' R' V    并且在每一行的前面, 写上"A=a "
+ r$ c! g9 D8 b1 s* x0 e) Y    "A=%02X ",a为一个C语言printf函数常用的输出格式
0 v# K" b& I0 P. U    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# F! }" u0 T, E9 d9 g' @    X表示为大写十六进制数# T; c+ q$ A- p
2 f) M! _6 e# P8 c2 X1 b9 z
  V% l7 k- N% o: {& C# a/ E+ l, f
, m/ U7 f8 u5 @" _5 o7 h0 u; T
内存直接写入指令: maincpu  w7 _0 K* {6 H( Y# h
    格式为 maincpu.[][]@地址=数据
) n* Q: z' ^6 f+ x- ]    第一个[]:) W9 G" h7 W2 z) b/ y
    o 表示ROM地址; ~. D4 q' y; m! }3 r
    p 表示RAM地址1 N7 q9 e9 d0 g$ T4 L$ N$ C5 d6 m
* T; l1 X% g  d" K' B
    第二个[]:: z. _6 c9 [/ z+ O1 k$ k7 q
    d 表示4字节
$ w9 F# e8 h) Y! l& d9 |; L    w 表示2字节9 {: J0 K" ^: j6 B
    b 表示1字节+ R9 S" M, ]4 V2 Y, P' W* ]

6 s1 w2 k) j  T: X& E" V* f    例子:
2 O& H6 G4 Y  r9 d: @* k    maincpu.ob@1234=FF
. v6 H5 T$ n5 }4 u2 r3 k. B    在ROM地址1234处, 写入FF一个字节2 a) K$ d/ ?, l9 x- o3 r

4 p- J% I' C4 E: c    maincpu.ow@1234=4E71
) m0 c( u, f$ r; `& `    在ROM地址1234处, 写入4E 71两个字节/ |; F# v7 R8 C1 N3 a! G
" d5 @! Q) U4 B8 N* r
    maincpu.od@1234=600A4E71- r; |1 ~9 U- C( g
    在ROM地址1234处, 写入60 0A 4E 71四个字节
0 J" F4 r$ R# M& c
2 ?+ Z& n& k7 S1 o; `! i8 ?    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写% _9 k1 ~1 A' W
   
) U% a+ J6 u& F6 J& R7 \) B/ T% g0 S2 a  H
其他:, ~' ]  l( M: }; i2 G; N
    dasm 输出档案名,地址,长度+ i* J' B( b$ }. d  s4 P8 h
    输出程序的反汇编代码
- U* o! L$ O7 O    例子:
. d. z* q5 G9 s$ I2 T    dasm 01.txt,0,100000
- q4 @5 M( o; s1 \- n8 m    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt2 p8 f& m8 g' L6 i2 E+ }, i  T

( U. j+ h  X( P1 B3 G9 m    softreset1 m! z% V( }5 a
    游戏重启, 但不重新载入ROM
* w3 z3 y' w' L
2 @6 ?* G; S9 O- E2 Q- O    hardreset
3 w1 S6 V+ \- ]    游戏重启, 且重新载入ROM& M" F2 K6 i& {% W! m3 z0 P( ^

2 x: _2 u* G+ c% ~    snap xxx.png
: m% u) E: t* X6 N; {3 q1 G    截图为xxx.png
4 r) m" ?# ]6 z/ l% K* o/ j( X- l' B8 H
  $ E) _: Y- M% u' L4 H
  ' W- _7 K& u6 s* z1 T( D4 m
  
( [7 }% t# ~6 f. q# L7 Y6 T热键:: a! f; y& X( ]$ s4 ]. U
    ~ 中断游戏2 I! v% K2 E+ j9 J+ B  ~; D
    F5 运行游戏. W; T2 H! v$ o1 N3 u, Z/ e
    F12 运行游戏且隐藏调试窗口  {' J7 N5 V5 n2 i
    F11 步入, 单步执行, 会进入子程序
- a0 }1 j  @6 F, A! G    F10 步过, 单步执行, 不会进入子程序; W- i  u! X. r: J6 _6 v( m
    Shift+F11 执行到子程序返回
, |/ U' Q! i* i" E  x, c    Ctrl+M 内存浏览窗口  w# c+ x  L0 s8 y3 n% ~! u( }
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
2 t' m1 i- D6 x3 n7 r' U( n4 p
" T: |4 z; G( S{:4_94:} ; e3 L2 a' M4 E4 I$ Y, h3 O6 h
" C# x0 p/ X4 e/ H4 g- D

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2589 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
3 L" V6 G6 q( p4 I2 U
" g6 U2 E( J; M; WPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
9 b7 @7 F* b7 _11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-21 11:18 , Processed in 1.100586 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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