EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
5 R" f/ E$ g' r$ E1 Y0 f6 m
很快速的整理我自己常用的指令
/ e% B4 X  j4 n5 P8 m
6 I* m8 f' z0 ?2 `{:4_112:}   A) K; Y$ R" G& I& |' N4 M7 w0 ^
! B9 ]+ n* [1 x! `
MAME DEBUG常用指令) D( \! j: H* T6 p4 o0 W9 b
* c1 K+ Y2 q& E$ B+ b% ~
内存搜寻: ci, cn, cl
4 V- t% V: G# T2 c/ K
9 U9 K1 J2 k6 E8 \: |! D2 ?) _    ci
$ I9 w. _0 F7 R9 S7 e7 h    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' m( y4 B6 [1 r  J  J
- Z4 {" i& B* N, F- t9 q% h( h$ T$ Y    cn( R& E, e8 q; R9 `4 V+ ^! w6 j
    搜寻指令
- _0 I$ K' X$ j% d# T    例子:1 z& i  r5 i9 J- E  b" F, Y! x2 x9 I
    cn eq,60# }8 g3 x$ k( u- M" b
    搜寻目标等于60 (十六进制)
7 K% X) j) O  C& a        
, s, g& f( n% Z! j( j/ `- L    cn eq,#96* @1 G. w0 z  m2 q/ O+ d1 {1 l+ }
    搜寻目标等于96 (十进制), I! z6 u& s3 y: x/ f+ f

8 W2 e4 {8 ^0 g' y: B" n5 a9 T    cn eq
* ]& K/ o  j' b+ x  O' x    搜寻目标的数值没有变化* X4 b% d  M- s+ o
) P0 J% A: A; H# \0 |9 J
    cn ne
3 r+ x* i% H) P$ z! a$ J* o    搜寻目标的数值有变化
# C2 P8 A  |1 I! k        
' P9 ?3 _2 n8 d8 P. m) C1 Z5 k    cn +7 T7 w/ F) ]  H
    搜寻目标的数值增加( U( W- Z! ^- Q7 Z3 f; Z
    ' v7 ?8 o9 c7 p9 L
    cn -0 T5 o" g  E& j0 U
    搜寻目标的数值减少
; t! l( {; \$ _! w        
$ ^8 j- V9 N% q4 I& v8 z' _    cn +,39 U$ O! q/ X4 P6 E6 t% d7 a6 m
    搜寻目标的数值增加3 (十六进制)
  t$ z& R! O4 f$ O
9 ]: W/ F7 ]! w. v/ K    cl( [& `1 G8 a4 p
    列出所有搜寻结果6 r) ?4 o2 A. d  `& q) z
- V; x% c# j8 C5 V8 ]' y; t
    cl xxx.txt- F3 k, ^: d+ V- k, |4 H
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式) X+ @" p+ Q0 Q, @, h( [! v0 ~8 L
. O$ F0 o# z; A8 p/ C/ f0 o8 N
    & b" p: y$ g3 D) F/ G! j
内存监视点指令: wp, wplist, wpclear5 l0 o" i# H/ p& f8 i1 L/ F6 }; B
    例子:2 G9 M( b$ u  V$ i: U$ K9 N8 }! z
    wp 1234,1,r
# ?; b" |6 j# H5 c# r% {  _" \7 n2 D      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: H" K* N9 P" K) b6 j9 I
6 r& {: }6 \1 s0 V! o. U
    wp 1234,2,w& o2 c: ~  e2 q2 l7 c* q
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 V4 {! Z4 t  P  Z! c# f# p     ) n4 ^8 z+ S3 }; V
    wp 1234,6,rw
' X' X3 Q7 L$ @9 C6 y5 s, }3 t3 p      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6! i* T& Z8 [! [) Q" o
0 C0 u; q2 g5 Y( n  E- H
    wp 23456,a,w,wpdata == 14 M1 T5 ~7 C, X: H0 c; r. v
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ O: s9 U$ ^) f. d1 G6 ?- i: }

7 r8 h( \$ z' m, N0 }    wplist
! z  v, E. c0 L+ ^      列出所有监视点7 V2 ?5 I) i' ~2 f: a$ ~: W

" a& T0 J0 C6 F5 W1 p4 B9 B1 u; O    wpclear 3
. Q" s* r# c$ E2 e  I! a" A      删除编号3的监视点$ I: D" Q9 U$ D; {9 B

( F5 Q' w% A6 W! g" T    wpclear
! T$ R9 Y( _* Q/ H      删除所有监视点
/ D. L+ w, m, ?' T! |( E
( E" c8 d( ~0 D7 e. i. V# T3 r5 _      
) P6 W$ ]7 g! f  q" M: ^
1 m* \3 ~  X1 h% [; [& w5 W程序断点指令: bp, bplist, bpclear3 W# w2 i; g' t% F, i4 w  m
    例子:
& `$ r& p* w+ D    bp 1234, U- C- T8 _+ G3 J7 n" m
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, R+ K: v3 ~" s3 d8 s: |( c5 M: D' P  B0 ~+ v6 h
    bp 23456,a0 == 0 && a1 == 0
5 z& N& z  d( i4 A      在地址23456下断, 且中断条件为a0等于0以及a1等于0
  q9 T! }  D0 p6 k/ \- f2 }5 j! U+ F* G+ _$ @1 N' _
    bplist
# R: K8 K3 i5 y2 [+ N9 F9 ]      列出所有断点
# r  G( M3 p* O" p4 E. M0 ?$ F+ k9 U9 a' B/ A
    bpclear 3
! P8 P" d- s& d; Y3 A$ t      删除编号3的断点
( j- M7 H/ o; f7 ?" P% K" Z
, W6 _; J6 Y3 D  l    bpclear" x, Q( L- R4 M2 ^  d! I6 M
      删除所有断点
9 U6 d& J6 a/ D. D3 I
' j1 I* m: ~4 \: T! w0 h. U      % m1 F; K4 Q2 ~6 ?
      * [( T0 s# e" \* B' i. G
跟蹤紀錄指令: trace
% Q. [7 |9 K+ S    例子:" l5 o% t: U+ i2 P+ X4 G, b6 E+ X
    trace 01.txt& }/ E1 a3 c8 C" W" Y$ O
    跟踪当前CPU运行的所有代码, 输出至文件01.txt% ^2 C8 ~/ A0 R$ r
: X5 s* G8 A+ }3 m) L( W
    trace off5 N9 B7 P4 ]1 \' }& k- M
    停止跟踪, 并且关闭文件
; Y8 ~' j1 S# M2 h' h" [! U
3 u' U9 p9 X6 C% c  l6 U5 r    trace 01.txt,0; `+ E1 q! w- q8 q, g" Z0 a
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& ^% O' ^, n& [# p. |# F2 ?. b- j9 f, a+ r3 q
    trace off,0( [1 X( l4 F9 V) N& Z) \1 i! M5 \
    停止跟踪编号为0的CPU, 并且关闭文件0 s7 I' ^! B! P

8 x& b. W0 q! e, C    trace 01.txt,0,{tracelog "A=%02X ",a}5 ?3 m& a9 ~1 Z/ L5 a) q! A0 u
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' N5 n4 |4 D% [) x2 G+ O- U    并且在每一行的前面, 写上"A=a "
- s* D+ A! n3 I7 o* t& ^    "A=%02X ",a为一个C语言printf函数常用的输出格式
) g& N0 w) E5 L' h" h! Q$ m; h3 P    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 A( K. b. u. H7 {. r  M    X表示为大写十六进制数
+ v8 s5 Z+ G5 e( e4 x1 |. P5 i) i
, v2 \6 d- {! h. P0 ]9 w9 J
6 Q4 ?$ I) g( O( ?8 I# F7 t# G, O( }0 J
内存直接写入指令: maincpu
+ z6 _! P0 V8 [4 |& n- E9 o) a% j    格式为 maincpu.[][]@地址=数据
& e. ]% p$ p* z& p" U- Q, r/ ]    第一个[]:
3 F! n: Z  w+ m  d. G: T$ `    o 表示ROM地址" O8 k3 Q" c% V0 F' f  ~  r
    p 表示RAM地址, v" R: Z2 `8 E" }% e3 M
* ?# v, A* ~; \8 x9 \8 F6 ?! _
    第二个[]:
5 \% v# F9 b9 ]5 C    d 表示4字节
! R! P0 C, u/ G1 z& B8 |+ j/ B- G# G    w 表示2字节1 w% f+ C2 N$ y1 t1 ?" M# q
    b 表示1字节
2 C) b6 ?( k( p" g7 f  l
9 J  W' B, Q, e" P    例子:
. J4 n; o& l% G- W    maincpu.ob@1234=FF$ d( K4 b5 x+ K+ |
    在ROM地址1234处, 写入FF一个字节
6 M$ [* e5 L7 f# a" v/ y# Q3 {- R2 y4 N6 v9 N* w
    maincpu.ow@1234=4E71
/ v1 Y, K5 C0 O3 Q) C# e$ [; s    在ROM地址1234处, 写入4E 71两个字节4 c4 j# g' M8 _# v
8 d1 S0 o* r! r- p7 }" O6 q
    maincpu.od@1234=600A4E713 m* _9 i0 Q2 R5 J+ [3 J+ {
    在ROM地址1234处, 写入60 0A 4E 71四个字节
- J# l$ U$ P: ?, a
, Z1 b1 Z' ~% ?% [+ a8 q1 {    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 y' o/ Z0 K! l; q# Z. R    ( D: f8 [; C5 }! [" p

' M: b4 B7 p) N% r' O5 z其他:/ W0 t+ x) _; I
    dasm 输出档案名,地址,长度
4 ^& Z# O! @% j; b) m' H& ~    输出程序的反汇编代码* u5 p1 p$ f$ J- n
    例子:4 [% _: k# a0 s+ U$ f* D2 y/ j
    dasm 01.txt,0,100000
. O5 V+ q6 J! ^9 L4 S    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 N3 H5 P6 z" {' T/ F
) i9 m0 J+ C: M- M
    softreset
, z( |% [, `" m6 |* H4 p    游戏重启, 但不重新载入ROM
4 y) N9 f& [% V. K1 z# P" l" S) n8 l& V2 d6 \0 f
    hardreset
- L/ {# `! B+ y% D    游戏重启, 且重新载入ROM
/ z, p1 F' `( f
/ ]* n0 o! E& X- a& \8 j5 I9 J& `# G    snap xxx.png
, V( K  |9 l; A  S% f    截图为xxx.png; I8 W& r2 v4 G: _

) ]3 V2 u8 b* B, ?  1 q, w+ @( B4 d/ @, D
  
0 q$ O+ R3 f3 M6 O6 \% s5 n; P; C  ; i" J( w+ ^2 R: ]
热键:/ p: d$ r# c$ w% L( y# U, W
    ~ 中断游戏* K! c& A  }- c0 ?1 y  {& N
    F5 运行游戏
& `6 J' X! b$ S  w    F12 运行游戏且隐藏调试窗口6 Q. O" g5 f8 W: t. `/ P
    F11 步入, 单步执行, 会进入子程序' ]3 k$ i: `( {, A1 w8 n! t
    F10 步过, 单步执行, 不会进入子程序9 k/ Y! K; l, ~
    Shift+F11 执行到子程序返回) i+ H$ ^" G3 I) c  C
    Ctrl+M 内存浏览窗口0 s# z9 ?' Y- p! f, _0 t0 C, `
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ I- x3 W) U/ h1 r$ [

, {0 X% M6 ~- \/ m$ x9 L& T{:4_94:}   B! p! u& l/ [! b3 Y

0 Q- B) `4 h  o9 D6 d

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
  J  t: k" R' O/ l* v( [! ~5 d4 l! Z' X" E1 B! f: E8 n
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 | 显示全部楼层
要详细些的东东  H$ U9 A& }9 x6 j* p; [0 D
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-12 09:06 , Processed in 1.076172 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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