EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
$ |$ X% x; v& R# k/ a9 n9 Q/ f% u
很快速的整理我自己常用的指令
% b  h# Z# x, f2 f  a" Z! M& x: U$ t' k; i2 ^9 i5 h
{:4_112:} ) @  ~* S7 B& J& k, ~3 P2 |* |
) D7 Q5 b) n  b/ |2 M/ ~9 [  S  \! J
MAME DEBUG常用指令
% W5 |( D2 c" W$ t  {
5 ]4 m5 ?; Q0 d$ C2 d内存搜寻: ci, cn, cl
/ B# }" K" ^" Y, g2 A* c
" R3 K% j9 {* }9 B    ci* y+ a; L9 {% i* j& u
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令& Z* N1 |2 l1 C  {: t4 E

4 b, M" k, i1 r5 R9 ^3 U' L0 D    cn+ H! k6 o8 J( ?: V' ]
    搜寻指令
, O0 e7 d: S- Z/ v    例子:
/ T, ^* z# p; H    cn eq,60
' l: F8 `; |2 {( w/ O    搜寻目标等于60 (十六进制)* u+ z/ }. J$ P9 j/ M6 B. m% q
        3 y- ^1 b. U8 B9 K6 u8 a6 M
    cn eq,#96/ V  H4 C0 a& c+ t" M
    搜寻目标等于96 (十进制)
0 q3 v3 R, z7 T1 l0 W
1 u) r% ?# d, x/ ~& g$ T8 h  S' }    cn eq& ]' U0 {: Z8 x) [2 M
    搜寻目标的数值没有变化4 b* N3 i2 C0 L5 a: T

2 i4 a+ Y( q8 r/ `, k1 |4 p    cn ne
  B0 Z/ P1 C, b' C+ T6 N( m    搜寻目标的数值有变化$ v0 s5 b$ y9 R0 X: O2 E
        , G4 ~; A8 L: ^) u/ h( G
    cn +5 H3 e* E# o# |- @2 W
    搜寻目标的数值增加
0 V" q; r3 m1 G1 A' H3 }9 t   
5 q1 B+ A2 M9 l; f! I    cn -# R) [7 O( [- l) I4 o/ i" o
    搜寻目标的数值减少
; m. f4 f7 l' n        
* j' y$ j4 o3 ~8 z: N4 f0 ^: ]8 j    cn +,3; f8 y) [- v0 g
    搜寻目标的数值增加3 (十六进制). d0 }! K* F- h9 o5 i9 m/ V
/ Z& a5 `+ h( G" |1 s# ]
    cl8 f, l( ?7 [* j. Z
    列出所有搜寻结果
$ k& j# V# z- L. c0 t8 u1 p
& K6 Q- j: h* V8 M$ b/ p    cl xxx.txt
' i1 D* U6 N5 {    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 d/ L$ K, ]( }7 D0 l5 }
+ G( C4 Y+ d* X% z7 p, ]+ C
   
8 M- z; e1 v  m1 A内存监视点指令: wp, wplist, wpclear
& x7 d, A# P  A6 d0 v    例子:% P. |  |2 ~( M0 F, z
    wp 1234,1,r
- ?& ^8 P) E, p% o1 ^8 o      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1/ C  j0 C! l5 t- K7 g

- X+ S2 ?+ ^: k    wp 1234,2,w
4 s+ }2 L5 [' R' B      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 k5 A6 r/ Z4 X     
2 d$ r) T: H  ^" h! W; G0 ]' N    wp 1234,6,rw
3 e, Q% v+ [" z. k' o) R, Y" S      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
5 n5 X% T7 j( M" B3 g& `7 F$ ~$ W" d( R" {- }9 M, `# ?
    wp 23456,a,w,wpdata == 1
- |3 ^- Y6 }8 J- g      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 I# v' O  u# k, w2 S; I2 P
. i# E; [/ w2 v  b    wplist
) P8 q$ w( t$ y6 a- c9 }      列出所有监视点( t, o/ W1 J, S7 y/ N

) h0 K: \' g' o* L0 u+ r    wpclear 3
9 [1 \% C5 K* K6 U5 P      删除编号3的监视点- q8 }, |7 V9 s$ E
9 J8 J' b; G& }& H! p
    wpclear
+ l- _5 R  \* @: W+ v      删除所有监视点2 L- t( P+ A' D, ?' k8 x
) m9 b; Q, T. E3 J. z
      $ |& L0 x8 B1 d5 g9 X% X

: G, p% r" k' ]8 [( g4 A程序断点指令: bp, bplist, bpclear
- B9 X1 i/ b  F. s& q* N    例子:
' V+ ]' ]3 K8 F% Z' D    bp 1234# g! I8 b( f4 n" R5 y/ |1 O
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
8 R! p' L4 w* k5 j3 X) a
, p% M( K1 r0 {; H# i& I2 d    bp 23456,a0 == 0 && a1 == 05 l: F  q3 Y- P( [! X
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
! P* |+ x8 w9 m2 @9 P( |
9 [9 c# F* L9 B; @8 c# w9 K8 r0 l    bplist) a# b3 j6 L6 u1 }$ E
      列出所有断点# w) j# G  \( W# K3 |* d+ ^
- s* x. M4 C8 a5 e: ?
    bpclear 35 M" r1 |; R9 D% e7 R& S" |
      删除编号3的断点) X. y0 j! l, f( f  t
8 c* J5 |' u# m# C
    bpclear4 ]  u! h6 K; m& o$ h
      删除所有断点
. U( u, m3 Q0 I6 _$ ~/ ~& M  R& v% J  q/ H1 P4 [- K$ b" F8 s: v
      
7 s" ?/ B& d6 H  A' e      ; p& u2 ]( M8 Y( s+ N2 W
跟蹤紀錄指令: trace
( F5 X3 @* I9 {. E    例子:
/ m- M- K* R& |9 T    trace 01.txt" w; N  C2 d1 R# f8 S  `
    跟踪当前CPU运行的所有代码, 输出至文件01.txt: D1 I: {% N4 t$ s

& D  l7 C9 |$ V  e9 w$ L    trace off) F$ l( F: v% ]* f$ Z$ m/ k( e5 I
    停止跟踪, 并且关闭文件
4 p: H3 `( j, D7 n3 D9 R1 K; k' v, f; E# ]
    trace 01.txt,0, m8 w& C* h" ~7 c7 {3 M
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& {8 X1 q6 i, D: |0 j
( I. |  B. p5 g. m! @    trace off,0# }$ B( O% u2 |9 {/ [3 k7 g9 C
    停止跟踪编号为0的CPU, 并且关闭文件8 y& x) |$ p5 Z

( k7 h3 F6 r5 [( q) d' [    trace 01.txt,0,{tracelog "A=%02X ",a}
4 T8 P' m; M9 i! v    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, M/ G( E* S2 c    并且在每一行的前面, 写上"A=a "
( y/ {% X- `; s' \  j1 t4 {% k    "A=%02X ",a为一个C语言printf函数常用的输出格式& T; k& D2 T/ A4 k
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入8 s$ p2 l8 a8 n
    X表示为大写十六进制数& z8 }' u3 u& c; Y# V( o5 t

. E9 y9 B( M! E6 }
7 {' V- F6 b6 r, V* H. A2 d8 ~; _
6 p- a! C9 X# e8 ?% \* G5 R! ]内存直接写入指令: maincpu
  ?  ~. t1 ^  ]    格式为 maincpu.[][]@地址=数据" [8 ^* Y- y6 G- O0 C  s4 H* E# J
    第一个[]:
& K" h+ m& e; J& a- W2 u6 ^5 X    o 表示ROM地址( M8 l0 ~/ d" p
    p 表示RAM地址
: ~2 z& z# x( s. G" E$ Z9 ?- @$ ]4 o5 a, p
    第二个[]:
* M/ r2 o4 Y- K2 n+ y1 J. z    d 表示4字节
  |4 K& R! m6 l6 c8 Y- I    w 表示2字节
, ]$ I7 X: n0 P2 V) O2 |    b 表示1字节
$ o% d1 O" e9 m0 q! K, E
) ]0 F( b; C- c- D- |# B6 ^8 i+ e# l    例子:
4 T2 n: G) W0 N; q" j, s3 W    maincpu.ob@1234=FF* U3 i5 R5 _: Y8 C: B% Q0 Y1 E( I
    在ROM地址1234处, 写入FF一个字节
, a' ~& b/ n5 {/ c* F4 w( Z# h& j
: G& R% w  u6 t7 m1 Z( O+ p    maincpu.ow@1234=4E71+ r: ~' D: L3 v7 Q" j: L4 h& [* |
    在ROM地址1234处, 写入4E 71两个字节# C! U. C4 M0 `) m
0 p) i) e: Z* h, P7 [9 a
    maincpu.od@1234=600A4E71/ R! w/ C& x! ~9 }$ T- {
    在ROM地址1234处, 写入60 0A 4E 71四个字节; ~7 L/ ^8 f2 H" J* c* M6 h8 n& V
( t+ F0 h2 J1 V! `! `( t
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
1 [2 p3 u) U- z/ B   
' i' ]* C3 T" l' c# a" K( [$ Q, b; S" T& i- Y% K, n
其他:
+ Q0 o+ V: H( J& f# ]& h    dasm 输出档案名,地址,长度9 b& C7 u0 y: k3 Y/ Z
    输出程序的反汇编代码
8 a- X! k  i) f! g2 w    例子:' @: B, K: f" l, j
    dasm 01.txt,0,100000" B1 v( J5 M1 R' g0 z
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( _- }+ M4 r( x
9 U0 @4 W1 B7 X2 _2 P6 R    softreset
7 i  Z8 \. R  N0 l/ F( X0 ?    游戏重启, 但不重新载入ROM
* i7 e! U9 o: |" G0 p, {* e8 G' Y. x
    hardreset
. R. H* O" P2 C' ~9 }    游戏重启, 且重新载入ROM* {8 @7 S  ~  O' d0 F- i0 a3 t

; p- Z6 @% a- W8 G, Q: J+ D    snap xxx.png
/ P# e# M" ?: m* i$ z6 F' W' s    截图为xxx.png2 ?, D' ]* ?, ?9 i
/ H! y5 G8 h( v/ F$ ]; v5 N
  
. o! e' J8 g" U- \8 N7 H  - z! t: R+ W% ^# f0 b4 ~
  
6 z" z$ N2 v# `5 N( v( _$ G7 K! H. k) y热键:) f5 Q& [1 Z; v! d
    ~ 中断游戏/ I2 J: g. F2 k$ O
    F5 运行游戏
' o1 o' f' N4 p: Z    F12 运行游戏且隐藏调试窗口
5 j4 Y$ C$ j! r% m1 k7 V2 @6 G    F11 步入, 单步执行, 会进入子程序1 ~. P& q, M6 r  f9 K
    F10 步过, 单步执行, 不会进入子程序3 W( B! Z; ^" e+ `5 K% {* N
    Shift+F11 执行到子程序返回
0 Q3 ]8 r( K" _1 \  u    Ctrl+M 内存浏览窗口* _; w  r; z$ [1 d& p* x: \! q2 a" T
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. L$ Z# ~  f9 j5 l
; A' a$ h$ F3 ~, Z1 a+ S{:4_94:}
7 k4 V0 V! D, b$ C* y9 \1 Q5 L" N+ V: l- {9 C: g( V3 q" K

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2579 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。7 t2 O2 D4 E5 k( q0 C

  u. W: y' `* h- u0 IPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
+ I% W% p7 u6 @6 r$ V11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-12 14:50 , Processed in 1.078125 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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