EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
6 j9 `3 D- v% g
很快速的整理我自己常用的指令
7 u9 I" {3 \- {2 _% a! B& d3 w! K
2 {4 Q$ {0 V  N9 G{:4_112:} % h% o, `: Y. s& U  [' Q

; ]( O( z9 C4 k, m/ lMAME DEBUG常用指令0 m0 r  J. Y2 `% ?. I- X
9 e( F0 D6 q) v) A, g) z; f
内存搜寻: ci, cn, cl) D6 S) @6 C4 v% w9 z9 U3 \" K

* E! L) s+ F: A0 ~% o+ b6 H$ C    ci! Q$ ]7 o7 B+ t# Y7 U; s. U& t; \
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令* ^* X; G) m( q5 q0 e% b
& X8 s, l( H. f; B2 C' U. `  m
    cn
& j3 ?4 [1 b) T- C    搜寻指令" q" d0 w- _; i! {6 N" U
    例子:. ]# a, ~1 O2 z0 M3 Q  ^
    cn eq,60( b, l( R- c+ x' v' Q
    搜寻目标等于60 (十六进制)
1 l+ N2 |: D3 t& z        : ]  W  v/ \9 f6 r7 U6 l' l* D
    cn eq,#96, e# H9 ?. d3 _. I! s4 f
    搜寻目标等于96 (十进制)
  h7 b9 @% M* L' q% [( f' f7 B
& m/ \( ~( c3 e3 d/ b6 z    cn eq
  U- I6 }; b. v; M1 h    搜寻目标的数值没有变化
0 t6 D; @3 B; B: d& Q% a3 P  @3 `7 Z
    cn ne
; \/ ]  F* X  \    搜寻目标的数值有变化
" @6 s" x: y( {2 X. S' L        ( s1 ^5 E( L2 {$ `! i
    cn +
8 ^  M" }; @' K% J1 R! ~# ?5 D    搜寻目标的数值增加
' q5 h% Q6 @5 A  _   
2 X% p: ]  m$ m# E( C4 U    cn -2 Z( r! t8 t; f" r+ d5 T# \
    搜寻目标的数值减少' O$ {8 u2 L4 }8 q
        $ h0 r( V" l; ^2 e& D, ~4 a: e2 d
    cn +,3) q+ Z8 ~& c3 x2 n' {8 c1 U* h2 r
    搜寻目标的数值增加3 (十六进制)( o; c* z7 l5 s4 B& o5 ^2 E  P; T2 o
7 U6 i, ^& d  E7 `6 Q
    cl* H. G5 ?4 W+ D. w4 S
    列出所有搜寻结果
& B# `  `$ m1 o2 i5 S8 {4 ]
: c. q# Z& o3 p6 I% ~    cl xxx.txt8 c6 e3 {0 ?( B, _' ]
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- t; p+ l. ^5 ^1 z" X* r; t2 b- T
! U2 O, ?* O( M   
" F6 c8 E' ~" T, Y内存监视点指令: wp, wplist, wpclear, z5 R9 Q6 u8 D& M! u
    例子:1 [/ m. ~) a6 T
    wp 1234,1,r. |( |2 |7 b7 l( U# ]
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1# K4 V! X0 k8 J% Q& o/ i
& t: ?1 y( I- L: x4 J
    wp 1234,2,w
9 h( d. W# S2 X- [* @      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ v# W/ b2 O' o
     
; N6 w) x$ h; j    wp 1234,6,rw* e6 P: g0 w6 a( N; s
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 d+ D3 Z4 M4 p, ?* }
- b: m0 K: B( {9 O    wp 23456,a,w,wpdata == 1/ }, a! z( w& d0 ]" m+ J) B. J2 E
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
0 {2 H' \5 B% Z% T$ H7 Y& [$ F* t
    wplist( v' n5 U9 F+ q  B0 h
      列出所有监视点7 ?9 n% J5 v$ C# V. @: K" q

. S( A# o$ w2 n- c" i    wpclear 3
4 q5 \% ^7 T% i2 r: [1 N$ {& J$ l8 v" A      删除编号3的监视点
- }1 F9 O. ~4 r" ]9 P; c4 {6 c3 ?0 L6 x7 ~7 E6 l; d$ v' ?  A
    wpclear
$ v) R5 g( _( o, m# Y      删除所有监视点7 s9 k- q/ l( M! P# g, e
! v7 |( s1 ^# c/ z( Z
      " O9 ]  C2 v0 F, L9 p

$ F/ \/ K$ L2 `+ E: h" b1 O程序断点指令: bp, bplist, bpclear
% c0 N6 H# h7 s% {0 n6 `# [    例子:/ \3 L- T( S! g) L( g) x* z
    bp 1234# l* `$ T( h& E& ?& q
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断) x3 w+ e  K' {/ [* ?! F, E
, a- P* _: n' G: ^# X& k
    bp 23456,a0 == 0 && a1 == 0& K: O5 {0 }  h
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
. _- w. M# ]2 R. M  m) V7 L
- o3 X( S' X7 [# R    bplist( [! ^- _. b- o: m
      列出所有断点
" P% u( g9 m; G( g) |; Z& h/ D% _: \( C1 X) C* Y
    bpclear 3
6 z3 A( G0 y3 g- C1 x      删除编号3的断点( G2 D% c* f7 D

; k" l$ F) S9 a; x1 a2 O% M. U    bpclear4 {2 D8 ~1 ]' G8 [& t
      删除所有断点
; y: x% z& W# n
* \9 q3 R: @0 X4 N: Q9 A      / y* O& A2 f5 P
      8 g/ u2 N3 I2 X+ w
跟蹤紀錄指令: trace) ?+ U) a7 m  ]: c+ K4 c
    例子:5 V! p. _( s: {. c0 T$ `% _3 Q
    trace 01.txt  _  F+ }9 K& q6 H
    跟踪当前CPU运行的所有代码, 输出至文件01.txt5 P5 x& J; l" C0 {% V6 N+ H

: t9 O% o- M. b) \    trace off
& \" h) x2 T- @( Q    停止跟踪, 并且关闭文件' O7 q5 M' u+ F5 r  a
6 _7 _& z2 z" h2 D* o
    trace 01.txt,0) a" k  {) ~# z, J2 a( Y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* x8 n* F/ m8 s( \: H

2 }) }1 o! w7 S- L) Z    trace off,0
" K5 ?9 z' m' G/ y/ P" I7 w! P    停止跟踪编号为0的CPU, 并且关闭文件
, W# ^* n) W% E- l; @: S9 \2 v* m9 K9 ~% m. X# k+ o
    trace 01.txt,0,{tracelog "A=%02X ",a}
& V. \& _7 _" e  t    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & Q+ a* p0 X' u
    并且在每一行的前面, 写上"A=a "
; ^4 U% `4 J! L* p! H5 F' n2 |    "A=%02X ",a为一个C语言printf函数常用的输出格式- \3 L7 e5 {0 l+ m
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 |1 E* [5 r9 X0 R! Y1 }    X表示为大写十六进制数
( I, B6 K0 L$ W, Y  Y6 s, U2 i. R, ~0 y0 w5 X

  h3 x, C! }/ e' h
; S% ]2 |0 Q. ]; s7 k3 Y# N' L内存直接写入指令: maincpu$ Q4 H9 V: d5 J( C9 Y$ f( B8 d
    格式为 maincpu.[][]@地址=数据
. ~8 F; l4 Y. P3 m& o$ m# T* b    第一个[]:
3 L4 S: {' L/ ^    o 表示ROM地址) v" y, I7 a* m2 G7 q
    p 表示RAM地址
  B" E# b  }- i& M/ M0 _5 A& i" Z% w# S) \. o9 o4 ?
    第二个[]:
" |- X$ ~% W% J9 ^    d 表示4字节
$ s0 `. B0 c0 e; N: [! N- T    w 表示2字节
- J& D* Q2 @% s    b 表示1字节
% u- o7 d9 e, f, t. k* b- h
3 T3 ^) O3 C; P2 @) C* w/ J7 J, [    例子:
$ ~- u" J" K+ e2 K( @    maincpu.ob@1234=FF
" j) d; U$ V- b3 }: J2 v    在ROM地址1234处, 写入FF一个字节+ X! S% r8 q% \- c

/ Y6 J/ e6 |( i, Z: H, d& d9 I    maincpu.ow@1234=4E711 n* e, y2 b3 S. k
    在ROM地址1234处, 写入4E 71两个字节
  @7 T4 |, C5 K# n4 f, F1 _% S, [4 C3 i0 G& s2 a% z
    maincpu.od@1234=600A4E71$ c# J- l. k# a' B+ C" G
    在ROM地址1234处, 写入60 0A 4E 71四个字节
, r6 |- W' ], W- x! l8 U9 J6 N  B( k; h1 F& ~
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写. K' g( ^) b% R
   
6 v" q( {" B7 @. R$ K. X% ?% ?) r: j& ~, f5 i
其他:% x: y6 I' ?: x
    dasm 输出档案名,地址,长度
6 R, [9 R$ ]9 b! A" J    输出程序的反汇编代码
6 x' A# e0 f8 Y; ]    例子:' G/ }/ C  H# V( \' v7 D
    dasm 01.txt,0,100000
/ l) v) l9 B$ |2 H4 n' r    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; L+ d" {. Y' y9 h2 A
: }) t# Z% R! r  Y" U) f
    softreset
0 e$ a- v2 e: x& H    游戏重启, 但不重新载入ROM
5 A/ Y8 c' }6 l3 m7 ^0 }5 }2 r* M, H* x6 d: M- w
    hardreset% N; a; |2 |- F& l' R9 _6 U
    游戏重启, 且重新载入ROM( p% I! `8 E* M  `" {
; r  Y$ g1 u9 n! Z1 Z6 D0 G
    snap xxx.png
/ h4 W$ q7 O& y; W# `+ S! D    截图为xxx.png
5 }6 a" s9 L  B% S* O% y3 e5 c& [' I2 T$ U9 I
  1 ~% }6 T9 [- f! h
  - D: B' D' m+ y+ a5 ?+ U
  
$ p) o9 b6 z  O. Q- q: U热键:4 p9 v( t( x; u: C
    ~ 中断游戏
3 \% `) A/ f! A+ t; w* r    F5 运行游戏
; S6 M% F3 A/ l5 B) I' X( ]    F12 运行游戏且隐藏调试窗口) @, }, B& r# e
    F11 步入, 单步执行, 会进入子程序
; i9 J# k7 l" s' W1 K/ K0 O    F10 步过, 单步执行, 不会进入子程序: F, F( U$ R, C# k" S; F# {0 _
    Shift+F11 执行到子程序返回$ Z- h/ U: M; A- q, c
    Ctrl+M 内存浏览窗口
9 ~/ b5 V& ]7 x- T0 n( M/ Q    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; q# w6 i% ?: p, y  P' M: H

8 b' c+ b  a+ p6 Q1 L- n5 P3 H{:4_94:} . Z8 X2 Y* z* r! m: [8 H+ ]

/ @; a' K$ ~1 {! W& D  x& l

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
+ T. }( D8 a# M) k% L; z, q9 B- m9 ^) x) ]
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 | 显示全部楼层
要详细些的东东
1 y1 [5 r, l5 U" ?! r1 M11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-6 12:11 , Processed in 1.075195 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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