设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

1 B1 E- h( D4 M' T3 P很快速的整理我自己常用的指令. m9 Y1 _4 ~6 q: O& `: D4 x: E" w& l
' e, t8 ?; R9 R2 t1 u+ }  ^, x% n
{:4_112:} , k6 y& [8 ~! S/ Y" ?

; y8 B5 T4 ]7 c+ \MAME DEBUG常用指令
8 f4 P  G5 K$ C# s3 V0 d
. L( `, a/ ?5 R( T内存搜寻: ci, cn, cl
# i9 R6 G4 _# s) }( @4 H5 x" V( D0 E# k$ A/ j
    ci
7 p7 A9 L4 V8 ?/ {% g. f# a' ]) c/ M    搜寻任务初始化, 每次搜寻一开始一定要输入这指令. U8 L# ?: x3 A: K/ T$ a  L% d
8 \6 C, E' N/ r8 w1 w
    cn
2 d' w/ Y& a) S( T* R0 O2 r. j2 i8 j2 a; I    搜寻指令
( W2 Y" ~+ r, F% x    例子:8 M. u0 s: p0 ^' T7 R; e6 L
    cn eq,60
. Y5 Q( F: F7 b' a    搜寻目标等于60 (十六进制)1 U0 \/ [4 P; p- @0 z* Y8 W7 r
        
' I1 {. W6 ^9 w- t2 F; X3 o+ E    cn eq,#96" `' [9 G& O6 I- M; y
    搜寻目标等于96 (十进制)% [7 w8 m3 _& ?7 y/ h+ ^

, }+ |) e" D- @+ S. c( w8 y    cn eq
* A5 p( {/ \& F- j2 x7 a    搜寻目标的数值没有变化
) Q& u) K1 Z& [$ }$ c5 ^8 k6 Y
; G& q, X" c" ~1 j/ q    cn ne
+ i3 v0 V, |& U5 z9 [. r0 u    搜寻目标的数值有变化/ f( F0 G; s7 i
        ; F0 m& Q* B: j( t
    cn +, C; M2 ~- `. r4 q; {9 N& d( q7 h
    搜寻目标的数值增加+ @0 y: x6 Q4 o* ?# X& u
    * m- R# L, D4 O" k4 C9 N$ u
    cn -
# c* C( U' }0 s- z7 `    搜寻目标的数值减少( _( J3 U$ C; x% c* e
        
# f' R5 e2 i: K0 ?& b/ `    cn +,3
  A5 X: E( v* O7 r* P    搜寻目标的数值增加3 (十六进制)
" r( x; @5 n' e8 ?
% ?% o  w/ k: f, }' c& e. }    cl
5 G; _* s+ ^% p    列出所有搜寻结果5 K3 h8 S' r8 D- ]5 M+ L# v
2 X: Y8 u( l5 G, t' L3 ~/ A' D/ b
    cl xxx.txt" ]' I: ^$ C0 g4 |" g$ C$ i1 v
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式8 u% @: V' y0 T7 u& w

. x* f- ~1 {, ]* d   
( O& c% b/ `: ~; ?  q- M& H# {, b内存监视点指令: wp, wplist, wpclear; P1 \% T; L! N) J* l
    例子:) S: ^+ M7 H3 D( ^* V0 d
    wp 1234,1,r# ^/ ]+ N0 i2 j- @3 `
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& m+ X( G2 y- p" s$ E$ h# `5 v2 b% [, Y2 V. {1 x$ e9 @/ i" s) v
    wp 1234,2,w9 u! E1 R3 c) I" A( `0 ~$ z) r
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& S2 _5 d6 f+ F* q* r: U     
4 @. }* G6 i" j    wp 1234,6,rw9 t/ L4 S. A( d5 w7 B
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& b: \, j1 w  w. x* K
( m0 H3 s4 V" j, o, E    wp 23456,a,w,wpdata == 1
; [! ~9 |% d+ Q0 y      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& e% Z/ X; x8 C9 J5 f. i7 D

8 X# ]( S+ U7 F2 i    wplist
8 c; g6 b) p. h% k      列出所有监视点( k7 P; w2 x% M9 u& |! @# n

3 ^1 P. s% L: [6 J1 j    wpclear 3$ g& x9 j, |; P8 i5 s% f3 u! S
      删除编号3的监视点
0 \" W: E+ ~" c$ w0 X6 Y
* b; ~; n' p3 t4 ^  q    wpclear
- _; K# \# m* w( L* m' S8 U      删除所有监视点! r. R0 N. P. A# y% o6 L+ r

. ^) R! X0 K, C' ]      
" {: y% {' z" T* @% ]0 w8 A
5 Y: e0 M7 n% U  q程序断点指令: bp, bplist, bpclear3 ^, q# G2 ?* N: n' `$ M+ z5 _  D' J
    例子:
5 R) k, ~# q" o, [1 e    bp 1234; z' h* y$ b( y" M8 |3 k7 X5 c
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 R1 F8 }6 p9 t# {% _5 R$ G
) X7 y" b  f0 n; k    bp 23456,a0 == 0 && a1 == 0
& Q0 P' o: I+ g: a4 m- ~# P      在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 w# l7 G1 e1 i6 s
5 T9 i+ B4 O8 X    bplist
! {) J, k; v8 C3 Q      列出所有断点+ l5 O% Y. }" W% Y1 J" e
  }- d9 D  U. F# h1 v
    bpclear 36 i  A" Q6 |8 ]" W/ r. E
      删除编号3的断点
4 w0 t* @9 k4 h) W) }4 l$ ^, u5 V8 f6 n& J# S; B, L, B
    bpclear% j# y9 _. P) \* T) z8 L" e  c+ f
      删除所有断点
' r; y. ~- a% u. k! m9 |& A& Q2 F# j( A6 C- _# {
      # p* |3 B+ i' c6 R( E0 T
      2 z8 j- X  L  @0 B7 M* j
跟蹤紀錄指令: trace% Y& ^8 E" Y$ ~
    例子:
: ]) B" b( _- h( v# r0 k    trace 01.txt
- {8 e8 l& w3 w$ J: ?& Q' Y    跟踪当前CPU运行的所有代码, 输出至文件01.txt
2 P$ J  }9 k$ c& P( L# K, \: R7 `7 F% O( [' J5 }4 g, Y+ Z
    trace off* L7 Y6 {% y" v$ g+ I' ^$ J
    停止跟踪, 并且关闭文件
, Z9 l: t: j7 s- j
" u7 |8 g9 b/ ]5 X    trace 01.txt,0" O. p3 i( d: h- D2 D9 L
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt5 ?# y- V3 T' D

0 \% g& Y" e: k* V    trace off,0& ~- x3 R5 n$ C$ H- W# a" J
    停止跟踪编号为0的CPU, 并且关闭文件
) I  G7 s/ d6 E% s7 ~' m  C
& u( R+ E2 f* x7 `7 S+ U# B    trace 01.txt,0,{tracelog "A=%02X ",a}
& \) b1 s7 L7 b0 B3 O: Y    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 [4 N7 n1 O4 ]! ^    并且在每一行的前面, 写上"A=a "5 n: {  M3 [# s0 ]) Q
    "A=%02X ",a为一个C语言printf函数常用的输出格式) t: C$ i0 W+ \' f" W6 e3 w3 ?% u* M
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# J( K) b+ M2 _! G    X表示为大写十六进制数
( \+ A! ^/ I% a* v* k9 j
& y# k1 ^5 R4 `# s( g  F7 M" H# ]! e$ _9 t

2 [1 P& _+ z; u9 H3 e内存直接写入指令: maincpu
5 U  n3 t  [% u( |2 X5 P# y    格式为 maincpu.[][]@地址=数据4 _/ ]: q- q7 |
    第一个[]:3 n$ X8 A# W; R4 ^2 ?5 [2 N. h6 r
    o 表示ROM地址
9 b% \6 C( q2 \5 Z: R    p 表示RAM地址/ J1 X. h8 F7 X/ q2 m; Z! c, f; K7 [

2 [6 }) k9 _9 _% k" f" K    第二个[]:
- m7 s. s( N1 N( ^    d 表示4字节
, H. w5 x5 h  P& I8 W' D    w 表示2字节
* W- }8 _6 F  a3 J: d; B, X) m. U    b 表示1字节5 W8 M, H, @/ ^; k. n
# E6 C3 i9 V& S( e9 z) b9 j
    例子:+ W/ c) Y: d, ]; R: `
    maincpu.ob@1234=FF
4 a  O! ?" D- P    在ROM地址1234处, 写入FF一个字节, i! W! h% V/ j8 r9 S, S
( p( X) }1 f6 k! p" F! p0 }7 E
    maincpu.ow@1234=4E71% v. g8 o$ h# y7 l
    在ROM地址1234处, 写入4E 71两个字节
; K5 W; T( ]' h4 {; M$ r+ a1 g6 V  K# n9 C0 p; H
    maincpu.od@1234=600A4E71
& `" r# [3 z; D! D& }    在ROM地址1234处, 写入60 0A 4E 71四个字节
; b  a2 r: E. L/ ^8 P: u& [( Q
" f9 M, W" c+ q0 ^. x+ B( I: a    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
1 O7 X8 x* x/ F/ c$ n! G6 I    $ P% }) _+ \2 t' U/ r; N

2 f3 _' D0 U4 H' C  ?) O其他:1 {, Z; b& ?: O/ @' y$ L# g
    dasm 输出档案名,地址,长度
$ q6 U, \$ H/ [; o/ T9 h- F7 t    输出程序的反汇编代码
) V# a0 Y! \/ m% m1 ~% j    例子:) y: _  H2 [6 h
    dasm 01.txt,0,100000
' v5 n- H; t: ^5 X    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
+ h; X1 P3 k  S0 U% N+ w/ I: r2 ~6 ?* D. y, i9 ?
    softreset. w* ^1 A1 w5 X" s& H3 l# |2 B
    游戏重启, 但不重新载入ROM
- x1 B% t% `% y2 @+ j1 _
: i' E9 Q) i# o6 `$ s# w    hardreset; h1 P3 c7 }+ _) D
    游戏重启, 且重新载入ROM
( ?& k& H  y+ A  G- G! @2 X
# W' G" o; X) R; n! S0 q" p    snap xxx.png5 R! |" D1 j( Z& x1 x5 ^
    截图为xxx.png: [6 _: c! R3 `& Y( T

2 c% J" u) `3 o2 Z- [8 N" N3 ]  
( V- h$ p/ e0 i' P4 t& a7 u  ( R: K8 ]. N, H8 L- Z2 x2 H' Z4 N- h
  
% ]2 l1 p6 g- W2 J9 q: y6 f热键:9 A) \) e7 B* E, O! e
    ~ 中断游戏* {; D; z8 f( V, n, e: M
    F5 运行游戏
3 q8 |+ ]: R, I; W% ]    F12 运行游戏且隐藏调试窗口
) K' P3 ~% ]3 Z! P, u    F11 步入, 单步执行, 会进入子程序
8 c9 y/ N( d  ~" R3 X6 n# u    F10 步过, 单步执行, 不会进入子程序
* i' L! H. U4 O% L3 R4 J    Shift+F11 执行到子程序返回" e& @1 `2 p0 m5 w8 I8 y; g& N
    Ctrl+M 内存浏览窗口
4 T6 s& k( i/ `' a2 U    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 B& ]! Z1 W8 T+ p( j1 B! m. ]; e8 q, C- P) N8 i
{:4_94:}
! X1 i" {3 m2 N4 f+ C$ l- J
" R! w  n' Q! Y6 X0 @

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
" S# ~/ W9 k0 k* f' J% S6 K3 e( ~
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 | 显示全部楼层
要详细些的东东, Y' D3 u% |* b# J* n1 N; \: v
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-2 06:11

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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