EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
0 r6 G- B% [1 Z8 H
很快速的整理我自己常用的指令
: z4 j* e$ \) h
- x4 B1 w; o2 j4 d; s, E{:4_112:}
  k" I, S5 H7 K
" w) |) H. P% a4 V. Y  CMAME DEBUG常用指令( Y' s! s: g" k$ T  o; v$ m

- F% B4 j- e: m1 F1 ?内存搜寻: ci, cn, cl
1 g% p: w5 e% _' g0 x8 v! l) K$ k9 E# b6 _* ~
    ci
$ W) N8 a0 e7 G( l4 ?    搜寻任务初始化, 每次搜寻一开始一定要输入这指令  a3 _$ R+ z. L4 C8 C5 s" U7 ?

) E- |' _, x  v3 Z8 n    cn
0 z- o3 v6 m( h+ x) ~. n" X    搜寻指令/ r5 t9 I4 @' L5 O" v) m( T: D& O
    例子:# \+ u+ w7 B/ l) x# j( r, m, T' @; w
    cn eq,60
  b( p1 W7 M# c    搜寻目标等于60 (十六进制)- p. M! j$ t. j( \7 `3 R: M7 Y& t
        
4 v: i7 N! a0 {    cn eq,#963 e$ O7 }1 o2 a+ N- K8 U
    搜寻目标等于96 (十进制)
  y- Q1 u1 I9 l, D* @) q% h: x1 b7 ]  ~2 S3 t
    cn eq
2 ?; y! f/ O, `6 W7 y  \, Z% i5 L    搜寻目标的数值没有变化: Q7 n+ b$ ]8 Y- I1 N

) c% O% U: a" K1 ]$ ^  O  O    cn ne" e& {! _  Y6 M( ?9 b& g( b
    搜寻目标的数值有变化
8 F5 Q' K) R9 q" ?        
, ^8 ^1 k* X4 V2 v, g  u    cn +
5 @; n; q- [+ B9 s" P$ f  d    搜寻目标的数值增加
' C1 p" X1 ~( w$ [; p  \   
. ^( |4 {) a& C* c    cn -
' R. V7 B  \2 U! I1 V    搜寻目标的数值减少3 O: `& _1 X9 W) J7 p
        * q4 G: s. h- I2 _
    cn +,35 Q! _4 e% u8 F/ N
    搜寻目标的数值增加3 (十六进制)
; f9 `# Y$ k, r2 H
! n( ?; e- H% E4 _" B3 @/ X    cl
+ o; Q2 D  I, c2 @    列出所有搜寻结果% G- y& c' g0 \8 o- `6 d5 A

5 c" x* @5 \* w2 `) C  ?    cl xxx.txt) V( w4 W1 C. s' E$ w8 y8 d! d
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" Q1 z: q$ m2 B+ c# a8 _

4 {; j  Y- D: L. M# m   
2 s( P/ r+ q$ U2 H9 S2 K$ m3 v; \" H内存监视点指令: wp, wplist, wpclear& `: U& F/ L) b9 Z& S1 X0 [
    例子:
. R3 x0 z4 {& j& s, ]    wp 1234,1,r1 K; D0 r0 B: [& Z8 P. ~
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1# N# S/ ?- p$ n$ F$ l
" V9 k0 R0 C! K  }" m# j' X3 m
    wp 1234,2,w; v2 \9 b& u" e' F: w
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
: P4 ]+ O5 @, ?2 J: V8 ^. L     & ~5 Q- E1 g9 s: @- M/ C
    wp 1234,6,rw
( o0 ^  e* ^* e; F      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* A# {5 W1 {! M( J: ^: ^4 }
; V, \& e) [1 G) ^0 I. S! v
    wp 23456,a,w,wpdata == 1
5 @( p. f' B1 q9 S      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
; R  {& k. y! S2 h5 ^6 D, W$ g/ G5 q( p0 \  c
    wplist- X+ B" a. B+ z& E& s$ O& i
      列出所有监视点
4 p. r, r# C5 H5 K. X
8 S% K9 q5 m; ]* C# k. [5 D' @0 V    wpclear 3
  L9 Z) [, N" t' n2 U, d& _      删除编号3的监视点( O2 ]8 g* T+ G4 Y  N7 ?# ]( t

+ r& D% N, }6 j# _& E3 T! x2 X    wpclear3 W3 y. L  y) Z1 ?) W
      删除所有监视点
9 Q1 a# s* o: V$ ?  |& }6 {/ _- F& @  O
      
+ h) ^  }- K7 C# v! S3 W6 ^# D8 |( o* a6 e6 N3 Y0 t* t) R
程序断点指令: bp, bplist, bpclear
  y: k- h0 b0 z    例子:
" @/ Q  X' N1 q$ ?3 {    bp 1234. ~) E  R5 E0 d6 q6 E
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
( C3 j! x/ _) K; z1 M: A
  g( @# H8 N0 F    bp 23456,a0 == 0 && a1 == 0
  ^% i& f1 C1 y3 s/ t& v      在地址23456下断, 且中断条件为a0等于0以及a1等于0
+ e: ]6 N* a4 z8 X
; G* R1 p0 U# o" q. P    bplist
1 L$ o9 N2 A3 ~; U4 |' ?( @      列出所有断点# g8 `3 E7 }" M
( L( S/ V, o: W/ Z3 \: G
    bpclear 3
2 M/ q* x: I5 S; i      删除编号3的断点
0 j( M4 R. W# C  \" c, @
9 J$ F; j' Q' l    bpclear
( S9 |5 ~9 q' N6 d: l% n      删除所有断点# h1 Z" b1 I0 q: c
# D6 B1 I& J& S; @; T! h% F
      
9 F7 [7 X: W+ V" R- o; E      
) z1 r- H% K. \4 J, |1 B* |跟蹤紀錄指令: trace
6 h9 O3 k0 m; g. ~8 J8 u* K% }    例子:2 ^2 i1 w0 `0 }
    trace 01.txt
  J9 m- E) d6 D% p, F! b    跟踪当前CPU运行的所有代码, 输出至文件01.txt
( B  F/ P+ Q: Z
; J% u% M' a/ b% ^    trace off, d( f% c1 c2 G- |
    停止跟踪, 并且关闭文件
4 h3 ]  \* I  f/ b
; c$ I. c+ Q" \: w! b    trace 01.txt,0, S0 @+ r4 Q% W- J4 b! y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
. ]$ `% A. U- f9 s. ~
- Q+ L3 V( y# i' [9 S+ H    trace off,0
7 G  D) b( M: i( D    停止跟踪编号为0的CPU, 并且关闭文件2 v1 A& K* P" J3 E* D
2 @0 B) T( m& b( a* E2 L" U
    trace 01.txt,0,{tracelog "A=%02X ",a}& V& W/ @! `! ~1 L( Y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
3 C$ R6 S2 x# I& d    并且在每一行的前面, 写上"A=a "
5 K, e& j; M/ q$ }    "A=%02X ",a为一个C语言printf函数常用的输出格式! n$ _. D7 y- M/ Y) w
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 O5 b$ D! r% Z' ~' {    X表示为大写十六进制数) m; k; j: t$ B+ y# v* [8 y
0 Z" t. B  v" V' Z
: a; t/ A% z2 _4 V+ K/ S6 l; F$ ^, C

' s' k' n4 S8 `0 k# H! s内存直接写入指令: maincpu
! _. q% H$ \% W5 j8 Z2 j    格式为 maincpu.[][]@地址=数据
" ~5 Q& U; I4 t1 D" ^. p; P% y% s    第一个[]:# d6 M- a) V/ k# T. |, m0 [
    o 表示ROM地址1 e7 |8 q3 h4 G! z4 U8 ], t
    p 表示RAM地址
4 R( G6 D* I( U* M0 [
: O: J: }. r" a2 q) l) I    第二个[]:, s: x& D: ~8 H# f! i6 T3 R( c
    d 表示4字节
+ i% }* F, a7 C6 S  m% f. e4 Z3 d8 L    w 表示2字节& ~& \2 P7 i5 I
    b 表示1字节  {2 E% W. s$ ~" W: u* h6 v

3 \. T6 n$ U/ Q+ M5 ~    例子:8 w1 R% A4 g( e9 ]
    maincpu.ob@1234=FF
% O, C# k* ^8 d+ O    在ROM地址1234处, 写入FF一个字节
7 K: g+ P' s7 [/ g3 a9 S4 k; }% Z& d& c
    maincpu.ow@1234=4E71& V: @6 T) @* n( J' k( F+ i, S
    在ROM地址1234处, 写入4E 71两个字节
3 z6 A+ i$ o% N% T0 j% v/ T* L
3 c- R# R+ z) c: y0 k$ C6 s5 Q1 [2 X& l    maincpu.od@1234=600A4E710 T3 m: O& H- X) ~& T7 n- S
    在ROM地址1234处, 写入60 0A 4E 71四个字节1 `1 K1 |% q5 G4 c, a

" n3 a6 N$ J+ }7 h" R    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
: p' V" F& V9 e" B   
; T, j+ z( b2 V2 M" y; Z& k5 e% d2 q
其他:8 V9 E& L2 g5 D$ c0 x3 _7 Q. Q6 }
    dasm 输出档案名,地址,长度
% S0 T8 s% }0 ^1 A1 ?5 ?! g    输出程序的反汇编代码8 o7 ?, ~% z+ y
    例子:
& ?1 w2 P. g0 g2 j! R0 e    dasm 01.txt,0,100000
1 a! H0 w8 G6 Z    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 D# Y% l2 ~/ b# b$ Y  r. _) t: E4 F. _& a" X6 P2 ^5 J) F" j+ e
    softreset
9 E( q/ t7 k7 O6 j" e: L    游戏重启, 但不重新载入ROM
" X1 M* G) M' R8 u  a' L" ~4 A1 [, w" c& D) U8 g. q3 m2 V
    hardreset
8 t. \" X! J& a) o    游戏重启, 且重新载入ROM* L: s$ T7 O& E- J+ D

4 r& e8 _+ E9 W8 p$ Z' b    snap xxx.png) J! ]6 |; ~* X1 ?4 P% p5 I
    截图为xxx.png
* Y6 O9 K% G6 [) Q0 ~+ x; F8 M" f0 p# M
  1 G  x3 v3 M/ ~/ H; g" @/ f5 C0 r8 S/ i
  
$ P8 A; m6 Q* k9 M- T- o) k& [" z  / S% u. b  c! u4 @
热键:
) R  \- n* `4 k  S6 Y1 a    ~ 中断游戏1 K" l. z: ^! ?( I, i
    F5 运行游戏
6 i; g( T* Y1 C+ [* C. n1 i4 J    F12 运行游戏且隐藏调试窗口  c: Z3 P- r4 @9 T! j
    F11 步入, 单步执行, 会进入子程序
' M2 d6 A- k4 t$ H' M    F10 步过, 单步执行, 不会进入子程序% G3 I2 B" h4 H3 T
    Shift+F11 执行到子程序返回
  a$ A, q* K; f7 w2 ?% Z! D$ i1 M    Ctrl+M 内存浏览窗口
- o) `1 g% X1 c6 |$ o    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* Y% O  [8 t) F) M" M
! w4 \2 h" d8 Q' }$ r{:4_94:}
& {# \) W" a: |: N: g! M) h* h/ T1 v) P- N

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
: F, P" P" N: H( U, J8 B% c" |0 w
- L1 Y  H. v# c1 T7 oPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 N% N3 k7 u6 X
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-5 09:13 , Processed in 1.083985 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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