EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

% u" v; t& t6 D' d4 `# G7 n很快速的整理我自己常用的指令
& `$ g& w; s4 J& [
+ `6 [3 |! D' ~5 s{:4_112:}
% G8 N9 g% B# m/ k2 Q0 |& k/ C  y6 z, _& d  F
MAME DEBUG常用指令. u& N& Q7 y0 i) R5 g

. R/ X: w+ F6 J) g; y* x2 |内存搜寻: ci, cn, cl: h6 {1 a( }9 {; S

* n/ e" @( u+ h* h* X$ e7 ^    ci
+ w$ N, o" N1 m    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' }5 @5 ~# L' m" _0 U, z6 d5 k- B" P$ p( B) V0 Q
    cn# H3 Y5 [1 U. H4 X) u0 }3 ]* G4 a
    搜寻指令$ a. U5 U' j2 i+ P% V7 o( D7 W
    例子:* [  `, j/ F3 a, L
    cn eq,60* A8 `" ^! j+ o) V( J# u
    搜寻目标等于60 (十六进制)
0 r" U4 p6 x$ Q! W5 ^! a, ?5 n        % P+ V* e9 j6 n7 O0 N
    cn eq,#96
( t: l; T; s1 E. i& L& Y    搜寻目标等于96 (十进制)% L9 K! v8 n! M: J7 C3 ~

9 O- o0 k$ X* X$ u# G2 z' A    cn eq
, _, I, t8 t% w; c3 p2 `* {( ^    搜寻目标的数值没有变化
4 n  R6 I& J: M/ J- |. c8 ~& F0 X
    cn ne
9 }! r  V, q" a6 N+ t    搜寻目标的数值有变化$ ~) l1 M+ R9 N' l; b) s) k* A
        ) w- `7 }# i. F
    cn +7 ~6 H0 w" u" l0 K+ x
    搜寻目标的数值增加& r* Z8 Z9 q) ?" h# E" e
    " D8 c* y2 ^4 n- v/ p7 i7 `
    cn -8 ]1 P6 T1 G# u. W$ F* p
    搜寻目标的数值减少; J, k$ J. S8 I2 H7 G' ?4 i9 A$ P' A& V
        
- _) G9 ]+ n- t7 b. \    cn +,32 z0 R5 J9 ?0 q- C
    搜寻目标的数值增加3 (十六进制)# u% B# U) w" a1 l$ A- v9 F

$ W" U6 l+ D" n  J, J  L    cl; m0 s" j; Z: u( E6 T
    列出所有搜寻结果
; G  D3 O( z% K; p1 z: I( l# @! y5 M  F5 a% _( m
    cl xxx.txt0 r* D- n. Q* t* V0 Q' [; d' B  o6 N: T
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( _0 L! I+ X' I7 n  a: _& b$ g3 m; _% `2 H% z: [& y
    6 {/ Y/ r& ^4 S
内存监视点指令: wp, wplist, wpclear
3 L5 R( f7 S2 t% L9 X    例子:' l: t7 u  U: A! c8 O9 w; _. T
    wp 1234,1,r
/ t, m, g0 F- @; h1 A      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度18 H' X! [+ W5 g; }& w
0 ]- x- Z/ }- D# g# ^- q
    wp 1234,2,w
$ A" ~/ E. s% T% k      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( g& _$ B) x, \: u5 I$ F8 P6 ]# S     
. e9 U5 S% G8 B; f+ M) i    wp 1234,6,rw/ B8 \0 r4 \- w: C% X
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6! J2 v: W8 O5 I: D
5 F7 d) `+ L" ~& s; j) `: ~: G, p* `
    wp 23456,a,w,wpdata == 1
* v( z, H0 D( U* i      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% f# W" g2 X$ ]1 T8 _, W* x) C/ q2 `3 z, u8 ~; m
    wplist
- l0 Q' ~  ?6 l% o      列出所有监视点4 o* s% ~' |# g. m7 L$ e

) I; f- D8 n# M% f& f; O    wpclear 3
+ `) [/ k$ U5 i4 z4 Z0 X* J# k      删除编号3的监视点2 g; {' D: [% Z& j/ f! i+ D

0 j8 i; v$ t8 x    wpclear
2 a" P) R& [3 H  z- E$ a1 ~/ f: T      删除所有监视点
8 Y% N& r1 f5 f. }, a5 F+ f! d$ K
5 j2 m' z7 I- j! w9 ^% d7 X      9 _$ t% P3 x8 I. ]4 ]

1 \+ m: n: p; r* K程序断点指令: bp, bplist, bpclear
% J; ?/ ]( c$ g; {    例子:
5 x4 H) T9 S5 \' }    bp 1234
" _( m9 K) b4 F' M& F      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断) I9 t' a1 \5 g0 S

1 Q# E1 u% r' w0 \( F5 |  p    bp 23456,a0 == 0 && a1 == 0
- c& w$ R6 b3 Q      在地址23456下断, 且中断条件为a0等于0以及a1等于09 p  n; h9 F. R

. x( Q) g5 v) j5 z3 V: P6 W    bplist" r& ?7 ]7 V! v# W' `, R8 f
      列出所有断点
# t5 L' r3 b& i" Q* I/ p
4 g3 ^" S  S. E    bpclear 3
+ S  ~. D( Z4 ]4 Z4 m      删除编号3的断点
9 o: D7 k4 c8 N- h3 n. f7 ?
5 {( a8 Z( X9 e7 z, y+ D    bpclear
! G' P! t0 N' b2 l* [. u4 ^      删除所有断点) K0 b+ l( J! E# f

2 `6 T% ]' _4 }! p% x9 Q      
* u/ L1 Q; u6 c: K4 z! U' C      8 k, y* k- s& y8 j
跟蹤紀錄指令: trace! }1 k/ U! N3 W/ b0 l2 a/ T
    例子:
# l8 Y  ]9 I4 a5 B0 T8 X/ d+ w    trace 01.txt& w8 ]" L4 |$ {9 J2 x6 _6 ^
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
' x& ~3 [! t. p  I5 |1 d' ?* H2 ^2 g' D1 d
    trace off/ y( y- I- B0 s
    停止跟踪, 并且关闭文件
8 b) P9 P" S( h* c3 P  ~9 ~4 Y# K4 S/ @; ?
    trace 01.txt,0
! s& H+ x: ^0 v2 S9 V    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& {) c! \' l7 T+ K1 D9 M
+ j0 b. E- e/ G/ w4 L
    trace off,0% u! i+ O3 Z9 d: l" C
    停止跟踪编号为0的CPU, 并且关闭文件
9 ^2 r& Y. H; W$ {7 U3 m1 h+ C0 d( s) U6 ?8 r
    trace 01.txt,0,{tracelog "A=%02X ",a}1 c0 v- |# t5 c  a; y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# P. V1 L8 [' w. Q    并且在每一行的前面, 写上"A=a "; ]( C0 D  ~8 c" E3 i' z
    "A=%02X ",a为一个C语言printf函数常用的输出格式
9 X9 {: F) W+ N+ s7 n    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入: j4 A  f- f, }+ m, @
    X表示为大写十六进制数
1 T# O, Y* M7 [( Q
+ q0 M, d, j, @& l$ L' G( R" Z, V6 o; }, m/ H7 r
2 t4 S. [) Z7 A8 Q+ X  w# g
内存直接写入指令: maincpu3 I8 z7 |1 h$ K. h! F7 d% G* D
    格式为 maincpu.[][]@地址=数据* T, A9 `* [9 ^, L' f% g( B
    第一个[]:
) ]& S% s$ v- ?2 h) w% C+ B. c    o 表示ROM地址
4 y# r0 r: Z' j( Z" \    p 表示RAM地址
& D6 K5 {  n- X3 I  P; o% j
7 b5 Y4 {" i1 _3 M4 d5 p+ g3 Z    第二个[]:% l* N4 e# f# y# \3 L& j
    d 表示4字节
0 r( R+ V. ^0 I$ J    w 表示2字节
4 H" c- t! Y9 }9 m7 \2 k3 y    b 表示1字节, o% Z: ~' y  O! ?# g

0 k$ L' L" \3 c+ g0 g    例子:- X! G. ]! o# z9 [# w* R) _" N
    maincpu.ob@1234=FF& w& K! J! s& v) L. E. a  h3 Y+ o
    在ROM地址1234处, 写入FF一个字节
1 y6 s6 Y) r5 {9 ?6 W6 q5 o
: h) o3 M6 o; V6 p    maincpu.ow@1234=4E71" a% {$ E! E" q) z; {" c  }* Z0 A
    在ROM地址1234处, 写入4E 71两个字节
' P; R: }5 l0 d( G3 P$ S6 `. A3 v# H8 O$ h
    maincpu.od@1234=600A4E71. C, ]" T1 [7 }. N2 V9 S' F% Q3 `
    在ROM地址1234处, 写入60 0A 4E 71四个字节
/ K' C7 w8 [1 @* u2 \- U' q1 ^+ i
$ v6 A2 Q; m& `6 a, Z- H    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
  ]1 ~- H3 V) }% k9 [   
0 W# }( ~- h5 }1 x5 G0 Y% g" q
$ m. G' j3 O/ A6 L1 w5 A0 a$ ^1 ^其他:! [0 k- x$ g* D; j* N
    dasm 输出档案名,地址,长度$ e7 j+ ?% H' M/ Z; ^) g
    输出程序的反汇编代码
. [, x, G- Z' \$ b- K    例子:
: Y4 A  l, ^5 N    dasm 01.txt,0,100000
8 H4 h: w* O2 S' t5 @    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# b4 Q9 s) M5 r# g/ }3 }

5 k6 J+ h- M) s    softreset9 D( F  |4 Z, x; h7 ]7 L
    游戏重启, 但不重新载入ROM
6 G; l' Y# e( |$ |$ S+ O6 B+ a6 M& j2 c9 Q) Y
    hardreset
8 C1 u% R9 E8 _$ a( H: x    游戏重启, 且重新载入ROM* n. g4 k* e8 E& r+ [4 h
. _3 Y* g$ T3 R
    snap xxx.png
9 f, K% `+ O( }# B: A: g    截图为xxx.png
  z8 _, H% ~* n) ~+ e* a9 H( W, _: f2 ^5 F3 l! `! Q
  
  [$ C) k$ g, q  
, y5 B/ P, n$ y- k  r' |  ! |8 t3 b$ q; I: a
热键:
1 j( H* _' c) K! i4 A0 n    ~ 中断游戏
# C( n) E+ {; i  L* U1 ]' P    F5 运行游戏
  `4 C5 {% ~- U    F12 运行游戏且隐藏调试窗口' T% |8 _  _3 w* V4 W7 y
    F11 步入, 单步执行, 会进入子程序
# U! w, @* v& i5 Z$ k    F10 步过, 单步执行, 不会进入子程序* N0 D  C9 h7 f3 v; [
    Shift+F11 执行到子程序返回
4 W$ ~" H8 C$ b% g9 e  g    Ctrl+M 内存浏览窗口- b, k1 H. _. G* _7 T! s- y7 l; p
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
/ d8 n! D# M6 A# z' w; F5 m/ B* l7 Q8 \8 V2 Z) o
{:4_94:}
+ P2 g! n& h0 I, T7 N
2 }+ p" U$ A0 Q+ V2 U

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2544 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。# y) B, V/ M* k

+ F4 y6 X2 A, 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 | 显示全部楼层
要详细些的东东, z8 z5 l7 l" X! J$ |
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:43 , Processed in 1.102540 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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