EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

3 l" J5 G) p+ D! c) @' @* K  |很快速的整理我自己常用的指令1 Y6 D# E$ d- B- x, Q  m; D
3 b/ I/ p) Y) V
{:4_112:}
( x2 o# s% u) e& q- o1 A- w, R7 T
: \5 w- D0 b2 ~+ ?& fMAME DEBUG常用指令
" z2 J8 d: w* a. o1 z# A) U  Q- B4 I. w- v
内存搜寻: ci, cn, cl
# e+ h9 T% v1 W: Q  N6 V
3 _" z2 y7 I5 S3 ?    ci
9 B' N& B6 L+ t6 A5 {* a. I. S    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
% M% v8 _( X8 h* V
4 G; d* K4 s" \    cn
+ |- s  U5 z8 @  I; k* h" q    搜寻指令
( k" ?, K/ M  E: R    例子:9 b& l- [4 F" s; g' k$ ~5 p
    cn eq,603 _7 N6 ~' J) f* l" \$ C8 ?
    搜寻目标等于60 (十六进制)
4 f' D. k* ]" N( w, t        . P" H0 }. p7 X4 Q! o3 t0 I9 s
    cn eq,#96
5 c: _# `9 u: E    搜寻目标等于96 (十进制)# Y7 X7 v8 `/ N& t# K$ @0 y/ G
, u! X# n3 U3 @* C. D, ~
    cn eq
/ s. A- a# f$ K' X- Z. D    搜寻目标的数值没有变化
$ {: j& [" j$ D: A
# Y1 ^9 h2 U4 w0 g! s" Y    cn ne
9 D2 M9 [; P  ^! T    搜寻目标的数值有变化% k* i) ?6 P  N$ n
        
$ V8 J& j7 J: d/ l; z    cn +
. B% x* |' i2 Q: m    搜寻目标的数值增加
; Y3 K, G% ^" P* w8 n: o: K    4 f) ]6 `' ^+ v9 \/ |: m" y' e- O
    cn -
0 b6 A' y7 K  ~  C1 M% M' `    搜寻目标的数值减少. k# p; e( |8 f" s& }/ l9 X
        
# J2 G: c# l. ?" \1 C! u    cn +,3; f; R( \4 P$ m' F
    搜寻目标的数值增加3 (十六进制)
9 D/ @0 Q* {' z2 J. D: M3 r% P1 F
- s) R) B& I8 b( _    cl
9 a9 t$ d* n& e0 G4 F    列出所有搜寻结果
8 f& o  s5 V0 e9 a# Y/ ]
2 T3 A$ p4 ]9 ~/ i/ P+ Y    cl xxx.txt
2 w7 Q# T+ d. n; k( K) ?* u    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式) {" j) N5 \6 E# a4 l
6 @; ?2 `: h; }' y4 }( Z: s( x
    9 R3 j% y/ k- a
内存监视点指令: wp, wplist, wpclear
0 G& v0 a: A( q6 }  d2 O- G    例子:' t$ b$ `9 {# Q3 s! u* V% e- u0 `
    wp 1234,1,r+ ^0 M! }: I$ w9 ]
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1" I! d, ~' Z- L) |/ a) ^7 |2 {

+ [, K+ b# E- u* Y4 ?* U: P    wp 1234,2,w
' H' q* F& |: [- b3 M      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 y/ d, \3 z! v9 Y& ~' U# u     
1 [& R2 |  Q# D$ q    wp 1234,6,rw
; A8 e7 j! W- a% e8 f0 W. p      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- k* _4 s% B% d# ~' E7 K8 w# s
$ J. x/ n* U; v' I% y- ~+ Q9 d9 u, G
    wp 23456,a,w,wpdata == 1* g1 O# r% O( s, r5 l
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 k3 Z/ \. B! S( W) v% [2 }& s  ~4 _( i8 Y" s
    wplist
5 e- S! X/ w* e0 K; v( o8 C      列出所有监视点. `1 v5 ]' u4 ]9 w) @8 A

- a9 B) h. m( T: R" V" t  @    wpclear 3
* S9 E: t$ k9 B# v      删除编号3的监视点3 G! X$ \3 ]1 _- G* `
& _& q4 H) h" r# G
    wpclear
4 v; h6 _: q; y  I6 E) H      删除所有监视点3 @7 L$ \5 Z4 O; |2 [5 j
) {( s5 a! v  s  f
      : L' l9 W  g! k7 t

( a1 Y  C  t- e' c程序断点指令: bp, bplist, bpclear
1 I  a3 I4 O9 S2 ~    例子:
% d3 M2 t( d- ?, }  s, |    bp 1234
7 w" E! R- H! m  X      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! ~' J+ y- ?3 U5 ?
; l0 x4 x, @  L( P) N    bp 23456,a0 == 0 && a1 == 0
# N5 y" F& v" \4 f      在地址23456下断, 且中断条件为a0等于0以及a1等于0
% q7 i. n3 j( `) I8 |8 W* H
  Q% s+ s% u8 x( K    bplist2 k$ A' c- l7 C1 u* b
      列出所有断点  d+ U- D! P- E" q* y% \4 U8 a

8 \) t' N& U8 ?3 g# r    bpclear 3
& b% Z$ T! ]- r5 e8 l- O1 u      删除编号3的断点6 V4 o% Z% u( e* D9 Z6 ^- f
* m% }8 F. g" ]9 c& |
    bpclear8 \' E! c' K/ M% Z& M
      删除所有断点+ h: D+ o7 {) O! ]; v" F3 f$ y0 J

3 w- u2 @1 \5 a# z% Z" M+ o      
7 D- W+ Y6 W# v3 ]& j$ i' ^$ p, K      
6 c4 ]4 h9 _  y+ h* [  B* X跟蹤紀錄指令: trace
+ K' H* j3 ?# f: w# I; K, G    例子:% H+ E2 p4 L( Y# [& R' H
    trace 01.txt
# e, i: R& q3 R  T- L/ r    跟踪当前CPU运行的所有代码, 输出至文件01.txt
* z2 x4 g6 V3 E" i+ {" @8 N( \; C9 w5 J6 q
    trace off
5 v( c9 v- ~) U  V, r9 V. S    停止跟踪, 并且关闭文件
  p8 K: u6 n5 K  b8 c& u* C, c, N" k  \, u) d2 K1 A
    trace 01.txt,0. P) T# j3 Y% c' F3 @2 ~) J& E
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt2 ^2 F5 t  g% E% Q7 J% N, Y0 d2 k
) w4 t& L) L4 e# G
    trace off,0' {+ o# s% k* x. x  Z/ @* O
    停止跟踪编号为0的CPU, 并且关闭文件( ~( U# a. u' H3 c
* o* N* S2 J& M5 o/ Q; a# x+ N& o  {: n
    trace 01.txt,0,{tracelog "A=%02X ",a}
! p8 j. q3 U2 m3 l. {    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' b9 r7 b4 k2 o- s1 j% A6 \6 `    并且在每一行的前面, 写上"A=a "1 a5 r6 _+ R0 H$ g# K' R$ W: m8 [
    "A=%02X ",a为一个C语言printf函数常用的输出格式
6 E( L/ v! N2 c4 |/ Z: K    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
: P, s+ [; W7 q% D7 H    X表示为大写十六进制数* `4 ~/ k0 R( R* g3 H2 W" y: n

; b3 ?9 b3 ]( P) c: J+ A$ B$ O+ }7 G

/ T, \  y: c; l内存直接写入指令: maincpu
: [2 H& u0 L) b% M8 x4 w    格式为 maincpu.[][]@地址=数据. i' F( i2 }8 B- |
    第一个[]:
/ U, Z4 d1 S6 Z    o 表示ROM地址
) T2 N, _+ @: i, F$ R    p 表示RAM地址
3 O  O- g; C0 q4 ?
$ {9 w$ d. U6 z+ z0 |& J    第二个[]:) M+ F4 P2 n/ n! i! I; L8 a1 ]8 g
    d 表示4字节3 f' V4 `0 F1 H2 @3 M
    w 表示2字节
9 g6 A4 a5 a: P1 [    b 表示1字节
0 x2 P; z' n' A7 d% I' p; O# C1 y+ L8 {& ]% Z5 J( A9 m
    例子:& ]3 g: J1 z; A
    maincpu.ob@1234=FF
+ p$ W2 t/ i4 N    在ROM地址1234处, 写入FF一个字节
; A$ i( U& ]. F- x( C; s" u( N  c' v' v, k' x, T
    maincpu.ow@1234=4E71  A5 I* e5 \2 S. F$ M. u, Q  R' r
    在ROM地址1234处, 写入4E 71两个字节* B9 J- B% e# y

& W$ J1 h3 ^) W3 m% t) d7 R    maincpu.od@1234=600A4E719 H4 m0 h2 i+ e  \
    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ q, U9 @' }$ L' r( L+ Y
) N# B9 l- F. ~# F; r; F    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 ~: k- T/ r- V3 V$ v" I) n
    " a( C0 w( z* J4 ]1 y. T
5 \9 O  L5 c6 R! o8 O
其他:( r9 Q$ K! R' E) E' r
    dasm 输出档案名,地址,长度0 U$ \; b  \# f6 q: F% j, a
    输出程序的反汇编代码
( C: ?/ {3 ~, Z% ]" s' d7 W+ b5 g    例子:
  v" |2 T5 o6 v+ ?    dasm 01.txt,0,100000+ ?8 b5 m8 G) }! e: H, I
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 c' g% ?% R4 w  v7 q8 ?% T7 s  N1 j/ F1 L4 d; \
    softreset
/ w7 [9 ~7 K% p1 x& I  g    游戏重启, 但不重新载入ROM
" B+ \" s% b- k" w! x8 U, N& q* C) S5 e1 k# U( c: j4 e
    hardreset- n4 \6 b7 u9 \/ b* g
    游戏重启, 且重新载入ROM$ m% z- C. X; n, m  V! w( K
1 ?+ Z0 F1 q" ~  q2 v
    snap xxx.png9 c: l! l' t% I9 H3 Z
    截图为xxx.png4 N* V* Y3 c/ G$ M

) F, P; y3 K. y& b- ^6 {  5 |0 u# |8 N! n7 }' l; |: k" b- u( ~
  5 k% t- h; @& e% m
  ( d, r3 e6 q7 r! I
热键:
2 o7 Q! }" v* q+ M" _    ~ 中断游戏
8 z# y. H* i3 T# d/ l! z9 i    F5 运行游戏
$ D. E$ o3 y- s+ p! w; W    F12 运行游戏且隐藏调试窗口
4 O* n  M7 b! P% m% `3 [! a0 T    F11 步入, 单步执行, 会进入子程序
8 O$ ?! F( o' j* }    F10 步过, 单步执行, 不会进入子程序
4 K) v+ z  V9 v1 ~    Shift+F11 执行到子程序返回" I  q  O; E- E4 i4 f9 y  d
    Ctrl+M 内存浏览窗口
( l7 ~' e/ ]1 R( P$ F3 z. O7 x    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU3 r, u  Q' P  l& R/ D$ _( f2 J

8 z) w' A+ g! Z  h4 u{:4_94:}
8 S# }! b' `- g( k2 G
3 V2 a  z# H9 ?2 I

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2573 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
6 X' Z7 |0 h  a* X8 I! Y
: U4 a2 G' J2 {/ wPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东# W0 m; W* Y3 W! [5 B' ~" g
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-18 17:43 , Processed in 1.083008 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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