EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
& q5 [5 G3 C( v
很快速的整理我自己常用的指令
4 ?. T: |2 _, V+ q2 D; d2 R9 l% f& b6 h* S/ ^7 R) t$ E; N
{:4_112:} 8 y6 B" j$ h% Y* H- m" c
7 w1 |! |7 |; w1 d: Y
MAME DEBUG常用指令2 \. T5 n. Q/ g, s- H. h5 Z9 s
5 g7 s6 a) w: P* N& T% l; P
内存搜寻: ci, cn, cl8 A6 [! b. A" s* N
+ G4 S' t; I5 w' U% D# l( {
    ci0 b* Y' k6 F% y' {3 h
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 r1 e- R: \5 m7 @
1 y# i; m6 B1 A% Z+ c/ Z1 L: Q/ Y
    cn
7 {( ?3 n$ F% w7 N    搜寻指令# b* }& _" Y# V- U. m$ T5 T
    例子:
$ k& j6 D: x5 d0 M9 q5 q3 B1 r    cn eq,60& V, P; S8 R& d
    搜寻目标等于60 (十六进制)
; |, O  E! ?. b# R" {9 @        + c6 `. w0 y; |3 c$ \: t6 Q/ T
    cn eq,#96
+ d- W$ t7 r4 g% m. C0 j6 a    搜寻目标等于96 (十进制); ]6 K) v: E& J

7 x( z& d) E& j) S    cn eq, B( g# h. S, |3 s2 E) E  {' t$ D) M
    搜寻目标的数值没有变化0 N8 [% x- \1 z8 a/ |; f

9 F" |/ @# L0 ^1 g  G0 N    cn ne
4 J7 M. R+ K' C5 [+ Z: p$ @    搜寻目标的数值有变化
* {: W; v- ~7 ?0 G; J( c8 v1 Z        
2 S8 Y: @/ ~# o  g& e    cn +# E4 n/ m" V* a
    搜寻目标的数值增加, a  b5 L' O9 ^' t, F# ~, R
   
$ C: R! |1 V, r" |    cn -
; \, y# z( a9 C# h, K. z: p4 ~    搜寻目标的数值减少
' d( {  }& p' s' \. _        & a3 c: }/ W- }. y. b( E! j
    cn +,3
; C& K0 o; \* H# d$ n- m' L    搜寻目标的数值增加3 (十六进制)
8 b  q+ b; D5 j; A& w
: C5 ~7 Q! f; A) k7 t    cl' n2 _' M7 k; b
    列出所有搜寻结果
/ v( C, k$ r0 C$ i. W7 C( A
$ V, e& h# e$ t' K    cl xxx.txt, [; ~8 M% D: ~' y! N
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
: f- h* b+ f, g, R& ]3 Z  E- _5 C8 c# p* x* `: |$ U
    $ ~* M/ F# i5 J
内存监视点指令: wp, wplist, wpclear- K. p  x4 H, o# m: D7 J
    例子:
2 d, Y) g4 G4 W  v$ @+ {2 P    wp 1234,1,r
, H7 ^; ]& c( f! ~' P" c      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. p& S- \: n' S9 V/ P
' m7 ]7 K1 m/ |
    wp 1234,2,w- J4 W6 R" A6 l; j, k
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 u0 Z2 ~* a/ L9 |% v! A     1 C+ I% W' Z* X( A6 z
    wp 1234,6,rw/ Q5 m5 R$ \6 o  `; w
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
1 e3 V: a" Z6 O8 S1 k
" ~6 O8 E, O0 Y    wp 23456,a,w,wpdata == 1
( h$ v6 {' t& ?, Q      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ o3 s. I/ }# Y

' ?$ i% w4 O1 f    wplist- I/ g" t. Q: c" p
      列出所有监视点$ s1 S; J6 j# d7 c( N5 O0 f

- L: F: ]2 d/ G4 [1 n    wpclear 3
& d9 u: L' m. h      删除编号3的监视点
. X, g/ B2 q; W! v- m- d' C. F' [' x( l- m* u# N
    wpclear2 H6 Q5 [$ O1 z; @' a9 ^
      删除所有监视点9 T3 _2 h$ b) q7 p) |0 P! ?3 Y# u

, L% Y- p& V% A0 \* o* K      
  l9 c. W& t, T) ~1 |' ?* A$ e. K6 i! T3 z! {; O
程序断点指令: bp, bplist, bpclear
4 C1 B2 l7 E5 a8 q    例子:
2 T+ f9 I# I( F8 Q    bp 1234& F! ~& P# ^0 j; m
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ {) ?5 @. i4 ~  z* Z1 r( ?6 C2 g- Q5 V

- y3 h( a  O. c0 a    bp 23456,a0 == 0 && a1 == 0
3 j1 q$ X4 |& C      在地址23456下断, 且中断条件为a0等于0以及a1等于0" Z0 s3 ~3 t" q1 S( x
1 S! B# Z; T) w* S' Y$ t' z
    bplist
& q) j0 Y) h# z/ @3 C+ f. a      列出所有断点
# L' S0 n! R+ Q9 \9 o* n. R, i& i
4 b: n% C3 q  e# @9 W/ g7 C* S    bpclear 3. r9 G& V9 C) E# |$ I
      删除编号3的断点
5 k7 y/ T: ~& e/ R9 Y+ d* C- u- v* k- J& |( x4 W' S
    bpclear; h  F8 a) D. V! B' W3 g1 ^/ U
      删除所有断点
0 u8 W4 u/ E% [5 a, x& b* c3 Q; k& i% T) J4 V
      
  V% s. o4 {  K* Q( z5 L3 `; R+ o      
, H& H5 J5 {/ I2 W, H( `跟蹤紀錄指令: trace7 t0 v/ S9 k4 ]: U: |# [6 D4 l
    例子:
# y: ?# P4 N/ }. [) O, D; b! F    trace 01.txt, v9 e+ r9 ^0 H3 n+ }5 v2 S- H
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
: z, R* q3 z/ {" M9 K/ }$ v$ b: z" b- x! n1 }$ O/ E0 w/ I" c4 y
    trace off
& D6 G. u! O8 N    停止跟踪, 并且关闭文件
; Y% ?/ Q) F) u& A4 ~% n  U8 n5 f2 T+ U
    trace 01.txt,0
6 K, f, \/ ^! t! Z! I    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! y+ \! v) q$ b& O% J8 i$ ^, `3 k* t  ]+ K/ ~0 I# }
    trace off,00 X* q* ^; m7 V' n& w
    停止跟踪编号为0的CPU, 并且关闭文件0 I  Y. G9 Z" V% W/ u  U! w8 T1 I

5 y% _3 q( s8 o0 ^8 p    trace 01.txt,0,{tracelog "A=%02X ",a}
- n7 j# D* X) p6 X* M/ h0 p    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt . a1 k( @: K* I+ k2 G
    并且在每一行的前面, 写上"A=a "; _" c; S& W; i* _
    "A=%02X ",a为一个C语言printf函数常用的输出格式
" g% ^: A' x2 r% d3 k; Q) P" Y    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 [5 Z$ {* t% w    X表示为大写十六进制数
9 q; S# S1 k$ @/ u) n& {( z
2 p! Q: w6 z8 A8 p. @5 e8 _! ~( {, g. l2 K/ s1 X- x+ J
/ {. S3 P# m( z6 o
内存直接写入指令: maincpu* |6 |$ E" [/ e5 z0 |
    格式为 maincpu.[][]@地址=数据
0 M2 K& w' _! z4 c4 F" k    第一个[]:
% b- c: G! p) J( s' y; ?; s    o 表示ROM地址
  n4 n4 K# s6 M. L6 g    p 表示RAM地址4 P6 j) o. V% ^

( ]+ Y7 G3 \1 G. q& G6 J    第二个[]:2 q! W/ z4 _6 k/ t- y: m  e* X
    d 表示4字节
$ L, R+ d: @0 x: d    w 表示2字节
: C5 i1 j( L  @' L! e    b 表示1字节  }" J1 q6 k+ x; L) c# V$ t

/ q0 s8 L5 [, H) C  Z: I    例子:# Z% K% K8 a! l5 H- V
    maincpu.ob@1234=FF1 ^# ]! C6 z9 q& u( a1 Z
    在ROM地址1234处, 写入FF一个字节
$ d- O9 T4 I: g2 r% P
+ m, a9 ^1 ~' @8 d/ @; F/ p6 ^    maincpu.ow@1234=4E71
, ~! q0 X0 }/ Z( Q$ }, B! a5 _    在ROM地址1234处, 写入4E 71两个字节5 ~! T( m4 n; m6 I% W

$ L2 G: l9 L0 C" Y/ [    maincpu.od@1234=600A4E71. q! x. a6 m1 a7 V
    在ROM地址1234处, 写入60 0A 4E 71四个字节( ~6 Q$ f; ~. _9 y
. O7 S9 d& {+ G" {  c8 q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写3 e3 g& b+ t* N
   
! m: |' ~4 o4 i2 e9 |5 x* F9 S- x& i7 F' s  `2 ~6 p; m6 _3 V  L
其他:. q1 O2 j, Y% o4 Q
    dasm 输出档案名,地址,长度4 F! j; {- b  n) J- B5 q& M/ z" y
    输出程序的反汇编代码
& d5 I7 e1 u4 h  \    例子:9 W9 l3 z3 e4 v
    dasm 01.txt,0,100000
5 ?" ~7 K) y: d. v    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt% H! t* r" O$ q2 q+ T
% p' K* [0 g( J- g7 i( l, g
    softreset
- x9 B7 a6 ~& m# N    游戏重启, 但不重新载入ROM
& k! [- I* e4 P0 _, D. s/ s- i; V" `/ s2 @' w. k* U9 A* Q
    hardreset5 c* c8 X' F0 K$ e2 Y5 u! `! L
    游戏重启, 且重新载入ROM
) f0 ~" I& j  x* z8 w5 I! c7 S/ C& Y3 q& d, E1 s0 ~. k9 E
    snap xxx.png
' W0 p8 @4 f  x% o    截图为xxx.png
# u4 |- v, _, [  A
/ `$ y# n7 y. n6 }) `* s$ m' U  
# r! N8 Q( ^* I1 M  {, t  ( R7 H0 G4 p4 |' ]: m
  
& }+ J! P  A1 [热键:
! n' n0 @, F0 [* X' I) L) `    ~ 中断游戏7 {, F0 m4 T& _1 P$ K6 M
    F5 运行游戏
( H) A' a. `" N! o+ ?    F12 运行游戏且隐藏调试窗口
9 O7 _; c: r3 ]2 I. \/ p    F11 步入, 单步执行, 会进入子程序& S% q+ w, N5 F3 E. `' A
    F10 步过, 单步执行, 不会进入子程序
9 @- M8 M% D6 l7 @) L    Shift+F11 执行到子程序返回
6 `% k# G/ v6 W% s# I    Ctrl+M 内存浏览窗口4 f2 E8 [! I# ^# f5 N
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( I* Z; n* ]& h; I! l7 ^% ?
( a) w, t. p; ~+ ^0 w/ X1 ?
{:4_94:}
$ R, n. Y; h- b9 H$ l
1 t2 F: k! H3 T4 N% J8 N3 [5 Q

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。) O* r) l3 m, H6 F  e+ c

# r8 H" b4 u  |9 Y8 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 | 显示全部楼层
要详细些的东东
/ T2 E9 v' ^6 m0 @11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-13 10:04 , Processed in 1.078125 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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