EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
3 {- k5 `6 S' V
很快速的整理我自己常用的指令, e+ z4 J( W' m3 ~9 g

3 z$ @2 E' [/ ]. S" [{:4_112:}
! C  ]  e' l) s! I9 g& T  b1 i. i7 t# j% w
MAME DEBUG常用指令
( Z0 L8 e+ m# K9 |: r6 J5 p7 o% I! Y
内存搜寻: ci, cn, cl
% r1 u( A9 ], b9 o. x( B! c+ W
" \: j5 `- J# ]0 m5 J    ci0 q+ D# |) V# A  K+ c/ h/ X
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
( K4 S% n9 Q! d" [5 W9 a% b
- _; P2 m6 J1 W, Z0 F    cn
& l1 _8 o7 |8 w    搜寻指令
# F6 Z1 y7 G! `6 ^5 h    例子:9 G3 H5 L* ?& B' `* H& H. s: Q
    cn eq,60
" ~$ [  o  e2 i3 {9 w) {. Z  D    搜寻目标等于60 (十六进制)
- _1 q; |: Y$ T( r1 [        
0 D+ z1 d" u0 R( r9 Z; E' X" R    cn eq,#96; B% |' L7 ?! o6 g  B/ Q1 z
    搜寻目标等于96 (十进制)1 g  c# @' t  w4 r9 e

: M+ @" K# e  X7 f    cn eq$ b8 ]6 p! f2 q
    搜寻目标的数值没有变化
: c$ r! @! U7 \6 l0 Q2 |; W7 M
    cn ne
# T& X1 Y6 x9 N8 S5 b3 f  n    搜寻目标的数值有变化
. b  m% {5 z8 [5 \' {        0 Q6 U& a* Q% ]) e
    cn +
. ?$ q$ K- H) ~- B( D    搜寻目标的数值增加
) v/ J4 \- p& y   
5 H4 a7 `. _! ?! C9 ^' n: V( ~# I    cn -0 C/ J* M$ C7 R1 K4 a
    搜寻目标的数值减少
8 Z5 n+ l( p$ T1 a3 Z: [        1 V' S8 s8 P1 r4 r0 O5 E% ?
    cn +,3. \7 z  P8 E% O
    搜寻目标的数值增加3 (十六进制)" q) j2 _0 K# H4 s, L1 q' |$ G( X
1 y" Z* D% x+ P7 K& N
    cl( r9 Z6 Y7 Z, q) R" l& T1 o
    列出所有搜寻结果
5 p+ c& H5 I) v. m: l2 }  J! g& a4 y0 |/ N. i
    cl xxx.txt* T8 z( z% A# M) C2 U
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, |. J7 C) e& f+ O5 f+ Y+ D# F# p+ z) |. j1 ?
   
% d, v- L3 m& m内存监视点指令: wp, wplist, wpclear$ N- @' N  R0 ]$ p. S4 n
    例子:
  v. D5 N# m; f0 c8 y    wp 1234,1,r6 I. Z2 b! ^$ G9 q; b
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* c5 P6 B$ u, D: @- J# _, a

1 @. v1 c8 E4 u, k. ?/ K' g    wp 1234,2,w
% Z. h9 R4 M5 S7 h. B      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ Y3 M6 Z  F. j+ X. W$ x2 B
     
# j- M8 H4 t$ M7 p. u1 _    wp 1234,6,rw( t  Q% Z0 z: w6 X6 Q: X$ ~7 A
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
/ I# l# w9 D4 z# y
+ D1 |3 n! I8 L9 u# K- V    wp 23456,a,w,wpdata == 1. Y% ]; Q7 K% c, G
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1( I: D0 U0 y* k: S3 w
3 l) Z0 c* j6 X% U, ?
    wplist
; i) j7 D8 n9 g: I0 Q$ @& y      列出所有监视点+ x1 D" G; W9 @4 p, p

" d: \# _/ u' e" c% m1 o# r    wpclear 3
4 N6 J3 z  |" ^% H2 U8 e! F' _' P/ j      删除编号3的监视点$ ]: E: t0 l9 ]/ a" p
) Z; U" K- A' Q; @) ?0 s
    wpclear5 p7 u" r& b; o7 ~9 \
      删除所有监视点$ R& r  w# y  }

8 _; B0 M* K; q, @/ O7 u/ z      + a5 {7 F, S5 `

$ k% O0 X- u2 |$ \0 y程序断点指令: bp, bplist, bpclear
% ^7 d. @. ?$ g, q( `0 _- q, A. t    例子:1 q3 p! s" o3 l
    bp 1234  e: x" Z* G. Q* K, U
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
2 Z; V7 w8 l* G; ~  f) t1 G* U! o: @6 \' w1 L
    bp 23456,a0 == 0 && a1 == 0
5 P: V) i0 \* T4 h; }      在地址23456下断, 且中断条件为a0等于0以及a1等于0* e. c( K" z0 {- Q' T

+ L8 ~9 A6 L3 v0 V: U    bplist  [2 N" |+ ?, Y7 I4 |" v
      列出所有断点
9 {2 _2 C  L* I3 e. A
" S$ P/ r- H5 h    bpclear 34 |' ^  J/ s& c$ l- {& K
      删除编号3的断点; a( r3 y! z/ _% s- j+ I. D
1 x/ {% Q- ^) J2 q4 Y
    bpclear
8 S# [* L3 ?$ J1 r9 O      删除所有断点8 J4 H4 J9 J# J2 q! V" y1 G0 |2 Y7 ^

* b, L, h/ x+ }8 K      
% \$ l. `6 B( B" \9 O      
& B$ R+ H) {8 M& r跟蹤紀錄指令: trace
1 D7 n5 `7 v8 I, \    例子:
6 a8 \% E0 B+ _5 O    trace 01.txt6 R6 I4 U, E0 g' X" f$ C9 E8 t
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
! ?# t: e8 |. R) b! N
7 W: Y' L, n' k8 j# b) K3 ?    trace off2 g' S) C8 Y& Y" k
    停止跟踪, 并且关闭文件
/ X7 d7 \2 _* i& Z% v, _8 m- h1 V  H5 k/ E6 \% n
    trace 01.txt,0
! m: i2 Z: m5 T/ v( g4 Y9 Q# H3 V! `, M    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 Y( S% E1 P8 {9 U4 {
7 |! B# r/ w4 k" Q! v
    trace off,06 m, q& ]; q( F* u2 w
    停止跟踪编号为0的CPU, 并且关闭文件
. \  h& I8 r4 P; M1 Z6 B' b: g5 N7 g9 g% H/ J; r3 J
    trace 01.txt,0,{tracelog "A=%02X ",a}
  x& t0 J$ r- ?$ \    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( k8 M. t2 n9 ?, A
    并且在每一行的前面, 写上"A=a "" J% r- O+ e: `  _" v' S6 j/ ^
    "A=%02X ",a为一个C语言printf函数常用的输出格式
6 z8 ?5 y; h! O* g2 l  P    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 Q# [8 `3 Q7 l  S- K$ C8 C    X表示为大写十六进制数, P# p; f6 }0 i: j& I; J$ D/ b
# w% _& }" o. }

0 d& I! j+ m/ O( j" Q! Q6 i; v" r2 J, Z' P
内存直接写入指令: maincpu/ G& A1 w' v2 v: r+ V1 N5 D9 K
    格式为 maincpu.[][]@地址=数据
9 ?. Q6 V4 I' `5 {1 ^+ ?    第一个[]:
# x! i. {# _) b8 J0 v6 |- Y  ^- ?    o 表示ROM地址
# h: E7 r5 r; \    p 表示RAM地址$ q# n2 l0 q' y. M) a+ J2 [0 z( W
' X5 Y$ V# G4 O' K2 i; l9 k
    第二个[]:- W5 O  w( P5 p" p! c0 ?0 f
    d 表示4字节6 U0 E9 Z$ @% q7 O# \
    w 表示2字节
, Z0 i: I* y! D  m' j& a& m: N. p    b 表示1字节7 `% J. u; {* b/ @+ j
, q. }( @4 I* {7 L) l8 H' R6 R/ o
    例子:
' L+ L! D0 }, g2 w    maincpu.ob@1234=FF/ S5 c- u% f4 J4 E" |$ S* q4 n. }
    在ROM地址1234处, 写入FF一个字节
4 z5 c% k- m. l3 F& Q$ L+ O
8 P" Q# R: M$ ^- i+ o# H- f    maincpu.ow@1234=4E716 z( Z6 S! E0 S6 P
    在ROM地址1234处, 写入4E 71两个字节+ d; Z! `  b* g( Z( A

9 R! [% X7 D" K/ z( |% I    maincpu.od@1234=600A4E71
. b! L/ W: L( r  [7 J* E* e    在ROM地址1234处, 写入60 0A 4E 71四个字节) ~- ]7 R& ~5 l% Z
) o+ T# k' A# g% C8 p
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 y& {" r, i5 e6 \2 p, q
    $ T4 J9 X# y  O' r
6 d1 C0 l) E& h: m! _3 }: A
其他:" x- n; \: s5 V4 L" x$ b0 x
    dasm 输出档案名,地址,长度! ]+ d; F9 P$ N4 k. A0 O& P: l
    输出程序的反汇编代码
  [- o% e" d: S7 r; Y+ I6 B# t* t8 \    例子:* O' F9 S/ t) `) r# Z; \7 }( j
    dasm 01.txt,0,100000: E+ ^, j. ~5 @" O6 s" v
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: p0 i; K( t+ |! a: j7 F6 e$ m& s" u
    softreset
& ?% A* p3 r0 }6 P" n0 s7 S- j4 A    游戏重启, 但不重新载入ROM. u! i, D4 A  |# G; l& m' Q

8 ?# B! }* \5 s2 Z" W6 B    hardreset
) g( A/ c1 p8 P! m/ ?  P* g$ D/ A) w' f    游戏重启, 且重新载入ROM+ K+ e# c& G# S% W: b% g9 Q6 M
# I; j  B/ ~7 m" [9 G7 k
    snap xxx.png
) H  o8 ^3 K: M+ y: w- V    截图为xxx.png8 n& @9 u( Z% \0 }' s

" V& Q+ D  w3 q  S  
# v! v' F  d8 w. c& G7 M' ^2 V( @  
- @# y4 U4 Q% J; O9 [" S) A' E( I  
- n7 m3 [5 h+ U! T2 ]- Z3 Q( ^热键:- z' k. i5 M9 [, l# x! `( k$ l
    ~ 中断游戏
' r5 n7 w5 |1 r: t' H  I# Q; F    F5 运行游戏
* z0 [% B: b+ |  q$ \    F12 运行游戏且隐藏调试窗口
: O7 [$ R1 x1 T  G" U( X  J6 u5 F5 w    F11 步入, 单步执行, 会进入子程序
# f& m' ?8 I( U/ ?% I3 ]/ V    F10 步过, 单步执行, 不会进入子程序
9 m1 o1 g$ u2 ?9 K2 V    Shift+F11 执行到子程序返回
! E3 I6 r5 p: j' ~" J    Ctrl+M 内存浏览窗口/ f( r* b) \$ @7 O- o+ y/ @
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU1 O) {; p3 D5 o# |4 A, N& _

' l8 |$ M$ ^& y  J4 L0 u- b- d{:4_94:} 8 K$ {, k& s, b, U# d! y9 @
  X) `# k. I6 X

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2573 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
4 X1 ~3 a! h7 O8 o' @/ t" n
4 r; h& \. K5 T( @) TPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
) P  A- g" u$ ^4 n/ o7 _11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-18 06:46 , Processed in 1.108398 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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