EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
; E- Z1 J1 P, @( C8 [9 L: Q
很快速的整理我自己常用的指令( K3 ^% F& n. `! \: L, o

. o3 M* L3 b$ I, y{:4_112:}
# a$ E: W5 |" D7 K$ o; w" l* Q6 I6 i5 A0 r1 E
MAME DEBUG常用指令
* o/ R# v5 G8 s7 n3 j( P7 C; l6 J$ \) l+ U
内存搜寻: ci, cn, cl
7 |3 Z+ E$ [3 J7 b
% ~* I- D2 J4 H" Y- j8 u    ci* |: w; g/ ]; V9 h
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
$ N2 B$ U- |5 M' S0 N2 z! k# c
3 `  Y1 P) A6 {' d2 J9 r* f) Z    cn( s; b' ~, u  j2 N( o8 w8 {
    搜寻指令
6 F, C2 x+ e+ ?% l) [& R    例子:, J5 S  ]' V  A5 s1 R9 i, r
    cn eq,60
6 F1 I6 G% }* A; l6 i" ]    搜寻目标等于60 (十六进制)3 C0 d9 D# W! `4 {
        + q: ?4 h8 ?0 n, Z1 |/ c) ^% y- S
    cn eq,#96% d) X; \* m0 t7 d4 V& s
    搜寻目标等于96 (十进制)
) b7 w) V8 T% A; t2 {  Q) e) u) ?' i% p# m
    cn eq
! |, n5 p; e% J; S    搜寻目标的数值没有变化5 ]' y) o4 w, X" H

. f5 W1 Y" m  L% Z3 E2 Z    cn ne7 Q) F9 s# d1 P+ G, ]2 c
    搜寻目标的数值有变化, A6 ^/ y$ i/ s
        8 Y: W* J* o6 ^. \" C
    cn +
- J$ \) @& w- Z. I6 Y    搜寻目标的数值增加
( O/ g2 ]2 `5 l# p1 n0 D    , X% Q# o' C& ^
    cn -8 E; b3 ]* e: K9 L" g) z/ u
    搜寻目标的数值减少, m' U$ M7 G0 a- D4 q6 p; b
        0 x) _$ o4 H* \: h, w2 @
    cn +,3! X7 f& u( @% O4 t3 q
    搜寻目标的数值增加3 (十六进制)% G+ `- J6 V" B! t7 n
& H) J+ {, @% N0 I
    cl
$ Y/ }: }1 ?2 g, \' F; @    列出所有搜寻结果; j# W2 [1 ~4 `

2 a8 h) [+ x  U8 D% y9 z    cl xxx.txt
' H% Z8 J( o  F3 F$ F    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 x: y4 ^, E2 ~+ {, W

, y# K9 H$ ]% X3 D7 c  @   
, i* i# D( o; V) C内存监视点指令: wp, wplist, wpclear
. M1 k1 W$ ~* ~  J3 N    例子:
3 x( N- W3 e. _2 l4 Y2 E- }" `. s    wp 1234,1,r5 H7 ?# C% ]4 m; ]3 t" _! X
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1$ R/ v- A' f/ z0 t2 m6 W) j

* W3 x8 `; t8 V% L    wp 1234,2,w
" @9 q% ^1 T2 g8 ~' f6 d      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& J% }3 d; @6 w" u& k     / y- y! N1 i! j$ w. E2 V0 f- f
    wp 1234,6,rw3 W' a' t% [1 u
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 ~7 ^) X# o4 e, }6 A% E# ?. |1 e7 L4 t+ U
    wp 23456,a,w,wpdata == 1. G& K) {8 r9 E2 _! S8 V/ T
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) p' S4 E7 \! Z+ `* M$ l- ?% R( i6 |" k& G
    wplist
" [7 O0 e2 C6 ~  d      列出所有监视点
( T' ?, i4 O) \- i( X1 [; j3 P% @" O5 N5 c, P4 U) h+ H
    wpclear 3
( F# n0 F9 b$ C, u; {      删除编号3的监视点
* B. ?$ P$ [2 N! h; {# G# I+ A  O$ U: n. p
    wpclear8 V# S' S5 g* l  b
      删除所有监视点
0 l  V6 r$ D- u# r6 }( h& u( s3 J$ }1 S! T- i# ^# v8 [, a
      
4 p  K, s' K7 L( v8 b* ?5 n) W. w+ R- m1 B( V
程序断点指令: bp, bplist, bpclear
* u- V3 `8 j$ q5 x1 n9 c    例子:
) E5 a  i4 l: v# c    bp 1234: Z- l  {- x3 A+ [
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- T0 ~% d7 C% v  |' D/ o) e6 r1 E9 K! Z: G- ?5 i2 D, E3 \
    bp 23456,a0 == 0 && a1 == 0, O0 j5 c/ Q8 x- ?/ g6 h' _+ R
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 J/ o3 k7 q+ Y/ }9 U5 w8 ~
# p4 r; g1 _/ t# u$ E    bplist
' I# j# F4 Y; ?      列出所有断点+ f" W8 U( E) Q6 f- A& b$ L

6 |+ j  R, C3 L; x8 y0 z3 y& B    bpclear 3- U5 j$ n! u: T# g& x0 p- C1 }
      删除编号3的断点- E5 y: R( c' H

/ e/ D# C# ^% G- {* O    bpclear/ v3 l# t: D/ \8 V
      删除所有断点
5 d  D+ |7 h2 r' {( M( Z+ m8 Z1 k1 z; M- e8 c( b0 S, e" X$ C
      
, u& P, \5 n9 X; ]' K      
* I! H; ~( ]3 ]2 m* O4 o& \跟蹤紀錄指令: trace( G7 J& ^5 O4 B7 \( B3 w
    例子:
& x3 P% d9 c/ Q! u9 Q* Z1 U7 }( }1 F    trace 01.txt
/ c3 a% G! ?% K    跟踪当前CPU运行的所有代码, 输出至文件01.txt
  D0 ?/ i1 s: f& R: q
9 x* u/ H6 t9 Q! C    trace off
5 _1 Y) H3 {, O4 j  g' s    停止跟踪, 并且关闭文件
! T/ @( w, J. T/ u
- k. S* h" D) j: f3 X    trace 01.txt,0
4 g: k0 {5 U! a3 T    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt+ m$ J% g2 j$ g5 w  B3 e
3 a& k, H; n* L8 i- X$ W+ @
    trace off,0) R( @  Y7 R! O. s
    停止跟踪编号为0的CPU, 并且关闭文件
' I: n0 J( e2 ?) b
# F7 @0 S$ A# l# `7 E    trace 01.txt,0,{tracelog "A=%02X ",a}
3 Z4 {! R1 `3 b5 f5 z, X0 ~    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
7 H/ y# ~- @0 U; X& B! ]' j    并且在每一行的前面, 写上"A=a "$ h6 d; o% U0 p, o7 O
    "A=%02X ",a为一个C语言printf函数常用的输出格式- M8 B+ P- F0 @: b: x& ]5 K8 Q
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 P# h6 I2 G# b% [. E9 m3 B4 y    X表示为大写十六进制数
" P$ m! z& P$ ?6 Y  _: \  V& x' m
9 S* {% V) g  m3 D. a8 A2 I# R2 w% o) A0 C" [9 \4 `- M2 U4 y5 A2 v% [

% `" v$ w1 u# d6 J; l+ J) X% Q7 Z. }内存直接写入指令: maincpu. z$ v, _+ a: ?8 f9 x3 N9 O
    格式为 maincpu.[][]@地址=数据) p' p9 h/ }! d& I1 r+ C; z, q5 L
    第一个[]:- p9 ~0 x. r% z  v  x
    o 表示ROM地址
6 |( \: V) K( z, z0 p    p 表示RAM地址: N# N. ~4 L0 w1 ~: |( C; h0 g
7 O# L7 j+ ~$ V# G9 e1 h4 v  k
    第二个[]:
; r+ \0 p9 r2 D4 Y  g% r( Y/ l    d 表示4字节
; N; K, S4 H8 e+ B8 N& [    w 表示2字节, Z! t/ T$ w8 g* q
    b 表示1字节
3 V7 f6 s. h" ?, L! ^
/ f! B* b0 ]( h. h% |  P+ E    例子:
2 g- v% h3 ?; O: B    maincpu.ob@1234=FF
2 a' w$ Q+ ~& u/ H7 N) T    在ROM地址1234处, 写入FF一个字节+ I4 v- t8 a  D, p) |

1 @. W; n2 v9 `. G0 T, e2 v' E# P    maincpu.ow@1234=4E71# x# l: U& n# W* P8 P
    在ROM地址1234处, 写入4E 71两个字节
9 H9 ^) v4 M: X
: V$ o$ f+ I& `" K( f9 ?% U( _1 W    maincpu.od@1234=600A4E71. D2 I; d% a5 V" h% m3 `. w
    在ROM地址1234处, 写入60 0A 4E 71四个字节
# t+ B) k; p, [* ?/ I2 @- g  q% {2 H
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写5 \$ i1 N' K5 {  H. M6 o9 a  z* b
    . a. L" ~3 i  i/ ]( ^1 `6 ^
. n/ l; }: U. _$ g) X+ B" q5 v/ O, y
其他:  H( D0 `$ Y$ ^; j
    dasm 输出档案名,地址,长度
4 l" C0 `2 u3 a$ e8 P3 G    输出程序的反汇编代码0 p# R$ L- c0 N; \  ?" Z0 z
    例子:" b3 o5 c% B( a
    dasm 01.txt,0,100000! r- Q3 x7 u) d
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
& |& n6 K8 b9 {5 c2 |7 |6 Q
. _5 X- S) ^6 [7 F6 p    softreset
# i/ j4 v! I# k: S& F  {    游戏重启, 但不重新载入ROM
8 g" r# r+ m/ i  T5 J( B/ {6 H5 L, S* A% k% s& I: \3 x/ u3 [8 R1 f
    hardreset5 E0 t  ]2 I" B, h+ N/ W/ d5 i* g
    游戏重启, 且重新载入ROM3 w  i1 |# t1 ]9 p; G( Y" r

: z8 }& G/ l/ e( E- o1 o) T; W    snap xxx.png
4 c6 X6 @7 |1 @' M/ {" a4 r    截图为xxx.png
4 j  N$ C: e, B- S/ |3 ^' t/ c' {: o% Q( A
  
) d! c! z9 H, `7 w* S) J9 w  p9 C: x  $ X& Z/ H% N' v0 {- ^* P* {3 w
  8 `7 Q9 j3 j) [9 |. J! Y- `0 p
热键:/ L+ h4 [9 m7 X
    ~ 中断游戏# R& C+ P0 ]& V
    F5 运行游戏/ {, \* U( _* \. h0 A
    F12 运行游戏且隐藏调试窗口
2 }  l- b6 i' l% F7 N2 H, y% f    F11 步入, 单步执行, 会进入子程序
7 t1 j! I* A& o% M    F10 步过, 单步执行, 不会进入子程序5 i2 O* Z- c) B- w) y
    Shift+F11 执行到子程序返回6 l$ g/ T- \- w& {( }+ d% \0 _
    Ctrl+M 内存浏览窗口
# h& q7 p' y" c1 E+ L    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% B7 p. i: r7 _5 `- g0 C& h
: `5 ]. M! @2 Q* B) f
{:4_94:}
% w& r3 |' ?6 m7 D* F7 J8 H, r) n0 D3 _3 b( O: Y

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。' R3 d) l9 ~/ R- @1 o- M
+ S% f- W7 t6 T7 k( \. c! |6 Z
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 | 显示全部楼层
要详细些的东东+ `% T% H; U, u: n- Q% `: K
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-23 20:38 , Processed in 1.080078 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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