EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

$ ^! L* U" ]/ P3 L很快速的整理我自己常用的指令  z1 S! A' S" `0 e4 O
' [4 `( v) B1 c6 d4 k) K+ g7 U: E
{:4_112:}
* t2 {& F) ?! `' p9 P
- L- Z. I; f1 ~. `/ R5 W0 UMAME DEBUG常用指令
/ H$ t8 \6 M9 i( T) H1 D# K: f) k& q0 G1 ]3 t+ R! i$ [
内存搜寻: ci, cn, cl
7 Y  p* ?2 \% I2 u, @( O: ]+ S3 g/ Z% i+ j
    ci
& T, A6 g4 n" m9 _+ W' h# D    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 `! B2 c- Z) U' v$ n" W% r6 U( h. r
    cn. H* Z/ C  W+ r
    搜寻指令8 b; A* O: E; N6 o1 n; H" K
    例子:
1 U) u$ _) ~( m4 [    cn eq,604 r: B+ h% N4 I
    搜寻目标等于60 (十六进制)
) u( q! B& k$ o2 w) W        . b# e7 o$ h5 C( I/ h
    cn eq,#96# T" Q/ s9 E1 `' \
    搜寻目标等于96 (十进制)
% j2 x; {- T( m* ], V1 L- p
# S3 P7 t$ c0 ?0 y; t3 n. s    cn eq
) r  o& D% X# a5 r    搜寻目标的数值没有变化
% R) G) v: g6 _( D0 a" e9 s9 k5 ?& j: W, Z8 \: d/ f
    cn ne& e; I! `8 k: c6 q* ~4 I, u
    搜寻目标的数值有变化, x+ ~! Z( A. O* W6 @  c0 g3 k9 `2 P
        9 R. m- }+ r* d. J2 |& M$ K
    cn +! y2 U( T9 L; q) }. B& c, c# h
    搜寻目标的数值增加, \" B( B! V4 Q; X6 ^! m6 ?
    / ?3 ?2 Z# _5 Z3 J4 g9 a) c
    cn -0 \1 x/ m# f  I8 t, X6 d6 M7 s
    搜寻目标的数值减少
: D) i! l: ^1 T4 u; V        
8 W- X$ S" g/ e* Q/ C    cn +,30 r- \" v( g. W6 e
    搜寻目标的数值增加3 (十六进制)
" E5 d5 q; }: x2 ^2 u) _- p, J8 y
    cl  q0 g; e  \1 r9 Q' N& a* v$ Z+ A
    列出所有搜寻结果) {& x- }0 J# l$ ?1 X) J
: o. g. F4 v+ `( u6 x& l
    cl xxx.txt' h3 p2 ?6 A2 p+ j6 a4 a; E% I
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
; X6 B' D& w( T8 |% L7 T* r2 l* Q3 K
   
6 [! p' k( G$ P* |) u内存监视点指令: wp, wplist, wpclear9 h! f- Z2 C! S
    例子:
7 W; G' t3 k" Z    wp 1234,1,r! i/ ?9 P  y3 h$ L8 V" k
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' L  v- E8 T1 k4 L, {

8 t' ^$ M" O* X/ }1 r0 a! s    wp 1234,2,w- C3 W3 z. d& Z. ?& V+ N
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2- j2 Z% n, w9 f/ [/ ~
     % D8 G1 }8 R1 y) h
    wp 1234,6,rw
+ Z  \/ D2 Y3 m% N( R! P      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6! c6 v' x0 t6 K% p; v( @

+ ?  n6 j6 x* E4 n" G: v    wp 23456,a,w,wpdata == 1% ?$ M+ v7 k) q6 T
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1) p' \, A& [4 t: b& ]3 B

5 W! ?5 _" t0 p2 }- w    wplist
8 x5 b+ ~/ _. Z% @: l      列出所有监视点+ w8 [  o6 m0 l* C: x, _1 u0 R( W

* B" S* u5 l$ K2 G, l3 w# W    wpclear 3! q8 G3 i: s3 f: |4 X; J
      删除编号3的监视点
8 ^" A+ W- A1 e: i" |; g+ c% |0 X6 {8 Y/ l2 x! H
    wpclear
" f) w. o* @; H9 [, e      删除所有监视点) c$ B! S" P; ?5 d/ y5 `

+ I0 M* Q$ e* S4 K      1 {% ]2 k' ?3 h* N* S. C
: d# l# n( G, h' j3 k( q
程序断点指令: bp, bplist, bpclear
5 R6 [- M. A+ }) s, Z/ k0 g    例子:
8 i/ Z7 t8 ]" g1 |+ q$ {! l+ r    bp 1234$ h3 [; M* {4 ]6 }' i% @* a% Z
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
) H7 s) _+ w" a$ X+ ?
% ~' A5 f9 M) q+ d: x    bp 23456,a0 == 0 && a1 == 0
1 O. s$ w+ E  s2 R6 R9 h      在地址23456下断, 且中断条件为a0等于0以及a1等于0. n( a: k' z$ D; Q, L3 s
% k! C+ X2 N4 g; M  W8 E
    bplist3 f$ [  @/ v  f" J, a2 |
      列出所有断点
3 R7 y5 z7 F8 K! o2 y) K! K$ ^$ N5 J: {9 l4 u  g* t* h
    bpclear 38 V7 ^) D4 }" p0 W# P0 r; Q8 m
      删除编号3的断点0 y' @2 C% A7 j, J; Y' u
8 @2 F; B* W2 T9 T- L, ]+ i$ f: \
    bpclear9 w9 C6 N; u! N& C* f. E8 [$ d
      删除所有断点- q2 m- g7 E3 I

' N! D/ i# N4 {2 P0 o' }! G      , a* O! B/ n7 }  s% R* E
      0 H  s2 }! `% b. O8 G3 X# t
跟蹤紀錄指令: trace
! `* l! e& _9 e: l1 T4 f! T    例子:
  v" W& R/ x! G* n8 E1 d+ O7 }+ n    trace 01.txt6 a& v5 ]) {/ I0 I$ l
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ s; R7 ]) g4 e( F, I, F1 r% Z( }9 z* Y# d8 Z
    trace off
0 k4 \0 i# P5 W    停止跟踪, 并且关闭文件
% p/ _+ X) K5 D1 X9 A
# N0 v2 `# C$ i/ Y5 y' H  Z    trace 01.txt,0
1 v4 y9 x' o- N1 c4 ^0 ]$ [8 e    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt- ?2 w- O7 H1 _% a

6 }; W2 ^! e$ y0 V8 r+ Z4 {' y) }/ N) ]    trace off,0, i; c% \5 s! ?! `5 Z: e
    停止跟踪编号为0的CPU, 并且关闭文件& l# X9 Y% `9 {" R( \3 g. E2 K$ e
2 C3 }! j8 L$ K0 e
    trace 01.txt,0,{tracelog "A=%02X ",a}
5 A6 W) Q" B2 S    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' ?2 d1 G* t; K: v$ Y' b! K    并且在每一行的前面, 写上"A=a "
1 r5 b4 G2 B( {& e/ p! a    "A=%02X ",a为一个C语言printf函数常用的输出格式6 c, L: g' l# Q! F5 l
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ ^0 N! Z. r: }2 u2 V3 _
    X表示为大写十六进制数
- ~9 o9 _; ~0 U% i. v, W3 V6 Y) i1 P$ X% t, q; ]

) Z. r* J3 N' l; D# r9 ^4 Q3 Q1 b6 [: o0 u' b
内存直接写入指令: maincpu
/ M% A/ M8 x( N; n    格式为 maincpu.[][]@地址=数据- `6 t1 @9 R% s! G4 W* {* A6 r. K
    第一个[]:
$ l7 H5 o; @6 @3 _8 K* |- S    o 表示ROM地址
4 H# a& M0 }* W) V# s9 Y    p 表示RAM地址
. j, n1 i9 W$ r% ?$ |; ~8 M2 ~9 z$ j6 d8 W, m
    第二个[]:
3 C! S1 P% i7 E" l5 s# ~# S    d 表示4字节
4 Y; b7 u3 ], h- d- |! S% p    w 表示2字节' [6 x1 H7 U! A& u$ L8 P, u
    b 表示1字节
( c# G" b$ g/ o4 y3 }6 }' n8 Q+ C8 U" t2 W2 A* b
    例子:
1 j7 N& x# {8 u  ~% r- r    maincpu.ob@1234=FF! q7 C; K. g6 p. J8 W
    在ROM地址1234处, 写入FF一个字节, Y* j- a5 h) u, J; I
7 q2 {* `2 m- P! W
    maincpu.ow@1234=4E71! K- K: h! @/ v. j
    在ROM地址1234处, 写入4E 71两个字节9 h# o! C1 C$ Y  M; U) [

6 b$ H: U" s  s  B: ~    maincpu.od@1234=600A4E71
5 [! `- S- {  l5 o8 n5 R* D" i    在ROM地址1234处, 写入60 0A 4E 71四个字节& c$ `1 x2 R( Y0 `8 C% A7 n4 ^* Z
3 ]9 L. m% J6 @! {+ }+ U$ a
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& D( _( k. f  H  s    ( D3 N  ~* S2 V8 k

3 z" Z+ }; w. B) p其他:- Z# R% c: S3 ^0 ^# q; @0 Y
    dasm 输出档案名,地址,长度" A( H$ e# H; \  Y# [
    输出程序的反汇编代码/ L; \6 W0 u- V2 b
    例子:( R3 O" x4 u7 [! J* S9 H
    dasm 01.txt,0,100000
% l! ]. F0 Y. |    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 F6 \" Q0 `, s1 e; ^* ^% \$ G8 @

" }; @4 n, [1 _, `    softreset
. N- u. Z! s1 q4 d0 O6 O% Y    游戏重启, 但不重新载入ROM
2 w5 Z: d$ U) A* F" x
$ h5 A/ \1 j: d7 B9 d/ W- Y5 Z    hardreset. X; l: \! C, m7 q& q, T9 l5 q! f
    游戏重启, 且重新载入ROM
3 ~6 y% J  ~, \5 R( N5 i, a' C2 P6 S# `. D) I, \: z
    snap xxx.png
/ T* z+ H* i) G# S( ^: Q7 ]  q    截图为xxx.png& \: q/ _( p  j$ ~; {. V+ B: d1 m

+ |; p% E* |5 k0 @7 t, b2 w  0 j5 e% k: W0 ~2 N9 U
  
# O- N$ J% |2 w0 i  1 p; }: j5 I/ a6 k, q% ^
热键:
" v5 N" F2 B6 g  [) C1 k. ?* _    ~ 中断游戏
* {& ?: S) m3 `0 j: e+ j' o( x    F5 运行游戏
/ d5 L- N' N- r6 Q/ h    F12 运行游戏且隐藏调试窗口
- [+ G/ l  g  I1 F    F11 步入, 单步执行, 会进入子程序
0 F- x2 Y8 O6 P2 {( f' e$ e# k    F10 步过, 单步执行, 不会进入子程序
9 G$ [: q9 A  }0 n1 @% D    Shift+F11 执行到子程序返回
( e* F1 U7 l9 o) l' w    Ctrl+M 内存浏览窗口
! j# m+ ]7 \8 l( A; A- R3 g    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( S, O% J0 R! a' n& t, U

) h) `' i# F3 W% F- o/ k' J0 _{:4_94:} $ k" C( ^+ Y* g+ ?" G0 q, @# D

4 b8 A. V0 {+ V) |

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2584 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。' R: S+ ~1 P- O5 B

: l) T  y4 q* c9 CPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
/ S# B9 j4 U  Y2 n1 H9 N! Q11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-13 18:09 , Processed in 1.082031 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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