设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
/ k2 F0 \- l* i
很快速的整理我自己常用的指令/ x) u2 J, k8 P9 V" `
# A# E9 `& _4 ?2 W+ p6 i
{:4_112:} 9 |" S* v9 o% _& P

9 g6 w5 Z. }' u7 w2 F0 [8 }3 aMAME DEBUG常用指令; A5 Y) T5 Q, Y2 C$ _
% i- G8 o, l& K2 h6 B% u, A
内存搜寻: ci, cn, cl
- [  b7 Y0 [1 [) O/ m- V5 f  O: k! B- i9 q. G' G
    ci
" q$ h4 t2 L( `& ~8 |& U    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# G  S7 {  k  F, [1 `2 `/ P. X" j
5 G/ w( x. y  l$ s( J    cn
" r' Z( F/ X( ^( N  d    搜寻指令
; y3 i8 {: A! y: A& }) u: B    例子:
$ D$ q; o4 A  y+ D( S0 T    cn eq,60/ @! R  a8 i- H4 J( W9 F
    搜寻目标等于60 (十六进制)
1 p0 h: x; M9 q, e        - \7 [  l8 T4 K) m) U' {4 j
    cn eq,#968 F1 |# u4 A- \) f/ M
    搜寻目标等于96 (十进制)* k8 _$ e% m7 P

8 \9 t/ }+ P/ j    cn eq! {) x" C8 N" ~# F
    搜寻目标的数值没有变化
% ]/ z4 ~' Y% W; r
$ G, e" c5 f6 u# O4 A- W    cn ne; @" |& s2 ?% y9 P9 c! [1 q0 V3 p+ X
    搜寻目标的数值有变化
$ c) S  u# M* h6 O# _, C        
: ]% T7 K0 U1 u& C9 B& Y    cn +
. B! h4 l+ V# ^    搜寻目标的数值增加
6 N, P, t6 [" X   
, R( F4 @% |6 I+ o    cn -
  n0 a2 f( @  J3 S+ c7 w$ K  j    搜寻目标的数值减少
& ~( v! U* R+ g" Z" z        . ?# A7 ]5 b% M
    cn +,3- i; T7 X% Q  Z5 v% A# E% f
    搜寻目标的数值增加3 (十六进制)9 |8 m! }" |) H$ U5 ?

3 @' P# q. k+ Y$ P    cl
7 l$ {& a" H! v# D    列出所有搜寻结果# A: S4 a6 n1 I, s6 N/ R
+ ~  [9 U! }$ ?6 M4 I/ ~, |
    cl xxx.txt
$ X! ]6 A/ U5 }3 }6 k" H7 {    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 Z$ v; O# \$ [; U0 n. U

0 Z. g6 D) }7 _1 w    1 C7 h- a6 |; o/ W9 Q) N3 r; ~7 j
内存监视点指令: wp, wplist, wpclear
9 S) q) D5 a2 u7 U2 A2 ?0 Z& p    例子:
. c+ m% O% w; v( H- C    wp 1234,1,r, k+ o) P+ a1 T+ Q* f
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1  u1 O2 x$ h5 g. w9 u, C
2 ~) Q$ a) L$ m1 [/ W
    wp 1234,2,w. v6 U8 b, m6 f. }. x+ Q; Y2 O
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
8 a& X4 B& Q" L7 N( i" T     
8 b- U( J' y' R    wp 1234,6,rw
' u7 g/ l+ }, ]      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) X) E+ T# N  U3 G7 O" @& a

$ F9 d3 g$ ?' C; |; I8 H% v    wp 23456,a,w,wpdata == 19 _6 \; l# N" ~5 _9 n5 t
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1; F' A# K: P) t4 {; g8 A9 _, U/ p4 d
6 [% Y" l  i8 h8 \
    wplist
/ \( r$ I% u: t( h& H3 f; Q9 x6 A      列出所有监视点
0 B5 o4 R3 A  @; |: R$ Q. X7 N( k+ Z& Z* F9 I3 Z# C+ B
    wpclear 3
* F3 R# P9 \2 R. K% e% x      删除编号3的监视点$ \0 P0 u' ^1 n, v. f: b) P9 x1 X

& \# Q9 D9 K8 e. b    wpclear
5 m) |2 {8 T- t& e' N      删除所有监视点
) A5 `" y* c! i9 F1 F: j( m/ B0 q; S7 ~
      ( _8 F: P/ E' E* z6 ~

% N8 I: ^- p! F$ v1 b, F* u程序断点指令: bp, bplist, bpclear
: K# S  \# N% O% q& c( L8 y    例子:
+ F/ `9 W/ j  `- A2 {4 x5 p    bp 1234. b6 u0 [/ W2 [
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, w! W- ?1 X3 {4 @7 l3 X
- e  x6 A% m# V& H5 Z! ~5 `1 y: Z
    bp 23456,a0 == 0 && a1 == 0
7 N' m% Q1 a8 L; o4 g1 f      在地址23456下断, 且中断条件为a0等于0以及a1等于0
! u- ?+ l* ~, W  I" T+ E7 `2 L% U: w8 L( G
    bplist4 {5 m' `" m( I1 e8 `$ o
      列出所有断点
5 }  M. Y, [# ]! `6 i# W
1 p3 ^! H5 c- e$ h( E# F, V    bpclear 3* s0 t; i# O4 }6 Q4 [% Q8 ]
      删除编号3的断点2 l7 D# `' d( O+ V1 y

% u& R- h2 X% Z! N    bpclear
9 M5 k& r3 u, D; b7 d. D( i; Q2 G5 Y- y5 k      删除所有断点
' z5 v/ \) H; ~% ?% T. U
1 l$ K+ X, U6 X      
5 D9 h  Y; K8 f      6 w4 k5 U5 @2 {4 A
跟蹤紀錄指令: trace/ _8 F( g7 }* o3 m( T; a; c
    例子:, e& W5 X$ ^5 Q
    trace 01.txt
# d7 v9 ]1 b$ F    跟踪当前CPU运行的所有代码, 输出至文件01.txt
% ?: C9 [" s4 n. ?3 p+ j# `- b& A4 n7 e' L! N
    trace off: R( B, M: M$ h- g
    停止跟踪, 并且关闭文件1 B4 N  B1 ?) U8 u: C3 ^

* D, q1 }" ^: U# I: U    trace 01.txt,0+ p/ Z: K2 N7 a
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 E! r3 O1 r, E, P0 D( I3 w
  {" l( Z6 _- ^- x- m1 A" j# L& z2 u
    trace off,0
4 {2 H) L0 s; k, _8 M5 n    停止跟踪编号为0的CPU, 并且关闭文件, a' M/ q: ~0 g1 f: B$ |: O5 n3 Q1 s

8 M6 }0 @5 e- U! f    trace 01.txt,0,{tracelog "A=%02X ",a}
- K; b& ^+ u9 h* b' P* A    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 Y0 {2 b, C' P$ C1 x  t
    并且在每一行的前面, 写上"A=a "4 j" H! A1 J$ Q$ y5 h. C
    "A=%02X ",a为一个C语言printf函数常用的输出格式
$ y; {9 x6 A/ ?' o    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 h9 N% ]2 u& ?    X表示为大写十六进制数
8 R, L3 g8 {4 e, Y+ j1 V5 F+ u( s. g: L8 K

" n1 O( ?0 n! {. t
0 L3 p0 m! \$ B9 i内存直接写入指令: maincpu
0 f# I0 S* O5 i. I" c1 e9 C    格式为 maincpu.[][]@地址=数据
8 ~" E1 m4 n$ f    第一个[]:
4 x2 a( d9 _' y4 n) y    o 表示ROM地址
8 K4 @3 ~, G# L, T7 P% h    p 表示RAM地址3 e; F8 c- W! E: M& U* E7 A4 c

: e; o7 e( ~( Q# ]1 m    第二个[]:! T3 z! |3 \2 _0 R
    d 表示4字节
2 a. R/ u5 W. _: N/ {) v+ R    w 表示2字节
' V1 U7 A4 j* J8 c    b 表示1字节8 Q1 h4 y+ U2 l$ I

% u  B2 a" I1 O5 F% c    例子:
0 l, n3 u( @5 I# A5 t- E% ]0 T    maincpu.ob@1234=FF1 Y) q: H! K5 m; `
    在ROM地址1234处, 写入FF一个字节
; t3 `/ t, K- s( o7 U6 _$ m& T8 W5 N% X+ A; l6 }
    maincpu.ow@1234=4E71: k: C% ^$ j& S3 d* s
    在ROM地址1234处, 写入4E 71两个字节
" W7 q' Q! w$ m1 {+ c  H& x4 d) n  ]
    maincpu.od@1234=600A4E71
% O. i5 x2 R- l    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ [$ I* _) b: D) ~# z+ L4 D  @0 L4 {6 M3 A
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写3 A; c2 c0 d7 ?) X
   
$ W+ B. s/ }2 u: [9 X6 O) @2 e* q" y3 N1 ?! J' n( l9 ?3 i' Y
其他:& V& O# c$ \, k. I2 u/ `( J6 @
    dasm 输出档案名,地址,长度: C8 d7 D+ ]2 p% S- z0 [7 g0 W) R
    输出程序的反汇编代码& a" O9 o% B  r4 x- h. m# _
    例子:
& j1 x7 p9 N4 j2 J  Z    dasm 01.txt,0,100000) |1 t4 p# a! \( Q
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt0 I9 E) X4 z& b# s0 _# A! F0 X
, a$ `0 U# b) d6 e0 u. w- S
    softreset
/ g* v2 v9 R6 c5 X/ N    游戏重启, 但不重新载入ROM# z) i& }2 e! a
5 R; Z( B$ ?: I- w
    hardreset! d/ y8 b( |5 ~# z
    游戏重启, 且重新载入ROM+ {# @; t& Y4 T( c- f
5 X2 X9 }/ r6 ?  S. Z4 v* U# b
    snap xxx.png
4 Q; l2 a# f- B4 l* ~# F6 I, u9 H    截图为xxx.png
; ?) Z0 y9 e2 Q
3 k; `% F9 D* U; d9 d% f% ^! ~. |  - v( b$ f$ H  ]3 B) n  J
  
: |% ]: _' U+ N6 m  a  , \; T5 L! L" X1 ]5 ?: \
热键:, G, i: B& a2 _, w
    ~ 中断游戏+ j% j5 ]! \+ C2 M$ a$ R' P- ^$ ]
    F5 运行游戏
5 W' j, o$ E1 w, p/ }* C* F5 R    F12 运行游戏且隐藏调试窗口* W! p  H* w. P( _* Q0 W! @: o& l
    F11 步入, 单步执行, 会进入子程序/ b# ^* j( @+ m. L: a- u3 T5 ~5 v
    F10 步过, 单步执行, 不会进入子程序' t0 c1 s: M+ [: H
    Shift+F11 执行到子程序返回9 G+ g0 ?; S% ~/ v& o, a7 G* p
    Ctrl+M 内存浏览窗口! U& k" b, s0 Y2 R) f4 |& S. m4 }/ A
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU6 ~; O( Y! _2 V

; m$ R- q. {9 Q# {{:4_94:}
8 }4 k6 L& D' O/ M8 J% ~% V' [. Q4 ^2 q& r  P4 r( ]

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2560 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
0 `. s! C& q1 @4 i
: V* G7 t+ V; {. ePS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东6 G2 e1 }* }  H% d
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-23 02:31

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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