EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

  ~. l# r; d4 i: b很快速的整理我自己常用的指令3 L! M9 q- U- R, b6 ?4 A' C

' D9 B8 }7 k. g4 `& s{:4_112:} " U0 U2 Z( v& r

7 ^& d4 ?' G1 J7 G0 }) gMAME DEBUG常用指令
' Q$ N$ ~7 ?" n% E) z& W& G
( S8 n2 I$ g/ z: l! ~2 \- }内存搜寻: ci, cn, cl
) h) Q! G2 {& @0 b; r
  [$ R8 I' |9 Y* d) }7 {    ci
+ \( V$ r; a0 f6 r& x4 @0 t9 J    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
( }. c9 h* d, _  b. D1 j' d8 X+ T7 a# q3 [0 q! d
    cn9 P& e8 ^& @- ?9 v. z3 D/ }
    搜寻指令3 y6 N3 s) U: L5 o9 ^, D& a
    例子:. X3 T5 b& ^$ }: T, f! F) Z
    cn eq,60
! y6 ]$ @/ U" D! O- }4 X    搜寻目标等于60 (十六进制)4 m' J  a. ?; k
        6 _/ _3 ~& a# ?/ M( S- G( X0 t
    cn eq,#96
! K% o) w* _9 w    搜寻目标等于96 (十进制)
0 M6 M9 h* Q; b/ n! s5 O1 U: \, F  T' \2 C
    cn eq
) H# O  x4 z" n% w8 \% Y3 A    搜寻目标的数值没有变化5 h+ L* Z/ O. }2 S; k+ I5 J

  J' Z' w; B" L- e4 R    cn ne6 a* S# N2 B; a8 T' ]9 x* t2 Y
    搜寻目标的数值有变化: m6 g( D) M, ?1 g: @3 g6 j
        
# i; J& n# x. }& A! d% c! h, x7 `    cn +
, x0 X  b8 o" C5 d- E    搜寻目标的数值增加5 {* }- d2 [# C- z3 G  @
   
, @9 K! y: M8 L7 I/ d/ G& \    cn -- \& I& }- R% W" T! N7 S6 N8 X
    搜寻目标的数值减少
* _  ~( D7 ~! M1 Y' E        
- z6 k. D5 {" l    cn +,3
, {7 c. d: N" U4 S) i! A4 S' i    搜寻目标的数值增加3 (十六进制)
2 m8 o) S% }2 v" X7 s& J' ^5 t& l4 i" A
    cl
6 J! N/ q) n9 |/ p% t9 [    列出所有搜寻结果
# x2 |- [' T6 |& h- {. h' b
/ m" @! p- Z# c( q' R5 |" u' h    cl xxx.txt8 Y8 p' Y& p3 X7 v! a
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" R0 L) V5 F* ^8 r0 l0 U4 Q2 y/ N# b* s
   
0 C- `$ H) K3 B8 x% y内存监视点指令: wp, wplist, wpclear
4 v7 b1 C/ a4 ]    例子:3 ^+ j" K( e, t, n1 F7 C$ `4 {$ b4 x
    wp 1234,1,r1 W0 y% u* Q8 Q, x6 z. x  Q
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
. q. I7 O3 p7 l1 U2 C2 Y0 h- m+ ]0 c( ?) j: d1 ?; @  ^2 T( q
    wp 1234,2,w
" w' `$ V& j# g* [2 Z. ]# b9 j      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2  l4 s* D! E8 h
     
5 l* t  d; G9 O. j% j  f4 ]    wp 1234,6,rw
6 M, ~" ?. y) a      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( N9 z( @* l( ?+ p7 q! e* S1 ]5 B) d2 ]  Y6 ]& [3 H! L
    wp 23456,a,w,wpdata == 1
/ s) r+ W) L) q. H6 R      在地址1234下写入监视点, 数据长度a, 且写入的数据等于14 Y. T- G$ e8 }" Z! ^5 C, m8 o
! f8 y4 \) R) [, d  i
    wplist8 C' }  B2 g( _" j% E
      列出所有监视点- q+ G& a( G. Q

0 J. J" ~; ~2 y    wpclear 34 ^6 P  y! [, h+ ^
      删除编号3的监视点2 z  K# N$ z8 z% r8 c% j
8 Z0 }# T- b  @. v2 |6 e
    wpclear5 Q- C7 M9 ?. n9 @# L5 q6 N$ |
      删除所有监视点5 E* t0 K9 {, v$ K. v

- r8 J" i* v% l& v8 N8 k      
! f6 x# n. D1 G0 M* K7 t9 v3 R
程序断点指令: bp, bplist, bpclear5 Q' Z4 S; h5 V$ h
    例子:
+ C+ U9 {9 ]$ w6 E( w" X$ Y1 c    bp 1234
2 [8 U' b, v, ?9 K' D      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
: [! ^8 R6 Y( r- x$ b6 P$ j# M! ~8 Z
    bp 23456,a0 == 0 && a1 == 0
2 u9 f5 A+ R( N. U      在地址23456下断, 且中断条件为a0等于0以及a1等于0
" I' _5 ~, f8 l- k) p2 V* v4 a6 M- k& L( }6 S
    bplist
  ^" c: z6 I7 u" `. o" Z6 q6 `. x      列出所有断点
) ?  O- P" V' ?7 v$ |7 j$ |/ n! |% G' j* Q* m/ u8 n2 _
    bpclear 3' t4 |6 d2 L/ x- o4 {
      删除编号3的断点
+ M2 K1 h3 r- W' h1 g: M; b; z: p
( a% m8 q, @* A1 J9 U8 o4 C    bpclear5 g8 k7 W4 |% {
      删除所有断点
, G( {2 S) t2 C6 j2 I) a
  {. I$ @, Y9 [& V) E2 L      2 j% K- D% S6 d6 x+ k
      - @& m$ Q/ o/ X; c4 w+ J$ @! o
跟蹤紀錄指令: trace
! }* Z. f9 P, [    例子:
, b3 Q0 y& F6 [9 d! m: u; o    trace 01.txt
( b. m  W5 U. ~3 j& U' ]    跟踪当前CPU运行的所有代码, 输出至文件01.txt
0 b1 Z/ U/ C/ I; V, z% C3 l$ N" f
9 v! s4 w! ]" J    trace off- [2 m" w2 W1 e2 z% b
    停止跟踪, 并且关闭文件
+ W' b7 {$ q5 W0 \0 \, L/ d( O* @4 A& {) A! {. x/ l. g3 d
    trace 01.txt,0: I+ |3 d% [9 ?7 k* V
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' j. o9 \/ ]. i$ h. x3 z: {1 K+ G6 {5 o
    trace off,07 h6 u5 B7 u- D! e" v* y
    停止跟踪编号为0的CPU, 并且关闭文件
/ t! [! E1 Y5 ?( g  x* f( v* f: E$ t
    trace 01.txt,0,{tracelog "A=%02X ",a}! N6 X* K& `) a4 ~7 r
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt $ m% u& D# K* @: o
    并且在每一行的前面, 写上"A=a "
+ I; W: h  h8 G( @4 o    "A=%02X ",a为一个C语言printf函数常用的输出格式
) e; ~' Q$ A. ^% U) U    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入1 N  X  C: p, X
    X表示为大写十六进制数: T1 r3 \1 \+ E; F  B8 \
3 b# U9 z$ [9 S- X% d& d) c
1 c6 {; \% K) i3 e! j: I

. y# y7 u+ \" R8 z/ A' Y$ `内存直接写入指令: maincpu6 a8 K  w! Y" _3 A+ y6 H7 [
    格式为 maincpu.[][]@地址=数据
" P4 Y  n* L  V$ I0 ?; k) C    第一个[]:
; `; j! P: v! X" D5 P5 [    o 表示ROM地址+ e- l5 p$ X" K9 r3 T/ A8 Z7 d3 W
    p 表示RAM地址
' F1 }! d  [* D
7 p4 N. z8 Z7 I0 s    第二个[]:$ K, Y# d) t+ I' J+ O5 o
    d 表示4字节
) }2 s! y# x# A/ L/ c' b! T    w 表示2字节
1 ?( g& P1 q7 J7 \8 s/ @    b 表示1字节; p' e: E( l1 z! p
) F/ n$ j" l7 E  L
    例子:: r4 E( k0 \, ]* ^
    maincpu.ob@1234=FF1 K( Y/ F. S4 t* c
    在ROM地址1234处, 写入FF一个字节
, ~  X& e7 X5 e% x# f+ F0 b
" |) n' h: ]( ?8 @    maincpu.ow@1234=4E71
: m5 H7 {: o% _( H1 V    在ROM地址1234处, 写入4E 71两个字节4 O: D/ S2 p# M5 ]; f

0 a: G9 |3 _% n8 f! T: f    maincpu.od@1234=600A4E71
8 }2 i# |* W, q3 F# |    在ROM地址1234处, 写入60 0A 4E 71四个字节
* R/ o, T  U  L: y  P8 c' {1 I8 {! ]
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
, ]: H* t% A# P, \/ P8 g. i, e! p   
5 u: c5 d+ X2 C" K  s0 j
% s, p$ p, E. K  A: M9 }其他:
4 {0 X8 G3 p+ G; G    dasm 输出档案名,地址,长度
1 O' Y4 I8 w3 X/ A    输出程序的反汇编代码9 Z) d& ^) i# x/ P, ?# v
    例子:2 ]6 P+ W( z/ P2 h& \& t
    dasm 01.txt,0,100000, i! C2 Y6 i3 |/ I! y
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
3 N! G  \7 X$ m6 S/ E7 r( p2 v- P' H2 w/ ?
    softreset  y+ q' L2 O' Y4 g; J3 K
    游戏重启, 但不重新载入ROM4 Y: L4 k5 m% |; s/ x6 N) _9 Z1 x* X

3 e9 b7 G! H4 H) z" V; J/ k( M+ e    hardreset
3 o( e; w$ x! w' Z+ I1 A1 \    游戏重启, 且重新载入ROM
0 ^9 F( b3 G6 w* `0 V/ M0 ?! b5 `, l3 z8 j, A* |0 V( m. U# r$ G
    snap xxx.png
% i  [$ d/ a% f$ T: O    截图为xxx.png
  b% _* }0 Z% ?4 t  M% J1 [9 e
* ]: ^, ]5 D' U  4 I% K  ^& `  C! M" w
  6 y. K" f. |  R" g  U3 v
  4 S# K/ A' l1 n& n2 M
热键:/ |5 i# M( P2 d- t6 h
    ~ 中断游戏
# K" P- v9 m+ l5 m+ a% c% C& c: ?    F5 运行游戏- J5 W9 P( y8 ]# e  |5 e8 O9 k
    F12 运行游戏且隐藏调试窗口
& y9 Z  ~( L/ b7 J    F11 步入, 单步执行, 会进入子程序& |1 U7 ~0 {, J) v
    F10 步过, 单步执行, 不会进入子程序
! a1 f+ k  J8 W$ L0 R    Shift+F11 执行到子程序返回  w" ], ]8 C- K# \
    Ctrl+M 内存浏览窗口" w. G4 o0 _2 _$ m
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU5 `3 l2 Q# e6 k9 g- g! k& B# X+ U

+ I9 d; V5 y+ x5 e{:4_94:} " p1 C/ a0 y% F0 D6 q. n- f2 n
" R+ V# Q" q  e! H+ A) \

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
2 H; B/ o" ^' U6 Q- R
" M1 p  e/ s5 ^5 T4 P* kPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东6 q& C6 n  w+ R
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-3 17:19 , Processed in 1.123047 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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