EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
& |% U9 x0 E/ p+ v- G/ g( g
很快速的整理我自己常用的指令
9 n* ~! h" E: {8 K% }. K& S
! E; x7 |+ {9 g{:4_112:}
  r. ^* m+ o/ f5 P5 U
5 p0 f# _3 k# O( RMAME DEBUG常用指令% h) I( _: f! }( k" F0 y
# p4 b1 e1 f# J2 q+ F: |7 \2 y1 Q
内存搜寻: ci, cn, cl- Q( b4 @& M; }2 e, E0 m

) R  b% r2 U; F+ l& j* Z    ci
& R% l  Z( y0 r1 `- m8 O    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
- X- n8 S2 P! r" i  B" N
( ~; D4 w5 m, P/ a& y8 _: J& H' ]    cn* B3 i. ?! x; r1 D# I5 i
    搜寻指令
2 l, \% ]5 v9 i7 [) ^* S% b    例子:! x5 T" N* i( G; w, v7 y
    cn eq,60
: e4 P* ]% r% o- {. ^' h0 P    搜寻目标等于60 (十六进制)
' p$ u6 I6 n2 l8 c( Z        
: a+ Y2 \+ O6 }( o. ?" M    cn eq,#96
1 g2 u2 w6 S! d3 N' G- \! O    搜寻目标等于96 (十进制)
' r1 s2 R$ Q( L8 P
3 C1 s8 {2 {& Y    cn eq2 Q5 Q) U7 m* B& Q5 G- [$ b/ p
    搜寻目标的数值没有变化
9 a  F$ p5 E7 I( e$ o& _
- p2 n: m3 F) J    cn ne
, j" o* b" O' l, k& i) Q    搜寻目标的数值有变化
# x# |1 Y1 D' A4 _9 b        
2 |, D1 @" r( @7 I6 t1 e4 c' b    cn +* r$ V! p1 U* C" Y# G# ~# j+ U% S
    搜寻目标的数值增加
0 {  b( }, R' U   
0 Z+ }- i3 E+ g' O    cn -
( [! p5 f4 O: b& D* _8 G7 U    搜寻目标的数值减少
& Y2 Q5 P- C) K2 e6 S- d        # z2 A7 r5 l/ H1 @! Y7 L& R
    cn +,3
8 i6 g' R4 \! V9 O( \5 D, `$ e    搜寻目标的数值增加3 (十六进制)
) E( ^$ {' b- y, N
; x: Z% ^9 m9 H2 \* h5 N# Y3 l    cl# K1 O% p7 }& Z, u9 D1 f$ d3 M; C
    列出所有搜寻结果
+ i; R7 n+ K$ @; k' `( n/ [" i9 @5 Y3 x; t( E7 T
    cl xxx.txt2 Y9 Y6 i. w$ C8 F- q
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% p2 d+ N/ v! g- Z8 L

- M( g4 j. r8 p, _5 T    2 j! p: C1 e7 u, g6 W
内存监视点指令: wp, wplist, wpclear
$ k# X6 @+ O. D! p$ f    例子:
* }9 G% P. R$ N    wp 1234,1,r5 \; |2 @  N$ z2 v& l$ p
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
4 X) R: y% t- \! }. t" R" O8 |0 U/ Q0 ^) t
    wp 1234,2,w
" G' S! M9 e1 h' h; m  ~+ M      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 G7 o; D4 H, F+ C4 {  A5 r& A! A8 O
     
( T# E+ \9 K" l+ O7 h    wp 1234,6,rw
. N3 W; l# j+ _! [; k      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 g, C$ j. p) q+ l% f5 M/ v
3 c' q- P7 r; i# |) y    wp 23456,a,w,wpdata == 1
$ }0 l' h- K+ k, Q4 l9 G      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1+ d/ Y8 j& H0 B! a0 u$ A' m

! s8 C# v: g7 M9 W) H, z6 z    wplist2 R  a7 }1 n6 X
      列出所有监视点5 q4 u$ q% Z" q1 V7 `3 C
1 P6 J8 p# G% L% V- R' P2 g9 S
    wpclear 3$ G- w+ l9 W) F
      删除编号3的监视点! e9 N, z) T1 O" I+ z
" Q. \# H& ~6 A$ u5 j
    wpclear
  x0 @: H: m$ R: ~* L" Z      删除所有监视点
* u" j) [) i9 Q9 `
; Z( r' o. c% i$ U/ {& U% D      
% t# b/ t, |3 H
9 ~6 P" @7 w' h2 {; s/ x* z程序断点指令: bp, bplist, bpclear! m( J: }4 r" z, s! s1 K% M- w
    例子:% o2 h4 Z$ e6 c: R. q
    bp 1234
, S# y; L/ x, l- |! f4 c; B      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
; [  m; ?8 ^- m4 B* m. I. y
2 Q2 j* @6 h! n9 u' p4 o, y    bp 23456,a0 == 0 && a1 == 0$ ]- K6 @$ |+ E) E! v
      在地址23456下断, 且中断条件为a0等于0以及a1等于05 n1 k# }. [# h7 w& }

4 }# h' f( }3 k; P9 K    bplist) g5 N2 f% d; ~* [1 s
      列出所有断点
1 M/ A3 g+ J, G/ S/ }) h: n1 t& D. \3 H! f, P# s- b! Z+ d: R
    bpclear 3; n. V* l, N: Q
      删除编号3的断点
3 u: ^! U1 i4 N) t/ n) }' T. x2 u. c2 H) {! @" ~' C
    bpclear+ d7 v0 U" ^( I! D* l
      删除所有断点
0 l; Z* s* t' o6 Q: g4 ]( ]& l5 M8 M+ x) D4 k$ i
      ! n# p/ U! J" I$ }7 K
      6 p6 ~$ G# T4 h7 m6 F* Y: D' i( F1 z" R% ^
跟蹤紀錄指令: trace
! t3 M0 B+ L# m5 v    例子:6 Y& n9 D8 Q8 m* h
    trace 01.txt* f$ Y* A' J! K9 X1 H! D- e# Z( p2 {; u
    跟踪当前CPU运行的所有代码, 输出至文件01.txt& E6 X) J2 g3 r$ m2 R4 k

" T( ]' i+ T; c" ~2 }    trace off
0 B6 _3 `( H  S. \! Q5 j    停止跟踪, 并且关闭文件" Q9 ^1 S3 j. a6 P% g+ ~

. n" M( c( q% a2 c% ?3 N3 q    trace 01.txt,0
/ {1 x0 E( J3 w% E' |2 o: H6 ?    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt: }, {$ [/ Y" e6 C( s7 a) {

' x0 T# Y* {& O2 s$ I    trace off,0( E# ~- U! ]3 I; m2 h. _
    停止跟踪编号为0的CPU, 并且关闭文件
- {9 u: F  x* [* `
& R6 s4 V+ e# I; |/ r; ?    trace 01.txt,0,{tracelog "A=%02X ",a}
& L( b! _8 O# V; O    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 {$ t. G2 Q5 [( }8 c1 e    并且在每一行的前面, 写上"A=a "/ h+ x- C8 o7 P5 s. v
    "A=%02X ",a为一个C语言printf函数常用的输出格式; i4 k7 H& _9 P: G8 h0 j
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入! ^/ n7 a* D" ?0 |5 y3 u" j
    X表示为大写十六进制数) C/ j8 _0 }% B. F5 T+ ^2 W0 r# w

4 F; u3 I1 ]7 B- Y9 r% r3 [' \% i8 N: F, I, x$ K) {3 d6 w% }. u
- d3 z: V, |: V- t+ T3 z
内存直接写入指令: maincpu
: e/ O5 W7 o+ R$ L$ B, K    格式为 maincpu.[][]@地址=数据5 F! v1 B4 i  n, z5 ]  W
    第一个[]:0 A  W1 {& g# N+ `) W& w
    o 表示ROM地址9 {( Q6 g8 }8 s) o. t4 Q' }  X
    p 表示RAM地址% F7 m. Q9 Z5 l0 z
1 v: K5 h6 K2 z7 e/ X9 }$ n) G7 N
    第二个[]:+ l8 [: d* x. W# l  A$ q) l/ G
    d 表示4字节
0 A  i6 j  \7 V! Y6 D2 j% _; S: y    w 表示2字节3 T* i% j  T- a" ^$ V' q
    b 表示1字节
9 L! K0 R5 K7 P$ o2 S8 B! S8 }$ j8 h+ H1 N2 v
    例子:+ ~  Y9 I7 b7 v( P7 f& `
    maincpu.ob@1234=FF5 `* w, F0 r6 S2 a( R& L. M5 i; Q, i; `
    在ROM地址1234处, 写入FF一个字节
* z% C' v+ k2 G6 A% v1 m7 ^1 `1 G' ?
    maincpu.ow@1234=4E71% h/ _- [) H, Y' v- j8 Y
    在ROM地址1234处, 写入4E 71两个字节
0 Y6 C! H9 f5 c' W$ q  `5 g8 @  d% p! q
    maincpu.od@1234=600A4E71! E% u+ R3 C, Q$ f
    在ROM地址1234处, 写入60 0A 4E 71四个字节9 R+ q+ e. K* V

' R: E+ ?& f5 R) w% v  E    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
1 h8 e- l7 U/ p   
4 x' s3 \( N: l3 H5 K7 g) L( C7 {9 C% @& O7 `' O
其他:
* c' j" z+ ]7 F1 A, Q; Q! r8 k    dasm 输出档案名,地址,长度' V- L5 _! i5 ], W3 ^
    输出程序的反汇编代码+ Y% [9 y' @5 [
    例子:
0 J6 k5 k+ f2 Y6 k! K% k    dasm 01.txt,0,100000# C8 o8 _' d" B9 t% B4 m4 ?3 x
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; i5 c3 g+ `+ c% {5 ?9 x3 E

. G5 A& |; ~5 s2 \* \9 W0 \5 K+ I: b    softreset9 [( `) n( W- L- C  B1 ?# z0 w9 W" s
    游戏重启, 但不重新载入ROM
1 P3 L% f/ u$ y, e" }6 G
/ ]& e" X3 \0 i$ n    hardreset5 P" k2 z/ s/ u5 U. U/ h
    游戏重启, 且重新载入ROM
3 F! L5 i2 U+ Y/ \% J; L7 s7 q
9 U# {9 L/ |" H/ E) M3 s+ ?    snap xxx.png
6 p+ B2 _, v( a+ f, L8 C  u; e    截图为xxx.png
6 R: p+ e6 G# U4 f& N6 A" v+ B3 P  M, z0 T# m
  7 T0 \/ N) c0 z% L7 k
  
$ J- j  T/ w- {: J6 m# v1 o    e: v* v, B, [7 u8 F5 u( D( \3 G/ C
热键:
* Y- i+ Y  g9 Q& x( S    ~ 中断游戏$ B/ R' L" z* q% t% g
    F5 运行游戏
, h/ i  Q) c" b, ]3 b    F12 运行游戏且隐藏调试窗口6 J! L, Y& o+ ^9 r$ N! k
    F11 步入, 单步执行, 会进入子程序
2 c' @8 Y+ A! x+ m# [* |8 D    F10 步过, 单步执行, 不会进入子程序
' S8 b. y( O1 J- s. V    Shift+F11 执行到子程序返回6 V8 x! Q; c  \$ h
    Ctrl+M 内存浏览窗口
% u- [, U& B1 i0 g: ]; k- l    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU) ]( ]* N$ }3 \  g" b; {! |: ~/ D
7 d4 B; t+ U! E, |
{:4_94:} ! F  J6 _. F# B( n3 a* u) P4 l

5 k; _2 \" ]5 Y* M& |* T% l

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2561 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
+ `7 _/ c$ O" e  @
% t+ M$ P. m& }$ o% X# FPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 Q" E, W$ x# Q, l11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-6-26 23:42 , Processed in 1.092773 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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