EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

) t: H7 L0 T3 m+ P% \$ ~9 j) |4 w很快速的整理我自己常用的指令# [* ^6 @+ i9 D
4 B3 s2 e2 a' N2 Y; c2 [- i
{:4_112:} & O5 I2 f/ u- D9 F9 L+ X5 Z

$ {6 i" H; [  V. e) y- \  UMAME DEBUG常用指令
% o4 F/ c6 {! _3 u& p9 {" u& X" F3 r$ r( ?, M
内存搜寻: ci, cn, cl
2 m  P  r9 ]. a3 w
3 E& U, `/ N2 B# s# n7 a    ci8 J. }0 @; Z* I# w; T  x' g( b) k+ Z
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
: j' G, q2 A/ f0 ^3 @( N1 U1 H, w1 G& O! N
    cn) }# X' {( ~6 X9 g. i) \0 t4 |9 I
    搜寻指令0 d. c& G9 d* U
    例子:
* \0 Y$ n- p$ T" b% f  n+ o8 o. C    cn eq,60
3 Y& F9 _! V. l$ A: m" m$ E    搜寻目标等于60 (十六进制)
2 n5 i  F. d! T+ N3 j        + v( {% |9 X# Y; Q, j4 w
    cn eq,#96
1 V& a* a1 r/ v' {+ |6 z    搜寻目标等于96 (十进制)
7 r4 I$ z8 U! [8 w" X; I( x9 o% u2 S
    cn eq
' }, Z8 F5 ?) D0 s( T    搜寻目标的数值没有变化$ o; q& i3 p+ z9 U
5 q# f4 v1 p" e( I* g
    cn ne
6 m) h3 {4 j  n2 N1 Q$ I( x9 l    搜寻目标的数值有变化- f$ d) V1 N9 O2 p
        4 R! C7 i" d' F; ^7 h/ B8 T
    cn +
; Q" q* X  x) d: ^$ ~" _9 ?" L    搜寻目标的数值增加' ]$ Q9 i' e  E  \4 g' Y0 z* c
   
$ g: }% w/ A7 l: Q! k1 v9 j    cn -# j3 @" ^) }$ x. H9 D) Q8 i% M- k- {
    搜寻目标的数值减少
; Z2 ^0 L1 c- ]6 G7 H- |( w7 e        
9 M( x. Q' _: d4 u9 f8 I/ e$ X; I    cn +,32 u8 j! t0 [1 Q# i/ v# N' V2 b
    搜寻目标的数值增加3 (十六进制)& s( \5 ?! h$ A2 F: R
5 I. T3 P- w* w- @; s9 R/ \
    cl' P" `+ N: W/ E0 q% W( |, c
    列出所有搜寻结果
7 P7 W" w' J; `0 S& {5 b
% n$ t9 W0 x; C# G3 K    cl xxx.txt1 W& ]7 i' D5 \5 D  n, H
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, e% d" O: ?+ g4 r) }1 F/ K/ w# `0 d# g
   
. q" m% |/ N. Z' q% R内存监视点指令: wp, wplist, wpclear
) r0 H0 o* f0 ^4 D5 t- o    例子:
. n& o5 a$ t' N0 Y! r5 L- Z) W& d    wp 1234,1,r
/ V4 T* r4 _2 [$ u9 @      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
, Z3 ]6 X2 d) H" B% P3 U" {& L
3 t( r$ B+ S5 I9 a/ d( J4 B    wp 1234,2,w
2 v) l& ~8 c; |: ^# N      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 v1 n! R. p! [. _. p6 x0 G$ f     
: N; G  T' Q& K: Y1 K( }8 v. d    wp 1234,6,rw
: s* i$ u+ V3 `# e1 Y4 }      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( P, @8 E2 [8 q+ v
. a2 ], U! \3 X0 b6 o1 E
    wp 23456,a,w,wpdata == 1
% }+ p+ V1 |. \! M/ U# Z$ S; c8 O      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
; u! F$ ]4 X9 U3 ~# ?4 E, c, X5 \5 P* ]
    wplist
# V4 W$ o) l5 f4 e" y      列出所有监视点
* i" J. t( z3 b3 v# h
" j- J; K/ w' f    wpclear 3/ a2 }/ }' A3 I7 n
      删除编号3的监视点9 @  _% [6 S( t
6 R, ^* I: ]1 `: K/ H- U9 P
    wpclear. x, j/ {: W) M8 Z# g
      删除所有监视点5 n( m: K- R3 a; }5 j2 i
$ x+ e1 p/ j4 ^/ U2 A
      
$ a5 H1 l/ v+ u4 b1 t* x0 }2 s. \/ [: `
程序断点指令: bp, bplist, bpclear
# e% [1 t# k/ S; ?/ R    例子:' _. z9 i* {: @4 j0 |' C5 v1 J* H& Q" n
    bp 1234
# B# W. Q. A5 W  L5 x& X      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断# E5 s0 F0 h( ^' \

' g" @" x% F/ Y3 q2 ?+ b- \    bp 23456,a0 == 0 && a1 == 0
4 e8 X$ ^1 H: z6 F      在地址23456下断, 且中断条件为a0等于0以及a1等于0- j) p% U# g# X" j2 }7 I' x
  Z5 w0 v, }& d: r  C
    bplist! Q! p" t. Q3 D+ v' I5 D% r
      列出所有断点; F8 q6 Q3 }' u! z: R$ E
! c$ q5 `* ~6 H' _0 X6 D
    bpclear 3
* J6 c* @5 I" t" }      删除编号3的断点% n0 Q$ Z8 v7 @+ E+ E
3 H- ?' S! b, T; h9 D3 ~* ~
    bpclear
1 V( P% t4 w7 s3 T      删除所有断点$ R* @" W& c6 q

1 x' s  B( j7 m; ~* `6 V      
8 [+ v- Z5 d* ?1 r$ c      
: r$ D& @( N0 B$ w8 Z+ K, q跟蹤紀錄指令: trace# V  E5 Z1 M$ q3 C  h' X/ c
    例子:
( D- J% b6 H! Q    trace 01.txt
' ~+ @) Z- L" T" p7 T2 t* F7 a    跟踪当前CPU运行的所有代码, 输出至文件01.txt/ r2 u. @2 N& c2 o0 l
" c- q- F8 i" N. i: S
    trace off) Y# C# `# ^' k) L
    停止跟踪, 并且关闭文件
& W: C" s+ t0 D/ D/ H
  B) O2 M6 U9 S9 y, K) I    trace 01.txt,02 `8 ]. w: I' z  p
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt( E' ~3 R7 l5 Z7 f+ F! y
( P* B$ M1 x. G2 @
    trace off,0
; c$ ^( j. U; a1 `% q6 G, D    停止跟踪编号为0的CPU, 并且关闭文件8 J& Y: l: R7 Z

2 o$ s5 e& I9 A8 Z0 B: S    trace 01.txt,0,{tracelog "A=%02X ",a}
) j' v0 Z5 Y  E- F# @/ [    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 U/ ]" n$ w; `; O* s9 k    并且在每一行的前面, 写上"A=a "( |. p' {8 D  _: w3 G# ?
    "A=%02X ",a为一个C语言printf函数常用的输出格式% i: g$ S) Y: P' \0 a( s7 G; b
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入0 K4 @! D3 e" B
    X表示为大写十六进制数7 X$ w  P7 n# J* R/ K, O
* L* ]! c. b+ i7 \

& D# ^# J5 n+ b! W9 [2 d3 A; j2 X& j" M5 G
内存直接写入指令: maincpu5 @# _3 t5 S9 r( e
    格式为 maincpu.[][]@地址=数据. p7 t+ h+ S! v$ R
    第一个[]:
- I" b4 H! z6 V7 M7 R, W    o 表示ROM地址
$ _& k$ o' I5 \3 ~* I    p 表示RAM地址
) q: f- A$ K! ~) u4 \1 }0 w" L, x2 M
    第二个[]:
" Z- l/ {6 @' m, T! [; m- f    d 表示4字节, N, y- l0 w( S3 b: d$ A4 k
    w 表示2字节
" @) d+ a9 w9 s9 Q9 {    b 表示1字节
- h7 y5 t; m6 Q$ V! G8 C, ]% I! Q9 M; G) R. N
    例子:1 p/ r& ]% {  R
    maincpu.ob@1234=FF
: t! u1 Y0 G+ h4 q, d    在ROM地址1234处, 写入FF一个字节7 Y: x' J' T; x# D% ]  l

* I  U7 Y" o; Q. Z, G    maincpu.ow@1234=4E71( ]- C# ^; @/ W. |7 S+ l1 l2 w4 Q
    在ROM地址1234处, 写入4E 71两个字节
3 i" `% w. S9 x4 Z, o3 k$ y% B1 I  O7 L& C: j$ b( q( j0 `/ B
    maincpu.od@1234=600A4E71
' l: ~( E" B" @0 B: A, [    在ROM地址1234处, 写入60 0A 4E 71四个字节
- y1 y+ J0 ~1 g. o' H9 e& c8 W) g* D6 c2 g6 f% k
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 f0 P8 P& d/ m+ D/ z! q3 m  N    ; j, B0 L1 c/ M8 H* v
1 C% ^' g/ d* r5 Y
其他:. r' W5 z; k9 F  _. t
    dasm 输出档案名,地址,长度( k) x' Q3 {/ j: o8 `  P
    输出程序的反汇编代码7 |6 k: G- G! p& L3 x1 z
    例子:
6 }3 @# I$ n( T# J, I) ?) ~    dasm 01.txt,0,100000
& j" L" j- F1 D$ K' s: f    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 H+ D7 \% H6 j' z6 d: M

+ }. a! H1 l; O6 d5 s1 ?    softreset
! {- j) s, Q7 Z6 k: X( Y$ L0 ~    游戏重启, 但不重新载入ROM
- k# d! f/ d9 q' a# W6 N
! p+ F7 T- Q' V, p" N/ t    hardreset
1 y3 S7 Q; [% m( P8 y! O0 G4 J# `    游戏重启, 且重新载入ROM: }2 d) x1 t4 i1 r* `/ C0 _
: w9 u/ k- j5 ^$ z, @% ~
    snap xxx.png
" l6 {! N  U9 c2 I# N6 ?. O    截图为xxx.png# [. G7 Q1 k. p1 I# Z+ T$ v  d, \7 W
3 L! l5 v; @) _4 c
  
5 ]- P+ g+ ^3 D4 D6 `% g  
! j, P, O9 J3 P6 B2 {  
) c) k' U# m  a! S" _% y热键:
9 y* ?  P# Z2 n2 n8 a    ~ 中断游戏
$ M$ w) l4 U$ W$ j, x    F5 运行游戏; |' i  H5 V3 n2 O- k# a  _# u
    F12 运行游戏且隐藏调试窗口) W* P$ T7 \& G
    F11 步入, 单步执行, 会进入子程序) z) ~9 g  }3 q& d$ I7 O
    F10 步过, 单步执行, 不会进入子程序
. m# M( ~2 Z- e. {3 E    Shift+F11 执行到子程序返回
* e3 c# W% g% |( M& x! C0 w: L: g    Ctrl+M 内存浏览窗口; |7 n4 ]# E( ~9 z
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU1 C- s+ G1 Z, |
( u2 O+ D0 _' ]3 @! I9 O
{:4_94:} 6 a$ F8 Q( d1 p; q( x% v
6 x/ D8 \4 A2 J# B* i. v3 E* g( j. ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
3 _3 ]) @/ e) t! F8 C1 G' y7 u) W2 y: \$ ]  D# N" b$ A
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 | 显示全部楼层
要详细些的东东
2 c, o1 m7 S) i6 v% e( M" G11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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