EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* {0 J* u5 Z, g很快速的整理我自己常用的指令: |1 ?$ H& B; u- H9 k

4 K4 e+ C1 u9 U9 z5 `9 K{:4_112:}
5 B5 ~( A, V2 n7 H
4 x/ o7 Y: G7 LMAME DEBUG常用指令/ I3 L$ q+ h5 L
. A% R( q9 ^6 h4 Q' n1 |
内存搜寻: ci, cn, cl
2 m( J+ @3 V8 X1 `# i6 Y  f' q! M: j7 L8 w6 s
    ci/ a; {8 f2 [" y
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, ~' P) Y5 O9 n6 F0 M- A8 a0 |/ P$ m4 J. {* `' u
    cn
/ t7 U- `, i' T" j& h( M2 W* Y    搜寻指令
$ f: q' a6 d7 F, V/ h) b' X/ M    例子:' P" X1 v. y$ M, n! B0 z9 }, B
    cn eq,60: ^2 y5 V+ v4 c& F( w; Z9 g
    搜寻目标等于60 (十六进制)0 E; ~' z' t8 M, L" T
        
. y) E6 a7 P' @6 J1 l* F    cn eq,#96
0 W5 |" t9 W: s% u. n  U    搜寻目标等于96 (十进制)
5 k$ `* h  m/ f$ k# S  O  {- e' g) O
    cn eq* O& ^1 b$ t1 R  ]2 k  @; W  w" J# L
    搜寻目标的数值没有变化
# t( C& E& J6 }9 z/ X5 g5 `2 @4 S) H- W/ t4 ^6 U& `9 f
    cn ne* Z3 U9 y. O# D$ u" I* F! c* j
    搜寻目标的数值有变化9 I( F; K1 n2 f- F3 r6 S5 U) h$ _
        # h7 g: b, I/ U4 o5 Z% e8 K" G; H
    cn +( }6 m# C* I1 r: b4 c+ F
    搜寻目标的数值增加
4 D" O/ z. o1 J. S6 h( [% ?! D   
8 s1 P/ h! l: t4 w    cn -
1 e; s  L* b0 ]. q0 }5 a, w+ o    搜寻目标的数值减少
: M' D) e0 v2 P( s. B        ! e+ a* K  V* E$ C7 g
    cn +,3
- D" l- ?7 T$ W% T3 `* M    搜寻目标的数值增加3 (十六进制)
& q) @/ m, Y' a0 Y# b. ]9 k
1 @$ ~7 x. i5 c4 N    cl' D7 V7 j1 G6 T& A
    列出所有搜寻结果
0 t& j& a* v: E# D5 ~; E' s4 s
. b) R- h) f3 y" }) J, Y    cl xxx.txt$ j- @2 }! e& \5 {# J
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 i  W: r) M1 l

: S; m! G# l, u3 r% h4 L   
, Z& \+ w4 r+ {7 n6 i) w内存监视点指令: wp, wplist, wpclear1 u& Q* u5 M, i
    例子:
7 A  I2 L  l% s( [    wp 1234,1,r
+ R5 C$ k+ ?: n/ P  t) M2 s      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度17 Q! X& {7 ]: |

2 B! ?1 b2 e5 f. J' O    wp 1234,2,w# ~; W) K  F. a5 ~% ^# z0 _
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2' |; ]) m& ~1 `, [: I% r2 p
     " U# o+ X0 a( j* o6 E* _) ~
    wp 1234,6,rw
2 l4 ^/ l0 T3 {+ T' N2 D      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ G6 Q3 R2 s4 M

$ P, [( s4 H. U6 K    wp 23456,a,w,wpdata == 1; H( q- {/ _* C# {: w+ Z! ^8 P
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ Z, U' i; G7 C, O# B

/ E" ]2 a! y* _2 t9 Z    wplist
& ^# q! n; |$ X8 }! o+ Q      列出所有监视点; m1 \1 K/ T; i7 X5 X8 @, p  G6 K

. c; R5 M. }6 w! g4 Y    wpclear 32 O& \' ?  T! ~+ Y9 [4 Z6 K* h$ o
      删除编号3的监视点
/ B$ W' z0 }/ B# s
3 l" Y1 b# F: d4 I# A    wpclear
* i. H  M9 A  Z9 l      删除所有监视点
& }: o6 Q* E, \4 E: A( L) \
; m, N- m4 [. S  N      
/ e4 V8 [6 |6 n4 n: V3 [; E
7 [  k4 C; W. J6 L6 E+ E程序断点指令: bp, bplist, bpclear$ f) X# O- g2 t, `, N, K/ `" N
    例子:
% b) T  P7 ^: j    bp 12349 V+ u3 F& {, p. M* U$ z3 ^' O  v
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
+ F; b3 }  J5 C0 \0 k- S+ |; h
0 ]6 P3 p9 [# ^- t  g    bp 23456,a0 == 0 && a1 == 04 h5 ?( b7 [" C8 n& }
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
) W! d" e$ w) \2 B9 c9 y3 {2 d0 b" u; Z. a% g" p8 E. J
    bplist/ z0 _( Y9 ]- j2 y, J$ I
      列出所有断点& [5 d0 ^8 Q7 t! g/ C# R

$ f6 t  [% I6 q0 T) I    bpclear 3: F5 Y' b; b6 d0 c' k0 _  c
      删除编号3的断点% C! K6 H5 _: |$ J( }" O

. _* d+ e" m+ [# {8 h$ H    bpclear; N* z2 _$ `7 Y; O: Z' `
      删除所有断点: n% t, ^# o* R+ t  F( B

8 @% q7 X% U# a8 X0 C& i, y      4 g4 `3 s3 x" E' r
      
6 ?' e$ P# f; f( |  l. F( b" ~5 w跟蹤紀錄指令: trace; k7 @0 @! i( v$ W
    例子:% H# h1 u$ ]9 N$ b9 _# t6 R2 D
    trace 01.txt2 E: y; F* ~1 F5 `
    跟踪当前CPU运行的所有代码, 输出至文件01.txt  x" ^) w3 E& m& Q: ]( f  ?

% h( F( g; \( j2 c/ ~' k    trace off3 e3 g- [: ~; F% h
    停止跟踪, 并且关闭文件! D$ }% ?5 {% y9 r/ r
0 v8 M3 P9 t( p2 K
    trace 01.txt,0) z4 {* n6 l+ N7 K. }. x
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) o4 M( i* t+ ^5 U" A( B
& y( b" F  J  |5 ]& H: }    trace off,0; ^9 P8 z$ a5 D4 c4 {
    停止跟踪编号为0的CPU, 并且关闭文件
7 M9 Y  X$ ^; ]2 f1 Y% {$ R( y3 G+ Z  G# m! `  I
    trace 01.txt,0,{tracelog "A=%02X ",a}
( R9 k" S+ E- m7 X/ Q& n    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# ]4 V! d( O; N$ {8 x5 ]    并且在每一行的前面, 写上"A=a "
0 y2 Q3 @$ P9 q. z6 q: ]. j/ t    "A=%02X ",a为一个C语言printf函数常用的输出格式' E. ]8 F$ X! x* N
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( e6 \) s0 ^+ T
    X表示为大写十六进制数! }2 Y; j/ ]% C

" k9 M4 h+ z6 @7 q0 h! t4 e9 A) x
2 w: V0 \* c1 t. S; {5 ~  {& Z) H' Q
内存直接写入指令: maincpu* ~# z( O, C9 L
    格式为 maincpu.[][]@地址=数据
2 o8 G0 X7 S/ U* h# B    第一个[]:
% x# z, v+ N7 c& c    o 表示ROM地址
- a: z( \5 T# B3 q    p 表示RAM地址
6 f7 ?8 W" T8 @/ t4 T- s
5 w# |+ G& |0 q- i/ b8 ]    第二个[]:/ z  W% t1 v4 h- k3 d
    d 表示4字节* f/ ?) ]/ a$ \' j7 R
    w 表示2字节1 C8 [$ a8 x) ^' s0 j% }
    b 表示1字节
9 ?6 E5 \* y$ C1 a
+ o* z- L* O) ^    例子:
! j4 O+ `/ y* @    maincpu.ob@1234=FF0 X( B1 k4 w" }( G
    在ROM地址1234处, 写入FF一个字节* T# \( O# l' ~7 Z( O; F* u) h1 q" P
  C1 x- e8 I; s1 H+ F. |" ^
    maincpu.ow@1234=4E71
) ]* q# u' d) F2 S5 C    在ROM地址1234处, 写入4E 71两个字节
2 f# c' |5 n: E- d% t2 U1 v# z0 H% D5 ~
    maincpu.od@1234=600A4E712 R! O5 d3 L9 a: k& S
    在ROM地址1234处, 写入60 0A 4E 71四个字节
: L4 p& V9 p: U* z2 X
0 l. U( V5 _5 Q9 n" u    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 s8 {* [6 s# [: }/ F   
1 P- d1 K3 v7 s! T, ^
& [2 I! }$ w8 N0 }, y其他:
5 R9 n" N: s) I& m    dasm 输出档案名,地址,长度' }+ w; z8 w; V7 `- T8 {4 j' Z
    输出程序的反汇编代码- e; g3 R4 ?. H) G' y- G* ?
    例子:
5 R8 Z4 L# l* ], y5 g    dasm 01.txt,0,1000008 ?# p0 F# N' i
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
. {8 A& |4 g4 S7 c8 @* u
% H/ ~/ P/ c5 w9 N+ w+ V2 p    softreset
" a: f3 g% ]* k3 Q  A6 c    游戏重启, 但不重新载入ROM
$ F/ c* V$ A$ r
; F. x' S+ M  ~# F6 v. L, K    hardreset3 y3 m4 U! E6 C
    游戏重启, 且重新载入ROM4 o8 ~2 d' U6 Y
, o, R3 O7 b9 X( {7 l
    snap xxx.png
2 P1 G) l% ?- @3 X, D) D  l2 [    截图为xxx.png
: s# E& D- b; S0 Y
* \+ k( \8 Q7 I4 u5 b  I( x; [  ! {0 T9 v4 S( ]4 G# K
  4 Y( V+ |/ [) J( t
  
8 v2 W, [1 o- j! }% I7 M+ d热键:) `% x% s4 U$ e# m/ x; U6 {. c
    ~ 中断游戏
5 K/ F' \- S7 M$ V    F5 运行游戏, D# i6 L0 y+ q4 M9 P' P* j. D
    F12 运行游戏且隐藏调试窗口7 v- K5 e2 E6 S5 T9 f5 l: {
    F11 步入, 单步执行, 会进入子程序
) a1 S7 g  O; p    F10 步过, 单步执行, 不会进入子程序& \4 O5 ^3 V; t% [5 @# U0 n
    Shift+F11 执行到子程序返回
3 `$ J/ o" E9 d# J& x; m: e    Ctrl+M 内存浏览窗口* G( ]% i' G8 Z1 j3 l, |
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU4 G! c4 N6 V; ]* W

( ~; J# J! M! y" p{:4_94:} + @5 s5 G# J5 z9 J( c
( e. X# O; v4 F4 B

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。4 E! r. [5 Y2 g  {+ P+ i

& [; z1 T5 Y7 m; w" Z0 \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 | 显示全部楼层
要详细些的东东
3 M- k, |: v3 O- m& R; d! l, B( L11111111111111

该用户从未签到

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

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-11 13:22 , Processed in 1.080078 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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