设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
; K. s; b, D* O4 O
很快速的整理我自己常用的指令
# j; U' z* J+ j6 f. l! ?" B/ H6 `0 v2 [+ i9 \- L. V/ B
{:4_112:}
; b7 i; P/ x; M7 B/ r2 |/ ~
4 c2 Y, X$ c% \" X% gMAME DEBUG常用指令
/ c/ p0 ~) `; N; _# J
) n7 N- ]' f" N9 Y内存搜寻: ci, cn, cl
2 B4 k( V0 Z' h4 p( ]9 Y8 F5 x! N( g/ ~: I
4 ?( o& N3 `* d* d" i1 ]. {9 I    ci' z7 x1 W$ H+ n
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' c' C6 a8 `! J" r; n

* t) v: z2 N0 h# h; m; k& m    cn) H; a1 S' ]( Q' F
    搜寻指令
! `4 ?; ]1 G  h& m; R    例子:
( O+ p6 ]8 B1 F, N, F  W    cn eq,60
1 [& Q- x. ]" P2 W9 P* X$ V0 N    搜寻目标等于60 (十六进制)
' k5 Y& K1 g5 f7 A/ s* c        6 a- i6 V  V0 w2 d, w; W* E: _
    cn eq,#96
" S' p+ T& z; H    搜寻目标等于96 (十进制)
& @0 x$ x, q) _4 q4 J5 m2 n9 @+ r! y3 Q5 ]% F" _
    cn eq
% z# X+ D! {. K' |    搜寻目标的数值没有变化, @- o+ q& H+ w3 [8 B; s
) b' X) K- m4 ~( T2 h' \8 V
    cn ne
% K  A0 w+ f+ I" d+ _" F    搜寻目标的数值有变化
( B8 I- ?4 |- y7 a+ a  x        
% I: N7 L2 U# @8 B1 D    cn +
* J0 _" p9 c" b* o$ i) D* s- k    搜寻目标的数值增加
$ F* h" F! p. S- [5 o5 p   
/ p+ J- g3 i: K' I0 @    cn -/ s' A; r3 X6 H7 Q
    搜寻目标的数值减少1 u* v( x* V; D8 y: G/ ^8 F
        
" U6 P( S+ v3 N+ `    cn +,3& r4 g9 M$ @6 E+ q4 Z
    搜寻目标的数值增加3 (十六进制). O5 \1 E+ u* `* O6 Z/ E5 ~5 W
& ^" Q. C- i( ]+ I. E8 Y
    cl& l7 H5 X; g. L. r: V/ y9 \
    列出所有搜寻结果) n, g' ~" \7 F

, v& c- L$ J& u    cl xxx.txt
% q. f, x) P0 d% v0 H5 x1 a    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式& T) e+ ]2 j3 i8 [* I" z; [7 N7 M

4 t) c) ]- ]/ q: q    . Q7 x  M' K  i. |
内存监视点指令: wp, wplist, wpclear; i$ e* l3 w% _) M6 I
    例子:( J$ C0 }- [- O3 t0 F- V: m
    wp 1234,1,r
$ w0 I; b) ]* ]& j2 p      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; y7 j# A' @- A4 z1 v# O( p

# a! p" v! e& R6 h5 X/ x    wp 1234,2,w
$ ^& u2 A, Q) b& t      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 P! U, V6 o4 w( m4 N# m  U
     
& H1 [" i& p* @5 o! r& \' s    wp 1234,6,rw
0 `2 g6 Q  }1 a      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" p2 l# L& [6 q8 O& E! P0 N

9 V2 \2 X" j/ O$ G3 o: ?+ b- T4 C    wp 23456,a,w,wpdata == 1
' p+ X( t8 Q: T3 e( m      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
  w/ A4 O0 E) m
* R4 A$ Q; U8 d4 J    wplist" s0 j% G$ N/ [3 W8 y! s' M" O* F
      列出所有监视点/ H: `8 h5 n) Z. U+ i. P

  W8 L  [' k$ ]# x! I" Q! l    wpclear 3
( y6 {- r" d$ G      删除编号3的监视点1 c) Z: h1 E' O8 l( }: S4 S

- u% ^& D+ X- p7 E2 B& z' N    wpclear* j8 k* o) i# V* |7 z, y1 \0 l
      删除所有监视点# F  i, e3 j( m  `; B

0 Q) y, L7 Q; g( V: L; a) q      , N+ k  ^1 m+ M1 C, n

7 ~& r; l' |% c- k程序断点指令: bp, bplist, bpclear
) L$ J$ o$ x. U( c/ l1 s    例子:1 n  n% q$ {5 P9 ]
    bp 1234& J  L- ?+ H( t  Q
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% |- d$ _- \4 A! I7 u' |
! q$ h; h. m1 S
    bp 23456,a0 == 0 && a1 == 0
/ q: L# {  ?8 v8 \8 b4 l9 w, h, I      在地址23456下断, 且中断条件为a0等于0以及a1等于0" K' ^: K& ?( E" P
2 C4 y9 w8 ?$ w) l
    bplist# m* @; b% |7 l* t* h
      列出所有断点
3 w1 s, W+ G: b) Q! R$ b" b& ~$ k% C
    bpclear 34 ]; w8 `- A6 ?! R$ B
      删除编号3的断点
! w& I  d* M, j: y" u* L* i# u2 z! r- I! b
    bpclear
: Y% w1 R' c6 e) U3 o: Y      删除所有断点
1 t, |) z* o3 O; `: b" r  S9 P; Z& f
        E' \  g5 W! z3 c. y
      : L4 k+ q- \- N! O
跟蹤紀錄指令: trace8 T9 a  l3 p, ?! e( c
    例子:/ X$ j4 M4 N) L( S
    trace 01.txt$ W2 x6 H$ F4 k2 z. ]% i
    跟踪当前CPU运行的所有代码, 输出至文件01.txt5 _8 }+ x0 G8 C/ O$ G, |
% n& I8 ~" U/ \& M; l/ S. e' G
    trace off% y9 |  ~' K+ Z: T8 I
    停止跟踪, 并且关闭文件
/ k4 Y6 C2 p% a- v" Y$ s- q  g' }6 e( r4 o# N* V
    trace 01.txt,0
- A7 g4 U6 G8 d; ^+ b& O    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( X5 G- W2 B, f! Z' P+ U7 B9 M' Q8 T  `4 I
    trace off,0
  B1 }: X! g- S+ c# ~) g    停止跟踪编号为0的CPU, 并且关闭文件+ g5 n  k- _1 S1 D- ~0 h

6 d: M' X4 L6 A# q6 }# k3 ?- [2 {    trace 01.txt,0,{tracelog "A=%02X ",a}
% I' _& x9 _! k" e( i    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) E7 v# H& f8 r  z* ?9 m- t# H    并且在每一行的前面, 写上"A=a "1 r5 ?- F. Q5 }- m
    "A=%02X ",a为一个C语言printf函数常用的输出格式
8 c) }3 C5 S. N; H    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入: b0 C5 _; y" Q/ m% f8 w0 k) F$ q
    X表示为大写十六进制数6 ]. F# e( c# `/ i; D( [
4 H% ]& d4 M- g* a# F
, w# G8 q) _* y( _# u3 O

, Z5 _* a" j$ k9 S  S# u内存直接写入指令: maincpu
5 C) r2 R$ R- I/ }% ?4 T    格式为 maincpu.[][]@地址=数据
- w* r( ~# q0 Y% d. `5 X    第一个[]:
' }. H  x/ n5 V. E6 G    o 表示ROM地址
# q1 Y, ]# S5 }& r% S    p 表示RAM地址
8 j9 l+ L- @1 ~3 u/ g$ k7 A/ }) Q0 k/ R4 ^9 v$ b/ ]* H, I
    第二个[]:
0 Y6 V. ?& [8 q) K6 F  W. z    d 表示4字节
3 D" [$ H2 x! q- g! g    w 表示2字节2 C2 B( r% h; Q- _/ e
    b 表示1字节5 C0 S- p) |* g8 J/ e

0 B/ W! L- Q# G1 i* a$ n    例子:
: s" v; e' {/ J" T# W( k5 t    maincpu.ob@1234=FF4 W4 n- l" `5 m' d9 R
    在ROM地址1234处, 写入FF一个字节( u# F4 k5 G" ?  v

  m' O8 X( _0 c( `4 r1 }; e    maincpu.ow@1234=4E71
' d$ X5 W) {; Q    在ROM地址1234处, 写入4E 71两个字节
( x# c/ Z' V) [3 r2 `( T  i/ X# o- i& U% V& a- D# S
    maincpu.od@1234=600A4E71
: O* _$ g5 V2 R    在ROM地址1234处, 写入60 0A 4E 71四个字节  j$ |+ n. s$ b1 L$ M8 t! m

$ {9 h4 A) s) Y/ [- M  Q% o& R    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 {/ e% t) W* h   
: T6 V$ w* M0 S1 B. K$ [' [, a" m) ]7 j4 v
其他:* ~% [5 L+ L( H- R+ J
    dasm 输出档案名,地址,长度
: i2 s9 p8 }5 H) {' P# ?' ^    输出程序的反汇编代码0 `% Z$ A* w4 Y9 K5 R! c6 f
    例子:
( H" @0 x" T3 N* G8 u    dasm 01.txt,0,100000# k1 _: Z* l- f
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt! X. b2 A4 u" F( K

$ c2 P* U4 N6 A, M( b) O  r    softreset' O# |4 `$ T5 n. F& j5 a
    游戏重启, 但不重新载入ROM
. Y% b" [8 q- B& R
7 f. t/ m0 P, v& r& b! E3 a    hardreset
$ [' c8 _' i+ ~0 j- V    游戏重启, 且重新载入ROM7 {9 @. f; U' m2 y9 w1 ~" I
( H8 e$ J: E/ m9 `$ U# Z
    snap xxx.png
4 r2 m7 \, N. U2 A! d, M% x( f    截图为xxx.png
" T4 j. i  J. {. h* ~8 t1 M9 K5 q2 D  F; _
  
7 W6 Z2 c% t4 @. C  
/ n. f5 _0 [0 o; i  
" b$ @/ S! U; T0 V7 M0 m4 p0 g' e热键:
5 c( q0 x6 D8 r8 C    ~ 中断游戏1 t  v& n8 L; n* m$ h% J4 e
    F5 运行游戏( ?, t" c9 Y) s1 [' G3 M* N3 i$ ]
    F12 运行游戏且隐藏调试窗口
1 w7 X, c/ E8 q) C* R) Q    F11 步入, 单步执行, 会进入子程序9 y8 \+ g4 y& t
    F10 步过, 单步执行, 不会进入子程序
7 m* W% }9 l0 n" h0 h! b2 A* M) {    Shift+F11 执行到子程序返回
. Q1 L- b( t9 n' U7 r: E' a) E" i    Ctrl+M 内存浏览窗口% V7 S% F/ W( Q) f: i5 k( h1 v" u7 M9 y
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU  B. u# N# m/ u; `# u) [

5 `- n* {' W5 s& e6 H" k: o{:4_94:} : |2 w' m- D( \! n! N' @2 r* `( h/ e
4 ?2 f$ c, p2 j6 M7 m) X

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2550 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- B" F0 e$ t1 S% d/ b) r; q. Z0 x! [4 _% A
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 | 显示全部楼层
要详细些的东东: Y1 F8 E2 J6 `! z! K6 w/ q
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-3-23 10:19

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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