EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
2 a6 [+ U: |  U7 B9 C' H, Y
很快速的整理我自己常用的指令6 D& J0 V0 P" _1 Q  V; ]. N
1 W( q1 R# w/ j. D! m( p  O+ F# l1 c
{:4_112:} 8 A2 |- Y/ V$ o6 S. c2 s& i  k9 H
9 B: y; x& Z4 D0 B+ M4 U5 u( W
MAME DEBUG常用指令6 L( j9 E) S# Y/ u9 z% W# l

7 W: i8 d, _' I2 n/ G, Z- Q内存搜寻: ci, cn, cl
% k/ U4 p4 @# T+ Z6 G
0 f8 j( |, C& o    ci0 w3 ]( @. P. L5 o7 O
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令; i3 \/ W* L$ J; e3 w* t

% n7 R; e: K6 u    cn- W0 R# q* n+ l, f$ H; K
    搜寻指令% c+ j3 S% v5 ]; ^5 I
    例子:0 x9 d3 e  i; d+ s* _
    cn eq,60
8 q- P/ b! @: ?( p1 e" U    搜寻目标等于60 (十六进制); F/ m& ~$ X  E/ t
        
9 I9 c0 J& a5 B* l    cn eq,#963 p" H5 Q: c. l* Y$ P
    搜寻目标等于96 (十进制)
4 z  S: Q# k/ o2 p( c+ P& y. M3 J# V/ q, M1 @/ \* K( u% A! s9 N# y- @
    cn eq
! M% S# L$ z- k6 q) y' E    搜寻目标的数值没有变化- k! v0 S+ q9 ?) U
# F+ X$ R! ?/ D& z7 Z8 B- x3 u
    cn ne) L9 E, f/ O% O! y( |% W1 e; h# X
    搜寻目标的数值有变化4 ?! m, j) Z3 l1 N: q% J% T
        ( m, p& x' n; \/ c% _2 L" t7 X
    cn +
/ {+ {4 H$ m9 c/ Y    搜寻目标的数值增加9 z4 H2 v$ `0 X+ E  ?7 _5 @3 H# @1 O
    : P& O: C3 h! H+ L) R- U: e
    cn -( m9 E5 G, W3 E
    搜寻目标的数值减少
, l+ P9 p, A7 n0 E        , e. Y# v6 {2 {8 s% G1 G& \
    cn +,3
3 l$ W# f% \' X2 I5 f    搜寻目标的数值增加3 (十六进制)
- O. @: p7 X# }) r& \6 P. k  S( v9 `. |$ k  Y0 ]
    cl
: v3 o. a4 @. }& o* w+ V    列出所有搜寻结果. r2 K1 p9 j: H$ W( d; `, M
" j* A# s: J# Z" n( b
    cl xxx.txt
9 W  l8 q7 L1 \% J    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# p+ ]/ y4 V  m( P6 L7 o* B: _+ D" W: R$ l
   
4 E2 Y* `6 \" C* P+ {( n内存监视点指令: wp, wplist, wpclear
( w9 ~2 O+ K/ g7 G    例子:" @2 R7 h3 J. O# N
    wp 1234,1,r7 j0 s9 {& Q8 M0 y3 |$ [$ H) X
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
7 f8 m3 f: H- V( `8 Z3 W: y/ g1 ]# L4 D9 M2 g& _/ s, E% S
    wp 1234,2,w' J9 k: q/ G  N. t; b( Z
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 B( I% v  Z) p( g6 p+ O1 i5 @/ |6 O     
6 z! f- p2 P% t* R- \* b0 I    wp 1234,6,rw0 s5 e  ?/ U1 I* D0 i* G/ b/ L
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 p7 E# c) k: I! R( r
( b! e0 f6 u  e' @
    wp 23456,a,w,wpdata == 1
* w4 S  D$ D% a. @7 P      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
& o' O9 n1 z& b( N6 P+ ^9 M4 X* d3 b* w! w2 H! H+ W
    wplist
! o- H' ^5 r( N/ E& I- S      列出所有监视点5 B6 Y5 \" d( o  j( V
$ B& P& H) U7 v! @* f
    wpclear 3
4 D- O3 {" k' ^0 a* m3 i7 o) l$ |6 W      删除编号3的监视点+ V' ^  R7 _4 a
3 a( A+ @- R5 p2 c# C  S0 D8 }
    wpclear
: T3 F4 U9 R. i  C      删除所有监视点" l* B+ Z# c- K5 Y. P

6 M4 ~7 X% K( f) P- G$ h      
5 C: h8 e1 ~" [  I
2 a3 `/ ~9 h$ R程序断点指令: bp, bplist, bpclear3 I& T+ a8 Q/ P) W2 I7 n
    例子:+ m/ p  C/ e+ x
    bp 1234; h( ^; a) x5 u  [3 o
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
9 L* M: W$ i  a/ k) i9 `# M/ I" |: z
    bp 23456,a0 == 0 && a1 == 0
/ a9 c/ G/ ?  {" R+ ~      在地址23456下断, 且中断条件为a0等于0以及a1等于0
* T& N& ~# ~/ X5 ]3 H6 z! u) I
5 l' @1 e5 R8 u; o0 s6 b    bplist0 p# ?' ~8 \" H% t
      列出所有断点& O  |4 P3 i  o; t
9 _9 Q& \2 Z2 \/ a# |
    bpclear 3
( L# M9 p5 L- X! A3 i7 [0 v      删除编号3的断点
" Z& C& W6 I8 p# l( F% W- p: G2 ?
" x  H' E* x( K7 R) {2 `" m    bpclear7 D+ h: U0 n8 ?. A- ~% m" [
      删除所有断点
- r( f# c; [7 b  y1 S7 g5 `0 _: t; z3 a0 p. I
      3 j3 p) J! N* \+ ~# t
      # t. G! M! T0 d, N" {$ z
跟蹤紀錄指令: trace; z" Z! m/ \4 i$ r7 ?
    例子:
( f2 l8 B: z' p/ h    trace 01.txt
5 _! C% z: a  \7 R- w: K    跟踪当前CPU运行的所有代码, 输出至文件01.txt# v( F6 [$ H9 T5 q' u7 h
9 G7 v. C/ \" f3 E9 a6 z  D& o9 v
    trace off9 J( j# g9 V3 K. u6 M
    停止跟踪, 并且关闭文件: N. P" J* t: X4 g  k
# h2 Z5 u5 H  E6 f% _& U" t; O
    trace 01.txt,0
( w% s3 ]) p& i% T5 Y: m  u8 t    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# m' J0 U, ?2 Y/ N% z& v; t2 o& p5 b5 e
    trace off,0) _3 _) [4 f  Y) \$ {
    停止跟踪编号为0的CPU, 并且关闭文件
1 a$ B4 ?* v/ ~9 |) v4 l4 \9 |6 k( R+ X$ _8 d. o( m
    trace 01.txt,0,{tracelog "A=%02X ",a}
& h7 Q, N& a5 v: o7 u7 J3 |    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, `' F8 k1 t( B0 A  [' h5 V) ^$ `8 Q    并且在每一行的前面, 写上"A=a "$ f" y* t. q1 N' @9 Y4 l9 y
    "A=%02X ",a为一个C语言printf函数常用的输出格式
, s8 X% z6 q, l    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- ~8 A# ?$ _1 [8 ~+ }: w) Q
    X表示为大写十六进制数
5 x$ ~& W+ m, k: ]" Z
& g  r3 G( O. @% u- z& p) b+ t9 I( `' M7 b( b9 w

& J% {! `- Z" |$ J  T; Z内存直接写入指令: maincpu, C5 G# a6 b; ]0 d0 X$ ?
    格式为 maincpu.[][]@地址=数据3 i( @$ ?/ d% o6 X
    第一个[]:5 z! m+ f' T1 @* ^0 a' L) e
    o 表示ROM地址- d7 |3 a- @( C+ G. ^: o* S
    p 表示RAM地址
9 i9 V% B9 v- s# s  j+ e8 Z2 d9 j+ y4 `. m/ c
    第二个[]:2 n7 X1 l( {, B9 O2 C, y
    d 表示4字节: J( ?( [  N& o1 G( x$ ?. |
    w 表示2字节
+ a# P. U3 }- ^1 O# @) C    b 表示1字节. d6 Q5 ]9 P) Q7 {
; |: K  X; k! ~7 \5 |9 U7 y* V
    例子:. f4 c5 s6 E& w2 L
    maincpu.ob@1234=FF$ L4 h3 U" \6 l  S2 X" ]
    在ROM地址1234处, 写入FF一个字节
, i) u% z4 n) D5 ]$ R$ Y7 O
& w, x* B  R9 U- F) `3 F! R8 y8 @    maincpu.ow@1234=4E71
: b, z) q( a& E( i    在ROM地址1234处, 写入4E 71两个字节
9 R3 Q3 m  r& J
0 R: ]/ c6 D2 A& I" L    maincpu.od@1234=600A4E71' ~* `% r+ t9 B- Y& n) u" |: r
    在ROM地址1234处, 写入60 0A 4E 71四个字节
. R2 r* B7 s& [. J( w
0 g$ y' a# J/ i; h0 Y    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 ~, U# B" k" s1 {, p, {- ]# \% ]    1 k  J5 C8 y: ?

6 L6 s" a  I5 a/ }* |其他:
8 t4 e0 B2 v, }* v& P    dasm 输出档案名,地址,长度
" ^% D! f! r4 P" f5 T* M    输出程序的反汇编代码
' E  x1 l+ g2 t8 Q+ x( B$ ?/ l6 R; h    例子:1 s5 ]! E' k& Z6 t, l
    dasm 01.txt,0,100000
- }& f& }7 H  f# m* X1 e    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ P) o- z/ y$ |  I' _* O

9 N" P0 @7 Y! a9 r6 y    softreset
. r7 Y$ |8 X' w1 J    游戏重启, 但不重新载入ROM
- a, d; X' B* s) _
6 h" h9 |5 }/ D0 A8 t3 H5 R    hardreset6 b+ r1 c5 T8 y
    游戏重启, 且重新载入ROM
2 L, \3 `) i; b( `$ d9 n: h
. m; c) Q) g( m    snap xxx.png
7 V, A+ J5 \7 s- t    截图为xxx.png
' X& f& V- N: ^4 r
7 u. e3 g# b' k$ k  " ^' Y" f% j% \: T5 ^( P
  
+ L" V( S2 W) k( X) B  
* C5 [$ b% U% c  T4 L. @9 l热键:% f1 q: B3 d0 u. T1 E: M7 n4 g
    ~ 中断游戏0 n/ \! X, [4 S4 a* T
    F5 运行游戏
; O/ Y: m: A9 ^6 c    F12 运行游戏且隐藏调试窗口- k. T5 ?4 n+ s
    F11 步入, 单步执行, 会进入子程序
7 f" N* B: o- \5 }    F10 步过, 单步执行, 不会进入子程序- y0 h, z% \$ F& N$ M1 C  S
    Shift+F11 执行到子程序返回* K8 B/ j1 T0 L
    Ctrl+M 内存浏览窗口9 y5 ]1 R  f% c; p5 O
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; u) S6 E0 i4 z4 c
  ]3 M" `6 T# g8 V% e& d
{:4_94:}
, M- h$ v; v( h3 G% O2 ^1 E* M# L/ |7 V

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2531 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
& |3 L: h* O8 F9 m, c" g
4 z7 O# Z9 T! V4 A; 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 | 显示全部楼层
要详细些的东东
( ^- J; r+ Q& V' t6 H0 ]! _8 t11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2024-11-15 19:48 , Processed in 1.098633 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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