EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
) ^7 |- M: a8 W  h" C- s2 |- H) N
很快速的整理我自己常用的指令
7 L: ^" M. X( \% f& \& p
+ n; B! m5 n' u{:4_112:} * ]$ e2 z. c- H2 ~
& j) w% w' J% p1 u
MAME DEBUG常用指令; M9 I$ e6 r" j) s
' k# X: T- |8 k! U  ~6 Q
内存搜寻: ci, cn, cl
9 ]" X+ l7 `: T- y/ e" K0 p$ N
" x7 X* M% g2 P- m5 g% [& o/ x, p    ci; G( y+ r" X% p' X3 |
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 ?0 I" f4 s6 ~. q
; O) m; d3 y* Y$ u    cn
: @6 ?  i0 L( s    搜寻指令5 I" [* q1 q* n
    例子:
9 E! d* O; t7 P; D+ l. a  i6 t* ^    cn eq,605 c, i0 T- }  w  k" K& h
    搜寻目标等于60 (十六进制)7 F" A# F1 r0 T
        
( [  v( o) n6 O7 @    cn eq,#96
( _7 X& D6 t) c    搜寻目标等于96 (十进制); D0 o2 D& S; M, Z7 t  {
& r* N4 I8 l. h* v) l
    cn eq
- W. ]7 a, A" ]6 E# O1 g    搜寻目标的数值没有变化- |& }- l+ g% F5 k& l3 v9 |8 j
# b3 p+ B% Q1 R" e8 A; [) I# z3 H
    cn ne
5 |: f% `' ~% G5 _0 ?1 ~    搜寻目标的数值有变化
- w3 `) X. [: {) c  h& z        
3 p; a+ T. i1 P! ?1 v/ ?* p    cn +
2 t# u3 ^4 Y) y. E& C) R) l    搜寻目标的数值增加" E3 P/ J1 X8 v. J
    ' o+ _. z' l. }" F
    cn -
$ q  \6 D7 l# d7 n. V- }. g2 f    搜寻目标的数值减少9 h9 l5 O2 X+ C7 X
        
4 D9 q( m; t9 R/ ^% X  ]    cn +,38 U* l; b3 M" V7 P& y- m
    搜寻目标的数值增加3 (十六进制)
: G/ T& P2 k; v1 n" m$ A) s2 U2 Q# D
    cl( C4 g- S- ]! ~
    列出所有搜寻结果+ n% ~, @) Y- Z1 S% V( V0 |

6 e* h2 r! M3 Q* A( l    cl xxx.txt
% b7 U8 R$ w" H0 J    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
4 m+ j2 m4 j& A; [4 U( Y+ ^" l7 E# [" j  A$ k( e% w$ U
   
  D* H  ]1 ~" f. c; Y: A内存监视点指令: wp, wplist, wpclear0 p; j, l2 |( X5 `
    例子:
! b& {( j- E7 x; y* c- M- ~" g    wp 1234,1,r. p  ~/ V2 \3 S2 A: l2 x, z
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 r: [( Q: S* W: p3 P6 ~4 y& B' W: w. s# k
    wp 1234,2,w
- N4 R; t! ?. g5 u3 r      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2  L. _7 x" h3 @, m5 g: s4 @3 o8 ~' N
     ) b" ~* i$ C* w
    wp 1234,6,rw
& d; U8 M/ A" W* i" s5 t; A0 {      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& ~7 @. K' }2 o& M% l3 f5 g2 Z9 m3 [7 Y" w
    wp 23456,a,w,wpdata == 1! g$ s( ]. ^3 p& d" e* P) q4 C
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 q! Q% V/ e: t
" l6 H% y% x1 l0 F% Y$ |( O: W# n2 e
    wplist
, g. k+ A0 F, F      列出所有监视点  f; Q7 B& t( e" Q
: J% z/ W9 Y4 }8 z5 }& l* u
    wpclear 3
! O7 e+ o9 l0 s      删除编号3的监视点
+ p4 r: n7 }1 C9 C4 N) L  d
% M2 L# G; r7 W3 w7 g, r% a$ u    wpclear
8 b# D& v( n1 z      删除所有监视点* L6 C1 b' B& T4 a
& A/ J7 X. y' l+ @1 N
      
$ m& V/ y3 G5 G: k( V. p0 C. D: L: K) J" L# Q2 h* Y9 E- s
程序断点指令: bp, bplist, bpclear
" ?, j8 U' M& f2 w5 T    例子:
. Q8 V! _$ K! N% Y$ H" v, Q/ X    bp 1234
/ W$ e: C) o( t- h- ]4 ?2 y5 r" ^5 n      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断$ m& E! F5 H" d& R
0 h5 M- U( M, Z' b( g  z
    bp 23456,a0 == 0 && a1 == 0$ m* `4 [  r7 k2 m& _2 T
      在地址23456下断, 且中断条件为a0等于0以及a1等于01 r6 ^" ~1 V/ j8 j8 Y; m
  [  s3 z+ }0 z: `& S9 o
    bplist& c% L% ?' G# c: U' y
      列出所有断点
) H* x2 }- c5 I  @
% J3 }; S' z2 G) N- w# {    bpclear 3
7 {% k  {5 O  p( w0 R      删除编号3的断点0 m; M  G$ w. Q1 }; N+ h, v
: l1 s2 [9 P- u) F4 A2 @. s6 C
    bpclear6 ]* n; M5 T% W4 h2 F+ p
      删除所有断点
% \* V6 B' R/ T0 w
' `4 z2 Y1 s5 R  ~9 [' s- m9 H      1 h6 q$ l) R, L( [( G3 i  q+ G
      
/ B8 o: O- |& n* {& B  L5 K跟蹤紀錄指令: trace
( C8 f$ w3 |, i# C    例子:/ f9 [; {( c/ t) U4 ?
    trace 01.txt
' e) k3 \1 F# `    跟踪当前CPU运行的所有代码, 输出至文件01.txt; R/ n3 J% _! F- Q5 C* t5 G
0 X* b* |% z) [0 i6 [
    trace off5 J4 X- p% m- f( d- Z3 y3 V
    停止跟踪, 并且关闭文件5 T4 }; q. J' ?, G: G+ G0 N7 V: a
% @+ ]/ K/ i8 _* y$ N' O& _. w
    trace 01.txt,0
* Q8 O& ^0 w7 e* `' ~    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ I1 V) f6 g- o& k3 a. I! h  a2 A; d2 m! \( ?! ~
    trace off,0
4 f8 C  W; @. {: g) |& k; @    停止跟踪编号为0的CPU, 并且关闭文件7 h# O# y- O% H, F; c0 P
) j" J9 }: @. K6 J, B: H" @
    trace 01.txt,0,{tracelog "A=%02X ",a}
% `- W: S2 E2 g    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 L# k% j0 _9 Z% S$ q
    并且在每一行的前面, 写上"A=a "
0 c3 m; ^' ~; u5 q0 m5 r    "A=%02X ",a为一个C语言printf函数常用的输出格式
; D3 H# ^$ q0 \6 _; ]: I    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
8 U* ?1 _% R) A- c/ v- h$ p% Y6 U    X表示为大写十六进制数& {/ N2 p0 E5 v5 O  u
2 @* a1 Y- N: B# T) }" O
% P% j) a7 [. O" U2 s% a& `

+ z2 \, A) k9 Q内存直接写入指令: maincpu5 T; C" I/ n5 ?/ R1 c, G
    格式为 maincpu.[][]@地址=数据' [8 t; |! m* h4 ^+ w: c2 n1 u
    第一个[]:
% x7 B; k' d) ]+ h/ s: t    o 表示ROM地址" r, R6 Z+ R# E0 K5 B
    p 表示RAM地址: U" A% @4 v0 |$ |# Z

6 A9 S' }" d2 R$ F8 e2 \+ B    第二个[]:
2 o$ t( _6 q; W% N) Q7 |- G    d 表示4字节4 r0 \9 P, @4 H. R! P8 x
    w 表示2字节
* m! a. u2 }/ U5 N. E8 z8 Z& t    b 表示1字节' h3 S8 T$ Q9 t. D1 e0 ?! X- ^
" Q, I2 E3 h. ?5 A# Q6 K
    例子:
, K: ~/ ]4 b* v1 i2 y6 d: Y9 s    maincpu.ob@1234=FF
8 t& k8 j2 |+ O/ J9 f  Y1 ~/ W    在ROM地址1234处, 写入FF一个字节
- T% e6 r$ `& `! k/ ]: G- n
, Y, I* s) L5 k; f    maincpu.ow@1234=4E71
& J4 D9 V. r9 g8 i, H    在ROM地址1234处, 写入4E 71两个字节
9 x/ j' f. V5 T9 s5 p9 Y
& F8 L/ S1 @! n, [    maincpu.od@1234=600A4E71
0 B% ?3 }2 \" W' s4 p. X6 J# q    在ROM地址1234处, 写入60 0A 4E 71四个字节
  I. N6 i2 R- U- U0 ^0 N) r7 d) n1 p/ i
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% l8 J! i& K2 k9 r5 R0 Y. ~   
; X+ G- w  D& X- T! S6 M' t) m6 b/ i' s
其他:
8 H" |* d( J" x$ L5 u    dasm 输出档案名,地址,长度3 [  O# }, o* o- F( O
    输出程序的反汇编代码
2 ~, t% K$ f! E" {& X, e2 G3 g    例子:
% e, T3 v2 ~( `; A    dasm 01.txt,0,1000005 k' `& }- H9 R
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt( w, \/ j, d9 c% s! D" G1 w

9 w0 q1 b: U, M  u7 l    softreset; Z2 n6 H9 W$ a  z
    游戏重启, 但不重新载入ROM5 e  F  Q$ h: A% u

7 a3 x4 a0 O3 }; a8 C" U    hardreset5 E* t/ Z& T. J$ f1 B
    游戏重启, 且重新载入ROM; n0 `+ G$ O+ o+ \, u/ `  Y
  _; q' Q9 w! Q/ ^- y
    snap xxx.png- |* F8 Q3 a$ W1 j' e* j
    截图为xxx.png
4 W$ ]/ \" }- z! D2 S! i
! \' N/ L' z% R! v. P0 c  
+ _/ h8 @$ f- F/ B6 Q9 M9 f  
" X: u( [2 ?/ k& X/ }9 L% Z. k  ! s" H% {4 f$ y# u
热键:) j$ N" B6 [# b. d" R
    ~ 中断游戏
9 }' \4 l9 |7 p" s5 E9 |: t% f    F5 运行游戏
, k# r4 o7 J( s; J! b    F12 运行游戏且隐藏调试窗口2 l7 ]; ~  q0 j1 T& O+ {3 d
    F11 步入, 单步执行, 会进入子程序$ B/ r$ g( e" p( h$ J% m
    F10 步过, 单步执行, 不会进入子程序
1 P3 C9 G6 v5 }# y% t  @    Shift+F11 执行到子程序返回
7 W+ l7 B% V& v1 s    Ctrl+M 内存浏览窗口$ t$ R6 S* m( l
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' |" o% q( z( |& r$ c
+ g4 W- y: }- k1 K  w{:4_94:} + K3 o" ^! ^; I7 t$ W1 t0 R6 @

5 o3 `7 U1 S$ e9 f, x' G, G

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2582 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
# e/ j: F3 _5 q! g# J
+ t4 a$ W  }' v% M; S0 Y3 E: 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 | 显示全部楼层
要详细些的东东
# A( F6 X7 V1 m7 `. u: t11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-29 12:55 , Processed in 1.070312 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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