设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
3 b3 A1 b* B2 S; d
很快速的整理我自己常用的指令" U* {* O+ H4 |5 X9 e* q

5 u9 ~$ Q6 ]9 \( @6 @& C: e  ?$ [+ U{:4_112:}
' t; ~3 N# f  D# D+ i! G
/ M( T: A& i$ e4 }MAME DEBUG常用指令( O, u8 e: C. N1 K) o: ]

1 h+ F/ R6 r' H内存搜寻: ci, cn, cl7 P& R; H$ A# u% a

: `2 W5 }: Q; y& Y    ci6 E* W9 K# e6 A3 s* K. M
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' r' [7 k. v) g
7 j$ ~( @. u" _% K
    cn
% i6 K, ]# V6 C9 l2 D; z    搜寻指令/ e, }+ \5 l6 T" w$ b( ^
    例子:
2 h4 L7 c. j5 {    cn eq,60
) q& ^4 E4 W$ v/ R    搜寻目标等于60 (十六进制)
( l! m' }  g( c1 ?  E6 g        6 J% z# B) e8 v0 s- O, w
    cn eq,#96
% _" u- k' K: t/ \    搜寻目标等于96 (十进制)
, W9 M# z9 P7 a$ ?+ z, i* F2 b7 e' L" S- `  b0 B) y" f
    cn eq/ s/ u, u- d3 ^! u4 H% M
    搜寻目标的数值没有变化
4 E: y9 h) }5 U# K+ T
( L, H. V' z; j) u$ n8 ^0 G    cn ne- v+ j1 _7 w& k# |! g+ f1 w
    搜寻目标的数值有变化- G6 l8 G& X: P
        # P, v- S8 D0 V1 N
    cn +; X) ]6 M, t/ C
    搜寻目标的数值增加
3 z2 a% X1 S! O1 k6 F    / N; O9 T# m- c" k
    cn -
, i) V8 f+ B* p5 `    搜寻目标的数值减少$ Z3 B- D, v8 A
        
6 @/ S2 c( @" E  F* j/ P    cn +,3
4 H% l& |  B( G" G8 a/ o6 ]    搜寻目标的数值增加3 (十六进制)
( ^' E8 b6 _" m7 l7 I7 c* f/ M: A. z& Q4 M
    cl, h3 r9 k+ n- i0 B. w' S
    列出所有搜寻结果  U9 S( }& C* ]% t. n

/ Q: J) g( }! P0 W- q7 Z7 ~    cl xxx.txt) v8 V0 @- }( H& F6 Y
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# I* W, b. s$ E! r9 s+ j
  R$ S+ P* \8 X$ c9 O* K    # S0 T% T8 r. Z$ }2 m% L# ?
内存监视点指令: wp, wplist, wpclear
6 e2 d0 a4 N, G% Y    例子:
( ^5 c# u1 ]: \" S5 N, b+ ?9 Z    wp 1234,1,r9 C+ ^2 \9 d% y, E/ Q( e: i* n1 A
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 N+ f1 g6 [8 `! x; R$ T( k0 _' a/ ]8 @) o" g" n! d
    wp 1234,2,w
" _' R7 f' U, z0 E7 z$ ]. K# t+ |/ s      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度26 N4 D* y3 A1 V+ b$ N9 ]; {
     
0 R( l: f; B, a& x    wp 1234,6,rw
! C/ N2 R% E6 [4 ?      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
" K% |$ w  Y8 Q: d+ S& M. r8 @7 i0 r3 ?5 |( o
    wp 23456,a,w,wpdata == 1
8 k4 |7 P! n. J% i6 h) Y2 T      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1, t  Z9 ^" K0 S

5 B/ \7 m5 [5 c/ |    wplist6 o: Q! F/ u# ]; O6 H) [& o
      列出所有监视点& \: p- Q9 u* r8 @# w# V( Z

" m0 |" q: R% {+ t    wpclear 3! p7 R" `$ X; a( Y) B
      删除编号3的监视点/ S: p2 x) a9 W  I* r# R

& M- ?# N8 [$ f) k2 j0 N    wpclear
7 {1 ]. L5 R- K1 b( V2 V/ g      删除所有监视点
% H, L' k% I  B7 i+ q; T
* {& n, z2 y( E3 r; N      9 c0 n$ h& m* A7 L6 V
3 l/ F. y* q, K( i! X; i4 U% g
程序断点指令: bp, bplist, bpclear
7 z. E% Y) K, u, {    例子:' r& J0 Z) }8 E$ u8 e) K% d
    bp 1234. t/ \- D  W8 j
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
  q! E4 T9 E" K; L7 E
0 a6 M1 `3 h' P. N4 y# f0 e    bp 23456,a0 == 0 && a1 == 0
9 t! r: X$ w' j2 L% B9 E! {      在地址23456下断, 且中断条件为a0等于0以及a1等于0
& ?) B& w. k' A4 H3 k+ {- c- N4 e) Y; {
    bplist
# q* j* J. x2 Y# @' A      列出所有断点
7 E' D5 i/ b& l, E- x9 z. y% q; R  I: ^* |
    bpclear 3
4 u, j1 e' D- L* g      删除编号3的断点% b) r, B( T6 x  d4 d/ w2 C$ R
) M& i  l7 c% V9 G& L
    bpclear* r" ^9 O, }: K' l
      删除所有断点
1 Q1 |4 |7 u$ \9 W: `# J1 S
" T% \9 V. V( o      
6 r- T! p0 p% ]; e      
; _( W& h) j% V# r跟蹤紀錄指令: trace
  y  H* H3 |6 E0 `: M    例子:
1 n4 a4 J9 V4 n    trace 01.txt5 O! Y  N4 \/ h2 |& D
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 M# K3 q- d& M  p! C
5 \" |" j/ ]! H2 F    trace off4 H8 w: {9 o  q( ?
    停止跟踪, 并且关闭文件
+ Y0 y1 T7 W/ I$ v8 G; i" o6 ^* P, d7 p; U  ?& Z
    trace 01.txt,0, N2 L1 I( U9 q7 i, Z0 C) F7 B
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( f$ A( c. P6 b: @; B1 A9 y% C( a$ T5 X6 ~7 b
    trace off,00 [: a$ Z; z; R$ N' G. ~9 v% W3 M
    停止跟踪编号为0的CPU, 并且关闭文件
% f6 C- f" q# f2 _& T$ Q1 z4 F# Z
    trace 01.txt,0,{tracelog "A=%02X ",a}
; V* ]% l5 Y1 k    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt " V8 [) A& A; K, k1 [/ b+ ]
    并且在每一行的前面, 写上"A=a "- d4 y/ K3 \: p, b4 e1 U9 F4 `% x
    "A=%02X ",a为一个C语言printf函数常用的输出格式
+ e! ?' H% E9 D/ y    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, K$ f* U/ ]6 W, c, a$ B0 K    X表示为大写十六进制数
2 v& x2 w4 r* _' X5 t: C" v1 s
* Z  _, }% ?) G. {& a) v+ W# ?8 \7 A( P& R, U
  P% m+ L6 ^0 r$ Y
内存直接写入指令: maincpu
$ ~; ^. j9 c: ]3 H' \  h1 i  Y. ^. d    格式为 maincpu.[][]@地址=数据
; d+ {+ W/ G! Z    第一个[]:' M) W8 S0 i0 ]& r8 X
    o 表示ROM地址+ C5 J/ M6 f( L/ \7 U
    p 表示RAM地址" v7 Z2 ?2 Q+ Q4 d5 r) S
( H# _/ W$ x2 u/ [( L/ ^
    第二个[]:; x5 Z! Y6 X; U6 D, o% B2 @! C
    d 表示4字节
# ^! ]/ q( N3 ^4 m    w 表示2字节& L9 d. N, p" x& i2 u* b
    b 表示1字节
& y4 u. O) [5 }$ v! R' B. f" _* G- L6 Z: i4 m
    例子:& J9 M# |3 Q: {: q$ B- T
    maincpu.ob@1234=FF2 M- `! W5 z& X
    在ROM地址1234处, 写入FF一个字节
6 \+ J% z' i$ g! y) m4 M! R% Z3 T: |) |2 Y, t4 n- \
    maincpu.ow@1234=4E71
% @7 O/ k6 @/ T) P8 n    在ROM地址1234处, 写入4E 71两个字节" u6 ]) A' U( c! i/ ~
$ R0 {% S" l/ ]  o9 G4 D1 e9 M) B
    maincpu.od@1234=600A4E71  v" T7 u5 |1 f1 P) X  u6 D
    在ROM地址1234处, 写入60 0A 4E 71四个字节
; [1 G5 p. F" L0 `( _  F. `# L  M. \0 a/ u
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写+ G$ f4 L2 o9 x6 M
    * C" v; D2 t+ g8 u
  r# u2 T# r! S  t- f' P
其他:
  L9 K* \3 m" g- k: J0 t' ^    dasm 输出档案名,地址,长度+ U6 U6 {( T- `5 v& A/ U
    输出程序的反汇编代码! X/ A  k6 `+ C0 X) H9 z- |
    例子:. L, E7 p- q& S6 R( w7 A% _
    dasm 01.txt,0,1000006 u+ w/ d" Q- \- X
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 x6 ~: K2 p  [+ o* P! Q
  z! l+ ]' Z% @2 s; F; T8 i! U5 I    softreset+ K0 A% f3 c* t9 j8 e- T% l
    游戏重启, 但不重新载入ROM
. o7 D8 v$ G% [5 [4 P0 b  s! T+ S" @+ k, `
    hardreset1 S1 x( A$ f$ t+ r8 e/ h( @# r' \3 v
    游戏重启, 且重新载入ROM6 M* g% R0 j! k- o! V( }

4 u; J  Z7 O5 i4 v* g# K    snap xxx.png. d0 S6 g$ @+ D( Q( S. M7 k
    截图为xxx.png
: q/ X1 B) X# e
- u  Y: C+ t7 T: v% ~  ! c* y+ T& o) Q5 n. ~. S
  
& m* @0 s. c8 j6 v1 P! k7 _  
/ y8 w6 C6 Z# C* O2 C' W热键:
* M6 g! q8 U1 A# @) {    ~ 中断游戏( e# k. f4 M3 S; ]  X
    F5 运行游戏' n9 F. _6 Z# m% X" M
    F12 运行游戏且隐藏调试窗口
$ _1 Q0 X# H8 |7 N7 R    F11 步入, 单步执行, 会进入子程序
6 ], o) P7 s2 J    F10 步过, 单步执行, 不会进入子程序5 ]0 C/ Q3 Z9 h( \9 E
    Shift+F11 执行到子程序返回0 y6 u) P# _) |" q( r9 J1 t* d
    Ctrl+M 内存浏览窗口) U7 t5 w9 w+ K9 r+ i) X  W
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
  J6 m# S+ M" T" M9 L
8 l* C- f5 E4 \2 q/ u' z{:4_94:}
9 {8 `6 n% Z8 @" Q! X* z5 p8 p0 ?; U% M

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
4 {. n, |3 j2 _) O/ m$ {2 T* [
3 ^% r7 ^$ n- u9 l# T* ZPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
4 z" B' ^: S7 d* ~. h/ R9 ~  n11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-7 02:51

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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