设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

1 H# y+ g1 S) g" {" X1 y4 t: i  ^很快速的整理我自己常用的指令
2 `3 v1 s( K( ?7 a% ~) }7 X9 k" M* O0 [: L) Z1 L2 h$ A' c6 B
{:4_112:} , I' z5 F) X- A& [5 c% }  u( V/ r
$ v1 P, t) r+ e- E4 E
MAME DEBUG常用指令
+ X' J: _6 }4 N, ?8 {
4 S! h( G0 h4 f内存搜寻: ci, cn, cl1 J$ D: T; `! S" L5 L8 x6 L- o
) @5 @8 r5 Y" }, q- Y
    ci: R& n- e+ C0 Y
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令( f' Y/ R0 q4 V* n0 K/ S0 E7 o2 W1 c
. j& I2 H3 F+ q% o2 ~
    cn! [9 N; b9 L6 b0 x" I* I) S
    搜寻指令
+ D% p9 m* x& g: H    例子:
: ?' y. m) W, M- Z$ X% u; ~    cn eq,60' M" `* ~& j  o' R9 H
    搜寻目标等于60 (十六进制)
& x. H$ q9 |# S0 ~; v        5 G3 v" t: T4 a& z9 v  E# J3 Q
    cn eq,#96" m/ X& }4 e( ~, D  ~
    搜寻目标等于96 (十进制)
/ x  T- p- @  T
) y; A$ K2 y1 Y0 Y5 E    cn eq
* P$ b# ?& }& ]4 L: ?4 N( y    搜寻目标的数值没有变化7 M; H- v$ q" D

& o9 ?3 d7 \4 }/ C1 w: F( Y; ?9 ^    cn ne
/ u  d5 M+ |* ~+ }  C) n    搜寻目标的数值有变化
( }. E4 m  H7 T        4 T4 o$ m3 C4 A1 c
    cn +
6 o7 Y' P: q! n2 N    搜寻目标的数值增加
9 }  r0 O# J8 R. b# o" v" }    & l. p  [7 g: {. t$ g2 {
    cn -
9 ?- l1 u6 P& A5 K" `    搜寻目标的数值减少7 p0 @: |1 V' |( A0 m& Z
        
4 Q% F4 N0 [0 T9 ]# x0 d* r( ?9 s    cn +,3- {" v9 X7 K" f3 J6 A4 i# J% v3 M
    搜寻目标的数值增加3 (十六进制)5 G# p5 \4 z# v. q# K9 I3 @4 Y

2 m9 N8 c+ N4 V6 X0 H    cl" K1 c: C! {7 o# F6 x6 n
    列出所有搜寻结果* D2 k  Q+ [: b  P
# e1 u4 Q6 k) [4 x$ |0 m
    cl xxx.txt
% C3 l# v5 Y6 Z% F, Y    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 H, t, ]& s# r& @5 ^: a# O
! r1 X2 q' u. L6 c- i
    " e2 ]& ^2 E* ?7 e; `$ P
内存监视点指令: wp, wplist, wpclear
: i' E2 @& E' a    例子:
; @- |3 _2 }1 I" e7 s& |" w6 d8 I    wp 1234,1,r
" e( q' S  S! V. g; a  C& j0 B      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
( o3 i; x/ ?1 Y
3 W6 S! p+ n8 t; t' n# l; V    wp 1234,2,w+ k* h2 `2 G' W$ k" R$ F
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 K: U$ M. X3 p2 [; s- Q9 H8 W; l4 B. F     2 h2 E0 z- o4 F7 x2 @
    wp 1234,6,rw
/ D+ I: {" P5 J5 ~      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) e/ w) A- |3 {1 x2 y' P

* {  o) [1 ]# D! Z2 ~- q$ h0 O- a    wp 23456,a,w,wpdata == 1; C( x2 x4 P: N1 k5 ]9 A5 J
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
0 ~* q# w& _" }' x; _- Y3 K+ w7 Y. m, G0 \0 j
    wplist
, g8 G( s4 `4 X- R5 @  x( m  G      列出所有监视点; B9 w6 l* r0 X; m) t$ U" Y7 F' [8 D
5 }$ D; s% J/ [/ b, S( |" I% N
    wpclear 30 m; r3 D  F' l5 q" R: L
      删除编号3的监视点
0 f( }: R: i4 E5 m! O' y! E2 z% B$ Z/ H) m! T) G+ t
    wpclear
8 D' N1 d( V% J' N% d  t% ]& P      删除所有监视点7 n$ k% F7 f0 i8 E
8 C; V, W, C2 B2 h$ {8 S  z
      ! w$ X$ ^8 ?& q" q9 c4 @
9 {" x3 m  L: i: w; f( s" r5 R
程序断点指令: bp, bplist, bpclear
& O! C, j- i9 A    例子:% K3 `) T9 s' v% `$ l
    bp 1234
: l7 W7 I+ i/ L+ s: _( V+ v      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断3 A$ }1 Q* C3 O* e1 U, B

7 Y! V. b# d/ g; G$ J5 G    bp 23456,a0 == 0 && a1 == 0
* _$ u! V7 p! ]$ A      在地址23456下断, 且中断条件为a0等于0以及a1等于0. h* p1 p* |" n& |' J+ ]
5 c; @' ]( z' [. @1 b, F2 k, k
    bplist. Q6 q: P$ E5 t" j6 y
      列出所有断点
4 R* m) ]/ l5 \& ^  O2 J; X; Z5 E! ]0 E+ j! ]
    bpclear 32 r9 D+ w1 D% E; G/ |
      删除编号3的断点( I) R3 `3 \, _  O8 W( c

: d; c, S  z- {5 V% H+ p3 p+ |% i    bpclear0 B" D, c7 I, g
      删除所有断点2 b, V& L& c* |" ^- K3 G4 ?7 Z- A
3 b( f; R! x! y6 A! @9 e
      $ I- H. m- Q* z1 L
      
& g+ B5 k' I- q0 e3 D跟蹤紀錄指令: trace
: @# Q  ~) D1 R! L" z    例子:
2 R  f1 o, ^- W0 F4 d5 d% H  H. A    trace 01.txt
3 v3 S1 F9 L5 P. p+ W# Q8 l    跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 h9 ^* q7 z. C3 W, w! V2 ]/ |* B
7 y! e) M) z' A( z( s) b    trace off1 z: R( |' |) ?. d- o0 u7 y
    停止跟踪, 并且关闭文件* R; l* J! B9 O) @+ y2 g
8 e9 V: i' D6 w3 Z# G! [+ ?
    trace 01.txt,0
4 U7 S! d- A6 P$ c# m$ D/ Y1 \    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 N& C8 c% J7 u# |2 q7 v) T
5 s) ^% X! `9 s; h7 N9 \    trace off,0
# p- X9 Z7 T. \6 a: Y7 J    停止跟踪编号为0的CPU, 并且关闭文件
8 `- ~) n& E* {+ {. m5 A; U) w( v
9 B  v0 f( b4 X9 A( C; S    trace 01.txt,0,{tracelog "A=%02X ",a}
. q. C1 B- j# _  J: M    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt # [2 t/ C) z* u6 ^
    并且在每一行的前面, 写上"A=a "
% n9 _1 [; p  k3 h/ s    "A=%02X ",a为一个C语言printf函数常用的输出格式$ E6 |0 c$ v+ V0 a
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 c0 h# C6 {2 i+ B
    X表示为大写十六进制数9 Z( w1 ~. W) V

3 w5 _$ h+ ]# K3 z4 }! p0 k" Z1 L% |0 [7 H7 b  F
5 I( A8 b& B& P. @9 O+ w9 I' q
内存直接写入指令: maincpu
  ]: n0 X! C' I4 A. g  ~" |. |& F    格式为 maincpu.[][]@地址=数据
( [$ D- I0 c9 @& t4 Z/ m2 a7 u    第一个[]:
# C( \, s( T% U    o 表示ROM地址" a" M4 y8 F) }, \
    p 表示RAM地址+ i# o( X# a  r; J8 n, J* @6 F3 `

& x) b6 @: v/ W) `; b2 m  G    第二个[]:
0 Y! \! }, n6 c    d 表示4字节
% S. z- p) @) R    w 表示2字节% D( J+ X5 g8 ?* W
    b 表示1字节
# s4 S2 M! _" a  o+ X. b7 {+ g; W, m7 V
    例子:2 v, v$ X( \* M2 O6 h4 H9 n( a
    maincpu.ob@1234=FF
- [# t0 _- k$ e$ T0 ?. C9 O* c8 B% ^    在ROM地址1234处, 写入FF一个字节  p  s) {% Z: ?% L* O8 I

5 a4 U0 i  Y9 [: e4 ^: t1 n. G: K    maincpu.ow@1234=4E71
% n: t8 J& |* C/ C+ i( R- D    在ROM地址1234处, 写入4E 71两个字节, f- S3 G0 p0 ~" ^* G: T/ R8 d
5 N- e0 Z( j, I$ _4 b2 v0 Y2 d
    maincpu.od@1234=600A4E714 ?  p/ J1 i6 |) W5 Z
    在ROM地址1234处, 写入60 0A 4E 71四个字节
; q; W% }% V8 V/ v- y6 X  W6 N+ T4 t  K8 ^
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# \0 @0 U1 ]* S3 D! {; M" v
   
, u0 J: I" ?* f* n; T: T: H
! G" t6 Z. N& R0 a4 L" \( B其他:1 {9 p1 c! }( @; x1 q' S1 P
    dasm 输出档案名,地址,长度& Z" J% l3 L6 \3 L, y  M# a
    输出程序的反汇编代码
; `* p( z; @$ j" h4 M6 ^    例子:- w# `) p) J( `
    dasm 01.txt,0,100000
# a# U* @9 D% q$ t, V; h& k( m* {    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt" J( y' I. A. O3 t+ \! N- v
. K, V" v( \- f; a5 }8 s
    softreset
( ]! w8 l4 H8 ^" p    游戏重启, 但不重新载入ROM
8 i. \6 W4 o; }' [6 ?
: a2 P7 ?* M6 O/ r4 |6 W) r# f; Q: p    hardreset* X9 {. \8 q- `$ Z
    游戏重启, 且重新载入ROM
* [, s, n! f& Q: L
% g5 y& s( U, [* U6 w2 E- t# G2 j    snap xxx.png
+ N6 |' E& @5 l    截图为xxx.png
# ^/ U5 ]7 b0 _/ K4 J% K
% `3 T2 Q' Z5 B" b/ G) l; Z: u. M  
2 I! N# C# U" u4 [' M/ J2 A" v  
: \, v, o& o, \) V  , J0 W- M" z6 ~8 B9 j( b( D
热键:
0 t, ~; p8 m0 y; X2 t  R: B    ~ 中断游戏
# i9 ?% {  `3 o- J! {    F5 运行游戏
2 O1 ~- |, P# G& Y8 Z, h2 M2 k    F12 运行游戏且隐藏调试窗口
4 |' z7 E2 p$ k    F11 步入, 单步执行, 会进入子程序4 o: X- h9 R$ Y: C" P# E* S
    F10 步过, 单步执行, 不会进入子程序+ w" b5 r- }% b" M8 z9 ?4 q
    Shift+F11 执行到子程序返回
) u* j% ~2 Y0 [% ~4 |  d3 o5 c* @    Ctrl+M 内存浏览窗口5 L9 H3 k% s$ L( f
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
5 l$ c. w% C. }" v- D( o
: Z/ |" K+ F8 e: b6 j9 O{:4_94:} 3 ~$ R; U+ t+ j4 i: J3 C

3 e  R/ ^- K; ]6 r4 ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2559 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
5 }, o! x2 D6 U" ^4 y+ y
* N+ W' l$ |$ B% J8 L1 R3 gPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
) M3 o- v/ d% {& L. ^/ K% u. U) t( b" G11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-15 12:46

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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