EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
4 {" t0 ^# D7 E9 T: D9 G
很快速的整理我自己常用的指令
. {& Z  p# Z2 X3 Y$ v: ~- g% o0 W
- Y3 U. X7 f* `' u# |. B4 r) V5 N- P{:4_112:}
0 m; j2 u' T7 G- j% e6 B& R' Y* l: o9 [' @& G8 d
MAME DEBUG常用指令
$ `4 K& Q: i- I7 b; J+ S  Z7 N$ V4 u
+ ]# ^% s$ D7 s" e. k( Y( T$ y内存搜寻: ci, cn, cl5 I- ^1 `! L+ x

* h" V, l! v- B7 o6 j+ P    ci
* S" T0 M5 W% x) d3 g8 [, Q, V2 B& V    搜寻任务初始化, 每次搜寻一开始一定要输入这指令6 }. d' k/ t+ ~1 v- b" B- e9 V

; C2 h7 V& J/ r) e8 y    cn
1 J; f: n/ ]" q$ `0 K    搜寻指令0 N- P# `- {' R* u! I$ }
    例子:$ b( o4 @6 v5 R6 I. g9 p6 w: p3 M
    cn eq,60* r: `( r3 U4 B4 U& f$ H' W
    搜寻目标等于60 (十六进制)
! T+ Y- K2 d2 c- e  _        
1 F( P2 U. K6 R) J9 k- O    cn eq,#96& w2 y0 M6 [6 {2 n, `2 I
    搜寻目标等于96 (十进制)( Z/ P! N- [' Q1 Y/ ]4 p

5 r  J7 Z9 q4 Y    cn eq. b. F# C/ ?  d0 A. k1 w
    搜寻目标的数值没有变化
! I' W7 c1 f) d$ U1 \+ M2 p8 w$ }: K1 x/ ^2 A$ f
    cn ne4 y; Y5 k* R$ \, T2 D
    搜寻目标的数值有变化- ?1 i: e/ p# {# t
        
( X. F" v! j: C% }: k5 g& d5 V    cn +
; Z! b2 C- a6 E, `7 ]& \    搜寻目标的数值增加
) V  B, ^5 R3 n( u0 i- r   
# ^5 O5 k; j- G" t. }7 [    cn -1 Z  _( Z) f; [9 v) j
    搜寻目标的数值减少, T  T( R- a- \' n7 }$ P
        
! L( E4 [0 u+ V3 d& R* P    cn +,3
- V5 Q% t5 M' Y- f; x) k    搜寻目标的数值增加3 (十六进制)
( N. }! e& Q; n  K7 H- z' ]1 [. G+ @, y$ S4 Q- {
    cl
& u+ Y6 m" T. G. I    列出所有搜寻结果" W% M4 B) p# x0 v: ^8 e
- ^: b" y. i% ~6 `4 k8 y/ P1 z/ w
    cl xxx.txt1 c# I' M9 p, N" g
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
: P3 X& T! Y, `. g5 n9 L6 t% [6 i; C+ r  {3 z. F5 s
   
, g* k" k+ U2 W7 @9 Y4 P内存监视点指令: wp, wplist, wpclear8 R; Y: V% w9 ~+ K2 K" v- b
    例子:+ t$ }" T+ H3 o- E
    wp 1234,1,r
+ A- o- {6 R2 c- k& m. f      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
, X) A  D" w% H1 e- Z% ?/ T  @) B0 y6 G4 L# r( X
    wp 1234,2,w
- J: N) ~% v( [% |* y* M      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ q9 }: K! n$ o1 D
     ! r" B. F6 Y. R! m& g) ~5 C) j
    wp 1234,6,rw
! x% a! t% g, v: {. j6 F      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* |  T) k* j& s9 e. l. P

, m3 ^. O% W) Y1 f, a, x& p    wp 23456,a,w,wpdata == 1) m$ q4 W& ^! r
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 y- L# o$ H3 @5 p& z# c) j/ }& D/ v3 `/ R  g
    wplist
) W& x) ^. w1 O8 V7 v: Y/ E: v' Q      列出所有监视点
/ \. B, b! U6 D0 `/ @6 C2 C5 Q( m$ T) [$ |/ p2 e: b. N
    wpclear 31 J4 B8 U! {& l1 r
      删除编号3的监视点. d% `. I# D' h$ ^2 F; b
- y! Z  [8 h! [. ~$ Y
    wpclear4 G8 x% {9 @$ d& V
      删除所有监视点3 _1 C) Y) X( V/ _7 g

, R- F: \2 X! e7 ]! @$ F      
. k5 Q6 ^9 @! n
( L, D; A% }- `( y" m8 m9 `程序断点指令: bp, bplist, bpclear
- _+ s" U+ h( l1 `0 v# r    例子:
9 K6 ?4 f: y1 s( W: h9 _! p& e    bp 1234( L4 [: `& A' t9 _3 ^
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& v$ _+ @8 d. S* }' {  C

: l: _) @7 x; |% D    bp 23456,a0 == 0 && a1 == 0
6 K; Q* d. i0 s) e6 N: `& G: J      在地址23456下断, 且中断条件为a0等于0以及a1等于0& _* v* [0 [. ~- g6 J! p6 h7 I
2 m( l5 g) G: J9 s; h+ f0 G# j* c3 |
    bplist
/ M+ k7 i9 t7 m7 h5 X+ v, Q2 \7 x! P, w      列出所有断点
9 r8 }& o! J' W3 N. N
- D* m  d) Y5 E8 ^& e    bpclear 3
7 O2 e9 c' }: O      删除编号3的断点7 p4 f1 `( F9 r; v
8 S+ B/ [9 Y+ `
    bpclear
5 {/ x( z! C4 S8 L      删除所有断点
8 ~6 _) J: F. D  P& K# V" Z" `% A# Q3 j# r- O
      3 K2 A0 T8 Z9 K. Q
      ) I' ?: i7 t, g& E7 U' u1 U
跟蹤紀錄指令: trace
/ p( ?! _1 I$ v5 ]4 N8 X- O( Z    例子:
9 V) _* c* u9 q3 w- K  \0 k, P" N    trace 01.txt2 I4 q* ^( i* w
    跟踪当前CPU运行的所有代码, 输出至文件01.txt- t! v2 J+ A; `& e4 N/ ^$ p; J& p  h, X

( C5 y6 l: U* M' l    trace off
! |; Q( F  Y# h1 H/ N    停止跟踪, 并且关闭文件
, |) h: T# A8 r3 e8 g8 g8 i2 ^: t' b# ?6 g- E) G
    trace 01.txt,0
* F' h/ n9 I- i/ {! z9 k+ n  I    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% L* E( [7 G8 g0 h  S- R4 [) x$ Z% I& c$ X! z  J$ G
    trace off,0
1 X# w6 V6 Y8 J    停止跟踪编号为0的CPU, 并且关闭文件
4 J) e- k$ Z' E8 W6 a0 |& _2 m* l! ?8 m# u6 q# Q1 p
    trace 01.txt,0,{tracelog "A=%02X ",a}
$ P! q* Y5 z  _+ e" Y    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 ]9 u) W2 G, {! Z$ ?5 |
    并且在每一行的前面, 写上"A=a "! w$ S2 m$ J& p/ j3 y) J
    "A=%02X ",a为一个C语言printf函数常用的输出格式9 P1 x7 {; S0 L: N! Q4 s' g) H" g
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 d! {; m) s0 I4 Y/ B% {
    X表示为大写十六进制数
8 k. g$ G6 v  |/ {; E8 [  I6 d9 X: R8 e# {4 E+ I  k1 D

9 S* h% X1 n" K# u% p4 b
5 h1 i- I' w3 L% o+ c8 k) a2 E内存直接写入指令: maincpu
9 t) \: \, Q0 u) P- u. U    格式为 maincpu.[][]@地址=数据
1 A9 W( t# Q3 }; G    第一个[]:& f- r9 s* v1 T7 i! B
    o 表示ROM地址) S! M7 w2 U" B  A5 |! u, u* c8 j9 ~/ p
    p 表示RAM地址" o8 q' |' `& C' l

8 p9 S; C' J6 ?7 v. O8 \    第二个[]:: ]' q4 ?3 j" n5 U! Q0 x
    d 表示4字节# U, u( }. P& J8 m# V3 G+ z) a' W
    w 表示2字节0 T: F/ o0 W- q' T# Z5 C, r$ K
    b 表示1字节
0 r0 L3 R( Y* K+ l* p+ r0 B3 \+ {+ q) B* }
    例子:, w  i' a7 g! Y
    maincpu.ob@1234=FF
7 R: [& e: J, u& V; E    在ROM地址1234处, 写入FF一个字节' g- _0 T6 w1 E* m
" o% N1 u, f! u: F* Y# z* ]
    maincpu.ow@1234=4E71- v3 m0 `8 B" e6 ^
    在ROM地址1234处, 写入4E 71两个字节" x2 ]+ `. o* [: t

. z& D4 A! I4 U- ]* r    maincpu.od@1234=600A4E71  }" l$ ~, e# f  y/ P0 |5 X
    在ROM地址1234处, 写入60 0A 4E 71四个字节2 P" R( E. M* U

5 n* I$ N6 w9 {/ \, m( c& F% Q7 l    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' o) }3 \$ s$ y7 l$ b7 X" }    5 |2 f" f7 W& L" D' }! D

2 h# [/ N7 R' f& @$ z. G其他:" U7 q4 o' r. r; b4 y1 ]
    dasm 输出档案名,地址,长度
6 }8 V6 }; y, w    输出程序的反汇编代码3 h" ~  n' ?6 |9 ?2 d' o
    例子:
5 C7 V7 p8 I5 r) U    dasm 01.txt,0,100000% x) Y- F$ i8 @% b% f; A) T
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt+ I, P6 A. v6 T4 Z  A6 R

% n1 r1 H# {+ S" @' t: S1 o. O* x    softreset8 K3 D7 G; R- ]( d7 S( W  S
    游戏重启, 但不重新载入ROM
' l/ z4 u9 e$ @- q! M5 I! \5 E) K' w% o. Z- r& f% w
    hardreset% a7 x* \2 I% a+ R+ D
    游戏重启, 且重新载入ROM
) f7 c7 D9 l1 @" K( g; l
& \7 \+ G+ |' ]# V9 \    snap xxx.png9 M1 o, C& s% }" o! U& l1 f
    截图为xxx.png
$ {; f9 X7 D6 _9 l; O; A3 n
$ h5 k# r  M* q* j1 T; u2 @  X5 c  
, G% z* R. l9 `% L$ v  
4 Z+ P1 R# y0 b" ?' ?& e  6 d( t. n% y. _' @. M6 F, W" h
热键:
  r6 d) w# b; K0 Z% @5 S* I    ~ 中断游戏
% J: s/ _: z: m$ T! ~7 d4 m; d    F5 运行游戏
6 ^  k4 K+ x- i# J    F12 运行游戏且隐藏调试窗口
3 s2 I  p* k; @% I7 W# o9 l3 L; e    F11 步入, 单步执行, 会进入子程序( y" n& m( W3 `7 s, K2 O4 ]/ \
    F10 步过, 单步执行, 不会进入子程序2 L8 J4 f4 q, c+ \
    Shift+F11 执行到子程序返回
$ _/ R/ z- w: l3 r" t1 c' {    Ctrl+M 内存浏览窗口' }7 t9 [& A) S" ?2 [& s
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU. ~+ Y' j2 p2 a6 z2 j7 D% P* G

/ N* n: Z, `9 W4 o$ C( I{:4_94:}
1 y) a$ d2 j) ]7 ~6 j: f- D1 V7 p2 n$ C2 M# w3 ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2572 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
7 b  \+ \5 L3 B( ^
0 Q7 k5 ^$ [' p8 N1 A" 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 | 显示全部楼层
要详细些的东东, J7 e; S# M4 y, F$ @! g
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-16 04:21 , Processed in 1.109375 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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