EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* u( d( E) I; A1 o+ a6 ^很快速的整理我自己常用的指令
+ y3 S) k$ u) W* r" e
6 S; x8 v( y- s7 M2 N{:4_112:}
! \) C7 A6 l8 w1 Z% s, v; P2 c) o  \0 S% D
MAME DEBUG常用指令/ y: [* ^7 D- x% V! }
3 v3 z% |; |4 C4 Y0 v
内存搜寻: ci, cn, cl8 \' @/ m1 z! i4 K, {& B

# M+ Q* d3 t, C/ Z7 d    ci9 E! K- R# R) ]6 {8 M% B  z
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令* {% Q) N) j& m. ?

8 [! f. F7 v6 S# b* v    cn* x0 Z# g/ o1 I. u  }7 N
    搜寻指令
! J2 ]9 s0 j; z9 Q    例子:+ J& {" K! H' T7 ?
    cn eq,60
6 Q( D! V9 L) P# f: p1 V    搜寻目标等于60 (十六进制)3 h4 Z# L) i# j8 Q, Z- C
        * f0 l2 R$ W2 A5 [6 F5 e0 S8 t3 ~
    cn eq,#960 K% x$ T$ C" \% K! X- j: c
    搜寻目标等于96 (十进制)
5 |1 k8 P' B! ?# n  A( ?3 j& m$ N/ r1 I' t
    cn eq
5 N4 M3 G6 X# ^6 y1 ]    搜寻目标的数值没有变化
4 K) G. Z5 t7 c
2 Q7 Z! V0 }# b, j    cn ne  T; M( [" h/ L$ O. h8 M3 J
    搜寻目标的数值有变化3 m9 J$ r* S5 u1 z8 U# w
        
4 m- [& i; [! b" k- s    cn +
1 k6 S3 B% P( C: t1 Z    搜寻目标的数值增加
2 M0 A  ]  Z: D5 e/ H2 b6 c) X# h   
+ O2 z0 P9 ?# ~' j4 k! f    cn -) y& G! X3 p+ v7 \; P# A3 q
    搜寻目标的数值减少1 {; y+ V0 X2 f
        2 l- G6 R2 {: x9 G4 e
    cn +,3
. [9 M: J2 w  P2 [9 N, `: v    搜寻目标的数值增加3 (十六进制)
$ C  _. N0 l  ]% W: v7 o* `, U5 p$ U' E7 c# ~! A2 z- h
    cl
2 t, Z; t; g5 Y8 N    列出所有搜寻结果
, Q+ v, M, x4 `4 U
2 c2 e8 H; f" ~. L* O) K8 J: i3 i. j    cl xxx.txt# ?; c+ {# H8 _. X' B
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% `. l9 j3 h( o5 M% W

6 }6 y* P: N4 `& B% \0 T! }   
' R9 V0 w; M" R$ ^  B' N: ?内存监视点指令: wp, wplist, wpclear( v9 B' Y' z& J9 w* e% j! B$ Y
    例子:% V: W& {! j, M" T  L; K* k  ^2 G
    wp 1234,1,r/ W) E9 S4 L+ _
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1- \: ], D* Z* @' z7 D9 T* L. Y
9 A! o8 r# j% v# T+ r) [/ W
    wp 1234,2,w( q5 H% |- K5 T6 [' S; B! u2 ]% F
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; R" f3 E2 `9 a1 C8 M# S7 p& _     3 S! n( h. t8 q0 _2 E6 |7 o
    wp 1234,6,rw
/ u9 K( j# \6 t/ r7 ?      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
/ e( R7 |1 q: i: X1 g; O! y' V0 K
    wp 23456,a,w,wpdata == 1$ y6 U$ j: e, z. L6 C& x0 J
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" l6 O- ^# c1 D% m
/ K! Q& L& m4 a, g4 l. G4 w    wplist& ?: k6 Z5 V  B! h5 t
      列出所有监视点- `8 i9 y( R8 C) Z6 H6 H- j
* w3 E, ]6 T1 W8 O& @# B
    wpclear 3
7 W% @( K( d' h) n, E- m4 z      删除编号3的监视点* k; D9 i- T0 U# T5 f" ^5 {' E
/ s4 B. m( a$ p: l
    wpclear4 H$ a+ c/ B! M+ u9 z& e! o' ]  ~
      删除所有监视点/ \( f* }6 c- V. ^" ^- a$ P

! j5 A6 G; n0 l: }      
0 \& A! }/ s0 S6 l; V3 J* ~9 s+ v( R3 m* Z- n/ s' c) h
程序断点指令: bp, bplist, bpclear' |( i2 [3 F  ?; R+ W1 s9 {, M
    例子:5 F& e& Y; U. Z% \, o
    bp 1234
  g  e% I- T% K2 m. a      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 b8 a' x& K! L0 Y
) [. V7 {! ^- _) Z) {5 y
    bp 23456,a0 == 0 && a1 == 0
8 S! Z! D5 Z. T. b- q% C$ M      在地址23456下断, 且中断条件为a0等于0以及a1等于06 y0 C. b' H% j- ]
2 W4 M2 p, o# z. A& h3 Y
    bplist8 E! L5 q, H0 k9 d
      列出所有断点) j: L( [( Q' D( a" k

- C4 t" m% G) L8 P2 _* `    bpclear 3* d; Z$ S4 Y  S" C1 E  p
      删除编号3的断点: @" h+ A5 p" U6 r! S

* m" c4 J) U9 [. {( }    bpclear4 E4 u" M+ ^8 T  n( ?0 t# ~7 ?  Y
      删除所有断点
- ~0 Z" t9 h# z5 n6 p3 ?4 z# `( o1 F( D7 Z
      * {; z" E2 }( R/ V6 Q  ~
      
4 `( h9 V' r- W! V" |( V8 g跟蹤紀錄指令: trace& J! J1 g' o; u# E
    例子:9 L" t( v+ V6 t$ Q" K
    trace 01.txt
. H5 l8 L9 r6 X3 }6 t1 @( k    跟踪当前CPU运行的所有代码, 输出至文件01.txt" W9 h+ u. u% y! N$ y

6 D3 F" b4 J* F3 j! L6 a    trace off  u* ^6 l5 x3 e7 l1 e
    停止跟踪, 并且关闭文件! _2 j, E! l. k4 X  T
/ G0 v% D) l0 s: D; `1 I
    trace 01.txt,0
' v% c1 v, ^! t6 n3 n+ B    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- l* @) X  T6 s: x8 Q7 j
: c* q" H+ U. f6 Z9 x    trace off,0
$ u1 S+ f0 a8 O( k9 U    停止跟踪编号为0的CPU, 并且关闭文件
4 E6 E# t, [' r. M$ Z9 k. r7 d* U  x, K* A3 a2 ]* ^! M! M
    trace 01.txt,0,{tracelog "A=%02X ",a}
+ M7 Z' q8 S5 }1 C3 W% r  j4 l0 N    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 P7 J+ ^9 I: w/ B1 F/ b& B    并且在每一行的前面, 写上"A=a "
8 L2 o; r2 l" C    "A=%02X ",a为一个C语言printf函数常用的输出格式. |+ x8 I2 j  _: N7 O( c6 o) G
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' m! H) T9 q9 l    X表示为大写十六进制数
) R3 z+ O: q8 k6 z
, V9 \2 S7 l! C9 A2 B: T2 k2 M- L0 t" Y: Q& c; F$ Z
9 }3 R$ D! K- n3 e: n7 Q: G
内存直接写入指令: maincpu" R1 H0 A4 S3 @- e) Y* |
    格式为 maincpu.[][]@地址=数据
1 F# H9 U" o& ~0 u# S  d& n! t    第一个[]:
& C  C* L! m$ L; N- t! d/ k9 a    o 表示ROM地址
9 i0 l- y) T2 D% J% N* d- b    p 表示RAM地址! `& m9 A0 W; R, |) W

6 _, i0 w9 S6 j8 L( O7 ~0 T$ Y    第二个[]:# C- e/ X5 p6 H8 J8 b
    d 表示4字节
4 k) M  Z: i+ S3 B    w 表示2字节3 _( e$ V& ]4 h0 I' V" v
    b 表示1字节
- v6 L& L* _. z' |$ r& A; [2 a' R; m2 K8 b' s2 P! D
    例子:
  c! s0 a+ [: ]; E    maincpu.ob@1234=FF
  q1 N, e2 m8 v/ K. s$ y+ N: T    在ROM地址1234处, 写入FF一个字节
' [5 C9 `/ p/ D1 W. w9 c5 n1 y, i& H, z( E' ]
    maincpu.ow@1234=4E71% I/ ]. T6 K% y
    在ROM地址1234处, 写入4E 71两个字节
. a' h3 E7 f6 i' p0 {" }6 \* W% S8 P! v) Y7 w. j7 {! p
    maincpu.od@1234=600A4E71
- d* ?# b) K) `. U2 M0 q. z0 y    在ROM地址1234处, 写入60 0A 4E 71四个字节* d' f, Y9 c4 h2 ~! Y$ q

! L5 D3 k' A2 D4 i/ n/ t. |/ g) y    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写% q# T# |- N; ~% G& U' I
    2 B! J$ [! i, q3 {" o
4 }. c) M& {1 k
其他:+ G' [. [3 I* N0 m: ]* g
    dasm 输出档案名,地址,长度: u3 _: h8 @$ w- Y4 h; K
    输出程序的反汇编代码, `% P7 U( X# z- i; A+ O. S5 `+ V
    例子:
) `. j1 y" e" s' o% `    dasm 01.txt,0,1000007 `" @5 v1 h0 I5 i
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
; [- }8 [3 I  m& F' @( a( Y9 Y0 |7 p
    softreset3 }# d& N. u- ^
    游戏重启, 但不重新载入ROM
, O0 F+ X, D5 j7 w* T* n% R. v) G( p; j
    hardreset  |5 K; }6 F- p8 R
    游戏重启, 且重新载入ROM. C% N0 Y, f+ _3 d- F' g

: L" Q! E2 q* m7 W  s6 w    snap xxx.png& U% G4 D! ~0 g& D( o( Z
    截图为xxx.png: C  t, d2 T' o, C% c6 R- G, X
( [3 d6 Y' p' o
  4 F# F3 O2 p( |, m# t; T
  - m. \9 q: u. z/ t' x" h5 G
  + @0 I4 Z; `( ~3 g* R
热键:
0 `4 O/ D) [( D4 ^0 A8 B    ~ 中断游戏5 k$ S( H$ o4 Y" @. ^# @2 w1 i
    F5 运行游戏
1 L" n* T9 f# E1 L$ L    F12 运行游戏且隐藏调试窗口
2 u- y# J: }4 g: R3 `    F11 步入, 单步执行, 会进入子程序* Y  k& R5 G- }
    F10 步过, 单步执行, 不会进入子程序9 `, i! A9 J' `' h
    Shift+F11 执行到子程序返回
  w0 W  L% R8 z( ]. a, l    Ctrl+M 内存浏览窗口: R! F. a: A5 {" Z; s1 |* M
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, f+ ^$ j; P' X8 W5 s
3 \- G  w5 {- }& p8 o/ N{:4_94:}
+ \/ v( t# U% m6 ~. Q) u+ z' z" \/ C  c1 M

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
8 X4 M. ~0 E; l8 S6 y5 i7 v- h! F) [8 @" b3 [
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 | 显示全部楼层
要详细些的东东  z6 Q) @, s: q" d4 d( V
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-12 00:46 , Processed in 1.183593 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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