EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

+ S! \1 i( N) W  ?! M& ~! N很快速的整理我自己常用的指令% I( \9 f+ [7 ]' u! @) C" \
8 [) U; o# s, \
{:4_112:}   _; O6 f' }  }2 r3 D2 B
  D6 H+ I8 }! T3 A. _1 }9 f
MAME DEBUG常用指令2 @# h5 C6 D: s1 V

, e) L* I2 T# n3 Y/ C2 @; j内存搜寻: ci, cn, cl
; q5 \- H% Y5 O* B# t/ A0 W, z5 P: p5 B! v) k8 h
    ci
& m, f* P- @% b. F    搜寻任务初始化, 每次搜寻一开始一定要输入这指令( Z2 F8 r% x: C: M

' e+ g) G& F* c7 R, g; n2 I    cn& S6 b5 a: }8 U2 r/ r2 R
    搜寻指令6 p* C, N, v) X& ]! {
    例子:
, ~# y3 s9 ~2 b! }! c    cn eq,601 P. T' a# t6 z
    搜寻目标等于60 (十六进制)
. x( b) v2 ?: Q( i1 A7 y5 h        . |; Y1 I: H) q' E0 I& o0 j
    cn eq,#96
: ^8 n3 _3 G& g" v( F/ w& q& B7 H    搜寻目标等于96 (十进制)2 H; _. _( V. G2 A% A0 Q
. L) r# c* i8 p+ @5 u/ F3 h
    cn eq' m; m+ K& u7 p9 v$ W& s( N
    搜寻目标的数值没有变化
5 i0 q' o9 [: F. B# k
- u9 w, g4 D( C; Z  O% V# k    cn ne/ r# `5 _" I/ Y4 n* \# Z/ m1 O0 l
    搜寻目标的数值有变化* C/ j) |' m5 t) ~
        6 ^7 i- B) q& _# F
    cn +
' I. z' b3 f6 [* l4 W6 l1 ~; O    搜寻目标的数值增加
7 g* S, B6 T# A% G  n% p3 Y7 `   
# t. y& I9 d3 d& @3 d  \  v, K5 |    cn -1 L* Q# n( j, ^* c5 H' c! h- L+ o
    搜寻目标的数值减少. [: A& Y3 s. K% f1 \; t! p
        
* x& z, u7 b* A5 f6 Y; m    cn +,3
$ `' J' F/ p  s9 ~' C    搜寻目标的数值增加3 (十六进制)
7 b7 J- |) P( b( O9 |2 H: l# l& M) |
! D9 K6 A8 V  u    cl
/ A# P$ ]' Q# q& e    列出所有搜寻结果) _0 t4 Z7 b0 b3 W
+ G0 @4 A$ j: Y; [/ y
    cl xxx.txt
6 m  \8 @+ j1 r    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" K7 Y7 p7 U5 X) x* r! |
: e+ w% U4 `, ~   
5 p, v) ?7 U3 ]) S" A内存监视点指令: wp, wplist, wpclear
0 \: Q# J8 j, L/ y# n8 W! j, Z4 {  Y    例子:
4 U0 p& w5 ^) e/ t    wp 1234,1,r
) M9 O4 P5 d, T$ `      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度12 r4 ~7 C! d- _3 s3 ~8 s* P

- `, z' p5 A3 E: Z5 D5 w    wp 1234,2,w/ k9 |. v; D' m$ D3 r$ W
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 k; L+ ~6 D! b& p! G- E3 d' c
     ' p& G/ Y+ G- S9 D( a2 @% ~1 ]
    wp 1234,6,rw
) Y+ K* w; p2 s( s      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) a1 P8 R5 h& O) E

% O/ m1 {+ F! F  e    wp 23456,a,w,wpdata == 1
+ P. p; C: \" f6 w& q' Q( B      在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 n) ~9 W$ A, B. R9 i( ]
; u' \. O1 Z1 n! ^7 g  f' ^' t
    wplist% ^+ d2 N3 s' X& |* u) o
      列出所有监视点
& W" q* o3 `5 d# R  Z' m4 f2 I6 A, p. ~, \0 g& c* s5 H4 t  ?$ C0 N
    wpclear 3' o. S: M  \- J. Q# x. Z
      删除编号3的监视点; b# n% a- f+ m2 z8 _
! y1 T/ b6 b$ {: v. n
    wpclear$ s5 O4 i: p8 p" p- M" X6 A
      删除所有监视点+ A& M+ D9 [! f. H4 x$ J1 G

; M: K* g5 ?+ `) d: _3 Y1 ~' G      
- @# \; C7 J4 P  M3 p, y; K# ~6 {' d& q
程序断点指令: bp, bplist, bpclear
* M! ^  d& R3 x8 A    例子:9 b1 e6 x8 D& t0 U0 z! ?
    bp 1234
/ J3 M5 Z+ r2 l6 J- W# G  j      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% j/ ^% F  M; l

4 {" s* `4 X5 w3 h    bp 23456,a0 == 0 && a1 == 0  X1 F8 q, m* b9 V
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
; Y9 u# T: \( [2 C0 c+ e# p6 j8 n7 i" e& b/ ?
    bplist1 l( {- a  r( |) l( Z' o
      列出所有断点* \' v6 m  t; n- r* J$ J/ K
) z6 G/ P. g) U, m
    bpclear 3
) q- w, G3 I+ D$ @4 p: M      删除编号3的断点
7 o+ V, o0 h8 o! D. L  t5 \! S0 c3 G
    bpclear
% E. m, t! M7 a& O' H      删除所有断点
8 ]  C4 H, {5 ]# T1 N. V! t0 ]6 y+ L8 Y5 g) |1 I
      % K! |9 v/ W9 R0 F
      
* ?& b! ?  z5 {6 Q跟蹤紀錄指令: trace3 X+ J3 l% W  c& r; a
    例子:- V( N. z$ N) B2 q
    trace 01.txt
7 k' `7 Z: X! J& ~# \    跟踪当前CPU运行的所有代码, 输出至文件01.txt" d% @8 w9 |) k* S" `  j/ T

/ S3 E+ S0 \2 c/ I    trace off
. M7 h( t2 E$ {' y* t) W    停止跟踪, 并且关闭文件3 ]8 t( J, a9 u" P# E% a
2 x- k& R  X# i' }/ F
    trace 01.txt,0* v" _- A4 u# g/ g" h: l
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 W2 |& f1 ~; f& `. A* c; E$ o2 C: Z3 p/ E& y
    trace off,03 t2 E5 k# ~6 T( ^
    停止跟踪编号为0的CPU, 并且关闭文件0 U$ y* |; u3 W: Y" ?' j6 G

8 }( y+ \" @$ {3 U    trace 01.txt,0,{tracelog "A=%02X ",a}
- r! M" t9 h+ I    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" {( r2 r# h/ M1 W1 ?. D    并且在每一行的前面, 写上"A=a "
  d/ f! `0 t& V! V    "A=%02X ",a为一个C语言printf函数常用的输出格式" z( p7 h& l1 E7 f. ]/ q
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ i( w9 I: d7 C# Q2 B) w
    X表示为大写十六进制数0 _+ i& j$ \: l3 v
7 O6 W2 S, @( [1 n

% x. X( N$ l3 `8 M/ [2 f, |) y% m, f- M4 D% t
内存直接写入指令: maincpu
& B/ x6 G, [* z1 j" t    格式为 maincpu.[][]@地址=数据
5 e" v( H! R8 }    第一个[]:% ]) D8 i  T! v
    o 表示ROM地址
; H, X8 U% e6 j% Y# W    p 表示RAM地址, y# l) j+ m. p( y" i  P/ C
2 q1 V, P; O) o+ [7 R3 y5 H/ U
    第二个[]:
( Z3 Y% r# r' u    d 表示4字节5 P; q3 `4 r0 w, C
    w 表示2字节
% Z# O" t, `$ ]0 w* l; q    b 表示1字节. N+ l4 ]: Z" r, G% ]+ ~  O

% b( {( y0 i& A0 k* w    例子:
2 _% ^4 Y4 v4 z' ^7 x" }8 B6 O    maincpu.ob@1234=FF
$ L3 _/ z0 ^/ H6 ?' m    在ROM地址1234处, 写入FF一个字节
' r; Q! [% x8 g, h+ S/ }* D! w: y" I2 D$ ?) }' C& g1 S
    maincpu.ow@1234=4E71, S1 |4 F+ Y: G2 Q4 U' J
    在ROM地址1234处, 写入4E 71两个字节
6 t1 t. `& l2 I5 P7 y- T, e& w
  M( `, g2 u* U$ y! Q7 \3 c    maincpu.od@1234=600A4E71* i8 b+ ?1 G! G
    在ROM地址1234处, 写入60 0A 4E 71四个字节0 _  h* o0 d2 w% h! n: M

$ g" A! L3 b; k3 J5 k7 |- j    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写. f# L; l( x0 j' ?+ H* x! I
      f; K2 q( l7 J* d2 c3 t/ a$ [
) d, q0 R7 w0 O, J1 W5 X2 q
其他:0 q% O+ g- s8 M8 z& k1 \5 T8 D2 I
    dasm 输出档案名,地址,长度
! U$ g) [  q" l    输出程序的反汇编代码5 t/ D/ {/ v8 j, U5 Y
    例子:; W$ S7 Y- D8 m9 h( p, e# C; `
    dasm 01.txt,0,1000006 j/ d* K! u- s, A# x( j2 N
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( S  o: L* K5 Y) Q, [4 X1 P- i% k/ ]; U, }# J7 ~+ _$ r, K
    softreset- j- ], C4 K/ O  o, t
    游戏重启, 但不重新载入ROM' c9 Y1 A3 E+ ^6 W) r5 i2 m
) u# j3 D% u+ k9 U& V1 U9 I
    hardreset
) g1 O( ?6 b& ~! w4 a  |    游戏重启, 且重新载入ROM2 B2 W  G1 w- b+ \; t8 Z: Q
( D6 ?" h- c* r/ f5 H0 q! ~
    snap xxx.png
6 D8 r" M: k4 N. @0 l4 j. E9 Q- b8 H    截图为xxx.png
$ y8 f$ d% V+ P9 v( f8 {/ F. k- z, A+ h7 y
  
6 }$ @! N" C& y- X9 O* p  * V* X0 u6 G3 \5 ^" u+ z8 z; U* I
  
' X# B" R- z7 x; ]8 r& b) O! t热键:
3 z( t% Q7 v# q    ~ 中断游戏
" w% J+ Q7 Q0 {: {% v    F5 运行游戏
9 E, Q1 C+ g& X1 E, c& T    F12 运行游戏且隐藏调试窗口& x) _9 c( z1 x
    F11 步入, 单步执行, 会进入子程序
! ]: Y. v+ {1 G    F10 步过, 单步执行, 不会进入子程序0 d& f, ]& w, T, a" @- s( M
    Shift+F11 执行到子程序返回! l# R% v0 `; h& @* Q2 ^
    Ctrl+M 内存浏览窗口; a! T  k8 e4 B
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
- p% }3 c, w9 }& B4 Q1 A5 K* V4 L6 f# _! Q: G" B; F
{:4_94:} . P+ N, ?; l2 v  D0 z: y2 O
& `7 |1 R9 _( x% `1 L

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。/ P% x1 R1 o" L: C% O
, \( l& n0 M6 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 | 显示全部楼层
要详细些的东东0 ]" Y+ n6 t4 t
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-30 14:10 , Processed in 1.087891 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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