设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
9 g# G4 A! U5 c3 H( g/ ~
很快速的整理我自己常用的指令4 |$ P. t" ^0 ~" N
  S) b; S7 Q$ u6 @& e" T+ n
{:4_112:} 0 a' I+ f' j0 P4 B9 k3 g
, M$ n3 K3 p' [& i) E
MAME DEBUG常用指令
6 X/ R1 N& n5 F# j; m1 f, y. C. O3 |1 I2 E
内存搜寻: ci, cn, cl
! r+ Z( c- C8 m: ?9 ?3 k
7 M5 y* g" c" v# I+ H    ci
- a; X9 n" e/ ~$ @    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. I+ e2 M1 d) V' u% ~/ o6 y0 `, T" @0 p  i
    cn, b/ K: c  y' C; a+ f
    搜寻指令
% O% Y. O1 t8 |' n" e7 ~    例子:
- j" l1 D1 s$ u& L0 ~    cn eq,60& B. X8 f' \, t6 k8 k+ P' [. d
    搜寻目标等于60 (十六进制)
0 U, Z5 h  y6 B9 L9 c        
4 b: T8 V$ L; i: Q; t9 |" F    cn eq,#96
" b  Q- {* r' T    搜寻目标等于96 (十进制)
7 w1 C: t' X. e8 f. W( m
; V+ `- F; A) |: m4 p    cn eq
* _  I/ l( ]; y0 W+ c4 d) D; v    搜寻目标的数值没有变化; Y, v& [* K* f- F. n6 `' T

& f, r0 [; o8 y- k# ]4 \& \# z    cn ne
4 A) }) Y8 o' P7 u    搜寻目标的数值有变化
. ^9 l% Y: C4 b: ~; }+ ?        1 f4 M+ s; n5 }5 o
    cn +# A  H3 c9 ?0 r' k& p
    搜寻目标的数值增加+ e/ u0 e+ U. l0 z
    6 A3 n3 J  f) q) W
    cn -
$ H6 N6 ~. X3 r0 w7 i    搜寻目标的数值减少8 v+ s6 O6 B6 c. u
        
( ?" k. e" t# R    cn +,3: S+ X* Y, u5 Y. J+ a
    搜寻目标的数值增加3 (十六进制)( T$ [* Y( s; _9 Z& _; ~; Z
, m- j$ h$ b" {7 F
    cl' e' q, R6 w' {5 T, `! q$ g# J
    列出所有搜寻结果) k$ A& D$ T3 O9 I0 U
* V- Z8 V1 d% E% K& k
    cl xxx.txt
; l3 _+ \" Y' b, T. ]& }7 I/ @    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 b3 J9 S3 I' k! k) Y

% {2 f0 ^6 T9 v& r9 Q: [8 L  x' L    7 S  k& s  X* h5 H' a5 g
内存监视点指令: wp, wplist, wpclear! f7 H4 y0 h& I& M9 Q; w
    例子:, G- h+ S" M% |% e. e' @
    wp 1234,1,r0 k0 B# b  H* a; T
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
" \4 ?6 S; J* m4 F, n- c; T! M5 V6 P* R/ U+ j9 {# c
    wp 1234,2,w% w5 @. d7 v2 \! l
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2. ~1 U. v9 S* f- X. T
     
. a2 B8 t) J8 z( p0 g    wp 1234,6,rw
2 f9 A" B& n% N9 {/ D- H2 n      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度62 }0 E2 M: y9 O: c. Y" ?& J

& s- Q4 b) Y" G3 Q    wp 23456,a,w,wpdata == 1; `9 B$ o) x  J0 r. ^
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" Y" F  ?! H" R+ F2 Z( X$ z- a* Z, b4 b2 t- c4 O2 |7 p4 @6 f
    wplist
" q. A, k5 I: z* p( N0 `/ c" V0 X      列出所有监视点# s/ B9 @, ]3 t7 d' }; {4 z3 x7 [1 T6 r
3 N$ d* E, {4 o
    wpclear 3
& A/ W) G) K( ^* v% i. ~& ]      删除编号3的监视点( E2 m& O9 Q" \" X6 }
5 i) X# y0 C. z! z
    wpclear4 X% l. _# v' Y8 s5 g
      删除所有监视点
/ p3 E# G. E5 y6 P6 L$ H3 W$ C: D5 w9 c. y; o
      
% Q8 A% P, K/ S5 [! ~% S' ~
- L% r5 T, V1 q4 _) z$ Z' Y6 p程序断点指令: bp, bplist, bpclear8 c* I6 }* [- [5 E
    例子:
  W$ j1 k3 \. N% l: Z1 y# N# F    bp 1234
8 c2 C) z$ U, q      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
$ ?; W$ C# g2 p$ U7 o5 Y
/ e4 s& a, q. F: T- Z) G    bp 23456,a0 == 0 && a1 == 0( U1 o" n8 \- T. v% U
      在地址23456下断, 且中断条件为a0等于0以及a1等于0* a. K. R% S: u

! p! Z% j) d( c0 C    bplist
* X/ m3 A. [7 e6 C0 O$ F      列出所有断点8 p7 @2 s& s& O" J- @5 Y7 D0 o

' k3 j0 D, P& `9 o5 E8 Y3 L# n' S    bpclear 3
# c) S% m3 g+ K9 c1 X' L      删除编号3的断点
6 [* a0 q2 ~3 T0 G: g8 |6 X/ u0 x+ k7 Q. N
    bpclear" r5 H8 d9 M+ n  J# H& @  L3 j, G
      删除所有断点6 S) M& L( D+ g( G

( s. I: G0 U8 y" q      ; e" @3 ^! e8 Q2 K$ g. z: x! \
      
- W' \& z1 y. T+ T2 a& l9 H跟蹤紀錄指令: trace
$ a8 ?' }; O) l( B$ o    例子:1 Q& N2 |* {" k: f4 K
    trace 01.txt7 W8 B8 W/ t, d! J4 a* M, @$ m
    跟踪当前CPU运行的所有代码, 输出至文件01.txt3 I8 D  D$ q+ U' D- q
" o+ ?( v+ Z3 J. k, x
    trace off$ ~4 G( \& ~- @" o2 y8 G2 o' r" v+ a
    停止跟踪, 并且关闭文件
8 V- [  S" t" w7 P! c
7 k6 P" g2 `3 l$ ]! Q6 K' k    trace 01.txt,0
! q7 P* }- Y2 C% ?2 K# d    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
4 s! N/ ^+ s4 }1 T4 G" z3 {* Y  f$ o& y4 V- F- Z; [
    trace off,01 }$ X3 Q9 H0 C( c6 q
    停止跟踪编号为0的CPU, 并且关闭文件
: D& J/ r  D. k7 T" z% W6 b- y
9 I% q2 h9 g7 \9 q- ~9 W    trace 01.txt,0,{tracelog "A=%02X ",a}
  V0 o/ p* M  I7 ~; @    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' S  i2 j8 k  p5 u' g    并且在每一行的前面, 写上"A=a "8 X+ W7 l: ?9 n5 ~; W
    "A=%02X ",a为一个C语言printf函数常用的输出格式: K2 ~. |  w: @8 r& x. b* H% U
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 c1 H' S6 h* }! w8 O. E$ t    X表示为大写十六进制数- ?1 R. F3 R( {# c" Q
2 R- `- N& W* t8 S3 {1 P
# O/ D( v( B' x8 b- |. u

% |2 [, O8 X5 z" j" g) t内存直接写入指令: maincpu, g9 w6 C( w! ~: C; B% V
    格式为 maincpu.[][]@地址=数据
) C. G) m/ V# c% n. j+ Z4 y    第一个[]:
0 _4 Y% ~- Z$ A7 a/ w    o 表示ROM地址
, K$ c" A& v/ c, b) i2 a; M; y    p 表示RAM地址
0 h' A8 S- d8 q1 W/ c8 J+ p5 F7 ^0 h7 v2 Q2 n/ d5 j
    第二个[]:' s7 E: A3 \: Y5 f4 _" [! t5 {
    d 表示4字节
/ e: h0 b, G' u- ?8 J6 e, n    w 表示2字节
" E# ^( z" r0 G  o* `' P% M; w# m    b 表示1字节! G& M" C& w0 t! U, {
, ~0 @/ m2 [" k% l5 Y" N- A
    例子:
9 A; x8 v+ E( O# A    maincpu.ob@1234=FF
* ]5 F" R" M4 a" N1 Z% A( p3 o- H    在ROM地址1234处, 写入FF一个字节( ^- l) C+ Y/ \  t2 O$ v3 \

9 \- ~4 n; G/ B6 O: d! A    maincpu.ow@1234=4E71
* |/ ^8 d* d2 ?- W" m4 |' ^    在ROM地址1234处, 写入4E 71两个字节
1 f/ N, S8 l3 v8 ~1 |  O# L7 |! L0 @9 S3 R! M& l& ~; |8 ?' S" x; X4 n, S9 c
    maincpu.od@1234=600A4E71) y- o# K! v8 }4 K0 G/ F  o! {
    在ROM地址1234处, 写入60 0A 4E 71四个字节
- Z1 H" _5 H# V3 m7 F8 r+ P, Q' p  [' c2 {; L5 |
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) N7 Q, M/ z2 o: Y) @$ b3 D   
( \8 c# p% Q" ]
4 h) u. H3 i5 K4 r6 E$ A8 N其他:2 o. j+ ^0 u6 q) Z" F+ i% M# Q
    dasm 输出档案名,地址,长度! L, X3 @& `2 `
    输出程序的反汇编代码
; |7 z* x$ O% y& T5 U    例子:$ a9 D: Q# u+ X! w* L
    dasm 01.txt,0,100000( v8 G# K8 a( `5 [8 Z
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ I9 f1 p/ T# i5 T8 [" {' e% E/ t# f) X( q" o9 t  h$ x, }4 c2 R
    softreset, y  Z$ B& {& _' ]; D- w0 W; g7 S, z
    游戏重启, 但不重新载入ROM2 n- s+ h) S5 ^7 `. m

8 `0 m, |2 B# T+ f    hardreset
+ J. e3 b! N5 X, Y) `    游戏重启, 且重新载入ROM
( |$ j. N, `/ w3 [/ B
- X( ~7 \$ c5 r9 D7 L5 j* C  l    snap xxx.png: L! Z. P' H4 ^
    截图为xxx.png
3 W5 A$ Y/ C. t* f; T& ~  h1 ~' o) n3 j) L
  * O" }3 @9 m0 b+ W5 @* O5 x5 b
  $ X1 t" s$ ^* R9 p
  
2 r/ `8 J+ @% b! M# N热键:
+ x0 ?4 V& I- O  O. p. z& r2 X, ^: Q    ~ 中断游戏) B5 E' o8 a! Z* P
    F5 运行游戏: E4 n% ?! O1 |
    F12 运行游戏且隐藏调试窗口6 T( S7 n$ C3 D$ z) I0 M- s
    F11 步入, 单步执行, 会进入子程序
- e! T! S$ R- U# {) `: x/ G' e    F10 步过, 单步执行, 不会进入子程序
( H. ?& N* |: p, H7 t7 |    Shift+F11 执行到子程序返回
# @/ B( [* }* b9 V    Ctrl+M 内存浏览窗口; U" v  G0 H! C5 N& M* g
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. i/ I8 q; l7 @7 x6 l( {
9 r+ D: D6 b$ x- d" d{:4_94:}
1 b' Q# f# Y2 |' }7 u. O, g; M# c' e: l3 {6 o% m' w8 o1 ]( H0 T

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2556 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
% @+ j7 I7 c2 Y  ?& H2 ^
9 O# n& n8 G1 X! KPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东- n  v$ y5 n5 D, \3 p
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-25 23:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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