EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* @+ J4 R+ [1 n很快速的整理我自己常用的指令
( g  g3 w2 m5 A, S+ C
7 ~; {4 M: B$ a0 }' Z) S( E{:4_112:}
7 B, J; [; ]9 o$ [/ N7 U% N/ P( A
) k6 |( O$ ~4 v( {% bMAME DEBUG常用指令% X' ]! l+ }5 N+ m$ X( A
0 |* ^6 m6 \8 T2 L9 Z
内存搜寻: ci, cn, cl
" W2 b6 w: U4 g4 S* O- @+ r& B( e, a9 L6 r0 S" o1 m
    ci4 k7 @% Y% u8 G# s9 l
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
6 W0 i# B/ ?/ i3 U; f" M; F4 J2 X; m% t" U* ^8 l7 T. L
    cn
, {! l  B+ h6 k" d" y  ]    搜寻指令
/ ?) U6 U8 g8 R- K$ p: X    例子:
& ~0 R, E2 m: M5 v' q    cn eq,60: D! t+ S# ]/ ]0 W; o- F2 a1 R
    搜寻目标等于60 (十六进制), U* T  q" e0 Z
        
3 {7 }4 o+ X1 W# o6 I$ v* ]    cn eq,#96+ J# y" j$ l" ^
    搜寻目标等于96 (十进制)
3 p$ {+ G7 s4 L  q8 C3 J5 B  n3 Y2 J% ?" L; D6 ?% {, `. X# w& v& h
    cn eq5 t% R. _* g8 d! O) I5 W
    搜寻目标的数值没有变化
9 ^- P. e; P4 N5 z+ L: y% d+ h
  N3 A2 z* `: A$ n4 M    cn ne( j8 t; m2 s$ n9 x, E
    搜寻目标的数值有变化
$ S  k. Q8 N5 c0 A8 V+ k- W        
" d1 R+ N2 r' X6 a    cn +) M' X% Y  M1 F1 J. v2 d% v7 y
    搜寻目标的数值增加8 H, ?0 {7 c8 p5 W: T4 ~1 \
   
8 r6 _7 [, u( }; V2 f4 _7 M- i' w    cn -
% @2 O6 n. F) ^' V9 P4 t  E3 U    搜寻目标的数值减少& D+ W# u% o  d0 n
        0 o1 j% i: f( A6 `. u$ e1 j6 h
    cn +,3
% g! e2 i# i# e  U; ~/ B1 V    搜寻目标的数值增加3 (十六进制)
$ X6 m' y: k* L( k; Z6 M3 [/ [& X9 N- ~" W4 y
    cl
1 j. o; B! y7 I5 \9 f. f    列出所有搜寻结果' T  `; X) a+ o) p7 I6 D
) T; |& v) i1 e  ^1 D7 v1 ^
    cl xxx.txt
' v7 X# |. Y8 G" d    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% H: x3 I4 G2 [8 c0 Q

+ @  e3 {9 v0 B* B    " o6 P% Y& W" K) a- m1 y" C' S) Y
内存监视点指令: wp, wplist, wpclear+ F) q4 p8 |+ H; Q" W: F7 P$ O6 A
    例子:5 m# g5 m, h! S/ e1 `& U
    wp 1234,1,r
; q; a$ ?. \$ y  T2 f6 g6 \( O) p7 u      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1+ d5 ^( s# R0 o

) l1 ^* y, m: k) J    wp 1234,2,w
; s! y" w( K  P5 J! h      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 e, \3 t  W. ~/ Y% T" T& K2 {  a     1 O* X* s! F) ]' F5 D; ^$ g, K
    wp 1234,6,rw
3 P# R- T) u5 x3 q      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 P  f% Z' N3 G- j! g! x

: D- N3 g: P) T0 y8 r- f& R+ P    wp 23456,a,w,wpdata == 1
" p1 l8 }& h: b* D      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ {( Q" \7 `0 u- H" C3 i+ @/ c
! _1 k/ R* H! U    wplist
, `! ]' \% J7 j, |) X: W0 g! J      列出所有监视点. @; y" P6 b. [& J, g; K$ x0 O( i
* L. u! j8 U1 P0 S
    wpclear 3
+ ]$ @: M. i! G$ P8 x      删除编号3的监视点
8 Y! y  [, e: ~  A% t( _
' w: C8 e1 z8 W! z& b    wpclear
( x! n+ _1 g: P5 T; d* o6 j      删除所有监视点  C/ `1 a6 R% x- }1 |

; f8 J# f$ N2 t: p& C      
) M5 v& p' W1 ^; Z; a; `( u! P9 U- L
程序断点指令: bp, bplist, bpclear
  w" z5 O3 G& V8 p. w: d; X5 k6 V    例子:% h6 e0 W7 [. u- f# c0 a) q
    bp 1234
9 a0 z( d$ {# t/ d4 D( I      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断  a& x- K& g) \) y
' f: d$ z6 W7 W" K- Z
    bp 23456,a0 == 0 && a1 == 0
) }  {9 R6 t9 T: J, t' {2 [      在地址23456下断, 且中断条件为a0等于0以及a1等于0
" c0 s) r9 m+ I" W3 b9 L. c
+ h; H2 \  A% l    bplist  T, ?! M. K2 o- b3 O, n
      列出所有断点
8 ]' T/ D6 n) C7 e* t3 _. w! j7 G0 o6 m9 R3 m3 X+ y: T
    bpclear 3- E5 {, A9 g& e# Z+ }
      删除编号3的断点
& b7 e, p7 x+ j) L4 Q
4 Z5 U# l2 R% M" {# r5 G    bpclear* g0 Q6 X/ X+ ]0 C. H8 _5 U5 H
      删除所有断点: o* m2 A, p/ e" W. x3 p: C

, o5 ]4 P& f' i, b      
; G& w& m" z+ o3 {+ F      0 o3 x, l: t/ V
跟蹤紀錄指令: trace
; ~5 j5 |3 j  c/ x, W5 t    例子:2 u; B1 X/ F4 P4 y
    trace 01.txt
: `$ y8 q" W1 a$ Q    跟踪当前CPU运行的所有代码, 输出至文件01.txt9 F' c5 J7 B5 Q, M8 [4 f
) L1 L7 m5 L9 I* P; D
    trace off
0 V5 T5 z" ?" x4 O; |$ I; F) D3 E    停止跟踪, 并且关闭文件# q4 q& S4 B& `% h2 w1 F+ a
3 n( S" C4 E8 E
    trace 01.txt,0
6 P7 v; h' ^% C; z    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; j. _# c$ ]4 {' H9 G
/ r  J- c. b; R" V    trace off,0! {; E7 B% {0 Z
    停止跟踪编号为0的CPU, 并且关闭文件
  ^# {' ^2 u5 s4 N0 S7 }" l5 b0 ?" X7 G% f8 T
    trace 01.txt,0,{tracelog "A=%02X ",a}
+ J( {, k. _- n4 t9 U7 H    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 a) L" e2 G& H
    并且在每一行的前面, 写上"A=a "
: b& d+ V( {8 ]$ I; l/ S! w- @    "A=%02X ",a为一个C语言printf函数常用的输出格式6 c5 H3 e4 W9 \/ I5 u& C7 E6 R/ H$ S
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% p4 h( _% p, y* [2 n0 }7 m6 b    X表示为大写十六进制数
; H" I( U$ D( D/ y+ S) n/ M/ J6 `! r7 s' r: k
7 X& a9 _' D& r% I

9 ]$ K( C3 T. t8 Y内存直接写入指令: maincpu
; b$ `! h- ?% O    格式为 maincpu.[][]@地址=数据
& N6 _: d  j4 B0 A& h+ k( _, z0 a    第一个[]:
7 P* ^' h* z; ?4 K, d3 }    o 表示ROM地址
# I, C; M. E3 w" |8 {8 F, ?$ B    p 表示RAM地址
' M0 @8 n) }4 ]% ]$ u( z
$ S/ T# W* x: G& D: o# |' [9 L    第二个[]:
& A2 E! u; v# @9 |( D( x    d 表示4字节
- `) A3 o# ^) H2 I3 l# e$ D5 @6 r1 i    w 表示2字节6 V( i2 k' v  Y1 j! i& \
    b 表示1字节
0 x3 H! J, I- D, a3 t: Q* {3 N" u' K1 X; k
    例子:
7 q6 [/ [3 _) z% H2 L9 r8 \% N    maincpu.ob@1234=FF
8 Q0 U5 A% Q. n+ Y' c; r& d- D    在ROM地址1234处, 写入FF一个字节
% o3 g# ]9 s# ?. l
0 |+ T& S( _# u: W4 S. x    maincpu.ow@1234=4E71
4 v9 j7 f, w  C) U1 H    在ROM地址1234处, 写入4E 71两个字节& A' N8 D, V7 P( o. _
2 y, m( \  F4 r2 {* X
    maincpu.od@1234=600A4E715 r! y: b6 R. R, E+ n8 B. @
    在ROM地址1234处, 写入60 0A 4E 71四个字节5 J2 @; `* T! p' y; Y$ w$ o9 {
. m9 E% H+ x2 G: q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写5 M7 Y/ X4 c$ h  s/ M$ u. Z- D5 S; {
    0 ?% `) _# V" n+ x" \$ U

' h- x+ \1 J: _7 R; ?; r其他:
  b, V- E: I4 u    dasm 输出档案名,地址,长度
6 a1 T( Y9 p& d' v: L8 q  |    输出程序的反汇编代码  z, W3 W/ z* e
    例子:
+ L( _' }3 p' b    dasm 01.txt,0,100000( }& M5 \8 L6 q3 z
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt& d/ \- L0 s8 A5 y! k4 O! S3 X* ~
6 y4 b+ q5 S* }8 U$ q1 u( k# R
    softreset
- I! ^# v9 t& k( D, }- r/ p6 l    游戏重启, 但不重新载入ROM
' L8 E) Y0 [- ]0 R; P" U
0 s' t2 X  h% G8 j4 K    hardreset
- t& Z! ?* |3 Q0 D+ ?. G! }    游戏重启, 且重新载入ROM
/ Z8 B/ Q! j1 D$ v
0 @% Z& p: s: Q2 q( f& p    snap xxx.png
7 Y: l  {6 t1 A& k8 u0 _    截图为xxx.png
. z! S3 @1 W6 u0 f
$ q7 d. u4 w( R7 Q  
* B* H8 B6 Z3 l! |6 A* _- ~9 r  
' N, d, |7 d5 @% o7 l9 H: m2 t  ; z  A0 b9 W- V! s0 |! K
热键:
1 e7 ^6 o7 g  g  c! `- b3 E. {( E    ~ 中断游戏# }9 _, s. S* R- T- X8 q4 p3 U! s
    F5 运行游戏
( G8 R1 E0 ?9 H  H    F12 运行游戏且隐藏调试窗口6 D" u8 B& Q. O0 b6 i! P" u
    F11 步入, 单步执行, 会进入子程序
1 P5 s9 x: D: }8 \3 _" Y. j    F10 步过, 单步执行, 不会进入子程序
4 ~* P- }7 N% ?) y, Z2 @! X/ ~    Shift+F11 执行到子程序返回
  `) B2 g6 t0 ?- A8 A+ x- h' i) I7 W    Ctrl+M 内存浏览窗口
* D8 E6 j! E2 h. v. ?    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: M% A1 y  r  I# ?/ [. P: r9 n( B, O

  z* x% F8 u4 j+ _{:4_94:}
6 T+ S# k/ @% c1 r0 T5 K# U4 E: G" _! k- u. [% ]5 a& E% `+ Y5 Y

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。6 Q# T# ^, W8 C6 V3 {
: d  m8 V4 X1 m4 E9 E1 C
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 | 显示全部楼层
要详细些的东东3 z' P# J6 s, o0 z) F6 Y1 ]8 X
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-8 03:09 , Processed in 1.066406 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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