EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
# ]- l8 m: M- r. P: v4 U. c- O
很快速的整理我自己常用的指令( A' B- w9 S6 J
+ r8 R6 r8 D5 n* o; T% w- P0 e
{:4_112:}
/ f" O, r1 E/ Z- U( e3 ~
8 Z, m9 E! m3 q0 _6 U+ s1 bMAME DEBUG常用指令
. i6 b8 D( A. `3 O+ m0 y' X
' B: Z# H( B/ }3 x内存搜寻: ci, cn, cl3 H0 ]0 |: `- ~9 t: d; U' {
3 C! ]; l. Q- H* B' F4 M8 O% q) O' ]
    ci
+ y7 ^: [) R8 {( C9 I8 l* [( I    搜寻任务初始化, 每次搜寻一开始一定要输入这指令, X1 I/ G( v) L7 K- [' X+ I( [7 m
4 w$ Z+ @' E. Z' y
    cn
" r- e7 h4 |* Y8 M. m    搜寻指令% V6 }& M/ H) N# D) t) q
    例子:, h$ R4 g2 g- R' o0 V
    cn eq,608 H! z6 q7 ]1 v. ]# `) A9 E/ X* W
    搜寻目标等于60 (十六进制)
* p, {/ r7 h0 t0 |. H        
7 W3 z- j  t( d& s    cn eq,#963 Z! d# g/ U% B, L- H, y# f7 j
    搜寻目标等于96 (十进制); n! n$ v& a0 T6 s7 K

! ^/ N# U; l4 k9 Y2 h  c    cn eq; R4 k* k! }0 v) C( I! h
    搜寻目标的数值没有变化
9 Z1 w$ y3 O) N3 M4 t6 X: h" s; [% m! F1 ?0 z/ w
    cn ne8 `. O4 x8 C3 e7 F' f. @7 i2 l
    搜寻目标的数值有变化) j# z! e4 b. n
        
% o9 w3 T! ]& R1 J9 J7 x    cn +7 K1 e& O% Z% r: h3 ^* P: T0 m, h0 M
    搜寻目标的数值增加( ~! L( f. a( v' o9 h
    $ q6 s% W5 v0 `+ k8 ]/ ~5 `
    cn -
, z2 w+ P# e4 m1 X7 P5 T/ x    搜寻目标的数值减少7 P( P' S: o+ ?8 h
        
! u. s0 e* [6 r$ J* t    cn +,34 b" B* A" Z& k, O  d% H6 \. e) Z
    搜寻目标的数值增加3 (十六进制)8 j0 `1 D/ C+ M7 O9 k( g* E: l# N
7 _, s9 @7 C5 A' L# A! k! z+ `
    cl) G6 |8 r7 O! b) ]  T' _
    列出所有搜寻结果% Y2 S8 N+ |8 V" ^. s" Q, C
9 E7 T1 Z7 j' f( L/ k
    cl xxx.txt2 i; Q- `/ W; ~- r. g1 H
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 I" S/ Z; f* ?  ^5 b

8 L2 ?0 L8 v- T. x3 Y2 N   
) K8 o& }: u/ W9 K8 |内存监视点指令: wp, wplist, wpclear
, |9 Q& i5 p* @, l- `  j. p1 p    例子:' ?$ Y, N+ U4 L- E. J% ?6 y+ S
    wp 1234,1,r& I$ b8 \9 z, S3 ], G
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
* b4 ^! ~5 M0 p" Z& l5 e7 {! n7 ?: E1 [2 Q  V3 E4 ]6 C: o
    wp 1234,2,w
# O4 r. {3 K0 q  W! T3 a      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ _) x! E- e# Y" D3 b9 [( W0 L1 @     & V+ R: ]( W4 q
    wp 1234,6,rw
, Y# p# y9 M- U' D& k+ ?9 C$ f      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度67 q& t$ C$ k2 o

: l" p/ T& a) S0 Q8 \. }    wp 23456,a,w,wpdata == 1
9 ^8 S8 Z' n6 `7 Y8 V7 K# M      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" L/ p6 Q" J* U* m- P; q
# p7 z! z1 n8 n2 C0 W8 X2 p
    wplist% `4 w; O0 Y9 v2 o
      列出所有监视点4 u6 U7 p+ {1 U1 c5 W; E9 o

) q, X, ]( _! \- q  B* x    wpclear 3
& d0 v8 F/ r. t- A& ?5 L      删除编号3的监视点
/ t6 x6 x! z! E) q9 k( j
6 X* p; ]6 c7 z    wpclear
3 U: }7 ~. Q$ Z$ e      删除所有监视点+ t! W1 N" c9 ]' ~
% j9 x+ U  V9 c7 H; s8 |( i
      7 Z  z) r* P* e/ Z, r" Y+ G
5 }. T0 C6 @" z$ J* I
程序断点指令: bp, bplist, bpclear
2 `& I3 q- W9 U( O    例子:4 o- B8 D4 g& [1 Q3 ]* u
    bp 1234
+ f. p0 ~) N( _% Y2 [1 F& Q      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断1 u; b9 J7 H/ }; d6 Q' e

5 l8 f' B' \0 ^3 ?9 j9 a    bp 23456,a0 == 0 && a1 == 0
7 g7 X6 {! }7 s. T# p, k4 \/ V" A      在地址23456下断, 且中断条件为a0等于0以及a1等于0  _5 I0 `% \) [3 {% u+ ]% i
. m3 R' R* `4 K9 f
    bplist. y4 A; W: w- z. S5 x; V
      列出所有断点
* j: x! H9 Y4 _8 E& e* D' C! U( S) D0 K& x+ k# M0 M( U0 P
    bpclear 3" o, k- Z7 p" x6 f- n
      删除编号3的断点. X8 M7 ^: P1 f. i
6 ^1 P1 r0 Q+ c
    bpclear/ G) Q6 n: Y, t2 M- w; t
      删除所有断点0 K" T+ z) f" H  x& ?4 n

4 ]4 w, ~+ e8 x# b        J6 x/ q, A! ^6 l* W0 d
      
' I1 U0 q( ?' Y" C( [跟蹤紀錄指令: trace/ K  B, x0 {. \+ w+ B5 J
    例子:8 @2 p* R3 R8 B* Q7 z& \
    trace 01.txt
- }/ H/ _4 |( E  Y2 a    跟踪当前CPU运行的所有代码, 输出至文件01.txt& t% H; p; w4 ~4 Q

1 p1 G5 i, [5 p; ?* b    trace off4 F+ p4 K0 q9 d& \
    停止跟踪, 并且关闭文件( }8 B' U# a2 e4 X
9 I8 C( O% ^  E2 N" x6 u
    trace 01.txt,0
8 {$ n2 c' P: O" U    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% ?9 F% J4 `' X( {
' g' G* `& l3 U    trace off,0
2 [2 W' j) l" _( V    停止跟踪编号为0的CPU, 并且关闭文件
, w/ Y1 C1 y# Q7 O9 G+ Z3 Z+ d+ f) e( O9 ]4 K
    trace 01.txt,0,{tracelog "A=%02X ",a}8 z- X9 L$ T! J
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt " k" J% P/ N" E0 M+ ~" J
    并且在每一行的前面, 写上"A=a "
; d6 k( v, ~8 X; j$ U5 V* F, F    "A=%02X ",a为一个C语言printf函数常用的输出格式
) N2 X9 ^9 g; Q' X; w1 i) J. A    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
7 [" n- _7 J+ r, p( a    X表示为大写十六进制数$ C6 z1 C) ~: g+ \5 D( z( {

. j% G9 ?+ u/ \* m: |" B& g& p% H, m8 A# t; F) q8 X

& ]+ {- b% A7 W4 ]内存直接写入指令: maincpu) p! u0 k" [8 y: Y. o. t3 L
    格式为 maincpu.[][]@地址=数据9 O1 i8 p0 r0 q/ V4 C% i0 M7 Z) Y4 C
    第一个[]:
& `2 m3 l. c2 D2 h8 Q2 L: G6 C    o 表示ROM地址3 f% z5 l* m1 q, C) P
    p 表示RAM地址
: O7 T$ v  ~4 H  H9 |% Y
" U# j1 R6 w9 o: V2 F    第二个[]:: j. a$ a, H0 G8 D* v
    d 表示4字节) M9 Y. H& u" n! Z
    w 表示2字节( A$ O0 l+ C5 T# t& E
    b 表示1字节
" Q( ?. i1 m/ H) B2 n
' v( R9 X; I+ `' j7 |8 A4 {    例子:/ X1 P: X* s+ {3 d) r
    maincpu.ob@1234=FF) O7 r) d( j  ~
    在ROM地址1234处, 写入FF一个字节
  @+ t; D, ]$ m+ g( s  H* n
8 v2 @7 }& ]0 l2 Q4 y+ `8 _5 h    maincpu.ow@1234=4E71
' j  ?' S- L1 w    在ROM地址1234处, 写入4E 71两个字节2 F& M( D& s6 d* c$ T

# t0 ?( u* B# {  Q8 {4 D. {1 J    maincpu.od@1234=600A4E71
8 W3 c9 N% n) h7 X2 E4 c2 Z9 e    在ROM地址1234处, 写入60 0A 4E 71四个字节- P- Y0 _' |/ _2 P  C( l2 d
- K3 `9 x( O* E5 D' O# W
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
/ [" d' A/ [* B6 C4 e2 e   
" ?- r, B' ]  R3 J7 F6 E$ J2 a9 Q. V  j# E
其他:) ~! c/ [. r2 Q  e
    dasm 输出档案名,地址,长度
" c" K; `3 ]4 E2 W) e    输出程序的反汇编代码
/ \3 ]4 E' U7 u+ d    例子:' o. _: o; q2 o; ^' Z
    dasm 01.txt,0,100000
. r" j- a, z: N% r    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ L5 Y1 B: d! x" ]$ q+ z
9 ?+ o7 @; S* Y- }4 ^    softreset0 [9 f' u9 h4 P1 E2 Z8 c  V
    游戏重启, 但不重新载入ROM
: T# J( A8 ~2 H7 I# ~" D  V
" N7 C) @) `2 e    hardreset" H- Q! j2 X& i/ I: Q
    游戏重启, 且重新载入ROM
' l) Z" H5 n8 o7 Z6 c8 F' f* n6 W' d. q9 Q, R5 ~& F0 Z5 D
    snap xxx.png
- d: W% D7 G2 L, N. z  _    截图为xxx.png, j9 U9 f) m( y

5 G' [  k; m' S6 A" P5 {: k  ; q4 W& U6 V# {
  
( X$ H+ E/ Q2 `) V- p: P. ]* {  6 B) B$ }( f+ I2 }
热键:
, o2 Y' n' z  b+ A+ n, ]; z1 M    ~ 中断游戏
6 {+ I% {+ m2 [6 P6 V* r' d    F5 运行游戏5 \& u( |  \' E# l% n" s
    F12 运行游戏且隐藏调试窗口" C0 K* @7 r% X, F4 S+ E
    F11 步入, 单步执行, 会进入子程序1 ~: O0 D+ a1 U
    F10 步过, 单步执行, 不会进入子程序
2 [3 _! @6 M& j0 r* w    Shift+F11 执行到子程序返回* g# D/ [7 X% H+ |! L
    Ctrl+M 内存浏览窗口
: K( I! o# i  v# Q' J7 b1 q% G    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. s; v  m$ m0 l, s# }. Y6 X
9 w) G* J' N, p6 v; J* X{:4_94:}
, N' ~7 [1 u' r5 a& d- P/ K& \% C% G" Y+ [

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。6 V8 P" x3 H& Q
+ \1 G0 f3 Y2 L, g% V
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 | 显示全部楼层
要详细些的东东8 r; D! b3 [+ S9 r( i* M8 U: I
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-19 15:24 , Processed in 0.093750 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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