EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

5 \+ A3 D1 W% H" \1 _: k很快速的整理我自己常用的指令* T" U, C. C% u9 \5 w% E# V

! \5 d4 i* v# C9 a; N: Y{:4_112:}   g- G( ?8 Y  U
5 w  z5 z: _  H6 b
MAME DEBUG常用指令0 S# |7 f0 I: u

( T, S! M; b  H- U; n内存搜寻: ci, cn, cl
8 h8 H$ T" c' [: M; @( J
& `# K% s; e+ E2 y5 d" a    ci
# E6 L" c% Q7 ]2 k9 j: z    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
3 N% u' }+ h' @
- E  t7 q% E2 H/ x. g    cn. ^. |7 J8 O, u# u* C
    搜寻指令
1 a; Z1 O* U9 g5 c, }( u    例子:) J$ }, k% m2 \; Q
    cn eq,608 F9 V- K7 r; m1 ~) m
    搜寻目标等于60 (十六进制)
" V' v* f1 Y" z! H( K        ; @& A2 g, w4 Q3 x) y9 g6 E0 K
    cn eq,#96" e1 r3 y, ?( X' K& ]
    搜寻目标等于96 (十进制)5 T  ?; v% I( v7 z7 T
1 H7 M2 Y' g  C; i, d0 |
    cn eq9 G7 m; C6 ]8 M. R5 o& v" X
    搜寻目标的数值没有变化$ g% U* K: r1 n
: M" Z# N# C/ R; A  O. w
    cn ne
; e3 |/ I. ^, ?3 R4 Z, |6 o) g    搜寻目标的数值有变化6 o/ N6 x& k* E, G
        - K, W# E# N0 x6 m! }; a
    cn +
7 Y, L  ]' ?( t% G    搜寻目标的数值增加- T+ y7 s) ~# j4 f2 G
    " N' D3 u9 D3 U* g2 }' h. S
    cn -
" f3 V9 [* z/ I- S- G    搜寻目标的数值减少
) t/ b5 x* e/ s$ f3 P. g        
& L7 y6 `1 T) p8 y/ ?6 b# c) G    cn +,3
2 [' P. Y% Y8 Y5 B. L# }, f, ~    搜寻目标的数值增加3 (十六进制)
: B, S9 [, L; U3 e" Q( q' J* o7 s
    cl2 V% r4 ]7 W3 g% @( Z# V* k
    列出所有搜寻结果7 c' a" _& S+ V

3 A$ a5 u8 N% }) R, M2 C    cl xxx.txt* O, p2 S. ~# _) ~) L+ T
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式. i" H! x3 |# C6 J
+ y# V- T& _% t. n8 Q/ d' Z! }, q
   
9 Q7 J4 x( \5 }! D内存监视点指令: wp, wplist, wpclear$ x7 m" X6 P/ S% I8 S
    例子:* ^: ^$ p9 M3 A; m6 U! E5 P) _
    wp 1234,1,r; M9 Q: n# N0 W1 B" `+ O$ k
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) `! N7 u2 X+ D: e
/ H( ^: x9 P3 D( ^% X; p$ c
    wp 1234,2,w
# y6 O" k# `! ^3 [) j& r* z      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' [2 P) Q* d) Q8 T6 f9 E     * P4 a8 }7 Y; Z2 H; s" c7 X; Z- ?
    wp 1234,6,rw
6 k' P" S$ s! v' i' s      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& y* C6 v1 R5 r; u
. {( o9 |' [  B) t2 Y" H$ H
    wp 23456,a,w,wpdata == 1
; _9 Z: m3 q) d' C: h% o) t      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* f2 |( \# d' j& s& F
  S/ P  l  @- s6 r( Y+ B    wplist
9 {# e1 q) p/ x  R3 P) H1 J. t      列出所有监视点6 @/ C3 i" c) b1 m" y8 j: m

" k' p8 u# o/ V7 @+ S  B; n    wpclear 3/ j  q, I9 F9 i' j% z5 I( w
      删除编号3的监视点' E) Y3 h, k5 y

! [+ P" j- e# R- ]' O. E' S    wpclear
* s& @" E5 ?4 C+ f6 d      删除所有监视点% F) f$ A9 v+ j$ N: _# @

! i& X. T% f! N( ]/ a8 v      % u7 R, U( Y' ]1 A) n" U
1 @- o! ?# D4 u7 q
程序断点指令: bp, bplist, bpclear. B' R; K! ^5 M/ J' O) M7 l7 x* f2 t
    例子:
$ c% V) A* ^5 m" P- W. t1 i    bp 1234
- K" }5 G  W, j" E: h( M      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断+ R) l3 g. l$ y9 k( r
: p# ~3 S; x# F) ]4 x
    bp 23456,a0 == 0 && a1 == 0, v: R/ I7 Y" N2 X0 c/ \$ D
      在地址23456下断, 且中断条件为a0等于0以及a1等于0! O7 b; e& \# B1 }- x

! t* D' k  C. E1 U    bplist1 h% B  ]. S* V9 }2 p
      列出所有断点
: v- |0 R6 r; L0 J3 a8 c3 C
7 |6 C" F0 h- b0 m  }    bpclear 3- P; h8 v+ d% n
      删除编号3的断点+ H! w0 M0 x+ B" k9 L+ f
3 I# [4 r  D1 g5 a' K4 G
    bpclear' w+ S; X+ i, L0 ], O
      删除所有断点
2 l' t: w$ f) ~. K* y% X1 }3 Y- [0 |$ R5 A
      
+ b5 g- D8 f! ]/ F" r0 r; B' `% e      5 ?! s- N) V/ X' ^9 P7 i/ S
跟蹤紀錄指令: trace0 ?. \( A# ^7 E, U8 C
    例子:7 U% o3 x# R" V( U9 C
    trace 01.txt/ F6 }- q$ C! J
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
  P8 m2 W4 s* w9 B" }6 L' C  t5 I
. s- U9 A. \0 B    trace off( d: T4 ^3 l% ~
    停止跟踪, 并且关闭文件
: b1 Q3 K: N. N- R4 k: j2 C
* _  `, P% G1 J3 M6 [6 L+ P    trace 01.txt,0! }; V+ p2 c' u+ G& g: c
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
3 @+ k3 J6 u9 Z6 N& R
- [! c, ?: c: R. L& s" I! _    trace off,0
3 t, U" p3 o0 J2 e/ {    停止跟踪编号为0的CPU, 并且关闭文件
3 L5 I5 }" m; P+ F( ^
& [$ ]! b  R& x% g5 Z& z$ R    trace 01.txt,0,{tracelog "A=%02X ",a}5 y& D3 u* K: Z  P  h
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 _3 _2 L# F# M  @! R    并且在每一行的前面, 写上"A=a "8 t6 W3 h% z, z: W
    "A=%02X ",a为一个C语言printf函数常用的输出格式3 e1 `7 u& q1 M
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入  a. ^) ^- C$ [# @1 J6 _1 M
    X表示为大写十六进制数
& b6 J  P% a# d3 v& Q* Z3 \
. |' k  T4 Z: V7 d* B) \7 u- p
/ _" j1 Y7 Q+ |1 i5 `6 \3 A7 y) Z2 e
内存直接写入指令: maincpu# n4 s: s( F+ s0 B/ |" }5 e
    格式为 maincpu.[][]@地址=数据
5 m+ O- O+ E1 k- l. h4 d+ O( ]    第一个[]:
! K9 l/ o) C; a    o 表示ROM地址
# z* \* [3 i6 g  k8 A8 k# g" V    p 表示RAM地址
2 [3 G) l2 T# ?: r# [4 G) K" [5 b* j4 J' Y1 K
    第二个[]:* g3 k. Q4 B: e) P
    d 表示4字节
3 S' l+ a% @+ T! k/ D    w 表示2字节1 Y+ C- W3 z" }/ G+ g  j7 w
    b 表示1字节+ a0 X2 o# X$ L3 Q" E
$ Q4 {0 U1 |7 G3 q6 q$ G. K
    例子:3 n# v5 ~+ Q4 U, B/ _
    maincpu.ob@1234=FF
) S" U7 w0 k$ t: X& A3 z$ I6 k    在ROM地址1234处, 写入FF一个字节
8 u' z) }/ I& x! n- o# p! r4 n+ I% W! W2 n! Z! I5 K
    maincpu.ow@1234=4E71
5 |6 ^6 s% o! {. Y/ @# X0 P/ A    在ROM地址1234处, 写入4E 71两个字节/ c- h! c4 _' }, P

$ B8 u9 \. F' t) |7 Z: ^    maincpu.od@1234=600A4E71
3 R. Y$ A6 P0 u9 p2 f    在ROM地址1234处, 写入60 0A 4E 71四个字节
) r8 \) {+ }2 A9 s" }: j  Q7 L" q" O) v% [- o: Q% O. F
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 O; Q8 A/ a9 n  Q/ e' @7 E* L    0 s1 K3 M9 E/ s( }
# b( v/ Z# j. ^$ m$ E
其他:: P" K* I* [, v
    dasm 输出档案名,地址,长度  a8 J9 P+ Z5 r
    输出程序的反汇编代码
3 F5 \# c* t/ z1 `& F) v    例子:
5 D, z. |, m5 c# ]7 i/ `- \+ E    dasm 01.txt,0,100000
. T6 M! H& h( z: C) O1 M0 U    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: C- o7 w* e  b- l
) U9 D8 x2 e+ J( J7 V) b    softreset+ j5 A, Q& ~8 \" R3 O
    游戏重启, 但不重新载入ROM
% Z. y: \- H) Y
. R, ^( J+ t" t/ N    hardreset4 ^+ H& {- R5 ?6 ]$ t+ @
    游戏重启, 且重新载入ROM
( Q1 {" p- ]- i1 N3 X* |) C; p5 a' P8 b4 n4 C1 ^
    snap xxx.png
- L/ p; w. d# D8 U1 X6 E    截图为xxx.png- a6 P8 o; `, W) {0 z. v1 Y5 Z

/ i$ ]5 C1 R" C1 l  
+ f) ~! k/ Y0 Z  6 D! }6 Y$ O! s) x. d9 o
  ! l* d: [1 N0 W
热键:
: ]' O7 L( e; ]7 x( g& O    ~ 中断游戏- N, P" R5 s) U: N+ I/ |9 y. h  |
    F5 运行游戏
9 n! @+ C$ P. B  i    F12 运行游戏且隐藏调试窗口
) B! n/ S* y$ }2 n, K    F11 步入, 单步执行, 会进入子程序
7 {6 i8 O- Q( B* |) n$ h6 k    F10 步过, 单步执行, 不会进入子程序4 p% C, a8 G$ I. f) l% G/ ]
    Shift+F11 执行到子程序返回
8 Q' c) Y# ~5 j, L2 [7 `    Ctrl+M 内存浏览窗口. k! G- P5 g6 g( z
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# h( `( l( b# P- I9 h( O$ a5 i
+ \0 _/ B% E1 b: J; n+ [
{:4_94:} 8 p/ q/ h% \" ]2 t' b2 N

# R4 [* p6 B' u: V' H

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。- j) x2 O! y& [  ^9 H) a! O( W2 |

4 g+ M. W- f" z( @, W5 zPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东# r# l( u! j  `* {7 k
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-28 09:20 , Processed in 1.094727 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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