EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

: r/ {# M0 V5 ]. z4 q很快速的整理我自己常用的指令
8 r1 q/ K. k9 K! S# A. |  R7 Y% d) o: [4 a
{:4_112:} ; L5 E! H% w0 e8 J
5 A& `/ _" X" M, F- ?; F
MAME DEBUG常用指令. [7 Q5 M" t: C- v  Q" D- z( |1 g

* S5 Y$ n7 B7 G5 p. `/ n+ L$ P9 E内存搜寻: ci, cn, cl
/ c% H9 E; `4 Q* l# ~9 l9 g. P" L! E$ M$ [
    ci6 @' W) U" P% R$ l
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 L, U- {+ m4 T6 X& n+ f
6 Q9 y6 m. [' x8 `    cn
6 X: ~! v6 l+ m! `* I    搜寻指令
) f9 p& I2 f5 e; M0 v3 g/ t, o    例子:
- I( Z/ `5 D/ |' {% t/ ?    cn eq,60
1 r* L, P8 L3 L    搜寻目标等于60 (十六进制)' ^( N; @: E: D) H& G
        + b9 ~& o1 e9 D
    cn eq,#96
  h3 a+ V0 s" ?. S/ |4 j% [2 M: M    搜寻目标等于96 (十进制)
" _1 ~: j# f1 o7 p
+ m6 y5 N3 P6 r. ?2 e    cn eq" a% N: {$ ^$ F7 t3 u( @
    搜寻目标的数值没有变化- I+ Y% d% K5 w' I

, }/ }5 l& }. B    cn ne9 l% x$ q% ^8 n) B7 ]8 h6 O. U
    搜寻目标的数值有变化
, q: P3 l3 D( {, a6 ?        ! b( L, g9 ?8 J" a4 L7 c
    cn +
1 s% R& D* o# _    搜寻目标的数值增加: l, x: l7 `: ]( o$ ^
    / _0 g  k; G& R$ {
    cn -, |( I% D# N( S" g3 A
    搜寻目标的数值减少
6 b% J: f$ S6 x/ ], |        
" f% z3 k% J0 s7 g    cn +,36 Y, p4 \5 s8 w7 C9 A, Z
    搜寻目标的数值增加3 (十六进制)8 z! [, ~8 R8 t
% s3 Z0 v# N& j2 q8 V, Y
    cl; D' r2 x! t' J% W2 ?# g( d
    列出所有搜寻结果
0 K/ Q* K- g) M3 K, [; U4 ]* x2 I: u, L
    cl xxx.txt: ^; a  P( G: N8 F! @2 g1 s- F0 s7 ^
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 z6 L: u% g  g# ^+ F- ~" |+ o# N
; o9 P* d1 K  V1 M1 t7 S# n
   
% @% K% l! u$ f8 `7 Y内存监视点指令: wp, wplist, wpclear
0 x4 t3 }6 w" v5 a/ i  P    例子:3 }. r8 S% e- M$ y
    wp 1234,1,r- u; |$ i+ J! j
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; |* ?5 t+ p6 y4 s5 }+ k2 l9 ?

& [) Q# s) B  p    wp 1234,2,w" x. e: u) Y6 U: g
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2( |# N( Z$ k8 t
     $ |0 V2 {* E, p5 J$ b9 k/ _( p
    wp 1234,6,rw
5 u) J/ S: ?+ _6 R/ s4 P" p      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
; B6 j+ D( D8 G7 Q, D5 a+ m
  C" Z5 G$ k6 r2 Y    wp 23456,a,w,wpdata == 1, G/ Q( M3 W9 o! c# G2 S  F- }
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 `! u; Y9 ?3 ?- n2 |; W5 W3 a
" J( R. W5 m; m; M
    wplist
2 Z" R, g- x3 _# C+ _. M) C      列出所有监视点
' y) r$ e: Y. B$ _
/ W8 [- d) p' b0 x    wpclear 37 ?: S% M3 O4 J! j2 x" D
      删除编号3的监视点" D* ?( f$ O6 z

9 Q, v& w8 e/ u# E" P! o2 M    wpclear
, z$ L% w" V# C1 B% W6 i5 q8 \0 x      删除所有监视点
) Z0 S7 `1 B5 D
4 ^( ]% q$ y5 J8 e$ o& `( D2 u      * a0 ^& l2 i. ^0 I! q% g2 F

4 P/ X( ]) N, y, P) P1 i程序断点指令: bp, bplist, bpclear8 k, C/ R4 F/ l2 M- b. Z( p
    例子:
7 G9 i8 K. m: [% G: N/ q. x& Q    bp 1234. N0 w8 N& G* L  T2 [& V- g
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! {+ T! U% Z0 A1 S, |
( Y+ l& ^7 D/ U! j2 J    bp 23456,a0 == 0 && a1 == 0
" J2 z4 K3 z# w) q6 f* }      在地址23456下断, 且中断条件为a0等于0以及a1等于0
" S0 @1 u7 k+ ~! v4 s1 Y
. m$ S+ X, [4 J& e& c2 c    bplist
1 i  H7 a. n4 N/ d      列出所有断点! M  h. l5 Z: m$ m
" ]+ v2 q2 X5 o8 @9 ^0 o4 @
    bpclear 3, S) J2 [+ _! g0 ^) @* M
      删除编号3的断点: O  f' X' z6 c$ X9 c

$ V! ?9 ~% \& S* m    bpclear
" L& R9 Q& f; z" z      删除所有断点
6 ^. l  o0 k+ n; m2 `  D9 \& c! J' |
      
9 g) q6 {" u7 r& J& m- j5 H% \$ d      
) S9 A$ O$ z8 d! ~$ w1 |9 x跟蹤紀錄指令: trace
( N) Z* y2 S. t3 b+ L8 Y    例子:) g5 {0 a# c2 W  r% G
    trace 01.txt
) u, A( p9 {7 j, h. R! b# k9 M2 K: m5 w    跟踪当前CPU运行的所有代码, 输出至文件01.txt' D4 c) P+ V4 w8 X- e9 l
% j: m# w0 ]# _: i! L* X
    trace off
6 g5 Z1 b. n- _8 y, D    停止跟踪, 并且关闭文件
: \3 M, w0 C( o# I$ ?0 V  @9 X# y0 R2 L7 J, y; w" m* I, T
    trace 01.txt,0
9 ~7 Y9 E3 {4 R  c    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
6 S0 ?- E& m) I0 B5 ~9 Z  W% j# F1 M, h1 j
    trace off,00 Y' ~' `  Y5 }& \% A2 A$ k: @
    停止跟踪编号为0的CPU, 并且关闭文件& A" a3 y: @  R: F: g, \+ q1 g

& e4 Z, J/ L0 S$ [" g. \5 F) O7 G- s    trace 01.txt,0,{tracelog "A=%02X ",a}
! H. e: ~% C0 E/ N    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" ?0 H, W' B, y- a7 ~    并且在每一行的前面, 写上"A=a "
6 a" _; M( T8 E- g2 _3 j! ^5 |    "A=%02X ",a为一个C语言printf函数常用的输出格式
$ s8 `3 b' ?6 V" X    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( t1 a3 u; Q0 J" x9 B
    X表示为大写十六进制数
) i; u1 j+ |. X" L  Q5 {9 B$ Z6 m' z# b, H; d0 W$ k' r
2 |- z4 Y6 e8 F% `
  ]" a: s) V" w4 j" }
内存直接写入指令: maincpu* [1 L2 k  s' x1 L* k
    格式为 maincpu.[][]@地址=数据( y8 @1 K( Y9 U+ _* [8 Y$ v
    第一个[]:* F, c8 _& w8 j" H  s1 O/ q
    o 表示ROM地址) k9 z8 c. q. g. Q# V
    p 表示RAM地址9 s. L) `! G; U. p/ i' P4 _
3 d* d$ F4 Z% X, O4 k
    第二个[]:4 M* w! X% ]8 k9 R
    d 表示4字节
1 A; D. d, o# v  @( d' o    w 表示2字节
& l3 p. [! ~7 q; g1 J' R    b 表示1字节" x; z. U  `) k1 J6 d% C3 W

8 L( G3 i- l) @  t. N    例子:
5 i9 y9 @, B. m, T- x- {    maincpu.ob@1234=FF
' u- Z  L- M$ z9 h! F  W    在ROM地址1234处, 写入FF一个字节5 T; T7 L" K8 }& a
1 `( I/ R7 ~% W  m5 M
    maincpu.ow@1234=4E71
% b! l8 o- Q2 D3 R& ?    在ROM地址1234处, 写入4E 71两个字节# f. P" D4 n- q3 B3 Y* f
' Q6 `. q% m3 m" y
    maincpu.od@1234=600A4E71
! C+ S; w+ j: f9 c9 p6 I    在ROM地址1234处, 写入60 0A 4E 71四个字节2 D0 S2 b1 V* m  A

, C, x$ f8 B& [) _0 l    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 ?4 Q# ?% U; c4 J
   
+ q0 V; |( F! R& p+ w5 U
$ r& ^  g. i% l: W% u其他:
- ?& X  g1 U, h4 l, \/ [1 F# W    dasm 输出档案名,地址,长度
' x$ L. K6 N) }) x' o( o/ v4 z    输出程序的反汇编代码  n, s( w# Y3 N, x( V; y& p5 [
    例子:
5 @1 V7 ]5 [( @/ b9 m    dasm 01.txt,0,1000007 J! o$ N8 x) F9 N
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 q% o/ Z, Y' T( U) l7 b4 F: @* E- p+ E3 A
    softreset
: ?0 g: [5 Q. {. D1 H1 @% U    游戏重启, 但不重新载入ROM
1 @3 t& W" ~1 q2 C4 \) i5 |+ w. O; r' e' Y6 t. i# o
    hardreset# d+ A/ m* P7 |! W8 O% [% I, c
    游戏重启, 且重新载入ROM5 y  e$ a, V/ B& T( Z$ u9 j
& I7 e; ~, b0 n
    snap xxx.png
2 e% n% |# @7 A. ~! q    截图为xxx.png
2 I5 U& W: w, H# N6 _
; a- S* F6 T1 G9 N6 f  E  ; C+ O* R0 w* [6 z7 W( @# t
  5 [" N# f2 \2 _& o6 n9 U3 F" d6 u
  + m8 Y) S" E2 \
热键:
. I( A0 Q4 N; {    ~ 中断游戏
" `  ^* N' y1 k) }% M8 M    F5 运行游戏
) N, v1 d. I( q$ k) `    F12 运行游戏且隐藏调试窗口1 f% K+ B1 L, u: ^$ G" [2 f
    F11 步入, 单步执行, 会进入子程序8 @& h( L5 ^0 G8 ]4 O4 e
    F10 步过, 单步执行, 不会进入子程序
8 d: N6 @6 ]5 b4 a    Shift+F11 执行到子程序返回
# `4 f' z/ y$ M2 k$ b4 Y    Ctrl+M 内存浏览窗口4 j  _: T5 ^% ?) j
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
2 [! i6 y1 q6 `6 }- i9 H; a" _. N. k0 ~# X& W
{:4_94:} . L9 C" P. O* L$ P& ^0 y: @8 g& d% ^& |$ C
3 z$ m8 [( C7 [0 F) Y4 S, L8 _# U

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2582 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
% Z* i2 F0 K& }: c
% H& O' i9 c- {' {6 yPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东$ |, ~& C8 ]4 J/ t; _
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-2 15:02 , Processed in 1.066406 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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