EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

. @: i' s/ s" X很快速的整理我自己常用的指令
/ f! w2 n0 d" Q* H/ `% `
  e& n. a+ E% N5 S2 }3 K$ m2 a# U. g{:4_112:} ! v! [% V6 h; L! x# G+ p

0 |8 S& J- Q$ n1 T) T5 tMAME DEBUG常用指令
6 G9 u; Z/ @! n1 r, S" G
$ R6 Z  o# B) g( ]$ D内存搜寻: ci, cn, cl0 M  Q2 n" |; D9 ~  v* ?
- c% Y# d1 r/ x
    ci
: F  N. X  ?: X( V    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
4 L% s+ o* C5 H6 }6 z) w3 i1 B5 J2 J  {8 ]6 H7 c7 }( J3 H
    cn. e8 N: o' K1 l# x: p6 I) p
    搜寻指令
) [. G5 ^  r  B1 @# d    例子:
% e+ ~2 P- @8 f, L    cn eq,60
' B$ t; o- N+ ]! p: b" _    搜寻目标等于60 (十六进制): F! _3 i9 r# p6 B- `4 Z# e& `$ Q' n' f
        ! n& f6 C, b( p' ]) }/ _/ B, ]* B
    cn eq,#966 d1 k' E/ X% C2 \  R
    搜寻目标等于96 (十进制)8 T6 v& Z3 l. [+ n2 A! P6 @

6 |# Z* V5 i1 H, ]0 W    cn eq4 C  ~! K! J" Z9 d% j* W5 f
    搜寻目标的数值没有变化
' y" r! T  @# @; b" |
0 E0 g0 P& Z# r( v    cn ne0 E' X& u2 [" ~/ `2 d
    搜寻目标的数值有变化
7 L7 e: A$ W6 ]; f1 k+ M' s        
5 t% Q6 @5 D/ P# ]  J4 w    cn +8 q& }( K/ S: t! X$ B; a6 }4 o1 V
    搜寻目标的数值增加: z( j! x4 }  b6 k
   
; E! N; s! _3 L8 M4 }9 M    cn -
* j3 D* `; \" l% d1 s; t    搜寻目标的数值减少
- a8 Q$ c- W( K, F- G        , _+ `% k" j1 F# C8 z3 {0 T6 J+ }
    cn +,35 Y. ]3 l# |+ D4 U+ Q6 E4 I! z
    搜寻目标的数值增加3 (十六进制)
: K% A4 b) ~$ u, z/ d
3 ^! ^+ @2 @" y, b& f1 V! L    cl
  d  X, [4 O+ ^. c    列出所有搜寻结果
! [2 \1 C& n$ ]4 [3 @6 I6 y" {" p) L# J0 }7 F  J
    cl xxx.txt
% G7 s3 j( A2 C0 m) t, ]$ n  R& K. o    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ D* @. W0 U* D; D  A2 g0 R9 D# X+ N/ |( h
    ( a! V$ s$ ]$ R; s6 U- G' q
内存监视点指令: wp, wplist, wpclear: b% @+ }/ ?% r* c
    例子:
) x  J' j8 O) h! J6 o+ `    wp 1234,1,r
9 U" b4 h' k4 C7 @% m6 F& F5 D) @1 ]+ N      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. a; c6 g6 i, b; d; w; ^$ `
; K/ }- G( s$ H, c$ ]# w
    wp 1234,2,w0 J& I( x! B1 j+ ?# U8 Q
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
. v$ N; \  S0 n     
; m* D3 K5 l2 j3 K% o    wp 1234,6,rw
+ m4 T  Q( g- f6 K- ~. `* B6 p      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度64 |1 ?; N% C4 [! b9 u

, A, J' q, D9 I$ C    wp 23456,a,w,wpdata == 1: X3 H# `. E* @# z, O) \
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
  W, g* I, K, @7 y$ C
5 u2 \  M* R$ F6 I. w    wplist/ {4 V1 m- E+ x. d
      列出所有监视点0 G2 N. z; h- m4 z$ W5 p0 d9 M1 Z7 ^
( q8 N- [: A/ ^. |7 v' G) j) B
    wpclear 3  ^6 _. g% y- s
      删除编号3的监视点
. B7 V) k9 j; c/ y2 y) m, A2 S6 {  @" _6 @5 G
    wpclear
2 i, L# T- H" l6 q& m      删除所有监视点
. |# V  e8 R2 [! r& k+ X
# V' t4 m$ D  U# X/ o" d      % q& z9 `, v6 N% z# d* s! u
& x# v' V6 X* y  |7 @
程序断点指令: bp, bplist, bpclear+ w* q" _" [0 W: z
    例子:4 a* j; y( l' e0 W. c
    bp 1234
! B6 b: A2 T) `. `5 H& a. |7 n      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. F: L7 U, f1 j' L2 V7 Z
: g8 Z+ S! @- R" r% b$ e1 B    bp 23456,a0 == 0 && a1 == 0& h$ s& J' y- T& V
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
  i# x* S: `6 A4 y" ^, @0 N& Z/ y. K$ Q  q. _6 y1 j4 e9 `1 G
    bplist9 K+ K, B* o+ r; q/ W# j2 @
      列出所有断点! [, U; ^( e- H0 m5 W0 s$ i

) z$ ]$ x- U# D% k: x9 F' Y( r1 Q7 |    bpclear 3
& z6 F3 j7 E* B5 S! e* k      删除编号3的断点" C$ ]5 X* v5 E$ B

+ T+ q0 I7 e- U- R1 c- v4 U    bpclear/ L: F( x( y" ~
      删除所有断点
- S4 X" @  S7 s& s2 @8 U9 V! c. L% |8 _
      2 I' M& c7 q7 t: O! w* r% i
      
) `) S! |- E7 p' L1 J& n" ~8 d9 B跟蹤紀錄指令: trace
* `* K% E- J: u+ e( D    例子:; h, H/ x! ^6 c- v: E: k
    trace 01.txt
$ R, X" I8 n- @9 w3 H    跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ Y& {- w' P) U0 ]5 M! C4 E5 W1 _; @
, x. T! J7 g, U/ W" y    trace off
0 S7 f' o% ]; m& |2 p9 z. j    停止跟踪, 并且关闭文件& D5 M( i/ b. j% B' j. z; l
: f9 Y9 `2 {9 h+ K0 a
    trace 01.txt,0
; @# v$ e; m7 r    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" t- L' S6 L, d/ j. m3 d' ?
! H! V) I( i1 E# b- }5 ~+ x5 t. d    trace off,02 r4 j2 C; R5 A% s+ p
    停止跟踪编号为0的CPU, 并且关闭文件
2 i& s  a* e5 h. P, K8 ^7 }/ m7 A
; z' R, _/ `, n' G- `    trace 01.txt,0,{tracelog "A=%02X ",a}+ M1 N; v  g3 w# _/ |) @
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 _/ a0 c0 X# S
    并且在每一行的前面, 写上"A=a "$ o# j* B* e6 |- y
    "A=%02X ",a为一个C语言printf函数常用的输出格式
, V  C0 A( T. l  v! E    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入8 H! C0 {' d$ O& L( h+ |, K3 O. p
    X表示为大写十六进制数
* w0 ^' d( F0 g* |8 M& r& }* A4 L( r* M6 f5 c$ |

9 @9 H! o% N" i4 t
/ z% k) F5 d; K% h( @内存直接写入指令: maincpu6 g6 v# G  c* {8 n
    格式为 maincpu.[][]@地址=数据& |) }6 k% M- B0 B
    第一个[]:
. N6 x) }  ~/ @1 t+ O% |2 Y8 t    o 表示ROM地址% ?* z( P( t6 O+ A5 ?! u) e
    p 表示RAM地址( t, D# M+ _, n$ y
1 K' K. L* h6 {# o- `
    第二个[]:
  k/ ]5 m# k/ A, O3 @    d 表示4字节
6 `5 c2 u: A7 F$ V! Y6 E    w 表示2字节; r, ?- e& s3 K  Z
    b 表示1字节' Q& M7 f8 I- |+ U
: c! Y  D/ p! B& ]& l( Y+ H2 A
    例子:
/ R3 Y* G. P5 E" F7 t    maincpu.ob@1234=FF
- m3 {+ k/ e& G4 b/ g) Z    在ROM地址1234处, 写入FF一个字节: r( m* P- Z, E$ w/ S0 N

, q' Q& T8 q- S& N7 r* R' N0 ^. b    maincpu.ow@1234=4E71
# I, w- `: Z3 z/ |7 t$ y& Z, \8 A    在ROM地址1234处, 写入4E 71两个字节& \& Y# q" g' |" r" f, k+ U
, {8 k/ S! @0 W& |8 P9 T0 }% i& h
    maincpu.od@1234=600A4E71; K) N7 K" U* q% s$ b
    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ L; M$ z( G. [7 G5 K7 L# t$ C4 B
; v: U7 y& Q* D( \& @0 k  J3 b    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& r+ H  W% E0 }9 t   
6 c' G9 p5 U  I' r" X" }: R# `8 }5 y2 x; c& S9 W* s
其他:
7 v' u4 e/ Z; J7 O9 W    dasm 输出档案名,地址,长度
4 q2 f7 s/ k8 J+ W    输出程序的反汇编代码
5 I, }* b- Z. A' C  w0 X    例子:; X/ Y5 _1 x+ n, q) A
    dasm 01.txt,0,1000006 V  S; S4 ~* ~7 M, O" t) D' v7 f4 K
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt  O% e( ~# \/ B6 S2 H1 X

1 N' @4 o1 x4 R9 i0 ?) w% Z" ?# m    softreset" a3 {4 Q, @4 y4 w
    游戏重启, 但不重新载入ROM0 `+ V* z% R! ]

! X( j1 t, Q+ A: P$ {    hardreset+ T! e: M1 a+ L% L, c# B
    游戏重启, 且重新载入ROM" a2 z2 G# B4 Q# Y6 Z4 T! g% v
4 H) U' J0 O/ |9 e6 N. s5 m
    snap xxx.png& ~7 ~% A5 q8 T& D
    截图为xxx.png
0 g& j; m0 g' J/ f
: c/ m  j- \) v3 v: [9 s& F4 E  
1 R, O8 `6 _# L5 s" x9 X0 h  
( o& A' J* t- A0 N# _  , b& i( ^: l1 }" v
热键:0 M. ^/ n8 c6 p& \& e* Q# V( i2 k
    ~ 中断游戏
8 {/ U$ l3 Y" J8 K1 u1 q4 ?    F5 运行游戏7 y( P- @; C, r2 X3 z: o
    F12 运行游戏且隐藏调试窗口
9 H. F+ [5 m8 A4 C  D    F11 步入, 单步执行, 会进入子程序
: e8 p1 T' D; Q# s    F10 步过, 单步执行, 不会进入子程序
9 p3 ^/ |1 I& j/ N8 W7 V    Shift+F11 执行到子程序返回' M" D: @9 d: r9 |; i. w' D* t/ T7 J
    Ctrl+M 内存浏览窗口
+ k0 ]$ @" ?4 y2 b$ I    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. |; Q& M0 n* b0 o, D+ v1 E
: f) w. V3 S% A" K; ^# g) @{:4_94:} 7 s& K- {+ j: m9 D$ y4 l6 h

" ~, H% K6 f* B

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。. h6 f9 m- b6 e4 t( q  \

2 d' U& h( a, MPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东0 C6 F/ a/ N$ v8 Z% j3 c6 t/ `8 P+ n' _
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-25 18:00 , Processed in 1.108399 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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