EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
5 n3 y, a; b. P' W  T- E9 ^
很快速的整理我自己常用的指令
5 p/ R# u! v/ m+ `
4 s, L# P3 N, z' c{:4_112:}   M) d. c6 o4 F1 g1 m3 R

0 }4 p/ |0 n+ e: ]& z1 `- W0 bMAME DEBUG常用指令
8 D; a# I3 E- e* u' o# o+ e' y: H" K8 F. o0 ]
内存搜寻: ci, cn, cl
# \% X4 F" [) U) p- u) J: b
5 n5 c. c6 A1 [0 z    ci
6 V  ~9 X: t+ X3 D    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
0 g0 {" L+ {0 }% @/ F9 R# b+ U- a9 @) v. q
    cn
7 \: |4 F( ^; y  U    搜寻指令
: x+ [2 J- x+ M# {    例子:
/ V4 J! n1 T6 a0 _2 j2 ~# G    cn eq,604 X/ O3 _: [; c
    搜寻目标等于60 (十六进制)% k% ?4 E, h( P2 H  u
        
5 \, z7 B# H6 r* M9 m. _# h, ]5 J    cn eq,#96+ \' p6 x1 T# P* R
    搜寻目标等于96 (十进制)% I- F: r  u* k" M5 z

. u! m: Q4 h% G    cn eq- M& v% n$ [! Z- b/ R
    搜寻目标的数值没有变化
! y  {+ Z/ R5 ~/ U# w
8 R) R- B3 O- Y' g+ Z, l) Y+ N& O    cn ne
* ]) I* J4 ?3 X+ j) N& l/ }( i$ ~    搜寻目标的数值有变化
" A$ \) b2 ]$ _) h& Z, @4 |        9 I2 C/ S9 b# g7 P* e; q  Q+ S& j
    cn +( a. f  O, k+ V- ]
    搜寻目标的数值增加
$ E  T% p9 P0 ?+ B  A4 f5 Z  g' x   
: V2 R* \4 {( q1 z7 ~    cn -
- _5 i, M* k% w- v" t8 d9 g    搜寻目标的数值减少- ^. C8 O4 U- C. G4 V. e0 _* Y
        
$ W+ X# e, Z$ y1 n    cn +,3
+ ]# L0 \2 x9 r/ i0 }# u    搜寻目标的数值增加3 (十六进制)
( F0 P0 X0 M; ~1 f. B& w4 ?6 L$ V6 p
    cl
9 \4 x2 v8 f. i& I( C9 v    列出所有搜寻结果
, f: b- i/ K; k9 O/ ]. J% {! F; ~, f
    cl xxx.txt& B- P( t7 Z7 H) g4 T8 i* E9 \
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% Q0 V. P. c4 ?+ }% p: W
8 z4 V9 U" ]; A7 S
   
& X* l' p) s% h4 o4 C! y4 x内存监视点指令: wp, wplist, wpclear# s) k4 u1 U3 r
    例子:
7 v' H% c, m7 H; \) m5 w    wp 1234,1,r
5 P4 f) e1 [9 z0 m" K0 L% H      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度14 G8 c: D0 q5 w. {4 e5 x$ V3 Y" [

+ \, B% {$ n  m3 J  L9 @' T  Z    wp 1234,2,w) H% P0 n. R# U2 E/ y
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
8 I5 z0 f6 d; G4 S, c8 A     7 \6 D# S) p* H. Z- z
    wp 1234,6,rw% n2 X% q/ K4 i! t2 i( D
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度66 x5 v+ q1 _8 r+ A
7 r- t: U/ y* I) p1 v
    wp 23456,a,w,wpdata == 1
# J* C0 c5 F; m  m/ n      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
5 c% m1 n6 l% t2 I' [, _
& B( H+ h' x' T7 @' Z    wplist3 C5 m. ^9 B4 n/ |' q
      列出所有监视点" D! F, m& P* l' r9 b+ o
5 k3 s0 S; n8 q8 y3 P. h/ n7 p
    wpclear 3
8 R! z8 h" l! Q6 X      删除编号3的监视点
1 l' [' o" P/ [1 M9 c# a3 O3 H3 f/ h/ V
    wpclear9 _8 [0 S8 j! d! W4 ^
      删除所有监视点
9 R; b2 F2 l- r/ }3 c( Y" \& W6 L+ [2 M
      
4 ]4 o- n' a0 F9 S+ S- g  W# I1 y9 y+ u) e, z
程序断点指令: bp, bplist, bpclear
" M: C/ X$ Y2 t- y, N    例子:
3 r, n+ ~: N4 ~    bp 1234
5 }8 e/ e4 Z. D; E. |# P      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 E, o& g( V) l/ ?8 W7 Q0 w/ b5 V% ], c4 E( g# s1 u9 ^
    bp 23456,a0 == 0 && a1 == 0
3 L5 D$ `/ |$ G# v" M# K2 s5 x      在地址23456下断, 且中断条件为a0等于0以及a1等于0
! }" X5 q9 a, U# \& v# h3 y: F) D# I2 g8 j0 h5 _5 P1 b6 @" [" d
    bplist
5 h" D" |5 e6 N" o: Y* s$ \      列出所有断点
+ x8 y7 [! X2 L% v' U  o0 w8 M" C6 e# j' x' S
    bpclear 3
5 j. U- e% C# q2 P) e      删除编号3的断点
% l) K7 u! I$ }4 t+ s, g# n2 X
    bpclear
( m8 u; _8 |& V2 b$ K$ \      删除所有断点
! f: o& X0 N( C9 K' E9 `' I0 \% ]7 g% e' B8 `3 g+ F- d
      
2 r1 I& ^2 Z' D/ E      2 _4 G  }6 u+ T
跟蹤紀錄指令: trace, y9 }) |$ G& y+ q- h4 A
    例子:
2 j+ y6 h) Z2 s5 f- Y2 f    trace 01.txt' _5 _  Q, P9 P' b1 W
    跟踪当前CPU运行的所有代码, 输出至文件01.txt% u! ^0 M0 Q/ T- ^$ m1 O

% A- C. M/ _& h& Y' R. j    trace off9 L  w1 f" P; m7 J# q
    停止跟踪, 并且关闭文件
5 e9 V0 y0 R% S$ j" b( ^
$ n9 [5 D& R* V( {) E/ [    trace 01.txt,0
# J1 p( c7 S- L$ M: N, v$ B    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt  g) D5 J$ G% N5 `6 c8 Q+ V! C
2 k' f  R+ c! f0 S) Q' J' S# H0 [) p
    trace off,0
& G+ J+ m+ b" e: u    停止跟踪编号为0的CPU, 并且关闭文件6 I- d8 u+ ^  b, @* W& j- C) |
) Z! Z$ U  c' T: M% K- k1 k
    trace 01.txt,0,{tracelog "A=%02X ",a}$ D! ^5 A8 Y8 g
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ! O4 R% Y4 f/ W6 ?( B' w& u
    并且在每一行的前面, 写上"A=a "
% m' K: u( \3 O2 |4 ~% j( e/ D; W5 r    "A=%02X ",a为一个C语言printf函数常用的输出格式% C: ~" M  o9 A5 H3 `/ @# u
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
. L' X2 B0 w) z* J& I* ]3 L    X表示为大写十六进制数7 @! J/ J  C. W+ c) l
$ H4 @" Z- y7 F% U( m6 g

2 c9 P5 p# e' B( l& V" R: X! a9 L7 x) E$ v7 n3 @$ v8 {4 T
内存直接写入指令: maincpu& y% Y! e5 Z! B# y2 p) H! \$ J
    格式为 maincpu.[][]@地址=数据
3 P% w& e- J* v    第一个[]:3 w( w  C9 U' G( ^5 h6 S
    o 表示ROM地址/ g8 @  q8 \  i& K) C1 G. M
    p 表示RAM地址
. d" ?3 u% Y$ n: w/ |) W- `1 j7 B/ S8 }4 V+ L* F
    第二个[]:3 c5 u2 |: W6 h9 S* I$ G% B
    d 表示4字节
/ |% v) u9 {9 N, a5 X2 r. G( {    w 表示2字节
. m5 K& s8 t& r: I    b 表示1字节' F1 V3 W/ V# g* V+ b1 z! o  H2 V
5 o* m0 \, y2 W" P7 H$ e
    例子:
5 D7 E4 I4 G" O: p& ]4 k    maincpu.ob@1234=FF; I4 h% ]$ p" b3 g+ l
    在ROM地址1234处, 写入FF一个字节- N  Z; c" k( E! ~9 u
3 R) G% f, s4 o+ @
    maincpu.ow@1234=4E712 S; b: G9 `: a4 T$ j) n
    在ROM地址1234处, 写入4E 71两个字节
5 `4 I2 K6 c- m  A) F
+ G) |1 m3 V& r9 U    maincpu.od@1234=600A4E710 }  L7 ]. u! }' I% h  L
    在ROM地址1234处, 写入60 0A 4E 71四个字节
( R8 k5 y. n8 A; T( Z
% c2 O$ x8 b# [9 Y! D* ~  r2 C/ [, u    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
7 w# Y/ y" a! \' E6 |: K   
( Z; {8 I# q* }5 g% |
$ Y8 R. t/ R7 I) r' s其他:
4 Y+ ?: P  N3 x: ?! d* w/ W    dasm 输出档案名,地址,长度
# K. U) s7 O1 |4 {. l1 f/ T    输出程序的反汇编代码: C$ ^. E2 ^) e- ~6 P$ k" P
    例子:
# K- J. N' C6 d) S- F8 e    dasm 01.txt,0,100000
4 _6 s2 `8 z# a2 f! K9 E" I1 g    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 P8 i! u5 G' C9 W+ X1 S, M+ [" c8 b: U
    softreset3 M; d( W+ J; y/ K% @3 W
    游戏重启, 但不重新载入ROM7 d. e4 `, G/ p: {. i
- o$ \8 j1 k3 ]; R
    hardreset
$ ?9 ^, i$ x9 q! m+ w7 b    游戏重启, 且重新载入ROM- W# z$ d2 Y, C8 K" v5 m$ \
7 B4 H9 @9 a" l. X7 U4 t
    snap xxx.png% s3 V0 v1 V0 u& w' X
    截图为xxx.png
& O7 r- S5 f+ M% y& a- G7 J
, v& C7 j; }0 y2 m; K  ; b; L! P3 d- j) \4 O# g
  
* N9 O1 n6 e) a/ F5 I6 R; c; I  
' F. Y9 B4 e) F0 T! K# b) B) [热键:/ ]/ f7 a" A$ O
    ~ 中断游戏
3 W2 f' V+ d& h" N3 y( \    F5 运行游戏
0 h! R- j+ S  I, C* ?- x    F12 运行游戏且隐藏调试窗口' N2 k/ d/ ?: q  c
    F11 步入, 单步执行, 会进入子程序
  ]* y# S5 t$ U6 K# N    F10 步过, 单步执行, 不会进入子程序
$ L& {6 I# z( Y& ^: X& X+ {: G    Shift+F11 执行到子程序返回( n" o, m1 V# k: F2 v4 f3 j3 O
    Ctrl+M 内存浏览窗口3 q# S8 s2 _6 O! @' m
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU! D! a& d, N& K+ f8 c, S& [
, a8 t1 y/ d% ]! y: C: y  j! U
{:4_94:} - X: B+ J: B- y1 i

/ v4 M! w# u! y, R

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
$ [# o1 V0 n0 E$ E; l. M" d) I2 ^: R6 x  L+ O2 l0 `$ F
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 | 显示全部楼层
要详细些的东东5 J- l- _. C! S6 f# |
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-3 14:50 , Processed in 1.103515 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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