设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

欢迎注册EMU618社区论坛

您需要 登录 才可以下载或查看,没有账号?立即注册

×
, t' g8 w1 t! c" w; v
很快速的整理我自己常用的指令4 q" M1 \! V- E, p) ^4 s
, u1 {% A+ `8 P; _
{:4_112:} # [# M- [2 J  i8 ]) s

" Q, f3 {4 N, {; Z) Y+ RMAME DEBUG常用指令
9 V# t. Z5 r. h- \4 F6 p2 f5 ?) }3 s  x1 S# @
内存搜寻: ci, cn, cl% S- H. O1 m8 R+ R  g: e0 a+ Q

; y6 U6 ?7 D5 z4 O2 t( N) T0 ~    ci
, c# D3 E& n$ u' m, ?  @2 F    搜寻任务初始化, 每次搜寻一开始一定要输入这指令) ~6 S0 U9 B& V$ y% o& B

: O- n+ ]$ X; J9 B, U0 t    cn3 J+ J8 t8 }! b; q% k# O3 e
    搜寻指令5 v9 }: a+ S5 n. s4 N  {
    例子:
& V. f/ C: N3 e+ ]& V5 Y    cn eq,60, I" i# n7 U/ U5 G1 H
    搜寻目标等于60 (十六进制)
- O; A+ n+ a6 ?+ {; W        
8 g8 O' u+ |2 P" R! i7 q2 A9 q    cn eq,#96
( s. o1 g8 Z& I3 C2 P$ _% j$ r    搜寻目标等于96 (十进制)
. B/ g; D, @5 N* X# Z' D- U1 Y9 L' q
    cn eq9 G9 C9 I6 e( y( j" U9 ?& L7 m; O
    搜寻目标的数值没有变化
/ q6 p9 a' `2 V: L) D( s& S# |/ p/ P' ]- h
    cn ne4 I' V9 r- q0 k
    搜寻目标的数值有变化0 Q. R5 ~5 |$ Q
        4 S' j; s6 u3 V( c. U# e
    cn +
' {6 z' t4 [. X4 C' Z* W( N    搜寻目标的数值增加. P/ J1 v! h( w
    & V0 ]; j2 s" w- F# V7 V! l( q1 u
    cn -* B& N" Z* N; o% F) q1 }7 q2 U9 `
    搜寻目标的数值减少7 |' R$ `1 O5 z8 ~+ l& v1 Z
        
7 Q% A# c6 K" _* ^4 B" ^0 o. M    cn +,3
/ x* V1 Z! @8 r8 R, V    搜寻目标的数值增加3 (十六进制)
4 `" R9 c0 p" m. M' W* o
9 }" N2 U$ ^  ^2 L( J& E- o2 @) }    cl/ |3 }8 I' N. o! t
    列出所有搜寻结果
5 S0 t$ @6 R/ s5 S5 N! n+ v+ y9 n" U1 ^% ], A4 x. B
    cl xxx.txt6 j' }# H3 Y% O0 h4 I
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ W- ?! y" V3 w$ ]5 w
5 L1 |- B8 I$ a) P; k   
! L9 y, k$ o- B* z2 A0 p内存监视点指令: wp, wplist, wpclear
0 X6 ]( A( I* s8 }2 ^3 X! g    例子:
% l* V- k$ h: v0 e4 B8 X5 |2 g    wp 1234,1,r
7 [* }# W$ P) x4 S      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* s: B, s) y  W( h
9 \' g5 t1 p, p* A
    wp 1234,2,w) L. ^/ @; n' E; Y- z: s9 H! u
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2/ l% N- V; f! g0 ?1 a
     
' G4 M% X' W  ]. ?    wp 1234,6,rw
; I$ |( e1 w  L$ J4 {      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度63 w; Q" E  Y; I) w. E8 l* z/ V
' `2 L$ c! v# }/ r2 C9 V3 ?) O! l
    wp 23456,a,w,wpdata == 1
- K7 ^+ E' R4 h  \- X6 E4 _: z      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" l0 R4 k* J3 ?3 T
# v8 h1 l6 N! o# C
    wplist7 r) J+ M+ w; V& r  Q. a
      列出所有监视点
9 D) {. X) b* ^& }& D  l
. U9 L- R! Z4 P* l    wpclear 3
  v& ^) \* b$ Z: |" H2 V      删除编号3的监视点: @7 @# J% v, e2 v" C& C# L4 @7 y' f

- G( z5 q- F3 X2 E- G* M8 P! k    wpclear: K! o! a8 _/ G  p
      删除所有监视点
! N" y; l# Y7 d: V! V
$ m+ q0 b6 R& s# r1 q/ @      
4 ]/ |% t0 J- Q' H: [9 _
9 \! h6 v5 {8 S/ ^9 c程序断点指令: bp, bplist, bpclear
1 ~% K4 B5 a+ F, Z- m    例子:
1 a% j+ z6 a3 E1 c5 Z$ Q    bp 1234& g( r4 J  W1 W0 V& A( v9 l
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& H8 p/ H  n% b7 q

& ]+ O6 M9 i# r$ Y& {& j1 v# ~/ c    bp 23456,a0 == 0 && a1 == 04 r( f+ w1 U2 E
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
- V' _" I9 z& w9 k2 U' g5 `6 j: Z2 I. J6 N
    bplist  c* S8 g% _7 ^# Q: u, Y7 c( g  J
      列出所有断点& d* Q! B8 a- g2 t' f5 ?. e5 \- @6 b

% N3 `) X# S: }) y! V: m    bpclear 35 \& z# R' P% ^  T0 ~
      删除编号3的断点
  x7 @7 r, N" b2 J. _1 ^
- @8 r! M# X/ o    bpclear
) G( T* K! Q& Y& ~0 n2 K# R" R% K      删除所有断点
+ S; D( \1 j/ V( m
! [+ ?2 n; f% ^# h% [. ~0 P3 R  l      : R) C8 J: w* ^# x( w& K
      
( t% {' N; q) W( ~跟蹤紀錄指令: trace: x3 f% q0 }8 P5 E4 g* A7 g
    例子:( Z3 K9 ]1 A. X' N7 d3 X' R
    trace 01.txt# b  _2 F" T8 F5 q
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
. W$ e  I2 d2 M! P: j
! Q% \$ Z- y) t/ }    trace off9 K. n% F; V, `% a
    停止跟踪, 并且关闭文件
. i2 b/ Q% ?1 b# N# [' B, N
' p1 f: {" H! \    trace 01.txt,0; y# C% {! t0 D# h/ A
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt3 h! y8 Z8 |) ?
5 o; z2 m8 c0 _+ _+ [$ Y. l
    trace off,0
6 d% `" l" s" ~" K( d& j+ `    停止跟踪编号为0的CPU, 并且关闭文件
7 |1 g# d1 L6 y- j7 \) C1 U* K. g1 I$ \3 E7 G. k! a4 C2 A7 L/ j( J
    trace 01.txt,0,{tracelog "A=%02X ",a}  @: S, b9 M; d3 |/ u& I0 O2 B5 z
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & \4 H8 Q; w, v" F
    并且在每一行的前面, 写上"A=a "
8 D0 X) z9 m, j( E2 c% u    "A=%02X ",a为一个C语言printf函数常用的输出格式
2 V7 ^* x1 I/ a, H+ L( n+ r    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 ~9 m+ s: t. ?* s. I* |
    X表示为大写十六进制数
1 J& T% q, A. u. u( g2 @( U: K; z: ^" J8 X( W4 p- w/ @( k

0 L2 T" o* ?% c6 T
/ ?7 H/ p% A5 l. O4 \5 F  d% q内存直接写入指令: maincpu8 p  f% \$ l+ X0 ?
    格式为 maincpu.[][]@地址=数据( c2 U2 D, E7 h" k0 \
    第一个[]:
" ?3 `' a" I7 o# m/ K- K    o 表示ROM地址
) Y( J/ B* H! c% N    p 表示RAM地址: N; o; G- U1 v1 M8 S% Q
1 N* N* n: Y6 q( D
    第二个[]:' b* F. i  s$ A  Y
    d 表示4字节
( F: t+ @* L  p, i    w 表示2字节" ]  o1 d4 s/ H! j- d
    b 表示1字节
8 n" x; P7 F$ w5 a! h# Q0 B% y9 z
0 }, S# E  @/ L+ }    例子:
# H3 R8 |7 f5 K0 |' [    maincpu.ob@1234=FF2 v' ]+ Y$ O$ E" F0 O( S
    在ROM地址1234处, 写入FF一个字节
* m& m5 {, h  k/ ^2 B1 U9 w$ R2 w2 F) v
    maincpu.ow@1234=4E71
' K3 N( s2 u: V, Z0 S    在ROM地址1234处, 写入4E 71两个字节
# U, q0 P5 M3 e1 x
# l  C: c  }+ D+ @    maincpu.od@1234=600A4E715 ~2 t; R6 R6 n  g: O, w
    在ROM地址1234处, 写入60 0A 4E 71四个字节' x. I* I) b9 f. u
& {; w( K" A( X0 v+ y; c3 O
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 h! b  Q" A. L$ p- Q: \  W$ m    0 u7 c, i! P: C9 ^
' Z- ^; t# O& V* t. v2 K: s
其他:
' }7 T0 Q/ N8 l8 u6 k7 k) q    dasm 输出档案名,地址,长度6 o4 p- G  G" z" F! |
    输出程序的反汇编代码
0 a% S4 ~  D" M- W  M4 L$ b( D    例子:1 I) w8 ?9 A4 e3 o6 ]
    dasm 01.txt,0,100000& j! a3 K, D% E7 ^% x" ]  H9 p
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
  Y3 K4 Z2 d! H$ i4 }
1 J1 ]6 H1 G7 V6 U1 H5 `0 T# t    softreset# |# ^- a+ P, A+ k# h
    游戏重启, 但不重新载入ROM
/ R* E% B* n6 O: Z5 M1 u- n1 n1 M; @( L
    hardreset
, i, R8 V! [8 D+ @5 s5 {/ [1 v    游戏重启, 且重新载入ROM. Q. ]6 C- q6 \* G8 J

7 w7 C+ H$ s  q    snap xxx.png
. T6 R/ M: }9 R& u/ k    截图为xxx.png
4 z) C$ {+ }: i' e* v* v9 @/ m9 a' r2 o6 _
  " E  a9 v( w0 q6 Y: ?
  5 h: b$ q; Q& D( d7 _. Q! j2 @
  
6 v& p: m1 t- o* Y% L- B热键:
+ {% u. ^6 \; R; }    ~ 中断游戏
  z# C& z# `8 |2 z1 H$ s1 J) Q    F5 运行游戏
  r9 v( O& T/ J- C7 [# j/ h    F12 运行游戏且隐藏调试窗口
0 g; Z! m8 K& }7 Z( D& s, C    F11 步入, 单步执行, 会进入子程序  f. r) \- D/ n- T9 R! E
    F10 步过, 单步执行, 不会进入子程序  }* h$ `# A& q* g$ H0 X, ]7 y; n; C/ ~
    Shift+F11 执行到子程序返回
+ c$ I0 A- h" R1 D  J5 i    Ctrl+M 内存浏览窗口
" l' |+ X' |- M# B    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- r$ Z2 S* t/ p& `1 p

, Q  y$ G# d' e+ C9 @! ]4 N{:4_94:}
! _+ u  o. }. y7 ]' Q; W3 F& z9 O& X  L; H. q6 D& W8 e) \

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2550 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
+ o5 u' C, v2 _9 E& C; f8 q( I' j, H$ d9 ~7 f
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 | 显示全部楼层
要详细些的东东2 F/ l* [  A: n8 E: |6 a
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋

GMT+8, 2026-3-7 14:36

Powered by Discuz!

© 2001-2026 Discuz! Team.

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