EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

: o' s7 T$ c' S6 K6 D6 o6 g+ F很快速的整理我自己常用的指令8 T4 p: b9 ]7 V' \# q6 T! `
9 x9 Z! b  @. J7 _  O% j5 C; L
{:4_112:} 1 E- i! `/ q- l
' u2 Q+ n1 X: \$ D  m( h; w- j
MAME DEBUG常用指令
! k) Y! U4 q% M, o3 ?" y
$ G1 l2 G2 ]& c内存搜寻: ci, cn, cl
5 o, T0 U9 |* W) n
; B( S2 Z2 h# G; y- A    ci
" _' M4 D0 p* K" z: O0 J    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
3 K4 x9 J9 z$ g! n3 J* _* G. C/ z: \
    cn
- K5 f& v) ~; y; v1 f3 ]- a    搜寻指令4 ^+ E/ G( V8 {4 O
    例子:
  P9 l: N; V( a0 S0 H    cn eq,603 c! x; I$ ]! n/ C1 T! h0 _" L$ E7 ?5 C
    搜寻目标等于60 (十六进制)
; q0 |/ r7 k  E/ o# E- e- G        6 a! p. l# i2 ]% A  P
    cn eq,#96
# A- _" o  _9 |7 \    搜寻目标等于96 (十进制)" a, r1 d. ]4 [0 `7 \# k' Z- j

3 {+ S* g8 d8 ~4 f" Y' b8 q5 z    cn eq
  c5 k8 w; D9 u. s1 j' Y" R4 `    搜寻目标的数值没有变化1 h2 F" g% s. N1 c: L9 C+ p$ e1 m
, b) U1 U  h$ i5 F
    cn ne6 A+ V* A  G. u4 M+ k( u% o; `
    搜寻目标的数值有变化9 J6 B; l1 t; {1 L: w- B. A
        
2 ~8 D' ^. [; m6 p4 r  U    cn +
6 k9 K- _( j0 |    搜寻目标的数值增加
2 a3 E2 T, ^8 `) m  n9 W: h) M2 z! @   
* [' ~% a7 O% T8 V    cn -( A' u0 s! L# i. B' W, @3 g9 [
    搜寻目标的数值减少( {8 e. }) {/ q$ D0 ]7 G; ?8 }
        1 h5 W; y) e  o3 W9 v
    cn +,3/ i. O' s7 S" _; l& f8 D0 C. B4 o* @
    搜寻目标的数值增加3 (十六进制)
8 i( R) b5 a5 s) g( m0 j
* ^; `! [/ o9 ^" B/ l& h1 P# u    cl
& t5 }' o# d6 u" Z5 I    列出所有搜寻结果
- ]1 E+ Y( t6 U3 q" S( b
4 w( q1 b: S# \    cl xxx.txt
4 d7 G, K2 r* U/ Z  F    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 z3 r& \# t7 @4 y2 G1 z$ G; b
. R" L6 O& w7 P' u
    . L. o; g3 A: V0 ~. _/ b+ A' {0 t, r
内存监视点指令: wp, wplist, wpclear
% _" c3 R" U( @' \    例子:& W& U) x- o# _7 R- @
    wp 1234,1,r) |3 O9 j6 F* X1 ]6 x
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
4 N* o5 W7 h8 j$ x- _- N- n1 n) O- `# x, b- [. A9 C# L
    wp 1234,2,w
7 m" f/ d0 e- I) I2 K      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
  k# l. R$ p" N  b; g, i+ \- ~5 o     
' M% m' Q! f$ S; v9 N+ N2 e    wp 1234,6,rw' z6 Q# I* g1 }$ k
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6  a1 c1 P8 k, T$ T& a
# |) b$ u3 T8 {* e$ ?
    wp 23456,a,w,wpdata == 1
- e. [0 {0 P, T' l- `      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
( H+ W" I: U/ u6 Z2 N% m/ }5 Z" Q' K+ T8 j7 `5 J. @: j8 e3 w
    wplist
1 y6 w+ D( c7 V2 q2 ^* O( W0 |9 J. O0 S      列出所有监视点
5 [+ A) O) V9 s
* C' I/ l1 |) k; u; o    wpclear 39 H; K1 {  x" I5 K  w+ \
      删除编号3的监视点; G- |$ ^4 {" K* ?- @
) z( q5 L) h* F1 `
    wpclear
- L2 `& _/ X3 q. q4 D      删除所有监视点
* {' e; k9 A# _3 ]% F) s4 `$ l0 t  a2 O( g* {# c: m
      - f- y  E; e% o) q3 i& k
4 ^6 J8 D# w2 X: Q7 L( c0 G) s! k
程序断点指令: bp, bplist, bpclear
5 S" J/ ~# \' `% _2 J7 s- Q    例子:
; a3 Z- O' \% h# S    bp 1234' z  ^/ ~0 t/ _. m6 P& d
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! q; _- o4 F# {& x# `5 ?
- P" y5 t. }/ W  D5 d, M    bp 23456,a0 == 0 && a1 == 0# R- t+ G4 F$ U( D0 q
      在地址23456下断, 且中断条件为a0等于0以及a1等于0+ c* g# u, q: o' v& P

9 \+ }4 t/ y! o- d$ f+ r- B    bplist4 H6 g  C( Q5 I2 P. I/ I  X
      列出所有断点
  U. |0 S4 U# [- j/ L) @! i) ?& y" p5 y2 \, a
    bpclear 3
( q1 S2 v8 L. [# M5 M2 b      删除编号3的断点
. j$ {$ n4 x& u0 J
* Z& H. M1 Z3 L: T/ L, L; @    bpclear
  G6 C- f$ \( U1 t3 K      删除所有断点2 A8 w% q& V$ C$ Q+ ^0 f: q

# V' o4 u- K* ]. [% A, S      
" S! d2 g* D9 U/ u, }      ) D( |) k, }# B/ l$ U& I
跟蹤紀錄指令: trace4 `8 a* h$ ?0 m7 C# L8 x
    例子:
' k1 n+ r" _; H- R* P    trace 01.txt
8 ^- }* _2 {+ H0 _    跟踪当前CPU运行的所有代码, 输出至文件01.txt
8 w* N8 M$ L, A* y! e
/ G! d' v$ Z& J. c    trace off
. u( [1 L: Z$ T) I. d    停止跟踪, 并且关闭文件
  q8 N: O4 y3 w% A/ k/ s
. D2 I" Q7 P4 s3 O/ q6 `8 C    trace 01.txt,0$ m' T  u) s5 M6 y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt3 l1 c3 j! ], S
6 H" k1 O) [* m3 t% I4 w; w9 X& O( {
    trace off,0
7 n/ |0 \  S/ B) F- [    停止跟踪编号为0的CPU, 并且关闭文件
* f& g* K5 p" O: m8 q1 r! Q8 {1 b$ O* o1 Z8 d
    trace 01.txt,0,{tracelog "A=%02X ",a}
9 y2 w- y% n! m, D; i$ |6 l' X- Y    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 i/ t+ n" h, n    并且在每一行的前面, 写上"A=a "
& ~: ?  r3 I' S# [* I" X) L5 b    "A=%02X ",a为一个C语言printf函数常用的输出格式: ^3 i% C% `3 N4 t6 s7 g
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入* S6 s: f$ I. K! j% k5 K5 f
    X表示为大写十六进制数
* I( F: F6 l8 j$ d" N  B, ^- \2 M' n4 u/ ?0 H! f- F" E' T

! v6 _+ _% n% G3 ^  [
  b/ N# ]2 b% N3 Z+ H+ D内存直接写入指令: maincpu  q$ Q( j( I0 L, z) g7 T  s( f. h0 J
    格式为 maincpu.[][]@地址=数据
/ @  y, ~2 l+ e    第一个[]:0 c+ @" Q  l* N( x3 t8 N* I8 n' T6 P
    o 表示ROM地址
( f' E4 `+ }$ @/ Y1 s) H    p 表示RAM地址
3 e( K$ g2 j, y7 r* Q! H7 o  {  ?7 r* f# t
    第二个[]:' r( j& W0 ^; @- ?; Y
    d 表示4字节1 t* K% O- {' y
    w 表示2字节
2 k0 S1 v- o$ x, X: D- X; ]    b 表示1字节
& O% }0 g+ l9 B" n: U# J% g6 f$ }8 s+ f, {1 w0 i$ E
    例子:
  L: V0 P1 R! q0 ~  p    maincpu.ob@1234=FF
+ y& M. U# N; n4 h+ O& i+ {+ J5 o    在ROM地址1234处, 写入FF一个字节8 X/ d- D- E' E

+ S# W9 ~3 y$ i+ i% y* C2 x6 H    maincpu.ow@1234=4E71
% `  s- Y' k! H* I+ e4 c! q. N5 ?    在ROM地址1234处, 写入4E 71两个字节6 e$ Z- O: k. Z0 E# P
* l) n) \5 u3 x% P7 Y( j
    maincpu.od@1234=600A4E71
5 t/ L4 b$ h8 `) q* V    在ROM地址1234处, 写入60 0A 4E 71四个字节1 U. Q2 V/ {' d. @" }7 |

  y, L) i  Q8 x    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& f1 ~+ s4 o- z" B: c1 A5 z   
, n$ I4 `9 _: ~4 m
7 g; y- M+ j* ]- p其他:
4 s$ _, m2 l, ~5 x    dasm 输出档案名,地址,长度
2 n) ~" x; f$ i, M5 v    输出程序的反汇编代码$ H& N5 |; n8 ^' O% b0 I  k2 J
    例子:7 J) i  ?3 [% r0 @
    dasm 01.txt,0,100000
/ }  b1 u/ e) b* _# ~  p7 c    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) _0 h  n: V+ H9 E& o7 C: N  ]3 G7 ^  N4 F# x9 n# f6 C6 {
    softreset
% X. \! Y6 `) K0 ^3 r4 x+ _    游戏重启, 但不重新载入ROM6 t% D$ J1 q. x) [9 l* v
. s; {; G0 s; l& `; z
    hardreset3 h8 _( e, U* `
    游戏重启, 且重新载入ROM
! C. r0 o# {0 `3 y! G8 e& x5 Q+ t; s/ R3 k3 ~$ L2 D
    snap xxx.png( }1 b9 V$ f: Z" P. p
    截图为xxx.png
2 X! `. q% p4 B2 ?: D0 [! |5 ]# I! D+ ]+ i5 B& y8 s5 x
  + M0 c7 f" _. e
  / ?3 q% h. q( Z3 [( o- ^# Z3 N
  
1 d7 u. f+ K' G( U$ e热键:  f* {7 }% M0 L6 [" |% u9 A8 q
    ~ 中断游戏/ i) [8 L) C: x
    F5 运行游戏0 p! d& c( T2 d9 E5 b7 @
    F12 运行游戏且隐藏调试窗口/ z$ d) j- n5 }. n9 l
    F11 步入, 单步执行, 会进入子程序2 _0 N! K- o) F9 S- N: T: y' ^  |
    F10 步过, 单步执行, 不会进入子程序4 q$ h" d2 p6 C( H; }+ H4 B# B, y, F
    Shift+F11 执行到子程序返回* T. N) p$ y& @8 ~. a0 g
    Ctrl+M 内存浏览窗口
/ Q4 A7 P6 ]% z0 U( z7 w    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
5 _9 ]" s/ R- R* _5 d
; g/ y) o$ _/ T! H1 f" ?{:4_94:} ! u+ N* O; I- o# s3 f; }
% b( |' M1 I7 x7 p- [

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2589 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。1 w6 d( f% f' f! c. e/ c! A& Q! |
5 _/ K8 }3 f# x9 t! B: `
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 | 显示全部楼层
要详细些的东东
* v+ ^( E& R9 |9 n. T6 V11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-17 03:20 , Processed in 1.084961 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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