EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* h, b$ v+ ?  F4 ~& n4 w$ ^+ a$ ?- s很快速的整理我自己常用的指令
1 f. }9 Z. U6 q' n4 Q# y$ t: l: _& _* _' q$ ~: H- K1 b9 Q) w7 C
{:4_112:}
( \% C$ i. ]. V/ b. f- [# a" w9 T8 r+ v/ F
MAME DEBUG常用指令& {) a* m) `6 M
. ]) k& U/ ]) W; c! u
内存搜寻: ci, cn, cl9 P5 k2 O0 E* l. g2 u( c: |3 g: s
4 G3 t( P) {3 l# k
    ci
; K: t: I  G/ T, s+ K    搜寻任务初始化, 每次搜寻一开始一定要输入这指令: r, }7 u9 l4 N, @6 D
' u, y9 s' ^+ B; J
    cn
  q7 f3 L" j0 N    搜寻指令
, B- z* O0 y0 m, A3 v! z    例子:
5 f0 d& c7 u8 O5 T- Q; q) `6 ^    cn eq,60
! ]  \. V( s) J, |' ^: `    搜寻目标等于60 (十六进制)
0 `# `& _% x0 h& J1 k! b        % y! ~. b4 [+ w( E7 p; Y$ `
    cn eq,#965 `! C+ a% h& E: `0 g5 X& W: \7 t
    搜寻目标等于96 (十进制)
  L2 P, |, ?3 V* K! U4 ~& J+ E- L/ `+ I7 j3 M
    cn eq
, u/ \& i, c7 P0 J. w2 `    搜寻目标的数值没有变化
0 F0 A2 y3 f- W0 K# `0 [) v/ x* o' Q, O+ s
    cn ne
$ Y" D  Y% C, y4 W2 i- G    搜寻目标的数值有变化1 F2 c) M8 |# e
        / |9 M+ |' }* l# R& \, R) E4 O
    cn +
2 F% E4 r/ `  C2 d" B- Z    搜寻目标的数值增加
7 h+ j3 U7 r$ x    2 H% F# {4 E0 Y, f
    cn -
! u- k% {4 y0 V5 p  a& s    搜寻目标的数值减少2 [" P  _1 U; n3 y4 t7 E8 b/ R( O
        
9 l" V( V! ~0 A! z5 `5 B  l: s" x    cn +,3+ ~5 _6 N  x0 T3 l
    搜寻目标的数值增加3 (十六进制), ]' x. `& ?; |$ p. G

* Z6 {/ @, q, e* a. ^# {    cl
2 o8 |, {- [1 M- Y' I9 q! Z" p    列出所有搜寻结果8 h5 Q- y. k. R" C, J
# ]6 }7 x( z2 H
    cl xxx.txt
7 J9 O/ W- R) K( x4 g    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* F7 r( B7 G; G# A9 S* o; n

  x# W$ v# s% ^- Y   
* g$ q- d7 E' v内存监视点指令: wp, wplist, wpclear% f3 I) z5 K) w7 N7 a" b7 ~; j
    例子:7 Z( G1 O8 x- t! D
    wp 1234,1,r
3 ]$ n5 o' ~6 l& S      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
( r+ ^9 Q6 Y, ^6 G2 s& |' r/ f
* H6 S" }, F  P    wp 1234,2,w
: i9 I. g0 x6 _* v" T      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ u3 M! {1 P2 Y: E: X' X
     
) K9 e0 Y5 y" V    wp 1234,6,rw
% t2 K" I1 `; |6 z# y' y      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
- N3 q( ?3 q: d) z2 G
7 j, v5 t$ d- L4 J( F& M' g4 u    wp 23456,a,w,wpdata == 1
% {& o8 C3 d6 d  Z3 d' R- ?5 v: w2 X      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: l5 w# E$ v3 w5 N) T' P# h
; u( d- }2 F9 X. {5 Z
    wplist% c& Y' z. V3 g: O% P
      列出所有监视点. P) A& J  P$ e0 P5 E4 G- e- Z
4 z6 l* u: h' N+ l' @% D" w
    wpclear 3
+ r: p( }" ^! i4 R& b4 _4 c      删除编号3的监视点
% O6 s+ v( S8 C* |+ {- \
# d3 E* w7 |3 S- k    wpclear8 j, q: R- Q( G9 r
      删除所有监视点
( I" |* w. ^4 s7 y
7 |4 e* ?$ S5 d9 T      
9 U* Y% H1 v: h% R3 Q' I0 y
4 _/ [( [3 f$ G: x( p程序断点指令: bp, bplist, bpclear9 J9 _2 D: ]0 ^# J& x+ F1 C: M
    例子:
) G. }2 A# Q7 d: g( Q, O    bp 1234
& J+ g8 u; b9 k  f      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! ^0 }+ L: A, _4 m, [4 C$ Z7 z' u6 P% v$ o3 c1 X
    bp 23456,a0 == 0 && a1 == 0
6 F7 d# {  _- E8 ^% u: G      在地址23456下断, 且中断条件为a0等于0以及a1等于0* ^( e9 i0 X# }. G4 G) B

6 J; v! w& r6 y. w( y# t    bplist$ c3 g2 h2 Z4 T; F! e9 D' v
      列出所有断点! K+ v9 ^0 a. b, y; m
/ g2 E4 Z! I7 I1 J' ?  j
    bpclear 37 ^, r3 h+ X0 Q; {8 K
      删除编号3的断点
8 @7 D0 x% \; Z4 \% @& y
$ k! y- |' L7 V" F    bpclear
! y( r2 N% Y  u* D( r8 @& Z( G0 }  V; T      删除所有断点
; `! E% ]! q& \+ l5 y3 t
/ k+ G' v0 G/ t9 D. ~/ y1 \1 e; C      
; I; @0 T& d  l( i      + \' ?& v8 ]  _2 Z" ^# h* y  ]" P7 E
跟蹤紀錄指令: trace. B8 i: P& Y# A) n. q* u9 H) F* O+ V
    例子:. ^5 A9 g8 ?! U. N0 v# o
    trace 01.txt
  o- u/ _( I! _5 Z( a% K    跟踪当前CPU运行的所有代码, 输出至文件01.txt
& ?. ?# r  E" }3 J; T2 n
/ W: e- _4 X; _# m/ i& r& m4 b    trace off
/ |' w- ~# Z/ ~' y    停止跟踪, 并且关闭文件
6 \8 \! j/ H- ^1 ?& _) v( X6 g4 h8 x# X* \5 h) x
    trace 01.txt,0
9 z9 W9 p  `* L  E  q  A    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt# o3 D9 ]! q5 z* Y' G

- P) ?; A- C' G! m- Z    trace off,0; y3 s1 n7 a' b: d# Q/ d2 o
    停止跟踪编号为0的CPU, 并且关闭文件; Y& |8 y& u( y6 _

- ~" [& I3 z' Z& G    trace 01.txt,0,{tracelog "A=%02X ",a}
3 r6 }+ t' h9 b- v    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- D  h# p$ i  L# q( I; E* ?    并且在每一行的前面, 写上"A=a "
6 c& U5 [' W3 T9 x$ l    "A=%02X ",a为一个C语言printf函数常用的输出格式
& e: x! n% F' Z4 M    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( H! k& F+ I7 ~* |! c5 ^    X表示为大写十六进制数
; s- ~# N; z( l6 {6 j9 \9 j* s6 ~  R+ H5 T
, Q% i$ v: F! l/ n3 C8 R

! i, W2 I# |2 v" K6 |: B7 j内存直接写入指令: maincpu" C( B0 A$ L( y; K* }- l6 j1 g; R
    格式为 maincpu.[][]@地址=数据: d. ?) y6 E% a2 q4 l) ~3 }. c: ]
    第一个[]:! {0 w" ^* s/ |* {6 O' w
    o 表示ROM地址' ^* _3 s6 r7 l2 j! s& p6 m
    p 表示RAM地址
* ^; j( w2 X) }7 l2 Z& K% j( a! u# u' U! a0 @& W
    第二个[]:
: T/ t. n9 ?) p8 k    d 表示4字节3 c5 \9 E7 Z3 p
    w 表示2字节
# [6 o: W/ B5 ^' ~    b 表示1字节
6 M7 g4 E( ^( L" F! [8 ~" i+ U/ ?% J. e
    例子:- k+ |1 w1 z' w0 ^& T6 T: O( i
    maincpu.ob@1234=FF# J7 l* |, W7 o8 m  Y3 m, q
    在ROM地址1234处, 写入FF一个字节
. c* m; I% r$ Z" C- l# M9 H! B/ a& v% O/ @$ Y
    maincpu.ow@1234=4E71/ m. X5 n# B$ R1 U% u- D3 Y) `
    在ROM地址1234处, 写入4E 71两个字节
; F: L# j! I# f
3 J9 K5 N4 y) P+ T2 y    maincpu.od@1234=600A4E716 {8 w1 @1 J! j1 B0 n+ _5 |! }) @: H
    在ROM地址1234处, 写入60 0A 4E 71四个字节
1 E1 N6 D% H+ L% j$ w4 w1 q
% j( V8 W2 k( e9 `: L    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 p/ ~& b) ]7 z# N- z/ j& t    ! k* i( V$ {. }* ?$ b- D

% v8 U, y& g6 Z其他:! B" ^/ Q0 V/ ]* T' @
    dasm 输出档案名,地址,长度
4 E0 V$ P  P4 u' Z* I. o    输出程序的反汇编代码
  ^7 l/ o+ {: q& M- t4 ]  g- s* H  P    例子:
& F# z' {1 M: o. T4 T' \1 W6 i% `" Z    dasm 01.txt,0,100000
& S- p5 d* D2 s2 d* U    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
& o8 h* n8 l& B/ |! V. q
' ^7 ]* f2 W! u    softreset
, [9 C. A) L9 F/ R: {) N    游戏重启, 但不重新载入ROM
. S. l% d6 k, R- n; Z$ L1 V2 s( M5 V  g0 W$ p5 ~( N
    hardreset
1 X. }; K$ u& s: b4 o0 w1 |    游戏重启, 且重新载入ROM' Q+ d( n. i1 n: u( J- @' F( n( W
" E$ N+ z0 q7 @5 ^8 @; z
    snap xxx.png
% D& g: c( J1 {; r. U0 K6 r  W* {4 k    截图为xxx.png( E( W9 @& y- q% r- [6 }8 w
; E: Z3 J9 h( S  x
  
8 r$ r( ~( V" A3 y, t1 R  
3 q: U9 O3 ^! A# ^9 K* ?5 K  
6 @- J, h" e0 J/ Q( h. g3 w! z$ {热键:
3 Z, E- K4 W  P( C0 o9 ]1 |    ~ 中断游戏* @! m9 j& v$ U5 ~9 Q& q; I) V" \# U
    F5 运行游戏3 E$ Q# `5 I% P* ?2 f
    F12 运行游戏且隐藏调试窗口
5 d- o) M$ v7 u0 H    F11 步入, 单步执行, 会进入子程序, `( h( T. ~9 f* H4 a) b5 t
    F10 步过, 单步执行, 不会进入子程序1 k0 Y3 q, v* P' x1 ?0 p
    Shift+F11 执行到子程序返回/ ~0 N8 Q# M* o3 d  f: M, I
    Ctrl+M 内存浏览窗口
0 E' |$ v, {. E' y    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: T2 }$ `, }- ?3 b+ l+ C/ M; S1 L* F: w7 s
{:4_94:}
* `% a% K( ]1 r
" o  K, y/ T' x/ ?  i6 j; s

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。& r- K7 L& E5 e4 `6 p* h
& ]# Z7 Y$ I1 K. U& h4 B# C4 F
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 | 显示全部楼层
要详细些的东东
; N1 o5 o! o: _! T/ d/ `. K11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-7 02:52 , Processed in 1.177734 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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