设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
/ M8 l* O5 W# l6 Z1 e- `
很快速的整理我自己常用的指令
) a' U9 b0 I0 L& W+ ~
! V8 _2 v# ?$ W  Q8 H7 V{:4_112:} 4 I: o+ g9 _# v4 U0 T3 u" k
; i, Z6 f3 @* F. \9 D
MAME DEBUG常用指令
5 l1 t% A, c* M+ g0 c. g+ f% L
. r! [: F# s2 A  t- i内存搜寻: ci, cn, cl6 D( o2 X+ ?, T, G3 X7 a: R5 \

6 v5 V6 O7 j: S0 p8 d    ci
. i- Z" X% p) s: F: a    搜寻任务初始化, 每次搜寻一开始一定要输入这指令& [4 q0 x, ^) J3 X! Z
' D6 ^$ F8 u1 B/ @8 ]+ ], X- K6 H) w
    cn. D1 @! D  r% f5 X% c) `) d
    搜寻指令7 k  I& Y  N4 D+ p: g
    例子:
( o( R% q7 k" O    cn eq,606 C2 M# f& L; H2 q. x
    搜寻目标等于60 (十六进制): v" k( D6 u7 m# Z$ l- {( Q
        , r, a+ z. F1 o7 s' V7 ~
    cn eq,#96/ y8 U) [) V' x6 R3 |: y1 W
    搜寻目标等于96 (十进制)
) U2 q9 h9 Y9 j- D$ ?" p' K" G- F% ?8 c& r% I$ j" J
    cn eq
( k% z7 s; v2 B& p    搜寻目标的数值没有变化
7 K0 t4 O- ]& C6 V
+ F3 Q' {% _% G# n6 W& Z    cn ne
% h2 Q: v$ F$ A8 R3 z/ z: x5 m+ N( S    搜寻目标的数值有变化
: l+ \: P% n+ L' ^        
! X* F( ]* z$ K    cn +! ]' G) l7 G5 ^- c
    搜寻目标的数值增加4 {' k7 [1 }4 l7 L* ^
   
$ m7 w" I  ]; O& T& w4 v( f: N    cn -( ^, J) I: e  _) R
    搜寻目标的数值减少7 Q+ p& r7 y1 A3 c1 P" ~# b
        9 q' i( E) i% h8 [' u# t
    cn +,3. \5 Y  j3 @7 i( D) @% ~# w; w" [
    搜寻目标的数值增加3 (十六进制)
2 v! ^: h$ }* _4 P- n+ a) ]9 b/ L% s5 Y& r
    cl
- T+ J3 y  n# N4 }    列出所有搜寻结果; w  ?. N* {& ^$ y# D' R

9 b" B, e* ?# R& C5 M$ L; o    cl xxx.txt
+ M" K$ _& J" U0 c    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 _) {" d$ P# p# l
  E) J  `" c9 M" a% z+ X8 F& [, D
    5 y* J; @% \* G: l/ p4 m5 Z
内存监视点指令: wp, wplist, wpclear5 L7 E2 w& X& }" ]; w
    例子:
2 e4 O* J+ n- n8 I    wp 1234,1,r
/ A# t% A9 g% T0 R      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
% A+ d6 a$ }: O1 `' N/ t: D. c
( Y4 A( `: S3 w4 Q( j2 g    wp 1234,2,w; u7 A2 I+ O. S& K. ~/ X0 w
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ G0 d# h8 g( n8 t  ~2 C- z# z     
, `7 `8 O; }# Y# D8 ^    wp 1234,6,rw
$ v4 c& k6 \5 w8 z. \& l9 h      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6$ L( ^7 N* m4 I1 _" r* ]  T
) K8 Y7 g6 g( h; g6 [0 D
    wp 23456,a,w,wpdata == 1
3 u& n0 F! ^" P! l7 q( T0 h      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
3 }0 Q6 C# q0 e7 h  c
/ r+ K- i) j5 R1 {9 G- S    wplist
9 S0 }' o& |. g      列出所有监视点! Z; C5 b3 U. e; n
( B' a# V! o2 [6 j) ^+ {) S' ]: Y
    wpclear 3
: a& j9 b$ f8 ?$ [      删除编号3的监视点6 O+ V" V8 a. Z! H
4 ]6 r( W) P2 F' A
    wpclear
* c" l1 ~$ ]" T3 T9 X0 D! r      删除所有监视点
, F: u9 V$ d- _' E
* J; W6 v: N' j      ' K0 q% A6 o$ _! e) p% \" \8 `0 e

) d0 \8 `4 h6 o9 l9 H9 B3 Z程序断点指令: bp, bplist, bpclear! F3 y2 U1 K5 M6 \2 K5 Q7 p# _
    例子:
$ h0 I$ ^4 T3 u9 R    bp 1234
/ Z" t- U) E  T: p6 K/ [      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
+ b3 _  E4 Z  c2 g- }1 I6 ]6 H
1 N. J8 R: R, @) n9 L    bp 23456,a0 == 0 && a1 == 0& s: K/ z! g( R  J: X- r* ~2 y7 ?; X
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' ~# y1 `+ |! E# }# [" ~0 X1 _) s) M8 o) I& e2 @/ s
    bplist2 p' K, o7 M5 G% l7 X/ ^7 x' g
      列出所有断点; d+ @$ \9 {/ _% J5 i5 y
% f: _) H1 u) z& k4 ^5 I
    bpclear 3+ `3 u1 ^* _1 x$ s: a; M
      删除编号3的断点
9 [# l, M* b" d7 c+ p# `3 q% g8 ?1 ?; ^5 a* |
    bpclear9 h- C8 h" d9 ^; U2 K9 G
      删除所有断点
# S1 n( s: a; n7 @! l3 M/ b; m0 V7 B: O% g+ B. v
      5 C9 }8 L# w6 a3 T5 K& W. n( U' _
      
9 T' E! }( E/ I- b( I  \1 t+ v跟蹤紀錄指令: trace
7 l7 R% \# d, O/ j1 n    例子:/ M# [# t, S0 Y; L
    trace 01.txt
  W8 z5 q+ a3 X: H9 L( D    跟踪当前CPU运行的所有代码, 输出至文件01.txt
6 r0 Y, G! e* ]6 x1 ^/ ^! W: ^
8 _7 i1 |2 T* m4 J( S    trace off+ J- O, k# s5 ]. T8 r' {
    停止跟踪, 并且关闭文件( I: ^+ X% g7 K5 W3 }
+ p6 R* B' i& {- A: P" b
    trace 01.txt,0. p" C4 {0 b6 \) e6 `9 [
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt' X: g  h% c; m  i( y+ a
- J# s  O  e# J: s) i
    trace off,0
0 a2 E0 v* u; W7 M  ^    停止跟踪编号为0的CPU, 并且关闭文件* F* ?5 l3 C2 x8 D

  K2 z' @4 Q  ^- \8 a: Z    trace 01.txt,0,{tracelog "A=%02X ",a}
" F* l5 Q% ^+ N1 Y4 i' G    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
  v' ]2 j5 K; q$ ]0 o& ^& ~0 G    并且在每一行的前面, 写上"A=a "
( u. l1 z. ], A9 o$ O    "A=%02X ",a为一个C语言printf函数常用的输出格式
% i# i& z, F2 T! l4 ]& n( J! \    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% a9 Z- H8 u4 f" Y5 U. t) N    X表示为大写十六进制数) k1 t) m- O+ [2 \

+ K0 ]" V& E- h$ T, w* r
8 e+ D. N' U2 w  t. \7 h
- s" w4 N. `6 i7 m" ^8 k$ U, G内存直接写入指令: maincpu2 P& O; H+ u% V# ^8 o5 T
    格式为 maincpu.[][]@地址=数据
2 Q* N4 |8 X. s) i! l9 _* X) u" S* ^    第一个[]:
, ~7 W- C; a" ?  r    o 表示ROM地址4 a, [: L5 a4 J
    p 表示RAM地址9 B4 [8 u, S4 \  r- W" W

( I5 s. h* S& ~: v% c2 I    第二个[]:: r" H3 P1 M: B' Y9 E& \
    d 表示4字节
9 s* O& r) H0 n2 r, D  P) `$ ~    w 表示2字节8 g: W+ C2 G  r0 \6 I
    b 表示1字节
! y/ Z5 |9 B6 m* i$ P* e8 y
0 F  F4 [* P& I$ t3 H    例子:
2 N& p6 X: V; @2 ^( M& ?: [) k    maincpu.ob@1234=FF
# O9 C4 |8 `6 n) y' w( v7 B    在ROM地址1234处, 写入FF一个字节
, g/ r2 y8 C3 {) u  R2 p! J+ a8 B7 }# V6 w
    maincpu.ow@1234=4E71, D* y* ~* D! p4 M" S8 U) E8 \
    在ROM地址1234处, 写入4E 71两个字节/ N& S; _% |. b0 h
: A  ~$ M5 d4 _' O, c" x9 e/ O- W
    maincpu.od@1234=600A4E71- P9 c$ o/ G( d5 G- o! o# T
    在ROM地址1234处, 写入60 0A 4E 71四个字节
  w+ V/ k, r" _( B' i
5 E1 u7 w7 Y! m& i    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' {8 {' U$ ^" z- C/ J6 \8 U
    3 |8 s0 i# E$ N
% H2 [, {+ |* D( U1 o# j" k5 t6 I
其他:
4 f& N  {: o) x; }7 |+ p    dasm 输出档案名,地址,长度) {/ d1 [: S0 [& l
    输出程序的反汇编代码
2 d. h. t% C* C; |    例子:) p7 ?2 {0 ?9 y- [$ W; b0 B, S/ Q
    dasm 01.txt,0,100000# p1 h$ _5 }% j( O8 @) X6 f
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; S) ^, l- e! `
4 i2 U: X+ @/ _. b4 Y& Q
    softreset- f  \' s- U% R1 ^/ }8 i! M. \5 Y
    游戏重启, 但不重新载入ROM( S6 P7 i( L$ B8 k3 D# Y
  O. e; N% Z3 i$ ]
    hardreset! t* p5 l  [7 t
    游戏重启, 且重新载入ROM$ u5 N. p0 Z; K8 m0 S# V4 l& X
% U# |- W% u6 r3 X# u/ ?8 [
    snap xxx.png; [8 Z3 e4 a) L, ~6 h% g: a
    截图为xxx.png
' M, a& l$ [" V/ R9 \$ @' O
0 C4 K1 G, W! V2 d' X/ P+ c% \  
# _, |% A$ z- x( q: |+ C  G  : v' v1 [" J/ \. C. O% y. n
  " b# G1 P# F) t9 ]& t) Q
热键:
6 b% s! F& B8 i: M    ~ 中断游戏
, V1 \& ~: P! y7 f/ U6 t6 m    F5 运行游戏
( U! W5 ~3 M6 m. k% q4 X$ V( E& s3 F    F12 运行游戏且隐藏调试窗口
3 I) M+ \% L  Z! ~. ]- c. b; |    F11 步入, 单步执行, 会进入子程序* G& b8 n2 N3 B2 G
    F10 步过, 单步执行, 不会进入子程序
) o' W4 v/ j: I6 P' a    Shift+F11 执行到子程序返回) A# H6 |* l! U2 F* j
    Ctrl+M 内存浏览窗口
2 m  O/ j1 W( S1 [$ P8 i    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
! |9 `  P4 \& ]( ]* o6 G* i6 E. U& j& i$ R: q2 O  p. n% |
{:4_94:}
. l# m! ]- A5 ?) v0 g5 ^$ c0 D! t& l$ {3 Z: L$ P" k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2553 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。% u! Q0 h: Z2 H, i  n% r# k

9 p  R! \# J! ]; t  L6 G1 |8 {; 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 | 显示全部楼层
要详细些的东东
! U5 j0 ^% O5 O6 t# R" k) X11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-22 04:37

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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