EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* h+ G- i1 e2 Z% ~4 i8 V  i很快速的整理我自己常用的指令
) }% M2 y) k! n6 \4 y% L# i0 V8 W6 T/ N
! O# Z4 w* {/ d/ P; d{:4_112:} 5 i' w/ c* n% _! ?7 S: W3 H. V

& u* s' T) }7 L# d* ~" DMAME DEBUG常用指令* J* O: K) j, a# ?
. n3 L$ L; @) K1 t  t6 f
内存搜寻: ci, cn, cl+ l7 w: d. g4 ~

4 o$ M  z9 \8 x5 F    ci
/ T, w, h3 f6 y! A/ O) F/ l    搜寻任务初始化, 每次搜寻一开始一定要输入这指令: y' |! n1 s: o% m& `) H) G/ g5 }

8 \. g" n3 M3 e$ P6 ^9 U. D# t7 O    cn( X: v6 d8 |) o+ O: O
    搜寻指令6 Z) Z7 T/ Z' f: v
    例子:, G& j  n. {( H( z! g! i5 H5 ]
    cn eq,60. t+ k& w0 B2 i
    搜寻目标等于60 (十六进制)
7 @7 b8 y, w! d        
; ?, S$ B; w+ Y. i  Q8 p    cn eq,#963 ^+ t/ Q  P5 o7 A( @( E
    搜寻目标等于96 (十进制)
* t) a/ H, r6 u3 `6 J5 A0 ?( j! l7 [2 r2 U; v$ ~
    cn eq
% X" w( J- y, ?! O6 p( }    搜寻目标的数值没有变化4 l& ]7 Q% C  Q+ L0 h& I) s

. ?; i' @! g" O" C  I, g0 v0 ]: s    cn ne
2 p! k! }1 X7 }  }    搜寻目标的数值有变化
% ~3 T/ I7 X4 O+ c6 [' i/ V        # R9 k5 X8 R% g. h
    cn +
, M. g* t! G, X8 n& c+ t. U    搜寻目标的数值增加
; f. H& ^6 P; a1 x! o   
5 M  Z& R! c0 B0 K" r    cn -
2 ]& S  e" p! r  A  k4 G    搜寻目标的数值减少
' o+ p( R0 m: ^1 H, ?        
- f  C: k% ~6 d) u' `3 f    cn +,3! z! H% p: |- W" p0 K
    搜寻目标的数值增加3 (十六进制)& ^6 p: ]  C: w& j: L/ k4 r

! H) b) R# k; G1 Z) M. f    cl
- p5 e0 h+ |4 t$ e    列出所有搜寻结果
  b! p4 ^6 X2 C$ k2 D- W- O1 I9 u! S
    cl xxx.txt8 z8 Y: R3 M* w1 m9 W! w
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式9 V) {/ Y* s* R1 w0 Q

' w+ M3 s; }! r    - v& s, e# n' v% r  b
内存监视点指令: wp, wplist, wpclear7 x( b5 W4 _+ f0 g# R  J" q) \
    例子:. x2 w( @; U/ y! e6 V8 R  i& c  f2 t
    wp 1234,1,r
" F( K% F/ [, `. e$ y2 p9 P0 R% C      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' U  o: k- J, g3 C/ L4 w) j" E7 V5 x

  k! W& P0 |1 J4 Y# {* l    wp 1234,2,w
& z" i8 v3 L4 |9 v8 [      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
: q7 i$ h+ \4 R: c     
1 m5 _/ s! Q0 `1 t4 @+ E    wp 1234,6,rw
: n+ h2 L# B8 F" d4 c      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ t9 [% T( V  O0 B
7 O) S1 m* ~$ Z
    wp 23456,a,w,wpdata == 1) ~* K: l, k% E  e
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 K& s: C+ d; Q+ P: Q  d
8 ^# i- D9 S6 n( {. H! F( D' j
    wplist8 g3 y7 a9 t; A  {7 r  U4 d* l
      列出所有监视点
! D* R  W& E' O/ Z3 H1 E( r" V* n
( b$ r! s+ {5 Z( n' h5 @    wpclear 3
8 F, g6 O" r7 T      删除编号3的监视点
* w% E# ?& L% Z- ]5 I2 V4 B$ [4 ?8 q( z* d% \' Y6 I: T
    wpclear; o  R) s9 O; ^; H- J' ~
      删除所有监视点2 }  G2 C  d8 s
2 X% H  Q/ i  u: g5 A9 h
      7 }2 `/ c8 D+ n
. x& n7 g7 C, r* ]5 h) ^) J
程序断点指令: bp, bplist, bpclear
# V( W2 O) U1 m+ k& p8 |0 \    例子:
5 G5 R% Z" f6 c/ \, q: y    bp 1234
; U$ o( s* }4 V      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
2 ]4 D& }, Y* c6 P# l
% _! x* K, h) e: _% F) Y' v8 }, Z    bp 23456,a0 == 0 && a1 == 0
6 U8 ^$ f3 u  J) E. Q      在地址23456下断, 且中断条件为a0等于0以及a1等于0* p* l1 N2 L. i! D

- s2 ?; m6 `" ?1 f    bplist2 v3 S$ A5 z2 x. |
      列出所有断点; R7 H; x, i5 U+ A; Q

7 b: w+ x" Q. p/ T* E% b5 g- t( J    bpclear 37 @$ \  X& J- V# `# N
      删除编号3的断点8 n. I1 t$ W( I* ~) _& g  t" j

9 A5 r) r% v% H0 x  ~9 x, F    bpclear$ ]3 h% d7 Q1 ?6 {
      删除所有断点+ R" ~4 ]$ g' |2 M

+ h, a- `) T4 w* `. d      
# J  S- K% V- m( z- M" `! u      7 X# _& y% B* O7 c+ I- q6 H( e* b
跟蹤紀錄指令: trace
0 a, z. F' w2 C/ c    例子:
( s3 }/ v% K4 o: t* |    trace 01.txt2 k" k$ e8 k2 W0 d
    跟踪当前CPU运行的所有代码, 输出至文件01.txt- K  h, E/ p/ _$ ?( I2 ^& [! {+ H
. X' u  c  A" i+ F+ {2 Z: q$ n7 T) }
    trace off* @) X* _$ G9 S& @" N2 K. e: J- ]
    停止跟踪, 并且关闭文件! L) |  x% q. @3 G5 Q% y

+ Q- x3 k/ i" {; X2 Y7 w1 i7 T% V, l    trace 01.txt,0
, R$ u: Z4 ?0 F2 i7 b1 E3 d9 T    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 P0 q' A, [9 i
& `  p2 S7 Y+ ~5 E; c9 e; H
    trace off,0
* }" S/ ~# _  `( ?. m* I$ T" A    停止跟踪编号为0的CPU, 并且关闭文件0 I$ H& s2 C* U3 L4 q0 {
/ X! S7 ~# q7 J0 D6 A
    trace 01.txt,0,{tracelog "A=%02X ",a}  D$ Y1 L7 H2 c2 B' G0 l7 h
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt + U# W& z/ c* `. i9 o5 l
    并且在每一行的前面, 写上"A=a "
, A# |2 ^" q9 f- G- D7 `    "A=%02X ",a为一个C语言printf函数常用的输出格式
3 y2 N7 L' X) H* \$ }3 o    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( o; G6 A/ v& I6 m! G
    X表示为大写十六进制数
1 P8 \- A0 R( d8 g# B' Q  h3 J  g0 o$ D. c) |; z) h

* |4 R) E/ C$ G( e; e1 f' \  Z! |4 U2 w% ?" s8 ^
内存直接写入指令: maincpu5 P# y1 g- b9 T* m# [8 K% m4 V1 c
    格式为 maincpu.[][]@地址=数据1 G7 w, u- n  B5 m
    第一个[]:' L' Z$ b5 U" X0 O2 m5 M
    o 表示ROM地址
' m% p5 d. o9 a# i4 P* o% N! l) \$ R# e    p 表示RAM地址
" P0 _: P" H4 x% M. O' E* P" y( V6 W, F3 }, C# w
    第二个[]:5 Y- Q" @* G( F5 @$ e4 y2 l
    d 表示4字节
+ k* c/ w. C7 [    w 表示2字节
5 y/ R& ?1 P, E    b 表示1字节) J7 G+ s) B' w* Z& \4 C

* h4 m; u+ P" P& n8 L$ M1 a1 H    例子:. V1 S: k' C) F6 `+ @3 C
    maincpu.ob@1234=FF8 ?- g# d0 j) y. U1 i9 a: P$ s! J
    在ROM地址1234处, 写入FF一个字节. j4 Q: r* s  f- r* U6 f- L8 m
( [7 F! S7 S4 ?- B; B& q; i
    maincpu.ow@1234=4E71
* |& ?: F6 _3 k) N2 @6 V6 c    在ROM地址1234处, 写入4E 71两个字节/ c! k$ k2 @: G( I3 s
" T# N6 Z" z5 @% F
    maincpu.od@1234=600A4E713 E! v- m0 ~( a* a: ?# P: ]
    在ROM地址1234处, 写入60 0A 4E 71四个字节
" B/ x1 b5 X" i$ c- U9 v* ]) r$ f3 y% ?: @
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' \, p/ A! R& Q) E% r" T   
; K8 r' p8 I7 }: {# y# i1 ^
% C  f3 R9 A" e% k8 T! m7 ~其他:
; R8 [; D4 Z0 F% L/ E/ h2 E2 X    dasm 输出档案名,地址,长度
5 A% r) e$ K! \    输出程序的反汇编代码
. p3 A) r# H% U7 J9 Q. b* k    例子:
2 O, E& V9 g+ \, d5 {) f, c    dasm 01.txt,0,100000
  N) }% M8 ^; ~    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ \1 r  n4 h$ e  u5 Q. P2 \) \# m
8 N0 S9 i, k' I8 k! f3 I' F    softreset/ u, G' _; Z0 Q/ ?) D% P2 Q
    游戏重启, 但不重新载入ROM
$ e! C/ h( Z0 a9 J. [
8 q7 q& u" a* S1 a    hardreset
6 v0 i5 a4 g0 {& @/ I+ x. s    游戏重启, 且重新载入ROM
- }, m0 e: W0 l5 u6 J
% s9 D5 O$ |) T" S    snap xxx.png
0 e7 B) N9 H$ A; v    截图为xxx.png
7 e' b& n& j; V( K; S* Q3 O, ~
7 `' N, ^% L+ O0 T  e( h  
1 w: c7 o) F" [5 V8 r  8 F; J7 E. y/ }; B4 P
  
5 b# ~1 x$ u2 ^6 T/ G热键:
* Q; V) j; g, |1 X* T! S1 r# }6 A    ~ 中断游戏0 z% `  C' q/ c% @3 e0 H5 n$ E
    F5 运行游戏" y( X7 @# s- b  c5 l; o
    F12 运行游戏且隐藏调试窗口
7 w" t: h5 u% L0 x8 W" S    F11 步入, 单步执行, 会进入子程序
0 V# w2 L; h/ `- X; H) k7 e1 C    F10 步过, 单步执行, 不会进入子程序9 [9 u+ i3 {4 Y) M
    Shift+F11 执行到子程序返回7 t% Z! o( L- d5 x; w
    Ctrl+M 内存浏览窗口% K2 w3 x" Q# r
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; ^7 m' v# ]9 s) [( P8 E
4 ^4 s3 l, q9 p* ?4 M( _3 Y' H
{:4_94:} ( J9 T6 V5 J4 ^3 \# }1 L7 k+ G
% G2 e" t- u) E# s3 F3 U5 G

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
1 T, P5 l( c8 n' c$ K. D# s( c& d. a0 Y( v# }- s8 Y, Y
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 | 显示全部楼层
要详细些的东东
- K% R$ Y2 w" j/ C+ A* R11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-8 06:50 , Processed in 1.113281 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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