EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
& h$ l- B1 A+ J/ V8 z/ a6 z
很快速的整理我自己常用的指令
0 n2 N  m7 u! R2 |0 n2 d$ Y
% k: a+ d4 p0 y- B' N{:4_112:}
* z% l( V  h! Q
0 ~) f& x  G  ~. S5 m: `MAME DEBUG常用指令  p) ^1 S6 k! Z4 ?7 a  f" W: x) y
( z+ `  V7 Q: Y3 z# `+ F
内存搜寻: ci, cn, cl2 m( ^; R/ O; I
" m7 g3 ]+ F2 i* E. N2 V: c# }" U
    ci
! h* W6 Y& v2 G, ?    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 }  |! r3 S: `
% K" G" o3 ]# S    cn( \5 K, p+ n$ i# Q' Q
    搜寻指令
$ P' o+ M4 G/ ], `    例子:( j, Q+ w  q( p" T% c  [' G
    cn eq,60) `* u1 o1 \, p
    搜寻目标等于60 (十六进制)
8 M- t, o( J! f        $ l8 R3 G: e* y- U: F( A" ~
    cn eq,#96
; {! ], I4 [: p0 N! L$ B# O. Z/ u; O/ E+ ]    搜寻目标等于96 (十进制)9 ]) L, L' g" t! {2 i4 `8 f6 Q, A
9 [* u* p1 p5 E, M* N& Z5 W
    cn eq
0 o- F# j' {, q    搜寻目标的数值没有变化+ u0 r3 V1 s! K- F

( n  R' W8 ]. _! Z8 y    cn ne
' Y- ^4 W7 G* _) E  W, p    搜寻目标的数值有变化
' L$ ^+ W! @7 L% b8 c        7 _" r4 ~1 p* \. F! o& g% ^4 I( D
    cn +5 `* }' ^; n$ f/ H
    搜寻目标的数值增加
$ C" _+ F: U* p& d. [2 r& w   
! A# t: D8 V/ Y6 K6 M, o+ e& ~    cn -
; R8 J, |: j! r8 M7 N+ r    搜寻目标的数值减少
* U! B+ [% x3 q4 {        
( N- ~. y6 R6 h+ Y( }2 `, A    cn +,3+ |- T5 p+ c9 _7 I( Y
    搜寻目标的数值增加3 (十六进制)
+ l, y2 U: J( [. q7 ~2 r6 r
7 J1 F2 G- {; T    cl; d. ~" P" o1 V$ v# v9 H* i. ~
    列出所有搜寻结果3 N& w6 E) R  ?/ g
6 W. y# Q. r2 J$ A) o4 h
    cl xxx.txt) b$ |7 A) i0 i  g  j
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* C4 E/ {' `5 j. d1 U" N$ I: y6 p& E! c8 J
    - q7 @- E0 a0 R; B/ e; `
内存监视点指令: wp, wplist, wpclear5 B; Z- r9 {* ]7 w7 O2 o1 W
    例子:
7 X6 V* Z" `% b& s9 v    wp 1234,1,r
/ p6 ^$ i8 a! z4 `      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: j) \' i. z8 p% \& T1 s
: M7 |, V" }/ Y" a% K7 D/ K& [' @$ {    wp 1234,2,w  P$ Y1 r' k! d. z, b: V
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度25 o- }  u5 m( o. x! W) [8 ?
     
7 ~9 v. x  G, W' K# i* o    wp 1234,6,rw1 }; X# {" W. V( J2 V# f' S
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% r& x! c2 W- m: @4 W

, v' D3 t7 n; Y' O6 `* z    wp 23456,a,w,wpdata == 17 g. C. |4 W9 w3 N( P
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* h% m& Y6 \) e) {2 W. B- @/ `5 {, p5 b6 R1 I& \1 X! i
    wplist
4 {/ P9 g$ j4 T, E' `% G      列出所有监视点" D- j! N( P. O. i* w- M, o

+ q8 O: ^* G  b% R    wpclear 33 A. ]! t( U2 |3 x) b
      删除编号3的监视点, o9 `- U, O3 K3 s; D" l

7 ?5 C+ C; q7 u, x! `    wpclear& N: D" N6 D& |' ]- R
      删除所有监视点
  r" d# Q! f" L0 j" V1 @5 c
+ w" n. C0 j: ?: g! {5 r) K      
6 W* J& J/ p+ R. Q8 n7 @
4 ]1 Z1 f: h: @' q; l/ J程序断点指令: bp, bplist, bpclear
5 c0 O7 Q2 i. H; m3 P% s& P    例子:
9 }* g  p* d$ x0 x. y2 ]    bp 1234  ]; @/ e( |7 {3 v; b# a
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 I# m( _( f  t" L& U% \" W
- w: V0 g" i. g9 o7 ~* K. k/ R
    bp 23456,a0 == 0 && a1 == 0
: y5 c- Z; u: o6 ?  l      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' I; M* ^0 q0 R& n- l7 K% m
( u& F9 l: W' t0 [7 S" I( E    bplist
$ ~+ }. y5 g& U- X) i& w1 Y$ Z  P      列出所有断点7 i7 T1 h4 P0 b: ?

' h: R, h2 j; c    bpclear 3! k3 V( E* Q+ [' `" h/ y' J
      删除编号3的断点9 C* f3 p8 M7 _) p) S( ]
  B0 a/ g' G. J$ N" z6 y+ m1 D" |& t
    bpclear5 g0 c& y# v, i4 V; I0 x
      删除所有断点
1 s$ H' p; r. h6 f
; |) M, b$ z4 }      
% }' d. `( L1 Q  `      : x6 r2 u$ l- j+ ]  q9 Q, B
跟蹤紀錄指令: trace
- L2 q$ X8 Z4 ]    例子:
: Q0 Y4 L) Y2 Y; K1 Z- r    trace 01.txt, e+ i# f( X5 L4 ?9 |; z7 g7 b
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
  r9 W+ d9 @9 ~# ^. k# x. h  h. R1 s1 g" l
    trace off, N; L. z  y7 D
    停止跟踪, 并且关闭文件9 L: N9 ~+ I" s9 |3 Q7 }( j6 Z+ K
1 ~' C3 ]) a+ q
    trace 01.txt,0
/ B) \2 ]7 b. e" B    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
/ v' `: U, C/ P/ n  M# c; U+ m' U& Z$ L2 }
    trace off,0
8 l) e, x1 q5 v4 N$ h3 P    停止跟踪编号为0的CPU, 并且关闭文件& b2 E" ~( O2 d3 V7 p$ E1 J

: L4 u0 q4 k6 h- |7 h    trace 01.txt,0,{tracelog "A=%02X ",a}0 u( N% A$ Q8 Y3 v
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) A( D3 ?# @/ x% `: l1 _6 C7 G    并且在每一行的前面, 写上"A=a "4 h; G+ K4 I3 e* m# @
    "A=%02X ",a为一个C语言printf函数常用的输出格式
. ?3 t2 v/ U% q- V9 I, g1 X# K    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
" |: I& @0 i" _. s& D    X表示为大写十六进制数: O" P- M5 X" [
. K/ e2 N. E/ s, m% l

4 _/ M$ L7 L6 ]5 V
2 v7 a% }$ v, D/ B- F7 k! u( w内存直接写入指令: maincpu
+ J+ G0 B  o8 m    格式为 maincpu.[][]@地址=数据
, a0 |" z4 a1 o2 A9 z    第一个[]:
9 n, x: |+ u+ }7 A9 B1 U) x/ d    o 表示ROM地址& c; U; E# `4 L+ P- q
    p 表示RAM地址
, f. c( x) ?( h0 h3 {3 R4 Q
0 Y! C$ b9 L$ J1 A    第二个[]:- i6 y+ R% d4 a& i1 F, J# J- Z/ L2 b+ k
    d 表示4字节, D4 O8 U+ z' Z! h
    w 表示2字节
7 a0 v+ x. k  A! D/ c0 @    b 表示1字节) Z/ d5 ^4 t' S9 u6 j$ H
4 M  p6 K! `+ D. h: Z* B( @+ d
    例子:2 c) ^+ K6 ~( m: z1 e6 C
    maincpu.ob@1234=FF
! [& `9 D- A+ ]/ P6 s5 H    在ROM地址1234处, 写入FF一个字节9 A; e+ V$ A; h) L; o" c1 L

- G, A$ O# s2 s    maincpu.ow@1234=4E71( M, k5 E" P, C( F! w
    在ROM地址1234处, 写入4E 71两个字节
/ z8 `1 [, Z. o" V, j/ j' w  i; W9 k; `7 v: B. i& ]
    maincpu.od@1234=600A4E71
3 S6 U- I8 N5 r  L+ j* y1 B    在ROM地址1234处, 写入60 0A 4E 71四个字节
1 E% N2 g8 N/ V/ v% o9 n  a# [4 a  }+ p: M) q8 q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
7 `- d$ ^, a2 B  x) a" r1 I    ' {# `* S. M' r% Y/ p' d
/ {1 J9 \6 S- f4 l3 _) y: Z1 W
其他:
) X9 ]& Q% I$ R    dasm 输出档案名,地址,长度
: h# I2 V4 m2 g8 b- ~    输出程序的反汇编代码& B8 f; k4 H: b0 v1 h
    例子:
2 ?6 r, m8 a  Z! z' H" N    dasm 01.txt,0,100000' l4 d/ `! T* `9 n( f/ e
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt5 [. O7 F- w1 w) ?3 H3 c% a+ l8 c/ @- ]
: {* @8 }3 ^8 k' j6 X
    softreset
) s  }$ Q7 D0 s% r& Z+ r0 F    游戏重启, 但不重新载入ROM' @" \- O8 q* R0 B# {! q) \' G8 U
( D& f$ b: o/ \* J
    hardreset
& [( d+ D( h/ q- h    游戏重启, 且重新载入ROM2 t% r. r; p' p/ f8 ?
/ K  {1 `' p) f/ j9 x
    snap xxx.png
, R  ~# O: o! a( z    截图为xxx.png
$ r6 P" }1 w/ L! v( b$ J: E* P4 r: F" Y
  % a3 q1 b! S  ?5 \& U( {+ d
  + f& W! |! [# d( b. M
  
: s) e$ y" E, ~! ?+ t热键:
) E. O2 }, e  {( A# w% p    ~ 中断游戏. o) l2 I% {  @; R3 ?6 H
    F5 运行游戏% ^1 x$ y9 D/ B6 p
    F12 运行游戏且隐藏调试窗口- c2 r! s: G5 n0 ~& d$ W
    F11 步入, 单步执行, 会进入子程序
7 A% F- I1 c' M1 x0 R& S) m    F10 步过, 单步执行, 不会进入子程序! k. ]4 H+ m* p) Q4 r
    Shift+F11 执行到子程序返回8 B7 j2 ]1 ~. v) x# ~
    Ctrl+M 内存浏览窗口2 H1 E" T9 O8 L9 n5 a
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* @' B0 X; B1 V$ s  C9 r$ r( W3 P& m! ]2 m. t7 E
{:4_94:} 6 p* H7 w* B2 D; |9 `

( x# g: U2 k) M( p5 z) l

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2585 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。& n% Q1 }  ^* |1 i0 @1 l  x

: H/ M2 L0 h- z6 y2 A: x3 c+ p& uPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东/ K+ A% y$ ^# n# I7 X2 {9 ^
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-22 15:04 , Processed in 1.088867 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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