EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
7 `( P5 X) A, V; p. m- w
很快速的整理我自己常用的指令
$ E+ J0 \/ s: O
7 l* j) _) F/ D2 c2 m  t, D{:4_112:}
9 f* ~% U4 E- \  w7 D5 T9 Y% g2 V- M6 e3 E3 x- J' ]. I
MAME DEBUG常用指令3 L, l. P8 |* F7 w( |* E1 m3 |

! E) `, f# G/ F  `5 |内存搜寻: ci, cn, cl" k  L3 f; u! }$ h$ f
7 ~4 J! c/ @! i4 U3 r1 ]
    ci. x% C. I. ~! N
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令" `: P% h& C$ S, f4 K' R
* l% O& G3 j. C( W: x8 s
    cn
' m+ O& g: {; m: F    搜寻指令
; i4 F. S  o+ p1 r2 n    例子:
& e- I% T6 ~- s8 l" u% B    cn eq,60
) m4 ~4 r7 y+ t0 w- z* d    搜寻目标等于60 (十六进制)
# Y, R* m' a# @' F        9 h) L% h2 T( @9 B5 \9 C0 [1 G, E
    cn eq,#96, s$ B* ~) B2 X/ x4 e+ f
    搜寻目标等于96 (十进制)7 @& K9 M6 Y1 n" N+ q; F6 e

8 k! a8 j9 u% h    cn eq
$ l: M: J6 A5 X" H* E/ I) k0 l    搜寻目标的数值没有变化
' A7 ?6 K7 s( V7 |- o' j3 g
7 l: b) C0 ?4 i) W9 B. f: G, @    cn ne; l9 T8 j$ g7 O- j  S
    搜寻目标的数值有变化
' W! D3 w* z2 b0 K4 [        ' i/ b! s  N6 d5 W4 U
    cn +5 s) [$ h/ l# i# K8 R1 J! a- D
    搜寻目标的数值增加, w4 j! Z0 G6 ^% E3 v
    " i9 o) q7 F9 N& c2 v
    cn -
: f# B! |2 L6 |' O8 ~' q" }    搜寻目标的数值减少2 S) O$ \! [0 X5 n, x
        
' B, X+ {. z3 j9 F    cn +,3* d1 V3 o( X! p! }" l
    搜寻目标的数值增加3 (十六进制)9 A; n) |+ b6 M" z1 ~; h

: G0 @; i9 j/ J% t) ?$ R    cl$ h% Z* i% ~' y$ B) J$ W
    列出所有搜寻结果/ g( ?+ W. l% ^8 w6 q- e

6 h% K; q# Q5 |# y. F7 |0 w3 ^    cl xxx.txt$ ?+ d2 h: W' d0 v1 Z, E
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 v$ Z9 D: K" j0 ?5 N9 a3 r
7 {0 a8 f# N# h# N$ }; I0 J
    $ j4 R& H, L/ X# d% l) r
内存监视点指令: wp, wplist, wpclear
, r6 h0 P' `/ U4 I7 a    例子:/ f* v! @  l1 J# c5 Y
    wp 1234,1,r
( w! O) e4 l3 `1 O1 d/ v      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( s# _5 l0 g" t: B7 R

1 l5 x7 Y. j$ N5 a) _3 }. n    wp 1234,2,w6 ^; A' b$ V+ V& ?
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; }, F! D* X6 k  b9 [- ?7 w* S     , @! p" i" Q6 x! S0 g6 G
    wp 1234,6,rw
6 R1 f7 H" Q% ~* @" p      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6; C0 k" P2 q  a

, [  \- a1 F( A' c! b  S    wp 23456,a,w,wpdata == 1
" C9 P% A  e6 K7 S$ w      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
+ u2 o  d& ~. q5 B& o2 Q% h0 C7 h/ @+ b6 B
    wplist" t# M, a* G8 V; u9 m/ b& s
      列出所有监视点8 F& F$ ~% ?  E8 C% G3 m

, S5 X( a5 D7 s, P9 O% ?    wpclear 30 ^& T7 L3 S2 }, E( `9 l& G, d
      删除编号3的监视点! a/ t. W  P  C3 Z1 M3 W8 {: B

  H  k7 Q  q4 B3 }2 G9 V6 g    wpclear+ c# c, `) k, V3 g
      删除所有监视点; z$ v2 U6 y# b5 G& Q" |  c( }

3 W% f: s% s, E      
% h* q; O! f8 S; M: n9 P; W5 k" f
程序断点指令: bp, bplist, bpclear7 }. _* A* M5 @  X
    例子:$ I9 r( a. ^. b' J- A
    bp 1234$ c- m! v: h4 _: c* ^5 N
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& G; ~  v) |; M& x
  a0 a% e, z0 s$ H3 s+ @; O
    bp 23456,a0 == 0 && a1 == 0
/ t& ^/ K: T0 y$ Y      在地址23456下断, 且中断条件为a0等于0以及a1等于0" o, J4 A1 _$ o3 @

, P6 _) j" M6 ^9 S: [4 N; r6 U    bplist
: {& g& w% o0 c1 J" t. s; x7 ]      列出所有断点
; G1 \! D( a/ C( P: n6 X7 o0 I6 T2 N8 t& n. \# h: o# {8 i
    bpclear 3
8 f( r) k* _. R7 x' a# m5 a4 k      删除编号3的断点3 c' I: u+ p8 f8 R8 n' M/ g
6 \" z; B0 L3 \" i# ^
    bpclear
) z! ?4 _9 @1 O$ {1 _; u9 I      删除所有断点) j$ o2 A- @. H2 h% q8 g3 D" ^3 K

( a: J& Q4 Z! V1 k1 R( P. ]" L; q      
0 m; s- w4 s4 [$ G: h# l6 b; v      ; z9 v( j+ R; v, i5 o
跟蹤紀錄指令: trace
4 [. E0 }( c+ o0 @    例子:: B& ^7 l8 h2 O% `6 M. v! c5 {
    trace 01.txt3 Y+ S/ R/ Z+ J/ ~# D( T
    跟踪当前CPU运行的所有代码, 输出至文件01.txt1 s" }2 B0 f/ N; d. }7 `. Z! N
5 i0 ^9 ]" K* J  b0 a! {/ P
    trace off
' Q4 ~: c5 I1 Z0 w    停止跟踪, 并且关闭文件4 g& u2 U4 P+ f6 W- ?

# D" q+ H+ o, w& S! z8 @6 O: W    trace 01.txt,0
  D2 ]7 i( ?( u. n    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! v: j( W+ e6 `- X8 ?! Z. X8 F
/ |, j9 z0 W  o8 y# K! t& }    trace off,0
" S" @& L0 a8 q8 z, J! n2 y    停止跟踪编号为0的CPU, 并且关闭文件, g2 f4 U) b# C, k! x7 M

# p' J' e+ k( g1 P8 j8 w4 h    trace 01.txt,0,{tracelog "A=%02X ",a}8 O# j! G& C" v) V! d8 d
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( N8 X  A8 `3 `+ Y
    并且在每一行的前面, 写上"A=a "- {8 k3 N* R! }
    "A=%02X ",a为一个C语言printf函数常用的输出格式
4 E2 Y4 L& @* A0 v% X! u8 l    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入. L% R- V- D. F7 N( i' m5 s' T
    X表示为大写十六进制数
' @# Z- v2 i, [  I5 Y' l# B) V5 ~$ Y; |+ h

9 ~8 V3 L2 e: F- F
" w0 D0 l/ v! e0 j3 H- u5 D内存直接写入指令: maincpu" v  M4 ]* C7 H1 x! V% ~
    格式为 maincpu.[][]@地址=数据- U2 O$ a" {. o, s- O
    第一个[]:
2 |! L* X1 s; I% P' n" b2 W    o 表示ROM地址# @2 j  f- I/ }; R& x
    p 表示RAM地址
- }. ~+ |8 l; ]5 m# |) ~5 ]% v' \5 U& J& z+ i
    第二个[]:
! ~/ E$ O2 ]% L+ |    d 表示4字节! ]4 i6 p. {+ x
    w 表示2字节* u" p- V! J5 H2 W+ U& H0 `" T( L
    b 表示1字节
% T7 r$ H! D# v( h; x; j. P8 w/ v# m# Z& L. m
    例子:
" J1 P) i" o/ v0 h, d* y" j- s    maincpu.ob@1234=FF
7 U5 Z& W+ z7 H  y  L; n    在ROM地址1234处, 写入FF一个字节
5 s$ t# j8 U, ~0 U7 s# P  ]& s8 t* ^. q7 u) f- s6 k
    maincpu.ow@1234=4E71
) p1 f, w. f/ t+ z4 {/ m8 D# h    在ROM地址1234处, 写入4E 71两个字节
6 ]' v+ d# X! B6 Z3 N/ r" t
0 a- j) p, l7 T9 l    maincpu.od@1234=600A4E71
; L; P. e" N% t) E0 A( X- e# Y    在ROM地址1234处, 写入60 0A 4E 71四个字节
& L' e! R( t5 ~" v7 J: W" e! W: O# {5 e
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
# ^4 F: _- J: Q0 d! J" Q! y   
0 F1 \) Y; j3 z7 w* _' j, T0 O8 s  a* F7 Y4 H  I
其他:" h& _: z9 D6 g
    dasm 输出档案名,地址,长度! u6 W4 o" J( B1 n: T
    输出程序的反汇编代码$ @% G$ ]% C: N8 |; _" \! ~1 m
    例子:9 ^2 Z6 x1 n8 {, i$ W9 `
    dasm 01.txt,0,100000
! [# B, X9 D8 B0 d    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 [4 a  v! C) p6 m! R

6 P, r' {+ |% g/ h, J: ?" }! b    softreset. h7 W$ O9 N2 Y# [# q. p/ x6 v" Q
    游戏重启, 但不重新载入ROM
+ r" @2 n1 @3 r) @' Q
$ v" G: y$ w$ p8 D2 L    hardreset1 _/ `+ l* k2 h# x% g/ M
    游戏重启, 且重新载入ROM
9 m! s5 n6 K9 ?* T" X# o' y* G6 K2 A1 P
    snap xxx.png
& G! w. Y& S" B9 j    截图为xxx.png
6 |$ w2 P# n7 x* P! S
, c5 z( s9 M% q7 ^! K: M  % `$ a% u' h2 T9 t. J  R' ?
  
  C* H; v- V, U% M5 B0 ^  : ]# f' P- C7 [  c' ]$ V
热键:
+ b3 S+ I: [2 U( @! P& O& s    ~ 中断游戏, ^4 Y0 Z8 P' i3 n. v: A" S3 s
    F5 运行游戏
; H) I0 S% d; x4 y- C. _  `" \( F    F12 运行游戏且隐藏调试窗口
# O2 o: n1 p% m) O# s, G    F11 步入, 单步执行, 会进入子程序
$ n; b  U& N5 @7 `4 G, e7 r    F10 步过, 单步执行, 不会进入子程序' |, A/ c* p( M8 [" T: s3 k( w
    Shift+F11 执行到子程序返回
/ F+ \1 B4 G, j    Ctrl+M 内存浏览窗口. R' Z) d; i( \! l7 n- P! B3 b5 ?
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, Z6 t( u* k  |9 j, `: H
. P2 g( q6 t) m$ }{:4_94:}
" X2 d* n4 d, k1 \4 b  D0 I# f. s8 ]0 r# u9 P0 E0 ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2532 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
( ?# B& _# `" t/ h9 ^, _0 a3 O, K8 S: d! X9 c: s
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 | 显示全部楼层
要详细些的东东
. q% f+ Q& Z  Q3 M' O( K$ i- v11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-11-19 14:39 , Processed in 1.082031 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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