EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

( |2 a8 n# y% A  f6 o" p3 Z+ ]很快速的整理我自己常用的指令
, h. ]8 s" h3 o
+ h) Z0 n/ R% L/ t7 Y* o- ]{:4_112:} 8 Y! V/ g% T1 L1 k0 f
! {4 T- T5 t4 |/ t+ x
MAME DEBUG常用指令
2 X$ e6 B. h  q$ ]& I* u0 b' G! n/ q& m  R; ^
内存搜寻: ci, cn, cl
* R. ]* N6 m( ?" [4 k
) J+ V4 J# l* G2 n& P3 m- [* ^    ci
1 h  R, z& ?2 r    搜寻任务初始化, 每次搜寻一开始一定要输入这指令+ C' c9 ^7 N& p: {/ Y! S3 W1 Z
6 N# v* c. u7 u+ ^5 R
    cn
- O- T. h9 x" v* d! X    搜寻指令
, x: S% z" L' O1 o3 T; v7 t1 _3 i    例子:
6 W: r6 Q5 x/ C8 e2 H, Q    cn eq,60
# G+ z9 X3 J" S, t    搜寻目标等于60 (十六进制)
0 V* M6 `3 x9 t! h* K        7 M+ ?) A: U- J2 a) N% h; @& ?2 g/ `! G! j
    cn eq,#96. x( [5 o* P% D6 U
    搜寻目标等于96 (十进制)
: R: [8 D% P6 M
% x; \+ i1 `7 L+ @    cn eq
  m0 u( Q/ c- j* h$ _* A    搜寻目标的数值没有变化8 L8 q8 J4 b8 ^! {6 d
) e8 j  a7 d( d* ?3 `" k( {2 e
    cn ne
* u* V' O0 e! {% Z0 f% }$ t# `7 ?    搜寻目标的数值有变化
( e, I: X' g9 ?! g+ B# \" m        ' ]+ ?, A9 E& t' M% n( g! Q
    cn +" U+ ?; a. O; k8 g
    搜寻目标的数值增加
  J* ]7 ~6 `" c    7 z5 Z8 _  {7 N5 G4 K
    cn -
: L7 p/ s5 p8 X' m* @    搜寻目标的数值减少
1 T5 I% G& V9 q0 S5 J        
3 X' i7 {$ _& F$ m* k    cn +,3* w/ i8 ]! S; f4 }6 T2 B
    搜寻目标的数值增加3 (十六进制)5 n9 J* Q) R0 R; k2 I

+ C- ]; ~% @* m) {; b    cl; [. `4 [. V! F9 P, P) C( Y
    列出所有搜寻结果, J3 Y7 B  p: P' J( u- z9 f0 q2 v+ g: A

+ e* I" ^" R" v) D' V9 q    cl xxx.txt7 G) J- p& m) \- L5 P
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
! U4 ^6 N: K8 o* i  \" t
9 O* P' M# b7 [: o   
# y8 k* q7 I0 g: X& d9 q内存监视点指令: wp, wplist, wpclear
! B4 |( s2 y6 I+ W8 N    例子:& b! @. {/ v% L4 k
    wp 1234,1,r! g8 w9 n; L1 \  P! A: @
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: X) {' H3 n2 b& y- {/ E0 u) {4 y7 s$ ?7 }
    wp 1234,2,w$ ?" F2 Q0 K7 Z' h! R& s: s& m6 W
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( v. w+ v" H( y6 a; v7 X     & h5 E0 k( a( m4 W4 B3 a" j% c1 w
    wp 1234,6,rw9 \5 Q& p. g8 n* g
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6: Q6 ^3 ]" ?' B2 a: d
" }1 e: x) r% t8 |, C
    wp 23456,a,w,wpdata == 1
! `9 ?$ V% o' _3 u      在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 i  Y8 i3 T8 t" Q- c+ R: v

; q. e# Z8 Q$ i. b( S    wplist9 I7 A* Z" R+ ]" Z; v
      列出所有监视点+ }  ]( V7 E' a2 U) b( ^
" M$ h) w* A9 d9 I5 \- p' A
    wpclear 3
3 c8 h5 y: U% s! [4 K2 {, |      删除编号3的监视点. r) N7 `- a% A  i6 x, k# U% V9 \" d

; v3 m2 w4 c6 L' \6 z7 k* m    wpclear
, _- r2 `; n, j$ M' h2 z; q$ M8 n      删除所有监视点
/ y. H! T: L$ d" s9 u* c2 o: ?+ }' e- Y$ D: D
      
' M6 t& B3 D" Q5 X
% l% z, [& m% `" {# ^; {程序断点指令: bp, bplist, bpclear
0 G0 }0 j: Z# S, S    例子:! s1 |% F" G* P& L8 Y5 [* Z- X( P
    bp 12344 [7 t% V/ x, `: b1 ^* q/ D
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断' S: ^; U) x" T/ h; n

) D3 o; g0 l' z) [5 @% I- A( T) n    bp 23456,a0 == 0 && a1 == 0
6 p- x5 J) ?/ A6 E: N      在地址23456下断, 且中断条件为a0等于0以及a1等于0
2 h0 e. v+ N3 H4 {) I' m7 t. T+ Q1 r( t3 Z. E* v! s" R! B# ~& U
    bplist" q) e* C! p8 g
      列出所有断点) d7 L! k0 Y8 J. w4 q

6 h4 f$ {- u9 T6 W! n    bpclear 3
, ]" {1 w* G( `      删除编号3的断点1 f, w2 P$ N* E# K' a( f
& m$ r# t4 T" x/ a1 j( `' B2 p- D
    bpclear1 X# [( W9 \  ~. ]  T
      删除所有断点
/ J" T, K# O5 y. M9 ~
! \0 f; n2 z# ]1 v. w      5 t8 I& U' D  Z
      ) Z* _+ {8 |1 d  \
跟蹤紀錄指令: trace
6 H) n8 h/ h* f1 R$ ^+ R, J    例子:- \6 O  H; r1 R; m
    trace 01.txt
0 c9 h( s- u5 `8 Z) R6 l    跟踪当前CPU运行的所有代码, 输出至文件01.txt9 x: I; p5 W) O# A+ f: l# [, k

9 V, I! V1 R( g" T% U    trace off
  i/ N( Q# [* T; B8 Q2 W* C    停止跟踪, 并且关闭文件4 D3 r, W) m7 ~! U
/ [+ y% C* s# @6 v( s9 h
    trace 01.txt,0
* T! Z' n9 M* i" m- ~: W: s+ @    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! I. ?' J; d0 L+ [( O. b! [4 @4 n; e1 I" f0 }3 B4 ]8 X
    trace off,0
: }7 u& n5 f7 }# K: c) n    停止跟踪编号为0的CPU, 并且关闭文件
/ i9 S- g! Y7 K; Q+ c4 W3 g9 E. e5 S  G5 P* c' @( Y8 c
    trace 01.txt,0,{tracelog "A=%02X ",a}% |6 H; {, i/ f! e) e/ O
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , G8 y9 b1 {6 e: N8 c3 d" k
    并且在每一行的前面, 写上"A=a "  U$ b9 T5 i: b$ E
    "A=%02X ",a为一个C语言printf函数常用的输出格式" k" Q. _: J0 W( z8 m& {' q
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ \, i% m: b2 h4 }+ L" y    X表示为大写十六进制数2 m2 W, L) r0 W" t

# R+ f" Z# q% H, \* o8 ]! \2 P4 d  y* \& P- B9 Q
9 y1 I$ l  Q  g2 i6 g
内存直接写入指令: maincpu
* p) K% k% F. S' J! O+ i    格式为 maincpu.[][]@地址=数据
3 f% L7 ?' t+ y    第一个[]:) T3 t" R- [4 k' J
    o 表示ROM地址5 ?$ F% a, o+ w) h) M4 F: I* Z
    p 表示RAM地址+ L$ k$ j+ P, I

1 @6 A! w- `+ r4 |    第二个[]:
4 {+ S# ~* o+ b2 Z, L3 \+ q    d 表示4字节7 M- M+ K9 V4 i, l
    w 表示2字节* L  u/ s0 y4 j- u9 y, P7 R. _4 Z
    b 表示1字节0 A' p6 S' ~7 w/ D
& J/ y  M" [, U# D4 z" A
    例子:' d, Y) n+ {4 r
    maincpu.ob@1234=FF2 u9 [) @  W" f
    在ROM地址1234处, 写入FF一个字节" Q; z" s9 T7 a) ^0 ^

- I1 n4 T* \" u2 Z- M    maincpu.ow@1234=4E716 t& f& f6 r5 H
    在ROM地址1234处, 写入4E 71两个字节
- E6 g7 @6 j1 @1 ^+ U$ ]
' Y, o& I; |/ ~    maincpu.od@1234=600A4E71- `; w: M6 C. g7 t# p
    在ROM地址1234处, 写入60 0A 4E 71四个字节2 i. }/ r" c6 K+ ?) s% C
/ y0 m! P( R, p! N, K# V
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
/ q. W, g8 G$ ?$ _    4 P! D1 C. }4 T. D
8 k- o% X. w' _0 X- i
其他:0 g2 |) C6 }% A6 L' o( i
    dasm 输出档案名,地址,长度: G2 X9 c7 f- \4 {. [8 V/ \
    输出程序的反汇编代码3 G  n5 e6 R6 u/ ^9 [7 {, k
    例子:
' F7 M1 |. H! f' U0 d    dasm 01.txt,0,100000: w8 a9 ~# i, o) X, K4 p
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! Z+ }& C9 U6 R/ d  M: O
, [5 K8 x* S  t6 F# s    softreset
, b# j5 i  @& {) i  b5 _+ u( q    游戏重启, 但不重新载入ROM
- |# }* C+ k- I3 \5 F9 F- ^$ F4 }0 p. l: ?& M0 b
    hardreset
+ G$ `8 X3 |; ~& b; W% M7 w( y    游戏重启, 且重新载入ROM
7 M) m( Q3 v) g4 F5 l9 g" c* T/ U6 n, s* w. Q( L" X5 Y& Q
    snap xxx.png/ Y" g- [' E9 C2 _
    截图为xxx.png9 u' I% d0 M& y& f
2 T, ?/ Z) d! @1 R9 f
  ) Q0 c' l, |  K4 D8 o, E1 y2 c9 x
  
7 C; B  \: i1 E, V# J+ I! n  
1 P* x8 I9 P; M1 r热键:3 k0 z; F: t0 |( q0 W$ J
    ~ 中断游戏! J4 n" a. Z0 J3 [/ S7 V
    F5 运行游戏% p1 b/ ~# G* l# H, `8 O2 V7 y3 O
    F12 运行游戏且隐藏调试窗口) d4 p3 `) R6 a& j* m3 `" b
    F11 步入, 单步执行, 会进入子程序" {/ N/ E" X2 X- M- @- K
    F10 步过, 单步执行, 不会进入子程序
: k) t" h# O% _) C    Shift+F11 执行到子程序返回+ }2 f6 n: {9 t- Z- G. F1 h
    Ctrl+M 内存浏览窗口7 f) N4 l* c( N  b+ A8 H0 J
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU7 i. u3 S6 l$ ?5 f5 E) U  `
8 u, I# ?8 n8 I* q  }! R
{:4_94:} 1 i/ O8 e& V" b. D; ?
8 L: n' x- N  d, l" }

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。( G! M7 t: m# D  ]  ~

: U! s& M, V6 UPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东% N: S, t* @3 l% M. h
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-31 21:02 , Processed in 1.071289 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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