EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

7 n9 {  l  ~; B8 \# V% Q很快速的整理我自己常用的指令% X3 I' C$ u& M. W

2 Z+ j' A" P' P* i' r{:4_112:} 6 I  {7 R4 M: D+ ^* U7 {

! H& Z  z* Q" d$ [4 WMAME DEBUG常用指令
* ]7 r. R& w3 X* A% l" p& W6 J. p6 A8 M4 c
内存搜寻: ci, cn, cl
6 U+ i; }7 }% k3 X9 f  x( g% k$ c8 B4 ^
    ci$ p5 n* t7 H) F% [  J- t  F
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
& D8 _' `' Y1 h/ ?$ l
2 ~# N/ @- g- O    cn2 J: w# U0 v# P  A: |# C+ }1 ~$ {! d
    搜寻指令
) `2 b& w) s, M. c; h5 l4 u" z$ Z) a    例子:
! q# V, A4 O: k: ^# L  Q( [0 [  R    cn eq,609 h. P( ?6 x5 t3 j8 Y+ S& y& k
    搜寻目标等于60 (十六进制)
0 W: T. e/ Y8 z" A        
2 e( j8 V; E4 ?1 `+ m    cn eq,#96
5 `4 q  q4 w, i8 q3 c    搜寻目标等于96 (十进制)( M$ [8 B$ ^: M1 Q

) I; S' H- G  N8 P) ^9 ]; G    cn eq
; A( ^) Q1 P7 G- W; ]/ P    搜寻目标的数值没有变化0 H, s9 V8 r7 h, m5 g0 a
  A: r- Z5 U! K1 W* T' B) u7 Y6 [
    cn ne
2 _" C* i& a8 a& d. \) N/ b- O    搜寻目标的数值有变化, n! p' R. r% \9 R$ a, D0 m
        
% ^2 J# m- t% k3 E% m    cn +
/ D3 O3 J1 P# @; U1 S  {% ]: Q- l    搜寻目标的数值增加" N: b# U0 l4 L1 h
   
- `0 w9 L* `( ~) R+ ^& \; a8 U9 O    cn -. Z. ^( f9 }" r0 W, `; r
    搜寻目标的数值减少
1 n: P" |2 W1 [+ B        & h' p6 E$ Q& n7 y3 b
    cn +,38 H  @8 n5 c1 F( G
    搜寻目标的数值增加3 (十六进制)
1 O; |2 D" A  q
. i* n9 q- R& D    cl
" I8 w$ O$ v" k) v    列出所有搜寻结果
" Q2 x% d9 I5 n; t* k3 A4 K
  j  S, z4 Q# r/ h; l0 i3 ?    cl xxx.txt, Q2 f  H6 U  p/ Q5 l0 C
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
7 q( v$ y5 Y7 x6 u4 {. R6 M1 N/ U. O6 U4 Q( i0 B( Y$ e8 }! [0 M" G& ~
   
1 a6 ^4 ~* N3 l; }& u5 e6 s内存监视点指令: wp, wplist, wpclear
- A, [8 f1 v, A+ k6 a6 I! K  w    例子:
2 a5 x6 V- e/ ?2 M, {, |& F" \    wp 1234,1,r
9 O) E- X% I) e& S      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
  _3 D) Z% W; h; k
; {' n* T2 @! r8 Y$ g  `    wp 1234,2,w! A! D% X6 g0 r. H
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2. k4 V% r$ P( u1 f
     
- I7 u  W- V$ }5 T* n3 @4 ^    wp 1234,6,rw7 C; m+ d, [" L$ B$ j
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 v# `, ~6 Y/ m5 A3 j1 L" X: X- R- b9 q
    wp 23456,a,w,wpdata == 1
5 ]- ^: R! X0 V* s9 t. E      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1. b: M1 j/ q/ T

& j4 Q5 S& z; b/ Y# q3 J    wplist
# _7 g0 o6 N- h$ ~( K7 m2 J      列出所有监视点. t: D6 |; y1 D' `$ H

% g- L2 C7 b0 t6 U7 [4 H    wpclear 3* w" @3 g9 H' E; Z5 g' Q5 [8 M4 W
      删除编号3的监视点
( _7 [0 A/ k7 _- f* V# u& \
) S/ B8 c' R5 t, y    wpclear/ g5 _# f- n6 ~9 v& L
      删除所有监视点/ j6 m7 S2 G3 y* f2 _! y
" k$ i# O+ g# @' k9 f9 i
      4 G8 l+ x- e: g2 v* k! y1 t$ o" b

' n! N7 [: R) D! |程序断点指令: bp, bplist, bpclear  y% _, g: L+ Y) z/ ]. U
    例子:2 p6 y" a# V) a3 e% Z
    bp 1234
7 u* g1 j; i) E# M- {: o1 E      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ Z) {! n8 q+ [4 E
4 f6 E& g* E% p
    bp 23456,a0 == 0 && a1 == 0
5 q4 f0 H9 e+ \- w; g5 a) P: R# w( Y      在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 t" {0 O4 G/ y& a% C& o7 N0 o: @- K; p" a0 @
    bplist6 E' A/ x: K. a* F1 o( r$ \5 ~
      列出所有断点6 o8 Z! v( O8 {/ O6 M! ]$ f7 F
0 ~: k3 Z+ N: E3 o
    bpclear 3
! u3 c+ b7 a  S      删除编号3的断点
7 C3 N# @1 }7 U6 I- d- X
( ]' {4 b: ~7 ]1 s  k  U1 i, b    bpclear
& F  z; o2 L6 h$ z      删除所有断点
& i9 [) Y3 m" x9 x, U& N3 N( T
5 k& ~6 J, t9 ~* u      
8 E3 X9 x2 N8 G. G% M# z      
( W/ M" j$ B- J" P1 B4 y跟蹤紀錄指令: trace7 h; g. `5 u1 o# L6 B: i5 }" e
    例子:
, E; D& L$ w$ _$ p" Y3 M$ r3 Y    trace 01.txt
2 \4 q0 }; w# p    跟踪当前CPU运行的所有代码, 输出至文件01.txt
) d; @' f$ S2 p/ s" M
) n6 F" t6 u1 I4 q2 G- m1 A    trace off
" n) `3 G; _& r: h    停止跟踪, 并且关闭文件; \" O5 [, F9 i. w7 p' P
) x5 _! R% X; ]6 B' }
    trace 01.txt,0
( r" j4 F8 p6 r! B; q/ ^& Y    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( a" e( p3 Z8 c9 v8 ]0 q  z
) r! }) p5 m; H' ~1 S0 m    trace off,0; m* M1 o* _% X; N/ ]) }3 P( a
    停止跟踪编号为0的CPU, 并且关闭文件
, M' b7 F) o( ?
  L0 n0 h3 T3 Y8 f# o. |( e+ }  Y    trace 01.txt,0,{tracelog "A=%02X ",a}
5 e) G; E. n# e2 v    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" f  z0 S/ J; f& ?# E6 z    并且在每一行的前面, 写上"A=a "5 ~. W1 e# I* g9 L; W' w3 D
    "A=%02X ",a为一个C语言printf函数常用的输出格式/ Z7 }; _0 S2 x% t& q: U, e4 x& Q4 o
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 [, e& j; E; J: E$ H' E
    X表示为大写十六进制数; n* J; m$ S* L) {+ y+ r
5 U' J9 O0 f3 r& o7 B
0 {" E4 U1 s2 R1 B! \, |" B' Y) V7 v
  Z4 P/ r) F( G
内存直接写入指令: maincpu
4 K6 ^' v; y! z    格式为 maincpu.[][]@地址=数据
9 l& @" |; v, l0 j$ }" {  [6 e    第一个[]:
, u, D  _5 {3 I& b2 p    o 表示ROM地址4 M& |/ q& Z1 ]' K% C8 T1 n
    p 表示RAM地址
( K; r! {0 a' G# U- t. n/ a- W; \* c) B& N' u8 z0 S
    第二个[]:
, F7 V% \$ j/ n- A    d 表示4字节
0 K3 H' {" P+ P$ L; p7 m7 w5 i0 A    w 表示2字节+ J- J0 W9 T& N  C) M3 F
    b 表示1字节
5 R' t* }1 I' ]' n/ s2 o! `. q$ J: M
    例子:3 D5 a1 ^, @0 U& N
    maincpu.ob@1234=FF
$ y: _. u! I% O8 Y3 S: F    在ROM地址1234处, 写入FF一个字节
4 I- C! `/ P. P$ f% t
; Q/ P6 w% D8 B' J( w    maincpu.ow@1234=4E71
, r% s& T' D, d, D+ Q    在ROM地址1234处, 写入4E 71两个字节
9 u. q% C+ ]3 `% ]( ^; R0 H+ M6 @7 d! p3 k) q
    maincpu.od@1234=600A4E712 E8 ~+ h7 c7 p" w/ v) h9 e+ \2 q9 f
    在ROM地址1234处, 写入60 0A 4E 71四个字节
4 L( S4 M! d5 ~* e; J# T& W9 N0 H) `( k' D0 z7 p
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 a5 q8 C5 `/ y; x+ l8 |8 s
   
8 \% x2 O  C/ O! \
) e. I& c% W0 Q0 `! C  h* ?- A$ x$ f其他:
0 ^2 n! K& Y& a) a. v+ T    dasm 输出档案名,地址,长度
+ R) P- _- {7 G) A: A    输出程序的反汇编代码. f, R( B1 l, @" N
    例子:
2 g1 \% N! s: t* c; F0 n+ Y    dasm 01.txt,0,1000000 b) w7 ]# o1 j7 o% `% {; I
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! y0 z2 Z% _2 R/ t+ N
  K+ M% i( T9 ^# _2 x    softreset
' h, [" w5 W' z: X8 c, N) c, V    游戏重启, 但不重新载入ROM
7 L4 y% f1 `2 k, l* y: A3 p2 T% _# h' _& r( i# R2 ^; m% R1 L
    hardreset
6 @! U# }, `! V  [( e/ @0 n    游戏重启, 且重新载入ROM+ }6 U8 T1 r$ h6 `9 L7 z6 w% s( o

  s7 H2 r" K4 ?9 y    snap xxx.png
! U& b' q0 B6 `! [    截图为xxx.png, l8 j3 |; T7 z0 k2 W/ P" B$ Q& E% O

& e. Z) W. O" l( V2 C# H9 N! ]- k  
+ }+ ?0 ~& X' l9 U. g  @( T0 G6 \  
, x3 B2 x& g- p! ]  
. Y) o$ P1 e/ `热键:- L7 {; ^2 s: y* g; P. [
    ~ 中断游戏
% G( i# u0 }9 D4 J3 b    F5 运行游戏8 b9 H/ |- l, F
    F12 运行游戏且隐藏调试窗口
3 c; n' m7 j* V% U* _+ r; X    F11 步入, 单步执行, 会进入子程序
$ s: q" b9 z/ C6 g. v4 ~    F10 步过, 单步执行, 不会进入子程序+ q) R5 d' {& Y& W1 T
    Shift+F11 执行到子程序返回
% J# O; g$ s8 |; j8 U* A    Ctrl+M 内存浏览窗口
3 G# K0 p5 E, x! h$ W, `$ |    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU" _( a1 }" l( i! B* `3 n
" `" z% {+ A; @) B+ J7 C- E
{:4_94:}
* Z* r6 l& w4 Q7 E8 f$ H- q9 k9 c4 n& m) r" l  w; d4 `+ r4 ]

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。6 D4 z0 L5 \0 A9 I
# U3 m& {$ L5 `* w
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 | 显示全部楼层
要详细些的东东
) P* Y8 t# F# g% C, R4 B11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-10 10:18 , Processed in 1.083984 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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