设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

7 G7 S- }% }! _, _: \3 j; I' \很快速的整理我自己常用的指令3 \$ M. Y! K- C- Y. s' |7 Y" }

8 U: D6 x7 P1 m$ P- t{:4_112:}
" N  ]4 g6 h, l/ Y6 I8 P  e( Z. e: \* p( M+ ^
MAME DEBUG常用指令
) T1 y% ]6 N5 |. u
4 c7 x- c, W/ o. j  H$ V内存搜寻: ci, cn, cl/ S+ w! O' f) F9 ]- U
( e# E6 T1 j: i! J0 c( _7 ~4 U
    ci
- y7 E/ k6 R9 F0 l' |& u& T; \& D    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
  |3 F3 T4 e1 ~9 \3 G3 b8 R0 z3 E) C0 i2 V, k1 q
    cn/ c6 I. C1 ~2 Z
    搜寻指令8 k( H' v/ N0 R% c* [" I3 h
    例子:
  B- }1 p! p- `% O! \; m    cn eq,60
( h1 J$ i4 v6 b; J/ v8 j    搜寻目标等于60 (十六进制)4 N+ w* o' z5 d$ Y  F
          [: L% S' T5 x
    cn eq,#96. [; ~) Y% B( E7 A# u
    搜寻目标等于96 (十进制)
& a  [6 K* I5 S1 g/ r7 I$ t  ?8 H9 V9 O  a9 D/ M
    cn eq1 y5 ^5 o8 H$ U
    搜寻目标的数值没有变化0 w! u  F) E+ H# g
  J3 t4 V2 ^- T/ f! ^
    cn ne  o- g3 [) n7 w/ b' O7 t
    搜寻目标的数值有变化7 L+ t+ `$ C- B
        & C7 `, E* \- _$ T# U  P2 M
    cn +
2 D& K+ ~6 }8 h* W( o* c. w' Q    搜寻目标的数值增加8 I9 c. p! @9 _0 f! o: o0 U
   
* E! t7 U. t! Q- C$ C1 k! y& F3 u4 k9 U    cn -& x: {$ A# @  Q! k; C( R
    搜寻目标的数值减少
. a, t1 }- s- Y: l# `, _        
- u3 u! |: }5 M+ ?2 f# d% @9 I    cn +,3
. m* E, q% Y  r4 g8 n" I    搜寻目标的数值增加3 (十六进制)
9 b% m7 l) j/ w, D
4 B9 Y( L: T1 Y5 w2 C/ z- F" O    cl
) K, \$ Y1 J( C; |* E    列出所有搜寻结果1 B. R" S! m& I7 `+ S$ G
7 G* v0 U2 O$ F4 \
    cl xxx.txt
6 l9 n4 \1 I6 B, Z5 @    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式3 |' ]$ m7 Q0 _; f9 @) s) i  d

& F- s, O$ A- z8 t/ {# ~! i    ( I: I5 b, q/ e/ j' {
内存监视点指令: wp, wplist, wpclear7 M( v( e2 X- V$ d/ I
    例子:
: l3 [; }# @1 |& s; S! ?9 c    wp 1234,1,r1 N, d% t: `; y; J5 n' G% B
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
3 U. d! u2 J: `3 o! |( ?7 a
3 {( L/ v, g, R  D* g3 \2 a    wp 1234,2,w& q. p! z' `- C% [  ~
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
# \8 h& X  ~; E* ^5 h2 \* A; u  M( f     
2 H2 `, ?& W! K3 G$ ]  v3 n    wp 1234,6,rw' t0 X8 ?" Z: K" ~' ?2 P3 K
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
# K) p) X/ E+ K8 ^+ P- b6 E( G
; S# I0 j1 y1 ~2 u- }1 G    wp 23456,a,w,wpdata == 10 e5 Y9 X: B8 @/ X2 ~
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 p& U4 \5 O) `0 _3 M8 m8 \
0 R+ y4 R! W1 v$ U
    wplist# b9 T: E- @, t# l; P0 A' v
      列出所有监视点
+ }+ r: p  e% N: F* z7 k2 {& A! k+ U/ f
$ B0 v% F# S$ C# t- {; X; y# L  G    wpclear 3" z* a! v! s. P/ O0 l* L/ H
      删除编号3的监视点
8 K& A3 u  x5 j: n8 ]
9 J# W3 A& w/ w9 u  q0 {/ g/ A1 d0 W    wpclear. p& g7 n' O& l' j
      删除所有监视点
  U$ v! `. A& u8 Q9 L$ r. U9 |- r7 V( U. f. f
      
' u' {% P: V1 N6 q7 Z
$ L! x/ F+ q  V* S% w; M程序断点指令: bp, bplist, bpclear4 n$ y6 p3 ]6 F1 S9 N  d
    例子:6 R3 ?4 S$ r0 l' v3 W5 m$ [
    bp 1234
5 @3 j) w+ j6 s      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. U( c3 N" ~0 R5 c2 H6 s
% {" ]4 @9 W) c+ E& x$ N# z    bp 23456,a0 == 0 && a1 == 0
  r- G+ D: l' _5 w# _- J0 T      在地址23456下断, 且中断条件为a0等于0以及a1等于0
" J; j" X. p8 B3 a( n/ Z
( A5 [; v9 a, O/ p' X5 c) k* a* s    bplist
5 K; Z4 v8 i# b, W      列出所有断点0 t) H7 G) |! x
; T( x" T3 G0 M( @! U
    bpclear 3/ s4 O/ j/ G5 O. w  {0 _  }6 a
      删除编号3的断点
+ o4 A$ T+ c7 D3 E; A$ V, w! l  w# r
    bpclear
* }/ d+ C. C6 e2 f8 I# f      删除所有断点
! [4 b+ B0 Z+ Y  u
0 K/ {8 P( H$ C! }1 K. {7 K# Q3 P      6 u2 R# a; _% _
      ) v! c* w. i- h% i/ b# s0 R
跟蹤紀錄指令: trace
+ q; k) z: k: E9 t9 P    例子:
6 U/ B1 @- C' H+ `+ h    trace 01.txt. [$ u" C! h8 H* d& s3 `) {& o0 f
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 u+ p" u# m8 i+ V* e4 x, T  G5 l* q' w, _
    trace off9 i0 C) E/ e2 w, g6 b
    停止跟踪, 并且关闭文件
4 U9 h# ~- T+ Z! x4 t, T, G
3 B& L7 d  G2 ?, k+ P    trace 01.txt,0
$ Z0 F* v& N6 V' ]( U) `    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. `6 B1 d' R5 j# w

; @' Q$ ~& G/ A  a0 Z3 K    trace off,0' i+ P9 B- F: {9 U$ Q* y
    停止跟踪编号为0的CPU, 并且关闭文件
- M9 ?, T' I3 t  B( a: U" Z8 U9 Q8 v& k2 G+ G! W; d' S% \; B
    trace 01.txt,0,{tracelog "A=%02X ",a}
- ^- C5 ~  s: }8 L8 y, c    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 Z' w% O, j/ n4 s' H    并且在每一行的前面, 写上"A=a "' F3 i0 s3 R. d7 V& R; F
    "A=%02X ",a为一个C语言printf函数常用的输出格式
, z9 m; Z5 Q* G" j; o# N  U2 `    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入/ @8 T+ A7 G0 V( N2 `' A8 g7 E
    X表示为大写十六进制数
5 Y3 n' J' \& d/ }0 j; @4 ]' K7 ^$ V, O1 n2 R% v1 f

1 Y& O  `! ^/ M9 J
5 B" V5 M9 T9 j1 o8 ^& b& z+ c9 q内存直接写入指令: maincpu
" @+ l  q+ `8 p4 `& K    格式为 maincpu.[][]@地址=数据
/ i6 a4 ^& }; j1 ?! G9 O    第一个[]:
0 Y' ~6 K6 S4 [( w    o 表示ROM地址
1 I2 {1 x2 z# m: F    p 表示RAM地址
8 y! s$ g" l& D1 P- ?% o" l' Y& {+ N) @* f4 Z4 M4 X
    第二个[]:
5 }% |/ F$ @/ M/ [  |    d 表示4字节
8 r8 m1 K. n) ^. `4 v, s    w 表示2字节, t; U7 d- U0 u3 S$ {0 T
    b 表示1字节$ o$ a2 X, W/ y) g% s" s8 e8 B

; g' B* _; [! [/ w3 F    例子:
, @7 q3 _( k* E0 o' y    maincpu.ob@1234=FF
+ x( a# k6 e6 j  k) l9 d" i    在ROM地址1234处, 写入FF一个字节
$ z' A) H; M8 P5 X
) t  J! a5 u8 ^# k    maincpu.ow@1234=4E71: u. j5 u9 F" |
    在ROM地址1234处, 写入4E 71两个字节- w/ [1 S9 ]1 I: ^9 a

& V" H2 ^" ]6 m% w9 A% y; b$ m    maincpu.od@1234=600A4E71+ g- L, J" O; @$ H; o' U; A
    在ROM地址1234处, 写入60 0A 4E 71四个字节; P! o! C+ y& m
9 S8 F& Z3 w& U5 N9 I
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 P+ @$ R. {7 W7 |) ?& `: s
    $ {9 T$ e( }! F! c7 L3 E1 O
7 B( m8 r+ i9 _! R. C, o. W
其他:9 _! u4 M- D, r! P, t0 T* R
    dasm 输出档案名,地址,长度% ?! g) V# c& H, f( ?
    输出程序的反汇编代码! j" ~* g& d2 g! K
    例子:7 F" n/ E6 G# {, l) |6 i
    dasm 01.txt,0,100000
4 A' J7 f/ m% {7 I8 N2 {    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 Q( V1 R4 r0 y- }8 |3 v! n' V& R$ s8 P3 I* Z' y4 o. M& |3 Y
    softreset. w5 C) Q3 k3 a" s
    游戏重启, 但不重新载入ROM
# W1 @/ G; k! k1 D+ J; h
) f+ y& M& L! _    hardreset
' E) i% X  w" Y; a6 }& l    游戏重启, 且重新载入ROM
! J0 w/ s# m& i1 ]
" O7 K8 N/ }. R4 h. q+ @: u    snap xxx.png$ S% k7 U$ O! B5 j8 G# E: m
    截图为xxx.png
4 T- L& i# R3 S/ l8 ?1 N7 G4 K' @; C% S
  5 F# u3 f- M4 L& h4 x
  
- f9 ^( _7 p; h8 ~; u5 t, g  
" n1 Y: g- f8 N" j热键:
5 L: j; [  m4 u# k    ~ 中断游戏6 k  ^2 N7 o" E! I+ D  O, b
    F5 运行游戏
0 K- J$ Z. C1 u9 k8 L" r) J    F12 运行游戏且隐藏调试窗口
% d) Z$ t1 q" G& q    F11 步入, 单步执行, 会进入子程序5 g/ w" h, T* `! P
    F10 步过, 单步执行, 不会进入子程序; T6 J+ m7 w/ E: J( e& y
    Shift+F11 执行到子程序返回: ?% h7 r. I/ X) l
    Ctrl+M 内存浏览窗口/ D2 g- r* X; Q9 i, O2 r/ S! a1 I
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# `2 K" O/ A) S$ t4 s6 N7 n
* f) O/ @2 H% l3 L4 F
{:4_94:}
$ g" o- H* c. z1 }/ d/ O
" w# B+ ~' |. A$ K) f9 K, |* Q

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2568 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
' g! g7 {, m3 C2 Q( U+ Y% [: }( |) {5 ?; I+ E, ~
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 | 显示全部楼层
要详细些的东东( p4 U2 ]7 W, K' x
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-17 22:49

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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