设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
* k- p8 x) {2 Q9 z( F1 u
很快速的整理我自己常用的指令
) }4 w* r9 f; ?
) ?$ j. ^. p( X{:4_112:}
) I( c# m( U: s* D' e: m+ }& l5 D% L$ o! N& Y' ]* q3 M' x
MAME DEBUG常用指令
- W+ \$ i7 h% t0 W5 b
$ F( k, T6 u0 l: B内存搜寻: ci, cn, cl3 u8 ^5 s+ E' f* k; M: x( X, s

& f! o' x6 T* J/ c5 E8 ^, a- W* C9 z7 E    ci
2 V7 N) g# D6 J* [8 P4 F. q( O* R    搜寻任务初始化, 每次搜寻一开始一定要输入这指令" K) O" s4 c, i( H
# E/ a$ w6 q0 O! @% W0 ~& P
    cn
+ \+ F" e" ]1 S3 I8 D) ^    搜寻指令$ w0 w$ ^& R7 }' t& X9 n; [; F
    例子:, j$ e- Y2 U7 I9 A5 E0 ]* ^+ R
    cn eq,60
& b# l6 Q7 K" P* U5 S    搜寻目标等于60 (十六进制)9 a' T2 W  l# I8 p$ E' F
        
' ~* Z& _; [; ]* ]* P    cn eq,#96# w6 O# b8 ^6 H- h* q8 @4 q
    搜寻目标等于96 (十进制)( K4 S( ?. y# u% n
6 z4 e/ I% @) u. {7 s, d/ V
    cn eq
6 t* c/ Q7 \1 m& R8 D8 R2 Q/ z  Q# G    搜寻目标的数值没有变化( ~2 i/ c- r6 [" t

: ]2 g; G3 b5 ]+ B- z( i    cn ne" c* ?  F2 K( c
    搜寻目标的数值有变化
& q; v" F0 p% S6 j6 T/ U        " {% h! V* j# R
    cn +7 W; f) a$ M! W7 X
    搜寻目标的数值增加4 d) W0 I' P6 a4 ]9 \' q3 p
    " O4 h6 b$ k1 I' z/ r* I0 X8 J
    cn -/ E  A1 M. C5 N! X" @) @
    搜寻目标的数值减少
. a  q8 M4 ^* u8 c% A0 S        
' w9 Q0 q! r$ \' A+ a    cn +,3
. l. w5 x  |8 L$ [' e    搜寻目标的数值增加3 (十六进制); H% I$ F- j3 r  o0 C" A- R4 y( H
8 f- d! e6 |" o$ m- {
    cl( r) {8 V4 t. |. |( Y
    列出所有搜寻结果* M5 z/ r' B; C) f3 }$ Z
; r4 G- K# C3 Q6 }, {
    cl xxx.txt
# ^6 k' Z) r. Y6 ?, ?    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ X8 [) n2 ~$ S/ ?* Z6 o! b( O4 Z* A) k
    " F" @1 K) S9 \8 y! A  D; m
内存监视点指令: wp, wplist, wpclear
+ f" [1 y% U2 E  X    例子:1 R$ S4 x+ l7 X% F4 e: ^& n) |8 a3 P
    wp 1234,1,r& w+ F8 v; F7 g1 d3 W) ?+ ]' N" W8 Z- L
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度19 x' j0 G+ c7 Z* |* a( `2 U# y
4 U, j) t- |3 x& a3 X
    wp 1234,2,w
1 b8 q2 U1 E* N; L9 R      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" x! s9 M8 L: m9 J* s
     
: K& Q; A4 w  {% ?- p8 `3 U" c    wp 1234,6,rw! M' M5 W2 v* ^  E( `$ D& o
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6  c% X5 t8 O) _1 Y3 ]( c" L
$ E+ D6 z- u% V( y8 x4 T' m: f0 L
    wp 23456,a,w,wpdata == 13 _. J2 \( D1 H" r$ l$ `4 h
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) O' l9 X' P8 G
% E% t6 Q! j; M+ ~* T3 X7 B5 P. m    wplist) I5 Q% u1 ?6 x4 z% u( v* c
      列出所有监视点+ d3 [' {( X3 i' r
; K3 H7 S0 R4 `2 M* Q
    wpclear 3# C* r8 A% K2 R; w
      删除编号3的监视点* R' l; A( t8 T

7 o: X& Q+ ~5 a9 M9 }    wpclear* r* n1 n$ r( O8 ]
      删除所有监视点, ~3 c. ~; q/ T9 p8 \. p8 C

$ h4 ~# x: i1 |- O0 o      
. w1 p2 H/ ?) N2 D9 t" \" `( u3 y. y9 g) ?$ C6 ?# k4 ~
程序断点指令: bp, bplist, bpclear1 J& z- R9 v& \; o
    例子:( }* a% m# `7 s/ G) H+ @9 k3 t
    bp 1234
% q( r3 c, C  c0 Z1 t      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 {8 X( J- E- W/ L

" Z, C6 X) s% D, e& K! _8 n# H) i; ^1 ?    bp 23456,a0 == 0 && a1 == 0
4 ^) ?8 t  ~; L  c, f& c( E      在地址23456下断, 且中断条件为a0等于0以及a1等于0) l( I# I7 |/ }( G. a% x# u

# u  A" w, l. U    bplist
* j4 `+ N6 {* `# m) {      列出所有断点- T  p' D# v# {

/ {, d! G1 h, {5 r! ?# a! u% a    bpclear 30 @1 V! |+ N  y/ b( _! C
      删除编号3的断点
+ L' }4 ?1 @5 O$ ]" W/ H: F1 @, a( M2 z
    bpclear3 X) r& h9 R+ o- c5 d
      删除所有断点
& N; M8 ?+ a! ~6 R- e" z- \) B
- t1 l) E: P+ Y8 N( v3 U' T4 Z      
  q+ x5 x/ m$ u! T      
4 X. t9 R/ F1 R2 M跟蹤紀錄指令: trace7 c$ p; W  H; I4 n7 g% S7 ?% P0 p
    例子:
' O! s2 [6 C( F    trace 01.txt4 G% p, G# M8 I" J: H& n6 o
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
7 |9 f  x9 n/ T+ G4 T: z# v# d9 ^* I# O) w' B$ i5 j5 k" Z+ p# @
    trace off7 o6 }) i3 O# ]- K* E4 q
    停止跟踪, 并且关闭文件: U$ [& j* L1 C0 y: N6 {+ Q
4 s: @0 j3 o6 G7 [3 h- s
    trace 01.txt,0
, o- q" [0 n' M3 J0 s5 ?2 m4 d    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt' s/ ]4 S% D3 \7 V
0 i2 n0 R6 v# r" b
    trace off,0/ w- t. L& J2 V$ |% ]
    停止跟踪编号为0的CPU, 并且关闭文件
4 z2 X1 z  d6 t3 X, {; K) i% P- Y) [. V3 ^4 L+ h
    trace 01.txt,0,{tracelog "A=%02X ",a}! `6 m9 t; \6 J& v* U
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- N! S  K$ Q# ]! @2 U* N    并且在每一行的前面, 写上"A=a "
& y( \3 ]& L% c/ t( N    "A=%02X ",a为一个C语言printf函数常用的输出格式
" |) R7 k+ i# N1 o    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 G7 m# M- U4 j, K    X表示为大写十六进制数
/ J- `9 v+ e3 @  p1 S: G
: H1 b( ~8 t) ?) V6 v. W, b# K" X/ w5 j' P5 w; ^/ X

* M6 F* x- W# \8 h内存直接写入指令: maincpu" {/ t+ U$ C7 w$ T
    格式为 maincpu.[][]@地址=数据
. u& V* `1 @, \% i/ _9 P( a    第一个[]:5 b! J, |7 B2 k( I' [& N' k% V
    o 表示ROM地址
* u, @2 q5 W* Z    p 表示RAM地址
/ T6 F7 N8 d) t
/ X7 ?8 V6 ^, ]/ w/ Z* x    第二个[]:
/ z) r/ J$ |) r  z# w8 A    d 表示4字节) {7 T' p- W4 T; r
    w 表示2字节
' t  ^" ~- k- {& b    b 表示1字节- O, |5 _3 T$ c  y. F' Z2 l( J
8 r  u; k* Y6 W
    例子:
4 x3 X! f8 j( ^% i# ^/ `    maincpu.ob@1234=FF+ U- b) Z- B! A5 m3 y5 I$ \1 ^
    在ROM地址1234处, 写入FF一个字节! z* B2 \, ^0 i9 Y7 G8 x
) Q$ H; i0 o3 a+ x
    maincpu.ow@1234=4E71' c- S% Q4 j2 u
    在ROM地址1234处, 写入4E 71两个字节
) X+ L: N6 n- j7 J+ T6 T0 i6 C+ n8 P* Y- ^5 y/ F: h+ j. |3 g4 M
    maincpu.od@1234=600A4E71: {8 n- R; V5 z. g, k4 M
    在ROM地址1234处, 写入60 0A 4E 71四个字节2 {7 X2 \- s5 x3 k% e

4 E  f# l8 x1 r2 Z4 w+ H    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
, q+ @+ ^6 S) a4 @6 ^% q8 b" f    0 f3 |4 O' j# b# q  N. p
$ j! T: C& R8 f7 j8 ?4 e
其他:8 G9 p7 W6 G7 N, P3 N: c0 c
    dasm 输出档案名,地址,长度
6 O2 a% z( n$ V; G7 H  m: X    输出程序的反汇编代码
" c& j4 r, U# p7 A7 ?    例子:
6 E' I5 w! g5 z- F. u% }    dasm 01.txt,0,100000
5 V" ~% m" w  j8 J. O& C5 }# Y/ D    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 B# o6 P( `3 L5 ]3 U2 c+ V1 S7 W  f
    softreset4 C, x% M8 O, d* b
    游戏重启, 但不重新载入ROM
9 w, {8 L$ V9 O" s2 R3 A( e  J; y- W: R* U, j, W3 ]
    hardreset
) u- Y2 K2 w6 ?+ ?% \8 J; y    游戏重启, 且重新载入ROM
+ J) q+ A  `' I  `, y3 ~* l* @" `
% ?3 l8 d9 M- A" @8 S% Q    snap xxx.png
- O0 X7 M) D6 r# M# W1 K    截图为xxx.png
6 v  {' h; n# h. B8 d
% R' e% Y7 R+ S  
+ ~! R4 z# X+ b4 z( @  
$ U, ?/ _! B! g: o  
- a% @6 J; q( Y  ^8 i: S热键:- Y+ F: C* u. f9 N" k
    ~ 中断游戏
1 u( Y( R5 u- q7 C+ v6 y# O    F5 运行游戏8 o  R- c& l: S* {( K5 |3 W
    F12 运行游戏且隐藏调试窗口4 k; t3 O/ ?/ |$ g: w
    F11 步入, 单步执行, 会进入子程序+ A' l; w( X1 d& W1 x6 F8 J- k
    F10 步过, 单步执行, 不会进入子程序
4 c8 Y3 h8 `( J# g2 i) Z" ~    Shift+F11 执行到子程序返回# b0 C0 l* U% M- Y8 E5 C# M
    Ctrl+M 内存浏览窗口( c! W1 P, j* r
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" T/ s' i+ H+ L7 b$ R
  t/ l! w, d9 j6 l0 t/ P' _0 b{:4_94:} 0 u0 ]8 R5 P( H' y

5 B; n9 g+ B) K# n3 c$ P& S' K! O

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2566 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
/ |1 T  _) \' A! H9 L, `, D9 b/ b6 A" t  Y$ O, Q8 C" g6 \" w
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 | 显示全部楼层
要详细些的东东
( l' c% E; h3 _* g& |, k11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-4 07:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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