设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

& y# e' D/ ]5 Y5 A/ m很快速的整理我自己常用的指令: q. ?; z3 C2 q& R

% q3 }% r, I" c* @6 Y{:4_112:}
+ n. H  ]# F6 }* F; O/ t  H4 z3 J7 T
' p9 L& b1 H8 X8 O" q) f+ }MAME DEBUG常用指令
2 r7 u: H0 A7 ]& g/ S& i! p) z* D( i1 o: \) T2 F2 {2 o
内存搜寻: ci, cn, cl
& d! M! S3 z% n1 [
) L  J. y9 v; J    ci
' A+ F) L5 }" D/ s" P' i    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
- P6 J/ X! U" G5 d2 r
6 r: n( l& I% X6 k5 P    cn. g) J, b; V$ W% u" s! D# I
    搜寻指令
7 W2 J- k* D! y0 `0 N* Y    例子:8 d0 w! a5 j$ }. K
    cn eq,60$ Z) O# Z+ a7 ?2 B4 g, w9 ?) _
    搜寻目标等于60 (十六进制)
4 n9 ?/ O+ ~" W/ l        
, M* ~% }3 I$ u5 b" C: \. o5 o    cn eq,#96
! o3 i! o  v, s. o8 ^    搜寻目标等于96 (十进制)
- ~- ?) B& ~5 E* `  A' T  b
. G% r# G2 T1 a9 R    cn eq
# x: V. m" q  S  `    搜寻目标的数值没有变化
" C2 l& N& F7 j. h* ?" d5 Q6 a8 Z' g5 b& \& P* R
    cn ne& F# [6 p' V% J3 s6 ?  U
    搜寻目标的数值有变化
8 j, r+ Q+ W1 I0 t) e+ g5 L        
; Q. J( q" ?- Y* h    cn +5 y( P1 T- y; f" v8 H
    搜寻目标的数值增加
1 S# K+ N' v) f% ^! q   
+ S8 J- Z" n  ^+ J/ I    cn -$ c# X1 ^0 }2 W9 W) x5 T; |
    搜寻目标的数值减少
# X$ ]1 f$ _' I) D$ g4 e        ; q- S2 a$ ~5 y4 N
    cn +,3
2 D2 O% a0 d* Y& m; C/ S    搜寻目标的数值增加3 (十六进制)
6 c( k) h& N* H7 m; s5 m) ]
3 H$ \6 E& s& @; [    cl
2 g7 }, o" E1 w* n' a    列出所有搜寻结果7 n3 v7 M4 _3 ~$ V3 }& u8 f% v
) N; J6 n5 g- h3 f9 Z8 W2 m5 b. [7 ^
    cl xxx.txt
$ c2 X/ m  G9 g; _; L    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
4 x+ {% ]  \! l/ [& o' A2 ]( D" z% v: z) L- y* U" ^
   
: L' d0 o8 `" {4 T* B! S( p, q内存监视点指令: wp, wplist, wpclear
% X$ T5 C! v6 ~) @) ]    例子:; t: o5 `. X% w3 _) p  U" ?" p2 C! F
    wp 1234,1,r6 ^6 v1 X$ K' H8 r% J& T8 ?
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- x9 J2 w, |" {2 |( W8 ~9 z8 b6 N/ j' ~; @9 n. [1 L
    wp 1234,2,w
1 W) Y  h* K: p! x1 A+ n' K0 e2 c      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2+ }: o! V2 l4 Q. P" v$ H
     
7 D5 q# }. c6 Z$ H, }    wp 1234,6,rw
8 }2 K( F. G9 U" H, }% v      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( G1 B7 M2 o8 Y0 B  g, [9 N9 S: C. @9 Y1 E" ]9 z
    wp 23456,a,w,wpdata == 14 [; y0 l! ], R) A
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 Q. l* o4 M/ Q: U* k( M
6 X' B  j1 B/ w# @6 j  J    wplist" r* M3 \- a$ z  j" Q: o8 `
      列出所有监视点
5 p7 @0 ?" ]/ f7 a: b/ Q; ~( a0 I+ W9 ^6 _, e( S8 X- t: C5 i* o7 w
    wpclear 30 p4 J% j5 [5 ~
      删除编号3的监视点0 S) ^. m3 {" Q- f% O
3 x& k( E" s1 L& N* }
    wpclear2 [& O8 n" {! d% Q8 k: j3 K% b2 A
      删除所有监视点
# ?$ M: S4 r7 a( u9 s8 I9 f4 S6 {2 `4 I" z: u
      
. }- m7 R) N; A, \6 d$ p: Z% U2 E, T
程序断点指令: bp, bplist, bpclear' N* N" W, g2 }5 l, @& Y
    例子:& H, b: X9 m- x8 z5 g, n) D
    bp 1234
. D3 \8 y7 Y! m, N      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) V3 @. j4 e1 a3 D
# V/ C& t$ p; [' E    bp 23456,a0 == 0 && a1 == 0
: `6 ~( Z) A+ v1 S; S% J      在地址23456下断, 且中断条件为a0等于0以及a1等于0
. \. e, E& H1 e: p5 J' q! t  [- s' G
    bplist0 O: Y9 R5 G- X8 u1 n4 j
      列出所有断点) r7 f+ [- J6 j3 h# z" n6 y4 G
: `/ F8 R. J7 T
    bpclear 3+ J4 r# H; H- h; `6 e  G/ M3 {( Y
      删除编号3的断点# V8 k! N. _3 T
, ^/ X/ T1 s# V, v5 J
    bpclear1 W7 u! t. U1 r2 |0 N7 F" K
      删除所有断点
  Y* V% {7 Z( B% ]
- M8 W# |- ]. j9 j  A# Z0 c      
! I- {" d6 M4 h: @1 h- m      
' M9 W# ]& r( t. V跟蹤紀錄指令: trace+ ^6 |: i* }) M: p/ n9 s
    例子:# B/ |, b; s6 }
    trace 01.txt7 C4 w2 [2 @2 r5 o, \
    跟踪当前CPU运行的所有代码, 输出至文件01.txt0 l1 i) p5 z* I* ^4 z4 ]
/ |+ ^( q8 d! X1 |
    trace off
; k8 Q4 E8 o3 a# u+ e5 Y) q( Q$ e    停止跟踪, 并且关闭文件
9 d: B6 p1 n3 o% y/ W
1 g# m2 \: p- W    trace 01.txt,05 O/ G! ~$ y! S* Y$ {$ T
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% v' x% R3 r% q
9 o+ H3 \9 G9 f7 v1 W    trace off,0
8 `3 l, D/ C, }    停止跟踪编号为0的CPU, 并且关闭文件: V- G" U. R5 n& k. `8 H1 }

. v( I  I8 `/ A    trace 01.txt,0,{tracelog "A=%02X ",a}
* `3 D$ X( g2 W    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* D* C0 _( d* _  P1 q+ g    并且在每一行的前面, 写上"A=a "# L+ z& p' X. o1 u
    "A=%02X ",a为一个C语言printf函数常用的输出格式
- O! W0 G* q+ J9 K9 o6 k, h* t9 e+ i6 {9 R    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入) ^7 P6 g4 g  U% z4 M
    X表示为大写十六进制数
2 L' |4 {2 H0 ]  {% G- ]
: w+ l- ^) A5 p# f
2 H; I& N. H3 N5 f+ P! o3 h. I, x) \" {+ G0 p; @2 M0 A
内存直接写入指令: maincpu
1 E5 e8 B  ^, M: r/ `) E/ T    格式为 maincpu.[][]@地址=数据% ?+ h9 {8 ~, u2 V
    第一个[]:9 x- s. o, |8 q3 ^1 N+ {1 Y+ {
    o 表示ROM地址3 S: X! W) N: b
    p 表示RAM地址
' [* D) M' D7 M. l6 z2 v% K+ c9 b7 M8 L( @) t3 p  A" c
    第二个[]:
: i. x' p( ^  x7 u: u& m    d 表示4字节
& U; e" H% g" u! s3 c    w 表示2字节1 ^) W4 B4 b! [/ d1 d- X3 E( o; b
    b 表示1字节
% r) w/ Q1 R2 v) u
. J0 u& G1 I' h' F2 ~2 j( A0 Z+ t5 @    例子:
  i% f  [& s2 N8 v! e8 |    maincpu.ob@1234=FF1 j8 Z# N5 @/ S9 _  T
    在ROM地址1234处, 写入FF一个字节
; D2 C8 k0 X; n0 V1 W
8 t1 A, u- g0 d5 Z# X* C9 |: Y8 p% ]    maincpu.ow@1234=4E717 h+ F' k. M9 W2 M2 h
    在ROM地址1234处, 写入4E 71两个字节
( Y4 e- m0 h( }9 `" ~& ^+ ^) C5 X1 M* M$ [
    maincpu.od@1234=600A4E717 O9 y# K$ l  S2 Z
    在ROM地址1234处, 写入60 0A 4E 71四个字节
8 H) ?! o9 W2 N! u$ j. k, m- P' L, w1 Z% T( Z& {' E5 t5 c. ]
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
( L# E" }  F4 M1 m4 x    . v- b3 J9 m" \7 o7 ]7 x
# V  T* T" L- T  J0 i
其他:
3 y0 U9 G' e' O- Y! p    dasm 输出档案名,地址,长度8 q8 E/ x+ b  n
    输出程序的反汇编代码
4 n4 T* t3 O! n3 g# H( ~; x    例子:$ @: C5 C7 @. S: [/ H
    dasm 01.txt,0,100000
) D' @5 ?( K' H' o! e- N& R    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt+ w: u" W' k5 w

4 H- C9 q: ?% L! a    softreset
# w- K( M  c8 J% F, d    游戏重启, 但不重新载入ROM1 L2 b; v. i& }: K
& n: }" u* s  N2 g
    hardreset
9 v; Q1 x* w3 e$ t3 e' M  M    游戏重启, 且重新载入ROM; q' _" I% {! X! k
$ E% Z: L( W8 z- q
    snap xxx.png5 a! \$ R& \$ c. @( Q3 A2 r
    截图为xxx.png
/ F4 J4 W( L1 R& x% M3 k$ @7 D/ \6 a- `
9 ?& {' x( m$ @  S7 h  
2 Q, u$ W1 y* @  l5 c' q& ~  
8 V9 t) s. Y" H8 Z! \; D( C+ Y  / q4 v2 g5 Z7 `
热键:
( }0 k# E/ M4 {6 N; N    ~ 中断游戏' L$ ^8 V4 E/ _' n5 k; P8 ^2 F
    F5 运行游戏
6 z, {, {/ P  K) Q1 P& d9 b, n    F12 运行游戏且隐藏调试窗口
5 \- g, v& k) s) n7 g* X2 A( R    F11 步入, 单步执行, 会进入子程序
7 y4 b. [5 N/ Z+ [. V    F10 步过, 单步执行, 不会进入子程序
* |5 F3 R# I% N2 E8 T/ w% s1 |    Shift+F11 执行到子程序返回
  Q4 E  X% U+ e* ~, I9 r6 s    Ctrl+M 内存浏览窗口6 K$ l! F0 S7 X) Y0 x
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 s/ D0 k" Y1 w' v. P. `7 w9 E  o: G& e/ \6 L
{:4_94:} ' P5 ?, ?# h6 i; t+ p0 {
1 ^- a7 z+ U# x% Q1 B7 D# a

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2553 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。. `2 f9 S; _& H2 u# Q4 y

1 \  T3 {7 S+ ~9 x' l$ n4 fPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东+ }- u/ e- B9 G8 W* o' \! Z3 b
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-19 04:24

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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