EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

+ y7 S  J/ i5 i很快速的整理我自己常用的指令" D! j5 M% \: a4 H; C; I' r
8 b1 \7 }4 P8 v0 b6 {
{:4_112:} ) w5 M/ l- R% X; A1 B7 \
  l3 H8 d, L( @' |
MAME DEBUG常用指令
! i% ]$ T, M$ E: k
8 I) I9 R( m" j内存搜寻: ci, cn, cl
7 \7 h# b- G5 a6 @9 J
$ j( U$ Q! i. q. D- I. s    ci0 [& D* x; p7 A3 ~2 t
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
5 ?( u+ f0 Z+ u$ F
6 _; |. B* \1 U7 B/ w0 X2 C2 s    cn
3 a6 h# a. I5 K& X    搜寻指令. a4 s6 B# }+ G( x/ ~3 a
    例子:" f" B! m  i6 \% [6 u5 Z3 F; G
    cn eq,60
  f  @: c& ]; s  J7 x- J    搜寻目标等于60 (十六进制)2 g4 z+ E4 e, S) \( v' N
        # M# k+ h6 `- v$ j+ b
    cn eq,#964 s8 V, |* i, }2 G/ @1 A- A
    搜寻目标等于96 (十进制); f3 G5 S4 v: J  s, j: G- J
+ m! |9 c# i- B+ y( F0 S  ^# p  C5 h+ g
    cn eq: J, k( Y2 `) B; u1 T
    搜寻目标的数值没有变化+ u5 e3 E8 E2 q1 r2 t( M

; l3 h0 q; u) r2 F" k1 a    cn ne* q: m1 R1 U6 {, O# [8 q) E
    搜寻目标的数值有变化
8 t6 _0 M4 _; U3 ?5 E        ! ?2 s, c: I+ ~- n& Y/ k7 U4 h4 J
    cn +
! H" l8 `5 K9 ]( g" U    搜寻目标的数值增加8 D5 ?5 j0 ~* A: f
    2 y& \$ E8 S, u- L) T* s
    cn -7 K; _0 ^& p% Z9 Y/ l5 D
    搜寻目标的数值减少0 w: y0 o3 d" W5 y8 _  _
        
5 c5 P4 [# Z* V0 }0 R3 ^+ \. y! U    cn +,3
2 x& }, Z$ j! z. X8 t    搜寻目标的数值增加3 (十六进制). \0 W+ j4 a! O

, m* a) u$ Y8 i7 ^: S8 Q    cl+ C5 ]! `, P; u! q! D
    列出所有搜寻结果
" h' y/ a& ^& R1 I1 u8 R" h
7 x" F, e2 w" u2 z7 `" n/ M" |* V, ~    cl xxx.txt
3 @# r. z9 [+ t5 Z- X+ C    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, E  v- \, ]2 m% o8 ?+ I
9 _$ ^. x+ p% |2 c5 u. r5 `  e   
: V( w5 O, U% p9 W0 U内存监视点指令: wp, wplist, wpclear
, l* f$ Y% Y+ z: c* h+ l    例子:: E5 }& P% X# ]- |6 C
    wp 1234,1,r
; b7 s' f' A7 z2 E0 h# [/ d9 f( \, e3 E      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
* Q! y1 ^* z' F/ e
# U$ X! B3 b% \! h1 \6 ~- j/ }3 j0 T    wp 1234,2,w+ E) l; R# m0 v# Y8 V. U: g, J- [
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
6 y- Y8 H* G. _" T& `     # n# Y) j+ g3 |1 D; U7 |. v
    wp 1234,6,rw
, t3 n& u# D4 G3 T5 h* C      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ {- {" ~+ A# |- ?

% n2 f& E) a! T4 \2 f5 J/ O: L    wp 23456,a,w,wpdata == 1
% ?8 f$ J' {1 q; Q4 w" \4 @7 M      在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 y7 d; z0 J! M6 F3 u
, h# z- N5 n4 u4 |) A) }0 E" B/ t* @
    wplist
7 [* l* `) W0 ^( b! R  R& j: v      列出所有监视点  B! B1 i5 g% D  U7 Y  V2 J

3 N0 t4 F7 o$ Z, l+ m2 ^* i5 W    wpclear 3" O$ B) f& y9 L
      删除编号3的监视点
8 q. \$ u2 A; {) G# `( P5 i
7 d7 K5 D; e+ i. N. s3 I    wpclear
4 Q: e, B  O  O8 z      删除所有监视点
% Q- Q$ J' L! Q6 _, B* G, r7 o' }- ?$ H
      
  I3 Q& _- ~$ m1 u( q) ]& x, |5 S7 O0 t% c  L" d& V$ G" q0 n
程序断点指令: bp, bplist, bpclear
4 K$ V3 E4 P$ n5 H# i: w3 A/ b    例子:
3 g- ?2 k6 t5 q! o9 L3 N" e    bp 1234. J8 c; G4 ~0 e4 @. w+ [. P
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
/ \! b5 V; B/ i/ A# O
0 S7 Y7 t% U: ]) t9 E    bp 23456,a0 == 0 && a1 == 0; Y0 u: e- k! r0 O* ~3 {  D, r
      在地址23456下断, 且中断条件为a0等于0以及a1等于0: _5 N! P8 L7 C" g

' Q7 l3 S1 N, t    bplist
5 D8 q2 L" W% [6 V0 a4 V% {1 Z      列出所有断点7 S" R1 K9 h/ |; ?: a( S6 L+ w
( f7 f' e3 E; F. \' \
    bpclear 3
1 A5 E7 c1 `& ^      删除编号3的断点1 i$ ?- U+ o8 G6 P0 \

5 D! Z/ s  |* V  M  L    bpclear
5 I" F9 n: O/ r) N      删除所有断点
% z* w' K+ X* ]6 ^+ N4 s0 m+ J* i8 c! I4 t) ^3 H2 I5 h/ p4 c! Q
      - J0 {! `' ^5 X% {
      
$ u+ K, }1 L" d) Z5 M2 x: T跟蹤紀錄指令: trace
* C% Q( e  k' O0 p2 V' q    例子:
8 h8 j. B: P  ~9 N0 r) F    trace 01.txt
5 L, D, u: s' Q9 K: f7 i5 p    跟踪当前CPU运行的所有代码, 输出至文件01.txt4 G3 T7 x% P# m. e
- L7 ?& ?8 X' n& F2 m8 K
    trace off4 a& L4 Y- P7 X  g$ Y" p, h3 m
    停止跟踪, 并且关闭文件8 z" H' r7 w2 C, o) z7 ]# I0 x
. u, e4 q- U* Y
    trace 01.txt,01 o. G. o0 [- X% |0 R# Q
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& W: E7 R. F8 a6 g0 ?0 F9 _1 L( \# i0 K& A; h- _6 G4 v
    trace off,0
, _  ^4 ]: h) @    停止跟踪编号为0的CPU, 并且关闭文件
! p. \6 Y, G' v! _0 u' @. k
7 v( A& I/ L. B    trace 01.txt,0,{tracelog "A=%02X ",a}
' m" Y! a; f) m  B) D    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 F% H2 |, ^7 ~    并且在每一行的前面, 写上"A=a "( |/ y8 e9 L9 y* u. @3 N# ^
    "A=%02X ",a为一个C语言printf函数常用的输出格式, W! m8 j5 V" a0 v
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
. o- R( {2 s$ P% H    X表示为大写十六进制数
" _; L: _' L: d
8 u, f3 |' l9 l" h+ j4 ~
# r' J" g3 C% E' b+ c* j7 z, a& O1 T# _% b& v1 d) i  t
内存直接写入指令: maincpu  a3 C6 \- v, x, V5 {7 \
    格式为 maincpu.[][]@地址=数据
6 `& n2 L1 z/ Z. s' o    第一个[]:9 _" P( I# t* D2 N5 j  K
    o 表示ROM地址
, c4 o' @4 c* w5 l7 V+ N9 I: j    p 表示RAM地址# ]2 {- R3 C/ {9 y

% g( U4 q! o0 P  j! G& k( u    第二个[]:
' w; P$ Z7 y5 X2 ]/ ~. l8 f. |    d 表示4字节
$ ^, L8 v" x  `/ B' i- \" q$ u7 G    w 表示2字节% x8 `, f7 Q7 O* G8 S
    b 表示1字节
! d$ r5 P, V+ q% \7 [
# u: C( M# _9 F3 E# U    例子:
" G* z0 v4 m* b% x    maincpu.ob@1234=FF$ f5 w( W! z5 J8 U- H- |7 ]1 k( v3 ?
    在ROM地址1234处, 写入FF一个字节7 B! N8 B6 a+ Y# R" D

8 o; W) t' w1 j0 X    maincpu.ow@1234=4E71
0 o  W* j$ z( x/ C+ p  L$ \! w+ e- O    在ROM地址1234处, 写入4E 71两个字节) s2 J, R; d9 X$ h) {8 I: I6 A8 D  U

  o/ b# ~* r- c6 \" [! f    maincpu.od@1234=600A4E71
: W& y8 T1 C5 f4 ?* y    在ROM地址1234处, 写入60 0A 4E 71四个字节" k) E. ?% i! |/ x

  O: [0 i; b; O4 l    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 X& I# Y: _# u# h+ K( ]6 Q0 A4 h   
; ], B7 P- x5 c$ e$ {: k8 _1 j7 q! s( [
其他:
8 p3 ]3 z+ ]" Y8 a* m    dasm 输出档案名,地址,长度+ ^7 Y3 B  V  `' A
    输出程序的反汇编代码  X% G9 a, U1 f+ s% Y) ~: I
    例子:2 K) Y- V! d% \+ f! e, z
    dasm 01.txt,0,100000
! G# |# [1 A/ g8 ^. g- H: C    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" _& j! S9 [' m) J% ~& k9 K1 c! B  e1 O7 l7 V' `( s
    softreset
1 \& O. n; l' p2 X. }# j% K0 i! I% T    游戏重启, 但不重新载入ROM( s, O' S! D% \1 B) A. N

0 |0 }* ?1 L9 c+ C    hardreset
/ O% q" o" s: @5 H! F$ ]9 E    游戏重启, 且重新载入ROM( e4 |+ f& F, C  n5 d
9 i* D% y9 b: C& ?
    snap xxx.png
& C1 e1 |" o; l7 Z8 m9 F0 g    截图为xxx.png$ B8 @' _! j3 t) {1 J& O2 N
. E, Q5 l% E4 o7 m' P4 B% G$ ^
  $ v9 T% r8 J8 A" i* ]
  
+ C2 S9 P2 j  G! j  K* g0 ]0 q  # D* ?6 j& f2 |$ t  m
热键:8 H# G: i2 O, E7 x' `0 P( F
    ~ 中断游戏* {6 s+ m+ |. \1 t2 s5 V
    F5 运行游戏6 n+ {8 u& Z( Z* Y% M
    F12 运行游戏且隐藏调试窗口8 w8 l" J8 g& I4 T
    F11 步入, 单步执行, 会进入子程序
$ [! k4 u" {8 p$ B    F10 步过, 单步执行, 不会进入子程序4 l  |( a6 h7 D" d
    Shift+F11 执行到子程序返回
: I9 @/ A( W: t$ W1 k    Ctrl+M 内存浏览窗口* [) A. F, P/ L, q9 j' c( }* q
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ A+ z1 L, D$ e# ^
: |4 w3 X0 v; c- v  T, [{:4_94:}
% ~. P$ j: d) }( h6 l0 z  _5 @7 \  j8 M/ `' x- u# V

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2569 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
) ]7 ]9 Y$ e0 L. A; f6 Q, b) i  R4 R% J- @- {# t' [" s6 ]' D- p+ F
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 | 显示全部楼层
要详细些的东东
" m% r0 g4 d# L0 p, i0 H11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-8-24 19:12 , Processed in 1.096680 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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