EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
% [2 J, \, [# r; A; f
很快速的整理我自己常用的指令
  E" I" K2 G2 v+ M; H5 y; }9 L- l
{:4_112:} # f# V- ?3 m- j1 ~# e
5 a, `' ?$ i% ?' K+ g; j& k" k" }
MAME DEBUG常用指令' ~# o9 h- f! J  Q; ]- |0 {
7 w6 }) V! @. J$ a, V0 @: r
内存搜寻: ci, cn, cl
9 h% F9 e* X/ t+ G8 Z* t) t: z. S
    ci
7 W0 B; e  f9 @3 J: o/ m    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' ^+ I8 p; [% S0 G

& F# o" {* Y2 g2 [. y    cn8 r& G" B  n# J+ M* y" _' I' x
    搜寻指令4 T2 k) P( L; K" H1 ?
    例子:
. \9 t' Z  X1 D' ?' G    cn eq,60
3 D, J+ R4 h& ]: A9 P1 u9 y' V    搜寻目标等于60 (十六进制)
4 I% g0 R5 y% S7 o4 ^0 S        # o: }0 @! \( \, ^6 F
    cn eq,#96
( K' A' Q  b; H. B: ?9 `1 |$ b- {6 x: k    搜寻目标等于96 (十进制)6 u( P8 M) G  {4 c9 G/ r" L

* |& z% @0 k- c6 i    cn eq8 [  T% ^6 k( o9 n2 F/ [/ I
    搜寻目标的数值没有变化4 O! J9 K5 S0 z' M* ~; G

* ]6 b$ W( l6 z8 T& C4 [! W    cn ne: \' c# v3 Z2 i
    搜寻目标的数值有变化, ^8 ?: b) l8 M0 F1 G
        
. @. t# n- D: B8 ^    cn +! q/ J7 r8 C4 V/ i
    搜寻目标的数值增加" @  a8 f6 T. E0 C: A+ V1 W% r
   
4 {2 H% x4 [  ~! o( g    cn -
. s0 y/ l8 W* Z- d6 x) N    搜寻目标的数值减少3 \& [4 v9 B6 B1 v$ V
        
$ W, u( b4 @6 Y( Z8 o    cn +,3
$ C( U; f& ?+ t* T* _% ?* x9 @, m    搜寻目标的数值增加3 (十六进制)
, x; Q$ ~4 T* k+ z- Q. {$ i- b
1 W' Y0 ?% h# f: s7 S' A1 a! f    cl2 `: n+ U& o$ x0 _
    列出所有搜寻结果
& N4 E0 v4 \+ P1 ]7 A/ S* o0 H, p3 W* U" l% ~& d2 r3 u( C  H
    cl xxx.txt$ h' {" r/ l9 [1 n$ W  a
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式$ q9 Z" N- l/ [1 a5 q" F% C
: w4 _0 s$ v0 |( a3 H
   
) f# d7 Y- Y; W) G( c9 i# j! W内存监视点指令: wp, wplist, wpclear3 F* F3 S; d- U/ ?, v
    例子:+ i. _! r% X: x9 M2 P2 Z
    wp 1234,1,r3 v, t+ y5 I6 s, q0 m
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: {  j4 h+ v- ~9 D  \1 E3 t: [8 {2 A
! S# _0 S% \* u  ~& e
    wp 1234,2,w/ g0 b3 Q  Y, O' s: q
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 X- F" M( S: ]) D     
# m: w2 U' {9 h' b    wp 1234,6,rw# s- L' g# b1 X; _0 Y4 u
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
$ a4 K; }5 a4 ~% d" m3 o! G: Q6 q! x8 d  w9 N& j
    wp 23456,a,w,wpdata == 1
( ^! i  Y- r; x- K      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1, ^" R6 {: [" O5 P. q4 \

: B1 R( W- \" b' A3 y+ ^    wplist- Z+ s3 |$ [2 x
      列出所有监视点
  t% w/ l; A+ e& p% ]7 L# K% e+ z6 B* V4 {: _* D9 ^- c6 L
    wpclear 36 e  {( b6 y6 k5 O, u# p! f& G. E2 Q
      删除编号3的监视点
. H, S. {2 B2 X' a% [3 U+ r8 m5 P$ E% e* e- }7 s
    wpclear
4 Y( I- g" t3 o, Z      删除所有监视点# d% \* g$ d, E) J/ h) v

8 N: B. K% r/ N8 C: e; ^      . T. L5 W- k* L% n+ }* Z4 F; ?

& e1 |  I4 Z; T6 y: l# z3 {程序断点指令: bp, bplist, bpclear
. |; F: r+ C( F. V$ Z7 |    例子:% m* F9 J  e% s0 m+ r6 m  a% N+ y/ D$ e
    bp 1234, X4 S( F3 \* ~8 O  w- z# r( G
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ B+ a8 X% E$ H+ c* O8 y
' N% x  Q* a  A  D1 w" T9 T% H
    bp 23456,a0 == 0 && a1 == 0
3 }6 m- k+ @2 V9 L5 p6 ?8 u& z      在地址23456下断, 且中断条件为a0等于0以及a1等于0
# M+ L1 p% Q# S' _, H! y8 r. o
6 x! ^2 O( ^0 F& v    bplist( Q2 d6 L) P  `( |
      列出所有断点' {. r2 f! z7 x; o

  {% P9 [. n% @5 o7 A    bpclear 39 v4 `1 J' k; L' S7 P
      删除编号3的断点
0 d. }- J! G/ A0 D1 [
( v. k6 }, s* g% O. w    bpclear
% W" Y" c% L- o& c  \* b; t      删除所有断点
* \, `3 k- P" n$ ?3 n- u" K  e! A6 X  \. T8 s
      
2 [5 S: B: \5 y" h- ]# [      
+ j. C: H2 y4 U5 O1 i跟蹤紀錄指令: trace2 F% R, O) S6 D1 D9 b
    例子:
  D4 L* R2 L8 m    trace 01.txt2 C! }) d( A% j4 l$ b
    跟踪当前CPU运行的所有代码, 输出至文件01.txt0 X; M4 U6 Q) R  w

% S& B3 T( v  F2 S    trace off
: W$ c, W" S. _* c; w. J    停止跟踪, 并且关闭文件$ y  |: O& ]4 G/ Q% {

+ @  L( |( D* F" B    trace 01.txt,0
! P, a" _# e: @& s4 ?    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# ], V2 O: m& C% z4 V- l
9 i( l/ S- J+ B# h0 e- m1 R1 ?! I( P) O    trace off,0! g! i% H8 `/ r2 l# Z8 t, l
    停止跟踪编号为0的CPU, 并且关闭文件) T/ p% J' ^. O& C8 g! J+ ]' Y0 V
* a6 @2 |) Y$ k' w6 Q6 W8 D+ c& W
    trace 01.txt,0,{tracelog "A=%02X ",a}4 Q( ?* i5 H9 D: E8 I2 s/ l
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt   q8 C1 K; ~5 h6 u, E
    并且在每一行的前面, 写上"A=a "2 V: }: x" i: r( Y  K9 f! n1 y8 c
    "A=%02X ",a为一个C语言printf函数常用的输出格式
. t$ ^; O. b5 {4 ?    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 x/ t; \# ^( Q    X表示为大写十六进制数
: ]* P  U5 c" O+ x, N
, @3 L8 ]- Q. n( O$ ]
, E& r+ R% d- T6 p
0 J9 Q7 ]+ A2 U" V/ B内存直接写入指令: maincpu
, n: w, x% F4 v5 D& h; T    格式为 maincpu.[][]@地址=数据
# Y8 w+ Q( [6 M) {! Z1 U    第一个[]:' s( d7 ?" B: G
    o 表示ROM地址
& e8 q& V+ Q+ l" A1 ]    p 表示RAM地址  n4 B# D5 y# u. [
; a7 Q+ H7 ?$ H5 i8 w, T
    第二个[]:
3 M4 V0 `3 \8 ~0 ]; A4 t    d 表示4字节6 `: v, C# P! o
    w 表示2字节
$ w, j& u* C" z' Z+ U9 N. I    b 表示1字节7 J! |7 K, ?, P! L- b% i( T
! A+ v  W9 V+ g4 e' h) H2 }) e
    例子:
& N1 l' k, _) p+ q; n1 i    maincpu.ob@1234=FF
8 N9 m- `- F  a- e, ]' p: k    在ROM地址1234处, 写入FF一个字节$ b3 c1 H: b( R7 K

* Z6 l) i2 w$ {: b3 p- K5 S    maincpu.ow@1234=4E71
# A! k  T. }  @- ?2 d    在ROM地址1234处, 写入4E 71两个字节5 p, ~- Z5 N( C
$ W/ i! }5 x7 H
    maincpu.od@1234=600A4E71
  \9 S/ Z, a/ ^1 ?% d    在ROM地址1234处, 写入60 0A 4E 71四个字节; R/ Y" V( W4 h* l" U; f
2 O/ R1 o! A; y* l! O9 I
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% g6 R1 e# U+ Y- s    & t# g+ X7 u9 ~4 C

  B+ j( |; E4 x其他:
# Z& T/ B: I* U- a1 A) l' C* W4 l, `    dasm 输出档案名,地址,长度
6 B6 H7 f- x- `# a! V- S7 V8 Q    输出程序的反汇编代码1 P: z! b) H7 d
    例子:
: z3 c1 j  g1 G% c( a+ e- m    dasm 01.txt,0,1000003 v& F4 w* g1 J( A% L
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
. ^  b7 d, r! H, m8 d9 N: V. F% ~; t$ r# {4 [6 a6 C
    softreset" }  t! w# W0 p' ~6 q/ C
    游戏重启, 但不重新载入ROM
* `* [! q( c. O4 K* d  f2 |; R0 S. z7 c9 O! E# @6 i9 o
    hardreset
& m; a& P5 Q$ |    游戏重启, 且重新载入ROM
3 Z- I& O9 w1 Y% ]
5 @" W3 H; M1 c    snap xxx.png
; k* m* @9 A, L, C    截图为xxx.png
% j/ [, ~" L" I; L8 W3 Y8 R# E! S% y, z0 i& [$ C2 y' _
  8 L+ ?& g! C1 D% r9 n
  " I1 F, @+ X5 q/ {
  , g1 u3 v" J# j0 A$ R6 S# I
热键:8 q* R3 Q. n6 ~# ?' ?
    ~ 中断游戏; J/ V1 U9 L3 m) S0 z5 D
    F5 运行游戏
$ G! p3 o9 d" \! q; x2 c6 c    F12 运行游戏且隐藏调试窗口
: I( n$ p+ ^8 _/ Y    F11 步入, 单步执行, 会进入子程序* J' c* t4 O3 |* F5 E2 P+ P8 ~' e% D
    F10 步过, 单步执行, 不会进入子程序. {) b( J$ M2 W2 o
    Shift+F11 执行到子程序返回% l. V1 e' a0 i4 o. e
    Ctrl+M 内存浏览窗口: a6 v, d+ d& _% N: A& v
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
5 o$ g: I1 H+ V* S5 K4 \
4 v/ P, b6 }/ _5 [# J1 G$ W{:4_94:} & l9 t6 j) s9 Z: W# [( U" @
& u! ?: o) N5 J, ]6 k

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。5 }  i( N" P8 p1 {- N& [: v- s2 z
- Q2 P, G; @9 i- c& }
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 | 显示全部楼层
要详细些的东东
; U# b2 E' z9 c4 y: u9 j7 ]11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-22 18:45 , Processed in 1.099610 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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