设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

. w# P( P8 j! ?很快速的整理我自己常用的指令/ I9 I* a/ [& W4 {/ O# q* c
. b5 s$ a* _, f. d1 C5 n
{:4_112:}
- r; U7 Z% z3 a/ G; C$ q! V- A$ p. I& {
; X; W! n5 {* rMAME DEBUG常用指令
4 J/ u' Y+ Y5 x' o1 p3 M$ N
. l! j4 p& Z4 U5 L内存搜寻: ci, cn, cl
/ U# M1 n: u/ h0 }; g( D: F% u1 M$ Z7 v+ A$ U$ \2 K
    ci; e! A+ b% @5 U+ }( P, H2 Z
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令. a$ V, l" k% F* m! U) |4 }
. V: W2 U" i9 x: m0 L9 x
    cn" N9 `% K) ?8 G% Y1 ]3 n  d
    搜寻指令& p( F5 N$ V/ }+ M
    例子:
7 p! Y' Z7 _' }: B    cn eq,60. Y& P; ^. m' y* c- C2 E# `
    搜寻目标等于60 (十六进制)( M% f  E4 Z  Y1 \* u- {) D( _7 |- f9 r7 h- f
        ( j, m' m1 Y/ A% X% Z$ I
    cn eq,#96/ Z" [+ y8 z1 d9 A! l4 `
    搜寻目标等于96 (十进制)
. K/ o: U# y( q3 Z5 k
) c9 s, ^, ]2 _0 |: d8 Q    cn eq# K. Y6 h7 M/ Y& ?
    搜寻目标的数值没有变化. J. X4 ~. ?6 M" v# @' a6 v' a
. [- {3 n' n7 d3 u! z
    cn ne0 Q  L1 L  v, n5 K3 J* O0 o1 Y; x
    搜寻目标的数值有变化' E" V( b1 P  G: }5 N
        5 G; d# P& d4 y: ]
    cn +9 B* a6 c, X( V' g, C3 l
    搜寻目标的数值增加
2 |/ J: c7 v& i3 Z   
: c% e" u5 f$ e$ x9 v; T    cn -
8 J! N8 u& ]2 k% O6 P    搜寻目标的数值减少  J* T2 V& E4 }$ p; l# S/ j6 m3 [
        / z: n4 u, }7 ~" y2 G2 S) C
    cn +,3! V9 J5 z1 b8 b9 t
    搜寻目标的数值增加3 (十六进制)
1 o" z# T8 G" h- R* M! c9 N. d
& B0 k: R1 G! a" E" Z' P    cl1 o+ T- }# y" x* j
    列出所有搜寻结果& b# v& }4 i, s4 s, e7 x' l

; ~" r; |* W) }. f7 D8 D    cl xxx.txt: ?+ I; q; d+ H" G. w' ]; M
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
+ T3 Z$ l, H" n; a+ x8 b
& z( e; d. v# k2 J   
) f4 U$ G, p6 B2 l5 Y# n4 Y3 }内存监视点指令: wp, wplist, wpclear* D9 f0 b% I$ O9 r$ Z+ s& ]0 W
    例子:9 b3 ^7 F3 a, O; y
    wp 1234,1,r; u6 F# B) T1 A
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度18 E7 P* g, t- ?2 b/ o

4 J1 e) M6 m8 }$ ]# g2 o& f" [    wp 1234,2,w6 j: ^& N+ f3 V/ S/ u/ v; g9 I
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2% e- g) P, s- |7 e% h
     
! [, k3 d) A/ e4 e: o8 C    wp 1234,6,rw
; x  b8 z8 l/ K8 A      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( d4 S/ @( c5 W5 a& k

' W7 @3 f8 L) u0 I    wp 23456,a,w,wpdata == 1
/ u+ U0 o6 {* M6 A& E6 V- K% T      在地址1234下写入监视点, 数据长度a, 且写入的数据等于19 K! i5 v1 V& ^) @2 U

( u1 ^4 B7 R+ {. }+ i- y    wplist" e, l  h( h6 u5 s
      列出所有监视点* z& j! U1 J& r( K2 O
& m5 p3 e( L# ?9 U0 H7 \
    wpclear 3, g% v6 s1 v" x1 a3 H
      删除编号3的监视点
- F  L3 X9 k! F  \' e! Y; n
0 m& t% \6 u& R$ @) o    wpclear
7 I, o5 w9 `. Y' C( `0 D      删除所有监视点" m( @6 {5 C* g0 v5 b; M6 L

+ D; R# [* e. r      / ]: M, D; U" h! `

# L0 s9 n) W" B0 {$ \3 T程序断点指令: bp, bplist, bpclear
3 V: ]! ?4 ^8 I5 x# p  u4 s( ]4 c* u    例子:! j$ ?- P- F- W/ \
    bp 1234
6 x  i- E) A! n. [' v* ^      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断- p- h! V! ]) s% ^; n* i5 h: m* t
, \8 d2 E; f  @% @1 b9 D3 ?
    bp 23456,a0 == 0 && a1 == 06 H) T+ T4 O" T1 b/ B/ N/ b
      在地址23456下断, 且中断条件为a0等于0以及a1等于0, C6 L" Y& v* r  r

9 t4 W  {( k& A9 R* B% o6 h  \. y    bplist) ]# f/ X" G) Q5 q6 S8 n" S) A
      列出所有断点9 Y# Z8 N2 _' `( t& b" p
" H2 l* n: S9 w0 v5 w! F
    bpclear 3
2 t0 u2 v1 K9 F( \      删除编号3的断点7 N5 o6 L' B7 T% \" D  U

! n1 u6 \9 S# b4 Q) ^( b% I    bpclear
) {* [! @; C# c. G! i/ D      删除所有断点/ u# \' i. Z& m, J6 _: h

- Q' ^/ ^3 [' a" y) K! g      7 \8 Z1 Y' f# {% o4 |7 K1 r
      
$ M. A$ q/ ^4 W0 Y/ ?! n! q4 v3 `跟蹤紀錄指令: trace
" g* v% s; j1 I4 R" e" F    例子:' f$ y3 T: }* e. w5 @
    trace 01.txt
% _( A0 n% ]2 ^* A4 O' F9 d    跟踪当前CPU运行的所有代码, 输出至文件01.txt4 W7 |# s  d5 ]0 _& L& C& k5 k
$ f6 s: w" q3 T, p- O
    trace off
) ~: S$ b- n$ b) M1 a    停止跟踪, 并且关闭文件
, Q. z& X" }5 W: I
1 }$ g* s; L: R5 p! q    trace 01.txt,05 p5 h% G* ~: Q% J+ V
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( k# a! J" x3 p+ I- e
& ?" k* t/ v  x
    trace off,0  r) Z0 }, a$ b: A5 o% G
    停止跟踪编号为0的CPU, 并且关闭文件& l6 Z% ~( |1 }1 Z9 k1 {6 d, T% E
! h( c( p- u  x% y  q- X
    trace 01.txt,0,{tracelog "A=%02X ",a}) ~0 w6 V% d3 V0 {
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 z6 |* E# J$ P) r- X5 }
    并且在每一行的前面, 写上"A=a "( `$ O4 s) s  ]) g+ ~, f6 o4 {4 d
    "A=%02X ",a为一个C语言printf函数常用的输出格式
& O9 Q! v- G& ?" Z2 W% U+ `    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入& b( a1 g7 o! E4 c8 O2 u* h* Z" M" }
    X表示为大写十六进制数
% k( K; o. u6 N) Y5 u( T" h: R1 h5 W6 p- P" ?( t# O" n
- x6 ^; c8 A0 |8 l
7 G! L& t) Z' z* r4 L
内存直接写入指令: maincpu
4 g) d! r$ \; e0 ]2 w7 u* k1 r    格式为 maincpu.[][]@地址=数据
( I9 R1 d) V+ M0 p8 E2 e    第一个[]:
4 }8 f9 E0 i/ u9 B, [    o 表示ROM地址$ {8 t+ S3 s' x
    p 表示RAM地址
* w8 ?. _3 ?; r0 Z( d
% r! D. d8 w& C% O    第二个[]:) _4 m) }3 U' [+ _
    d 表示4字节
1 R) ^8 D' F  ?1 K7 }0 i* y! m( I    w 表示2字节
' \0 ^' S/ G3 h' ^) d    b 表示1字节
; y& R; m) b1 j  S
( C) i# W7 ~* K% _    例子:; q% K: H" F0 y3 b- w, Z# f. \
    maincpu.ob@1234=FF( K1 _* W1 S, C* d% k# g
    在ROM地址1234处, 写入FF一个字节
7 }8 u: D9 ~9 z4 Z# W- \
4 x8 R/ r  [4 I0 a) `    maincpu.ow@1234=4E71( A# m8 q$ c# s$ `. L% i- B% t
    在ROM地址1234处, 写入4E 71两个字节6 B0 S2 _! x  \7 H" n

( @  b$ b* M9 Y    maincpu.od@1234=600A4E71
+ W& k# r2 |5 Z! t6 G. [    在ROM地址1234处, 写入60 0A 4E 71四个字节
* q. v3 X+ J2 S3 j" C; j
/ m* M- J5 M% L' _7 l7 ?1 w    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
, Q5 C+ Q& J2 _! C    3 f' x! A* i) @5 X3 A
- J2 m  V, R6 L
其他:
9 D8 p, a1 f1 Z; ~4 Y    dasm 输出档案名,地址,长度8 s2 K* x7 R0 m* L$ @; H
    输出程序的反汇编代码% a+ q9 d. G/ ~4 R
    例子:
; o1 z* ?  [/ ?+ F; B    dasm 01.txt,0,100000; L; o, n8 |% m1 n/ m& s
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt+ J- X( X8 E( _1 g/ J

+ K( D& s+ E$ ]6 K    softreset
# c0 f* o+ E7 o! u7 [; G    游戏重启, 但不重新载入ROM
( X/ {$ X: n& E3 c* j. W7 `+ f" y( s; b
    hardreset
. T( M% j; `0 P" B& h! C4 U+ j    游戏重启, 且重新载入ROM
! Z: F, S+ Y- x
0 B6 b! x& R" k) E1 |; T- o8 b! A    snap xxx.png: a8 f  G9 ]1 O. \. L
    截图为xxx.png
8 z& c& |8 q- Y3 }
3 r" p  t. U8 `4 K& h! Q  E" [  
4 k& a( T1 j$ Q9 _  
0 y- T' Z% ^, G6 f3 g  
* F2 P9 Z) D7 D5 z& P热键:
! d9 |1 i2 l% ?3 E5 O" y# c# B    ~ 中断游戏) L" a+ c& F# O  D
    F5 运行游戏  m+ }7 l  h+ H" D" e
    F12 运行游戏且隐藏调试窗口
# F( Q( f+ d- Y% j( ]    F11 步入, 单步执行, 会进入子程序
. Q2 r/ r1 n/ h( e0 ^+ M0 |0 h    F10 步过, 单步执行, 不会进入子程序
: m- [" Z! M. n8 x/ }: y0 C) v, i    Shift+F11 执行到子程序返回
9 T* f! {# \0 [, \    Ctrl+M 内存浏览窗口
: U& b6 B3 s1 f. y2 P# u* j    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# r6 ?$ }# y/ a% J) g1 X: Z1 m
7 Q2 Q7 o- _* [
{:4_94:} : j/ E2 z) ]$ p) x

% m4 o4 I, b) t- _, J: ]6 k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。1 n: X2 x, }. l
, c  N1 T: S) B# S3 H
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 | 显示全部楼层
要详细些的东东
5 B4 w6 _" Z- p0 Q11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-7 19:43

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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