EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

6 i) E. V0 O, I很快速的整理我自己常用的指令
  D. {! y7 w5 V; e; T8 H- n: N" d7 T! Q1 i
{:4_112:}
/ w5 q1 P/ I8 L+ e* r) s2 Z6 F
/ B0 Q5 V% Z/ w& e/ P" z. Y2 jMAME DEBUG常用指令
' Z) x" h" ~2 @& v% A% ~- a
/ e- a" u# t, F& l3 G内存搜寻: ci, cn, cl
' o/ t$ m$ ~2 V( O# g7 L$ a" K- \" Q- n
    ci; y; d  ]: q, q
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. B% D8 O; C. |$ B6 b' l0 k; O, G$ ]
+ M/ s" e. l' C  G3 w1 T% ~    cn: s1 `8 D2 h$ _' F  G- n. k+ Z
    搜寻指令  _! @9 l) G+ [; f1 H
    例子:
7 P" X6 R" _, H9 f5 y    cn eq,60
  Y6 \0 |7 _* P9 y! G  d- [$ M5 K    搜寻目标等于60 (十六进制)
( o* X3 i3 y: K: j- D. D0 N8 J5 A        
0 p' \) U/ a  d4 y# r    cn eq,#96& N8 _7 R' u1 o7 i& u8 y/ ^2 `; Q
    搜寻目标等于96 (十进制)* x5 f. v2 ?5 U5 c7 W

6 [& V, X+ P4 p* _2 v+ m    cn eq) C8 E$ \6 [9 m. W2 M
    搜寻目标的数值没有变化( J  q% M3 w2 e7 ~5 ^
. C# l% P2 t; W, X# @5 M  f
    cn ne
5 `1 U; E, \" P# l  W9 ^# b4 x6 `/ ?    搜寻目标的数值有变化
3 s9 r$ E6 K) f4 m        # k0 W7 g, X  {% Z
    cn +# I  e- B( F6 C
    搜寻目标的数值增加# D, W: B' L  e4 P9 l  W
   
' N) k% o/ z. {1 `    cn -
$ }' c# n) s+ w8 P4 g2 p) Z    搜寻目标的数值减少
# f9 s( x1 T3 D! I        * Q  `. e* k& D4 S5 k
    cn +,3) o7 S& y$ V( \  D
    搜寻目标的数值增加3 (十六进制)0 R2 e  A+ J3 S: D

2 H; R7 S8 `( d* l    cl
+ T! x. e, I5 w  t5 q    列出所有搜寻结果
1 |7 Q% r$ u/ T) b* j
* J8 s) q  m, W2 L9 I- x' T+ z    cl xxx.txt
9 x1 y& o/ V8 a9 S& w    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
  `; F& L6 B. r( B3 M5 m% A
: p; t4 B% ?; T   
2 D" I% V- h& K* l5 Q- f内存监视点指令: wp, wplist, wpclear
' ~% S* r. k6 c* v( |    例子:5 s5 v$ L, s( u" }, g( N% t
    wp 1234,1,r
! t# {6 E% J/ [  S5 C5 @/ @      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* A( Z1 A: f1 J/ I$ Y

; ~6 e) x( @7 E3 X; C    wp 1234,2,w9 f( D, x+ H" q) p- K8 u. G
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 ?3 |( A* ~6 C- S     
  m/ N  [- A  T: i  @5 C    wp 1234,6,rw
+ m: J6 h- Y" h$ j( g* b      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
1 _/ w6 h& G, Y5 [% T: U0 |5 F5 _) ?6 }& H
    wp 23456,a,w,wpdata == 17 K, K: x: @7 B) Q; }5 `
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 u; J% p; O6 \9 K1 a, w4 l( j
9 @+ p3 e5 M9 C8 R- K9 }# z& Z    wplist
7 y0 {( R# S/ k: @# C      列出所有监视点
, @3 r, w0 M) f( g" E3 A7 U# ?
2 N& m2 X3 \. I& ]    wpclear 3
4 `& N* A0 Y( T( O0 l      删除编号3的监视点
2 K0 v  J5 e" ^4 c
5 h/ y8 d, [" j    wpclear0 S9 p/ P4 B. r( v
      删除所有监视点
. N* J5 N: U4 b9 a
' q. k( \/ W1 B; W6 e        U# E/ N5 f. |/ [3 X1 u
: E! R: t7 U& S: ~9 X" C$ ?3 `
程序断点指令: bp, bplist, bpclear
8 J* e# w& [( Y    例子:
8 h: O3 F. e; q2 W) H8 P    bp 1234: `8 `* X" V2 K7 M; }
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% _3 K* j1 u. e' B1 N1 I" H. E0 x: K
5 l9 c' @* b( ]
    bp 23456,a0 == 0 && a1 == 0
* n$ a6 C. b. ]7 e" Q+ I& \      在地址23456下断, 且中断条件为a0等于0以及a1等于0/ F. g9 F* u& j; j9 T8 \7 K
/ Z# f' f2 r2 S' J2 x, Q! ^
    bplist# E- w& B% C" U" Q: Y9 f4 P
      列出所有断点# n+ l) D! g/ ^8 X) q* _' W
7 W5 C/ e$ Q! T
    bpclear 3
: M2 F7 ?# c3 W2 L& s, G      删除编号3的断点- g! f; r  |/ q" N" O3 X, E* r. N
) Q3 S# V0 w4 j1 p' O9 ~
    bpclear5 x1 A9 p1 ?  E  ?
      删除所有断点
' j# P/ S8 [0 u( a" a8 o5 G5 K# A# D/ w' E; R- I" ^/ s- i0 X6 k
      - @) N( L) T1 B/ H" f
      % d2 k; N$ D& F
跟蹤紀錄指令: trace
4 H. c  `/ Y" C    例子:8 k) G; j4 c9 ^/ G7 G. J
    trace 01.txt9 a- e! k' u' w/ z# G
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
: ]7 T5 e9 D: ]+ w( ~. ?& H0 g
/ s) `+ G2 p4 f# u: V; W* m9 w7 u    trace off6 k8 t  q/ q' L1 y) ^
    停止跟踪, 并且关闭文件
4 e' E+ B# p; b6 f1 y! X5 h- F4 S2 I! o9 k
    trace 01.txt,09 h4 S' {8 G7 q# t, A
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt0 C* O& G% U# `( S

; J! u2 m  `2 _; F5 O    trace off,0+ w7 x( c( Y* J1 X
    停止跟踪编号为0的CPU, 并且关闭文件
, l5 m6 _4 D* C$ Y3 s( ^
6 E  p4 A+ y1 \1 h2 J- K3 w    trace 01.txt,0,{tracelog "A=%02X ",a}$ U/ @! ?: H; g
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( [- {: n/ }# M) `5 J2 Q4 D    并且在每一行的前面, 写上"A=a "
- v& e: e- x7 W) Z    "A=%02X ",a为一个C语言printf函数常用的输出格式  E- Y, v9 [! w. \9 [
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( W  ^4 J& X. z' l7 ?# A7 n& [
    X表示为大写十六进制数  C- c! }8 e5 M6 c: v  ^' D& b3 [
8 U; [9 G' R9 i
6 y5 ^4 v: w& s9 _9 g  E
: q3 h/ p4 v6 {# f
内存直接写入指令: maincpu
* k* U6 {* k0 o. Y4 @    格式为 maincpu.[][]@地址=数据2 H3 @9 a6 A, @! U- J
    第一个[]:
% T& A4 c) c, x* w# l2 Q# ~    o 表示ROM地址& L9 F3 a- @, I+ _$ S* y
    p 表示RAM地址* t% m% V# j4 m3 t7 g4 e7 V4 c

( ]) n7 E: L0 ~    第二个[]:
% s7 {$ \" r2 z: V    d 表示4字节' n% J0 a  f9 Q% @
    w 表示2字节
4 L5 K- ^8 X% ~, p' l1 g. c    b 表示1字节
$ ~0 o" w  y- z& X4 e* _2 `$ L3 i- l$ Y
    例子:
3 f6 ~& M  [4 Y% \7 f    maincpu.ob@1234=FF
8 A. O- l9 b% R8 a0 J% l    在ROM地址1234处, 写入FF一个字节
$ C0 g0 m  {3 p* }9 y6 P' D) h' c% c  o
    maincpu.ow@1234=4E71
& [3 w" l+ G2 z- T4 i    在ROM地址1234处, 写入4E 71两个字节% S- t9 P$ [, [% e1 [* [

: d2 G/ J1 Y2 |4 O9 N1 V    maincpu.od@1234=600A4E71
+ v* t" Z6 z! h    在ROM地址1234处, 写入60 0A 4E 71四个字节1 ~5 `5 \- t& _2 I

$ }8 B! e! y0 ^; L- P' M    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
# N! L* w: Q1 d# y) b% o$ P      ]+ N+ x$ W" b5 {6 ^9 C
9 ^" w8 _2 c" E2 L1 ]4 ?1 K: v: z( I" v
其他:( E8 a( X/ }) t. ]# R
    dasm 输出档案名,地址,长度# R$ P& W$ m3 Y- |0 }# K
    输出程序的反汇编代码
" S# @* i# K0 S% `    例子:
& e! ^. r* T) ?1 p- g2 I) P# J    dasm 01.txt,0,100000
& @* n: @5 m; P% B    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt  f0 A# g# T1 U. P
& i. ?* H* g; E* n8 @
    softreset$ T# T% D4 X6 u- L; k1 J* h
    游戏重启, 但不重新载入ROM
0 _) O$ I; c# ?9 g5 n( N" B+ ^
( a' l6 [/ e3 i$ W' |9 Y: Q    hardreset
& _2 H1 A) I0 E- {6 k    游戏重启, 且重新载入ROM
" J+ d5 {% x4 Y0 U  R) j+ O3 m* q4 ~5 o( r, T2 P- r
    snap xxx.png1 r  p2 K8 J# T2 l
    截图为xxx.png4 e2 ?  a; z' V0 e
* O6 m: c+ R& M7 R" N8 b
  2 ]4 F$ ?& s  I" M% `
  0 [) c$ y) k# z' m  W
  
, _3 z; G, k6 J热键:
# q) }8 F& ?: W' t7 V: b    ~ 中断游戏' g4 F; m  l0 U  I+ [: v' }
    F5 运行游戏! [, i( v. y4 a
    F12 运行游戏且隐藏调试窗口
6 y( \+ v# V2 v    F11 步入, 单步执行, 会进入子程序& S$ |1 n3 F8 \- E, l' a) h) ^+ e
    F10 步过, 单步执行, 不会进入子程序0 w$ ~; b$ r. k3 @! L" [( n+ K
    Shift+F11 执行到子程序返回
0 S2 B3 r: j7 ]+ V" Z" r    Ctrl+M 内存浏览窗口
; t! W/ w* T* a. Q    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* f+ n. B' v' ]' U* G0 V# w; M
; u% l( t8 K) O, R7 n% c{:4_94:} : r: h  z) `, B
( s& Q5 H( O0 W6 g0 N  {5 Y

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2584 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。/ X, b0 y* ]! L( q% ]' e

4 J; H/ ~" N# a; B/ z" k  r3 jPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 s! G9 y7 B( k11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-13 14:30 , Processed in 1.076172 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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