EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
* u; X' ^0 t; U- I% d* B" M
很快速的整理我自己常用的指令
9 \" g8 b# n9 V: Y3 P0 a3 w9 s: N9 M, Y2 U6 D
{:4_112:}
' f' f$ S8 ^5 i+ f! Q/ C& Y+ v  D: c: F& }) J% |3 J
MAME DEBUG常用指令9 A6 u7 Y+ A3 K# ]  R. p
' n6 |1 w2 Q& H+ e1 t0 w
内存搜寻: ci, cn, cl; V* p9 p; n$ X) J2 U8 X, F
3 ?9 E/ m" d8 s8 }; j  m9 I
    ci) B+ ^3 J1 r  u/ j* ]0 S! k) h
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令1 W& j3 L8 k* [& \$ d6 T0 u
$ X5 D+ q! j9 S0 N3 J# E9 a3 M
    cn7 x: E1 N. Q8 Q2 a( j
    搜寻指令
$ |' G: D  _  U+ I7 o/ V    例子:
( j3 i7 C' R' O( w    cn eq,60
& ~$ d# S6 Q5 S5 I% S+ l% s- C' }    搜寻目标等于60 (十六进制)
! D' R+ [8 V; N% _; F        + `" W/ n( w; N( H, Q/ U7 N
    cn eq,#967 T& ^3 t5 t. c# t. }$ `
    搜寻目标等于96 (十进制)# y- X1 t# |+ F/ a
) f/ C' r9 ?6 ?. D0 A
    cn eq
4 h7 i' a: W$ k9 R7 H3 u    搜寻目标的数值没有变化
+ ^2 T1 ^2 A! K$ {$ ]# e2 K( V" U4 {
    cn ne: g  m9 x' B3 O
    搜寻目标的数值有变化' g! d. d( _% S" Z
        6 Z& t0 P; G9 N5 a6 l2 g" {9 a: F
    cn +, M; I. o$ B8 C' d6 p, x) l* [
    搜寻目标的数值增加
( y( I' {8 d$ z: u  a/ r7 F; _( X  e   
2 ]6 D, |% H8 p" ]    cn -3 F4 F( P9 C  g- \7 n2 P
    搜寻目标的数值减少
  C2 Q1 w% |, g0 V$ J# u/ ^        1 @' r1 \* K4 M
    cn +,3
8 P6 W2 L& y' Q( e4 k) {    搜寻目标的数值增加3 (十六进制)8 g; H7 A* z( j4 [3 z6 E

8 h% a0 p; m" c* [/ Y3 h    cl
& s% V0 T- t/ ~6 z    列出所有搜寻结果
0 X7 U9 S5 Q5 ^& l' u  g3 u, ~
  N$ Z2 e. i: d    cl xxx.txt
5 x' |$ T! U; A4 m1 W    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
. H7 X9 r+ U2 H, l3 q# J3 o7 A
  I4 Y8 e) @- L$ ]    0 U4 ~$ Y1 L. j% g
内存监视点指令: wp, wplist, wpclear
3 Z# @3 a7 t# O( }3 u$ {7 C    例子:
3 b% ]- {- m" @# b# ~: B    wp 1234,1,r/ K7 ^: W; {$ G# s- }
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
  `0 M; S& [* H$ p
2 @$ _$ x2 m# M    wp 1234,2,w# c# V: Y7 H# V/ `& S8 P
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 E+ u  h! Q/ V& I  a8 I+ i     
/ @& a1 D$ v7 f  M/ d. a# |    wp 1234,6,rw
: }$ F2 w) W+ k8 w7 `5 h+ J      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 [1 }8 s2 A- c- B

+ Y3 K3 {/ C1 s' M    wp 23456,a,w,wpdata == 1
7 ?4 W0 f8 b& v9 _, U8 y! f      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 t" g5 f& q0 Z6 C$ D9 |6 W% ?7 r" m
    wplist
$ R0 V& \, L# T1 s, o) g      列出所有监视点
! Z0 U: E8 h' g, W" l' u2 A) A& H. t/ r) f5 T
    wpclear 34 F& X% S: K: E' M- |5 P; L
      删除编号3的监视点+ K: b. E' _2 T! b; G7 L/ }8 _4 ]
' n. v) C, `( q% i# w$ t. k
    wpclear; Z  \8 C  @/ W2 B& e; h4 K
      删除所有监视点
6 @& g7 l1 `' d
" p5 ?; e: _* K% t      
; l, }# C2 ~9 O8 i0 [4 ^. z
4 U1 z4 O6 ~4 d, B7 f* E, f程序断点指令: bp, bplist, bpclear  B) C" {5 c/ B+ j# h5 \# N
    例子:) R; H& S/ p/ K' `
    bp 1234
0 M$ A6 B: c' L7 R& Q) c      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
5 N# [0 D" W7 o/ d
  z% o3 B4 E( y    bp 23456,a0 == 0 && a1 == 0# ^0 L% l6 z( N( I, R
      在地址23456下断, 且中断条件为a0等于0以及a1等于0; B! E: i; g$ i( d8 O5 }7 F- K" b
& U! s: [0 ?, {5 [% X5 _! I
    bplist6 O( M# E3 ~2 ^+ A
      列出所有断点
- h+ T! o/ C. b3 `/ i( b
8 X+ u+ i0 j2 m% o6 Y5 N! r    bpclear 3* H0 |  l( X( P' p  X' X& F& d
      删除编号3的断点: b# j( `) c# F+ u5 o

5 m$ y5 |( I: V6 q" L    bpclear) `. \. A3 f$ b: D5 k2 b) N+ ]
      删除所有断点
4 R! E# U+ S  J- f
. Z$ y2 x1 H- r/ z. Z      1 N( C4 i$ _) j  T. S; B
      
8 u) k1 i2 P4 l( E  R6 q2 F9 T. y% H跟蹤紀錄指令: trace
+ E4 p; `5 M! f* ]( J    例子:: K& Q9 [" }: K- B* U) i2 t
    trace 01.txt% U/ W4 _6 H9 D' O- b& A
    跟踪当前CPU运行的所有代码, 输出至文件01.txt, r! v" V9 k! s) V6 @+ O
" b( J/ A1 u0 T* d+ x' i* p5 u
    trace off- a: @+ h- K2 N) L0 ^2 H
    停止跟踪, 并且关闭文件) L( f7 H/ O: P' z! q5 {9 V
& A9 \2 c0 P; b$ P
    trace 01.txt,0
' {% C- Z1 |- S6 d    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& \( N) o. h& p& A5 A
: `" ]: j0 D7 a" e( R$ n7 }    trace off,0) m8 b9 R/ P4 g# D4 U
    停止跟踪编号为0的CPU, 并且关闭文件% R/ w, |, _6 @/ a) R. L  q' d3 I- m
' Z: l/ f- E7 B' r6 F8 D7 ]
    trace 01.txt,0,{tracelog "A=%02X ",a}) m: ?% Y! e: K$ z' T  G. d7 e
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# o1 G) G" e. x- D2 P7 c    并且在每一行的前面, 写上"A=a "
" I% H+ O7 C5 B/ P    "A=%02X ",a为一个C语言printf函数常用的输出格式$ G+ J* u# L1 p
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
; g6 I- c( s' a- D, U7 v8 p    X表示为大写十六进制数. z+ B; Z* D! I3 j2 L( I0 T6 R! U

) Y' S  T, b4 V% c8 {; T: U5 `; O" R

) ]/ Y5 N" x1 I' Q5 h内存直接写入指令: maincpu
% D3 b2 i! J0 @) G    格式为 maincpu.[][]@地址=数据
; O: ^5 J' D& j! V& \, N    第一个[]:
/ M% G  K2 G' @' P! J( L    o 表示ROM地址/ D5 Y0 |. ?6 X, i( k
    p 表示RAM地址
8 ~4 v3 Y2 n. F6 D8 `
' B9 m0 N% w" B& n8 _  P    第二个[]:' Y: Z6 ?+ D0 P
    d 表示4字节
; `( s1 D( u& N  [% W    w 表示2字节  o% G* W( v7 B" }, i
    b 表示1字节2 w/ `) X" V9 s& ~; V$ z$ ^% R, y$ i
: W, k0 A/ b3 `! }! r
    例子:. H9 F1 Q" j( ]0 G: f9 D
    maincpu.ob@1234=FF  ~- Z/ J9 k; q2 S
    在ROM地址1234处, 写入FF一个字节
' E9 C  w6 G$ G; n! g* k6 C
% |) @. A2 M# m! `    maincpu.ow@1234=4E71( m& y% `; M1 J% w' P5 l+ @6 `+ U
    在ROM地址1234处, 写入4E 71两个字节
8 i1 L* d0 b5 m1 [5 K: Y7 h2 ]/ J) r1 ^' g) k2 C
    maincpu.od@1234=600A4E710 W) m1 U" n1 q& Q# k! M
    在ROM地址1234处, 写入60 0A 4E 71四个字节% C3 t% F7 p. C0 [" T8 R7 e
( c% n4 K: K7 b& _
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写  H6 [3 [: r" @! x& R, ?
      Q3 J: N6 T: k2 X& Z

$ t! b; z  b# {3 a" [' U1 Z其他:
% @4 e1 v6 t; ?) V- `$ }) }    dasm 输出档案名,地址,长度9 Q4 E6 ~: E# S$ V. q
    输出程序的反汇编代码& J4 O9 W& s) \! Q8 j* R
    例子:
% w: g" k5 Y7 N9 M    dasm 01.txt,0,100000
8 q& r; \- _. Y4 d) \8 i7 K  l    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: y/ e  x; I# e4 D" q: C, s: Z3 @- L* N3 D2 _) U; ?  R
    softreset
& ]  B: D% t9 c2 |  ?6 `. d    游戏重启, 但不重新载入ROM
5 _, w! p) M/ |. `- x! M/ j
5 Q& L  ~# o3 H3 w& @* n7 q# u    hardreset
, h! t" d0 h7 A/ f% m- [  r    游戏重启, 且重新载入ROM
9 `1 R( j, R5 R
# q, Y( ^* E* r  \" j; b    snap xxx.png( F$ v  t) x3 [0 O2 T0 f  X
    截图为xxx.png4 h+ T  n2 V' [7 t! B& Y

2 G) R- Y! |3 Q  
* ?4 z7 [7 C. `8 S3 b. f6 d  1 Y- p6 S/ f# [' Z- m9 H1 y/ H" y7 E
  ' x* z# p1 p' A
热键:. ]2 B3 f  m& f; m$ S" @/ w
    ~ 中断游戏' m  s2 s& K$ y- R& ^
    F5 运行游戏
' Y$ h9 F3 L* r$ s% x( x" J    F12 运行游戏且隐藏调试窗口$ ?( _: N2 \8 w4 G
    F11 步入, 单步执行, 会进入子程序
- c4 T+ ]. f6 D0 R3 ~+ C% \    F10 步过, 单步执行, 不会进入子程序+ q) a3 x& I5 ]+ w* j/ v& B/ X# V
    Shift+F11 执行到子程序返回
; {- x: P, L& w9 J    Ctrl+M 内存浏览窗口
- G0 ]. A: {; Q! u) X/ X    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU9 T7 O0 k  y0 ]% \

5 Y* q7 `/ ?' }{:4_94:}
( {! G! O* @. {7 `
3 K& r6 [% t- ~7 Q% }# ?

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。1 o  K$ N! c; ~' `& y. {' W

8 ?4 s4 R0 b" K: o# D8 y; b( HPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东7 l' I8 `( k( o. V8 r% u
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-10 11:01 , Processed in 1.083007 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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