EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

" x- k" b9 r: X2 r7 ?3 _' }) w' M很快速的整理我自己常用的指令
" y3 K! j5 q$ S4 R. r, \3 k9 t/ W1 E3 ?& ^' c
{:4_112:} ) v. A& F# F+ Y8 R; K
4 L6 B" b7 b7 b( V& e  D
MAME DEBUG常用指令
/ z! ~( [5 o) o* G- r; U% W
% F! d3 p3 C& ]' O5 z) N" Y* W1 h内存搜寻: ci, cn, cl
; `! m3 \7 K1 a$ R; F8 u1 \- K: H
* U" o9 b: n) v! N    ci
& [$ s7 ], \' I+ n$ M    搜寻任务初始化, 每次搜寻一开始一定要输入这指令9 D% j4 m" r# C9 N8 p, N0 `
) A; y( a# [+ E; }
    cn
- J  M& l; q+ w4 S9 P) i$ S    搜寻指令' o: C( \( I0 k8 o' M1 x
    例子:6 g1 M( v- \/ M0 E) A' g9 Q8 }3 P
    cn eq,60+ i2 p% I  Q2 d! a: E
    搜寻目标等于60 (十六进制)
6 N* c1 I( H# d6 @* A        3 V9 U* M* u6 B, e" s3 {( x. u8 S
    cn eq,#96
6 Q0 T& i3 f; p/ U0 d- @5 j1 w- o    搜寻目标等于96 (十进制)* S: q/ Z' ?: K( ~4 U4 \) s
# \, n/ L8 I, Q
    cn eq
' |  J1 u5 |- B; z8 N    搜寻目标的数值没有变化
$ u# `5 w) y5 n3 S5 s" |& t# n! Q# ]
    cn ne
( ~) w6 z: c( c& F- L  |    搜寻目标的数值有变化
. M$ n$ |" d9 o0 H        
& \$ H4 w& P: P9 Z  v% T/ e2 S    cn +8 m1 q0 Y3 Q% l9 Q$ T" s
    搜寻目标的数值增加
$ ?5 _  {9 i0 C* \7 [5 l4 L   
( P1 ^  I# M$ g9 ^+ J1 F$ Q1 D    cn -9 m/ e: [( }/ [1 G$ h( x
    搜寻目标的数值减少( h1 D' T$ J% W* T
        ; B! {1 S. b, f4 G
    cn +,37 I$ e# x3 l  N9 p* N
    搜寻目标的数值增加3 (十六进制)
) A; i7 _, U& @( ]
, V* N1 }, F& l$ j' n: K# s    cl
8 i" f$ l( p6 p$ z2 W    列出所有搜寻结果
. B% I7 P1 z5 ]- P. B
9 |- p  C' R- }, ?- {) Z) @7 P    cl xxx.txt3 \7 }9 o; x# j2 k& S: c0 l( Q7 }2 F
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 ^- {+ \! _8 z* Y" f& a( r
2 R1 {# {# `- X: z2 i
   
( {$ W$ v( P' j) M- g( d8 |内存监视点指令: wp, wplist, wpclear
& W" \3 \" W1 A    例子:+ k, r3 n  D* g- X5 t, N
    wp 1234,1,r- _/ Q, z7 t# P2 e1 o
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- {6 v; F. r; ]  [* g2 |2 |, s  E% i+ q$ `  h
    wp 1234,2,w2 P, d$ Q' F- `# w  o
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2% h7 G" G6 n- G# k. f
     
7 u: N" M' [- K3 d1 _    wp 1234,6,rw5 R/ e! Y% B5 g; _+ A
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
9 F# t3 v/ \1 `3 U+ F0 X1 S$ ~, I1 Q. h: _4 m8 Q# ~. X
    wp 23456,a,w,wpdata == 1; W" g( V3 j: |# j
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
. m2 \5 a, j, W2 Z4 ~: ]6 d
8 B3 x2 f6 ~# z2 U    wplist
2 z7 Y1 m7 ~. a# h+ P      列出所有监视点( ^( G+ a9 C) }0 Z7 Q5 J/ j
$ @' b0 B- s% t* ?5 w) e- j& O  s
    wpclear 3) B8 L' G# m- P
      删除编号3的监视点- Q/ e) o9 b" T9 ]  l. _- D* K
, k- U+ Q1 h8 s- K; F( h# Q5 ]
    wpclear
! _: s9 \8 @# t( Z, r) Q      删除所有监视点
7 i- F: {8 U* S( G
% s2 ~5 m7 V7 f; r      
7 g+ L( R- D* I3 w% R2 |9 v0 B, F0 \7 L. _4 Y3 o3 t" H: s4 r
程序断点指令: bp, bplist, bpclear7 |8 ?$ s  O0 e$ ^: q8 [0 y
    例子:  \/ x  V$ C6 f  e( J8 C% R
    bp 1234
* F" [% z2 Q5 d6 ^      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
# |* {( B- g$ h$ R- d
) s7 l& ^4 R) r# z- ~    bp 23456,a0 == 0 && a1 == 07 W5 d/ y6 N' a" Z# ?( P
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
2 z9 k- c2 y/ V" I
7 w$ T, u! M" e4 k0 K) y) e    bplist
; ~4 u: k4 l, Y8 }      列出所有断点* U+ }1 F0 o, R

$ b" s" Y+ ^) w$ X# }: M% _- w    bpclear 3
+ {( I! a0 n. o/ Z1 X1 y/ U      删除编号3的断点
. i6 }) a' ^- H  T$ F
% c0 b! Z) Y% N    bpclear! y. Q8 d& }* ~$ o$ `- D" a
      删除所有断点% c, R: o% G) P" B; x5 {: l
- s0 ]6 l  z! g/ \! @( U
      8 H2 u* E, Z) h* ~% @/ l
      
1 Z  ]1 c- N- j" _. K8 e0 L# V) w3 q跟蹤紀錄指令: trace
; t. v2 r, y- i3 R0 h    例子:
& M% v; z' X: L  [2 Y; W2 q6 s    trace 01.txt. H4 p' B# H* s, H
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
; v: ?! j8 |1 `. C# Q. V' N4 d
0 \2 z9 u' t8 X# i) B* T+ _) {+ u    trace off6 o7 @0 e# h# I8 M7 ]
    停止跟踪, 并且关闭文件1 p8 g) c3 v4 h0 g, F0 u5 N, C) O

* ?# ^9 b, W6 e    trace 01.txt,08 N0 q# W: }' `  F/ N' T4 L
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- Z2 G  }  `7 W( ~. G4 A+ N
  M4 W2 @1 n7 h! m+ n  j* F) ^    trace off,0
1 O* K8 }4 U& t- p& i    停止跟踪编号为0的CPU, 并且关闭文件
& k; h$ z' I7 u, l) A+ q
) U7 E1 V9 e* z. q7 ]/ m. E    trace 01.txt,0,{tracelog "A=%02X ",a}
/ c4 {7 u+ t2 d8 {* L6 K    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& J0 U0 ~6 n8 n( k0 h# }1 K) j+ ]" s    并且在每一行的前面, 写上"A=a "2 [5 P7 A/ O# i# F  B' @5 h6 f
    "A=%02X ",a为一个C语言printf函数常用的输出格式- r; q; z3 s4 j7 o9 C+ W* \4 m; y$ e
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ p& F/ s& y! e- U
    X表示为大写十六进制数
2 D' \! }7 y0 m6 n
( o; i4 w+ J* v3 ~# v
$ B& \# Z' P: J
/ J$ J$ _$ m) m内存直接写入指令: maincpu1 `& G; c# o1 S  L. d5 `3 I7 F" i
    格式为 maincpu.[][]@地址=数据, h8 u- P. g# q) z
    第一个[]:
* m' @" b+ x! G% m/ i2 E    o 表示ROM地址
7 _, O9 S# ^. M3 D! u" @" Q, B    p 表示RAM地址, E" J7 Y! v3 D, m- v
2 }# \0 `0 o9 F2 X- w( Q7 I, D) l
    第二个[]:3 h0 `8 w$ \$ O$ Q+ Y3 p, g, ^9 k
    d 表示4字节
2 E$ o6 |  i) ]4 O0 S# j! ~9 W    w 表示2字节( }; e) Q; B4 u+ g* ~
    b 表示1字节
5 I' B: ^9 `! {! u4 z/ A  |) K# m' A; M' E# D9 ^
    例子:
6 C1 b. H; a5 B: ~9 I    maincpu.ob@1234=FF
0 c: N' Y! Q9 n  ^    在ROM地址1234处, 写入FF一个字节, h9 _$ m& f  }, b* M
2 v1 a5 b8 @, P/ k4 j
    maincpu.ow@1234=4E71
1 L: _+ N3 |" l    在ROM地址1234处, 写入4E 71两个字节# _9 G9 X/ a. A* s4 h

$ h8 Y/ V3 E! g' H0 T# e& v' {    maincpu.od@1234=600A4E71
/ x, D" L2 |6 v4 ~9 O# N& u    在ROM地址1234处, 写入60 0A 4E 71四个字节
4 U3 m. Z2 H/ I7 L7 O8 L4 J2 V: [6 J6 N7 {
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 V  P8 t2 K! z& T% I$ g
    ( j5 o6 f# @- ^0 V8 l/ p; {

& U1 a# J- C; @. a其他:- x$ S7 Z+ ~7 H+ d0 \" H5 a
    dasm 输出档案名,地址,长度
  Y( |  S6 B. G& q$ J* K    输出程序的反汇编代码. @/ k; ~8 r1 N2 x9 M0 F8 L
    例子:  R" N% H4 L" l9 m, V
    dasm 01.txt,0,100000
" m: C9 ?, s1 N    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
1 m1 E3 O+ \+ P; ^
6 J+ u! J/ C0 `+ H+ |3 x0 ?    softreset# w$ u& c2 U) [- O& [7 c
    游戏重启, 但不重新载入ROM+ A0 T4 f& |: ~
5 d, p+ W3 f: e$ e) ~
    hardreset8 g1 ]0 F; f1 J- B) x4 k( q* X
    游戏重启, 且重新载入ROM  h/ C9 y" _3 F

% Q. [2 h& |& F5 E    snap xxx.png3 O2 \% u; ?6 |3 U
    截图为xxx.png
" ?+ b# ^% G% [* j: V  E/ y) O: A" c2 J
  
  l! Z# Q4 u+ {- ]5 G- g8 t  
$ Y) u; S5 I- V! X" B4 v  ( P( A4 ?0 h/ d8 a3 m" I
热键:; }/ C* ^; ~, r" m
    ~ 中断游戏4 I' |+ N2 q& i( L
    F5 运行游戏
: X$ b) W! v* D" i0 {0 _    F12 运行游戏且隐藏调试窗口
0 |% Z4 v% x2 [: ~/ p" H3 b    F11 步入, 单步执行, 会进入子程序4 |' p) r) y7 `0 \0 }
    F10 步过, 单步执行, 不会进入子程序5 l+ U4 V# L) V' Q( i
    Shift+F11 执行到子程序返回
, e" T# w- ^# Q% Y    Ctrl+M 内存浏览窗口5 A- K! ^4 r) B2 F
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
/ X& K, X8 n9 s5 L8 a& g4 B& t5 p* v+ T) c
{:4_94:}
2 @+ M# ]: }6 a' ?- e
8 h; q4 q1 j/ r7 E

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。0 D5 h) L3 v2 e2 O( S# Y: Q
! A  w& a) N3 N
PS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东0 `& @) Y! `# v1 j) `* y
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-9 19:44 , Processed in 1.074219 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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