EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

( Z( s: ~4 z4 S% l$ Z很快速的整理我自己常用的指令
- F4 b' m  Y# T" p! {3 N
/ ]3 ]- y6 {# x2 Q, ~+ |  e$ ]{:4_112:} ( A& Q5 |6 ]# V! j# I* U, B: h1 w' F
! [9 a- g3 j) V" L
MAME DEBUG常用指令
- h* I! P& L7 W! e$ v. z( q5 i3 k% @1 E. j6 o  `( A9 U' B' ]
内存搜寻: ci, cn, cl; V  H. A1 F) N9 T% G4 t# O

& U. L+ x" p/ D5 ~: \    ci6 v0 Q6 c# ^) {( {2 r$ k
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* C4 T, R* ^6 y- `) V6 x' C/ D; @+ m5 g
    cn
# o; `( f: a/ Y8 }7 k    搜寻指令
& @8 I' T2 ?4 f2 w, h  N    例子:- K  D; K7 _7 i
    cn eq,60* f' r; u; K$ N/ m' A
    搜寻目标等于60 (十六进制); O( u' F! X8 ^4 E  U1 P! ?) x
        ! l: ~4 B2 ?) G8 O3 t/ k
    cn eq,#96
% Q; y" x) h- u# g: W' P    搜寻目标等于96 (十进制)
6 i4 @$ x! W+ y+ ]% z6 _8 k9 v1 Z: {5 O& u3 @) P0 `
    cn eq
8 V, d) }6 I6 ^  ], B    搜寻目标的数值没有变化9 L- }3 p* t8 q3 I! ?1 j4 e4 I
  w+ d& I( F2 }# e. J! o9 N
    cn ne" X: @! Y. b6 v4 W' c( i- R
    搜寻目标的数值有变化
* m9 q- f" n# K        , f, Q2 m- `( n0 G! H7 B. o
    cn +
$ J! `- }; Q7 M9 c    搜寻目标的数值增加' C0 P5 M% u4 ]  W3 T/ W
   
+ V5 @# }" `) ^* N' \# W    cn -
. l7 {- b- g# ?+ A( Q! e    搜寻目标的数值减少
+ a" X' @, [. F. E+ b0 J        1 N& K8 `5 J4 V0 p6 R( e/ g* C, |6 T
    cn +,3; \- q9 ^  O0 V
    搜寻目标的数值增加3 (十六进制), `( n, S; _7 z) S% i

8 t9 E9 h0 e0 N4 \2 I    cl
; [2 B0 t: Y+ d( G" E    列出所有搜寻结果
' N3 E# [6 N; u. F" V2 }# b4 U# d
    cl xxx.txt
( R3 ~- N. g. H2 }, e" a4 a    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" j( l! W# T7 E; c1 C, {
( q0 }  n7 }# X! a
   
* j) U5 I+ [/ N: ]内存监视点指令: wp, wplist, wpclear  A1 ~# e# R3 {. C9 }
    例子:( `: i7 a9 J3 Y+ [: W
    wp 1234,1,r
9 }/ E! X% k% ^* T+ R      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; X) U0 }: _# ~4 u
: M5 t2 J; A: `: f. H- F# K
    wp 1234,2,w( T7 U( Z/ E" h7 L& q- l/ e
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 ~$ J: y! W3 J& c: v     
' J# F7 ]8 t+ k3 w8 ]: ~" U    wp 1234,6,rw7 F$ e$ q& s; {+ L' j
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 @( Q: l( X! R* ]1 I7 {; D  j4 W7 t2 d  o, ^% K3 A0 h
    wp 23456,a,w,wpdata == 17 q0 s! Y4 `7 o1 E5 \
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
( H: K1 w8 p, ^5 v$ @. ^2 h
8 N/ S% ^4 @) a+ p( H    wplist
$ [' k/ d8 u- v3 @8 B6 {4 }      列出所有监视点/ R0 \  j& [& N
- ^# V4 N3 m" C0 O
    wpclear 3( d. P+ t- V, k9 v- p4 [
      删除编号3的监视点# Y  g' U' F; J
2 q: D  B+ r. o$ C, R2 b
    wpclear; g1 o2 u* o: S. Z' F
      删除所有监视点
0 ^! h  ~( x+ h1 _/ F) }: D, c0 h
8 R5 a( ], L, s+ z+ s" l# {      ) u0 \# B& T4 P, T1 _

7 H3 s6 W: D: R# P6 Y程序断点指令: bp, bplist, bpclear
* {3 o# t  f; ?, }- N    例子:- s1 \& j+ i( _- |
    bp 1234' V3 [0 m8 \$ c/ ~
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断5 ~% q2 D2 _8 ^) c! i

" V- T% G7 R3 L* u% G$ c* r    bp 23456,a0 == 0 && a1 == 0
. }. \* g2 P: u7 i8 d- T( H6 P      在地址23456下断, 且中断条件为a0等于0以及a1等于0- t" b# u3 I  c7 J
) l5 H: T! {1 A* W6 a1 _0 ?, g
    bplist( b* V% V5 s' P% Y0 z# X
      列出所有断点
% c. c# {6 U9 t" z" E* q5 p4 z+ S( o) z7 \9 N/ T# f0 j8 {
    bpclear 3
& o0 a1 N) K; u* k9 Q# m. s8 u      删除编号3的断点/ X, h7 K9 C+ ~) x9 K; i5 c
2 |1 m. a& _6 g4 ?
    bpclear
& d6 S4 @: g) W+ W& q- r+ t      删除所有断点
4 l' B9 A4 q, q5 J3 t; o0 L9 x- S( [. Q7 E/ c- f; j
      6 @' P: m! U* q/ O; K- T) a/ |
      : a# \1 V3 D1 y
跟蹤紀錄指令: trace& u( ^: k- I' g' U8 k% h" h5 g
    例子:
, s, k7 f7 s. [3 L, x: ~/ O    trace 01.txt& I; J  v  c3 P2 G2 u
    跟踪当前CPU运行的所有代码, 输出至文件01.txt1 X: |: ?9 _: z. l4 J3 i4 J9 P
6 V/ F3 e4 W6 J! |
    trace off
# M. m9 K* v& L$ F+ ~2 g    停止跟踪, 并且关闭文件7 m. y& U, {# W. A; x+ X
; E; K  u; I7 V* g0 K# l
    trace 01.txt,0
" L6 G/ S" T* l7 e  O, B    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( k# w" Q' g* x- h6 O
. v, t+ W2 A8 V/ b( F    trace off,0
; o  `; L) w* \* C    停止跟踪编号为0的CPU, 并且关闭文件$ J& P) t4 e4 v& Y6 I' q  B( `+ l
$ v: c) R7 a6 @' c4 X& ?
    trace 01.txt,0,{tracelog "A=%02X ",a}
; \: V* Y: D' l, l% t    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& \* K4 q9 ^; j: Z/ f    并且在每一行的前面, 写上"A=a "* J: ~# P- ?9 A& ^
    "A=%02X ",a为一个C语言printf函数常用的输出格式
/ e7 d9 P/ w# ]    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
; b+ I! Z* m. R* d# F" l  c    X表示为大写十六进制数
  |9 p+ g+ m; r9 M' b- ^6 M' \/ u0 C  K: }1 ]  f
7 `1 H7 b2 Q- w  N0 F+ A

# T4 R! B' A" n' [# P内存直接写入指令: maincpu
" l  c: c; y4 D$ X7 |( @( a+ t. t    格式为 maincpu.[][]@地址=数据+ K# u; ^' ^2 N( T, f; m. y6 ^
    第一个[]:
2 R* Q2 d) c/ ?    o 表示ROM地址: J" q6 c0 f) ]8 a+ I5 d+ c
    p 表示RAM地址
* V0 V3 W  `: I4 ~2 J2 D) Y
0 T. \1 R: y% H5 y/ V5 g; m  C$ h) C    第二个[]:
5 ^6 T: x4 e) W. z* }  ?    d 表示4字节
: t! _/ N* s4 X4 v" R- p, z. E    w 表示2字节
9 T- s  X  s2 ]. `+ E$ |9 ^. T# X    b 表示1字节
3 p  z* q3 C0 p; S+ J# E' e( M4 E' e+ r  _5 g" `4 d- L; ?% y# I
    例子:8 U: W/ M/ [5 q: F' _) i( l6 c
    maincpu.ob@1234=FF
( ~8 p" o% f, P- U7 e    在ROM地址1234处, 写入FF一个字节
: n3 N! q1 W) X% r. a0 f
  X  P) o* J& D' @* O$ n! g' Z    maincpu.ow@1234=4E711 R/ I& s4 {3 p5 K) k, t
    在ROM地址1234处, 写入4E 71两个字节8 A/ @- E" o& T! r4 j+ U; E7 V
( b: O: y7 V) L+ }
    maincpu.od@1234=600A4E71
) g7 R7 E: B6 a2 f    在ROM地址1234处, 写入60 0A 4E 71四个字节
$ m: N' u& u8 N& }7 [4 \& {2 f- H% Y, Z& t4 c: q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 M, |$ M5 V, L& L( t9 R   
5 y/ P" u" p' ]2 F& A0 e1 S$ f- {  Z% ~
其他:
! t- ^3 o- t& `, L7 t5 ?    dasm 输出档案名,地址,长度4 r- z3 n0 ?2 E: D# v& d. q5 L) A# R
    输出程序的反汇编代码: I: V4 z4 H/ b- W. n' m: s  w$ F
    例子:
9 u6 R: r" @$ j( ~/ y/ ~) J  e) O8 a3 j    dasm 01.txt,0,100000
. r$ s5 P* w- m; Z* H' F( S8 a  s5 a    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 M7 w: ?7 O, ~: ?6 |
% [7 @$ _/ E6 @  N/ O
    softreset
1 Y7 h3 d7 t& u8 S    游戏重启, 但不重新载入ROM
) R- Y% b+ S; s9 c+ ?  }, G* K: ^9 ]3 g9 x
    hardreset
- x' [7 l( k0 Y/ h  @. Q% L% n    游戏重启, 且重新载入ROM# c; \: X0 z# B2 [! I2 p; D: O

5 Z. d: f6 t2 P$ G- V    snap xxx.png
. k8 l0 O/ g0 f' c, L! ?( s  x    截图为xxx.png
8 l% ^1 k2 j! L( {$ P- k
/ |6 d3 l% k6 @. v4 |  f- N, t1 e$ D* k2 S  ' r$ i: e1 n8 G. f4 R
  6 j4 k& M$ t! G5 @$ h
  $ Y: o! f% R  K
热键:
; T# l, `/ ~0 L7 o9 A4 B4 h- }" O& t- Y    ~ 中断游戏& S/ ]/ B: O/ s& K9 c! n
    F5 运行游戏# m' d: P* A' H' C% D" t+ l
    F12 运行游戏且隐藏调试窗口! H" I; _3 q* O* ~7 T. d
    F11 步入, 单步执行, 会进入子程序9 X/ J0 j4 e0 p( L0 T' q; U( F; c
    F10 步过, 单步执行, 不会进入子程序# H* a, c0 ]1 _, Q/ T; ^6 K
    Shift+F11 执行到子程序返回
$ R3 R5 ^# A7 v) [$ B7 C    Ctrl+M 内存浏览窗口
' y3 h: Y  T8 D( n    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 x( B- @5 ^& r" q, v* b
% }7 V& E6 `0 l' e% Y. S5 _1 y, k{:4_94:} 8 _3 x) x9 ]. I) a

: z% q. o' O: K& d' S5 n

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
1 e1 V+ c# K# g6 s, I* L3 ?6 ~, B* g$ W  y- {, i8 x: z
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 | 显示全部楼层
要详细些的东东
( D, y3 m. m- B2 ~4 H3 l11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-8 01:32 , Processed in 1.079102 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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