EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

; I( A+ z3 @7 r! k很快速的整理我自己常用的指令, y. b( _( J# v, {
/ |/ a3 u* {" r& c4 k
{:4_112:} $ m+ P! J8 E* F* |) ?& e5 m( U

) ^% ]: h3 y4 i2 lMAME DEBUG常用指令  j! a0 g* ?+ A: z

/ g# s+ D- j- q) }7 Y% O1 S内存搜寻: ci, cn, cl$ ~! z7 c) X' w/ h# V: f

" c& _) G  h3 C+ ?! j! C. P    ci7 H' r+ O9 N- B4 Q& M2 _
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* |# `9 y4 f$ M2 g2 s6 I
- \* x1 ?5 C. X& @    cn
4 w. H( ]7 s  O% u2 f    搜寻指令- }' T# D' j& b- {
    例子:' G; ]+ r" _9 Q: a! n4 Z- Q
    cn eq,605 C( l1 F" i& C/ I
    搜寻目标等于60 (十六进制)% i5 `" n; e$ {. F1 D8 [
        & s4 A7 E- k( \% ], x5 [) A
    cn eq,#96
9 m7 V- i3 t* |7 Q- f    搜寻目标等于96 (十进制)& n$ k1 U1 v' }$ S! q/ ~3 N3 l

  i/ m" O+ a9 p" V4 w$ J+ }    cn eq3 x; z7 z! _1 K) y
    搜寻目标的数值没有变化
# w8 s/ r, V/ R( ?6 ]. a% H
) x5 B& U, F% Y) t% W  K" J& P    cn ne; G: W0 v! h7 P9 X1 c
    搜寻目标的数值有变化
. z" G5 I9 S' g2 v( }        
* w; o2 R; L. H; q) X$ E! I' J    cn +. H( ?  m9 b) r, O
    搜寻目标的数值增加
! r, [7 q0 Q) L! \" |5 Y. z   
5 a5 Q! |& V6 q  n* t- F' m+ |+ r9 g3 `    cn -- Q: a6 I. d) c4 w( t
    搜寻目标的数值减少
- p8 _; u$ F% R. V9 h        
% U" P. |7 H' @    cn +,3
( U: n4 v' v1 k! x$ A5 q* _4 M    搜寻目标的数值增加3 (十六进制)  F  C- l: a# {7 f' u' K0 a
+ O' I% s; Z" e8 A* ]
    cl6 j# J- Y5 `* P) \
    列出所有搜寻结果, Y) K) u" K0 p6 ^. I' d
/ n9 |! r6 r& U. f4 ^3 C' ~2 b
    cl xxx.txt$ p  \, p: ^7 c) j0 m. s
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 ?2 b" Q& g: t; w' F# u2 \2 K* Q

4 w% d4 Y5 v  g  e7 H5 E( k   
! ~( \2 G% B% P. D内存监视点指令: wp, wplist, wpclear
0 T& ?+ B8 h6 V0 P' |: U    例子:2 }0 `/ n) Q0 V! Z6 X$ ^3 t
    wp 1234,1,r
0 T4 ?- B/ Q3 k9 }9 t: z; b0 T2 m      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1% G. a5 \8 Q$ F; X* T  }

/ h5 r2 O" B6 j1 X    wp 1234,2,w$ l2 S" Z/ Y9 z7 C1 g
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2: y- X8 i8 J4 Q8 z' C$ o/ ~
     7 L2 ]" n5 ^9 i' A( m
    wp 1234,6,rw3 g4 N) t2 j4 v6 w1 j9 f6 o
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
8 a( X7 y# u/ [3 V) E5 Z! {  j, D4 N6 u  y( ]% w
    wp 23456,a,w,wpdata == 1
3 z4 f2 y- N6 u7 {' ^' t: S      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
  P9 p1 z5 i; j3 l. |  e# e4 n# F- l( v& A: ]
    wplist- j4 I& T7 ?, [
      列出所有监视点5 }9 E; |5 m# y% w# \1 W7 I' U2 ?

0 \" o3 c- b) M- I5 [5 a    wpclear 3
8 [: m  m7 p8 e% X3 u9 n      删除编号3的监视点/ K4 y7 o( w9 x0 L  w

* b' @' y. D8 B  ^    wpclear7 z. e: S. `6 ^( O& i- O
      删除所有监视点! S% L2 `/ _! G3 B" [( S

* \, k5 Z+ z. {0 @  d2 G      ! t1 e0 F2 f# z/ X6 h; H+ }
! {& [: j$ r/ B4 F* d) P/ R8 C
程序断点指令: bp, bplist, bpclear3 L4 E/ T. o- j, ~& b6 B$ k
    例子:) K" `2 e5 M, p4 c' K1 m+ Z
    bp 1234
2 @1 W( N, Q) s% p( B      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* M: N; {- G4 ]0 X. a- j# U

3 W2 R6 _0 Q7 W6 R! [$ V9 ^8 g    bp 23456,a0 == 0 && a1 == 05 K+ L; Y( [5 ^: s4 Z
      在地址23456下断, 且中断条件为a0等于0以及a1等于0  {! t& E0 X0 c8 s! C

0 o8 H- T  A% U( W! C: Z- B1 \( F  S    bplist7 Y6 f7 q3 M2 F. L. }- U, A
      列出所有断点
/ D% G- l) g' M/ L  N' {9 V% p$ x5 H0 g
    bpclear 30 c1 Z% f- j% ^( `5 y0 b
      删除编号3的断点) ?- ^' y" f% Z( X
( y8 z% V7 ^+ o( p! A0 @" n+ m! t: S
    bpclear$ o) i4 \! `: J+ S: |# Y# `  m: O
      删除所有断点
! }5 m: j' ~( b6 ?* q' g0 x, B1 s1 p
      
0 H# B! h  O8 T; Q3 E      
( A' t& i' m( B$ C  m! O% N# W3 F9 I跟蹤紀錄指令: trace4 H! c7 `% ]7 p$ y$ T8 w
    例子:) I: }5 U0 l/ X; p. X, n$ ^
    trace 01.txt
1 ^$ ~) w* y: k5 K' G# w8 x    跟踪当前CPU运行的所有代码, 输出至文件01.txt. d' n' g6 d2 d7 m" K" C3 q
3 [& x8 ?! q) i4 `
    trace off
' G% \, V1 }" K0 S: |    停止跟踪, 并且关闭文件
( W8 e- N. e8 r' p8 u1 J9 x0 N, g  b, _: k4 Z  ]6 L6 P1 p1 {) j1 ~* f
    trace 01.txt,0
4 V5 ]/ D3 r7 {, `' x    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% G6 ~: a) t% }) H  p" r) o
+ D" D# C5 U* }$ {+ e2 h8 c
    trace off,0
" ~% W' q8 Y& X& `' b+ N5 p    停止跟踪编号为0的CPU, 并且关闭文件- d( ~, z& P0 t2 L$ Q' P4 ^; x
* E' y' f% m, L2 b8 c2 M9 c2 i: X
    trace 01.txt,0,{tracelog "A=%02X ",a}  C: a3 Z3 [" P$ }5 r- ?2 g
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, r5 d" e  w# g! s    并且在每一行的前面, 写上"A=a "
, r2 [: l7 G( c( D7 x/ `! x    "A=%02X ",a为一个C语言printf函数常用的输出格式
5 J4 ~  @3 \2 E    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入0 c! _& n! m& B5 {6 q* Z$ B) a
    X表示为大写十六进制数
8 T5 K2 z% Z) @( X4 x: b. W7 x& J( G; u" p6 \: W; o% C7 E; u+ T% U$ d

% [) n7 r  J( v. r) n. `
& p& T6 h* \5 S. Z内存直接写入指令: maincpu
: G+ k1 u$ r  {, H+ Y    格式为 maincpu.[][]@地址=数据
  t: Z- m$ }4 x$ I0 p0 I8 J    第一个[]:
! I" ]4 [1 m+ s3 r  U    o 表示ROM地址
4 ]9 L% G+ [- w9 ^) B- z    p 表示RAM地址
7 f' S) ~/ A# }$ l
$ U9 {% u- B$ u; H2 }) e    第二个[]:* B4 E. k+ m6 j0 b5 |3 B& \! s8 \6 J
    d 表示4字节
4 `) y- X: Y! n    w 表示2字节: h5 Y" V8 s1 M, O# A( V
    b 表示1字节
* W4 O8 R) |) D* s
& w4 a1 }( c- ]/ Y& r    例子:
6 Q6 H! b' s3 F+ T& x% R( Q    maincpu.ob@1234=FF( p8 B! _8 F/ l9 [( d  _! f: m
    在ROM地址1234处, 写入FF一个字节8 C4 ~6 X& a/ N* o. K4 ]: G
: B. {: E3 x7 e1 x
    maincpu.ow@1234=4E71
# f1 |& [4 I( A" @    在ROM地址1234处, 写入4E 71两个字节$ L. I  S4 ^9 ]5 l: W

: T) v0 `( O, c0 |    maincpu.od@1234=600A4E71
; U2 @* C" Z6 T+ |: [6 d/ Y$ D    在ROM地址1234处, 写入60 0A 4E 71四个字节
2 H# O7 Q% Z- }1 u) |, @; ?. k( C/ ~7 ?
: U1 |8 e) j' ?1 Q) h, k. ]1 t- [- e( O    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
; ~- [- r: [% {4 Y$ H! @8 @* \    + N) X) i5 [; q- c& Y" ?

: i2 \' S( t! Y" T5 h& R其他:
( a; |/ `( ^9 c/ b" k7 h1 I* w9 ?    dasm 输出档案名,地址,长度
* [, }$ I" x& w; Z5 z* y6 B$ q% z5 }    输出程序的反汇编代码, p/ o+ c0 D% n4 i. F/ t
    例子:6 R- T9 R8 _+ X
    dasm 01.txt,0,100000( x( Y$ U1 T4 q
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
% g- Y! D8 e# s0 d" G/ |* Z0 m: A) u
$ |/ p, h* S9 a5 R# g    softreset% _' Y) {* w/ J; F7 M* s
    游戏重启, 但不重新载入ROM
! d) H  o- T% l- e
! H+ n0 G5 t( r' `: d    hardreset
! c# R1 o6 y5 l6 \' d5 e    游戏重启, 且重新载入ROM
5 Z2 c, S) U/ p' T8 d0 p/ f: i, g% Y
    snap xxx.png, N" i$ X1 h9 ?
    截图为xxx.png
; q1 d. d" \, g, B% X# r0 V4 Z! i1 |/ L" F" g, X
  
) T% P3 a  {3 m2 r* a  ; v; e# k7 t+ i
  
& a* R5 Y# |% v0 r* G* P热键:
% g# V" E3 X# T1 E9 {& l9 f9 \    ~ 中断游戏' d! Z. [; v1 n; N! Y. _
    F5 运行游戏0 G  C/ v; K/ f  i7 O9 k
    F12 运行游戏且隐藏调试窗口
, ?& D/ U2 {  _9 z" }    F11 步入, 单步执行, 会进入子程序& s" }" L3 m0 A- h
    F10 步过, 单步执行, 不会进入子程序
8 L3 O* C2 S0 s2 S7 s% u% D4 l& Y    Shift+F11 执行到子程序返回; ^# w( c* `& d3 @
    Ctrl+M 内存浏览窗口& N& o9 |; z. @' I
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, K6 o$ N4 q1 S7 @1 I7 o/ ]9 H+ V  A9 k" x
{:4_94:}
% R; |) s# q1 l( l; g+ W, h5 |, U6 I# n

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2582 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
$ E1 N3 C' m% K5 H' Z! U. H" c( J/ k! S
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 | 显示全部楼层
要详细些的东东! B! P% E0 y/ e1 z7 Z
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-29 15:22 , Processed in 1.081055 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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