EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

: z# r; E( K( g& I, p5 a" Y很快速的整理我自己常用的指令9 r1 u5 |. y7 M; \. f; ^( E4 f
- Q: F7 Y& ~" \. `1 r8 @5 y6 @
{:4_112:} # S* u: V% n4 X4 ^

# o+ I/ ^& {+ M/ [, QMAME DEBUG常用指令
. k* p0 x* T; |& O8 P
7 a3 Y0 T  k6 L7 z7 B内存搜寻: ci, cn, cl
& r" [: W5 ^% K* [' P; p9 Q6 _- H# A4 V6 f; c' r0 O; R$ T- y* I9 I
    ci. @; B2 |4 ^+ v
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
3 ?! t9 w/ a" E6 T: c9 }8 S( d% ~- r9 t4 e' X
    cn
  U2 U* x  c: t: w    搜寻指令* R5 j1 y' |7 i2 X7 }# D
    例子:; G" C+ q$ H+ c7 C# f- N9 `" d
    cn eq,60& R: Q, K* a" ]1 |. D8 S
    搜寻目标等于60 (十六进制)" I2 Y4 [+ |7 g9 F
        
- M' o  R, }5 D+ C8 r/ w    cn eq,#96! ^- E# ?7 I( l5 Z7 K
    搜寻目标等于96 (十进制)1 ^4 i- y; y  C9 _& k, U
' I/ y- X/ N% S$ {7 E! ]: ?
    cn eq  ]& b9 J% _& U4 p2 \6 Z
    搜寻目标的数值没有变化
5 X* s4 g0 s* [3 j  C# C. p' t
: s( P/ M* y1 J8 q: O    cn ne0 o2 S* C8 b0 V$ ]
    搜寻目标的数值有变化" D* t9 c: V* P1 E; G% g
        
! r, }7 [+ ^7 E) K6 _    cn +' a' W6 V& e; H
    搜寻目标的数值增加
+ j4 s) E, [; [9 s( }, l   
9 ~5 m% K: g, i    cn -
' n! T- C; c6 o5 E& G7 |6 u    搜寻目标的数值减少
* k1 y& p+ q- B% c1 s4 {3 t9 i        
; z* Z$ x8 x# e7 F9 _    cn +,3
: s* K: d. V+ b3 w    搜寻目标的数值增加3 (十六进制)
" B% T! W6 Q% n4 ?
4 L+ M0 R* D! P, o    cl
; ]/ y  y: O4 F9 q1 B    列出所有搜寻结果6 X, b. o0 N; o: \( A' }0 |

8 W# i0 g6 p0 x8 N  X. p. G/ O    cl xxx.txt
& W0 E$ F4 @2 o/ u7 M$ \    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 ?( M" n9 P" w& X1 Y3 y8 D
1 [. Q. I4 d  N! O* a
   
+ q& Q8 L5 S  }+ B' e内存监视点指令: wp, wplist, wpclear
) i$ C% C2 [6 {- g    例子:
/ c% a0 x) L, A. I" ?8 T) t    wp 1234,1,r3 S; e# y8 q3 b' @% C  h
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# q9 c0 U4 [& s. u! N+ u5 s* C+ l9 [% X9 S/ }1 T4 g1 _/ y1 a9 b9 d
    wp 1234,2,w' _4 F8 v+ b2 ?, t8 \
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 d+ I" H. a. i9 }     
2 ]  Z; T9 Q0 e7 D1 k    wp 1234,6,rw
0 G9 z" V" v9 V      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度68 V9 p6 q; ?, S* W- x

' \% o5 I6 r- V+ y2 t9 a    wp 23456,a,w,wpdata == 1+ U: s& L! S9 e* u7 m0 l$ T& Z
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 q5 T7 T% V, s9 n5 ~9 c" S* q9 [4 q
    wplist5 S) z: }' {+ P! w% J5 L3 i
      列出所有监视点& p5 w1 k% Q& W- E
% m( t, I5 X0 }5 T  s: ?# O
    wpclear 35 h1 Q8 P, i6 K* c% c9 n2 ^" Z( _
      删除编号3的监视点9 B1 Y. n1 N) i( N9 I% @

9 A- n& n$ g+ b1 K    wpclear
* H0 `/ ?5 q0 o( d0 a5 o" W      删除所有监视点
2 A9 X& l& C% t) t7 `$ ]! W  F, s, W0 N' o0 d
        d6 J$ Y6 u4 h0 J/ Y7 S4 }4 `

! h9 L1 o+ c" O# o9 T  W" N程序断点指令: bp, bplist, bpclear
& Q* D0 \( L1 w9 E& E    例子:
9 A7 S) ^  J( ?2 {/ N$ j    bp 1234
8 F$ j, v8 p' F6 ?5 I, f      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断: T4 c+ L6 J+ i4 \
7 B" H) q" m) P+ e
    bp 23456,a0 == 0 && a1 == 0
* q: d$ _6 R% o) v5 h7 d      在地址23456下断, 且中断条件为a0等于0以及a1等于0
: D& Q' {5 h7 H( R1 m5 T, l5 _( c. ]4 |% S* R8 E
    bplist* B+ A4 P% t4 j3 C5 \
      列出所有断点/ P% C4 U; T5 O' F! r

4 ?1 O" C" W% `1 o3 \    bpclear 3$ P1 @% F! n: D- y4 s7 F/ L6 q
      删除编号3的断点
. E! j& l/ O. \: Z3 f! W, l/ r* S8 a+ Y! D* p& |
    bpclear
+ H, ^0 m0 l! E- {4 i$ h      删除所有断点
; e0 e8 o5 ~/ p$ |! H2 W! x; ~* ~6 ?, w% }  I2 r% p% ?. e0 A
      
1 b) o8 g4 I0 f5 ?; |! L      
8 [; V2 {, s* o, @5 K- r) k跟蹤紀錄指令: trace
! q' x* @. l6 B& V    例子:- c& P, J, h4 }. s3 M" o
    trace 01.txt
+ f, R+ ]: M$ ?1 R0 C$ a' `    跟踪当前CPU运行的所有代码, 输出至文件01.txt
2 ]. I/ N7 u- t# I4 E
$ H8 o2 S8 G# K8 f/ A    trace off
5 z+ S  j  i- I    停止跟踪, 并且关闭文件% @1 h1 P: r/ `

5 {1 V  o. d6 O! v, z, j% R4 r    trace 01.txt,0
+ c. @! e) R/ S1 ?* A2 U+ |    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ Z$ ?3 n* ^& G# c+ o2 c6 S1 E  x5 J; C+ q
    trace off,0$ c; d5 X& z% v0 |  s2 j" R$ v% v! B
    停止跟踪编号为0的CPU, 并且关闭文件
9 C6 t. J3 U8 b& M( D$ V4 H
3 R* K7 a% m! `, Z    trace 01.txt,0,{tracelog "A=%02X ",a}: }- |+ \( d7 q
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & W' x0 r$ u9 u* e
    并且在每一行的前面, 写上"A=a "
) h( M. e/ G6 ^! z* ^/ @    "A=%02X ",a为一个C语言printf函数常用的输出格式
- _; d+ q5 l( y( n+ W. {    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入0 c  c" z- t5 n0 M' A
    X表示为大写十六进制数( S% V7 {/ T* ]! K) q( R+ c

$ j3 W& B7 l9 c
% h" A# l4 [  ?7 t/ C" b$ V$ V5 [/ N* E1 {# M/ X
内存直接写入指令: maincpu  N4 W( b3 o5 H0 V; A4 m
    格式为 maincpu.[][]@地址=数据( j6 K( q4 x) x
    第一个[]:
9 v- l- H) l4 x7 }    o 表示ROM地址
3 a+ R( M8 a5 _7 N8 [; d4 ]    p 表示RAM地址9 w+ R' d- O2 [: a* _  t, x) D
4 a! f! r$ C( ~$ D4 I- t3 G
    第二个[]:' i$ W1 q, m' }9 }) L2 h/ W, r9 v
    d 表示4字节
- y& o  C4 q3 u' B4 z    w 表示2字节, }8 \- [( J7 \' Y' v% b) G$ s8 N
    b 表示1字节
# \/ p4 R. b6 o9 s, F5 ^" q3 H4 p/ F
    例子:
/ w! M- L( u' W! b4 u    maincpu.ob@1234=FF
/ o9 ?* y  t3 q, T/ Q9 e) k    在ROM地址1234处, 写入FF一个字节
6 h$ i+ N1 c, ~8 F' @/ F* I! x8 `; F3 O& {/ E1 y. Y
    maincpu.ow@1234=4E71
* a; c9 u6 Y& p; W# C5 l  p" _1 r    在ROM地址1234处, 写入4E 71两个字节
7 s4 J& @& e* ~% b  ?% _4 D+ N5 x/ g- I" d
    maincpu.od@1234=600A4E71
! k- a2 a0 I) a6 f5 G- a    在ROM地址1234处, 写入60 0A 4E 71四个字节  m  y1 V" e: \( R# c

7 G, G* e- z- J: s  l; \    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. c" e) r6 y' {! n- O" n    ! @! T1 Q4 h* n* F% Y
0 Q  b# P' c. m. S) K2 b4 U& a
其他:
9 x8 _  B$ g; |6 \    dasm 输出档案名,地址,长度/ N% H7 V" e- [( m3 j! a& o
    输出程序的反汇编代码5 z5 u9 B" \2 i! v5 D+ e- p' b! ]
    例子:
- ~, b" Q8 `7 Q    dasm 01.txt,0,100000
. t& [1 ^/ j7 o4 R" _    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; a4 B- B6 a7 B3 G- x! R

/ S+ V( P: i4 p! Z. f    softreset
, z) g8 l" g7 m- S* Q( R    游戏重启, 但不重新载入ROM8 Z" @/ V$ y  U% H( t0 x: q0 N4 t
. e! u% G$ C- K1 v# Z
    hardreset
' j, @+ I' w  ]3 ~    游戏重启, 且重新载入ROM$ |' r: r" M! S- c- R- O4 D
7 K0 K* _9 F& B2 [: N" {
    snap xxx.png
8 s" a8 V& C3 B2 x3 Q# U    截图为xxx.png; h/ Y1 X8 E5 W9 U/ {

. o- H: x% G$ F1 B7 Y; j) [1 f  2 t; k! s+ u) \& R( a0 I( v% h
  ; l5 m4 A! Y# u; i1 m: ?0 e' u
  ! h4 D8 T9 v( l
热键:
7 ^! }4 Z3 I  o+ B& t8 w    ~ 中断游戏3 ~; D& n% _0 k) Q* I* ?
    F5 运行游戏
0 U0 ^" k. J: Y7 t) z: n' `( H    F12 运行游戏且隐藏调试窗口
( Z2 N0 a9 T5 O8 d. D8 x6 c9 D3 O    F11 步入, 单步执行, 会进入子程序" m: H, }8 R- z+ c
    F10 步过, 单步执行, 不会进入子程序
* {) b7 W# g0 M! o$ l$ u6 l* _; r    Shift+F11 执行到子程序返回* l5 x% u0 U8 G, b
    Ctrl+M 内存浏览窗口
7 E% l! Y1 o6 R  ], w6 |    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
  J  A6 s; B4 Z2 E" {
6 r1 `! s8 A7 S. g# I{:4_94:} 7 S8 m/ ?/ [1 @2 U

& s5 k0 T) Y6 g

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2585 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
4 H8 U1 y+ ^. G; m$ \+ h; b, ^8 L* ~9 _* g6 D
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 | 显示全部楼层
要详细些的东东9 B  c, o7 i3 k2 Q- J
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-21 02:56 , Processed in 1.084961 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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