EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
2 E8 R/ d  a/ J/ y, ~( F
很快速的整理我自己常用的指令. X9 Q9 b( G6 |" C% e) d5 ^

/ t/ d: r2 |5 j/ A, W{:4_112:} ! A& o( Y) X( ~# R; \

* R. H* x/ w- ~' @) _  y- dMAME DEBUG常用指令
5 v9 @( h/ W, A- F0 V) e4 W/ y
! U! |7 m, m9 S7 l* z7 t! |  M" f6 b8 C内存搜寻: ci, cn, cl  f: M2 F6 G# f4 N% q
, @3 p8 r1 ?% i) {" Y
    ci# m; d/ i: `7 `+ x( F" U
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 Z& P. h6 }9 u* V9 i' }6 |. G- V
& f! R; P' t  I1 X7 o
    cn; p6 }- o( d0 p" j
    搜寻指令9 d" @/ x/ Z* ]! ~3 k' _
    例子:: }( L; g9 d7 A8 ~8 ~
    cn eq,60
8 l% P7 n* H% c) j- F" J  O    搜寻目标等于60 (十六进制)
: v1 v! u: p9 I3 }& q6 C* d        ' b9 W* ]: T% Y
    cn eq,#96; ^' m. {8 m0 E# P  O# Y6 _% g* Q
    搜寻目标等于96 (十进制)+ h' u* P$ o3 o+ v, C( S1 y

  j; K. y7 A; M    cn eq
4 }+ _/ @, A" i) j3 |    搜寻目标的数值没有变化0 g* Q  I5 S) x3 `. b7 O: B, ]
' ^. ?: P2 ], o
    cn ne
; [% x% C- I& B( |    搜寻目标的数值有变化
% ~& i! M' z2 A5 y        
; l+ o8 [* C! M    cn +/ {2 y" F, v7 _. F5 @. l" x
    搜寻目标的数值增加
! T+ V9 f6 N. h1 W   
! f1 C  ^+ d6 v! I  k: A/ |, X6 U2 @    cn -- C+ l4 |" i% p4 d' r% D
    搜寻目标的数值减少3 K  P; j3 A% I* F& |. {
        
; J) Q  n+ J0 z" O* W% u; r4 u    cn +,3
; w8 c- ?+ a, i' K! r' v    搜寻目标的数值增加3 (十六进制)
& _2 l% o0 u+ p6 l1 i5 ?! B6 \5 v' l7 P- v
    cl( q0 x0 A# {1 R+ B, ^
    列出所有搜寻结果* o4 Z: w' j0 j  F, ?

5 q/ v. n% l( i* d: w- p    cl xxx.txt
- B$ q! z4 M8 u! S* H    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式: V$ L. h; j" @4 i1 {

1 Z( y4 m0 e, d9 D& C! {    " @! ~5 k+ X) b
内存监视点指令: wp, wplist, wpclear8 \3 ]9 A; Q- ~& Q
    例子:
, V1 K- _2 N  d. g    wp 1234,1,r$ ]+ C& x2 D7 c7 ?9 d
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; d3 b! C) S- `( W# A
7 h7 r7 W1 j0 F) |* J# D, g" D. ^
    wp 1234,2,w/ Z2 u9 q0 j$ L& C* r# d+ j
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2) e( g( w, d7 F+ n2 P2 f* [
     
( L7 W1 `8 {5 [& s6 }    wp 1234,6,rw8 D  m) V/ X* O
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- D* R& r6 i0 X) O

1 [/ w0 B3 {% i    wp 23456,a,w,wpdata == 1
  Q& G9 a& E* S! \+ {- f* I      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
' q& A/ ~7 C* L8 X
8 g) {6 c1 X0 u# D4 z2 ]( _    wplist
' M% F( ?- Z+ @, J      列出所有监视点! r0 W1 Q! a& f1 W( L; [

/ z/ C6 R: J. Q    wpclear 3( E# Y; c9 E% [$ K3 X8 I. h4 c
      删除编号3的监视点5 Q; Q) k* {8 p8 z" w) c# z" a

! W! O& O9 K6 e2 M' A    wpclear4 E9 t6 T& J3 a& G) J% J, y
      删除所有监视点
1 j! n) f3 A% T5 l1 c1 a4 z0 h. c3 i8 u* z! n1 m
      
; Y8 g; S. K' {
  l; k  d. v% @, h程序断点指令: bp, bplist, bpclear$ }7 T; G: K# b$ d- N% M9 P+ U
    例子:+ E/ B" D% o& Y( c( A. D; P
    bp 1234
; C# s. H# L5 i* L2 z2 r) v" d      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
  r) d% X- _( c% w; t1 R- z) A! J; g
    bp 23456,a0 == 0 && a1 == 0
8 h3 l) s& _  Q6 k6 Z  y      在地址23456下断, 且中断条件为a0等于0以及a1等于0
* W. ^% z+ a7 y; S& U9 a' u6 J1 w" J$ i; J' J# h( n
    bplist& y+ f& E- J' K
      列出所有断点
4 ~9 y7 t# G8 Z- f8 \( x- }7 K
" j! Z' D, F3 F2 O) c+ l0 b9 B9 O! t    bpclear 3
8 J0 R8 @% p8 C: u      删除编号3的断点
0 b. v" V% c. F5 ~# F* K6 N" i$ I/ ~; H
    bpclear
2 F) H1 l7 y2 }* D& T% |      删除所有断点% \; G) v* u3 C* v3 S
" [8 e2 P8 D: |' F2 u# o6 q- X
      . c, d! ?- j+ `4 n( U+ G: T
      
: L4 @/ _5 h) b$ @跟蹤紀錄指令: trace
/ ~. s$ O/ U( L" \    例子:
- g& r) \( x+ X  r1 ^% Q$ U$ ~    trace 01.txt
# t5 F, O5 T) k* M    跟踪当前CPU运行的所有代码, 输出至文件01.txt
7 d) z" e6 W! ]- v; G9 V
/ W0 x  f% n% m6 w) {5 p1 n$ F    trace off! N+ g. W3 i3 Z. [% J
    停止跟踪, 并且关闭文件3 U2 _, T, U! Z- s2 }

3 f$ E; N. Y- w( m. n2 k# W    trace 01.txt,0' G6 o9 I: A! O- s" o# k/ z
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, @( Z. U/ p8 W& ?9 h" t) {( Y- x; a+ j" R& e7 U
    trace off,0% V( I; y+ g6 ]5 V+ X+ O
    停止跟踪编号为0的CPU, 并且关闭文件: ~! I5 A& G+ y8 ~

9 h( b0 v8 `: U0 [    trace 01.txt,0,{tracelog "A=%02X ",a}& P+ U  Z! M3 @# c2 d  s
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 [6 g7 D. k4 w) j; `0 t# x; B
    并且在每一行的前面, 写上"A=a "4 V+ R. N" e1 R5 |$ ~
    "A=%02X ",a为一个C语言printf函数常用的输出格式
/ d6 d! [( q; m/ |7 ~3 B    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ M. y6 t5 [) p! b# f
    X表示为大写十六进制数) d) Q; z- _& c9 U- L" H. d; F3 f9 ]' Y
5 [) J! @- K5 _3 {8 Y
5 c$ G3 M* s/ `
/ h0 g# L, n8 h6 ?
内存直接写入指令: maincpu- A. L( E6 \# t5 v0 E5 h  D
    格式为 maincpu.[][]@地址=数据
# Z+ e/ c' J& `/ Q    第一个[]:2 \- ]8 _# }5 U& k$ [
    o 表示ROM地址
, m6 M( h; v' w  e3 A    p 表示RAM地址' h: N2 G) h2 k8 J( Z* w
, z+ V7 z- o( t% O
    第二个[]:: N- o' c7 s. Q# t- [6 B' O# i% x# }# d
    d 表示4字节
+ s1 g3 `8 D# g) u    w 表示2字节1 Q7 v  w8 b. ?3 X1 H" r
    b 表示1字节* ~0 k- T5 x( F# @& Q9 B

( |( ]" J; U, a% X$ B    例子:
. I7 E; J* ?  k    maincpu.ob@1234=FF" D+ X+ p2 i* m, T6 W5 ^9 Y
    在ROM地址1234处, 写入FF一个字节
) z. p) n0 F7 C3 k7 R$ V
1 x2 t# p. x3 ~    maincpu.ow@1234=4E71
( ?" s5 g( M2 M, j+ p8 f    在ROM地址1234处, 写入4E 71两个字节
" n! R9 {% b: b& b, S
& i0 \2 \* U# P- I    maincpu.od@1234=600A4E71" `2 J% t2 Y7 J$ z' F
    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ u/ s' b+ z: x, A! a2 n8 K5 I; h5 y$ a2 z# w
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写" W2 i) ]4 ~" S
    3 G/ Z# `9 F6 u( R% L8 {
; n) ^( J- B1 D2 }: q* U8 p
其他:6 r; U6 j% U8 e; A& p
    dasm 输出档案名,地址,长度0 [/ |0 _4 C% n
    输出程序的反汇编代码
8 S3 n. {, B7 h1 d6 T  W  _    例子:
, `7 F' q/ }5 L* G. O    dasm 01.txt,0,100000
. h* j7 W# n3 q1 \* M9 r1 h1 l    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
1 L2 |: z1 L5 D8 `; e6 q2 |" I& J: e
    softreset
4 S5 n2 @! [5 i+ ]/ X% i1 y    游戏重启, 但不重新载入ROM
# [. h+ P) i; z$ H1 g" Q
; ?; ], C8 b7 V4 s( V& [8 @    hardreset+ m  Y8 X  t- q" [2 K* K6 c
    游戏重启, 且重新载入ROM5 x0 o# H0 `2 T6 o* O5 M: {
9 d! u+ l9 k- c9 C6 b
    snap xxx.png
. l6 \+ g6 ~5 X. |! w9 q    截图为xxx.png* X1 |7 K- r: C

: U+ X7 ~0 ?! Y7 C  
/ e5 r6 ~! M# B  
" r* W7 |& ?" N9 z1 W  & T1 D! h) j( A3 Y6 i
热键:$ B+ u- ?4 H1 ~# n& b  O
    ~ 中断游戏
3 a( o2 l7 b8 `6 W0 Z    F5 运行游戏
) A. ]( v  ~+ v) C    F12 运行游戏且隐藏调试窗口
/ A6 Q, F4 e) v% K0 g    F11 步入, 单步执行, 会进入子程序: ~9 p: e4 z  P# q
    F10 步过, 单步执行, 不会进入子程序
) c3 f& f6 Q3 Y$ E' Y5 Z! G    Shift+F11 执行到子程序返回
) o1 r( F; ?6 _$ V* ?, a    Ctrl+M 内存浏览窗口; S  p0 X* f" [; b- a
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 h# |+ j; I# d# u* X* j
% W- F1 a9 C- ^% l# B{:4_94:} 7 n$ D& f3 X! Z# h0 h

4 ?  t/ @. m! F; x

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。0 a# v. l% `0 O
7 `/ Z$ [1 U! f7 U6 e! \7 I; A
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 | 显示全部楼层
要详细些的东东) w) L  `& B: n6 F) H8 S
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-14 02:11 , Processed in 1.081054 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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