EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
2 {$ ~6 V9 y: U, ]1 Q  S2 l
很快速的整理我自己常用的指令% T( a, k+ U) W! n7 k

5 L, |8 @2 R' T7 G7 U) ^( t{:4_112:}
* L+ b; R9 I2 [6 T. \: q) S0 ~3 {5 ^. t( E' t
MAME DEBUG常用指令& W: |2 N& L! _2 |
' m' i$ k  r! Q) \
内存搜寻: ci, cn, cl% E) [' O0 b. q& w5 e# S" M# {

. h) |1 ^8 e$ k. i    ci
$ f, ]6 m# e$ w    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' Z- Z4 E+ M+ a6 [# V3 c$ O
: {) O% ^8 r' ^8 `% j
    cn& H3 I; i8 U/ C) q2 ]
    搜寻指令
9 k( W5 F+ y& R! @0 ?0 c# ]1 ]    例子:1 ^8 Q, K/ U. i/ n
    cn eq,60( a+ ^1 G) [& K% s# Z0 v" L
    搜寻目标等于60 (十六进制)
' F/ S# f% ]! N3 S          ~" l/ Y5 m+ ]* m
    cn eq,#96# O  K, I/ F6 S9 {/ P8 _
    搜寻目标等于96 (十进制)
5 |3 q9 {0 @& h3 w6 }/ \& v& @" |, F+ p/ P5 X3 P; O7 s
    cn eq& G/ h$ t7 u0 h
    搜寻目标的数值没有变化9 B% r/ Z( {" I
; L" U+ z: Q, C' R
    cn ne
+ M1 k# h% L/ p. e$ C% x    搜寻目标的数值有变化
( |. k0 X' D% |* `9 g! l% o        ; M! G$ G+ }5 H2 U1 F3 Z
    cn +
) v# U$ K2 F+ X  b# ^3 J    搜寻目标的数值增加
# L5 n" U7 u% l- d) q" z) T    ' S, c* F8 ^5 E/ m
    cn -
9 f" _3 A2 w9 h( a. s7 ^- s8 _    搜寻目标的数值减少4 ~. e' N  n8 ^0 q
        
7 L$ v6 v- @# H& d    cn +,3+ [7 j1 K$ v( W% k) M2 B
    搜寻目标的数值增加3 (十六进制)6 q. q/ j, Y6 r
7 n; O8 U/ J+ J4 ^* W. n. r7 w
    cl9 x6 {& e& q3 J% {% c0 x
    列出所有搜寻结果+ A* S( O  Q: ^  P# S0 D
( M1 O- d- O1 L' V1 b7 ?. K# J6 h
    cl xxx.txt  B. g0 h! ?* f; B' M1 X' m; z" X
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 z0 M" c+ ^  {6 E" n- @+ v/ Q

& M# U6 k% {6 c- H# n   
5 S1 q8 i3 G% [9 o5 L- S$ S内存监视点指令: wp, wplist, wpclear9 ~- b1 b2 M; M6 d+ [+ @+ X
    例子:
7 K1 Q/ Q- z( K6 ^! i: c1 h1 a    wp 1234,1,r
7 z+ A) B$ @; z! X2 Q! o. G( R      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
/ h& x* L1 t+ X  v, t5 F) h
) w6 ?/ w) ^( H( p8 _. K: v1 W' u( \. f    wp 1234,2,w
$ f2 D9 C* H, n# T0 y- h$ c      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度29 ^; i, s+ ^0 ^, @
     
# |2 U# F3 N' L& ^# P: C1 F    wp 1234,6,rw
8 x0 \& [* R5 E8 j4 Z( z* Y3 q      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6$ V1 Q0 w- j+ C1 R. }

; P/ ]3 P9 t3 `" X    wp 23456,a,w,wpdata == 1
! K. c9 K" E* F: H( e8 \% N4 b      在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 X& k' H8 V3 k+ s) x! b

, {/ I8 a. z% V, w; l* ^    wplist/ Q+ i# P. p# W& g' S  N$ f$ b  W: D' k
      列出所有监视点3 O3 N) u% v  j) P

0 H. R9 `# ?* M0 ?    wpclear 3/ v& X+ n' s: |" ?$ }) `: k
      删除编号3的监视点) T' w3 E4 G% P! G2 Y( a

; ]; z1 K/ m4 ?, \    wpclear
+ i; k, }% Q2 M& i$ b/ B      删除所有监视点
$ h" F' H7 z. o+ Q4 |) O7 r/ m: Z+ S0 c9 `) M( t4 }
      & o( Q1 }! c+ c5 t$ T

1 F. G  X+ c4 d# g$ N* e4 p程序断点指令: bp, bplist, bpclear  T+ G0 {* Z$ b9 c
    例子:* K( w& |+ Z: k5 G6 y& G' _3 S
    bp 1234
, P- S6 a7 i8 h  b/ _: q' r; l      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 j! _# E- r9 P
; [3 a+ H# }+ G
    bp 23456,a0 == 0 && a1 == 0
$ A9 h8 M9 V9 r. g) t1 c      在地址23456下断, 且中断条件为a0等于0以及a1等于0
! ~) d  H4 w) p4 H" g  r8 e; a0 |" W) X/ q
    bplist
- D, M! c2 c/ Q+ ^4 Z  m      列出所有断点
7 f; R( c1 |$ r* {% @; ~3 q, T# @+ z
    bpclear 3
2 E" d, S6 D$ ~% M7 ?: B/ g4 Y      删除编号3的断点. W. I. n% M8 l5 {9 o
+ I- f3 q7 A3 {) ~4 Q9 W
    bpclear  I6 A) Q1 n! Q
      删除所有断点
1 j: f, [& M. k4 y- _1 \) |6 m+ j3 e' E- c
      
$ a3 P0 v' o9 r6 H: E, b% I3 t      . O4 V: Z* }% H' g- k- w/ z
跟蹤紀錄指令: trace
4 r& }+ {3 r8 X$ a# ~4 [% B3 Z    例子:
: m  k2 V9 ]' L) n    trace 01.txt0 _3 D8 J" ~0 I) D% ^1 L
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 E" h7 ~7 W. {! H
3 k% u6 Z9 [2 H8 r$ R$ b8 N  P    trace off
& E4 F: y. ~5 e7 b8 i* _) m# e+ d    停止跟踪, 并且关闭文件
# m7 {9 N. w% ^; a% D9 K! A
. [  t4 O6 ~9 K. s; N    trace 01.txt,0
- t; k3 O& T0 w# F+ {1 Q' @    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt! g7 A/ ?+ e- Q2 X

- a' d3 _( \8 N4 n/ u  D    trace off,0
2 p6 F# @- p* X" N5 W# R5 r$ g    停止跟踪编号为0的CPU, 并且关闭文件# S6 _$ g9 x* g. {

* u/ p, g; b  u3 T( v) P/ E3 T6 h( U    trace 01.txt,0,{tracelog "A=%02X ",a}
- W+ m' q. h9 x0 N7 T0 |; a    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 o' S9 ?' _, j) ^2 c9 m    并且在每一行的前面, 写上"A=a "( z4 o6 c+ Z# o6 {" r( e7 x
    "A=%02X ",a为一个C语言printf函数常用的输出格式% b! B$ Y8 w, j; g) @$ F3 X1 K
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 N6 @; C  `, O0 K: L% D+ a    X表示为大写十六进制数! P5 w8 ^; Z. i; Z5 {; ~
! N  B" o" r4 p

) j; f' ^* P5 t4 r, R/ |8 @7 H& j% W; ^
内存直接写入指令: maincpu
6 E- D4 b6 Y. {& V5 U. c    格式为 maincpu.[][]@地址=数据
: C. k) _) k: F    第一个[]:, m$ o" v$ e* B9 h
    o 表示ROM地址  [  Q1 q6 a. _! @6 D& Y$ u
    p 表示RAM地址: u2 Z. \6 T8 B  a$ I, E* o$ y

$ A% S2 g0 I7 b. [3 w  h# N    第二个[]:0 E' o3 G" y; e8 B" z
    d 表示4字节
! J! ]; F8 E) s5 A/ j    w 表示2字节7 t5 N8 X+ W2 z1 R0 @$ N; j  Q
    b 表示1字节
1 A3 x. n9 p5 W5 G. C4 X1 @; x
    例子:
* w7 C" ?, m/ ~. g    maincpu.ob@1234=FF# ~' X  L, C- N5 r- [
    在ROM地址1234处, 写入FF一个字节* |2 q. b# C. Q* {3 p, {4 K

/ r) i# }5 [  L$ B    maincpu.ow@1234=4E71
3 y' A9 X" a& E! V  ^2 ]    在ROM地址1234处, 写入4E 71两个字节
1 r2 ^1 ?% S8 M6 \" D: E
% v7 p4 ?) j0 X+ Z    maincpu.od@1234=600A4E71
6 g. ?* ?9 V, T7 b. @% W6 c    在ROM地址1234处, 写入60 0A 4E 71四个字节
/ ?7 d9 A+ [1 |! I% b( J. B! t/ s+ v7 t; J" s# G
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ G% Y$ y2 [/ z' O    - L6 p3 I8 d9 Q, n, E

- U7 `6 k1 _4 b其他:
% C/ E' U9 Z5 x% L; `    dasm 输出档案名,地址,长度$ a( H! w6 j) S) n) {9 z" @
    输出程序的反汇编代码
+ D+ V5 r7 J. C9 @5 L    例子:3 E8 N8 P+ ~+ |+ j* Z* s  D1 G% `
    dasm 01.txt,0,100000
: c9 }, p# {, u( o' L4 |    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt/ H* f3 U; d; Z% i7 M& Z; Z

: v8 e) P/ H- m( p    softreset- z" h; K! R0 q' A
    游戏重启, 但不重新载入ROM# z, D3 f+ d6 w- z( w

# M1 g4 U7 S- G6 m( ~+ R3 p- `    hardreset
; S& T2 M: w3 T: O/ `2 r8 ]    游戏重启, 且重新载入ROM
: L) `  M! c, x0 x1 Y# O4 Q" f# q9 R1 h, Y
    snap xxx.png
% Q& W3 O  }: M7 J6 n( k    截图为xxx.png/ S* h' x6 t9 E  k6 J

8 x- h! B' L5 P( U6 _- U) X  
2 |; x, p2 Q9 \- _; H/ @) b  - [& ^/ U& x, L" I% {
  
- K, q: }! j6 [* G热键:
% G' `) x- q/ l9 U  t0 Z    ~ 中断游戏9 U. y& c% [8 V$ K4 {( P8 G
    F5 运行游戏
8 W  C" ^* i% D# B    F12 运行游戏且隐藏调试窗口
! h/ h* O) b! g7 }( B    F11 步入, 单步执行, 会进入子程序# s. j. a# B, k
    F10 步过, 单步执行, 不会进入子程序
& ^) C6 ^- ^# S% U    Shift+F11 执行到子程序返回
" C: J9 {* _) g: d7 I% W    Ctrl+M 内存浏览窗口) m4 G/ K- c6 x% A
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, K8 w" i; Z3 u/ G& w  E" V4 ~( \( X1 c" ]4 c, T
{:4_94:} 5 e8 A; \) L7 S
! k- e* i# E2 @3 c3 }6 g

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。! d' H6 T5 [, r; i7 X2 C+ G

; k+ G4 ^# S* l- \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 | 显示全部楼层
要详细些的东东4 O6 ~  r# o$ r) Z7 K
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-20 17:18 , Processed in 0.062479 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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