EMU618社区

 找回密码
 立即注册
帖子
查看: 1102|回复: 7

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

  _# w- ~5 s( |; }很快速的整理我自己常用的指令
+ h9 L2 S5 x  n7 R
9 O0 f* M+ T3 u6 e: T. W" w* o6 ?{:4_112:} . Q' ?( w9 N7 j9 n  r9 N

, h# t1 G# C! x2 `( lMAME DEBUG常用指令
% L5 _4 n  }6 ?1 W- }
# U6 z# b% l/ G8 I内存搜寻: ci, cn, cl
" ~# M  `, U6 M3 Z* b  b) r' i1 ]! k1 d* b7 q9 Y8 A: m
    ci
# E2 d7 ]% T/ {* d6 F6 L    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
( H) ~0 l$ N. H& Y! \3 z9 h& |
" N. O5 U+ V9 w3 [* o    cn
9 u* s9 {6 B1 g4 B    搜寻指令% r* X5 s; N; \. L
    例子:
7 }8 }: p( I/ {/ {    cn eq,60# c7 Y* S4 ^3 o+ V, e
    搜寻目标等于60 (十六进制)7 n) ?4 E$ {. f7 g& e4 C3 X
        - O9 i# b. l/ h6 {
    cn eq,#96: I  D' A: Y) K9 V
    搜寻目标等于96 (十进制)2 s4 X! ^! Z! a' F9 v. ~" g
9 T6 V! C, z( D0 u
    cn eq
$ ^6 w4 ^& _, F+ }* p9 D2 [4 j    搜寻目标的数值没有变化% O/ T  M0 R+ o/ u, [
/ r. ]1 l* P# q; K9 K& h8 _) g
    cn ne
# G% O4 p" u+ b    搜寻目标的数值有变化$ y2 ~8 p) c9 ?# q7 J6 ?, ]9 c! }; R2 _
        ' B" |6 h0 C  U6 G4 }6 C
    cn +
0 m2 s: [5 [+ Q* K) e/ ^. M    搜寻目标的数值增加
/ j6 K! j  N# l- M9 C# p: ]   
# _7 F' `4 ^# }    cn -
' _6 u4 N$ ~- ~* t    搜寻目标的数值减少& P- E1 y( L$ m# e6 s0 K
        % Y2 u: _7 T5 ^$ {2 |& T
    cn +,3
0 O0 X: F' n0 b* L. R& I' ~    搜寻目标的数值增加3 (十六进制)
: ^9 j! d( A5 U: ?; O
/ \, l  N' ?, L9 w) D- ?, i1 s    cl
7 h% u# _7 g8 l  t9 ~% T' z    列出所有搜寻结果
1 Z$ s& O8 o4 S% j. H* ^& {8 _  ], z! |9 o  R( b7 U
    cl xxx.txt
6 X/ b& j& N, i( P  K    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# `: b/ i7 N1 A7 L9 |9 ], k% Z9 O; g9 K# w- K- D( v5 M
    4 ~1 i1 ]: G' S6 T
内存监视点指令: wp, wplist, wpclear9 b# {5 ^+ P) c' g+ Z2 P
    例子:
' ~" \% j% A: B% t' W$ }    wp 1234,1,r8 n8 E" f8 N+ ~4 k: i% g
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! n; t! l) ^3 W' z: t+ P
) f0 M) J8 Y( n9 o. t/ P* }( [    wp 1234,2,w* U# v$ I- x5 Y, B  I
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; y$ k2 s, V$ \3 f: v2 h+ ?     % t1 t; k2 d+ b4 l
    wp 1234,6,rw+ n2 B- G6 n0 Y4 w. v! |2 y3 S
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6. ]! x' l) k# `+ o/ \- L
, a3 A6 w) C  k
    wp 23456,a,w,wpdata == 16 N/ Q6 K; c$ C' ?( p
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 Z* \) Q- W; z' x$ r. G
& _6 l# S( ?; \3 p6 r
    wplist
2 p7 F& S8 G) ~      列出所有监视点
! m2 C5 d5 [$ @7 u; C3 o, q
% u9 y$ _7 |- `% b5 o+ g' \% z& I    wpclear 3
$ j. b7 y* h3 a7 b" S      删除编号3的监视点
9 r: ]. z0 f4 E* |2 q) `& O5 x4 h1 z, j' i0 e
    wpclear
- G% N1 @7 j; h3 B: M      删除所有监视点1 l* g% H7 |) ^' t( ?2 u) R# v

( V8 c9 @, v: `( _4 R      9 K( V6 q) w2 w3 @
+ V1 n( ~( `0 R! A1 F0 P
程序断点指令: bp, bplist, bpclear
' I; f6 h3 R# p* }% N' H) g    例子:
. Z3 u2 C8 v8 e: S: f; ?    bp 1234
9 x. C# i, C9 H      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
+ P- P# }: O6 ~" f) q
9 h8 h- P5 t8 F    bp 23456,a0 == 0 && a1 == 05 v# Q$ O9 @. {  p. z$ `% W# m7 r
      在地址23456下断, 且中断条件为a0等于0以及a1等于0! w  \# y1 h5 e5 p
, \1 H. j& @1 b( b% n4 K. ~* T
    bplist7 l6 V, j/ ~7 i4 z! D, V, H
      列出所有断点
8 N$ i( {8 s9 `  Z" ~; t- e: K% D0 c4 t
    bpclear 33 ?& j8 b+ Q. D6 Z
      删除编号3的断点6 E  W, p. g& p+ q0 `3 g8 V
" _# I1 c+ f2 J4 D! j
    bpclear# [, Y" m9 P  x" w  X/ I6 x! y
      删除所有断点9 k6 u* r. X7 Q0 t, w1 ^" A  I4 i3 `
- t" g9 k( w0 M' X
      # S; ?% Q+ d: t0 \
      
+ r& n5 L' M1 R跟蹤紀錄指令: trace9 P) X7 _: L( ?4 d; V1 L& r+ {
    例子:
/ C* G/ Y( ~% Y# x/ V- E4 H    trace 01.txt
: C+ J! }; ^) f2 J2 J  u    跟踪当前CPU运行的所有代码, 输出至文件01.txt
* W$ _2 O3 _- N6 {2 Z+ p) X; X/ X8 d  v9 c, r
    trace off
- U( h6 M6 g- D0 j  e! u0 _    停止跟踪, 并且关闭文件
! A2 Z+ q- G1 l0 B  h
- n" R1 J$ q- w& c& V6 b    trace 01.txt,0. l: W; W) A' c" n% ^1 e
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt, P4 j& v3 F$ ]9 Y
5 K: q. }- h( d; h7 Z
    trace off,0
1 B# Q- }- P! G) n; w    停止跟踪编号为0的CPU, 并且关闭文件
& E5 H# D, S1 \4 f# w/ S6 C; ~( C% M0 _$ F
    trace 01.txt,0,{tracelog "A=%02X ",a}( l( f0 t$ j0 x- z2 q2 k2 |
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# R1 x( E* i8 @    并且在每一行的前面, 写上"A=a ": }4 ~8 `. p- K7 [* v# B
    "A=%02X ",a为一个C语言printf函数常用的输出格式
6 u) }- _4 a/ ~& I' C6 E    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( |$ E6 I9 v" I" {    X表示为大写十六进制数
2 |' F% m9 f9 a7 ]! ^3 }6 @# H- ?' V1 G  ]2 k7 g* k

8 J6 w' H8 b% E7 h' S, ~/ H5 ?/ f+ h# U6 z* Z
内存直接写入指令: maincpu  r8 }& @' i' B- u; ?
    格式为 maincpu.[][]@地址=数据
2 O6 I! v, J# C0 r7 ]    第一个[]:3 `$ s4 Y4 @9 {7 X! @( r# S* h
    o 表示ROM地址5 M! ?% w2 V) i7 C
    p 表示RAM地址
7 D1 _( B3 e) ?* ?* p8 C: T) }3 q7 U3 |& V0 [, \
    第二个[]:1 d& }1 U' U0 }5 Z/ _
    d 表示4字节
. K/ L+ B' [5 a+ }0 J# d    w 表示2字节
# m. N- F2 P9 @, ]9 `. m6 p( R    b 表示1字节
5 J& M3 T( y1 B2 f$ k% K! E4 E* L! x- p. u* p1 s
    例子:
0 O) B" P3 _3 C" [( c    maincpu.ob@1234=FF; L7 r  l9 y! X0 y* {
    在ROM地址1234处, 写入FF一个字节; H5 ]7 a% [: V4 m/ Q9 i8 T1 b

, n# N  x9 Y9 ], l    maincpu.ow@1234=4E71
" P6 c9 D( E8 Z" {- p    在ROM地址1234处, 写入4E 71两个字节
8 _! T& K7 |5 D. X
( A, Q' C8 n. V, a( T& k5 E    maincpu.od@1234=600A4E71
, j( Y$ s# w  t: w8 T! p: Q  s    在ROM地址1234处, 写入60 0A 4E 71四个字节( L- L2 T1 V- b( T$ \, i

) [4 q9 Y* t( ~& x    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
" [, O6 X+ B$ R   
+ g9 b- C, B% F- y4 d: k4 H
0 B% Y; ^) C( i3 D其他:
, c- I7 f- u* [! e& u0 Q2 }    dasm 输出档案名,地址,长度
7 r% l# V  d7 x    输出程序的反汇编代码  ~# F" n' T& E! q6 v! M) b
    例子:; d' g$ z4 `! ?% r+ z" N/ L
    dasm 01.txt,0,100000$ w" B: W+ l1 ~. U& s
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt2 t0 H+ R, f9 g0 c

8 u! O2 H, ?- ^" R6 G" J    softreset
1 \& t. \: D0 z    游戏重启, 但不重新载入ROM1 m/ f9 [" e% T7 D! e  J, E
) g2 j* N& T1 ], v' ~
    hardreset
+ X1 C2 \! D. {# t' b    游戏重启, 且重新载入ROM3 y$ L9 c" r7 x; {
5 y7 n2 l5 T% w, X
    snap xxx.png( C/ Q- w0 h, N0 ~0 u' S
    截图为xxx.png
; S; m( T8 k( y, I
9 L, I  t; L0 q1 u! V7 A; ~  
1 `2 ?' \5 c5 y5 Q: a, C  % i. U& d1 X1 u( G9 o/ R' z2 ?
  / s; n, g3 r5 g
热键:* ~! E4 o: Z- x7 R9 Y
    ~ 中断游戏4 V' }! p9 }6 y0 u8 \2 ]
    F5 运行游戏  ]5 e0 k- g) D8 B+ B) b  W
    F12 运行游戏且隐藏调试窗口' Y7 n* K! E5 U) K
    F11 步入, 单步执行, 会进入子程序
( _% B( ^1 D7 d9 w. I/ a8 K    F10 步过, 单步执行, 不会进入子程序
% d% H% U$ u' H9 S) I    Shift+F11 执行到子程序返回8 {* B4 Q/ d* _& d! c
    Ctrl+M 内存浏览窗口
5 a% S; i) i% D* ~! D; N9 b3 p    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU) D; q; n" D0 H6 b
2 u/ x( C6 r+ S: l8 Q+ w
{:4_94:}
8 |: P) N% [4 q1 [. V
# ?9 k9 y  H! a  W; M6 q

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2561 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。3 @: b: W  D. I1 y5 V+ |3 ]! e! F
2 I" f, s! {- S; W. `9 o) v5 K1 l5 r7 N
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 | 显示全部楼层
要详细些的东东& d1 R7 t8 @: \
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-6-26 19:32 , Processed in 1.078125 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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