EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
; k3 j$ q6 t2 H& E% B
很快速的整理我自己常用的指令: P* k5 X! M6 V% w+ g3 h+ v) r
  K; I3 B0 C* u4 k
{:4_112:}
- I" E' B8 A% _% ?( p3 i: ]) `
1 |: v1 u# T, P0 B0 mMAME DEBUG常用指令
; |0 H( w: H7 ]& e& `! s0 a: q% o! v) j
内存搜寻: ci, cn, cl
9 q( a5 J$ {) I( H# M2 q; J/ z5 e8 y* C2 i' A' m# g! Y& x/ p3 c& N3 \
    ci
) T4 H+ C( c+ l( S; a6 g$ b1 T    搜寻任务初始化, 每次搜寻一开始一定要输入这指令" |+ J) @4 }7 E; ]: J/ M
! w/ N% h7 w4 ~' n- m, z7 @
    cn$ u" |, r  L& _7 ^! k. A- r
    搜寻指令# L2 @" [- b8 o. K
    例子:5 i, j5 Z9 @. H9 w2 V
    cn eq,60
# ?  o3 \5 i" z    搜寻目标等于60 (十六进制)
! r8 Q2 W! v, M8 T& x3 O: C: H        ( k, C3 ~0 P+ m
    cn eq,#96. x9 U9 M+ d  c3 l
    搜寻目标等于96 (十进制)
8 y0 w# G/ ]1 g, b% ?( d% c4 I# H# ]! B6 D- E
    cn eq/ r/ p: D. Z: N
    搜寻目标的数值没有变化  G, P2 l4 [+ B  h, C3 {$ o

$ f: Y$ b" d. E2 L# G    cn ne
: B% c; H1 C  u+ R' ^    搜寻目标的数值有变化
) U" {1 `0 t* q" D# u        3 ~. D$ Q- g* o7 ]
    cn +
4 `" K5 |; {' |    搜寻目标的数值增加
! z% Q( s/ i' M1 k, W    9 [3 R4 E. M/ m8 L# J4 v
    cn -# K% i. j* k; z& a, G9 U) O
    搜寻目标的数值减少
. M2 ~2 ~( i4 s5 `8 [: o; s# e        
$ j. `$ e+ S8 S1 k; S6 \    cn +,3* V; z: C0 s9 u7 |2 E2 s
    搜寻目标的数值增加3 (十六进制)
$ v. o1 W( M7 b8 U  E2 _
4 g. R2 _/ I! f; z    cl
9 Q& G( C; ?$ C# }7 |; D    列出所有搜寻结果2 Q2 v, N- Q4 V8 H$ Q1 W) v6 j, \

6 T4 X: V9 S! r% K' u    cl xxx.txt" P9 y* O; i/ }4 h
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* R8 d3 }) m! s% E" S
( `* J) |( L% x+ Z, E
   
2 @) F* q# x* T( }' I内存监视点指令: wp, wplist, wpclear
; @# {2 g" A' P6 }" z    例子:
: _0 Z0 w) K0 ?  T- t$ G% W    wp 1234,1,r
. l4 Y0 l  l& y4 q( H+ o      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度11 m$ _. G- |# R- K; H0 P& r
5 T+ E. _4 n  e( b  }  P& U' d
    wp 1234,2,w
" L# v+ k. z4 i, ^      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 D/ Z" h4 T7 f. Z; J( S  p
     ; m7 l4 w( g' C: W" W. y
    wp 1234,6,rw
; f+ B+ S7 n5 p9 e- y      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 [* P  ^3 y- @' [
3 f# r: {; H4 ]% y    wp 23456,a,w,wpdata == 1
# G7 E% [% P9 \. B2 T; x6 t( C      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
& e. r$ r( b3 i. n$ g" |6 y) V) T6 n- `; ^( w# A" Y/ z7 `* S2 J
    wplist
6 a! Q' F' L- |/ r' K  q: O      列出所有监视点* z. O3 G7 [! H; F$ D8 v6 J/ Y
- F& W/ T' o5 X. p- B. x
    wpclear 36 Y& i" U7 \/ h- S" o
      删除编号3的监视点, d% C' X: ]) P7 h: D' e: W7 X
2 C# z$ n! {' B8 e$ H5 l
    wpclear
- \" ]. H1 G' P! i      删除所有监视点4 x7 g4 l) D$ S4 S% Q

4 c1 X+ `! u/ A* V      9 ~7 k, @& a: F+ `; u$ p
8 j1 m2 h5 p2 h: R' z% B0 h
程序断点指令: bp, bplist, bpclear4 Z8 X3 W! X* y' M
    例子:
# a  m- @/ x* G+ ]( F( {6 H( m, J    bp 1234
2 i+ L& [6 ^6 P, j# c      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- t' S' u$ `; y2 O
" h% G+ m) k3 X3 s! K4 s    bp 23456,a0 == 0 && a1 == 0
  d  u, d7 l: J" T2 G* K      在地址23456下断, 且中断条件为a0等于0以及a1等于0  H4 _4 {% g$ Y  e0 F, {) J
. b# q: a' C( N0 K# ?( x" X/ f
    bplist& M& L2 w1 E9 r% l
      列出所有断点+ I8 @  Z3 c# ?1 u9 O

7 ~* b# Y. m' q' A9 z% A; Z' D7 H    bpclear 3( j; p7 V& L4 F3 \
      删除编号3的断点3 Z2 {& a8 @+ S) L: Y

' I$ Q* v4 p+ w9 j9 v) H! B    bpclear
# `6 p) ]/ k& Q  A) T      删除所有断点
( _/ Y9 a2 z# `5 ]6 g9 T
( u. _0 [' C8 k! p      
$ C* |5 \; |' h$ [      
3 @# ~4 O# ^7 ~7 e6 {, [跟蹤紀錄指令: trace
' {4 |( J$ w3 X; t2 ?    例子:
  T( c! q# M; P! L" h; A    trace 01.txt
7 h2 n0 o) J  _3 w    跟踪当前CPU运行的所有代码, 输出至文件01.txt
; z& {( L: L8 [0 s1 S0 S
6 |, s$ C2 M$ u    trace off* x. z; Y9 [2 \! l3 m1 h
    停止跟踪, 并且关闭文件& d' E' N0 `1 g& K) f" ]0 A7 Z. o
/ q/ T8 Q3 r: a% M2 f
    trace 01.txt,0* }% C( n7 W5 M
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 s  q3 N: C8 N1 Z* q

* x$ x0 W# A  k$ m1 w7 b( X. `    trace off,0, }9 u) J( F* j; a
    停止跟踪编号为0的CPU, 并且关闭文件+ S0 e1 i8 }2 u# H
$ y& I8 q" l1 [
    trace 01.txt,0,{tracelog "A=%02X ",a}( U% J( ]5 U* w6 U& z
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 t3 }) q( `% |    并且在每一行的前面, 写上"A=a "
5 c! v- |/ j1 g' r: c    "A=%02X ",a为一个C语言printf函数常用的输出格式
9 R  `8 s% A7 [    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ r4 k/ J( u4 a, S9 {% n0 {    X表示为大写十六进制数
. b8 R1 q9 o. V0 A6 Q7 m
" M1 C  i8 e; @  C
; M0 j8 E$ m9 O/ }& n7 Z0 {2 Y: e* K$ \$ c6 l9 T0 p1 Z' ?
内存直接写入指令: maincpu
( v6 e6 B8 Q% G/ O    格式为 maincpu.[][]@地址=数据! f2 U% j5 p2 w0 s
    第一个[]:& g& c; [  ]& T* Y/ O1 W) h( \
    o 表示ROM地址
; M, Z; }5 o8 A# r6 j' g$ f    p 表示RAM地址
7 T7 ^( U) B0 `2 D% b
  V: H, L+ b/ D+ }' t! `    第二个[]:
! R) C( i5 v) E( z3 [0 k# m    d 表示4字节
1 y; B  L7 r' o0 |) E* W    w 表示2字节( d2 u* Q) ~8 h& d( l
    b 表示1字节
% Z0 {- N  @; Y) J/ n
1 y% ^: j% j0 n) z    例子:4 C* R% O% M" e
    maincpu.ob@1234=FF
7 M. H3 g. `% j    在ROM地址1234处, 写入FF一个字节
8 d) T4 F6 d8 ^+ b7 H
# g' y# k3 A4 @1 D3 H' E    maincpu.ow@1234=4E71$ @/ [) L$ ?- e2 i* @. c
    在ROM地址1234处, 写入4E 71两个字节
! E7 w3 m6 R$ B$ D3 b
5 G4 Q9 K! F  Y4 d+ q: f    maincpu.od@1234=600A4E715 S1 {& F$ c- Y7 ]7 O" _
    在ROM地址1234处, 写入60 0A 4E 71四个字节
- k0 y3 m/ L, f" O: W+ U; O( S, ~8 X, U
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 u) }% m7 D# S3 ^* u   
! P# b. I% J9 y0 d& B7 x1 T3 p
3 D& {: V6 E6 k, b( H' b其他:
' t9 R& T2 E5 ?, }    dasm 输出档案名,地址,长度- c0 Z9 F3 b/ q  R! q
    输出程序的反汇编代码4 D7 E5 t& f& U8 S
    例子:
+ q5 ~  J& n6 [3 o* L' [! t" V    dasm 01.txt,0,100000
6 Y. E  {! k- U6 i$ p    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 Q0 X# y% P! |# g  N$ C

4 j0 c: z+ d) {% W* F% a    softreset. u( j9 w, L! Q7 _2 E! [
    游戏重启, 但不重新载入ROM
9 c4 N# f. w" y
4 \! @7 {! @9 g# H; v! l  H' G' Z    hardreset
2 B% V* S, d+ ~# ]    游戏重启, 且重新载入ROM
6 m2 p6 W' p( `. J4 y1 A# [8 B- b3 Z! @# |  K; _  j2 y3 }
    snap xxx.png
% u, C5 ^6 D$ ^! O$ @; j    截图为xxx.png  F  X  Z2 B4 ]4 s/ k
2 m$ l3 {) j+ `: }- G# D$ e
  
9 [9 J. P* |# w( r; B: M  
/ R, K2 h: t2 I( S& [9 {# G  
# L5 v! }! z* z6 o8 w热键:% f8 t4 {- t3 q3 L! F5 o, Y# B
    ~ 中断游戏
* |. ^, y+ f8 S    F5 运行游戏8 z+ y6 u, d# |+ i- _& g% d
    F12 运行游戏且隐藏调试窗口
7 t9 t' v8 h, ^+ U7 @    F11 步入, 单步执行, 会进入子程序
5 k* X" J( {+ Q: L    F10 步过, 单步执行, 不会进入子程序0 _8 S7 {1 f/ Z2 U
    Shift+F11 执行到子程序返回2 Y, D+ d* D* ~
    Ctrl+M 内存浏览窗口1 j( N$ ^8 \/ v9 N$ j7 E0 r
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- W; s) `4 ^: s

6 q+ d7 s6 L; q) O0 ^7 D6 T{:4_94:}   y, G1 k. k9 y  w" q* {

2 O8 I8 V; G* N! K* h* u" u1 G# B

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2544 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。5 c/ z/ r! r: d8 H

8 V$ |, I- |' s+ GPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东7 i+ @* z$ T' i; u( s* p* B! l
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-2-19 06:06 , Processed in 1.088867 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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