EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
1 d9 X0 r) |7 u7 A% c9 V$ f
很快速的整理我自己常用的指令
! w; G$ h: f  L2 M& p* e/ p8 |
3 o' m" F  s; j  w; o0 ]5 ?. o{:4_112:} 2 s' f: I! h3 g- E3 V% O( |% V" `

1 m3 g9 L& K# u2 T# p, j% i4 g2 o( {' DMAME DEBUG常用指令
9 A$ U6 E& B; D* K
3 T/ C+ J# h4 `- b内存搜寻: ci, cn, cl
) U: l- C: ?* O5 R. v
  Q7 V+ _0 X# B    ci
" ^" P, I, j& i3 p2 o    搜寻任务初始化, 每次搜寻一开始一定要输入这指令+ d2 k. F; X2 P1 T) {! Y1 W
& L, c, H) \+ D! r- F
    cn
8 L4 R) _( a, r* u' e2 L6 C( `2 R    搜寻指令
9 I6 a$ |# ?8 h: A1 o3 a1 D    例子:
/ ~. [& H; i& C7 Y. Z    cn eq,607 N. a8 j  a, \  ~3 ]) s5 G6 R; \6 R
    搜寻目标等于60 (十六进制)1 w4 d" c9 i8 S) {
        
2 ]& \( d% y# c. p2 J2 F( {8 o+ ~5 P    cn eq,#96$ Y  c2 i5 }0 m( h
    搜寻目标等于96 (十进制)
! z6 G& R1 d/ D6 n
9 y* Y7 u  j0 {5 R; {2 s; `    cn eq
% e3 T& c* P' v, H4 D    搜寻目标的数值没有变化
5 w* Y  n6 ]( \7 ^, _6 d
5 U( M# W( I; B    cn ne& b2 Q" F7 |0 X
    搜寻目标的数值有变化/ z3 L) F& M* g, S
        1 U2 F  T  b* ]# `  i9 z
    cn +, b" `5 g0 V& l" V: d1 |& A
    搜寻目标的数值增加* e; p! T& n( X8 J
    9 g. c. c4 ^- z) C+ b" [* k
    cn -) Q# o  [- N. B  J+ N4 k
    搜寻目标的数值减少
  K4 ?' B/ N1 ~! ?        4 N; J$ R; m+ Y+ c! |
    cn +,3
, Q% D( k0 j3 n/ B* S    搜寻目标的数值增加3 (十六进制)) o5 E$ i9 A6 m; r
- O7 ~- g* Z. ]$ a5 U# _; o! g
    cl- }& |7 o0 I7 D( a
    列出所有搜寻结果* ^+ r$ J% W: c, z% o' K

6 m6 K. h5 L) o# {7 ^: [0 v    cl xxx.txt
% `/ X& e. u' z9 R5 ]7 G    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- y- o0 s1 v# a8 @
; z( `! u# H, u8 z/ F- o   
0 o5 g% }4 k" j% a0 K内存监视点指令: wp, wplist, wpclear
. ]* X. J; h  `" [$ h# z( A    例子:
2 R$ G" I9 H" m    wp 1234,1,r5 J8 u/ f4 L  x0 N; M/ h( ?1 u
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 O: B* A9 c8 `- b, J# D' `: d

' ^5 H% b8 ^+ Z0 l    wp 1234,2,w
1 m: u) e4 g8 k4 s      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ m: m& ~5 [' Q7 T9 D1 X  \     
6 Q, B5 C& N7 z3 c3 |% C- T    wp 1234,6,rw+ n& o, a3 F4 R) p( e4 f
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6: u9 b8 H7 h5 v- i/ B/ a
( D# @; _- ^8 [0 l
    wp 23456,a,w,wpdata == 12 Q- m6 r7 v# R+ V9 Q* O
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
, {8 f# ], F- H& p7 Z
; E& D- p' ^4 S" b5 k    wplist# t. A8 K& a3 r8 L' ]
      列出所有监视点& _- F- m7 j5 ~( e" Q" N" c

7 i  ]3 P' ]& u    wpclear 35 f" z, C& q4 |! y! p) {
      删除编号3的监视点
  z8 i7 _, Y8 a: G' \8 ^4 Q* S7 Q& C4 J; C8 D
    wpclear. |. |& M. y! K1 [
      删除所有监视点. n9 W9 W6 T% {

! H  S+ b0 B# V. D( k  B: P- E      + e1 Q- ]5 y$ ]7 {. ~. q6 A6 B
( P9 {7 H+ G# l0 c& Q/ ?
程序断点指令: bp, bplist, bpclear
& p4 g2 }- r: z3 H% s    例子:/ K1 S* x% D! @) S$ x; E) b# {1 X& z
    bp 1234
1 S: F; r. {7 u( X7 F; u      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断$ M$ \' _+ M" m" R

; e6 V: r, z$ N& A    bp 23456,a0 == 0 && a1 == 0
, Y( c; t3 h* ?1 u6 D& g      在地址23456下断, 且中断条件为a0等于0以及a1等于0) `, O1 S, O6 }5 T: Y+ d
; R" r4 p; B( n+ {! m
    bplist
: ]4 k; E6 [% e7 t3 }9 c# `      列出所有断点
# a+ F4 j3 ~1 j: ^% l' k2 W* m$ B2 u$ g$ {. P7 v2 K
    bpclear 3
; F/ J. _9 F3 j3 E/ O4 d/ l' F      删除编号3的断点3 O" Z* {5 i" U3 h$ j! h. C

; ~3 K  s" A: q3 J, Q( d: D: A& f    bpclear- _1 x8 e' C; B) R" k
      删除所有断点  b/ e5 C- M: D2 o
7 p5 p+ W) o2 ~* F
      
' |3 N4 D2 X' e: _9 E      
( w1 h4 Y+ G( v4 ~跟蹤紀錄指令: trace; J. [. N( f4 Z, s3 R
    例子:
3 A4 m+ ^+ I  _- Q+ O    trace 01.txt
9 f2 x- g1 [% A( N- B1 B    跟踪当前CPU运行的所有代码, 输出至文件01.txt+ r4 Q! j; d4 }2 U) {

+ r  O  l4 M, v- f) Q  R    trace off
- `' f( g  g# y0 G4 E    停止跟踪, 并且关闭文件
- l) t, [  h, _2 T1 E2 `: {! L( g9 i8 }! @) f1 f7 b7 F5 m/ f
    trace 01.txt,0" b& h1 S( W. w
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt2 G8 i% B! X/ _) Z& u
% p) ]& {0 }: L1 ?4 M& n) G8 d, L/ e
    trace off,0
; X) z* C# Y% L    停止跟踪编号为0的CPU, 并且关闭文件
- C" `3 R9 X, |- W$ d& G' Z  V) S6 B5 D/ `* a/ c+ H
    trace 01.txt,0,{tracelog "A=%02X ",a}' d! s, ?7 p) G
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt / S. f% s" N$ S8 k& r; R
    并且在每一行的前面, 写上"A=a "
" g. `2 ^3 b  W2 }# Q; D    "A=%02X ",a为一个C语言printf函数常用的输出格式1 J5 X; i# k* V- |
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- O: H; b/ e5 J% t
    X表示为大写十六进制数' R' l" y8 }6 E' l% W. B

) q- C( r0 a. J) w+ s# H& I$ Q" {; h/ O; b9 M
; D% r% C$ J# ~6 [& B
内存直接写入指令: maincpu
+ K5 G4 K( r) w( B    格式为 maincpu.[][]@地址=数据! r( ?% _- X7 o
    第一个[]:
  S) u- I5 [, H# P& D, v; [    o 表示ROM地址
3 k+ m( M4 t8 Z" l' m4 r    p 表示RAM地址$ ^/ ~; P% f7 Y  R7 U4 o

$ U5 q* f5 @: a: D    第二个[]:
. B) y  g& V# b+ t% p8 y: r) H) G    d 表示4字节
# \" O# Q$ y9 U5 X' U    w 表示2字节" e8 d$ @" E) C
    b 表示1字节: p7 f$ h! ^" r$ ~

' v+ F2 B" Q) B    例子:
/ D' R" O* p. A( m: a+ l3 o    maincpu.ob@1234=FF
8 E, I5 G* k; Y  g! d    在ROM地址1234处, 写入FF一个字节8 a- ~! u5 q7 O: ^
8 |* a# t! n$ h; a6 y
    maincpu.ow@1234=4E71
. o0 z0 Q) R  p; @    在ROM地址1234处, 写入4E 71两个字节
  N' \" a9 }! s: n; k. U' P# A! L$ K& G6 ]
    maincpu.od@1234=600A4E71
  E: S, k: X/ \$ `& k    在ROM地址1234处, 写入60 0A 4E 71四个字节5 D  B: G9 p; t& r5 }3 V
5 S+ N. m* e: {" A+ ~4 v4 N# W& O
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写( G  v2 m  v6 Z/ ?- E/ S9 `
    + T6 `( X* v6 S5 a$ |2 C: A5 g7 j
& \. h2 w+ D" |8 ~) _! P/ h; y
其他:; B: u' y; ~6 A2 {& _' _8 c' D; Z
    dasm 输出档案名,地址,长度4 E3 C8 |# S7 d+ e6 o
    输出程序的反汇编代码5 g$ E0 L; p/ {; f) E
    例子:
% X! n0 ]: [- Q1 J0 _1 |* K    dasm 01.txt,0,100000
2 \+ s: Q. I8 B  W, e1 N    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt- B9 ~9 u" C! q5 x# q

" h. s7 z1 Q6 t2 d4 M9 i2 _6 Y; o: G    softreset% ?! i2 n1 C/ \6 |
    游戏重启, 但不重新载入ROM
. R9 Y+ P3 R9 v+ Q5 [% x% |0 }* o& Q: Q# O2 P% u% u
    hardreset8 Y3 y7 c+ ?+ v- z  _
    游戏重启, 且重新载入ROM+ n: m% X. P& T% }! D' J
5 O+ z' F0 d% h1 [4 _
    snap xxx.png
. e1 U4 p% y) Q# ?& G3 e- u    截图为xxx.png
3 i: Q# k# n2 U: e* P+ B
9 E( q" I" j4 \) g5 T( k" A% {  
% `' R3 _6 K; i& d5 E  
! e1 ~# F+ H" m/ l& b7 r  
/ c7 S! E" f: f3 J热键:1 N. E. L( i4 |& t" I) _
    ~ 中断游戏7 M( O, G% ^1 V$ [4 N
    F5 运行游戏+ l" r. {% k# ~0 a  P+ i$ ^5 V
    F12 运行游戏且隐藏调试窗口  d6 a& Y1 t# k2 V9 T, n6 r" m
    F11 步入, 单步执行, 会进入子程序! u# L" c1 L% [7 x: X8 K% P
    F10 步过, 单步执行, 不会进入子程序
' `# K  z, M( g4 O8 E! I' R1 i# X) ?    Shift+F11 执行到子程序返回
0 E. p* E# H. L7 W    Ctrl+M 内存浏览窗口
' T0 ~& u1 ]$ S/ O8 _: f    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU& t) }0 ?+ Y7 h

0 ^% X7 W& c2 ^( S{:4_94:}
) f) q3 ?! L3 I9 o
* F; \, ^$ i+ H1 l2 g& {2 F

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。7 V+ m. z# n3 s

% f( {9 e* R# DPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
* G0 q! ?1 P! O11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-5 15:31 , Processed in 1.091796 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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