设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

& {6 q) f8 a0 w6 x+ B很快速的整理我自己常用的指令
& w4 G- u# y4 v) R) F9 f  d( \# W* A8 E% |: `- ?8 l! d2 R
{:4_112:}
) p3 r& @9 \9 W0 a7 q! C  ]' u
8 R1 a6 R. `6 I  O( s: C8 C! tMAME DEBUG常用指令' c  P4 H+ @) F+ b" b! i

, z3 P: J7 j" b* c9 e- Y3 {内存搜寻: ci, cn, cl% I7 X$ E5 _6 y* O9 D$ H" S( @

8 c0 o. B0 i+ z3 k) ~- Z    ci8 B; ^+ ?& E/ a
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令9 q0 k; L  T9 F

' n4 [, m: u' \$ u    cn
, z- y7 o" O# K: E/ q( w' _    搜寻指令
! g2 f" G3 b6 C2 U! s    例子:& ~% K, D. U: Q9 |  D
    cn eq,60" y0 p( z/ u. ^- U
    搜寻目标等于60 (十六进制)
8 ^$ X6 ?8 ^9 d2 ^* E* ^# ~+ U% _2 O) u        
5 u7 C& h! ]5 s' |& ~; y( N    cn eq,#968 j* Y; x3 k$ Y' s
    搜寻目标等于96 (十进制)
+ p. G$ m. C5 d# f
! Y( [, U7 I8 o  g- N# {    cn eq
( s+ Z' ^- f% w8 Z- `; U    搜寻目标的数值没有变化
% j! {1 R( a1 e* e
2 u; M  z* Y  q    cn ne4 i5 o- v) k+ a/ K- ]
    搜寻目标的数值有变化: G' I0 w0 I7 o2 d$ [! X' y3 Q
        , h$ e, h) s7 t2 N, I+ L1 {
    cn +
; q1 z& l' N: r  C: m    搜寻目标的数值增加
! w3 `: S: G( I- ^. N$ t4 M    ) @3 Q4 \1 j* V
    cn -
  C& C* B( |/ [5 k9 A$ u) R, y    搜寻目标的数值减少
, M( l" P% `) u- U7 v8 ]8 Q        : x: |4 F0 x7 E' p9 j- H
    cn +,3  D- j: u9 k7 V. H3 O. B- a
    搜寻目标的数值增加3 (十六进制)
; r" A, }8 {& f: V% d5 j6 ?$ z/ y1 }+ f
    cl
8 w* Y2 [' a5 A+ o# D+ w  {9 J    列出所有搜寻结果
( K8 [; A6 R; r" e8 e! I2 a+ H
9 F" {. G. _7 `! t. |, {6 K- Y' Z    cl xxx.txt
0 C" p3 B$ S! m& M, s! i    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* B6 |/ z& h9 b5 `" s
# H- l. Q  o* t* x& K: G; A    2 s+ i+ G9 m4 _. |0 F
内存监视点指令: wp, wplist, wpclear% E0 x0 e1 k+ c
    例子:
1 Q" z1 j) Y. s. c) j    wp 1234,1,r
- O2 J0 `, |' @  T- A: k      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1% H" V7 X8 D3 l) z6 e
+ h& U. C0 q! ~8 b
    wp 1234,2,w
) m1 H' H7 Z* v! V+ J1 l: P3 a, O      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 c  m" Q" s8 z! o7 S" r+ g
     , O' p% t+ u! }% Q. Q7 V
    wp 1234,6,rw
% n& O) V( A, L0 W      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6. g9 }/ p9 g( M& \

4 z. y# C7 \  B( z    wp 23456,a,w,wpdata == 1
) r: o- ?& S  a- R( e) Y      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
4 B0 i: I5 ]7 T; Z, S7 ^0 \, P4 i8 `; U
7 b2 i) n4 Y+ z9 L    wplist
( f6 h0 B: ?& p$ I& W$ a, W      列出所有监视点, y( K9 s& f' t9 s& ^

) _0 \( d! i6 A    wpclear 3% R- b7 r4 _9 L7 }2 O: S, @
      删除编号3的监视点
4 ^  E; g9 \5 B( k8 Q2 K- K" \+ K0 v9 `( x( \% T* z! t
    wpclear
' @% m  K0 I8 k8 B1 r      删除所有监视点% f2 G5 K/ g8 k& w

4 a1 _; ?& k2 S  D  R$ w      
1 J; n- D% j! {+ p, H7 W! N8 u# J  B" T( W! s1 J
程序断点指令: bp, bplist, bpclear8 E, O3 h3 Q2 C1 y  a
    例子:
( W/ Z; _3 P0 d, d    bp 1234
, P- k$ r; U" y9 r8 q      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, u% `$ \$ @1 C' O4 f- ^. d; x7 k
8 L* Z2 _2 M3 S5 A' D    bp 23456,a0 == 0 && a1 == 04 l' k5 B3 W' X$ b/ ~( |, S2 Z
      在地址23456下断, 且中断条件为a0等于0以及a1等于0$ `% {+ W8 i3 C
- j$ O: k2 e3 v, m; f/ }. i0 P
    bplist7 s5 a+ x% R  h7 L! e
      列出所有断点2 K2 ^( B+ e* ?2 G8 c

% U: j$ B& Q  t  k/ R    bpclear 3! L# W. M9 O; R/ ?$ |/ \" c
      删除编号3的断点6 b; L5 {) `4 ~& e
1 i: x( S1 f6 X: Z* d" \, r8 c
    bpclear4 d9 Q2 |7 z& l6 X
      删除所有断点
& b1 D8 L7 m. k0 Q. d2 K% |4 b# C
$ O- T) R' }+ T. S8 C8 U# e, M/ \      6 C+ X) R/ Y6 H7 T0 O
      
3 Z1 m. a' n+ w3 x. K跟蹤紀錄指令: trace2 r4 o) X$ P9 @' ?  V& n, l
    例子:
" B; y: |1 d( Q    trace 01.txt4 ^2 i9 a/ k$ R( F5 S
    跟踪当前CPU运行的所有代码, 输出至文件01.txt) M5 ]6 [% e; [( {0 C9 G+ i- R5 n/ |

  h( R) d3 U" q2 C" ^    trace off
6 v& R( _& t7 G+ g- {# {! k; P" g    停止跟踪, 并且关闭文件9 r$ q) B  s0 n1 j. [

0 [1 i0 t4 @, ^, x) k    trace 01.txt,0
3 n1 T# N; a  C9 j' P& s    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt+ c8 P- k- {; I& D5 x0 L4 {2 N4 y

) ]  v, Q5 Z, ^* s7 S, k( L6 d    trace off,0
$ o% X, R: m, z% D' g7 ~) ?9 l    停止跟踪编号为0的CPU, 并且关闭文件9 `- [6 e2 a" Z& U( T
! I$ c7 y/ L. M6 y4 h0 \7 a% w
    trace 01.txt,0,{tracelog "A=%02X ",a}! J5 X  C0 ^( i2 W3 w) Y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, {' d+ c4 N% K; z: n    并且在每一行的前面, 写上"A=a "
: k  N" a$ U5 ?3 {    "A=%02X ",a为一个C语言printf函数常用的输出格式
: r" y5 x+ n: M1 e    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
" e$ @" M( X) X7 O$ N$ |    X表示为大写十六进制数
; V0 N3 ]6 V: B$ J5 z/ [$ U. p  V% f2 t2 }& S+ O

3 `& W& g' {' {" E  L& l
* D7 {9 K/ c. x! u内存直接写入指令: maincpu
+ T$ @( a7 `0 g9 f& Y    格式为 maincpu.[][]@地址=数据
" O8 x' G  I) u# t! r, h    第一个[]:
/ x: {" ^- p; m9 e8 C/ w3 j( w; p    o 表示ROM地址
( I0 @" `1 Z* k+ J    p 表示RAM地址, g& d# {+ n& }0 ~4 V0 T* R

+ u0 K& B1 P" h$ Y: Q( ~    第二个[]:2 u% t/ N! S/ B. v- u6 P, m  a6 ]/ U1 G
    d 表示4字节
3 }& d. Z2 {0 ~. \% }0 N; T9 O    w 表示2字节
) @, V7 j0 H: n2 T. q7 _: a    b 表示1字节
$ ?/ D: G) K0 W( Z$ f7 L! y7 T5 |% U% o  B$ t6 m
    例子:, p( R" a) \; q& k3 M; X
    maincpu.ob@1234=FF- F2 T$ w2 {) _& Q
    在ROM地址1234处, 写入FF一个字节
/ |9 w3 Z4 U. a' w2 A) `. e- q- A( D( a
! n; {& d" T; O. G/ i6 i    maincpu.ow@1234=4E71* S# e2 E4 @# d+ K. }- J, M
    在ROM地址1234处, 写入4E 71两个字节
* @" {+ {, _; A
# b6 _& B& i5 y/ Y" u' m  z    maincpu.od@1234=600A4E71
" m: s5 j  b- E    在ROM地址1234处, 写入60 0A 4E 71四个字节. p7 K2 O8 E1 ]; \9 r$ M4 o
! }, i5 O) P9 a+ h
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写/ V) N8 b6 c+ w3 R8 u
    ! i' s+ u7 o: Y2 i2 m
+ [4 }" n' W$ i9 E' V7 ~, @; x$ o+ c: @% R
其他:
  I; T( [  K$ `/ `* p3 y  K    dasm 输出档案名,地址,长度. ]; `$ G! o; J0 K
    输出程序的反汇编代码
6 C* _; \. ^" S, C    例子:4 k  g$ g2 y5 V; _8 k2 A
    dasm 01.txt,0,100000
% ~, a+ H, b0 K0 G. C, L: g5 f' Z    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ ?0 [+ [1 [- X% t8 d" N
; J  I9 D7 f# Q' ~
    softreset# W$ F0 t2 h6 o! i" C
    游戏重启, 但不重新载入ROM
0 a+ c2 u8 W. |+ m4 I5 M
9 D6 I( U9 m1 p$ p4 p6 i  S& O    hardreset& d$ [1 o+ @3 V. A5 v
    游戏重启, 且重新载入ROM
* z. P& ]: I& W- s: E, ]$ p, ]6 j$ H1 E% Y
    snap xxx.png
- I3 R/ c' B" ?/ A    截图为xxx.png: @# W* `$ W5 K( f
% M8 b% r( M, E* i* T$ Y. G
  
$ n4 O. g4 o; H0 @; a  
4 m) j$ b6 _1 w8 d& B* }  g* ?% D  
, _. ]2 B& c* u  f9 i5 q1 c热键:
8 q. P) M+ z3 V: C* R! g    ~ 中断游戏& A# q5 C' L0 Q: b& B1 c
    F5 运行游戏
, S2 y1 E# M) Q# G* g# P    F12 运行游戏且隐藏调试窗口9 k' {2 Z) @: A: n! t7 ^. G
    F11 步入, 单步执行, 会进入子程序
7 y7 g6 T0 p1 s3 W# e) E" p    F10 步过, 单步执行, 不会进入子程序! v# R4 C+ a8 k( U& N0 |9 z9 {
    Shift+F11 执行到子程序返回9 a1 i$ N4 L( d
    Ctrl+M 内存浏览窗口& U6 K0 e7 U; d! j" E/ M
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 j6 g1 L1 U9 [0 w% q. R5 m6 d/ [# U
) L2 b6 q# Y! a, g{:4_94:} : J) X7 k- T6 ?* @6 N: i

* s/ I4 F/ Y, `

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
. \* V8 k" }6 v" v% w
/ d; O9 y# ?7 U0 l$ N0 yPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
4 r! Q( j1 T/ M2 I4 Q; q* ?1 a7 I11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-12 16:27

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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