EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
* h$ G& C  w+ |$ |$ V& t
很快速的整理我自己常用的指令
& P% X" r, t, r/ \1 s9 }# a4 s7 f) u; L* W- y" {- i
{:4_112:}
7 w1 H5 Y2 C; u) J' Y3 {
3 V' \* i, B/ @- E/ e/ b1 KMAME DEBUG常用指令
5 u8 I# {  r6 O; k/ Q- M# W( k6 z$ }$ r( x
内存搜寻: ci, cn, cl/ S# _6 d5 N5 q

+ C" T9 u( x  o; M0 ^: z6 H9 Z    ci
8 L) y& s  S6 B" K" Q2 w7 ]    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
- m2 y7 z4 k! S3 t
$ ^( \7 c' w" v    cn! h( ?% V" k$ P
    搜寻指令& M! g' _# m4 V  d; t* j
    例子:+ r+ M5 w3 R/ v; g. @. g9 ?6 h
    cn eq,60) ~; |: Z' P/ l7 Q- C2 W4 m& f3 v/ a
    搜寻目标等于60 (十六进制); F- ^0 H' l* Z6 V# {- t
        
; f) S' Z9 T# H) l9 {    cn eq,#961 B6 O* _! L% z' P8 G
    搜寻目标等于96 (十进制)
  o+ |0 V8 S  a, L
$ B" b: f1 l2 F$ I    cn eq% N! b0 t  G1 J( @) U6 A6 g
    搜寻目标的数值没有变化: Z8 q9 Z# z6 r5 {

, K- B+ P, \% p% N3 F  d. {    cn ne
$ _0 g! n8 {1 W    搜寻目标的数值有变化+ Y% d8 p% D. L& i9 |: u  j& f+ \
        , k  h, ]! ~4 G; q+ ?5 r/ {; t: a' c. G
    cn +
5 q/ L( d" ?% U3 j% ]* `: p    搜寻目标的数值增加
1 P& g( I! a  x9 D' D* u   
3 K) d1 X' ?, L2 q    cn -) e% ~$ u: v- ?2 m; R2 d
    搜寻目标的数值减少
* F' W. y6 s6 F$ N        " U  `: ^& }( a, N
    cn +,3# g7 o1 R8 _  M% |& n8 |7 v
    搜寻目标的数值增加3 (十六进制)
6 i8 W' d% i) y$ @9 x: Z7 v) k# w- w/ f7 R
    cl* J- L7 S" r, n' e
    列出所有搜寻结果# y* ~& K4 N/ d: Z

  C$ l9 i0 w. p3 w3 h    cl xxx.txt
7 c  t8 b% n& X8 }    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" S( T8 Y1 P6 ^# q+ X
0 C0 j; [  B# x! Z/ y1 B& d    " E+ S) o0 j, i7 h
内存监视点指令: wp, wplist, wpclear+ J6 \/ Z; v$ e$ w; z7 N
    例子:
* Z6 L- }3 D' ^* U6 m, b) A    wp 1234,1,r
. ]- d  I, B: A* B- d( V      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' n5 ]* G5 `. ~1 P% E
! f3 P" a, ?. I$ T0 Z1 ~
    wp 1234,2,w5 x3 E6 Z) |( x  h
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; j" m8 ]& Z. s5 K) l     
/ t5 \4 A) I' c( X" _2 w1 z! ^3 F2 x    wp 1234,6,rw
- U# Z5 c2 B* F5 M      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
" p$ I' N5 l  v- `0 o$ k
+ ~% o# B6 Z" _3 E# s    wp 23456,a,w,wpdata == 1
& s4 u* k& u1 ]$ i4 o8 {& w" c# F      在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 \- r9 f; Q. y; K- C
! p% D" b- N* }2 l5 X7 Z' ?
    wplist( {; d+ O6 M8 Q9 h
      列出所有监视点! f* ]3 V, Q9 x; W& m& J

( V- ^- N: y+ `8 |: s$ @6 Q" S8 z3 P    wpclear 32 C6 _0 ?+ W- T
      删除编号3的监视点
- ]: d( S5 T+ E" o9 s
! m: @. v% ]  U; [: G: b% C    wpclear
+ f/ D) M9 X6 q      删除所有监视点1 m. I; n+ u0 |/ Y
2 u* ?0 @2 u5 Y2 j. l
      
! }; y# P: \# E0 K9 R) e; Z# p8 D. O
, O& V' k& I- s# \% S程序断点指令: bp, bplist, bpclear
  ^3 ^4 l: J$ v( v6 x    例子:
1 n; s/ B+ A! k3 A+ C: P    bp 12344 @4 ]& H/ ~6 c3 [, C- K. Q+ }
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- V2 B7 F6 |, U1 F; N
. u& i8 c1 e2 M/ Z7 J    bp 23456,a0 == 0 && a1 == 0
. V# |" [" o0 r      在地址23456下断, 且中断条件为a0等于0以及a1等于0
. q8 j5 W4 Q2 n& A: _. D. W/ [
: `5 d& {4 T8 ^    bplist
% O' @. Z/ \* J8 m# R2 L      列出所有断点
$ X; \  B7 f. X- S; O, F) V2 _/ w$ [5 S
    bpclear 3
$ ?  S! f+ {/ _7 c) R2 A      删除编号3的断点
6 R# F( [1 J: Z( c( Q9 g2 ^! h: g
: ]7 q1 y' |8 a8 M# w8 b6 K    bpclear9 ^4 O$ S5 M+ Y1 l+ G
      删除所有断点1 r0 u: z9 j5 Y4 \: L
. b; ]( q! Z: u& Y1 u' D4 u
      
3 E' X1 Z! S9 U4 b7 I      
4 ~# w3 S9 N7 `+ r跟蹤紀錄指令: trace
* Y% {6 w4 K& c    例子:
! K' o9 z8 }0 x3 P& S    trace 01.txt" s7 i2 Y0 G8 f
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ C! P6 ?2 Y& Z* d! ^. r- R9 f/ ~9 o" X5 ~6 A8 E0 `0 ^* N
    trace off- N! M' P5 b: h5 q
    停止跟踪, 并且关闭文件
5 o7 r# M2 R! }" ?% Y$ g0 _1 l0 V' n& r
    trace 01.txt,0
: c8 r, x1 o! ~9 z    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt$ _) L! v& z5 Q; j  A

5 V& ^( |+ }# G6 b) D& V- Q    trace off,0
0 g( ?) m2 O2 G    停止跟踪编号为0的CPU, 并且关闭文件- }. V! ?1 v+ @. f( }# t

  i/ g! w9 @1 g' g    trace 01.txt,0,{tracelog "A=%02X ",a}- E8 Q0 L: Y/ v
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ) b4 u/ ~4 I) ^7 I% A# D2 B5 L
    并且在每一行的前面, 写上"A=a "9 ]  l8 C" ]; q, ~9 Q6 y
    "A=%02X ",a为一个C语言printf函数常用的输出格式6 Q6 S8 ~& v0 u1 \: I* K
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
$ L( }# m$ c' d% D# T    X表示为大写十六进制数
( l% R+ Q# ^! k7 z7 M7 Z1 w+ Q) S, _# Y  {3 R3 _

" F# x+ }. ~( t* e* F/ l
$ z' N2 G5 F' I  S+ L内存直接写入指令: maincpu1 k# V! f4 D( x) R+ j4 Y
    格式为 maincpu.[][]@地址=数据
' S% p  k# F8 o& O/ N* i! ]    第一个[]:
, u) c7 E* X9 j* }' K- d    o 表示ROM地址
2 `0 Q2 F9 A2 _! N    p 表示RAM地址
/ \9 ]" C1 m' M4 _7 l0 i. s
) s6 l* d1 d! S  d& k    第二个[]:
' g: i3 v! c- l, L1 p/ W8 Z    d 表示4字节
$ @* U- y. y" ^, _    w 表示2字节7 O; S. E& `  m& _0 s
    b 表示1字节3 t$ }" H! V( h- c5 u

% X4 Q; o0 B' I  Z# I) @6 ]    例子:2 q- L% ]3 K( `$ M# T: R# b- ?
    maincpu.ob@1234=FF+ Q( e6 |! f0 t% e* o
    在ROM地址1234处, 写入FF一个字节
, O; Q( N' k. J5 G; i. k* v& {. n
    maincpu.ow@1234=4E713 M0 e* e3 }. [3 P& d) t6 ]* c
    在ROM地址1234处, 写入4E 71两个字节
: K: y' O  }. Q0 V- Z# F! ^. U6 r) V+ r7 j- Q6 m+ Z
    maincpu.od@1234=600A4E71
. _8 o- ?& g+ d/ V8 g    在ROM地址1234处, 写入60 0A 4E 71四个字节
3 o* N, C4 j  ?5 T+ ]
' F! B1 p5 w, A; E    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写- [% w  i/ U6 i0 Z' \- H
    8 l1 @7 v& d5 T2 d2 w; {0 f! ^
9 Q2 W, q  o( A3 L
其他:
4 a8 o# r4 X9 f# s! ^7 ^) q( [  q, o    dasm 输出档案名,地址,长度9 s. K8 y4 v/ z: }/ j2 s) M. f' S
    输出程序的反汇编代码9 m' I: ]0 R: t/ E8 Y  D& h
    例子:
1 d; ?5 U( X# `$ \" G1 _3 g. W    dasm 01.txt,0,100000
' j" M, X" r# U5 A8 b    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
, b5 i6 @4 ^* ~$ m
* S* X* D- p% n; a8 e* ~- D; [, Q    softreset$ E1 k; Q% D. A; j
    游戏重启, 但不重新载入ROM
& D5 S* d2 ?9 Z" V% Z3 V+ z0 V, Y! I
    hardreset
1 A" r6 m) m* l& G" z4 v    游戏重启, 且重新载入ROM
8 u7 }: b" w- Q) F7 M
0 A# F) U  ^3 S/ G5 w* ]    snap xxx.png
" Y2 s! G* M, F$ w    截图为xxx.png
: n6 b# R5 x0 v7 H
0 Q% M: v. L* g8 K- e  
8 g! @6 ^+ P+ |& i$ J  
% O+ n- v3 X% Z! N( l' a: z2 v4 L0 |  7 r: E* J: x7 T' y) z
热键:
* I  V  e0 y! w" y. e    ~ 中断游戏
  q% s' m, [; l- U1 b' Z8 |    F5 运行游戏, s" A% Q  S4 ^  O2 G/ U6 D# ~
    F12 运行游戏且隐藏调试窗口  Q6 i3 E0 w( `) ]
    F11 步入, 单步执行, 会进入子程序& B, @9 [2 m* k  ]3 D; q, U
    F10 步过, 单步执行, 不会进入子程序
$ ~8 k) t1 \5 I    Shift+F11 执行到子程序返回7 W1 W4 r+ x, ^' j
    Ctrl+M 内存浏览窗口" N5 q. h1 f8 u+ b* T2 j. w% b( [% [
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
3 p4 @4 H, i' B7 u& h4 G" g8 T% p5 P/ M* d' |
{:4_94:} 3 F( P7 O6 n4 J) x
0 z9 b% E# m; m

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
1 j+ L4 |* A6 a8 _$ O7 w1 \/ `
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 | 显示全部楼层
要详细些的东东
+ l3 l2 a7 \) V5 J5 {  \11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-2 15:31 , Processed in 1.083984 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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