EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
, ~2 m* J/ _9 V8 T! N& S  g/ \& x
很快速的整理我自己常用的指令
9 m  A+ S: m1 x% T* T# x- @. t6 J: ~1 g/ A  a( i
{:4_112:}
3 g) @9 |; S. O' P
, y0 p3 H* [, c3 {' q  RMAME DEBUG常用指令
. u( Y5 D" X' `+ X% x
+ g& W$ L! s* b2 G. z/ G. R6 F内存搜寻: ci, cn, cl
2 @6 M# r. Q  m) h% y& w
2 D' O! n5 U6 r3 O+ o0 q! s    ci. v/ _" A2 Y) X( p
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令; h5 B3 S3 D+ W* i

2 b. n! ^/ Q3 Z    cn
; x3 O- [! @4 {0 j& Z! b$ Z    搜寻指令
/ z$ [; D+ l. N* u/ W    例子:
2 z$ Q, G# W  R2 ^    cn eq,60
% r( C2 x# C( a7 b- a    搜寻目标等于60 (十六进制)
* ?2 M2 C: s% R4 i& B        9 N" F& c$ g% G! v/ O5 l
    cn eq,#96! ~( U# F6 h5 q( O6 _' L: _
    搜寻目标等于96 (十进制): Z% c9 X$ _% K2 q* s# a

$ j, y  F. D4 {2 o* Z    cn eq# i# R4 Z9 V3 K* o$ p" K
    搜寻目标的数值没有变化& E7 i# c* k) P; j  A6 E

" v$ B9 l( j0 ~' T    cn ne& ^% I( p( D0 h, T: e2 h
    搜寻目标的数值有变化& j1 \7 r. S8 b5 J5 K
        1 y8 k+ ]+ [0 k( H; d
    cn +
# ~; o, G  N$ D; E; y1 H- ^    搜寻目标的数值增加
3 J$ l* K1 A4 Q% G! {# l7 B   
- {5 [2 S+ p3 \9 N    cn -  r& t* C* @; {- r
    搜寻目标的数值减少' {/ R  R, `9 T! k9 k, q
        
5 t& v, c& }- y1 y    cn +,36 u1 b$ |/ z: p
    搜寻目标的数值增加3 (十六进制)
# Y, e! Y0 ?& z4 H& b! n  I9 T& [: \  ~7 G1 E
    cl
* a, w- j8 i( ~/ l+ w    列出所有搜寻结果
7 y. i# E" E! ^! D2 k
1 h. A9 u5 ~0 P5 a0 r  ^7 b! B! @    cl xxx.txt
7 E2 b" E: n' M& i    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
0 ^0 I- C1 g8 o" a( |' S1 }) P# k0 }* ~& m. d  b
    4 I0 }" i' W; L( d% X& B1 h4 s
内存监视点指令: wp, wplist, wpclear: u5 ^- o% N% Z# x1 r) S% s6 i9 Y' M
    例子:
" f, }1 r# t7 \7 C( @    wp 1234,1,r
/ M" W- r- {, e( v: n1 G      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
; i1 o) Q" {8 J8 r7 O" X" S5 C
% l3 Z/ C- v. \% z! i2 `    wp 1234,2,w
' _* [6 t9 s5 M      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2; u1 G1 D- D8 G  g* E9 ~: C
     
8 k) F1 c2 `( d) e; Y    wp 1234,6,rw
: c9 B7 ?, a. F      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& f( U% @) }; b* D
$ E2 n7 _" q- m( P
    wp 23456,a,w,wpdata == 18 `. m' N) Y, P1 T% B4 z
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% R0 }/ s4 E8 C& v) c  F
& r% h/ p8 f/ ?1 l5 R3 _' N2 ]    wplist
" F7 z  d% [" h  x# j2 s# L8 U0 _      列出所有监视点
/ l2 t# W) s6 F) _4 [: r/ T8 u( i' D* {7 o5 ~9 J6 z. K  w, d, E
    wpclear 33 p! H5 {% n5 \! a
      删除编号3的监视点
" ^9 D2 a% m9 d
6 _) x" z6 ?$ g! m    wpclear* A- h4 H' t+ P3 X& O  l) e
      删除所有监视点& c: p: L5 Z+ s
7 b# F" z! Y$ }: L7 g# g) L
      2 U: Q4 j0 M7 B' t/ l

7 P) N" V: @8 F8 x/ ~( \4 s程序断点指令: bp, bplist, bpclear4 [& |) a1 R7 e% r, U
    例子:
/ B: i" s4 @' Z0 U; I0 v    bp 1234
) X! x& S! \/ T( f. C      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 Y# ^$ l+ ^, `, G
" j' u" r; w5 z' y/ @& A9 s
    bp 23456,a0 == 0 && a1 == 02 z" W( N/ j0 n( x/ W2 H9 t! d
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
' {, _2 C" b. |/ l! j. L/ Y: Z& z3 @
8 O( v# W" [$ I  k" [# X, `    bplist
; U- v1 Y& o2 [      列出所有断点: S  U! K) t( S5 V; G

- w. E0 \6 E4 J: N8 b    bpclear 3
- V  A8 S% D$ U      删除编号3的断点: {1 P( t% d  t: K% H; {- f
$ v7 c  W, E0 \, @. \; W5 I: V3 c
    bpclear- w+ T0 @. V. `  a2 N  \' [
      删除所有断点& B3 L* `9 l9 A+ e

, E* g& f( e0 j3 {: ]      
' h( k/ B4 g$ i- L6 ?6 U      
: e6 P9 W1 w0 k8 X1 E跟蹤紀錄指令: trace0 f7 v. \2 {* z/ w. f( c* n
    例子:
) Z# T, z. ?, m& x    trace 01.txt
! }5 x1 @4 M0 `  W3 Q    跟踪当前CPU运行的所有代码, 输出至文件01.txt5 f& @3 l. b* _& }" r

1 T" |& }+ N$ _* a% f4 O& \* s    trace off
, Z: {& s: O! ~* L+ W8 M: {, p    停止跟踪, 并且关闭文件7 }7 ?$ |( D$ S, ~  ^/ U  O4 |

, G6 c4 w. I( |    trace 01.txt,0
/ C- z. B8 h- ^3 R    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* y! I  x2 B( ]6 x' {- F  }  _. U
3 ]/ v7 k& q7 N. m: Z+ _
    trace off,0
! p0 `1 M3 B  t    停止跟踪编号为0的CPU, 并且关闭文件
# l9 f6 S5 ?! r' @$ I/ m3 C3 Y8 N6 d& V
    trace 01.txt,0,{tracelog "A=%02X ",a}
4 H4 f4 r9 s( q( ?# c1 b9 M    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 9 u4 }2 z% u; d3 c  I/ I, }
    并且在每一行的前面, 写上"A=a "+ ^7 s+ N( `: \2 ^  n- u/ b+ l9 u
    "A=%02X ",a为一个C语言printf函数常用的输出格式4 S2 C% F- X* Z
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
" _- Y2 a: }' d3 k, _# I    X表示为大写十六进制数$ F% v7 o6 i* W& J
4 n( K6 v! B; X

1 b3 U( v! o' d- ]  {* i. _7 r5 e/ ?& T/ W- x# t6 I: K
内存直接写入指令: maincpu) \5 K) J  b+ I! H* t/ E
    格式为 maincpu.[][]@地址=数据* o2 V8 c) \3 ]; t0 w0 h
    第一个[]:
6 r- v9 K$ T" T+ j: F6 P    o 表示ROM地址. V+ `3 p7 d  j6 q
    p 表示RAM地址
  \0 i4 T0 P2 `/ ~7 K, a2 G( T% @& U( @7 d: v
    第二个[]:
* }  k7 o+ Z2 V6 t# h    d 表示4字节
6 a  I6 Q/ j+ ?: @. m    w 表示2字节/ C4 c) r4 n% ~0 z
    b 表示1字节% Z. D! A; n9 @) S: P0 n
( w/ G1 L4 l5 G
    例子:! _5 Z4 |( k! T( E7 M/ Q5 a, f' W
    maincpu.ob@1234=FF; l& b. ?6 E2 U2 [; Q1 q
    在ROM地址1234处, 写入FF一个字节
) d$ Z4 T5 U3 x' {3 t+ t* |$ M2 y! q) W3 c
    maincpu.ow@1234=4E71( x8 U* n3 g( X0 P; H, \
    在ROM地址1234处, 写入4E 71两个字节
) m2 d& J( |' ]0 E
, |3 l  g0 ^. Y4 I& H# F6 b    maincpu.od@1234=600A4E71
6 X: q' W; o0 M5 y/ r: t. G    在ROM地址1234处, 写入60 0A 4E 71四个字节
5 M) R! n+ J8 T# X1 Y0 Q% o% t1 I; c7 _' g
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
! F4 O( K: L2 N/ ~( l7 T4 e   
' E& s; X7 o' f8 A! M5 r$ m
* y7 v/ {* Y. S其他:
6 l) i' }- \0 C8 ?    dasm 输出档案名,地址,长度
) D# \3 d+ {' `3 O( ~7 V9 Z    输出程序的反汇编代码
0 ~* o2 ~/ ?1 ]. G    例子:
0 q! V5 Y: H9 @5 V* b* X2 F1 @    dasm 01.txt,0,100000: t  o- B& p: g; Q
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 r! v5 D  u5 r" U
' S# E! p8 ^3 i1 v$ S$ ]* s, Y    softreset* X9 q4 E, ^0 p
    游戏重启, 但不重新载入ROM
3 S$ R+ Q2 M- _
) h5 L4 s8 w/ u1 h' ?1 _8 D/ Q    hardreset
; l& i6 Z2 V# K1 l    游戏重启, 且重新载入ROM+ A) q7 f8 l, D0 A4 \0 i' a1 F% h
9 s2 w- f$ X  h6 F5 ]
    snap xxx.png
! n. {5 `/ E8 D1 N    截图为xxx.png; i7 a  ?: X" D! ^0 j/ Q
% M" V9 f+ b- U( [& N* V# f' [
  
' h" N: B9 ^' ]  7 T3 ^0 ^% e! `
  
' ~; a; v8 f1 ~! {2 ]+ H热键:
- R$ F0 c% P0 ^    ~ 中断游戏; F' T: \7 U, U" @% t/ _* G$ o
    F5 运行游戏
3 Z7 V0 m( H( X    F12 运行游戏且隐藏调试窗口
& h; E+ c! b* n. l    F11 步入, 单步执行, 会进入子程序
% ~' y; P5 c  i    F10 步过, 单步执行, 不会进入子程序
' W+ o- R  A2 o7 X( Y0 O5 g    Shift+F11 执行到子程序返回
: h2 }6 r; |! N: i0 Q    Ctrl+M 内存浏览窗口
+ C5 G& c" `& |* I8 e" e) E+ g3 V    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 v7 q* z. p6 [& D8 X; e& h) a5 \7 t, H8 d0 J+ G) @
{:4_94:}
  C1 Y! c) L5 r5 K) |8 C/ M# J
4 t- k$ }; Z5 ^7 G0 I& ]6 F" x

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2589 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
' J" d/ J0 x4 O+ x
- U/ J  K+ K3 R1 a3 B  yPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
$ m6 i2 S- y. j' N# q11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-18 19:03 , Processed in 1.126954 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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