EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

- c- C+ w: p; u很快速的整理我自己常用的指令
9 `, L& I' ^# A: p
8 k# c& }+ R$ F$ m* K* W{:4_112:} 2 {9 O" t- V# V8 c6 k5 s. }9 l. e9 V% q* t
. Z2 k9 A  Q% I+ B
MAME DEBUG常用指令
! j( q0 R' P2 t; x" d( j3 g0 I
$ H0 j& g$ |4 g$ e5 h! s: I% _内存搜寻: ci, cn, cl
" D- y2 p: P9 c0 Q% b# l' k2 o; X8 H
    ci. a  n( `6 }8 h/ O
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令) T: |4 K) _' Y4 q7 R6 e% L; [) K

, u$ p* u  B* `" K    cn
* ~7 R* v) x  |; S    搜寻指令( o/ `# @0 G* x+ m! L- y( k
    例子:
2 J/ r6 W8 E1 b' l" |, `    cn eq,60# m) X3 r% K% ]# F' S1 y2 W
    搜寻目标等于60 (十六进制)
, R1 u: s5 L0 _1 C8 s, J        
% N! l( n8 _9 T2 \: Q* m. Z. p0 q    cn eq,#96
. V8 _# f. ^2 e% f2 V/ ^    搜寻目标等于96 (十进制)! g/ |0 s! Y$ N7 R$ U
3 v- G8 B& G: P) Y
    cn eq8 v5 W9 G8 Q+ B9 P- Z
    搜寻目标的数值没有变化
3 i  x* r5 a$ }! z! b7 g
+ x7 g/ F2 S  s4 f$ R& f# t    cn ne
2 a7 b( A  R1 b" l9 p    搜寻目标的数值有变化" M; i& [9 k( \; t: Z1 [, ^2 D
        4 W% E% H5 J- L! s: ]
    cn +
/ o' i- N: t4 q- f& ?; D    搜寻目标的数值增加
7 y' B5 c, \9 b   
( g0 n$ ~7 T3 u* C: K    cn -
: S4 I3 S/ C+ `) {% Z2 J, t    搜寻目标的数值减少
9 ?" A' M$ O8 I/ W' A+ V        6 L' A) a2 p9 O# o0 T. ]
    cn +,3
1 J4 M. s9 N2 a    搜寻目标的数值增加3 (十六进制)2 K' U1 b# V7 C2 L
- u9 |7 R+ P3 v6 K5 {4 w
    cl
6 O. g; M: ?4 ]    列出所有搜寻结果
. K# p+ a! L* w2 F) ?6 K5 a2 C* V
6 T: F) P" @  X    cl xxx.txt
1 i( ]: A" R/ o; Z4 y. p    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
  U2 P! c3 e# [; `
9 e  R8 p, A0 r- l4 t    $ N: G- i$ n. p: ?7 p% c& n
内存监视点指令: wp, wplist, wpclear6 Z/ ^# A6 c. I) J) b6 k
    例子:
# Q: @, d' \" u* ?+ x    wp 1234,1,r, j( v5 I; j" d( s+ ]6 F9 [
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( R; ?/ T- a* S
( p  n2 d3 \  Q/ S+ x
    wp 1234,2,w+ R( p, B/ w5 y
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
" Z9 c  ~5 o/ u  b     $ V/ s9 I7 B9 |* J7 y7 S4 |
    wp 1234,6,rw
5 j, a, q4 N7 a8 w* x% B3 R' D( a      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 p. M  g. u1 U' V7 [6 O
, f) b5 i8 E& {5 C1 K, _4 B" b    wp 23456,a,w,wpdata == 1
6 ?- g! Q/ T) t/ W! @9 a8 \& v      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ z' p, X* Z8 `# [) S: h& I1 I
8 l7 C7 H! p  n. ?7 w* Q
    wplist8 m. `& k  L$ M+ F" ?! r
      列出所有监视点
' Q1 q7 g: n4 L; H6 w, q
# s  i8 e. L; \3 X; Y    wpclear 3
: s! J) E4 n$ H. a" Z) W- x  W      删除编号3的监视点; H% m2 Z% \! Z" l" [% Q
! v0 p( w$ S5 j5 ?8 k  E" N& `
    wpclear( X8 z. \% w* p5 @# |. K4 r
      删除所有监视点
# `4 f* _( q# d# p3 x( d8 d8 Z
/ o5 h# u: K" k' z      
; H0 V% Q/ j$ {6 i: s  E4 c$ z; V1 B* M4 T0 h- ^6 X8 v
程序断点指令: bp, bplist, bpclear
% h3 b7 x. W. q* [6 w5 w! B) r    例子:% a; ]5 \  g4 j* v
    bp 1234( I, H1 V/ h) [1 Y! ]  M  ?
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
' u; D0 w7 p! s0 Q" _) W; W5 f9 n9 F$ E# J6 l6 @
    bp 23456,a0 == 0 && a1 == 08 m) C% [' [0 P9 o) ?# D
      在地址23456下断, 且中断条件为a0等于0以及a1等于08 U% t+ G. i' P5 Q5 t

2 ~( V7 I0 X0 Y3 g* y- U7 C0 R    bplist
+ M8 l: U( Z/ k7 u      列出所有断点
* b7 C7 R2 L" S# x  O  H" t
' m- B. ]1 f6 T9 ?& y    bpclear 3
& a3 |  P" }* r* `2 B/ N4 v      删除编号3的断点
% K$ F" g2 v$ g( w6 r( [; u. W( a1 D  M, N
    bpclear
- l2 a, T1 v2 o+ x      删除所有断点
; A! ]' R) J$ `" m6 p3 }6 }) [& q* Q' ?
      
0 w6 Y  w8 g: n# I  d: H4 L! I% b      * B# j* t+ u' Q0 W8 @7 [. Y
跟蹤紀錄指令: trace2 S7 h9 \8 q5 B9 [$ r3 ^! }- }
    例子:2 h# p9 h9 t' U
    trace 01.txt- v) u, R+ L+ G; Y9 d' i! {2 r1 l
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
. l8 X' ^+ o( d. G. o
. f$ R- Q" M% I! q1 A    trace off6 y7 [+ \# ^0 q/ u: R1 _
    停止跟踪, 并且关闭文件/ ~5 M/ }) i) \  q2 m9 ^
7 B5 n% o! N6 i( A% x9 L; p
    trace 01.txt,0
) ]7 Q$ W% ~+ l* m" k    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& I2 f$ S5 C( U3 P% v' m; K

7 a! L- s: d9 H7 a' H7 E7 M    trace off,0' e9 x% D( Z  B6 Q5 h  T
    停止跟踪编号为0的CPU, 并且关闭文件* Q* p0 R& b4 e5 m8 U! x4 n

' j' c3 s+ Q! O$ A0 \- t    trace 01.txt,0,{tracelog "A=%02X ",a}+ p; ^4 Q. r1 X9 \% Z0 X" A
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 E! Q  D8 _  W5 N( e    并且在每一行的前面, 写上"A=a "
/ N8 B1 ]/ U6 Z3 L7 s    "A=%02X ",a为一个C语言printf函数常用的输出格式$ J" M5 T6 Q5 t5 t% K$ a
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入% O1 f! L% a3 i. p0 a
    X表示为大写十六进制数0 O  `9 i! O5 w4 w* S; D. ^# }" o

* B9 r; I9 U4 Z" c" J
# |3 v2 U3 E  H1 C! m# g% d3 Y# y$ a
内存直接写入指令: maincpu% _, G  j$ o( f% r9 U  m
    格式为 maincpu.[][]@地址=数据
% u9 n1 W& Q0 r& P% f9 y    第一个[]:
: I7 u" S) E3 Q0 P! `: t! i    o 表示ROM地址
0 h) K8 O0 @( w2 J) j    p 表示RAM地址
# h( I( V" U+ x) v; @; o
: ~: ^( Y6 k) U  ]; Q    第二个[]:
" s6 Q/ o: R( Z- Q" q7 v/ ~( }    d 表示4字节5 V2 r/ [( m3 @; }! b
    w 表示2字节
) J/ ^* l4 |! K) Q8 ?    b 表示1字节9 a% W% S  ~0 P! b! q' C

; W' k1 K2 q) v5 Q( L- \" A    例子:: \5 [8 ~3 }! [( h
    maincpu.ob@1234=FF! z/ o7 m  M" R& N: b
    在ROM地址1234处, 写入FF一个字节0 x4 m4 y3 ]! c+ M4 W
6 n8 o4 o9 w5 X* t% C4 I
    maincpu.ow@1234=4E71
  j* i0 x0 ]) u7 W4 C6 k    在ROM地址1234处, 写入4E 71两个字节
0 z3 r. u. p( B; d( P0 D
( s. L9 m# F' ?    maincpu.od@1234=600A4E71
3 `2 V: K8 K+ C+ c$ w( z. b* ^$ T    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ u+ \1 v( r# S# {+ K
: H  L4 Y( |% t; k    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写% C' `1 f& J4 u0 A; Y7 A
    - Q' P6 \1 `0 a) `" x; t
+ J( @5 d# t, v" {
其他:! c% l, L! ^! R3 K4 B- X
    dasm 输出档案名,地址,长度" M. E3 z; C& P) M
    输出程序的反汇编代码
- l2 u7 N8 l/ O* K3 ^6 p    例子:  y/ o6 c+ \# n6 k, P- O3 f
    dasm 01.txt,0,1000000 d0 E/ a( d  G. H' e. r$ w
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt' j* K9 J1 ~  T+ C; J: N
6 y: N! {8 D3 O" R$ t4 l' ~- i
    softreset1 @4 N( Z& G+ i7 S  T  F4 i- f" N
    游戏重启, 但不重新载入ROM2 a8 J+ ?: M6 H- n1 ^6 I
; p% h6 R+ o# S: h( M8 p$ d& w$ x
    hardreset
9 W  C2 v* c; R, _, |    游戏重启, 且重新载入ROM
( _1 G" c$ J# E' ]% y. n7 f( @3 g
9 r: t$ D0 x; ]( q: @' n    snap xxx.png' z2 V  i& G% W) r( v8 b
    截图为xxx.png, F& q" v/ `9 k' D  C

) B* P2 n+ L( c$ M8 }) L2 w  . ?9 u) _0 G* |5 O1 Q' {6 A* K
  
( L) v  l: b( ^! \  
* }1 P8 c! [, Y1 ^! C热键:7 [( }- p3 U& X6 N8 \& j! `# m) @
    ~ 中断游戏: T( S" K' D  a6 q) E
    F5 运行游戏
1 z; j; V2 F& O& i    F12 运行游戏且隐藏调试窗口0 V+ I* {; D  [+ S9 L
    F11 步入, 单步执行, 会进入子程序
* g4 U; p. {: f, ?8 d6 k% O    F10 步过, 单步执行, 不会进入子程序1 Y  M/ w8 z0 i3 }/ v
    Shift+F11 执行到子程序返回  B* G* a+ v1 s; {1 U0 d, r6 x
    Ctrl+M 内存浏览窗口5 [* {2 r7 G( S4 e" N( ~) V' N
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
  `7 p  P0 x: m0 w( O/ ?! A. {1 L5 s' V$ Z
{:4_94:}
! r* \. f* @! J$ r) J
$ `9 c8 n5 d4 u! G& s2 S9 b

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
& F# c' C- c8 r1 s' c6 p6 l0 t% y1 w+ r3 x
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 | 显示全部楼层
要详细些的东东
9 p& C) b& F7 t/ s11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-26 13:12 , Processed in 1.122070 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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