EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

* W3 B5 v6 E. P( J很快速的整理我自己常用的指令
* S0 m. h  m6 D! O" P9 _& s( A( Y3 j$ P" G) d& E
{:4_112:}
2 V& D! D7 Y. h) b. p, |9 r, z& p
" ?* h5 E% n# [. o: X% I( ]3 I( hMAME DEBUG常用指令" @" Q1 T# l" R! Z8 @

; V4 u( }0 n5 Q/ [' ^' }内存搜寻: ci, cn, cl6 X- o0 p% q/ d" U

* \3 S3 K/ F7 O- @/ `/ _( A    ci- E9 X+ d9 d1 }8 _% R& X$ K3 t
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) A5 e  [( R, R; \
% n% z; }) o& v7 m) Z" Y    cn( D9 p6 E! V, E+ W2 T$ p
    搜寻指令
; Q% w6 J5 a5 u% U    例子:
+ J: ?$ R8 }2 B, k% q    cn eq,60
1 i+ g% e, ]/ r- e4 I6 C! ~2 c* g' I    搜寻目标等于60 (十六进制), n3 ^. v9 ~5 D5 j+ i' z2 _
        
% J3 N* O3 q; i    cn eq,#969 c7 [2 [9 g! L6 |1 D6 c
    搜寻目标等于96 (十进制)* H; I0 _* }+ d0 y2 Q: ~- h3 {
, u. z* x7 N- _3 ^
    cn eq
( ^# r; E$ z  X( h+ G2 ?    搜寻目标的数值没有变化- F. G/ C' `8 @3 w- a
  G/ \6 b5 `% X' p+ E
    cn ne
* ?1 o0 V) S# O. `( F- n, l4 P3 ]    搜寻目标的数值有变化, T! v/ L  Z/ W3 y
        * s- c! g! ^' `: [% d2 @4 Z
    cn +
4 R2 K7 }4 U, D* x: j1 ]    搜寻目标的数值增加
, s% _  A4 q2 F( [" l; S    # U; z" ?& B. N) {
    cn -1 h/ R' g+ u/ d7 M& K
    搜寻目标的数值减少3 `& o& l  _0 N+ h# R2 q
        4 Q1 z0 f  j# y: m: ?
    cn +,3
, x- K( j  G  f, T/ Y6 g$ |* ~    搜寻目标的数值增加3 (十六进制)7 D' R6 J4 n7 A+ W* J

+ [$ t; z' {1 f$ _    cl9 z+ r! c0 n$ P9 K
    列出所有搜寻结果
0 o* X2 H) }8 t- _6 [+ P) i
5 L8 `1 S5 i" v, F/ g* o    cl xxx.txt
( |/ @% m: Q5 `    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 f) v; s' _+ G8 Q! r
2 s+ o, U7 ?7 ]# t" h    ! _6 K; ^) |. B  {. _2 j
内存监视点指令: wp, wplist, wpclear
, O9 v5 D- r. [- z; j2 b    例子:2 M0 I" G( u% e
    wp 1234,1,r
3 ~, O) i* I" s# {      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
/ i- C+ I4 G- h5 S) V' }8 N) W! k9 m: \# ~
    wp 1234,2,w8 C: r" G" e: V
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( v) T, A1 k* k3 A0 Z; j. ?, r     + f# E" f' C: T3 g1 C' |. b
    wp 1234,6,rw6 [& Z; q4 @3 c# z, r' S1 K
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: ~3 N" S( G3 ~8 h
7 K. `) ]& B" l$ X) [1 F    wp 23456,a,w,wpdata == 1
5 S+ J) `! M, J+ x; K4 o- o7 E      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
# |/ o! O2 \$ L+ `. f
& |( ]6 A. V5 u/ J" e    wplist& ?- l, e0 R7 I8 l/ R) n1 D$ M0 S
      列出所有监视点+ h4 Z4 s( H8 @$ I: n
; b9 f. y& B" j7 \/ R$ \/ u
    wpclear 3
( \0 J: K+ r& U3 Y2 ?: @$ i% P      删除编号3的监视点
; @( d% r* ?7 s5 B0 J/ N% a2 W+ c0 z- x/ n: u5 K6 j! S4 G
    wpclear6 B' o7 R  k6 f( ^/ s* c! Q
      删除所有监视点
  q# T3 ]( Z' {  [+ a. J5 M8 p# Y- ^6 N
      
# i' T4 S2 `( T% |
* `7 L5 J# {+ [! x0 q  V6 S6 O程序断点指令: bp, bplist, bpclear$ z' Q2 C8 f8 s. r
    例子:' h& g+ N$ r0 v- l
    bp 1234
- T. a' i5 r! X7 x+ F      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断) a7 P+ |# U5 z6 [, r8 _

/ d( H2 x1 c# c; |, U    bp 23456,a0 == 0 && a1 == 0" u: Z- p/ x. N" C# m
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
% }7 x. ^* U' e2 |, f, {4 r
3 Y& d& ~, \$ b5 v9 i; p    bplist- _1 a, c! v3 d) U" o7 `  y
      列出所有断点
, f4 H* E/ ^; \) w/ ]+ K9 D% W4 k7 [" t! c* D3 P: e( Y
    bpclear 3& H5 ?# c/ I$ p( a
      删除编号3的断点& k0 J( N: }6 B

4 H* d- y1 \. ]4 h    bpclear0 P; a  q% A) L2 t9 ^0 w
      删除所有断点' U& x& C' P0 J! {! t
8 O8 e( [/ @) C
      : w" L7 J1 F" Q7 M  i; g
      ) s0 V5 {6 s5 f
跟蹤紀錄指令: trace0 t3 v5 N. g9 s& F& r, s/ M0 _
    例子:
5 |2 }9 l( l5 w) y% ~: i    trace 01.txt
8 [  s, q+ e+ g7 j. ~9 V' P* E( L    跟踪当前CPU运行的所有代码, 输出至文件01.txt. g7 `% v. ]* i; D: n6 T

; w) Q8 N7 j  q% C    trace off
5 [" |1 S6 K( Z7 b/ [    停止跟踪, 并且关闭文件3 u5 O: B# Q+ J) g7 c: g9 i

- w7 ^! \- b" Y& R9 X% B0 ]    trace 01.txt,0
; C6 K8 z" V. w0 ?    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, i3 u- c% W! r" l" x3 z7 H
: F# L1 L6 M4 T' T& W    trace off,0# ^; e6 ^$ G  n% o& F+ ~
    停止跟踪编号为0的CPU, 并且关闭文件
, e+ n# i: ^; `; y: A+ y1 ?
1 G# @. ?( l: v; B( [0 f    trace 01.txt,0,{tracelog "A=%02X ",a}( G! D7 C2 ^% F* O5 K
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 T& \  x1 H/ f0 Z4 z" u
    并且在每一行的前面, 写上"A=a "
- C/ Z/ t  \. ~* V! D, }) Y    "A=%02X ",a为一个C语言printf函数常用的输出格式
# o, y; Q4 N$ [* q$ n4 _    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入, c3 |4 ?7 }( y) ^) I$ R- E
    X表示为大写十六进制数+ F* Z0 I4 J2 U  l

  t/ P3 U! I/ W; H$ [, i' P( ?% W2 I$ v& Q

' w7 i( J1 K. w& F% E; S内存直接写入指令: maincpu, h3 ~; T! [. q4 g4 i
    格式为 maincpu.[][]@地址=数据
6 Z" C1 T" U- {. _, a6 ~& F    第一个[]:
2 F# ~6 M3 e% C0 l" B' k* T    o 表示ROM地址
1 }: z! n, o8 Z1 p    p 表示RAM地址
  G: _2 R& {% M" z1 f
% m! q" b9 K" U' ?* y    第二个[]:! u* q$ l* z4 i% P- W: F( k, V
    d 表示4字节
* Q2 E# a9 s5 z) D" M. }    w 表示2字节
/ w) n5 [6 I( r# v# `    b 表示1字节% k, r) d: o% b2 s0 I
4 o: B; m: Y5 P4 }* m" D
    例子:! ^5 F5 k' X0 w0 }
    maincpu.ob@1234=FF
+ W# C! Q, G+ V, M" e, K    在ROM地址1234处, 写入FF一个字节
4 W! x8 A/ C. I: P- h4 s
" ~. P" m- s$ L! n' Q# n" q    maincpu.ow@1234=4E71$ ]6 g  R  v2 J  N, i2 H
    在ROM地址1234处, 写入4E 71两个字节9 q7 n5 D) r: A0 C) q$ F9 B
2 J4 S  o3 L& w, ?! w
    maincpu.od@1234=600A4E71
" a, Z% d5 T1 q  i% ]$ ~/ t3 y    在ROM地址1234处, 写入60 0A 4E 71四个字节4 O8 ]8 w7 F% a# I9 N, n

! u* z* f9 G/ U& l* I  c6 b! n: G+ m) G    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' J4 p6 o& ?. R* u5 l# j/ r
      w: j8 k" @- P; ^0 ~7 w8 }; _

# h5 m, {# ~% y  e3 A" f6 E其他:% ]3 R7 Z# C8 w
    dasm 输出档案名,地址,长度
8 b" e1 U/ l% p3 [# e    输出程序的反汇编代码/ [% k6 V1 U  A+ w$ ^2 {
    例子:9 I9 E. h) r1 S! C3 K3 h
    dasm 01.txt,0,100000
5 d6 y) `0 e4 d    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 V: ?) C# m& F: g/ f9 b. b

7 A) X. @0 k- `: g; S7 z    softreset
. k3 x) L( {. O2 V3 x    游戏重启, 但不重新载入ROM
" J; U) P: I( A5 C8 [. u' S
0 U( [( R3 E" f3 X& U7 g    hardreset
5 X/ K$ Z+ ^# M2 c; b. {- [    游戏重启, 且重新载入ROM  ~. a8 S& Y! ^0 a8 h
7 o7 g$ v: Q5 l; ~+ J
    snap xxx.png
: q7 g3 z7 F; ]6 L    截图为xxx.png5 g9 V1 B# ?0 |0 y# G  B9 _
# |7 {( e3 ]) ]( ~
  
' P- J. U6 g# f  $ k) s8 x+ t+ d% ?# D
  ( u( Z  b. w5 [. z# B5 k) j
热键:/ Y+ u0 S2 `- i: h. [
    ~ 中断游戏
6 S6 V+ p, h& |% e) m    F5 运行游戏6 i0 ^# K1 n2 S* ^
    F12 运行游戏且隐藏调试窗口; r; S8 D8 [3 ]; W( Q# X2 D1 v
    F11 步入, 单步执行, 会进入子程序
# e# @- |3 f" I! f( S    F10 步过, 单步执行, 不会进入子程序
9 r! Q* m3 V1 V, {' V    Shift+F11 执行到子程序返回
% |: \$ Y: r- a6 w0 s    Ctrl+M 内存浏览窗口, h$ L' M# g, ?0 c0 o1 S/ D
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU5 }  E% g: I# T. Q
; O5 z* J8 n: K* W5 ^
{:4_94:} 3 F5 U4 M, N" g0 w2 z

  f: j: i/ k5 s! o( t  r' J+ |

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2556 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- R* s0 j/ ], g! @
8 M- q9 s+ H  P/ p; hPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
" s9 w* p( ~/ h8 t6 z2 `  y8 J11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-5-16 16:56 , Processed in 1.077149 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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