EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
. @% B; ]8 l, y4 F8 K$ g
很快速的整理我自己常用的指令( r- j6 c5 C# c$ B! p8 b
6 X9 \% g  ^$ B0 J2 e5 }, j
{:4_112:} / ^# @; C( k, Q: G: e: c

) ?: X3 B3 S* cMAME DEBUG常用指令
" h; @  y" P: x% y7 F5 j0 }$ T. t4 p1 L0 b
内存搜寻: ci, cn, cl
( @2 e) Y5 V% Q1 i. C
4 A: o9 h8 f/ p( E7 Y0 X    ci
' d$ b' i4 w# h  ~    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# x& F' `9 g. ]0 v1 C6 c+ Z- a3 i4 S5 v
    cn
2 m; L* }* N; `8 d    搜寻指令
6 h* C: C0 g8 h0 }' j7 a$ ?    例子:
1 s+ k7 x( w. {8 T4 M% J    cn eq,60
3 V" l4 r6 m- y& ~5 ], U    搜寻目标等于60 (十六进制)! ^& S5 V6 E; Q
        
8 d; j; O3 L4 z5 O! J    cn eq,#96
* k4 x+ \8 g; P- @. Q% Z    搜寻目标等于96 (十进制)
, ~- n* @( a5 D; C) y% Y- h' r* |8 i: s$ W6 r  y) C) x
    cn eq
9 f) v% g  x1 T) R    搜寻目标的数值没有变化. a, l$ u8 ^/ q- G+ r

0 R! H2 P" V3 m    cn ne
/ _& w  ?/ o# u4 v: i    搜寻目标的数值有变化3 |; s& w" Y- n5 Q7 |6 n! r
        : d' c! |- H. g/ s3 f6 M6 r, p
    cn +! ]4 u3 \7 ~+ M: o/ Z; }
    搜寻目标的数值增加# m9 b" V) J/ q7 a: J: M: w  n
    3 o. P) Y7 i/ f2 q' W9 n$ g
    cn -
/ [5 g% p* ^$ I) B# J  U    搜寻目标的数值减少
. o# G% T$ w  h; a        
- W& q0 a9 G/ j" }    cn +,3
; W. G/ N& @  u+ b$ C5 b% ?. `( a    搜寻目标的数值增加3 (十六进制)
& S2 v% d6 _$ u, j* z2 r
2 K1 S8 ]* V9 }8 k- n    cl& k- w" m. _4 ~1 u
    列出所有搜寻结果
: h! x( u% B0 b6 A5 f; O3 d/ ^6 @3 p5 X  f+ d3 B
    cl xxx.txt5 l/ A8 K6 d4 I2 G
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 d7 L( M. Y# s+ _9 Q
$ `: \5 V0 R1 m7 ?+ q/ z
    ! I- Z" \/ J. `$ k
内存监视点指令: wp, wplist, wpclear
( J; r8 S/ n8 [# r3 C" c# A    例子:( Z- n, L/ K# Z2 r- N% [
    wp 1234,1,r( c* H) }: Q( v+ r; y4 |
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 V/ x% d! G! Y" }9 x# I# x9 A' }5 D" H, B4 S: u' z) r
    wp 1234,2,w
$ m7 b( a' B' U      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
! C/ x# o4 K6 h5 f6 W, r     / r* \5 }& Q7 r1 P0 Y0 v! ]
    wp 1234,6,rw
' }8 v8 O8 \+ Y3 Q5 q% }3 w      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度65 P6 G9 K, V* I  w2 p7 b& i+ |

/ z' B! g* b) F2 F9 c+ ]; y3 h    wp 23456,a,w,wpdata == 11 I! M  R3 ~9 F* p
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
6 P; r( z3 T0 e) ?7 m, s/ _3 W- {$ W* E' E* y* m! l
    wplist  Y1 i& F) i9 N8 F8 }7 E7 q
      列出所有监视点
5 f6 O, f0 Y/ b" b% g! R1 F: ]- o; W) d, \3 ]: I6 ~
    wpclear 3
6 T0 k" n# {. b5 J0 _* b% `      删除编号3的监视点+ C  H- O' s3 z& ?- |7 X' l
6 f; O+ ^! a) L  ^; g4 j
    wpclear
3 q! y3 a! s1 w7 ^+ ~      删除所有监视点
5 a' J, J! F* M& l! |1 }. P
/ V: r: A1 B  U      
/ a: o# ^# J: P# ~) {% r3 ]9 k5 Q
/ F7 ]/ L$ K) c7 {. I程序断点指令: bp, bplist, bpclear
7 P3 ]9 S$ g( r* s2 E    例子:  B# n  r8 S6 D( g, q; v. _
    bp 1234
- r  f- K4 `- v5 p" e0 B      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
2 X( W* Y8 W# N- o5 S5 B! z* k. H0 g' \- I5 ^
    bp 23456,a0 == 0 && a1 == 00 H. P( |/ T- l* N7 f. C% s, Q
      在地址23456下断, 且中断条件为a0等于0以及a1等于01 h* y% \6 s% N7 e% d

$ a0 r; ^" L9 Z4 ~. S" n2 ?, u    bplist" x9 M) X, g+ U9 f9 E8 ~
      列出所有断点
6 G% I6 k' Q% t- E* v) n$ P) {" J- f: G8 D4 Q
    bpclear 3; T" b( |% f6 ?2 Q6 t) c
      删除编号3的断点
& L  k+ p7 G6 @, S! M& z+ \$ n) n
* j0 x$ a) j+ a4 h$ d$ K1 T    bpclear
% H7 G0 U! ?$ S. t5 I      删除所有断点2 g! c9 w# l% f/ d
" C' r- P! c" m2 `# g- m
      ; i2 k/ w/ }$ Z; o3 w
      / }( x+ W* {6 Y: w( Z
跟蹤紀錄指令: trace5 w5 z( U0 z4 G- t
    例子:
/ \% M; L+ m$ }, B8 L  A    trace 01.txt
! B5 ?1 v% X/ K2 b. l# @$ o9 q    跟踪当前CPU运行的所有代码, 输出至文件01.txt( L- m. p. ~6 S: C1 B2 x

1 \# l1 I5 B/ p  }    trace off
- b# z+ |0 }( ?- Q6 y    停止跟踪, 并且关闭文件
  @0 Y1 S6 m$ n7 C. v5 R
) o( o$ m$ |& y1 e8 D    trace 01.txt,0
+ x$ O( F, B4 P& h3 b$ X( ]    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt$ R& O4 A9 K& `1 Q! H$ V
$ `* [, b9 b) m% {6 F) d( V0 @
    trace off,09 j) ~8 d. x! Q, W
    停止跟踪编号为0的CPU, 并且关闭文件
2 Y" {& m6 s. H1 B# d
' U8 A1 q# E1 A    trace 01.txt,0,{tracelog "A=%02X ",a}4 J/ z( g; v. p8 m9 g2 D. P  I5 m
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" K: N! C6 c9 w( r: j- Y% A, Y    并且在每一行的前面, 写上"A=a ": ^( e3 \1 Z* \7 C8 y: V$ ^
    "A=%02X ",a为一个C语言printf函数常用的输出格式! u+ @7 X) G: P5 E" E/ f
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入  O3 U( j* E, c$ @  m8 P' e
    X表示为大写十六进制数
2 C* f$ [) W2 J) ]' u
! i2 u! G6 `" }/ G& o
  q7 N: k0 a$ G% b; q# B& R8 U( L( M, H6 q# y
内存直接写入指令: maincpu
4 J& @/ c* [+ n$ C: m9 Y    格式为 maincpu.[][]@地址=数据
$ S7 V' Z7 x% V/ o4 b6 e* p    第一个[]:' X/ P; y- m/ [8 F4 _$ n
    o 表示ROM地址# v& H$ \, `; |, o. Z5 ]
    p 表示RAM地址2 r- z  u: Y& z) {3 j" S
9 j! `7 |3 y6 z& \
    第二个[]:
1 {4 _  e7 \+ T0 `6 n# @% ^1 K    d 表示4字节
7 h( ~& e1 S8 q7 K* B8 k    w 表示2字节
- ]3 G* S9 _0 s    b 表示1字节
  W+ D4 {% z8 P) D( j5 k! D8 h; B: V( \* ~, j$ v1 C- X  Q6 j
    例子:
. o% f0 p1 D$ h4 Z0 `, F    maincpu.ob@1234=FF
; f) E) |7 p% V8 X8 l0 G    在ROM地址1234处, 写入FF一个字节
. u! ]( r8 R9 G/ c: L: F
  w- }6 f4 u( G# T    maincpu.ow@1234=4E71
  o6 m4 K8 N/ `& u    在ROM地址1234处, 写入4E 71两个字节
0 ^) r+ N- D/ \! x/ E# n, @, x0 f
    maincpu.od@1234=600A4E71  J3 L5 [9 s& w( z+ C& c: |: m& A
    在ROM地址1234处, 写入60 0A 4E 71四个字节
/ H' ^4 E, O8 Y& B0 B* t' K5 ^. c  k" C
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% }* K; @/ Z- E# M  x, ^    $ T' z1 S% a. Z* Q6 _& p) s

; q! L. z  @* T# Z' v& g- f( |3 D# t其他:  @, K! e& e8 l. M. Q8 d
    dasm 输出档案名,地址,长度
5 H7 e" Z5 L2 {2 y/ C; ]3 @- ~) q* T    输出程序的反汇编代码- M$ B, Q: R: @: b
    例子:
8 y7 x! C8 M2 e% }. N) h' k8 t  E    dasm 01.txt,0,100000
+ Y, _/ U3 L( E* G    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! P  G) R" o" W/ x6 v2 C. ?+ K5 F1 ^9 m# M0 s5 t
    softreset7 L) R" z( A! C% E  E7 T4 r
    游戏重启, 但不重新载入ROM# {8 j; Y- [$ D8 t0 T6 Z6 m, N8 u! K
& C2 s4 F. ?; q' J: Z* U
    hardreset
7 Q; W0 E- H% P+ J8 H    游戏重启, 且重新载入ROM" b! ?/ W' g% K$ Y% _4 v
1 w+ i; \& {* p- b/ H: r9 c& s
    snap xxx.png5 o& P# B. h5 l, T
    截图为xxx.png
! `) i% Q. v! C% P3 T% C. T( d& S, `1 G  t4 Y" ?! s
  
% q7 P1 h; |) w) d! b( X3 d! Z  4 v* S( o" n4 V7 ~
  
, |- l7 {* d$ \热键:
6 h9 u; H$ U  b5 B% S; M+ [6 S    ~ 中断游戏
5 A# [* ?9 {. L' X! K% H    F5 运行游戏. b) _3 C2 s0 \  o% q
    F12 运行游戏且隐藏调试窗口
. x0 x' k& L8 E9 O    F11 步入, 单步执行, 会进入子程序
5 o3 W0 h# L3 _, R/ z* X    F10 步过, 单步执行, 不会进入子程序
$ L# g7 G$ P: j: P+ a5 r2 r    Shift+F11 执行到子程序返回+ ?  [+ x7 C3 O% o4 _, Z5 {
    Ctrl+M 内存浏览窗口7 S5 l0 {) d& j: c
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 R0 m0 r+ U& Y# h1 G, N6 g$ @" e  v1 O- K3 ]; O( z& H
{:4_94:}
. V) H& i+ D: Z4 u8 [3 O! g; v% D
7 }2 U2 S" \  Y* O9 P7 l

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2586 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- c- t6 g1 p: M4 |& c3 q' U. ~" l" Z4 p" R- |
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 |' V8 B9 q4 a" }5 j  Y, N11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-27 03:33 , Processed in 1.068359 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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