EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
. n# V( v! k& W0 z1 a( f* i8 U
很快速的整理我自己常用的指令
5 E/ H' M( b* b- O5 ~( o4 i  M8 Z- U: ?9 @: w
{:4_112:} ) i5 O' u. x& R; L' {* t7 {

' h; |. n& W% b: P5 G; W6 {9 D6 _MAME DEBUG常用指令
6 _5 m8 [  ]) D2 @$ Y- d8 F; y
+ E: }' c; R) B内存搜寻: ci, cn, cl; a1 _$ `5 m1 B& T

2 G) B: B  c0 Q( L    ci
) _# C! z( X% c% N! k- X: Z    搜寻任务初始化, 每次搜寻一开始一定要输入这指令) L6 w( |6 f1 ]  _) k1 w

: x/ o& r' }( _. k4 [    cn
1 E1 B( `& ~* w+ D7 p- v2 t0 B1 e    搜寻指令
8 d9 m. V5 v6 o    例子:7 U. A2 G. a( H
    cn eq,60
. Y0 n- b) s! ^7 R5 o" e4 c8 Y    搜寻目标等于60 (十六进制)" h& R7 B+ M; G/ h+ W) A
        
/ a! D1 n8 l4 k3 U( h    cn eq,#964 ^. g$ P$ j& w9 I6 O/ k
    搜寻目标等于96 (十进制)) k8 o+ I5 M# P5 k

8 |" i$ B' Z# T/ ?& k2 I0 P- E9 S% x    cn eq
" h; w1 L& I% r( p$ [8 x    搜寻目标的数值没有变化
# Q0 D" W; b# b5 u. V) ~7 a
$ @3 ?, n- S  c" }7 w& w    cn ne
* @$ c8 p3 b0 o6 E: Q    搜寻目标的数值有变化: r1 J7 p, E% s- S/ W1 K+ ^2 c
        ) B6 U) E1 m3 O( d0 X- A& w
    cn +
( u8 s) |% s) r1 W- h" w    搜寻目标的数值增加; }7 X3 a6 d1 c* A9 E* q
    3 I4 B6 N2 J; K
    cn -
2 H' G, P6 }/ o* _    搜寻目标的数值减少
3 I4 |  x. k: ~4 o/ S        
- j- s! i5 |0 y+ S2 w    cn +,3
# A% q0 U5 R. k2 E+ y4 J; Q    搜寻目标的数值增加3 (十六进制)* v/ s0 b$ d4 m, m+ |/ w
0 ]" @( n# |" M# v
    cl% Z5 Y$ @. T' `) I- m% n
    列出所有搜寻结果
0 J% B1 n6 m- u! f- w% Z2 ?" i1 j- u8 Z1 v% c; D5 ?+ H- k1 `
    cl xxx.txt
# b+ a' F4 _8 ?/ W% G7 Y    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 t7 k& y  Z. d2 x9 Q
3 y" G' e" J3 J( j: z
   
3 }$ O# `$ S7 J/ F) ?% l" N内存监视点指令: wp, wplist, wpclear
; @: v$ S; J9 }; U    例子:2 \  K" ?( ^- r* o  j* M; K: W
    wp 1234,1,r
4 T9 H' x/ r6 y, ]5 }' K      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
) `  U$ d( R" P9 j
8 J( S9 }" c% |; e    wp 1234,2,w
/ ?) M7 v( K1 r4 S: Y      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2% J! |( {& g" E4 ~: A+ R* s
     
! T: D3 |1 z4 Q0 H- R3 |; E- q    wp 1234,6,rw" a* V5 a3 k" x9 ~7 \+ f% }2 b
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6, E4 L! O2 u$ L4 v7 h
5 B. P0 l: R+ D( L: d
    wp 23456,a,w,wpdata == 14 Q- C5 ?, u4 Y  Z
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 G6 [) J9 t7 q0 o9 ?, E
+ P4 l6 A% b' V8 g5 L/ L6 T! @
    wplist5 J* _( r8 F, Z  S4 o  J7 X( l
      列出所有监视点
. K& H3 i2 p( ^# D' c9 P4 L# u/ G3 ^/ ?7 p* Z
    wpclear 3
& G2 Y7 r1 d- B) N! m6 q      删除编号3的监视点
& J; o. Y5 p0 n* X
: J, l3 _3 ^8 k; N" i8 X2 d    wpclear* T! `# U8 e* m* s7 F0 g6 G# m. Y" D4 o
      删除所有监视点
' ^, v4 ^% W- H! D" \, n5 X) U' N* W' e5 X) p# v. n1 W
      
. f6 x0 [! H$ \- @- O. e7 x, \
程序断点指令: bp, bplist, bpclear
$ d. S; ?( W2 G& X    例子:* o) |: {1 \7 [3 D/ R- ]
    bp 1234( N- ]: A6 `5 Z8 U9 f
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% c" b2 W4 P& f/ l6 _

6 H& n1 S! P5 T    bp 23456,a0 == 0 && a1 == 0
, @: ^9 m; h5 f      在地址23456下断, 且中断条件为a0等于0以及a1等于0
) z3 N$ x1 J! F& q9 r/ @: C4 x9 I; A  K7 X7 e  w
    bplist2 `; Y; r% c$ U) ?* v
      列出所有断点2 {& y3 E2 D1 Y9 N3 V3 u

6 ]# H7 x+ {* w( e$ t& P6 Z" Z9 Q  ~    bpclear 3
- g. g# z: V# [3 |      删除编号3的断点' F3 q: M: E5 {6 p( Q5 ~: C

! `2 C1 x$ e& s/ L    bpclear8 [4 S# A8 w! W7 y+ a
      删除所有断点; M! o# X3 `" a* U$ n

' ]5 S9 w' W3 w  ]& D8 k      
; @7 i" E' `$ y( O0 b$ t9 u      2 U4 i, t. F8 \. ?
跟蹤紀錄指令: trace, e' i& `9 s! k3 @9 ~
    例子:4 w9 ]9 O- |) t( p9 I6 v. y9 N. Z
    trace 01.txt
2 m; b/ Z. d9 e; l5 f    跟踪当前CPU运行的所有代码, 输出至文件01.txt
; Y5 B7 K. e( N3 {) \; P+ Z7 \5 S" H
7 d0 A6 y6 y6 X: i3 M+ z. M    trace off
& ?) b' @9 u8 y3 i: g    停止跟踪, 并且关闭文件5 v( S7 ]3 y" L* Y

$ _: n' v9 {. y) M5 Y    trace 01.txt,07 C( K& T( t: o1 T" Z
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 _' l& K( C9 U  f7 {2 m1 x" R( O  @
    trace off,0
1 ^) i: B* J# @$ i% d    停止跟踪编号为0的CPU, 并且关闭文件: j* b& V2 y1 D  v4 F+ T1 L
, A) ?0 J1 y3 r# z
    trace 01.txt,0,{tracelog "A=%02X ",a}8 {% j% y" ?2 v$ b0 J  M
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 6 c& b5 V+ Y% P$ I! w' h  X
    并且在每一行的前面, 写上"A=a "+ U, z7 W+ P4 v
    "A=%02X ",a为一个C语言printf函数常用的输出格式8 r, g' T8 B( X( k
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入" S1 Q# }& @& K+ A' ]
    X表示为大写十六进制数* W' e8 g- s1 N% R, ]

. e5 @; C* q; c& i
0 {9 `. Q- q: R# l3 o1 _$ X% H; g8 g' n8 s3 z$ A- }8 L% N+ h
内存直接写入指令: maincpu3 ?, [9 E6 {- j" E6 }4 k/ n
    格式为 maincpu.[][]@地址=数据: b( U1 S% Q5 ?7 L' |
    第一个[]:; w% h2 A! x3 r
    o 表示ROM地址
8 {# r( K3 o& ^7 b" l) x% }    p 表示RAM地址7 I' k- o' `# D" a

, C1 R: Y7 e% H0 P" G8 H1 k1 ?    第二个[]:% |6 S0 \2 v3 |
    d 表示4字节
* t7 \8 ~$ }8 W! g0 u    w 表示2字节% ?" H% Y* e3 l
    b 表示1字节
8 k% \6 n! P6 S3 C* z% [/ Y# \, u
    例子:
( a- h4 t" k* _" f- n, S    maincpu.ob@1234=FF
  {6 X3 M6 M0 ^$ }% H8 k5 q    在ROM地址1234处, 写入FF一个字节
4 y' `% t0 r8 l9 b
) Q0 W- M4 v# X; q0 Q1 J$ D. y4 ~3 q    maincpu.ow@1234=4E716 {4 M8 e" L, U) M5 {
    在ROM地址1234处, 写入4E 71两个字节; T5 x2 i2 n! W! O" O

- o, @% J1 K( c    maincpu.od@1234=600A4E711 x' ~+ u6 V, V- `9 a2 O* ?( S
    在ROM地址1234处, 写入60 0A 4E 71四个字节% L! ^. N3 a% u& l" Q
  U8 Y% h! G8 C9 E0 F
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. ^9 D% \5 a# c0 [   
; x4 {4 J+ |4 a2 A
$ q2 `$ c2 ?8 d8 G6 {! s; @其他:
' H7 X0 d1 p0 C4 o! @' d5 e0 G: Q    dasm 输出档案名,地址,长度
# B6 s- x+ ?1 w4 Q2 G3 y4 H    输出程序的反汇编代码: n+ R3 i$ R/ {/ ]
    例子:9 n: [, ^% F# R. n! M- Z0 y
    dasm 01.txt,0,100000% ?3 B0 W7 M4 t6 R1 |9 T
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: t1 }' P8 K4 d; |. t! g0 b) r
    softreset
6 g+ M% x2 G( [! t    游戏重启, 但不重新载入ROM
/ j9 y# F5 C, w  Z4 c0 g( s$ E) d4 a" K% F5 }) r/ b4 K
    hardreset
; u; B( }. M. z    游戏重启, 且重新载入ROM
" S% ^9 U. d& S" M; v' y0 g
. p2 D. ?5 V1 F    snap xxx.png7 \4 @4 s8 \. v
    截图为xxx.png
* j; F4 U( W$ I4 k# {* w
4 o" x- B  w* c1 t! P- w/ g  
: \! x4 Y$ H6 q0 ]( V" R  
# Z/ w  X: V3 c3 b  
% f9 S; o& T, \8 u+ s热键:6 z4 X, i: |7 K! S, j( b6 f
    ~ 中断游戏
( r) d2 P# W0 P    F5 运行游戏- @, b2 ]" ?6 e2 E  c
    F12 运行游戏且隐藏调试窗口' l- i8 n. q; u" C! U* I  t5 N
    F11 步入, 单步执行, 会进入子程序
; ?! ^: R9 q; _6 @. y' a    F10 步过, 单步执行, 不会进入子程序
( Y6 S7 n1 U( }& a! a- B    Shift+F11 执行到子程序返回
  O5 B8 h3 j! ~. |3 u    Ctrl+M 内存浏览窗口
, w, w& q* A0 D) R! N  o    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ \) J1 g4 n$ O! [7 f( e
, C9 Q6 B# Z+ Y6 O5 P0 Z4 r* i{:4_94:} * \8 M, h9 q  r8 d

* I) W7 F3 ]; u0 c) j$ q8 Z5 Y

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2589 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
3 f& d. u( I7 g9 u0 Z, p, n6 `9 M* q  y% ~
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 | 显示全部楼层
要详细些的东东4 g5 b7 ~/ z. e# d0 Q* Z
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-18 06:29 , Processed in 1.097656 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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